From 61e0a3eb3714c78f5b137a07512d975cd7ef91e0 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 17 Apr 2024 06:43:43 +0300 Subject: [PATCH 0001/1074] bobbing xd --- .../viewer/lib/worldrendererThree.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 05d9a76f..b274e170 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -7,6 +7,7 @@ import { renderSign } from '../sign-renderer/' import { chunkPos, sectionPos } from './simpleUtils' import { WorldRendererCommon } from './worldrendererCommon' import * as tweenJs from '@tweenjs/tween.js' +import gsap from 'gsap' import { BloomPass, RenderPass, UnrealBloomPass, EffectComposer, WaterPass, GlitchPass } from 'three-stdlib' function mod (x, n) { @@ -20,6 +21,10 @@ export class WorldRendererThree extends WorldRendererCommon { showChunkBorders = false chunkTextures = new Map() signsCache = new Map() + cameraAnimation = { + rotation: { x: 0, y: 0, z: 0 }, + position: { x: 0, y: 0, z: 0 }, + } as Record<'rotation' | 'position', any> get tilesRendered () { return Object.values(this.sectionObjects).reduce((acc, obj) => acc + (obj as any).tilesCount, 0) @@ -27,6 +32,21 @@ export class WorldRendererThree extends WorldRendererCommon { constructor(public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public camera: THREE.PerspectiveCamera, numWorkers = 4) { super(numWorkers) + + globalThis.animation = () => { + // view bobbing + //@ts-ignore + const bobbingAnimation = gsap.timeline({ + repeat: -1, // Repeat indefinitely + // yoyo: true // Reverse the animation on each repeat + }) + .to(this.cameraAnimation.position, { duration: 0.5, y: "+=0.1", x: "+=0.1" }) // Increase y and z by 0.1 + .to(this.cameraAnimation.rotation, { duration: 0.25, y: "-=0.025" }, '<') // Decrease y rotation by 0.025 + .to(this.cameraAnimation.position, { duration: 0.5, y: "-=0.1", x: "-=0.1" }) // Decrease y and z by 0.05 + .to(this.cameraAnimation.rotation, { duration: 0.25, y: "+=0.025" }, '<') // Increase y rotation by 0.025 + bobbingAnimation.play() + } + } /** @@ -137,9 +157,11 @@ export class WorldRendererThree extends WorldRendererCommon { updateCamera (pos: Vec3 | null, yaw: number, pitch: number): void { if (pos) { + pos = new Vec3(pos.x + this.cameraAnimation.position.x, pos.y + this.cameraAnimation.position.y, pos.z + this.cameraAnimation.position.z) new tweenJs.Tween(this.camera.position).to({ x: pos.x, y: pos.y, z: pos.z }, 50).start() } this.camera.rotation.set(pitch, yaw, 0, 'ZYX') + // this.camera.rotation.set(pitch + this.cameraAnimation.rotation.x, yaw + this.cameraAnimation.rotation.y, 0, 'ZYX') } render () { From dd3c3310071c05d9b8bb9b225be658ed297a57cd Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 17 Apr 2024 07:24:40 +0300 Subject: [PATCH 0002/1074] fix: super critical performance fix for some blocks like snow/soul sand chore: finally a convenient way to debug mesher, now covered by test --- package.json | 3 +- pnpm-lock.yaml | 53 +++++++++++-------- prismarine-viewer/viewer/lib/mesher/models.ts | 42 ++++++++++++--- .../viewer/lib/mesher/test/mesherTester.ts | 53 +++++++++++++++++++ .../viewer/lib/mesher/test/playground.ts | 17 ++++++ .../viewer/lib/mesher/test/tests.test.ts | 48 +++++++++++++++++ server.js | 6 +++ vitest.config.ts | 1 + 8 files changed, 195 insertions(+), 28 deletions(-) create mode 100644 prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts create mode 100644 prismarine-viewer/viewer/lib/mesher/test/playground.ts create mode 100644 prismarine-viewer/viewer/lib/mesher/test/tests.test.ts diff --git a/package.json b/package.json index 6513fbeb..5eafb8f5 100644 --- a/package.json +++ b/package.json @@ -150,7 +150,8 @@ "minecraft-data": "3.62.0", "prismarine-provider-anvil": "github:zardoy/prismarine-provider-anvil#everything", "minecraft-protocol": "github:zardoy/minecraft-protocol#everything", - "react": "^18.2.0" + "react": "^18.2.0", + "prismarine-chunk": "github:zardoy/prismarine-chunk" }, "updateConfig": { "ignoreDependencies": [] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0348616..6d448375 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,7 @@ overrides: prismarine-provider-anvil: github:zardoy/prismarine-provider-anvil#everything minecraft-protocol: github:zardoy/minecraft-protocol#everything react: ^18.2.0 + prismarine-chunk: github:zardoy/prismarine-chunk importers: @@ -94,6 +95,9 @@ importers: google-drive-browserfs: specifier: github:zardoy/browserfs#google-drive version: github.com/zardoy/browserfs/ab58ae8ef00e3a31db01909e365e6cb5188436e0 + gsap: + specifier: ^3.12.5 + version: 3.12.5 iconify-icon: specifier: ^1.0.8 version: 1.0.8 @@ -367,8 +371,8 @@ importers: specifier: github:zardoy/prismarine-block#next-era version: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chunk: - specifier: ^1.22.0 - version: 1.35.0(minecraft-data@3.62.0) + specifier: github:zardoy/prismarine-chunk + version: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) prismarine-schematic: specifier: ^1.2.0 version: 1.2.3 @@ -5645,7 +5649,7 @@ packages: needle: 2.9.1 node-gzip: 1.1.2 node-rsa: 1.1.1 - prismarine-chunk: 1.35.0(minecraft-data@3.62.0) + prismarine-chunk: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -9398,6 +9402,10 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true + /gsap@3.12.5: + resolution: {integrity: sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==} + dev: false + /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -12457,21 +12465,6 @@ packages: prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 - /prismarine-chunk@1.35.0(minecraft-data@3.62.0): - resolution: {integrity: sha512-Q1lElMUle7wWxWdQjbZo3j2/dLNG325j90IcbbMmBTnHdQSWIjWFe792XOz3RVBlvrhRJEiZk38S6/eQTQ9esw==} - engines: {node: '>=14'} - dependencies: - prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) - prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 - prismarine-nbt: 2.2.1 - prismarine-registry: 1.7.0 - smart-buffer: 4.2.0 - uint4: 0.1.2 - vec3: 0.1.8 - xxhash-wasm: 0.4.2 - transitivePeerDependencies: - - minecraft-data - /prismarine-entity@2.3.1: resolution: {integrity: sha512-HOv8l7IetHNf4hwZ7V/W4vM3GNl+e6VCtKDkH9h02TRq7jWngsggKtJV+VanCce/sNwtJUhJDjORGs728ep4MA==} dependencies: @@ -16083,7 +16076,7 @@ packages: prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chat: 1.9.1 - prismarine-chunk: 1.35.0(minecraft-data@3.62.0) + prismarine-chunk: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -16128,7 +16121,7 @@ packages: version: 1.3.0 dependencies: minecraft-data: 3.62.0 - prismarine-chunk: 1.35.0(minecraft-data@3.62.0) + prismarine-chunk: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) random-seed: 0.3.0 vec3: 0.1.8 dev: false @@ -16185,13 +16178,31 @@ packages: prismarine-nbt: 2.2.1 prismarine-registry: 1.7.0 + github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0): + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b} + id: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b + name: prismarine-chunk + version: 1.35.0 + engines: {node: '>=14'} + dependencies: + prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) + prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-nbt: 2.5.0 + prismarine-registry: 1.7.0 + smart-buffer: 4.2.0 + uint4: 0.1.2 + vec3: 0.1.8 + xxhash-wasm: 0.4.2 + transitivePeerDependencies: + - minecraft-data + github.com/zardoy/prismarine-provider-anvil/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0): resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f} id: github.com/zardoy/prismarine-provider-anvil/0ddcd9d48574113308e1fbebef60816aced0846f name: prismarine-provider-anvil version: 2.7.0 dependencies: - prismarine-chunk: 1.35.0(minecraft-data@3.62.0) + prismarine-chunk: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) prismarine-nbt: 2.5.0 uint4: 0.1.2 vec3: 0.1.8 diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index c6f35f31..9b3a1ecd 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -5,6 +5,7 @@ import { Block } from 'prismarine-block' const tints: any = {} let blockStates: BlockStatesOutput +let needTiles = false let tintsData try { @@ -118,6 +119,15 @@ function getLiquidRenderHeight (world, block, type, pos) { return ((block.metadata >= 8 ? 8 : 7 - block.metadata) + 1) / 9 } +const isCube = (block) => { + if (!block) return false + if (block.isCube) return true + if (!block.variant) block.variant = getModelVariants(block) + return block.variant.every(v => v?.model?.elements.every(e => { + return e.from[0] === 0 && e.from[1] === 0 && e.from[2] === 0 && e.to[0] === 16 && e.to[1] === 16 && e.to[2] === 16 + })) +} + function renderLiquid (world, cursor, texture, type, biome, water, attr) { const heights: number[] = [] for (let z = -1; z <= 1; z++) { @@ -140,7 +150,7 @@ function renderLiquid (world, cursor, texture, type, biome, water, attr) { const neighbor = world.getBlock(cursor.offset(...dir)) if (!neighbor) continue if (neighbor.type === type) continue - if ((neighbor.isCube && !isUp) || neighbor.material === 'plant' || neighbor.getProperties().waterlogged) continue + if ((isCube(neighbor) && !isUp) || neighbor.material === 'plant' || neighbor.getProperties().waterlogged) continue let tint = [1, 1, 1] if (water) { @@ -238,6 +248,8 @@ function buildRotationMatrix (axis, degree) { return matrix } +let needRecompute = false + function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr, globalMatrix, globalShift, block: Block, biome) { const position = cursor // const key = `${position.x},${position.y},${position.z}` @@ -253,9 +265,9 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr const neighbor = world.getBlock(cursor.plus(new Vec3(...dir))) if (neighbor) { if (cullIfIdentical && neighbor.type === block.type) continue - if (!neighbor.transparent && neighbor.isCube) continue + if (!neighbor.transparent && isCube(neighbor)) continue } else { - continue + needRecompute = true } } @@ -378,6 +390,18 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr attr.colors.push(baseLight * tint[0] * light, baseLight * tint[1] * light, baseLight * tint[2] * light) } + if (needTiles) { + attr.tiles[`${cursor.x},${cursor.y},${cursor.z}`] ??= { + block: block.name, + faces: [], + } + attr.tiles[`${cursor.x},${cursor.y},${cursor.z}`].faces.push({ + face, + neighbor: `${neighborPos.x},${neighborPos.y},${neighborPos.z}`, + // texture: eFace.texture.name, + }) + } + if (doAO && aos[0] + aos[3] >= aos[1] + aos[2]) { attr.indices.push( ndx, ndx + 3, ndx + 2, @@ -406,6 +430,7 @@ export function getSectionGeometry (sx, sy, sz, world: World) { t_colors: [], t_uvs: [], indices: [], + tiles: {}, // todo this can be removed here signs: {} } as Record @@ -438,11 +463,15 @@ export function getSectionGeometry (sx, sy, sz, world: World) { for (const variant of block.variant) { if (!variant || !variant.model) continue - if (block.name === 'water') { + const isWaterlogged = block.getProperties().waterlogged + if (block.name === 'water' || isWaterlogged) { + const waterBlock = block.name === 'water' ? block : { name: 'water', metadata: 0 } + const variant = getModelVariants(waterBlock as any)[0] renderLiquid(world, cursor, variant.model.textures.particle, block.type, biome, true, attr) } else if (block.name === 'lava') { renderLiquid(world, cursor, variant.model.textures.particle, block.type, biome, false, attr) - } else { + } + if (block.name !== "water") { let globalMatrix = null as any let globalShift = null as any @@ -555,6 +584,7 @@ function getModelVariants (block: import('prismarine-block').Block) { return [] } -export const setRendererData = (_blockStates: BlockStatesOutput | null) => { +export const setRendererData = (_blockStates: BlockStatesOutput | null, _needTiles = false) => { blockStates = _blockStates! + needTiles = _needTiles } diff --git a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts new file mode 100644 index 00000000..15ec165b --- /dev/null +++ b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts @@ -0,0 +1,53 @@ +import { setRendererData, getSectionGeometry } from '../models' +import { World as MesherWorld } from '../world' +import ChunkLoader from 'prismarine-chunk' +import { Vec3 } from 'vec3' +import MinecraftData from 'minecraft-data' + +export const setup = (version, initialBlocks: [number[], string][]) => { + const mcData = MinecraftData(version) + const blockStates = require(`../../../../public/blocksStates/${version}.json`) + const mesherWorld = new MesherWorld(version) + const Chunk = ChunkLoader(version) + const chunk1 = new Chunk(undefined as any) + + const pos = new Vec3(2, 5, 2) + for (const [addPos, name] of initialBlocks) { + chunk1.setBlockStateId(pos.offset(addPos[0], addPos[1], addPos[2]), mcData.blocksByName[name].defaultState!) + } + + const getGeometry = () => { + const sectionGeometry = getSectionGeometry(0, 0, 0, mesherWorld) + const centerFaces = sectionGeometry.tiles[`${pos.x},${pos.y},${pos.z}`]?.faces.length ?? 0 + const totalTiles = Object.values(sectionGeometry.tiles).reduce((acc, val: any) => acc + val.faces.length, 0) + const centerTileNeighbors = Object.entries(sectionGeometry.tiles).reduce((acc, [key, val]: any) => { + return acc + val.faces.filter((face: any) => face.neighbor === `${pos.x},${pos.y},${pos.z}`).length + }, 0) + return { + centerFaces, + totalTiles, + centerTileNeighbors + } + } + + setRendererData(blockStates, true) + mesherWorld.addColumn(0, 0, chunk1.toJson()) + + return { + mesherWorld, + getGeometry, + pos, + mcData + } +} + +// surround it +const addPositions = [ + // [[0, 0, 0], 'diamond_block'], + [[1, 0, 0], 'stone'], + [[-1, 0, 0], 'stone'], + [[0, 1, 0], 'stone'], + [[0, -1, 0], 'stone'], + [[0, 0, 1], 'stone'], + [[0, 0, -1], 'stone'], +] diff --git a/prismarine-viewer/viewer/lib/mesher/test/playground.ts b/prismarine-viewer/viewer/lib/mesher/test/playground.ts new file mode 100644 index 00000000..6e9e7b10 --- /dev/null +++ b/prismarine-viewer/viewer/lib/mesher/test/playground.ts @@ -0,0 +1,17 @@ +import { setup } from './mesherTester' + +const addPositions = [ + // [[0, 0, 0], 'diamond_block'], + [[1, 0, 0], 'stone'], + [[-1, 0, 0], 'stone'], + [[0, 1, 0], 'stone'], + [[0, -1, 0], 'stone'], + [[0, 0, 1], 'stone'], + [[0, 0, -1], 'stone'], +] as const + +const { mesherWorld, getGeometry, pos, mcData } = setup('1.18.1', addPositions as any) + +// mesherWorld.setBlockStateId(pos, mcData.blocksByName.soul_sand.defaultState) + +// console.log(getGeometry().centerTileNeighbors) diff --git a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts new file mode 100644 index 00000000..67439b1d --- /dev/null +++ b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts @@ -0,0 +1,48 @@ +import { test, expect } from 'vitest' +import { setup } from './mesherTester' + +const version = '1.18.1' + +const addPositions = [ + // [[0, 0, 0], 'diamond_block'], + [[1, 0, 0], 'stone'], + [[-1, 0, 0], 'stone'], + [[0, 1, 0], 'stone'], + [[0, -1, 0], 'stone'], + [[0, 0, 1], 'stone'], + [[0, 0, -1], 'stone'], +] as const + +test('Known blocks are not rendered', () => { + const { mesherWorld, getGeometry, pos, mcData } = setup(version, addPositions as any) + + let time = 0 + let times = 0 + const invalidBlocks = {}/* as {[number, number]} */ + for (const block of mcData.blocksArray) { + if (block.maxStateId! - block.minStateId! > 100) continue + for (let i = block.minStateId!; i <= block.maxStateId!; i++) { + if (block.transparent) continue + mesherWorld.setBlockStateId(pos, i) + const start = performance.now() + const { centerFaces, totalTiles, centerTileNeighbors } = getGeometry() + time += performance.now() - start + times++ + if (centerFaces === 0 && centerTileNeighbors !== 0) { + if (invalidBlocks[block.name]) continue + invalidBlocks[block.name] = [i - block.minStateId!, centerTileNeighbors] + // console.log('INVALID', block.name, centerTileNeighbors, i - block.minStateId) + } + } + } + console.log('Average time', time / times) + // Fully expected + expect(invalidBlocks).toMatchInlineSnapshot(` + { + "powder_snow": [ + 0, + 6, + ], + } + `) +}) diff --git a/server.js b/server.js index da40e163..d757024b 100644 --- a/server.js +++ b/server.js @@ -40,6 +40,12 @@ app.get('/config.json', (req, res, next) => { 'defaultProxy': '', // use current url (this server) }) }) +// add headers to enable shared array buffer +app.use((req, res, next) => { + res.setHeader('Cross-Origin-Opener-Policy', 'same-origin') + res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp') + next() +}) app.use(express.static(path.join(__dirname, './dist'))) const portArg = process.argv.indexOf('--port') diff --git a/vitest.config.ts b/vitest.config.ts index 9a992a52..f6d2416c 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -6,6 +6,7 @@ export default defineConfig({ include: [ '../../src/botUtils.test.ts', '../../src/markdownToFormattedText.test.ts', + 'lib/mesher/test/tests.test.ts', 'sign-renderer/tests.test.ts' ], }, From 17e13d30b12f1cbb61b7f410a920cf80f224cfb8 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 17 Apr 2024 08:03:49 +0300 Subject: [PATCH 0003/1074] add mc data types --- package.json | 2 +- scripts/genMcDataTypes.ts | 13 +++++++++++++ src/mcDataTypes.ts | 6 ++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 scripts/genMcDataTypes.ts create mode 100644 src/mcDataTypes.ts diff --git a/package.json b/package.json index 5eafb8f5..13e5cd36 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "start": "node scripts/build.js copyFilesDev && node scripts/prepareData.mjs && node esbuild.mjs --watch", "start-watch-script": "nodemon -w esbuild.mjs --watch", "build": "node scripts/build.js copyFiles && node scripts/prepareData.mjs -f && node esbuild.mjs --minify --prod", - "check-build": "tsc && pnpm test-unit && pnpm build", + "check-build": "tsc && pnpm test-unit --run && pnpm build", "test:cypress": "cypress run", "test-unit": "vitest", "test:e2e": "start-test http-get://localhost:8080 test:cypress", diff --git a/scripts/genMcDataTypes.ts b/scripts/genMcDataTypes.ts new file mode 100644 index 00000000..f5b15069 --- /dev/null +++ b/scripts/genMcDataTypes.ts @@ -0,0 +1,13 @@ +import minecraftData from 'minecraft-data' +import fs from 'fs' + +const data = minecraftData('1.20.1') + +let types = '' +types += `\nexport type BlockNames = ${Object.keys(data.blocksByName).map(blockName => `'${blockName}'`).join(' | ')};` +types += `\nexport type ItemNames = ${Object.keys(data.itemsByName).map(blockName => `'${blockName}'`).join(' | ')};` +types += `\nexport type EntityNames = ${Object.keys(data.entitiesByName).map(blockName => `'${blockName}'`).join(' | ')};` +types += `\nexport type BiomesNames = ${Object.keys(data.biomesByName).map(blockName => `'${blockName}'`).join(' | ')};` +types += `\nexport type EnchantmentNames = ${Object.keys(data.enchantmentsByName).map(blockName => `'${blockName}'`).join(' | ')};` + +fs.writeFileSync('./src/mcDataTypes.ts', types, 'utf8') diff --git a/src/mcDataTypes.ts b/src/mcDataTypes.ts new file mode 100644 index 00000000..8f4f05e3 --- /dev/null +++ b/src/mcDataTypes.ts @@ -0,0 +1,6 @@ + +export type BlockNames = 'air' | 'stone' | 'granite' | 'polished_granite' | 'diorite' | 'polished_diorite' | 'andesite' | 'polished_andesite' | 'grass_block' | 'dirt' | 'coarse_dirt' | 'podzol' | 'cobblestone' | 'oak_planks' | 'spruce_planks' | 'birch_planks' | 'jungle_planks' | 'acacia_planks' | 'cherry_planks' | 'dark_oak_planks' | 'mangrove_planks' | 'bamboo_planks' | 'bamboo_mosaic' | 'oak_sapling' | 'spruce_sapling' | 'birch_sapling' | 'jungle_sapling' | 'acacia_sapling' | 'cherry_sapling' | 'dark_oak_sapling' | 'mangrove_propagule' | 'bedrock' | 'water' | 'lava' | 'sand' | 'suspicious_sand' | 'red_sand' | 'gravel' | 'suspicious_gravel' | 'gold_ore' | 'deepslate_gold_ore' | 'iron_ore' | 'deepslate_iron_ore' | 'coal_ore' | 'deepslate_coal_ore' | 'nether_gold_ore' | 'oak_log' | 'spruce_log' | 'birch_log' | 'jungle_log' | 'acacia_log' | 'cherry_log' | 'dark_oak_log' | 'mangrove_log' | 'mangrove_roots' | 'muddy_mangrove_roots' | 'bamboo_block' | 'stripped_spruce_log' | 'stripped_birch_log' | 'stripped_jungle_log' | 'stripped_acacia_log' | 'stripped_cherry_log' | 'stripped_dark_oak_log' | 'stripped_oak_log' | 'stripped_mangrove_log' | 'stripped_bamboo_block' | 'oak_wood' | 'spruce_wood' | 'birch_wood' | 'jungle_wood' | 'acacia_wood' | 'cherry_wood' | 'dark_oak_wood' | 'mangrove_wood' | 'stripped_oak_wood' | 'stripped_spruce_wood' | 'stripped_birch_wood' | 'stripped_jungle_wood' | 'stripped_acacia_wood' | 'stripped_cherry_wood' | 'stripped_dark_oak_wood' | 'stripped_mangrove_wood' | 'oak_leaves' | 'spruce_leaves' | 'birch_leaves' | 'jungle_leaves' | 'acacia_leaves' | 'cherry_leaves' | 'dark_oak_leaves' | 'mangrove_leaves' | 'azalea_leaves' | 'flowering_azalea_leaves' | 'sponge' | 'wet_sponge' | 'glass' | 'lapis_ore' | 'deepslate_lapis_ore' | 'lapis_block' | 'dispenser' | 'sandstone' | 'chiseled_sandstone' | 'cut_sandstone' | 'note_block' | 'white_bed' | 'orange_bed' | 'magenta_bed' | 'light_blue_bed' | 'yellow_bed' | 'lime_bed' | 'pink_bed' | 'gray_bed' | 'light_gray_bed' | 'cyan_bed' | 'purple_bed' | 'blue_bed' | 'brown_bed' | 'green_bed' | 'red_bed' | 'black_bed' | 'powered_rail' | 'detector_rail' | 'sticky_piston' | 'cobweb' | 'grass' | 'fern' | 'dead_bush' | 'seagrass' | 'tall_seagrass' | 'piston' | 'piston_head' | 'white_wool' | 'orange_wool' | 'magenta_wool' | 'light_blue_wool' | 'yellow_wool' | 'lime_wool' | 'pink_wool' | 'gray_wool' | 'light_gray_wool' | 'cyan_wool' | 'purple_wool' | 'blue_wool' | 'brown_wool' | 'green_wool' | 'red_wool' | 'black_wool' | 'moving_piston' | 'dandelion' | 'torchflower' | 'poppy' | 'blue_orchid' | 'allium' | 'azure_bluet' | 'red_tulip' | 'orange_tulip' | 'white_tulip' | 'pink_tulip' | 'oxeye_daisy' | 'cornflower' | 'wither_rose' | 'lily_of_the_valley' | 'brown_mushroom' | 'red_mushroom' | 'gold_block' | 'iron_block' | 'bricks' | 'tnt' | 'bookshelf' | 'chiseled_bookshelf' | 'mossy_cobblestone' | 'obsidian' | 'torch' | 'wall_torch' | 'fire' | 'soul_fire' | 'spawner' | 'oak_stairs' | 'chest' | 'redstone_wire' | 'diamond_ore' | 'deepslate_diamond_ore' | 'diamond_block' | 'crafting_table' | 'wheat' | 'farmland' | 'furnace' | 'oak_sign' | 'spruce_sign' | 'birch_sign' | 'acacia_sign' | 'cherry_sign' | 'jungle_sign' | 'dark_oak_sign' | 'mangrove_sign' | 'bamboo_sign' | 'oak_door' | 'ladder' | 'rail' | 'cobblestone_stairs' | 'oak_wall_sign' | 'spruce_wall_sign' | 'birch_wall_sign' | 'acacia_wall_sign' | 'cherry_wall_sign' | 'jungle_wall_sign' | 'dark_oak_wall_sign' | 'mangrove_wall_sign' | 'bamboo_wall_sign' | 'oak_hanging_sign' | 'spruce_hanging_sign' | 'birch_hanging_sign' | 'acacia_hanging_sign' | 'cherry_hanging_sign' | 'jungle_hanging_sign' | 'dark_oak_hanging_sign' | 'crimson_hanging_sign' | 'warped_hanging_sign' | 'mangrove_hanging_sign' | 'bamboo_hanging_sign' | 'oak_wall_hanging_sign' | 'spruce_wall_hanging_sign' | 'birch_wall_hanging_sign' | 'acacia_wall_hanging_sign' | 'cherry_wall_hanging_sign' | 'jungle_wall_hanging_sign' | 'dark_oak_wall_hanging_sign' | 'mangrove_wall_hanging_sign' | 'crimson_wall_hanging_sign' | 'warped_wall_hanging_sign' | 'bamboo_wall_hanging_sign' | 'lever' | 'stone_pressure_plate' | 'iron_door' | 'oak_pressure_plate' | 'spruce_pressure_plate' | 'birch_pressure_plate' | 'jungle_pressure_plate' | 'acacia_pressure_plate' | 'cherry_pressure_plate' | 'dark_oak_pressure_plate' | 'mangrove_pressure_plate' | 'bamboo_pressure_plate' | 'redstone_ore' | 'deepslate_redstone_ore' | 'redstone_torch' | 'redstone_wall_torch' | 'stone_button' | 'snow' | 'ice' | 'snow_block' | 'cactus' | 'clay' | 'sugar_cane' | 'jukebox' | 'oak_fence' | 'pumpkin' | 'netherrack' | 'soul_sand' | 'soul_soil' | 'basalt' | 'polished_basalt' | 'soul_torch' | 'soul_wall_torch' | 'glowstone' | 'nether_portal' | 'carved_pumpkin' | 'jack_o_lantern' | 'cake' | 'repeater' | 'white_stained_glass' | 'orange_stained_glass' | 'magenta_stained_glass' | 'light_blue_stained_glass' | 'yellow_stained_glass' | 'lime_stained_glass' | 'pink_stained_glass' | 'gray_stained_glass' | 'light_gray_stained_glass' | 'cyan_stained_glass' | 'purple_stained_glass' | 'blue_stained_glass' | 'brown_stained_glass' | 'green_stained_glass' | 'red_stained_glass' | 'black_stained_glass' | 'oak_trapdoor' | 'spruce_trapdoor' | 'birch_trapdoor' | 'jungle_trapdoor' | 'acacia_trapdoor' | 'cherry_trapdoor' | 'dark_oak_trapdoor' | 'mangrove_trapdoor' | 'bamboo_trapdoor' | 'stone_bricks' | 'mossy_stone_bricks' | 'cracked_stone_bricks' | 'chiseled_stone_bricks' | 'packed_mud' | 'mud_bricks' | 'infested_stone' | 'infested_cobblestone' | 'infested_stone_bricks' | 'infested_mossy_stone_bricks' | 'infested_cracked_stone_bricks' | 'infested_chiseled_stone_bricks' | 'brown_mushroom_block' | 'red_mushroom_block' | 'mushroom_stem' | 'iron_bars' | 'chain' | 'glass_pane' | 'melon' | 'attached_pumpkin_stem' | 'attached_melon_stem' | 'pumpkin_stem' | 'melon_stem' | 'vine' | 'glow_lichen' | 'oak_fence_gate' | 'brick_stairs' | 'stone_brick_stairs' | 'mud_brick_stairs' | 'mycelium' | 'lily_pad' | 'nether_bricks' | 'nether_brick_fence' | 'nether_brick_stairs' | 'nether_wart' | 'enchanting_table' | 'brewing_stand' | 'cauldron' | 'water_cauldron' | 'lava_cauldron' | 'powder_snow_cauldron' | 'end_portal' | 'end_portal_frame' | 'end_stone' | 'dragon_egg' | 'redstone_lamp' | 'cocoa' | 'sandstone_stairs' | 'emerald_ore' | 'deepslate_emerald_ore' | 'ender_chest' | 'tripwire_hook' | 'tripwire' | 'emerald_block' | 'spruce_stairs' | 'birch_stairs' | 'jungle_stairs' | 'command_block' | 'beacon' | 'cobblestone_wall' | 'mossy_cobblestone_wall' | 'flower_pot' | 'potted_torchflower' | 'potted_oak_sapling' | 'potted_spruce_sapling' | 'potted_birch_sapling' | 'potted_jungle_sapling' | 'potted_acacia_sapling' | 'potted_cherry_sapling' | 'potted_dark_oak_sapling' | 'potted_mangrove_propagule' | 'potted_fern' | 'potted_dandelion' | 'potted_poppy' | 'potted_blue_orchid' | 'potted_allium' | 'potted_azure_bluet' | 'potted_red_tulip' | 'potted_orange_tulip' | 'potted_white_tulip' | 'potted_pink_tulip' | 'potted_oxeye_daisy' | 'potted_cornflower' | 'potted_lily_of_the_valley' | 'potted_wither_rose' | 'potted_red_mushroom' | 'potted_brown_mushroom' | 'potted_dead_bush' | 'potted_cactus' | 'carrots' | 'potatoes' | 'oak_button' | 'spruce_button' | 'birch_button' | 'jungle_button' | 'acacia_button' | 'cherry_button' | 'dark_oak_button' | 'mangrove_button' | 'bamboo_button' | 'skeleton_skull' | 'skeleton_wall_skull' | 'wither_skeleton_skull' | 'wither_skeleton_wall_skull' | 'zombie_head' | 'zombie_wall_head' | 'player_head' | 'player_wall_head' | 'creeper_head' | 'creeper_wall_head' | 'dragon_head' | 'dragon_wall_head' | 'piglin_head' | 'piglin_wall_head' | 'anvil' | 'chipped_anvil' | 'damaged_anvil' | 'trapped_chest' | 'light_weighted_pressure_plate' | 'heavy_weighted_pressure_plate' | 'comparator' | 'daylight_detector' | 'redstone_block' | 'nether_quartz_ore' | 'hopper' | 'quartz_block' | 'chiseled_quartz_block' | 'quartz_pillar' | 'quartz_stairs' | 'activator_rail' | 'dropper' | 'white_terracotta' | 'orange_terracotta' | 'magenta_terracotta' | 'light_blue_terracotta' | 'yellow_terracotta' | 'lime_terracotta' | 'pink_terracotta' | 'gray_terracotta' | 'light_gray_terracotta' | 'cyan_terracotta' | 'purple_terracotta' | 'blue_terracotta' | 'brown_terracotta' | 'green_terracotta' | 'red_terracotta' | 'black_terracotta' | 'white_stained_glass_pane' | 'orange_stained_glass_pane' | 'magenta_stained_glass_pane' | 'light_blue_stained_glass_pane' | 'yellow_stained_glass_pane' | 'lime_stained_glass_pane' | 'pink_stained_glass_pane' | 'gray_stained_glass_pane' | 'light_gray_stained_glass_pane' | 'cyan_stained_glass_pane' | 'purple_stained_glass_pane' | 'blue_stained_glass_pane' | 'brown_stained_glass_pane' | 'green_stained_glass_pane' | 'red_stained_glass_pane' | 'black_stained_glass_pane' | 'acacia_stairs' | 'cherry_stairs' | 'dark_oak_stairs' | 'mangrove_stairs' | 'bamboo_stairs' | 'bamboo_mosaic_stairs' | 'slime_block' | 'barrier' | 'light' | 'iron_trapdoor' | 'prismarine' | 'prismarine_bricks' | 'dark_prismarine' | 'prismarine_stairs' | 'prismarine_brick_stairs' | 'dark_prismarine_stairs' | 'prismarine_slab' | 'prismarine_brick_slab' | 'dark_prismarine_slab' | 'sea_lantern' | 'hay_block' | 'white_carpet' | 'orange_carpet' | 'magenta_carpet' | 'light_blue_carpet' | 'yellow_carpet' | 'lime_carpet' | 'pink_carpet' | 'gray_carpet' | 'light_gray_carpet' | 'cyan_carpet' | 'purple_carpet' | 'blue_carpet' | 'brown_carpet' | 'green_carpet' | 'red_carpet' | 'black_carpet' | 'terracotta' | 'coal_block' | 'packed_ice' | 'sunflower' | 'lilac' | 'rose_bush' | 'peony' | 'tall_grass' | 'large_fern' | 'white_banner' | 'orange_banner' | 'magenta_banner' | 'light_blue_banner' | 'yellow_banner' | 'lime_banner' | 'pink_banner' | 'gray_banner' | 'light_gray_banner' | 'cyan_banner' | 'purple_banner' | 'blue_banner' | 'brown_banner' | 'green_banner' | 'red_banner' | 'black_banner' | 'white_wall_banner' | 'orange_wall_banner' | 'magenta_wall_banner' | 'light_blue_wall_banner' | 'yellow_wall_banner' | 'lime_wall_banner' | 'pink_wall_banner' | 'gray_wall_banner' | 'light_gray_wall_banner' | 'cyan_wall_banner' | 'purple_wall_banner' | 'blue_wall_banner' | 'brown_wall_banner' | 'green_wall_banner' | 'red_wall_banner' | 'black_wall_banner' | 'red_sandstone' | 'chiseled_red_sandstone' | 'cut_red_sandstone' | 'red_sandstone_stairs' | 'oak_slab' | 'spruce_slab' | 'birch_slab' | 'jungle_slab' | 'acacia_slab' | 'cherry_slab' | 'dark_oak_slab' | 'mangrove_slab' | 'bamboo_slab' | 'bamboo_mosaic_slab' | 'stone_slab' | 'smooth_stone_slab' | 'sandstone_slab' | 'cut_sandstone_slab' | 'petrified_oak_slab' | 'cobblestone_slab' | 'brick_slab' | 'stone_brick_slab' | 'mud_brick_slab' | 'nether_brick_slab' | 'quartz_slab' | 'red_sandstone_slab' | 'cut_red_sandstone_slab' | 'purpur_slab' | 'smooth_stone' | 'smooth_sandstone' | 'smooth_quartz' | 'smooth_red_sandstone' | 'spruce_fence_gate' | 'birch_fence_gate' | 'jungle_fence_gate' | 'acacia_fence_gate' | 'cherry_fence_gate' | 'dark_oak_fence_gate' | 'mangrove_fence_gate' | 'bamboo_fence_gate' | 'spruce_fence' | 'birch_fence' | 'jungle_fence' | 'acacia_fence' | 'cherry_fence' | 'dark_oak_fence' | 'mangrove_fence' | 'bamboo_fence' | 'spruce_door' | 'birch_door' | 'jungle_door' | 'acacia_door' | 'cherry_door' | 'dark_oak_door' | 'mangrove_door' | 'bamboo_door' | 'end_rod' | 'chorus_plant' | 'chorus_flower' | 'purpur_block' | 'purpur_pillar' | 'purpur_stairs' | 'end_stone_bricks' | 'torchflower_crop' | 'pitcher_crop' | 'pitcher_plant' | 'beetroots' | 'dirt_path' | 'end_gateway' | 'repeating_command_block' | 'chain_command_block' | 'frosted_ice' | 'magma_block' | 'nether_wart_block' | 'red_nether_bricks' | 'bone_block' | 'structure_void' | 'observer' | 'shulker_box' | 'white_shulker_box' | 'orange_shulker_box' | 'magenta_shulker_box' | 'light_blue_shulker_box' | 'yellow_shulker_box' | 'lime_shulker_box' | 'pink_shulker_box' | 'gray_shulker_box' | 'light_gray_shulker_box' | 'cyan_shulker_box' | 'purple_shulker_box' | 'blue_shulker_box' | 'brown_shulker_box' | 'green_shulker_box' | 'red_shulker_box' | 'black_shulker_box' | 'white_glazed_terracotta' | 'orange_glazed_terracotta' | 'magenta_glazed_terracotta' | 'light_blue_glazed_terracotta' | 'yellow_glazed_terracotta' | 'lime_glazed_terracotta' | 'pink_glazed_terracotta' | 'gray_glazed_terracotta' | 'light_gray_glazed_terracotta' | 'cyan_glazed_terracotta' | 'purple_glazed_terracotta' | 'blue_glazed_terracotta' | 'brown_glazed_terracotta' | 'green_glazed_terracotta' | 'red_glazed_terracotta' | 'black_glazed_terracotta' | 'white_concrete' | 'orange_concrete' | 'magenta_concrete' | 'light_blue_concrete' | 'yellow_concrete' | 'lime_concrete' | 'pink_concrete' | 'gray_concrete' | 'light_gray_concrete' | 'cyan_concrete' | 'purple_concrete' | 'blue_concrete' | 'brown_concrete' | 'green_concrete' | 'red_concrete' | 'black_concrete' | 'white_concrete_powder' | 'orange_concrete_powder' | 'magenta_concrete_powder' | 'light_blue_concrete_powder' | 'yellow_concrete_powder' | 'lime_concrete_powder' | 'pink_concrete_powder' | 'gray_concrete_powder' | 'light_gray_concrete_powder' | 'cyan_concrete_powder' | 'purple_concrete_powder' | 'blue_concrete_powder' | 'brown_concrete_powder' | 'green_concrete_powder' | 'red_concrete_powder' | 'black_concrete_powder' | 'kelp' | 'kelp_plant' | 'dried_kelp_block' | 'turtle_egg' | 'sniffer_egg' | 'dead_tube_coral_block' | 'dead_brain_coral_block' | 'dead_bubble_coral_block' | 'dead_fire_coral_block' | 'dead_horn_coral_block' | 'tube_coral_block' | 'brain_coral_block' | 'bubble_coral_block' | 'fire_coral_block' | 'horn_coral_block' | 'dead_tube_coral' | 'dead_brain_coral' | 'dead_bubble_coral' | 'dead_fire_coral' | 'dead_horn_coral' | 'tube_coral' | 'brain_coral' | 'bubble_coral' | 'fire_coral' | 'horn_coral' | 'dead_tube_coral_fan' | 'dead_brain_coral_fan' | 'dead_bubble_coral_fan' | 'dead_fire_coral_fan' | 'dead_horn_coral_fan' | 'tube_coral_fan' | 'brain_coral_fan' | 'bubble_coral_fan' | 'fire_coral_fan' | 'horn_coral_fan' | 'dead_tube_coral_wall_fan' | 'dead_brain_coral_wall_fan' | 'dead_bubble_coral_wall_fan' | 'dead_fire_coral_wall_fan' | 'dead_horn_coral_wall_fan' | 'tube_coral_wall_fan' | 'brain_coral_wall_fan' | 'bubble_coral_wall_fan' | 'fire_coral_wall_fan' | 'horn_coral_wall_fan' | 'sea_pickle' | 'blue_ice' | 'conduit' | 'bamboo_sapling' | 'bamboo' | 'potted_bamboo' | 'void_air' | 'cave_air' | 'bubble_column' | 'polished_granite_stairs' | 'smooth_red_sandstone_stairs' | 'mossy_stone_brick_stairs' | 'polished_diorite_stairs' | 'mossy_cobblestone_stairs' | 'end_stone_brick_stairs' | 'stone_stairs' | 'smooth_sandstone_stairs' | 'smooth_quartz_stairs' | 'granite_stairs' | 'andesite_stairs' | 'red_nether_brick_stairs' | 'polished_andesite_stairs' | 'diorite_stairs' | 'polished_granite_slab' | 'smooth_red_sandstone_slab' | 'mossy_stone_brick_slab' | 'polished_diorite_slab' | 'mossy_cobblestone_slab' | 'end_stone_brick_slab' | 'smooth_sandstone_slab' | 'smooth_quartz_slab' | 'granite_slab' | 'andesite_slab' | 'red_nether_brick_slab' | 'polished_andesite_slab' | 'diorite_slab' | 'brick_wall' | 'prismarine_wall' | 'red_sandstone_wall' | 'mossy_stone_brick_wall' | 'granite_wall' | 'stone_brick_wall' | 'mud_brick_wall' | 'nether_brick_wall' | 'andesite_wall' | 'red_nether_brick_wall' | 'sandstone_wall' | 'end_stone_brick_wall' | 'diorite_wall' | 'scaffolding' | 'loom' | 'barrel' | 'smoker' | 'blast_furnace' | 'cartography_table' | 'fletching_table' | 'grindstone' | 'lectern' | 'smithing_table' | 'stonecutter' | 'bell' | 'lantern' | 'soul_lantern' | 'campfire' | 'soul_campfire' | 'sweet_berry_bush' | 'warped_stem' | 'stripped_warped_stem' | 'warped_hyphae' | 'stripped_warped_hyphae' | 'warped_nylium' | 'warped_fungus' | 'warped_wart_block' | 'warped_roots' | 'nether_sprouts' | 'crimson_stem' | 'stripped_crimson_stem' | 'crimson_hyphae' | 'stripped_crimson_hyphae' | 'crimson_nylium' | 'crimson_fungus' | 'shroomlight' | 'weeping_vines' | 'weeping_vines_plant' | 'twisting_vines' | 'twisting_vines_plant' | 'crimson_roots' | 'crimson_planks' | 'warped_planks' | 'crimson_slab' | 'warped_slab' | 'crimson_pressure_plate' | 'warped_pressure_plate' | 'crimson_fence' | 'warped_fence' | 'crimson_trapdoor' | 'warped_trapdoor' | 'crimson_fence_gate' | 'warped_fence_gate' | 'crimson_stairs' | 'warped_stairs' | 'crimson_button' | 'warped_button' | 'crimson_door' | 'warped_door' | 'crimson_sign' | 'warped_sign' | 'crimson_wall_sign' | 'warped_wall_sign' | 'structure_block' | 'jigsaw' | 'composter' | 'target' | 'bee_nest' | 'beehive' | 'honey_block' | 'honeycomb_block' | 'netherite_block' | 'ancient_debris' | 'crying_obsidian' | 'respawn_anchor' | 'potted_crimson_fungus' | 'potted_warped_fungus' | 'potted_crimson_roots' | 'potted_warped_roots' | 'lodestone' | 'blackstone' | 'blackstone_stairs' | 'blackstone_wall' | 'blackstone_slab' | 'polished_blackstone' | 'polished_blackstone_bricks' | 'cracked_polished_blackstone_bricks' | 'chiseled_polished_blackstone' | 'polished_blackstone_brick_slab' | 'polished_blackstone_brick_stairs' | 'polished_blackstone_brick_wall' | 'gilded_blackstone' | 'polished_blackstone_stairs' | 'polished_blackstone_slab' | 'polished_blackstone_pressure_plate' | 'polished_blackstone_button' | 'polished_blackstone_wall' | 'chiseled_nether_bricks' | 'cracked_nether_bricks' | 'quartz_bricks' | 'candle' | 'white_candle' | 'orange_candle' | 'magenta_candle' | 'light_blue_candle' | 'yellow_candle' | 'lime_candle' | 'pink_candle' | 'gray_candle' | 'light_gray_candle' | 'cyan_candle' | 'purple_candle' | 'blue_candle' | 'brown_candle' | 'green_candle' | 'red_candle' | 'black_candle' | 'candle_cake' | 'white_candle_cake' | 'orange_candle_cake' | 'magenta_candle_cake' | 'light_blue_candle_cake' | 'yellow_candle_cake' | 'lime_candle_cake' | 'pink_candle_cake' | 'gray_candle_cake' | 'light_gray_candle_cake' | 'cyan_candle_cake' | 'purple_candle_cake' | 'blue_candle_cake' | 'brown_candle_cake' | 'green_candle_cake' | 'red_candle_cake' | 'black_candle_cake' | 'amethyst_block' | 'budding_amethyst' | 'amethyst_cluster' | 'large_amethyst_bud' | 'medium_amethyst_bud' | 'small_amethyst_bud' | 'tuff' | 'calcite' | 'tinted_glass' | 'powder_snow' | 'sculk_sensor' | 'calibrated_sculk_sensor' | 'sculk' | 'sculk_vein' | 'sculk_catalyst' | 'sculk_shrieker' | 'oxidized_copper' | 'weathered_copper' | 'exposed_copper' | 'copper_block' | 'copper_ore' | 'deepslate_copper_ore' | 'oxidized_cut_copper' | 'weathered_cut_copper' | 'exposed_cut_copper' | 'cut_copper' | 'oxidized_cut_copper_stairs' | 'weathered_cut_copper_stairs' | 'exposed_cut_copper_stairs' | 'cut_copper_stairs' | 'oxidized_cut_copper_slab' | 'weathered_cut_copper_slab' | 'exposed_cut_copper_slab' | 'cut_copper_slab' | 'waxed_copper_block' | 'waxed_weathered_copper' | 'waxed_exposed_copper' | 'waxed_oxidized_copper' | 'waxed_oxidized_cut_copper' | 'waxed_weathered_cut_copper' | 'waxed_exposed_cut_copper' | 'waxed_cut_copper' | 'waxed_oxidized_cut_copper_stairs' | 'waxed_weathered_cut_copper_stairs' | 'waxed_exposed_cut_copper_stairs' | 'waxed_cut_copper_stairs' | 'waxed_oxidized_cut_copper_slab' | 'waxed_weathered_cut_copper_slab' | 'waxed_exposed_cut_copper_slab' | 'waxed_cut_copper_slab' | 'lightning_rod' | 'pointed_dripstone' | 'dripstone_block' | 'cave_vines' | 'cave_vines_plant' | 'spore_blossom' | 'azalea' | 'flowering_azalea' | 'moss_carpet' | 'pink_petals' | 'moss_block' | 'big_dripleaf' | 'big_dripleaf_stem' | 'small_dripleaf' | 'hanging_roots' | 'rooted_dirt' | 'mud' | 'deepslate' | 'cobbled_deepslate' | 'cobbled_deepslate_stairs' | 'cobbled_deepslate_slab' | 'cobbled_deepslate_wall' | 'polished_deepslate' | 'polished_deepslate_stairs' | 'polished_deepslate_slab' | 'polished_deepslate_wall' | 'deepslate_tiles' | 'deepslate_tile_stairs' | 'deepslate_tile_slab' | 'deepslate_tile_wall' | 'deepslate_bricks' | 'deepslate_brick_stairs' | 'deepslate_brick_slab' | 'deepslate_brick_wall' | 'chiseled_deepslate' | 'cracked_deepslate_bricks' | 'cracked_deepslate_tiles' | 'infested_deepslate' | 'smooth_basalt' | 'raw_iron_block' | 'raw_copper_block' | 'raw_gold_block' | 'potted_azalea_bush' | 'potted_flowering_azalea_bush' | 'ochre_froglight' | 'verdant_froglight' | 'pearlescent_froglight' | 'frogspawn' | 'reinforced_deepslate' | 'decorated_pot'; +export type ItemNames = 'air' | 'stone' | 'granite' | 'polished_granite' | 'diorite' | 'polished_diorite' | 'andesite' | 'polished_andesite' | 'deepslate' | 'cobbled_deepslate' | 'polished_deepslate' | 'calcite' | 'tuff' | 'dripstone_block' | 'grass_block' | 'dirt' | 'coarse_dirt' | 'podzol' | 'rooted_dirt' | 'mud' | 'crimson_nylium' | 'warped_nylium' | 'cobblestone' | 'oak_planks' | 'spruce_planks' | 'birch_planks' | 'jungle_planks' | 'acacia_planks' | 'cherry_planks' | 'dark_oak_planks' | 'mangrove_planks' | 'bamboo_planks' | 'crimson_planks' | 'warped_planks' | 'bamboo_mosaic' | 'oak_sapling' | 'spruce_sapling' | 'birch_sapling' | 'jungle_sapling' | 'acacia_sapling' | 'cherry_sapling' | 'dark_oak_sapling' | 'mangrove_propagule' | 'bedrock' | 'sand' | 'suspicious_sand' | 'suspicious_gravel' | 'red_sand' | 'gravel' | 'coal_ore' | 'deepslate_coal_ore' | 'iron_ore' | 'deepslate_iron_ore' | 'copper_ore' | 'deepslate_copper_ore' | 'gold_ore' | 'deepslate_gold_ore' | 'redstone_ore' | 'deepslate_redstone_ore' | 'emerald_ore' | 'deepslate_emerald_ore' | 'lapis_ore' | 'deepslate_lapis_ore' | 'diamond_ore' | 'deepslate_diamond_ore' | 'nether_gold_ore' | 'nether_quartz_ore' | 'ancient_debris' | 'coal_block' | 'raw_iron_block' | 'raw_copper_block' | 'raw_gold_block' | 'amethyst_block' | 'budding_amethyst' | 'iron_block' | 'copper_block' | 'gold_block' | 'diamond_block' | 'netherite_block' | 'exposed_copper' | 'weathered_copper' | 'oxidized_copper' | 'cut_copper' | 'exposed_cut_copper' | 'weathered_cut_copper' | 'oxidized_cut_copper' | 'cut_copper_stairs' | 'exposed_cut_copper_stairs' | 'weathered_cut_copper_stairs' | 'oxidized_cut_copper_stairs' | 'cut_copper_slab' | 'exposed_cut_copper_slab' | 'weathered_cut_copper_slab' | 'oxidized_cut_copper_slab' | 'waxed_copper_block' | 'waxed_exposed_copper' | 'waxed_weathered_copper' | 'waxed_oxidized_copper' | 'waxed_cut_copper' | 'waxed_exposed_cut_copper' | 'waxed_weathered_cut_copper' | 'waxed_oxidized_cut_copper' | 'waxed_cut_copper_stairs' | 'waxed_exposed_cut_copper_stairs' | 'waxed_weathered_cut_copper_stairs' | 'waxed_oxidized_cut_copper_stairs' | 'waxed_cut_copper_slab' | 'waxed_exposed_cut_copper_slab' | 'waxed_weathered_cut_copper_slab' | 'waxed_oxidized_cut_copper_slab' | 'oak_log' | 'spruce_log' | 'birch_log' | 'jungle_log' | 'acacia_log' | 'cherry_log' | 'dark_oak_log' | 'mangrove_log' | 'mangrove_roots' | 'muddy_mangrove_roots' | 'crimson_stem' | 'warped_stem' | 'bamboo_block' | 'stripped_oak_log' | 'stripped_spruce_log' | 'stripped_birch_log' | 'stripped_jungle_log' | 'stripped_acacia_log' | 'stripped_cherry_log' | 'stripped_dark_oak_log' | 'stripped_mangrove_log' | 'stripped_crimson_stem' | 'stripped_warped_stem' | 'stripped_oak_wood' | 'stripped_spruce_wood' | 'stripped_birch_wood' | 'stripped_jungle_wood' | 'stripped_acacia_wood' | 'stripped_cherry_wood' | 'stripped_dark_oak_wood' | 'stripped_mangrove_wood' | 'stripped_crimson_hyphae' | 'stripped_warped_hyphae' | 'stripped_bamboo_block' | 'oak_wood' | 'spruce_wood' | 'birch_wood' | 'jungle_wood' | 'acacia_wood' | 'cherry_wood' | 'dark_oak_wood' | 'mangrove_wood' | 'crimson_hyphae' | 'warped_hyphae' | 'oak_leaves' | 'spruce_leaves' | 'birch_leaves' | 'jungle_leaves' | 'acacia_leaves' | 'cherry_leaves' | 'dark_oak_leaves' | 'mangrove_leaves' | 'azalea_leaves' | 'flowering_azalea_leaves' | 'sponge' | 'wet_sponge' | 'glass' | 'tinted_glass' | 'lapis_block' | 'sandstone' | 'chiseled_sandstone' | 'cut_sandstone' | 'cobweb' | 'grass' | 'fern' | 'azalea' | 'flowering_azalea' | 'dead_bush' | 'seagrass' | 'sea_pickle' | 'white_wool' | 'orange_wool' | 'magenta_wool' | 'light_blue_wool' | 'yellow_wool' | 'lime_wool' | 'pink_wool' | 'gray_wool' | 'light_gray_wool' | 'cyan_wool' | 'purple_wool' | 'blue_wool' | 'brown_wool' | 'green_wool' | 'red_wool' | 'black_wool' | 'dandelion' | 'poppy' | 'blue_orchid' | 'allium' | 'azure_bluet' | 'red_tulip' | 'orange_tulip' | 'white_tulip' | 'pink_tulip' | 'oxeye_daisy' | 'cornflower' | 'lily_of_the_valley' | 'wither_rose' | 'torchflower' | 'pitcher_plant' | 'spore_blossom' | 'brown_mushroom' | 'red_mushroom' | 'crimson_fungus' | 'warped_fungus' | 'crimson_roots' | 'warped_roots' | 'nether_sprouts' | 'weeping_vines' | 'twisting_vines' | 'sugar_cane' | 'kelp' | 'moss_carpet' | 'pink_petals' | 'moss_block' | 'hanging_roots' | 'big_dripleaf' | 'small_dripleaf' | 'bamboo' | 'oak_slab' | 'spruce_slab' | 'birch_slab' | 'jungle_slab' | 'acacia_slab' | 'cherry_slab' | 'dark_oak_slab' | 'mangrove_slab' | 'bamboo_slab' | 'bamboo_mosaic_slab' | 'crimson_slab' | 'warped_slab' | 'stone_slab' | 'smooth_stone_slab' | 'sandstone_slab' | 'cut_sandstone_slab' | 'petrified_oak_slab' | 'cobblestone_slab' | 'brick_slab' | 'stone_brick_slab' | 'mud_brick_slab' | 'nether_brick_slab' | 'quartz_slab' | 'red_sandstone_slab' | 'cut_red_sandstone_slab' | 'purpur_slab' | 'prismarine_slab' | 'prismarine_brick_slab' | 'dark_prismarine_slab' | 'smooth_quartz' | 'smooth_red_sandstone' | 'smooth_sandstone' | 'smooth_stone' | 'bricks' | 'bookshelf' | 'chiseled_bookshelf' | 'decorated_pot' | 'mossy_cobblestone' | 'obsidian' | 'torch' | 'end_rod' | 'chorus_plant' | 'chorus_flower' | 'purpur_block' | 'purpur_pillar' | 'purpur_stairs' | 'spawner' | 'chest' | 'crafting_table' | 'farmland' | 'furnace' | 'ladder' | 'cobblestone_stairs' | 'snow' | 'ice' | 'snow_block' | 'cactus' | 'clay' | 'jukebox' | 'oak_fence' | 'spruce_fence' | 'birch_fence' | 'jungle_fence' | 'acacia_fence' | 'cherry_fence' | 'dark_oak_fence' | 'mangrove_fence' | 'bamboo_fence' | 'crimson_fence' | 'warped_fence' | 'pumpkin' | 'carved_pumpkin' | 'jack_o_lantern' | 'netherrack' | 'soul_sand' | 'soul_soil' | 'basalt' | 'polished_basalt' | 'smooth_basalt' | 'soul_torch' | 'glowstone' | 'infested_stone' | 'infested_cobblestone' | 'infested_stone_bricks' | 'infested_mossy_stone_bricks' | 'infested_cracked_stone_bricks' | 'infested_chiseled_stone_bricks' | 'infested_deepslate' | 'stone_bricks' | 'mossy_stone_bricks' | 'cracked_stone_bricks' | 'chiseled_stone_bricks' | 'packed_mud' | 'mud_bricks' | 'deepslate_bricks' | 'cracked_deepslate_bricks' | 'deepslate_tiles' | 'cracked_deepslate_tiles' | 'chiseled_deepslate' | 'reinforced_deepslate' | 'brown_mushroom_block' | 'red_mushroom_block' | 'mushroom_stem' | 'iron_bars' | 'chain' | 'glass_pane' | 'melon' | 'vine' | 'glow_lichen' | 'brick_stairs' | 'stone_brick_stairs' | 'mud_brick_stairs' | 'mycelium' | 'lily_pad' | 'nether_bricks' | 'cracked_nether_bricks' | 'chiseled_nether_bricks' | 'nether_brick_fence' | 'nether_brick_stairs' | 'sculk' | 'sculk_vein' | 'sculk_catalyst' | 'sculk_shrieker' | 'enchanting_table' | 'end_portal_frame' | 'end_stone' | 'end_stone_bricks' | 'dragon_egg' | 'sandstone_stairs' | 'ender_chest' | 'emerald_block' | 'oak_stairs' | 'spruce_stairs' | 'birch_stairs' | 'jungle_stairs' | 'acacia_stairs' | 'cherry_stairs' | 'dark_oak_stairs' | 'mangrove_stairs' | 'bamboo_stairs' | 'bamboo_mosaic_stairs' | 'crimson_stairs' | 'warped_stairs' | 'command_block' | 'beacon' | 'cobblestone_wall' | 'mossy_cobblestone_wall' | 'brick_wall' | 'prismarine_wall' | 'red_sandstone_wall' | 'mossy_stone_brick_wall' | 'granite_wall' | 'stone_brick_wall' | 'mud_brick_wall' | 'nether_brick_wall' | 'andesite_wall' | 'red_nether_brick_wall' | 'sandstone_wall' | 'end_stone_brick_wall' | 'diorite_wall' | 'blackstone_wall' | 'polished_blackstone_wall' | 'polished_blackstone_brick_wall' | 'cobbled_deepslate_wall' | 'polished_deepslate_wall' | 'deepslate_brick_wall' | 'deepslate_tile_wall' | 'anvil' | 'chipped_anvil' | 'damaged_anvil' | 'chiseled_quartz_block' | 'quartz_block' | 'quartz_bricks' | 'quartz_pillar' | 'quartz_stairs' | 'white_terracotta' | 'orange_terracotta' | 'magenta_terracotta' | 'light_blue_terracotta' | 'yellow_terracotta' | 'lime_terracotta' | 'pink_terracotta' | 'gray_terracotta' | 'light_gray_terracotta' | 'cyan_terracotta' | 'purple_terracotta' | 'blue_terracotta' | 'brown_terracotta' | 'green_terracotta' | 'red_terracotta' | 'black_terracotta' | 'barrier' | 'light' | 'hay_block' | 'white_carpet' | 'orange_carpet' | 'magenta_carpet' | 'light_blue_carpet' | 'yellow_carpet' | 'lime_carpet' | 'pink_carpet' | 'gray_carpet' | 'light_gray_carpet' | 'cyan_carpet' | 'purple_carpet' | 'blue_carpet' | 'brown_carpet' | 'green_carpet' | 'red_carpet' | 'black_carpet' | 'terracotta' | 'packed_ice' | 'dirt_path' | 'sunflower' | 'lilac' | 'rose_bush' | 'peony' | 'tall_grass' | 'large_fern' | 'white_stained_glass' | 'orange_stained_glass' | 'magenta_stained_glass' | 'light_blue_stained_glass' | 'yellow_stained_glass' | 'lime_stained_glass' | 'pink_stained_glass' | 'gray_stained_glass' | 'light_gray_stained_glass' | 'cyan_stained_glass' | 'purple_stained_glass' | 'blue_stained_glass' | 'brown_stained_glass' | 'green_stained_glass' | 'red_stained_glass' | 'black_stained_glass' | 'white_stained_glass_pane' | 'orange_stained_glass_pane' | 'magenta_stained_glass_pane' | 'light_blue_stained_glass_pane' | 'yellow_stained_glass_pane' | 'lime_stained_glass_pane' | 'pink_stained_glass_pane' | 'gray_stained_glass_pane' | 'light_gray_stained_glass_pane' | 'cyan_stained_glass_pane' | 'purple_stained_glass_pane' | 'blue_stained_glass_pane' | 'brown_stained_glass_pane' | 'green_stained_glass_pane' | 'red_stained_glass_pane' | 'black_stained_glass_pane' | 'prismarine' | 'prismarine_bricks' | 'dark_prismarine' | 'prismarine_stairs' | 'prismarine_brick_stairs' | 'dark_prismarine_stairs' | 'sea_lantern' | 'red_sandstone' | 'chiseled_red_sandstone' | 'cut_red_sandstone' | 'red_sandstone_stairs' | 'repeating_command_block' | 'chain_command_block' | 'magma_block' | 'nether_wart_block' | 'warped_wart_block' | 'red_nether_bricks' | 'bone_block' | 'structure_void' | 'shulker_box' | 'white_shulker_box' | 'orange_shulker_box' | 'magenta_shulker_box' | 'light_blue_shulker_box' | 'yellow_shulker_box' | 'lime_shulker_box' | 'pink_shulker_box' | 'gray_shulker_box' | 'light_gray_shulker_box' | 'cyan_shulker_box' | 'purple_shulker_box' | 'blue_shulker_box' | 'brown_shulker_box' | 'green_shulker_box' | 'red_shulker_box' | 'black_shulker_box' | 'white_glazed_terracotta' | 'orange_glazed_terracotta' | 'magenta_glazed_terracotta' | 'light_blue_glazed_terracotta' | 'yellow_glazed_terracotta' | 'lime_glazed_terracotta' | 'pink_glazed_terracotta' | 'gray_glazed_terracotta' | 'light_gray_glazed_terracotta' | 'cyan_glazed_terracotta' | 'purple_glazed_terracotta' | 'blue_glazed_terracotta' | 'brown_glazed_terracotta' | 'green_glazed_terracotta' | 'red_glazed_terracotta' | 'black_glazed_terracotta' | 'white_concrete' | 'orange_concrete' | 'magenta_concrete' | 'light_blue_concrete' | 'yellow_concrete' | 'lime_concrete' | 'pink_concrete' | 'gray_concrete' | 'light_gray_concrete' | 'cyan_concrete' | 'purple_concrete' | 'blue_concrete' | 'brown_concrete' | 'green_concrete' | 'red_concrete' | 'black_concrete' | 'white_concrete_powder' | 'orange_concrete_powder' | 'magenta_concrete_powder' | 'light_blue_concrete_powder' | 'yellow_concrete_powder' | 'lime_concrete_powder' | 'pink_concrete_powder' | 'gray_concrete_powder' | 'light_gray_concrete_powder' | 'cyan_concrete_powder' | 'purple_concrete_powder' | 'blue_concrete_powder' | 'brown_concrete_powder' | 'green_concrete_powder' | 'red_concrete_powder' | 'black_concrete_powder' | 'turtle_egg' | 'sniffer_egg' | 'dead_tube_coral_block' | 'dead_brain_coral_block' | 'dead_bubble_coral_block' | 'dead_fire_coral_block' | 'dead_horn_coral_block' | 'tube_coral_block' | 'brain_coral_block' | 'bubble_coral_block' | 'fire_coral_block' | 'horn_coral_block' | 'tube_coral' | 'brain_coral' | 'bubble_coral' | 'fire_coral' | 'horn_coral' | 'dead_brain_coral' | 'dead_bubble_coral' | 'dead_fire_coral' | 'dead_horn_coral' | 'dead_tube_coral' | 'tube_coral_fan' | 'brain_coral_fan' | 'bubble_coral_fan' | 'fire_coral_fan' | 'horn_coral_fan' | 'dead_tube_coral_fan' | 'dead_brain_coral_fan' | 'dead_bubble_coral_fan' | 'dead_fire_coral_fan' | 'dead_horn_coral_fan' | 'blue_ice' | 'conduit' | 'polished_granite_stairs' | 'smooth_red_sandstone_stairs' | 'mossy_stone_brick_stairs' | 'polished_diorite_stairs' | 'mossy_cobblestone_stairs' | 'end_stone_brick_stairs' | 'stone_stairs' | 'smooth_sandstone_stairs' | 'smooth_quartz_stairs' | 'granite_stairs' | 'andesite_stairs' | 'red_nether_brick_stairs' | 'polished_andesite_stairs' | 'diorite_stairs' | 'cobbled_deepslate_stairs' | 'polished_deepslate_stairs' | 'deepslate_brick_stairs' | 'deepslate_tile_stairs' | 'polished_granite_slab' | 'smooth_red_sandstone_slab' | 'mossy_stone_brick_slab' | 'polished_diorite_slab' | 'mossy_cobblestone_slab' | 'end_stone_brick_slab' | 'smooth_sandstone_slab' | 'smooth_quartz_slab' | 'granite_slab' | 'andesite_slab' | 'red_nether_brick_slab' | 'polished_andesite_slab' | 'diorite_slab' | 'cobbled_deepslate_slab' | 'polished_deepslate_slab' | 'deepslate_brick_slab' | 'deepslate_tile_slab' | 'scaffolding' | 'redstone' | 'redstone_torch' | 'redstone_block' | 'repeater' | 'comparator' | 'piston' | 'sticky_piston' | 'slime_block' | 'honey_block' | 'observer' | 'hopper' | 'dispenser' | 'dropper' | 'lectern' | 'target' | 'lever' | 'lightning_rod' | 'daylight_detector' | 'sculk_sensor' | 'calibrated_sculk_sensor' | 'tripwire_hook' | 'trapped_chest' | 'tnt' | 'redstone_lamp' | 'note_block' | 'stone_button' | 'polished_blackstone_button' | 'oak_button' | 'spruce_button' | 'birch_button' | 'jungle_button' | 'acacia_button' | 'cherry_button' | 'dark_oak_button' | 'mangrove_button' | 'bamboo_button' | 'crimson_button' | 'warped_button' | 'stone_pressure_plate' | 'polished_blackstone_pressure_plate' | 'light_weighted_pressure_plate' | 'heavy_weighted_pressure_plate' | 'oak_pressure_plate' | 'spruce_pressure_plate' | 'birch_pressure_plate' | 'jungle_pressure_plate' | 'acacia_pressure_plate' | 'cherry_pressure_plate' | 'dark_oak_pressure_plate' | 'mangrove_pressure_plate' | 'bamboo_pressure_plate' | 'crimson_pressure_plate' | 'warped_pressure_plate' | 'iron_door' | 'oak_door' | 'spruce_door' | 'birch_door' | 'jungle_door' | 'acacia_door' | 'cherry_door' | 'dark_oak_door' | 'mangrove_door' | 'bamboo_door' | 'crimson_door' | 'warped_door' | 'iron_trapdoor' | 'oak_trapdoor' | 'spruce_trapdoor' | 'birch_trapdoor' | 'jungle_trapdoor' | 'acacia_trapdoor' | 'cherry_trapdoor' | 'dark_oak_trapdoor' | 'mangrove_trapdoor' | 'bamboo_trapdoor' | 'crimson_trapdoor' | 'warped_trapdoor' | 'oak_fence_gate' | 'spruce_fence_gate' | 'birch_fence_gate' | 'jungle_fence_gate' | 'acacia_fence_gate' | 'cherry_fence_gate' | 'dark_oak_fence_gate' | 'mangrove_fence_gate' | 'bamboo_fence_gate' | 'crimson_fence_gate' | 'warped_fence_gate' | 'powered_rail' | 'detector_rail' | 'rail' | 'activator_rail' | 'saddle' | 'minecart' | 'chest_minecart' | 'furnace_minecart' | 'tnt_minecart' | 'hopper_minecart' | 'carrot_on_a_stick' | 'warped_fungus_on_a_stick' | 'elytra' | 'oak_boat' | 'oak_chest_boat' | 'spruce_boat' | 'spruce_chest_boat' | 'birch_boat' | 'birch_chest_boat' | 'jungle_boat' | 'jungle_chest_boat' | 'acacia_boat' | 'acacia_chest_boat' | 'cherry_boat' | 'cherry_chest_boat' | 'dark_oak_boat' | 'dark_oak_chest_boat' | 'mangrove_boat' | 'mangrove_chest_boat' | 'bamboo_raft' | 'bamboo_chest_raft' | 'structure_block' | 'jigsaw' | 'turtle_helmet' | 'scute' | 'flint_and_steel' | 'apple' | 'bow' | 'arrow' | 'coal' | 'charcoal' | 'diamond' | 'emerald' | 'lapis_lazuli' | 'quartz' | 'amethyst_shard' | 'raw_iron' | 'iron_ingot' | 'raw_copper' | 'copper_ingot' | 'raw_gold' | 'gold_ingot' | 'netherite_ingot' | 'netherite_scrap' | 'wooden_sword' | 'wooden_shovel' | 'wooden_pickaxe' | 'wooden_axe' | 'wooden_hoe' | 'stone_sword' | 'stone_shovel' | 'stone_pickaxe' | 'stone_axe' | 'stone_hoe' | 'golden_sword' | 'golden_shovel' | 'golden_pickaxe' | 'golden_axe' | 'golden_hoe' | 'iron_sword' | 'iron_shovel' | 'iron_pickaxe' | 'iron_axe' | 'iron_hoe' | 'diamond_sword' | 'diamond_shovel' | 'diamond_pickaxe' | 'diamond_axe' | 'diamond_hoe' | 'netherite_sword' | 'netherite_shovel' | 'netherite_pickaxe' | 'netherite_axe' | 'netherite_hoe' | 'stick' | 'bowl' | 'mushroom_stew' | 'string' | 'feather' | 'gunpowder' | 'wheat_seeds' | 'wheat' | 'bread' | 'leather_helmet' | 'leather_chestplate' | 'leather_leggings' | 'leather_boots' | 'chainmail_helmet' | 'chainmail_chestplate' | 'chainmail_leggings' | 'chainmail_boots' | 'iron_helmet' | 'iron_chestplate' | 'iron_leggings' | 'iron_boots' | 'diamond_helmet' | 'diamond_chestplate' | 'diamond_leggings' | 'diamond_boots' | 'golden_helmet' | 'golden_chestplate' | 'golden_leggings' | 'golden_boots' | 'netherite_helmet' | 'netherite_chestplate' | 'netherite_leggings' | 'netherite_boots' | 'flint' | 'porkchop' | 'cooked_porkchop' | 'painting' | 'golden_apple' | 'enchanted_golden_apple' | 'oak_sign' | 'spruce_sign' | 'birch_sign' | 'jungle_sign' | 'acacia_sign' | 'cherry_sign' | 'dark_oak_sign' | 'mangrove_sign' | 'bamboo_sign' | 'crimson_sign' | 'warped_sign' | 'oak_hanging_sign' | 'spruce_hanging_sign' | 'birch_hanging_sign' | 'jungle_hanging_sign' | 'acacia_hanging_sign' | 'cherry_hanging_sign' | 'dark_oak_hanging_sign' | 'mangrove_hanging_sign' | 'bamboo_hanging_sign' | 'crimson_hanging_sign' | 'warped_hanging_sign' | 'bucket' | 'water_bucket' | 'lava_bucket' | 'powder_snow_bucket' | 'snowball' | 'leather' | 'milk_bucket' | 'pufferfish_bucket' | 'salmon_bucket' | 'cod_bucket' | 'tropical_fish_bucket' | 'axolotl_bucket' | 'tadpole_bucket' | 'brick' | 'clay_ball' | 'dried_kelp_block' | 'paper' | 'book' | 'slime_ball' | 'egg' | 'compass' | 'recovery_compass' | 'bundle' | 'fishing_rod' | 'clock' | 'spyglass' | 'glowstone_dust' | 'cod' | 'salmon' | 'tropical_fish' | 'pufferfish' | 'cooked_cod' | 'cooked_salmon' | 'ink_sac' | 'glow_ink_sac' | 'cocoa_beans' | 'white_dye' | 'orange_dye' | 'magenta_dye' | 'light_blue_dye' | 'yellow_dye' | 'lime_dye' | 'pink_dye' | 'gray_dye' | 'light_gray_dye' | 'cyan_dye' | 'purple_dye' | 'blue_dye' | 'brown_dye' | 'green_dye' | 'red_dye' | 'black_dye' | 'bone_meal' | 'bone' | 'sugar' | 'cake' | 'white_bed' | 'orange_bed' | 'magenta_bed' | 'light_blue_bed' | 'yellow_bed' | 'lime_bed' | 'pink_bed' | 'gray_bed' | 'light_gray_bed' | 'cyan_bed' | 'purple_bed' | 'blue_bed' | 'brown_bed' | 'green_bed' | 'red_bed' | 'black_bed' | 'cookie' | 'filled_map' | 'shears' | 'melon_slice' | 'dried_kelp' | 'pumpkin_seeds' | 'melon_seeds' | 'beef' | 'cooked_beef' | 'chicken' | 'cooked_chicken' | 'rotten_flesh' | 'ender_pearl' | 'blaze_rod' | 'ghast_tear' | 'gold_nugget' | 'nether_wart' | 'potion' | 'glass_bottle' | 'spider_eye' | 'fermented_spider_eye' | 'blaze_powder' | 'magma_cream' | 'brewing_stand' | 'cauldron' | 'ender_eye' | 'glistering_melon_slice' | 'allay_spawn_egg' | 'axolotl_spawn_egg' | 'bat_spawn_egg' | 'bee_spawn_egg' | 'blaze_spawn_egg' | 'cat_spawn_egg' | 'camel_spawn_egg' | 'cave_spider_spawn_egg' | 'chicken_spawn_egg' | 'cod_spawn_egg' | 'cow_spawn_egg' | 'creeper_spawn_egg' | 'dolphin_spawn_egg' | 'donkey_spawn_egg' | 'drowned_spawn_egg' | 'elder_guardian_spawn_egg' | 'ender_dragon_spawn_egg' | 'enderman_spawn_egg' | 'endermite_spawn_egg' | 'evoker_spawn_egg' | 'fox_spawn_egg' | 'frog_spawn_egg' | 'ghast_spawn_egg' | 'glow_squid_spawn_egg' | 'goat_spawn_egg' | 'guardian_spawn_egg' | 'hoglin_spawn_egg' | 'horse_spawn_egg' | 'husk_spawn_egg' | 'iron_golem_spawn_egg' | 'llama_spawn_egg' | 'magma_cube_spawn_egg' | 'mooshroom_spawn_egg' | 'mule_spawn_egg' | 'ocelot_spawn_egg' | 'panda_spawn_egg' | 'parrot_spawn_egg' | 'phantom_spawn_egg' | 'pig_spawn_egg' | 'piglin_spawn_egg' | 'piglin_brute_spawn_egg' | 'pillager_spawn_egg' | 'polar_bear_spawn_egg' | 'pufferfish_spawn_egg' | 'rabbit_spawn_egg' | 'ravager_spawn_egg' | 'salmon_spawn_egg' | 'sheep_spawn_egg' | 'shulker_spawn_egg' | 'silverfish_spawn_egg' | 'skeleton_spawn_egg' | 'skeleton_horse_spawn_egg' | 'slime_spawn_egg' | 'sniffer_spawn_egg' | 'snow_golem_spawn_egg' | 'spider_spawn_egg' | 'squid_spawn_egg' | 'stray_spawn_egg' | 'strider_spawn_egg' | 'tadpole_spawn_egg' | 'trader_llama_spawn_egg' | 'tropical_fish_spawn_egg' | 'turtle_spawn_egg' | 'vex_spawn_egg' | 'villager_spawn_egg' | 'vindicator_spawn_egg' | 'wandering_trader_spawn_egg' | 'warden_spawn_egg' | 'witch_spawn_egg' | 'wither_spawn_egg' | 'wither_skeleton_spawn_egg' | 'wolf_spawn_egg' | 'zoglin_spawn_egg' | 'zombie_spawn_egg' | 'zombie_horse_spawn_egg' | 'zombie_villager_spawn_egg' | 'zombified_piglin_spawn_egg' | 'experience_bottle' | 'fire_charge' | 'writable_book' | 'written_book' | 'item_frame' | 'glow_item_frame' | 'flower_pot' | 'carrot' | 'potato' | 'baked_potato' | 'poisonous_potato' | 'map' | 'golden_carrot' | 'skeleton_skull' | 'wither_skeleton_skull' | 'player_head' | 'zombie_head' | 'creeper_head' | 'dragon_head' | 'piglin_head' | 'nether_star' | 'pumpkin_pie' | 'firework_rocket' | 'firework_star' | 'enchanted_book' | 'nether_brick' | 'prismarine_shard' | 'prismarine_crystals' | 'rabbit' | 'cooked_rabbit' | 'rabbit_stew' | 'rabbit_foot' | 'rabbit_hide' | 'armor_stand' | 'iron_horse_armor' | 'golden_horse_armor' | 'diamond_horse_armor' | 'leather_horse_armor' | 'lead' | 'name_tag' | 'command_block_minecart' | 'mutton' | 'cooked_mutton' | 'white_banner' | 'orange_banner' | 'magenta_banner' | 'light_blue_banner' | 'yellow_banner' | 'lime_banner' | 'pink_banner' | 'gray_banner' | 'light_gray_banner' | 'cyan_banner' | 'purple_banner' | 'blue_banner' | 'brown_banner' | 'green_banner' | 'red_banner' | 'black_banner' | 'end_crystal' | 'chorus_fruit' | 'popped_chorus_fruit' | 'torchflower_seeds' | 'pitcher_pod' | 'beetroot' | 'beetroot_seeds' | 'beetroot_soup' | 'dragon_breath' | 'splash_potion' | 'spectral_arrow' | 'tipped_arrow' | 'lingering_potion' | 'shield' | 'totem_of_undying' | 'shulker_shell' | 'iron_nugget' | 'knowledge_book' | 'debug_stick' | 'music_disc_13' | 'music_disc_cat' | 'music_disc_blocks' | 'music_disc_chirp' | 'music_disc_far' | 'music_disc_mall' | 'music_disc_mellohi' | 'music_disc_stal' | 'music_disc_strad' | 'music_disc_ward' | 'music_disc_11' | 'music_disc_wait' | 'music_disc_otherside' | 'music_disc_relic' | 'music_disc_5' | 'music_disc_pigstep' | 'disc_fragment_5' | 'trident' | 'phantom_membrane' | 'nautilus_shell' | 'heart_of_the_sea' | 'crossbow' | 'suspicious_stew' | 'loom' | 'flower_banner_pattern' | 'creeper_banner_pattern' | 'skull_banner_pattern' | 'mojang_banner_pattern' | 'globe_banner_pattern' | 'piglin_banner_pattern' | 'goat_horn' | 'composter' | 'barrel' | 'smoker' | 'blast_furnace' | 'cartography_table' | 'fletching_table' | 'grindstone' | 'smithing_table' | 'stonecutter' | 'bell' | 'lantern' | 'soul_lantern' | 'sweet_berries' | 'glow_berries' | 'campfire' | 'soul_campfire' | 'shroomlight' | 'honeycomb' | 'bee_nest' | 'beehive' | 'honey_bottle' | 'honeycomb_block' | 'lodestone' | 'crying_obsidian' | 'blackstone' | 'blackstone_slab' | 'blackstone_stairs' | 'gilded_blackstone' | 'polished_blackstone' | 'polished_blackstone_slab' | 'polished_blackstone_stairs' | 'chiseled_polished_blackstone' | 'polished_blackstone_bricks' | 'polished_blackstone_brick_slab' | 'polished_blackstone_brick_stairs' | 'cracked_polished_blackstone_bricks' | 'respawn_anchor' | 'candle' | 'white_candle' | 'orange_candle' | 'magenta_candle' | 'light_blue_candle' | 'yellow_candle' | 'lime_candle' | 'pink_candle' | 'gray_candle' | 'light_gray_candle' | 'cyan_candle' | 'purple_candle' | 'blue_candle' | 'brown_candle' | 'green_candle' | 'red_candle' | 'black_candle' | 'small_amethyst_bud' | 'medium_amethyst_bud' | 'large_amethyst_bud' | 'amethyst_cluster' | 'pointed_dripstone' | 'ochre_froglight' | 'verdant_froglight' | 'pearlescent_froglight' | 'frogspawn' | 'echo_shard' | 'brush' | 'netherite_upgrade_smithing_template' | 'sentry_armor_trim_smithing_template' | 'dune_armor_trim_smithing_template' | 'coast_armor_trim_smithing_template' | 'wild_armor_trim_smithing_template' | 'ward_armor_trim_smithing_template' | 'eye_armor_trim_smithing_template' | 'vex_armor_trim_smithing_template' | 'tide_armor_trim_smithing_template' | 'snout_armor_trim_smithing_template' | 'rib_armor_trim_smithing_template' | 'spire_armor_trim_smithing_template' | 'wayfinder_armor_trim_smithing_template' | 'shaper_armor_trim_smithing_template' | 'silence_armor_trim_smithing_template' | 'raiser_armor_trim_smithing_template' | 'host_armor_trim_smithing_template' | 'angler_pottery_sherd' | 'archer_pottery_sherd' | 'arms_up_pottery_sherd' | 'blade_pottery_sherd' | 'brewer_pottery_sherd' | 'burn_pottery_sherd' | 'danger_pottery_sherd' | 'explorer_pottery_sherd' | 'friend_pottery_sherd' | 'heart_pottery_sherd' | 'heartbreak_pottery_sherd' | 'howl_pottery_sherd' | 'miner_pottery_sherd' | 'mourner_pottery_sherd' | 'plenty_pottery_sherd' | 'prize_pottery_sherd' | 'sheaf_pottery_sherd' | 'shelter_pottery_sherd' | 'skull_pottery_sherd' | 'snort_pottery_sherd'; +export type EntityNames = 'allay' | 'area_effect_cloud' | 'armor_stand' | 'arrow' | 'axolotl' | 'bat' | 'bee' | 'blaze' | 'block_display' | 'boat' | 'camel' | 'cat' | 'cave_spider' | 'chest_boat' | 'chest_minecart' | 'chicken' | 'cod' | 'command_block_minecart' | 'cow' | 'creeper' | 'dolphin' | 'donkey' | 'dragon_fireball' | 'drowned' | 'egg' | 'elder_guardian' | 'end_crystal' | 'ender_dragon' | 'ender_pearl' | 'enderman' | 'endermite' | 'evoker' | 'evoker_fangs' | 'experience_bottle' | 'experience_orb' | 'eye_of_ender' | 'falling_block' | 'firework_rocket' | 'fox' | 'frog' | 'furnace_minecart' | 'ghast' | 'giant' | 'glow_item_frame' | 'glow_squid' | 'goat' | 'guardian' | 'hoglin' | 'hopper_minecart' | 'horse' | 'husk' | 'illusioner' | 'interaction' | 'iron_golem' | 'item' | 'item_display' | 'item_frame' | 'fireball' | 'leash_knot' | 'lightning_bolt' | 'llama' | 'llama_spit' | 'magma_cube' | 'marker' | 'minecart' | 'mooshroom' | 'mule' | 'ocelot' | 'painting' | 'panda' | 'parrot' | 'phantom' | 'pig' | 'piglin' | 'piglin_brute' | 'pillager' | 'polar_bear' | 'potion' | 'pufferfish' | 'rabbit' | 'ravager' | 'salmon' | 'sheep' | 'shulker' | 'shulker_bullet' | 'silverfish' | 'skeleton' | 'skeleton_horse' | 'slime' | 'small_fireball' | 'sniffer' | 'snow_golem' | 'snowball' | 'spawner_minecart' | 'spectral_arrow' | 'spider' | 'squid' | 'stray' | 'strider' | 'tadpole' | 'text_display' | 'tnt' | 'tnt_minecart' | 'trader_llama' | 'trident' | 'tropical_fish' | 'turtle' | 'vex' | 'villager' | 'vindicator' | 'wandering_trader' | 'warden' | 'witch' | 'wither' | 'wither_skeleton' | 'wither_skull' | 'wolf' | 'zoglin' | 'zombie' | 'zombie_horse' | 'zombie_villager' | 'zombified_piglin' | 'player' | 'fishing_bobber'; +export type BiomesNames = 'badlands' | 'bamboo_jungle' | 'basalt_deltas' | 'beach' | 'birch_forest' | 'cherry_grove' | 'cold_ocean' | 'crimson_forest' | 'dark_forest' | 'deep_cold_ocean' | 'deep_dark' | 'deep_frozen_ocean' | 'deep_lukewarm_ocean' | 'deep_ocean' | 'desert' | 'dripstone_caves' | 'end_barrens' | 'end_highlands' | 'end_midlands' | 'eroded_badlands' | 'flower_forest' | 'forest' | 'frozen_ocean' | 'frozen_peaks' | 'frozen_river' | 'grove' | 'ice_spikes' | 'jagged_peaks' | 'jungle' | 'lukewarm_ocean' | 'lush_caves' | 'mangrove_swamp' | 'meadow' | 'mushroom_fields' | 'nether_wastes' | 'ocean' | 'old_growth_birch_forest' | 'old_growth_pine_taiga' | 'old_growth_spruce_taiga' | 'plains' | 'river' | 'savanna' | 'savanna_plateau' | 'small_end_islands' | 'snowy_beach' | 'snowy_plains' | 'snowy_slopes' | 'snowy_taiga' | 'soul_sand_valley' | 'sparse_jungle' | 'stony_peaks' | 'stony_shore' | 'sunflower_plains' | 'swamp' | 'taiga' | 'the_end' | 'the_void' | 'warm_ocean' | 'warped_forest' | 'windswept_forest' | 'windswept_gravelly_hills' | 'windswept_hills' | 'windswept_savanna' | 'wooded_badlands'; +export type EnchantmentNames = 'protection' | 'fire_protection' | 'feather_falling' | 'blast_protection' | 'projectile_protection' | 'respiration' | 'aqua_affinity' | 'thorns' | 'depth_strider' | 'frost_walker' | 'binding_curse' | 'soul_speed' | 'swift_sneak' | 'sharpness' | 'smite' | 'bane_of_arthropods' | 'knockback' | 'fire_aspect' | 'looting' | 'sweeping' | 'efficiency' | 'silk_touch' | 'unbreaking' | 'fortune' | 'power' | 'punch' | 'flame' | 'infinity' | 'luck_of_the_sea' | 'lure' | 'loyalty' | 'impaling' | 'riptide' | 'channeling' | 'multishot' | 'quick_charge' | 'piercing' | 'mending' | 'vanishing_curse'; \ No newline at end of file From d604ff12aed47d3476f8aa37ad321dd34fdcadcb Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 17 Apr 2024 08:39:08 +0300 Subject: [PATCH 0004/1074] a few important regression fixes --- prismarine-viewer/viewer/lib/mesher/models.ts | 18 ++++++++++++++++-- prismarine-viewer/viewer/lib/utils.web.js | 6 +++--- src/panorama.ts | 6 ++++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index 9b3a1ecd..c9e2bd3b 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -120,7 +120,7 @@ function getLiquidRenderHeight (world, block, type, pos) { } const isCube = (block) => { - if (!block) return false + if (!block || block.transparent) return false if (block.isCube) return true if (!block.variant) block.variant = getModelVariants(block) return block.variant.every(v => v?.model?.elements.every(e => { @@ -147,7 +147,8 @@ function renderLiquid (world, cursor, texture, type, biome, water, attr) { const { dir, corners } = elemFaces[face] const isUp = dir[1] === 1 - const neighbor = world.getBlock(cursor.offset(...dir)) + const neighborPos = cursor.offset(...dir) + const neighbor = world.getBlock(neighborPos) if (!neighbor) continue if (neighbor.type === type) continue if ((isCube(neighbor) && !isUp) || neighbor.material === 'plant' || neighbor.getProperties().waterlogged) continue @@ -161,6 +162,18 @@ function renderLiquid (world, cursor, texture, type, biome, water, attr) { tint = [tint[0] * m, tint[1] * m, tint[2] * m] } + if (needTiles) { + attr.tiles[`${cursor.x},${cursor.y},${cursor.z}`] ??= { + block: 'water', + faces: [], + } + attr.tiles[`${cursor.x},${cursor.y},${cursor.z}`].faces.push({ + face, + neighbor: `${neighborPos.x},${neighborPos.y},${neighborPos.z}`, + // texture: eFace.texture.name, + }) + } + const u = texture.u const v = texture.v const su = texture.su @@ -268,6 +281,7 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr if (!neighbor.transparent && isCube(neighbor)) continue } else { needRecompute = true + continue } } diff --git a/prismarine-viewer/viewer/lib/utils.web.js b/prismarine-viewer/viewer/lib/utils.web.js index cbb94222..ffa22808 100644 --- a/prismarine-viewer/viewer/lib/utils.web.js +++ b/prismarine-viewer/viewer/lib/utils.web.js @@ -3,12 +3,12 @@ const THREE = require('three') const textureCache = {} function loadTexture (texture, cb, onLoad) { - if (!textureCache[texture]) { + const cached = textureCache[texture] + if (!cached) { textureCache[texture] = new THREE.TextureLoader().load(texture, onLoad) - } else { - onLoad?.() } cb(textureCache[texture]) + if (cached) onLoad?.() } function loadJSON (url, callback) { diff --git a/src/panorama.ts b/src/panorama.ts index 1f614371..3d7aec32 100644 --- a/src/panorama.ts +++ b/src/panorama.ts @@ -69,7 +69,8 @@ export async function addPanoramaCubeMap () { shouldDisplayPanorama = true let time = 0 - viewer.camera = new THREE.PerspectiveCamera(85, window.innerWidth / window.innerHeight, 0.05, 1000) + viewer.camera.fov = 85 + viewer.camera.near = 0.05 viewer.camera.updateProjectionMatrix() viewer.camera.position.set(0, 0, 0) viewer.camera.rotation.set(0, 0, 0) @@ -119,7 +120,8 @@ export async function addPanoramaCubeMap () { export function removePanorama () { shouldDisplayPanorama = false if (!panoramaCubeMap) return - viewer.camera = new THREE.PerspectiveCamera(options.fov, window.innerWidth / window.innerHeight, 0.1, 1000) + viewer.camera.fov = options.fov + viewer.camera.near = 0.1 viewer.camera.updateProjectionMatrix() viewer.scene.remove(panoramaCubeMap) panoramaCubeMap = null From fd42c9cc98ee38c0330fa0e1e4870e624ab8810a Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 18 Apr 2024 08:10:31 +0300 Subject: [PATCH 0005/1074] fix test in ci --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cbd12318..b2f04c43 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,9 @@ jobs: node-version: 18 # cache: "pnpm" - run: pnpm install - - run: pnpm lint - run: pnpm check-build + - run: pnpm test-unit + - run: pnpm lint - run: nohup pnpm prod-start & - run: nohup pnpm test-mc-server & - uses: cypress-io/github-action@v5 From 2d3ab6c43a980632915bce2a059062c917671203 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 18 Apr 2024 09:47:55 +0300 Subject: [PATCH 0006/1074] feat: Almost full entities rendering. Mobs are now rendered correctly --- esbuild.mjs | 3 +- package.json | 3 +- pnpm-lock.yaml | 36 +++- prismarine-viewer/esbuild.mjs | 1 + prismarine-viewer/examples/playground.ts | 7 +- prismarine-viewer/test/parallel.js | 20 --- prismarine-viewer/test/simple.test.js | 12 -- prismarine-viewer/test/viewer.test.js | 109 ------------- prismarine-viewer/viewer/index.js | 2 +- prismarine-viewer/viewer/lib/entities.js | 30 +++- .../lib/entity/{Entity.js => EntityMesh.js} | 154 +++++++++++++++--- .../viewer/lib/entity/externalTextures.json | 1 + .../viewer/lib/entity/objModels.js | 3 + .../viewer/lib/worldrendererCommon.ts | 4 +- 14 files changed, 198 insertions(+), 187 deletions(-) delete mode 100644 prismarine-viewer/test/parallel.js delete mode 100644 prismarine-viewer/test/simple.test.js delete mode 100644 prismarine-viewer/test/viewer.test.js rename prismarine-viewer/viewer/lib/entity/{Entity.js => EntityMesh.js} (57%) create mode 100644 prismarine-viewer/viewer/lib/entity/externalTextures.json create mode 100644 prismarine-viewer/viewer/lib/entity/objModels.js diff --git a/esbuild.mjs b/esbuild.mjs index 6f7f903e..fad9047d 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -80,7 +80,8 @@ const buildOptions = { '.png': 'dataurl', '.map': 'empty', '.vert': 'text', - '.frag': 'text' + '.frag': 'text', + '.obj': 'text', }, write: false, // todo would be better to enable? diff --git a/package.json b/package.json index 13e5cd36..4f7a9dbb 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "start": "node scripts/build.js copyFilesDev && node scripts/prepareData.mjs && node esbuild.mjs --watch", "start-watch-script": "nodemon -w esbuild.mjs --watch", "build": "node scripts/build.js copyFiles && node scripts/prepareData.mjs -f && node esbuild.mjs --minify --prod", - "check-build": "tsc && pnpm test-unit --run && pnpm build", + "check-build": "tsc && pnpm build", "test:cypress": "cypress run", "test-unit": "vitest", "test:e2e": "start-test http-get://localhost:8080 test:cypress", @@ -44,6 +44,7 @@ "@xmcl/text-component": "^2.1.3", "@zardoy/react-util": "^0.2.0", "@zardoy/utils": "^0.0.11", + "adm-zip": "^0.5.12", "browserfs": "github:zardoy/browserfs#build", "change-case": "^5.1.2", "compression": "^1.7.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d448375..68d89fb2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,6 +56,9 @@ importers: '@zardoy/utils': specifier: ^0.0.11 version: 0.0.11 + adm-zip: + specifier: ^0.5.12 + version: 0.5.12 browserfs: specifier: github:zardoy/browserfs#build version: github.com/zardoy/browserfs/e60ca69e74888e057a96a468afe1d62347d3f56f @@ -95,9 +98,6 @@ importers: google-drive-browserfs: specifier: github:zardoy/browserfs#google-drive version: github.com/zardoy/browserfs/ab58ae8ef00e3a31db01909e365e6cb5188436e0 - gsap: - specifier: ^3.12.5 - version: 3.12.5 iconify-icon: specifier: ^1.0.8 version: 1.0.8 @@ -5754,6 +5754,11 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /adm-zip@0.5.12: + resolution: {integrity: sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==} + engines: {node: '>=6.0'} + dev: false + /aes-js@3.1.2: resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} @@ -9402,10 +9407,6 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /gsap@3.12.5: - resolution: {integrity: sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==} - dev: false - /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -16121,7 +16122,7 @@ packages: version: 1.3.0 dependencies: minecraft-data: 3.62.0 - prismarine-chunk: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) + prismarine-chunk: github.com/zardoy/prismarine-chunk/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) random-seed: 0.3.0 vec3: 0.1.8 dev: false @@ -16196,6 +16197,25 @@ packages: transitivePeerDependencies: - minecraft-data + github.com/zardoy/prismarine-chunk/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0): + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f} + id: github.com/zardoy/prismarine-chunk/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f + name: prismarine-chunk + version: 1.35.0 + engines: {node: '>=14'} + dependencies: + prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) + prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-nbt: 2.5.0 + prismarine-registry: 1.7.0 + smart-buffer: 4.2.0 + uint4: 0.1.2 + vec3: 0.1.8 + xxhash-wasm: 0.4.2 + transitivePeerDependencies: + - minecraft-data + dev: false + github.com/zardoy/prismarine-provider-anvil/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0): resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f} id: github.com/zardoy/prismarine-provider-anvil/0ddcd9d48574113308e1fbebef60816aced0846f diff --git a/prismarine-viewer/esbuild.mjs b/prismarine-viewer/esbuild.mjs index 91b787db..9614a3ad 100644 --- a/prismarine-viewer/esbuild.mjs +++ b/prismarine-viewer/esbuild.mjs @@ -52,6 +52,7 @@ const buildOptions = { metafile: true, loader: { '.png': 'dataurl', + '.obj': 'text', }, plugins: [ { diff --git a/prismarine-viewer/examples/playground.ts b/prismarine-viewer/examples/playground.ts index 8563791e..bc9294ac 100644 --- a/prismarine-viewer/examples/playground.ts +++ b/prismarine-viewer/examples/playground.ts @@ -1,7 +1,6 @@ import _ from 'lodash' -import { WorldDataEmitter, Viewer, MapControls } from '../viewer' +import { WorldDataEmitter, Viewer } from '../viewer' import { Vec3 } from 'vec3' -import { Schematic } from 'prismarine-schematic' import BlockLoader from 'prismarine-block' import ChunkLoader from 'prismarine-chunk' import WorldLoader from 'prismarine-world' @@ -11,7 +10,7 @@ import { toMajor } from '../viewer/lib/version' import { loadScript } from '../viewer/lib/utils' import JSZip from 'jszip' import { TWEEN_DURATION } from '../viewer/lib/entities' -import Entity from '../viewer/lib/entity/Entity' +import { EntityMesh } from '../viewer/lib/entity/EntityMesh' globalThis.THREE = THREE //@ts-ignore @@ -355,7 +354,7 @@ async function main () { // prev = !prev // }, 1000) - Entity.getStaticData(params.entity) + EntityMesh.getStaticData(params.entity) // entityRotationFolder.destroy() // entityRotationFolder = gui.addFolder('entity metadata') // entityRotationFolder.add(params, 'entityRotate') diff --git a/prismarine-viewer/test/parallel.js b/prismarine-viewer/test/parallel.js deleted file mode 100644 index 10c4b252..00000000 --- a/prismarine-viewer/test/parallel.js +++ /dev/null @@ -1,20 +0,0 @@ -const nodeIndex = parseInt(process.env.CIRCLE_NODE_INDEX) -const nodeTotal = parseInt(process.env.CIRCLE_NODE_TOTAL) -const parallel = process.env.CIRCLE_NODE_INDEX !== undefined && process.env.CIRCLE_NODE_TOTAL !== undefined -const viewer = require('../') - -// expected values : -// (0,4,10) -> (0,2) -// (1,4,10) -> (3,5) -// (2,4,10) -> (6,8) -// (3,4,10) -> (9,9) -function testedRange (nodeIndex, nodeTotal, numberOfVersions) { - const nbFirsts = Math.ceil(numberOfVersions / nodeTotal) - if (nodeIndex === (nodeTotal - 1)) { return { firstVersion: nbFirsts * nodeIndex, lastVersion: numberOfVersions - 1 } } - - return { firstVersion: nodeIndex * nbFirsts, lastVersion: (nodeIndex + 1) * nbFirsts - 1 } -} -console.log({ nodeIndex, nodeTotal, versions: viewer.supportedVersions.length }) -const { firstVersion, lastVersion } = parallel ? testedRange(nodeIndex, nodeTotal, viewer.supportedVersions.length) : { firstVersion: 0, lastVersion: viewer.supportedVersions.length - 1 } - -module.exports = { firstVersion, lastVersion } diff --git a/prismarine-viewer/test/simple.test.js b/prismarine-viewer/test/simple.test.js deleted file mode 100644 index b58cf9ae..00000000 --- a/prismarine-viewer/test/simple.test.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-env jest */ -/* global page */ - -describe('Google', () => { - beforeAll(async () => { - await page.goto('https://google.com') - }, 20000) - - it('should display "google" text on page', async () => { - await expect(page).toMatch('google') - }, 20000) -}) diff --git a/prismarine-viewer/test/viewer.test.js b/prismarine-viewer/test/viewer.test.js deleted file mode 100644 index 168154dc..00000000 --- a/prismarine-viewer/test/viewer.test.js +++ /dev/null @@ -1,109 +0,0 @@ -/* eslint-env jest */ -/* global page */ - -const supportedVersions = require('../').supportedVersions - -const path = require('path') -const MC_SERVER_PATH = path.join(__dirname, 'server') -const os = require('os') - -const Wrap = require('minecraft-wrap').Wrap - -const { firstVersion, lastVersion } = require('./parallel') - -const download = require('minecraft-wrap').download - -supportedVersions.forEach(function (supportedVersion, i) { - if (!(i >= firstVersion && i <= lastVersion)) { return } - - const PORT = Math.round(30000 + Math.random() * 20000) - const mcData = require('minecraft-data')(supportedVersion) - const version = mcData.version - const MC_SERVER_JAR_DIR = process.env.MC_SERVER_JAR_DIR || os.tmpdir() - const MC_SERVER_JAR = MC_SERVER_JAR_DIR + '/minecraft_server.' + version.minecraftVersion + '.jar' - const wrap = new Wrap(MC_SERVER_JAR, MC_SERVER_PATH + '_' + supportedVersion, { - minMem: 1024, - maxMem: 1024 - }) - wrap.on('line', function (line) { - console.log(line) - }) - - describe('client ' + version.minecraftVersion, function () { - beforeAll(download.bind(null, version.minecraftVersion, MC_SERVER_JAR), 3 * 60 * 1000) - - afterAll(function (done) { - wrap.deleteServerData(function (err) { - if (err) { console.log(err) } - done(err) - }) - }, 3 * 60 * 1000) - - describe('offline', function () { - beforeAll(function (done) { - console.log(new Date() + 'starting server ' + version.minecraftVersion) - wrap.startServer({ - 'online-mode': 'false', - 'server-port': PORT, - motd: 'test1234', - 'max-players': 120 - }, function (err) { - if (err) { console.log(err) } - console.log(new Date() + 'started server ' + version.minecraftVersion) - done(err) - }) - }, 3 * 60 * 1000) - - afterAll(function (done) { - console.log(new Date() + 'stopping server' + version.minecraftVersion) - wrap.stopServer(function (err) { - if (err) { console.log(err) } - console.log(new Date() + 'stopped server ' + version.minecraftVersion) - done(err) - }) - }, 3 * 60 * 1000) - - it('doesn\'t crash', function (done) { - console.log('test') - done() - }) - - it('starts the viewer', function (done) { - const mineflayer = require('mineflayer') - const mineflayerViewer = require('../').mineflayer - setTimeout(() => done(new Error('too slow !!!')), 180000) - - const bot = mineflayer.createBot({ - username: 'Bot', - port: PORT, - version: supportedVersion - }) - - bot.once('spawn', () => { - mineflayerViewer(bot, { port: 3000 }) - - function exit (err) { - bot.viewer.close() - bot.end() - done(err) - } - - page.goto('http://localhost:3000').then(() => { - page.on('console', msg => console.log('PAGE LOG:', msg.text())) - - page.on('error', err => { - exit(err) - }) - - page.on('pageerror', pageerr => { - exit(pageerr) - }) - setTimeout(() => { - page.screenshot({ path: path.join(__dirname, `test_${supportedVersion}.png`) }).then(() => exit()).catch(err => exit(err)) - }, 120000) - }).catch(err => exit(err)) - }) - }, 180000) - }) - }) -}) diff --git a/prismarine-viewer/viewer/index.js b/prismarine-viewer/viewer/index.js index 36cfd94b..39ee4f54 100644 --- a/prismarine-viewer/viewer/index.js +++ b/prismarine-viewer/viewer/index.js @@ -2,6 +2,6 @@ module.exports = { Viewer: require('./lib/viewer').Viewer, WorldDataEmitter: require('./lib/worldDataEmitter').WorldDataEmitter, MapControls: require('./lib/controls').MapControls, - Entity: require('./lib/entity/Entity'), + Entity: require('./lib/entity/EntityMesh'), getBufferFromStream: require('./lib/simpleUtils').getBufferFromStream } diff --git a/prismarine-viewer/viewer/lib/entities.js b/prismarine-viewer/viewer/lib/entities.js index 404b22b7..d97784d4 100644 --- a/prismarine-viewer/viewer/lib/entities.js +++ b/prismarine-viewer/viewer/lib/entities.js @@ -2,7 +2,7 @@ const THREE = require('three') const TWEEN = require('@tweenjs/tween.js') -const Entity = require('./entity/Entity') +const Entity = require('./entity/EntityMesh') const { dispose3 } = require('./dispose') const EventEmitter = require('events') import { PlayerObject, PlayerAnimation } from 'skinview3d' @@ -13,6 +13,7 @@ import { WalkingGeneralSwing } from './entity/animations' import { NameTagObject } from 'skinview3d/libs/nametag' import { flat, fromFormattedString } from '@xmcl/text-component' import mojangson from 'mojangson' +import externalTexturesJson from './entity/externalTextures.json' export const TWEEN_DURATION = 50 // todo should be 100 @@ -62,12 +63,14 @@ function getEntityMesh (entity, scene, options, overrides) { try { // https://github.com/PrismarineJS/prismarine-viewer/pull/410 const entityName = entity.name.toLowerCase() - const e = new Entity('1.16.4', entityName, scene, overrides) + const e = new Entity.EntityMesh('1.16.4', entityName, scene, overrides) - addNametag(entity, options, e.mesh) - return e.mesh + if (e.mesh) { + addNametag(entity, options, e.mesh) + return e.mesh + } } catch (err) { - console.log(err) + reportError?.(err) } } @@ -75,11 +78,15 @@ function getEntityMesh (entity, scene, options, overrides) { geometry.translate(0, entity.height / 2, 0) const material = new THREE.MeshBasicMaterial({ color: 0xff_00_ff }) const cube = new THREE.Mesh(geometry, material) + addNametag({ + username: entity.name, + height: entity.height, + }, options, cube) return cube } export class Entities extends EventEmitter { - constructor(scene) { + constructor (scene) { super() this.scene = scene this.entities = {} @@ -257,6 +264,11 @@ export class Entities extends EventEmitter { } update (/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) { + let isPlayerModel = entity.name === 'player' + if (entity.name === 'zombie' || entity.name === 'zombie_villager' || entity.name === 'husk') { + isPlayerModel = true + overrides.texture = `textures/1.16.4/entity/${entity.name === 'zombie_villager' ? 'zombie_villager/zombie_villager.png' : `zombie/${entity.name}.png`}` + } if (!this.entities[entity.id] && !entity.delete) { const group = new THREE.Group() let mesh @@ -313,7 +325,7 @@ export class Entities extends EventEmitter { } } } - } else if (entity.name === 'player') { + } else if (isPlayerModel) { // CREATE NEW PLAYER ENTITY const wrapper = new THREE.Group() /** @type {PlayerObject & { animation?: PlayerAnimation }} */ @@ -369,8 +381,8 @@ export class Entities extends EventEmitter { this.emit('add', entity) - if (entity.name === 'player') { - this.updatePlayerSkin(entity.id, '', stevePng) + if (isPlayerModel) { + this.updatePlayerSkin(entity.id, '', overrides?.texture || stevePng) } this.setDebugMode(this.debugMode, group) this.setVisible(this.visible, group) diff --git a/prismarine-viewer/viewer/lib/entity/Entity.js b/prismarine-viewer/viewer/lib/entity/EntityMesh.js similarity index 57% rename from prismarine-viewer/viewer/lib/entity/Entity.js rename to prismarine-viewer/viewer/lib/entity/EntityMesh.js index 881ad8c9..6acb665a 100644 --- a/prismarine-viewer/viewer/lib/entity/Entity.js +++ b/prismarine-viewer/viewer/lib/entity/EntityMesh.js @@ -1,7 +1,9 @@ //@ts-check -/* global THREE */ - -const entities = require('./entities.json') +import { OBJLoader } from 'three-stdlib' +import entities from './entities.json' +import { externalModels } from './objModels' +import externalTexturesJson from './externalTextures.json' +// import { loadTexture } from globalThis.isElectron ? '../utils.electron.js' : '../utils'; const { loadTexture } = globalThis.isElectron ? require('../utils.electron.js') : require('../utils') const elemFaces = { @@ -175,7 +177,7 @@ function getMesh (texture, jsonModel, overrides = {}) { const rootBones = [] for (const jsonBone of jsonModel.bones) { - if (jsonBone.parent) bones[jsonBone.parent].add(bones[jsonBone.name]) + if (jsonBone.parent && bones[jsonBone.parent]) bones[jsonBone.parent].add(bones[jsonBone.name]) else { rootBones.push(bones[jsonBone.name]) } @@ -213,28 +215,136 @@ function getMesh (texture, jsonModel, overrides = {}) { return mesh } -// TODO! -const entitiesMap = { - // item: null, - 'glow_squid': 'squid' +export const knownNotHandled = [ + 'area_effect_cloud', 'block_display', + 'chest_boat', 'end_crystal', + 'falling_block', 'furnace_minecart', + 'giant', 'glow_item_frame', + 'glow_squid', 'illusioner', + 'interaction', 'item', + 'item_display', 'item_frame', + 'lightning_bolt', 'marker', + 'painting', 'spawner_minecart', + 'spectral_arrow', 'text_display', + 'tnt', 'trader_llama', 'zombie_horse' +] + +export const temporaryMap = { + 'furnace_minecart': 'minecart', + 'spawner_minecart': 'minecart', + 'chest_minecart': 'minecart', + 'hopper_minecart': 'minecart', + 'command_block_minecart': 'minecart', + 'tnt_minecart': 'minecart', + 'glow_squid': 'squid', + 'trader_llama': 'llama', + 'chest_boat': 'boat', + 'spectral_arrow': 'arrow', + 'husk': 'zombie', + 'zombie_horse': 'horse', + 'donkey': 'horse', + 'skeleton_horse': 'horse', + 'mule': 'horse', + 'ocelot': 'cat', + // 'falling_block': 'block', + // 'lightning_bolt': 'lightning', } -// const unknownEntitiesSet = new Set() - const getEntity = (name) => { - let mappedValue = entitiesMap[name] - if (mappedValue) name = mappedValue - return entities[name] } -class Entity { - constructor (version, type, scene, /** @type {{textures?, rotation?: Record}} */overrides = {}) { - const e = getEntity(type) +// const externalModelsTextures = { +// allay: 'allay/allay', +// axolotl: 'axolotl/axolotl_blue', +// blaze: 'blaze', +// camel: 'camel/camel', +// cat: 'cat/black', +// chicken: 'chicken', +// cod: 'fish/cod', +// creeper: 'creeper/creeper', +// dolphin: 'dolphin', +// ender_dragon: 'enderdragon/dragon', +// enderman: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAABGdBTUEAALGPC/xhBQAAAY5JREFUaN7lWNESgzAI8yv8/z/tXjZPHSShYitb73rXedo1AQJ0WchY17WhudQZ7TS18Qb5AXtY/yUBO8tXIaCRqRNwXlcgwDJgmAALfBUP8AjYEdHnAZUIAGdvPy+CnobJIVw9DVIPEABawuEyyvYx1sMIMP8fAbUO7ukBImZmCCEP2AhglnRip8vio7MIxYEsaVkdeYNjYfbN/BBA1twP9AxpB0qlMwj48gBP5Ji1rXc8nfBImk6A5+KqShNwdTwgKy0xYRzdS4yoY651W8EDRwGVJEDVITGtjiEAaEBq3o4SwGqRVAKsdVYIsAzDCACV6VwCFMBCpqLvgudzQ6CnjL5afmeX4pdE0LIQuYCBzZbQfT4rC6COUQGn9B3MQ28pSIxDSDdNrKdQSZJ7lDurMeZm6iEjKVENh8cQgBowBFK5gEHhsO3xFA/oKXp6vg8RoHaD2QRkiaDnAYcZAcB+E6GTRVAhQCVJyVImKOUiBLW3KL4jzU2POHp64RIQ/ADO6D6Ry1gl9tlN1Xm+AK8s2jHadDijAAAAAElFTkSuQmCC', +// endermite: 'endermite', +// fox: 'fox/fox', +// frog: 'frog/cold_frog', +// ghast: 'ghast/ghast', +// goat: 'goat/goat', +// guardian: 'guardian', +// horse: 'horse/horse_brown', +// llama: 'llama/creamy', +// minecart: 'minecart', +// parrot: 'parrot/parrot_grey', +// piglin: 'piglin/piglin', +// pillager: 'illager/pillager', +// rabbit: 'rabbit/brown', +// sheep: 'sheep/sheep', +// shulker: 'shulker/shulker', +// sniffer: 'sniffer/sniffer', +// spider: 'spider/spider', +// tadpole: 'tadpole/tadpole', +// turtle: 'turtle/big_sea_turtle', +// vex: 'illager/vex', +// villager: 'villager/villager', +// warden: 'warden/warden', +// witch: 'witch', +// wolf: 'wolf/wolf', +// zombie_villager: 'zombie_villager/zombie_villager' +// } +export class EntityMesh { + constructor (version, type, scene, /** @type {{textures?, rotation?: Record}} */overrides = {}) { + let originalType = type + const mappedValue = temporaryMap[type] + if (mappedValue) type = mappedValue + + if (externalModels[type]) { + const objLoader = new OBJLoader() + let texturePath = externalTexturesJson[type] + if (originalType === 'zombie_horse') { + texturePath = `textures/${version}/entity/horse/horse_zombie.png` + } + if (originalType === 'skeleton_horse') { + texturePath = `textures/${version}/entity/horse/horse_skeleton.png` + } + if (originalType === 'donkey') { + texturePath = `textures/${version}/entity/horse/donkey.png` + } + if (originalType === 'mule') { + texturePath = `textures/${version}/entity/horse/mule.png` + } + if (originalType === 'ocelot') { + texturePath = `textures/${version}/entity/cat/ocelot.png` + } + if (!texturePath) throw new Error(`No texture for ${type}`) + const texture = new THREE.TextureLoader().load(texturePath) + texture.minFilter = THREE.NearestFilter + texture.magFilter = THREE.NearestFilter + const material = new THREE.MeshBasicMaterial({ + map: texture, + transparent: true, + }) + const obj = objLoader.parse(externalModels[type]) + this.mesh = obj + obj.traverse((child) => { + if (child instanceof THREE.Mesh) { + child.material = material + // todo + if (child.name === 'Head layer') child.visible = false + if (child.name === 'Head' && overrides.rotation?.head) { // todo + child.rotation.x -= (overrides.rotation.head.x ?? 0) * Math.PI / 180 + child.rotation.y -= (overrides.rotation.head.y ?? 0) * Math.PI / 180 + child.rotation.z -= (overrides.rotation.head.z ?? 0) * Math.PI / 180 + } + } + }) + return + } + + const e = getEntity(type) if (!e) { - // if (unknownEntitiesSet.has(type)) throw new Error('ignore...') - // unknownEntitiesSet.add(type) + if (knownNotHandled.includes(type)) return throw new Error(`Unknown entity ${type}`) } @@ -256,6 +366,12 @@ class Entity { } static getStaticData (name) { + name = temporaryMap[name] || name + if (externalModels[name]) { + return { + boneNames: [] // todo + } + } const e = getEntity(name) if (!e) throw new Error(`Unknown entity ${name}`) return { @@ -263,5 +379,3 @@ class Entity { } } } - -module.exports = Entity diff --git a/prismarine-viewer/viewer/lib/entity/externalTextures.json b/prismarine-viewer/viewer/lib/entity/externalTextures.json new file mode 100644 index 00000000..a5ec3d13 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/externalTextures.json @@ -0,0 +1 @@ +{"allay":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAV1BMVEUAAAA4jNkuh9Ypg9FBnNpCm9r///+c/P+A/P9k+/9N8/hM6f9Q2f8+5eo94PdG0P821+4s1ewiz/8syf8ox/8bxPNNq+wQwf8os+hCnNpCm9oep9s0h8D7j8AOAAAABnRSTlMAoKCg3PODq/XXAAAA60lEQVR42tWP0W7DIAxFb9OtwdA6xQ3rzZL//84BD0nRljzsZdqxZCx8hLio3Lz4GwtYMWLDi4jnPM+vwogNKTTC43Elr6vgRMQ1wvM5ktsbvRPXN38wGxKHMmnI9M65vgxavwsg2WCpCvlSg6iqlCF4ceKbFEGZVC+5NFFXYUtxZzILl1xmiffoxUcA5DUHKULZp6iqsQzU6KNWYcxBUMnp8A2mwWxAhTPR0qRYFs6sDT+zTMZpWj5pO8L0wamexJ9xXvm10J27rrQ94dSdOqC0PSFXPV4JRuwRzIxGHMB38O14j4N9Wf4/vgDzpRGDwkNeQQAAAABJRU5ErkJggg==","axolotl":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEUAAACvsv+zsPmmqv+nn/+GkPXWhCt+iOyBb+d1b/9odutodOyTWuRbb+NlZfS0W0xsV+JpVuNNWc82QZ86AGw+Ir4cAAAAAXRSTlMAQObYZgAAAUdJREFUeNrtk9FugzAMRXG4twFS1jbl/791cbJUQnuAmE2VKk5cKpDukeNA9zeAhP4mwDlgahdAEoDm1dAukIzmlXaB/HBcUGbQJCBkBejgkMrt3j5WeYGD0iAglkXkehVZFlBQ2b0FkKjtE2CjIIYEUfIhESdMCUyWoyBFZPZI+Nks8OUs/f7kXSsLgCxwiRbBl9YRgddazcC5lhnc/T1VFdQObDMIwdJBRQQhYNWBTTCXYzR0AMZIyOy9c373FuQFGXLJLzYFEJQvQSHKgwKwJQAF1BWqIBC6hNlKbAg0GPXyjDHkeqoj6iVAn4DdP/NQhuHxsAr6HroAswB52QUcySTgeGQGg3J8lPY55h7Q9705XQdpEgwaHXVhtHZQX6Whew+X+mfldsn5W3fEYM9fVjfm/pXShd1g38UrdvuIGZycnJy8kW/CDQ5IMRlUUgAAAABJRU5ErkJggg==","blaze":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAJ1BMVEUAAAD//////4T/+Ef/1Sj8shf8lgDReACrdQGLNAFsMQBfAgExDgs044iSAAAAAXRSTlMAQObYZgAAAPdJREFUeNrdzzFuAjEQheH3vNR4xtCkibyQA4CSCyAlfZocIjdKm4sFxAHwGKVmQo21Ts9X//IbE1evBfpBjG9ozXDlJZkKTkAr4IpShNVkMjiJ7wuUkwEJhcAmAzFGNcTJoFisJZph6heJiG7xDLT4XKRC4KiubvSf24kY6hiLnVPMVfE+NhPbo2Y3YVBfPA2/Q3PkchGGx++H4yZvd3GdNrjBr32FeDzPUdN88Mvn7QRHHiSX9SkMwnxYNTdkq7sDlMsLkZHRBEwBGaBpKnQ6GqsVegLIfrDOfOkGI0W7gQTN6JhJQlcYCOm+oJyjHyD+F7jg7v0B5TtIgi1mkx4AAAAASUVORK5CYII=","camel":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAATlBMVEUAAAD8w2n1ul3prUrbnz3xi1ywmYjLkzfrdTmoilu4gieqg0Scf1DaZiyMcEV/b2OnTiFtX0h3XTNfUj5VSENfSCN/ORlJPzBRIQwvKBwTHWK4AAAAAXRSTlMAQObYZgAACApJREFUeNrtmItiqzYMho2kE7VeKbRJGX3/F110sQ0xlNC0y85Z/6aJLwJ92EYWhBC6U4iil5fjy0uYCppGPmEiRIyRtSBFkVVYC66maQCbs8JH+iuYDgngeDxuAwAwovQhInA0GpAazwAauBbgcAgGcBTNAUBOBLPrB0A+awrAaADMMwDYAkjmXQb4+wIAFQDDkgAQHKCWHnYNgGsdABpYBXgCYI58K0BUMRMicTRlAAQAXAbAx8dHfGLmpxUAaK4D4OwfkLkCwBpAqZ6ezgBPT1Iu/fsXoQOwAAAgOYH6yLeZFKQOJut8fX17ent9XQcAhD0ARAhYAAQH3t7ftfb+/gZClwHwTZgeXx8RpfxpgOcCQITqQ1YBJ4DJCCQAdIDz9aukgPjZNWBBJ68AI5DpiIEIVFEEKmEUFAyAKCswf8PyGsAtgBeLu+5fgG0VEHEQbwXA2QhFFNbUFBkANHMB6HVlgGMGkHa3YDIAZUKKMZIUzL+OwToAFE+N/+UmrQBOASTurgGgE5Ao+Qe7F8KaAJNrkTlzlLME3ucwE4QMgJCngIg5gBO4Y/sxrQMgpqtEQkLU7wwiVflUQ8h2E6iIWKRxAI1A/8mmAUQY1qReHbdIWmDWWgGwDjupSVQFVIfyXQq4FBdXMok9Nub+LPk2AA4I6ZILCC7dBSuZxB4b88zEImIDELcZIJWJkJAqgKVMYo+N+0ciGwsFmM5ALhLLnwJsbeQ7bAyAAIGYMgAnAiz+mVj11QDqH4EsCjrAljYziWJj3RyLagAktI8RMIUtbWQSRZHZt9lVAGZxTc+EhEZA2wBLmQQvAcy7DbkGiM9Hfubjc0S3C5uqMwmRpjIi9Hs7+AAROYAQ14P0fDw+H+XrYiAbFTBYQc/pIqLLTEIVfBNSC+JQ+tVadX2sUvcKAAbARUQXmYRfMjg0s1bNf14FeuD1sUq2J2iQUH8b4qnoMpMg8RIaE5OIA3m3E7AYXR+rfGdH39fTNfjv5UaOZxUAJhuB1A0GIEbboaIApG1U3bh/MoIagAjnI7AEQLQHAETEBCIFiHJmKyxlEgVANJkCQAMQo+tjlR+ZvHjcIbddzCTyIiRi4ckGnnCL0YeximcAlkawpRWN+08El5mENTqAj1SIeiw5tk3iZqwqAN7MYuMAZQSWMwmPAzGyAzAno+VoWcWq2RSgYzFj0/gApDNVmYSYCTSILZtN7k0cXAPMY5V8pgBGpABGkgGqTIItnRWB+YuBrBOdwGxmmscq8zGZAo4mRmjm/mOVSVhCb4rmTwDIbdhBLwDqWGWMDhCTHIBUalllEjOAyOs2M1WhQk1qgPouWM4kygjYFPDEhsxmH8D6CCxmEtMRiGs2M63HqnoNlEUgzcuZBJp0KtdsZlqPVfVd4P6dYDmTQJPBrtjMNI9VVSByaPYRyABmVCsDmMK2qlhVRULzawCRZkbogvwE0yBKgeQ3Nc9VAUxiVQ3gCbcGy2ozcgDKTzBi5G8TGqloq1mU73ChKlaJlwwAYHcOAfgUuOYAVN4IEBIgkdZUVACkWAOUWFUBgG2HbJsh1GtAz5sB0F9pIBFpbQ7gPVc/GdUJSfJfRiCfFwHBLpKJDZkQtZUEUcTWVwOsxyqwlIwtJQOOsQxAAdA29a5dFEk5jcHaDICjnfv6JyN7s4SMoIk5c0kIHIAFwNeQHipOSBxZFcVWARij7bY1wHqsUv+AhKAEpH3qRWTH6hVb3GPx7GKeNiMjl8fXfU9GnhVL0c5WQvEXyV+q6o8WSoMWbQq0XDq1Vo5LQv/dCeDnqAWz54LKJru/GcCvL6uUPVsldD+1XTm4AEDYI7DrnF0hpjKQrzzKLTgbIRsbx4MI+wHyO8lyJSAVL4p/JQD3KJ354ss7TDsuWh/uBGgAmTC/1wWgNOeAFE2EkNYEJTutMEKzC2BcADACBPRNldK6xwkApnuCiqH5NwABjwSwBTDUAHIK9sQIPLpaK6ImSfKFmJ9Bix0xa6t2ap8W9gHYhHuMRf2j6GsCiSPbh9DnPLqVZyZgrQAOJwUK6+pXXrJH4pxykzqBRgGSCHWWtS9bMkWwPduWMpMVkrP24eGh7YfhQwDf6/NG6/Eb9cxS1T9m5UTpy3Zi6f49qfWJrC67d79tGyrZLehZrCgngQAYI6f9V+v5CTbb6wSopO5coVb7IAr/ltqhFw1t+D7p/I6iUGsYx2GQr3A/Cdmt8on73DgO/RDuqr7t/1yAdq3WnSqAr/dSolldO5xuXgPbXsqOWtcOh677srtgWK2N7sTVjaXYnU5fEwfavu+G3gdRCl3ft63GnrYagTtEwjVqL/SC+uvXL8Gt274PSgfMh6w19Uttfy7AMPbmYRyG3jQstX3n9jOI9Ne11BZ+9KMf/eh30tj37XkLa/t+vBdAa7oXwJABhh+A/yVAOw69J3L9MPbjXGFRnrkmm9t0dpnTmHFsLxKNsKgzrxCb5a0AYXKGuzzq3x+gHwpL/wPwA/AD8F+OA22/0fW7ArTTveCjzait6KquT6mf7oYfbUb9sLGMvjsfuD/AuNH13QDDuNF1f4D7Pxd0J1F3pycjf4vbHQ4b8aKqjEPvMzDus9zWNoCfd7C3bTst9wMMVWWv5e37Xl3ZtvxjAA790FWn3WN5O8DYySry17ujlK0STKk+mqUbjl/22qAbxlM57eTNbnKQ62JZUL3/9kDUnfur8LnD8vZANI5V/L7J0r12G4XqtFXFtd/Sx32j8N0Ap9N24R/eOq3aGiGdPwAAAABJRU5ErkJggg==","cat":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAATlBMVEXv9O3r8Oj72bPW1sz71Wf2ymD1yF7ywFnxv1jvt1Pqq0uvdh57bWJjSy9KMBc6Kh0RDxgAAADq6urOzs6vr7C+c3NanRJWU18kJDEcGCdfq47cAAAAEnRSTlMAAAAAAAAAAAAAAAAAAAAAAACVcz0/AAABUUlEQVR42t3T3VrCMAyA4Yi1SmtlSxSS+79Rkz6R0dEywTO/0rPyPst+IFhiMSJyAW+amJBFA08EEWBeBQtQ/1BKuRuY5yAusACo4ABSBUpFxbsCPkJKDgiLgAktANYYOFhyDlxQgFCFbUA6VaGg9lsAj3LExmBCi1i8MdDNBWJ5GBDmFmBhFuE7ANQWgInVY+q8B8wh58w8gy2rBxASIRJ2gVwBOOf3oAFQ6wL1kP0QeQU0AhRdIb5eAe+15V1vAWqB/X4E2PgrADtA3O/XgJ3WTSDeCJi8zcc4eAo+QroBsC7hC4AMOAspxGQNAUZdTDwAtkdAQrTdALQAMYX4FkIYA1VwoNZ+CynqCLeuIOSkAYyAqRZjFyDNAe8FytIOLuoCNv3hkLPtkP3k8xNc1RthZ6YiPwAMmmoAHUC028DGCKevkwg8DnxafwDmO/uHwDebkIAap1EwrQAAAABJRU5ErkJggg==","chicken":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAALVBMVEUAAAD////i4uL85XDT09PhzGLGxsbgu2nTrlrQqT/Bk0OWcjRjVkH/AAAAAADtfCsnAAAAAXRSTlMAQObYZgAAAO9JREFUeNrtzMFJxFAQxvFZrGAewaMwwxQg2IA7fMzZElQecxZswHZc7CAd2MM72IlJVoXEbATP+7998OMj2kmHW6LXQ9/T0AUt25UuB/D+dgQ317+AXLZ7OgxN4vmJ5vGxforGXhbgSj9ElFqjrxYXomN+GriqmqG1H3E3B7DmQN0A0Wpk0laqKlw2gKv9AdycbRNE1dgA1SOy0hTWQCIrgqaUlnGBqkLY4aeAq0FYfT/OFRBQVGERWQddAKh7ZuFVUCwqorow8166jgVzoBaZWV2FRZS5iM2BYwKwBzEfjJSYg/zOIx7hDk86948+AcUmS5dD8ZFCAAAAAElFTkSuQmCC","cod":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAJFBMVEX///8AAADr2sPWxa3KtJXCqIW2lmusiVmScVqEZVEiHyYAAAB2QJV6AAAAAnRSTlMAAHaTzTgAAACbSURBVHja7coxCsJAEIXh5w18RSRiZQT7sAS8Rgyz2kbYIN5CiDBbx8CewHM6QS3sLf1hivl4yMc626+ZCgKQzENVF6eSsaCVkRCRfCiZhFYwcM4t+13SqFdOwS6/Vw+5HA3qFyz7beOqriX9ezFsKmlcySn4lFKMMQiJGYWwR9VQyTnGmggh3M7eeyGBQ0u4TwZkR/C7P/weVk/OOkCzBdD8ogAAAABJRU5ErkJggg==","creeper":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAK2klEQVR42tWZ61NU5/3And+L3zTNdDpT08Q0NiamOtFG8cJlQa4uy22vsCzLLrssgtw0KooIMcaqFFFRXOSiQjA11lwIVRF1QRBW7gIuy9H1pLgpM9SZ/hmf7j4zzXT6Jn1jkTPzzNlzec6e7+f53s+yn9piOzdzwltJp3SdNrmZW1IHKc5E+ufvUDJhJndYR4/UTa5Pw8ePrWQ1mrjp/5qhhT76JRfLlvoWcXYzceei+EMAws7v06n070R9LpXxF0NktKSjuR1L7/wtSr3ZHBgsYNDfi8Gp5Za3gw7/1aUPIHkwjLSxKAytGg5KBZT1FOD3+/nkWTH75uwMzQ0w9sJNXk86X/nbyT5lpuqvhWSPJnFL/mrpAyh6bMI+osPUmEnetA7bPS0j824OeXdS6DbR4+ui23MDSZKYm5sT+3JvPoYuJU2e00sfQHrfdpTd4bh9A0LVi3stQsiqsV3sdtnF7wOTeZQ/ykeWZbzyY/IeGnDUOrgndy59AHG1CmxuHa1yPabmDF68eEHB5wVitXd2Z9Ev9XJkdhelXTYBQ1+nE5B2XilgcL536QPoePInrnmvsOz6MrT3NUzNj2NxWshx5uBodmB2ZmHo2c7M/BTGJgPWhmwRKfZM5nBwomDpAzD0a9gxYhQAXr/6Os8XvhcAhuUB0j/X4BjWUThnxNRjRD0Ry26fhYzzBg75Cyh/UPjqA1DPxKC/r6Td24RjVI+lJ42cOgtFY1nYh/Rcf/wFy7/9JZruBNrH24Wa1/gP8tn0XrTONEpnzOwbzaPl6VkB6Xe33iWpbjslwxby+4w898/hGDSwtzdPRI978i0+9lnZNW1FU5+2+ICyHqSgP6PjrHSUlBYV2t446qQTJN2PEgnQusa1ATAWElzh7H1UiKYhhTK/ncJ+k4Cx566D5AYl9z33gwDEuC13cGikhPl/PMfRZse90EvpkF1cW92+msrJQgrdWVzw1LL4Kt6ow+fz0em/ykXpnMj24k/GEn8+AMBTTvJoOKsy30KRvZlG+SzmS1m8q1sRPBYrWnilUHj/q1NX2dS1id989zY51VbMrZlIPi+H/1rMoYDArmnXj4CyhtScnq1h73j+4gOonCrih4UfMHuTyXmqpsN/DZd8gxb5LK2yE81UjBA4cCvFMyaSb0eK329FvUGVpzioDQJE/qwRi5TG9/5nYv7oC7fQkE/9JVQMltAr32PFzTf4xdev0/aojdimGJTuMP6vbdnPFhWAozsDkcpOWcXqKFyh2CU16uloqqUjnJZOUOgy0yTXs1L/Br/VvMmw5CblrIpcr4bM7kQhaPXf9lPeJ7RBCH3YU0qLVMdl2UnR7WwkeZY94zmUDxaKOsLQoqPoSebia0DecDoXZScJDbECwPKOX5E3qSX+dhjX59r4s9RK+kWdUPnA7WKsMq2gWDYxKPWxe9gmkh/9ZQ2Vo6UiTzgwvYMDDwuCgor0WFevERlj0YgZe4udPc9zMM4oGZOHFh9AbJOCK1Ije6d2EXVRQeaFDOJubqXaW0mDp0ZUdcVXi4Tg/z4c/QbSL2nRtKcKDbjmacXozMDeamP/QD4LCwtMShMMzw1gv2wjsS6Bsgc7xPlPPKWYXSkBGDYWXwMmdUEBRIJz1ddMu9yMsS+RG95vSGlMEit94m9lwuYbpT8Gzwsz2FYfQcmMGePkdjq912iW64MOVAh9yF3K7LwHq9PKvhk7H89YSW8w0Om/hnu+lz0PczFeNlA1Xfzq5QkZl/W0+xqEEzwmVfG+6h10Bi3bdfEoDKH8ZPXYmIA07xUFkk/2sacvlztyJ9f9X9Ar3eVLbyvai6lBkxCmUDCQyRVvCxVPCnCM6BYfSDAiqM7Fc9RTToOnmhXhb/KB4X00VdtZqfk1PzU/GDojzmyiyXdK+ABbgw31hWTOeY6z85kRw8x2kTdc9jYQcS6MzR3riHVFcdxXRlpf7OIDyD2Zy+GZErJGE0U4eztlOaEV61hr+oBVmrf5qfnbasJIm1BgH1YzK3kplIzYn6gxNOsolI0YHii5LrdRIBkJda1HRJ7eUHIGNDxaGFl8ADMLjyj63sTO/mBr6yve177DyqS3eCN0Oe9pVvxXGmCYiiPTpcITeNa+GRtlQ/kk1Megn44ht19H91xHAHAqb327nJQBFbWzxznmKRcR438ucLCo2ekxYvWoaXhaJ1bkva53yK4145YG+HjQjqYrhpOeCmESyV0Rwjeo7ilI7FaIVpnyYSiq4fDgPSJ9zn6YSlqtikfSGFGHN+NwGfjUWymumbtTRNTR9SuxdxuELyiczRDzj3krhSPdULWWNRnvCT/00gEE/1T7OJbtfwnn/PRJRNX3zWtY2yzMyjNknTeyz72DW/6vWd3+Hkc8VWgbU4WPiOvcjOF4CiFHP+DDPatIP5HGGtNqdrgzyGjS81R+QpgplKQj0XQG5oef28oV2RmYnyaSqdIHVlE3FDxLF6F395kS1ls/JGT/GrRNqQLuSwegcaZSMGIUL7Kx6SNCLm3gnq+LHZKBfRO5jM8PiZfXt2tYdWOlKIxCT29AUb+VyMBQnNmMyqUQqx92KoSPLOuprDuIZTKZ5PEoATTqQhgfFa0XYfCy9zza5lRMLUZszTnoz2pxPDBQefIgIZaPSL+kF5mpfUaDeiLm5QMom3Dw2Q+7eDo/i31Wzac/lOJocbB/No+Do0V4pRmsj1Ip8ZsIrRMtcsJPhwiBoxtCUT0MReOJFoVT5piSbF8qCls4m459yLbbm1D3JbHy9pusav0NIbYNNEunSGxMEN2irM+NZE4mElUTgq3GROa0EtOTJIQZ3n0b2+D/ICzW/r2C8gGRw1Mynv2vUPfjfmruEbl9OvIHM0W1eFE+i84TTfL9SCIDKq19vA3lnQihrmXj+aJrvKM+jy2V61HsD/mxAoy5t4XMaj364ymEVq8npGINH5jfZeOxNWwIqHxNYH6mW0VKb7S4/2df/D9bKta/fACHRoqxNdkEgP8QXuwDQxRE6XeVYvWD3wlSxxSo7oRR7SkXDdOw2hDhwAwXdFhdapHsZLgTOSkd5bWm1/j5n36OqnubmK9siEM7GUuyK1oci/mnN4lnJThjSOmKxdFsI6T2Q2Euy171LbIhTAgfcIoilT4tHSHmeAQR9VuFUOrxSKJrtlBRVyaupbQkkv/AyA3pujCbmEZFsM8gntEr3+XIuU+IyozC2mrmxvy3rz6AkKO/I++4GdWJSNLOxPJZ9RFR5YkGi+xENxVN0QML+2p2EXl0I6b7SSKcJl5IQDsdzw6fnrGFIYzjCcIciqrz6Jr/jpvSN8Fy/NUHYO7WCJtd17saU18SJdUFRBzfgPlJkugFnJKOkuPS0OG9TuSRjYSUrWVPTQlrzKtRnNhA6IH1VJ05yMZAKN1YsVZohmNCg8GTENSqVx/Altu/FwA2XQph273NQq1//+lq1u17H6fvlHBusefFt0VsPTp0dRoRYYyTcaJeUN0JF98RExpjUN6NEB2prEklCbe2cmwpAPjll78QAPJHLWxoWidyg8SuSMrO7KLs5G76JBc5ly3onGrS7kYJh2rxpKC8E0Z8QxTGVl0QlACnu6BG2RxP/M2tXJMuBfsRS6CtPhZNm+wU9noyMAKrJjrK33ivEGLdyOHnxRQ8y0DfrAmGUfElKfNuUgBUGFkziZgmVQzIvaIBUx+A853vS5J6FOI40Rn30gH8ExZbYyyH/1DEAAAAAElFTkSuQmCC","dolphin":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEX///+wwc2In7V8gp1ZV3NXVHBIRWP////D0uO/0Nu9y92wxNmwwc2lutCmuc2dssmSo7qKmrGAhqJrcY4ICR+8V/49AAAAB3RSTlMAAAAAAAAAVWTqWAAAAc1JREFUeNrt1GGPokAMxvFRz9sd2+kz5fb7f9ZrmYECnuDmkn3FL0oaSf8RJaT7iB6Pz8/Hg3J3u91+mzRCITtVIJwNS3JcUzMHSlkErtfr3fQAPQxB8uhVYPAA5xHf3fQNSguU6eSLwJ9hHXBpROTXR5S7F4GcLTBd5ioQP9BuwJF4gWU/wAt2tumBpnQRINoEhGUORIHeDggE0gJlWgLKPHUvLkEEqLUCIhZAVQXsaCoAP2q38yMG1Y8vdcOg7utD9VsBFgNf9zfEcO7eCuTMvdG3bb0X+K3AL3sDzGmlFNpVZskB22xxR9sRENkGUAqA4rDWPoqPk+OngIaKWdVnaVAVo2pDBKotGl+KQhurUa1zQAQjMRHICywCE3/vSrq2h0+/8KnDvC5s95m5D6ntR4BZLpfL+BgRv7WEKKY0Y03d3UWALZ5GlLMAkjPFdBQgskCOQKbl4ThQiEoEQHlEiGkRwItA3OsKalsa07cCg+/51hBTBGQvIIJxTWHUJ0Bk/V8AEXsKpD3M8Ux1ywCI8F5AwJD/CAhUtBUkFYeNMvlXQABVf3kCHgBq1YVagQgcid2N6tIxEWGXZ+ykScdie4En6XQ6nU6n00/7C3s4RNq7Xn9vAAAAAElFTkSuQmCC","ender_dragon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAAAdVBMVEUAAADgefqKioqFhYV9fX17e3t2dnZ0dHRwcHBpaWliYmJdXV3MAPpXV1dNTU1LS0tHR0eWALwjIyMiIiIhISEgICAcHBwbGxsaGhoYGBgXFxcWFhYREREQEBAPDw8ODg4NDQ0MDAwLCwsKCgoJCQkICAgDAwM0IucAAAAAAXRSTlMAQObYZgAAEQRJREFUeNrtXYt22ygTdm13JSVxnKa/XQsS+1/U7fs/4goj9AkNFyFF9lqHOWcOFwFWycx8DAzqStHb2/5N5Rjn3Mfh9uH+GAc0rG+YRvZ92+/3zQCMH49HyadjnWfgaz2zt1dt6j4MZcknlT82KVP9rykI46g+jKlx9JhH/WzQBOBdkdYcmoDX11eVK0v5spp52S+72/v6oV71USmIjiPbkL4+ouOU5fC++7e3RqQ5/3U6nTQz3i+T9u0zVz/an3OZmkTac0b7DiDefYfhfZ+f3/bNAJhzLXxG2dPe7Mdc9eAViI7DWL8/GzQB5B0G9f3+/e0VAxiC2Ct72qMt6ddpU5aSf/9Tp9YXhxKRvkMnAL+FvFf493me/yXTmk3B47xftrRHW+7oB3aKIhX4vnINRQH8FvKevvvn3fPzfves0rc96wsi65Y5c7fnui0sP2Xmtt4hJRqKAuTd/X1fX9+enl53T69Pu9c6/xpCAdKetoUAU4YozoUCx0gUkIK8e3veve32V6EOoQBpT9oSAQ5bcqAAVSgw6RsYh3PaN0yc+VFgqNV1oYP/d8F8LAqopRQQB78bohgUAPHSKrTIe/rTcaajgEIZyquhRFAgYMUNy08t8GBLjvZQqDCCjPRHfMT8gmhZw6OtzQIPteSkPeMsqq8UeL3+N/0T7WMcdbvAWroVvkZ4ugLuWMNTxHD5AmEUgBKRvnGW/0RQaRCahASItrcKrdMX8K7hz5+y3fmslAh5WR/qSy1/D5WQJ1ZzGjtQgEWigHz++SnbfZ6hRDIv67197ejDnPm+1WyEBRZTCxKHEnTL2sqr8iAUQL13Aj4+ZJuPMwRY5mV9AEF8/git91hfziPKsPbUgY32BajAc24ohacv8UGQD/sFjBGr7y8zj68AjvcFjn2B56yvFGEE4SyQp+OUPUsbLJe+8iRfAAIPhYJSDEOQkuYpQlELCuZmmYXLHGV3u/Ca3BB4KNsgFHCgD3chFDU+YBbaEXK297YLr+cNgdfLGCgF42wYCtjzzMj7JqAcXSY+RBwKGAIPxPk4y/TjQ+aHoIADlcoACritN6fP3eVwvW+JRVFgOFutvQuhIlCAWnn6PJSnKKLGNPf9+8se9RwCDAe3aav3/Hvv7LT8zIVEAatOygQVSF/aDsx99UABn3JBsPFbkXnfTgyPKMPaU0sbjQ4WX4AHlAt9I/O+nRgWUYa1j/AFOEMf3jkEO/z8+fPw+fmzTj/PMv9TtjMPyGQf9Ee9f/1PEcG3E1OS8jH0fJgvgDZ2Pry/vx8+Pt7r9OMs8+94FmSMH3wfigJEwMaiAicWeIgv8CUnwp73CfsC/jV8EBWmngswhrbmya4qrwaQC4kGnRGUx5CVD6BCOe1cwIoy4NizAIJEwR0hzkO+QBgVgALxvgDHb3KO8azto30BO1qFUCBq7U9QINYX4F1rzsjvk/ZhXyCICBEoAKvqKyNfxvsC2FWSqf8cItoXsL93wBfg5FzAW55yOgwU0P1Jv0koQPNhX4BY+cCOUSQKcCsKYIlDfn8CCnDkZ/cFqNUdfC5Q6rYqlTwWBfA+9N2G7gixoC/gbR+upyig26oU449BgbBvQscM7viwAAqwqBghigIYkyEfiwK+9T9Fq8Bp8CTfgCJCwKqT8caiAP1dZz7mNDiqDOaDT4cZ6TcuLkhxB0lUvlUAKJr/XGC8L0DahX2BMApFRIdGMEEB/9o/phyut59GXwUUB3NN3oYa1v6aL79fvtX08vuCfmELGtr3D5V9J7OE+dTTaEv/E9fvggmIiAnCDg22HM2yFmpSPsWcDmPMSez1Ay6/f9Qz8PLj9wXt4mJq4tlhgX2Rosdmza9OpOXuT9O33g1SYzZl/RtqPFX2IsDl95+Xmv5ABeYnxuN8AXraXPNB5g8HxsOn097fryfgz48ff/5ABeanoC8QRBFZdzgef177hHwRf4ySnABJUIH5KTJSFKEYunz89vKtrCfgndeZkxGfZEMd724QJuB2KhARKQp0gDLU7b69vHxjdVmmsmwokM83wO8DBRTdUgVid4QCvkew7PMDMAE3VIHoc4H6Gay7HVXa/KBIVTjTnQkorZeCZqDoSFEWPC0m7QMogDU+IypALgVNp6mRojTmqM9xkarGCbNHBfb7t/08KFCOOh3WbenSCu08t9ZAxpbqpaXSci9iBhXwRIp6bpOZVp6zv1++XenlbziwQAke9iVaZcIEoJ1xNXQGIrsuodghRnyD/7cTwGzPwyjQKgEmgFmvhs5BFmsfE95wFdx2AkrynJQH+jI3RYH4GCFttS0ogOcnLtsj5UphRvLMKECtvbt+KlPnupeXKcrN786IAlxbc2LZ4QCjfvLveeKDfM9mQ4FYYfwK1OEaLbhCCSgVFFKVgSi7nQMFIFzL5vwvoIBzLQ22L2/6yxXkewrQllEPNhQETBSIXN6x+wLYByQoIC1/w9/z799l2jKx4kGO3P8fOW58jBEmQCpCixby2X632z0rllc9ZaoYiIAdnTDHWfsZxrX7AtgINU+A9b1oxfv6wr9MFQMRYFXjOLzzM8O4dl8AG6GGsrb3op92kl+fnpA3EIFHCGZ05Od4Hnz3mGMj1NiR0uv/mq9Cv9upVNZJJhsakRze+WFjxou/e8yxD0iiQeX6/8r6wr/MNzx5AsL7/5PGDZ8u0wnovkvkXeHx7LLWI1Eg/u5xdxeIRZwqT0WB8K0xNse4nHkmgESDRuzoRHH86XA8D480xQQQFIg/HY7nQIxQNMdHmmICjLV/5I5OPIdjhOZBF88E4Ddxihymuaz1SHSJjzS9tIQ+ZXkrFOCc+erH8/BIU0wA+vDZUSAcEToZXRz1ngnAVyJiUOD+vsD0GCPKYRS4my8wHV3GsedwcwYUwFp+RnRB3FIvL1OUm34zTABQ4Ia+AE6PZblU7ciuFNqGUYHx/6gv4KgfqwSeff15doQmjutEgTn29WGxSaiCbzuzbdf202M0ZYwJwcT4qMNYxju0bQ3hn2Vf/5F4tRQq8jy/Jbtf5F4TkGVZsV5nRbZeb400U7yuy0hlXf1cporrtiiD67p2PFlux1y5KF/dh/Jiu91sY7koxvZzv8j5cp8J2Gw3m2gucvSLYvffObvTBChhjeZsbD+3Ll7uMwNFAQGN4KLYjuvnfhFxPt8PBa4CmteMNM9VCguuhF/mNyhL1v2R5i33FCf3TsDlTihwIw6gQHW5qRLkRVHckakqbPLL+ZYykOcFEVZVhjDX9aYAq7LuhzpDYVR7jKvHqp/pvpuCqsI6u07AzeyAWsJgKRPF6De2P1WFbSEuUgluJQOFtuajUCAvSP+paLDNxVnJwG2EQAuzSuMY/fLR/ekEZGoCbmUJCr1WHyHA8Bmy0f2pESwqqQAt3wAF1JoeKeWu0KKueV6nqp9uo/2DXh2UBfVWFKjU3x88Nwrk92MrCmACuiyyOR1lup8/th1o3CfVgQImVxCWeYhzXGr3neaq57gY4z3kwyV6FUXqaU1RwGRR5Le4bIVQ57HtQKwTJh0Ik6AoQBVgK2aERZxKt1ue4XYq9YZ6tFu07jAJLwqAi21ezWsMGfb/h/y/A1y3DyoV2loVxo8CUIBNLmaeAOz/D/lqNGNBoeb4PwY8n2DxokCrDFmRiZn9A4Ro+4XVvEXmRQFczm8mIBYFKq0AVaEUYzUjDd3v56fP0+nMuEoDKMBlO8QnxaKAAALM5yTHfyHi83j6lNZdpj4UkG0YMz7CG4kCmIB1pvJzWf/eF+RUeiy59W7wx/H0IZ+pNLy0AkeiQNVRgKK65me2/jTlnLY/n36dT1ynY/+HmQEo0KY56mb74gSzp5zR9ufj8fPEdEqe98Mh8OFeogwBFKhaBUDdbF+c6N8Ndlr5o/yHf5yOOqWC3wusM1AAS6IwClTnJs23SgHmUQJ8PxQRpShTK3+6Wn/5TKVkPBKSwTinF2+4BwVyZQTFWaVy61DnZxABXHbvpviiHJkAZf2POiXjkfBqxjgNtmMeFMhEdwKqrFaAJi95FhSAcJKUTICy/keVuifACPMgwXoe9NAWX7QK0HOQ57hrDOG0pNzgX8r6OwPkIPhUGRBs50WBQnSWwUIqgMzPJQP4fqghpCgz8zulR2X9G8FGvSqbH/6iyqDrvCjQnYAq0+UOz+cDQEibMvmwbvn+fn5//zi805giy9VNxCupZ1AwDwps8wp+gCi2hWjy4Bm+OGFYf5SpgB8On4fD+X+H2WKLtptcSPTXCmDdIfpSFIDAQrBRXt2atutMQAGyNSxAl79wAmCpCRrAgb0hba7LnkohQNEoxIXwl/oCuE9A0eD2E4BlDxTAwnPtBDFmpqtb03otJ4AoAOUZfAFYf6SrGxJQwKUAMxyaEetPfIFbEVBAI0C+zYXKO/gLUQDWH+X7oYBWAHJGMIMlcPkAGh3uggJOBai+XhFg9a07QvdCgSrPN9oxBtvl4ct8AaAByndCAYUAPQWoxHkGRMA9gM7llxLpXVDAqgAV8hae6X7CfVBAK0AXAUSFvJUXcFcAKFBk6x4CIO/iL70rsJYp4v91GQFx9rsCTRtLH5nirkAIBVRMTgHhh0Ps5i++K1D062Q8EOoQF4Tn6Icx0Eazjg51nhGokGMshwSEf7YVwT3ignBoxlkPBZQCZLAAs04ABPm2XGK5VfZRYFszwiQG8mj9b4QbAq7TDRXg4vq8fdYKOSJF0V6PSxRL/fu4Wm5Rf2Obb4AA4NmMoD/mX+fRRrMZAm0wqeu1y+VvKuFXitBDASBADE9BgHswCZ6bSMXqYWiWJdclXz0AwQHXwo/8NMf7XGWrhyGOHaiym5/y97+IB1IB1u44cY78pO3Xy1k8hgpgG7YRfuQnbL+qSNLVw1DZuXyP/PjtVxVH9Ego0J4/MI78r5EqoDdLHh4Fjmyk8Csu1quHoc7/VgNFsKFAXvgPwbq+QL5dPQx1LT/jyNvcdGHf+dN14HyzegwCCjQHcMjTlhkOxgIssgdSgXYJBEVwBM5Vg53iqnggFYAjjAs69kM4kefYCveyKB5DBXAY16IA8rSlvCk2cAIeDQUQko38ilJVbYYpQfVQKMAh/MhbD+EuQ5VAPBQKsDYWyVgOWScASrAsFEDgnPejXLgsQ4X+cVEAjjAzlkP2pa5UAuvf/IFRABGprJt3TEC2tiqBiECBx90R6t4Y84ZKVA/qC4R2hJSji8C5LlcPjgLUKXZMwEXYY4Wqx0OB+A/v6ltjuDQDFgQFFkjN39oaMSoeDgUm7PhcQxKEdwLWqyVS5+6wvjgDrggKLI4MK69DJlBHUGBxZH5CZZ1lFVUCoMACqbfU2RZm4Fy1eBQw/975dtPzC8TSUYDs+vRukImFo0DfAaaxQ9WyUYB8Skd9+lB0jd+iUcCy9ZnJIDohMAGLRgG6CySaL74JKMGCUcD2PSlRIIiuKwP5ElHAuv9fNZ8nr4SxHMq2C1QB6xmAqAoVrVlV3fpiszwVcG2BV81HaSvRrdssRgXCEyD0h3AF6rL18lTAfRBWVSqcGbtEoi6vFkbecyDRfM1ZwE9YhAqEJwBwqC6piKa8PBSA1ZepfUmEXaJqcShgGD0hnEuiTS6qhaEAJiAwCXpJVIgFooB9CVSZdZW+pFJVS0MBt/UX5pKouZAiFoYCDutP7w8LfNt/USjgjweqKlGRJdECUMCvANQoYkmk0GABKhAxAdRBXgIKhBXA6yCvFkDYCYxhoRzkVaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQo0X+M/gVoPrkgKWtroAAAAABJRU5ErkJggg==","enderman":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAABGdBTUEAALGPC/xhBQAAAY5JREFUaN7lWNESgzAI8yv8/z/tXjZPHSShYitb73rXedo1AQJ0WchY17WhudQZ7TS18Qb5AXtY/yUBO8tXIaCRqRNwXlcgwDJgmAALfBUP8AjYEdHnAZUIAGdvPy+CnobJIVw9DVIPEABawuEyyvYx1sMIMP8fAbUO7ukBImZmCCEP2AhglnRip8vio7MIxYEsaVkdeYNjYfbN/BBA1twP9AxpB0qlMwj48gBP5Ji1rXc8nfBImk6A5+KqShNwdTwgKy0xYRzdS4yoY651W8EDRwGVJEDVITGtjiEAaEBq3o4SwGqRVAKsdVYIsAzDCACV6VwCFMBCpqLvgudzQ6CnjL5afmeX4pdE0LIQuYCBzZbQfT4rC6COUQGn9B3MQ28pSIxDSDdNrKdQSZJ7lDurMeZm6iEjKVENh8cQgBowBFK5gEHhsO3xFA/oKXp6vg8RoHaD2QRkiaDnAYcZAcB+E6GTRVAhQCVJyVImKOUiBLW3KL4jzU2POHp64RIQ/ADO6D6Ry1gl9tlN1Xm+AK8s2jHadDijAAAAAElFTkSuQmCC","endermite":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAADR0lEQVRo3u2Y61ITQRCF5wGsEhESCrkloiEhITctQG4xiQQRuRuIKPrH93+Etr8OHQOloPyQbJKu6prNzu5mz+nuMz0bwpWtL+7LVqkl69lzWU5tS3IiJ9NjL+TZ0+cyF89I6LJ66di8+qoZ5mLpkIhnuqfD6KO4+e/stvse1OqFc9EXk1rpSCAD4G1Pysx46hoBq4Vv5mvZZpifzBuYvyXgtvseDHi9qF44k7N4yXwzeyicf1dsaTY0ZDW9K5WlExvVw1buOOg1YS2zF/TeUM03yaDwdun0Gvju47vuezDTP5dq/pMBfZP+YOPyy4bsvv5u55mnJJhTANKzQO5rRBaQ5fmqFBKbUkxWZGXhvUW/VmgaaH5TFmTGXFfd3kzz21K/501T3qKoGWCCSCbUVBNUtKwcOKeiJRNPZiU+MmOORiS6BDKSBADcvHjeIcEBVwqnspE9MgIgBLCTowkjITYyLVNj8zIbW2D+j7Xf80bd4lrvDv6fMyCSte/WKH0xEfMRcXPA1Hwlf3JnBiCKCOLG4kHnOZExIs8L+0gpAN6WR40+vQHgOefNEeBjj6esR/AMWEvvGQn+nChlgC53TfGRqOOoP/2BAlMCdkTB6crwWbZLF7Y6+HWsIlzLvGZA5zlRygB7YR8BbYAU+Eb2wIBxjHMe8FzD0klvwDzHdo0e+3MiQwAR5YV99PpfvVr7iaodZz7K/soP6w+cAL8G4LaXUIL8OZEigKj62O78diy9yQCAA5RmiPTmOgjgHPNEnBaZ+5wAnhMlAtidtZc7dYRONynmCjIoAUEjHzTyJpAInp3XJRPRY2QViKwRsc3cUafOKQGEDWdOI29LG0RBAOA18qb27AsgJNIEmKJfEcCIOwnUsjY7oa+NKLt6m+Jn2moPAZBDc0Oa9zMBmtotaZS/At7qmpRWAsgOAx+pxuY+GWDKXbwwEm7u7yHCxY7a7zv7BbxljupbVuimiBECEDxteoyIvrOd8qUBZROk67+pPEABTjZo+9sBjx70tfnX3tRUOSQnsmHgbCV/aV9t+Vw9M54aPAL4Xk8GaDfYG5+s/1MjZILHqE2Q7ev53Ra/Zuj7PgDxAyhC6B80BqoPGNrQhja0Qbaf/P4PM3XaxMkAAAAASUVORK5CYII=","fox":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAgBAMAAACm+uYvAAAAJ1BMVEWAgIAAAAD59PTn2dPVtp/nj0G0j4PifCHMaSCwUSKOPyRWPzQGBA4kh8LGAAAAAnRSTlMAAHaTzTgAAAGUSURBVHjahdAxb9NAFAfw8wRIDLkFEsSCG4kMHVAzwAiV5W9gXUdA1omugPWOEdpwzxthaP2qLhnrD9ClHaKuvQ/Vv2OnrZuhf1myrJ/+vvdO6YcZ8p/4jdZqoKLB87AchKCQqA9X2+F1HJa3sNuCUv/3ZfRV/q3hMP4E0A8DSABN46knV1prUYm4FJGK/d4KyJgyTfP74FZQZOZvkiSfG2AA86xYwyHg4x0U9AgUtAlDZiYibvN7Mknyb5PJeKxGVQelIPM4RjVG1Ahl7CF41XU9j8e3IG77bfb9yssJYKHXAWCf5kctoIwnArySra3pdLqzI3UD7RwK0f0cTD/cAS7rwL5TK0D5HjzJfmK7TYhedoBPDCsiHfgf4b0LQWvnOE9S9n5WuAaSXazVgO/AFRn1piIuARUTGQNQEtTg2ekyAghAmAz1wXXgjSGAVFwPWU4WOPyXTeyx95R1cAaQhSZyNrWeiIoWShkB5gDObcpEM9qEfAXG9MC50ua2whlmD3ARzu2Ly+vzL5pZjuy+MPvC3QC9wfXEFSoo+QAAAABJRU5ErkJggg==","frog":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAQlBMVEUAAAD9trb/ioq+rWqxnl+mkE9/oFjlXl5zlktjkC6NdEVWgCLMPj5NgDBGaypJax46Whk3VBkxRhRGKiktJi0uHRCwcSzMAAAAAXRSTlMAQObYZgAAAadJREFUeNrFleFShDAMhBEoZ1x1Qz3f/1VtQm9qgVoZf7h0pqWXr2k2M8eQJMBwSSJSvStpow0sUmdgCHMIbEQTIgCo5CMkzNM0zaEBgPf7x0SNUfUBhHmeQwOoiq4zTPOUhk32BF+VomvAlDAPT1jY+LRxXrQlqA638G3lHkKQxFL0i501vxzus2WIyunjfidUYwb8uClU98mr7CyRFGwrh4ecUwABj61Iwlt15zcwSeHjAGgS379fILxTk+I2mt0gCRmyXpNs5qeJZ4BQKQW43ToABITgEgAU4DaOt58Bwp/fAxChlAzj0zj2gOcKGK8Brh6wyBmw6bv9SCMpAybfy408ZPB4UlUpAp/pBAEbBTiqZO7V4Nm1NESU/BFYdsDSBaQCpAvIDpAWUOwnSBDwSSTt2foUICT7SqVPjx3qaeOUsHBTjOoiAdrr0BCEGK5Ilg7wtwwgrEj3ZKXscnM9AFRCBO5JZE0IGc/+xbIpCV53v8eVjQ9K3qdgV1zro8hrtuIKkC3Cr53dPFIqcxG9EjaPTIPb1DGpVmlEaUNHa924dfgHfQFwmyc0LyT5NwAAAABJRU5ErkJggg==","ghast":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAIVBMVEUAAAD////5+fnw8PDl5OTk4uLd2trYzMydmZlzc3NLSkr5ldknAAAAAXRSTlMAQObYZgAAAYdJREFUeNp9ksGN2zAQRdmDO5iBfN95JlWAgeRuAkLOZuRNzgrcQYLdBoJVOoirjCmRYDYy8i//wIc/n+Q4J7gs6YgdJxFRBBNXVQENRE8yZZG187sKkEIGLi/z/HL5D/Blvt3mH+8Ay044ZgBeb3e90QDVCkz94QFgpbGugOmvDPy2vxNYgMPnDFCAloCoLgDXqf9wfJBgKwAfU/+M8S9AGQH9MXzDSskGYJQRgcMEurkmDSCxfSiABtCeegsssuJbQETFTKS6q6r/v/FOl/1wXSrRtQOESDh1F6aeZG12mKBvC6N9Bq6nBtA8xApM5vCJRxpXAAdgEfg6f/80/wS8wggrMCwjbCl33T09Zw+6dqolB5/Yw45p9xRAORMiaB2hQLTRlLSWHNTXBHICwD6Jv0Qg3E3CGTDWLffOJ7B9NFkTRP1ZYbTRkyCaUxiS6TCyaBhNwwgoOQGcMsp+RBRe38CE4axrhxhKAlYqALmEEqIpRA9D+SwTikQpt1n93R5IcTOKi/wBKsTOnkkgxrkAAAAASUVORK5CYII=","goat":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAMFBMVEUAAAD////6+vrw7+zq597b1cLArJCenp6ciHaDg4OFcmF0c3NXV1dNTU1APj40MzImjJ+xAAAAAXRSTlMAQObYZgAAA5JJREFUeNqNk71u7EQUx0eb9YqKZ4jOeFPchjAze4s0rObDQrcy9ngU3QKixDNaueAFaChIFFHQR4IGci2078ADoER5g0g8ANqKHs7YeONsyIqf5HP88fP5j3dt8r+ZAAOokPxVQaDgvc/J9Q8bgsQ24oCnlFehfVWYUMrAuT0CMAZVE8JpCFer8O1HfRtFCKVUFdbeVRVuZ7O+jSfQOGEdqkrHKwm2XQHAhRYFaYzOk76Nn0Kg0GCEBW2O8lnfxk8hMCK0rjJSSrNM+razBtc0vtAppOnhpG9PQlJFmjbYAiTY5bRvO4IL+BS1qWqXJ33bFVzjv7z//f5h88fHfXsREXxOxuwKIbhd4YDSyiDaDpQUAXb4TNAaBdxiQQGQ4+H5U7CZ1kbXeL0rRQqAznZCFDDC1tZWOpbzFCPE0wQKtdHZ5/H277pSUEjnczYIBxSsMVGwUbBRoGNhmrLaZeZdVdf2g4mlECk9eiuXg7Dg/tQZ8+Gytu+rWC4WgtIL9SRIu3KZD5d1cFkshRGpkmqISLLitlmFq6v2arXKYvk5M9qWehBmzrbfN6v21za2WG5xSbW3+fN3nkrgez9Myrgkw9DQ/c3h681WONCCA+wRJlQoyvcJAJwPE3zmry79zIbTlcuHCEbVdpE2tb62iTSZM8ttBJdCkZ4UZG3lRKZHRh+OItgQYebSGj0t7Fzb5RAhmIRBcM464xPvTf20BsqVGtbw5/2P95vN8NoPEamiQP4TCsAAIMUe97oXmo/d7rQCzijITq2QYiSkwAAFilWim9LT6+vrchwRBd7BUKAvBQZM/itIBhyi8CyCoUGV4lwA7okXE1IZ71NKCRFn6fnuBCrRUFpbISSTUnUTKoA363Uv8KKUkluFApOqKBcVMhbUpCykKpVdCCnL4sAQJKF8K9hJXZbleSEW87K059OcRIQ+GYR8mkxre14sjua2TqakF7R+txVwYELK6fz4GDseJwhRNApbEjIlx8tlMhwlREIU9sDYyX4B2Jsd4eGGjPnk79eF7v1N/+oaQnpuvrm5ITPnvD9be8Uov+DATXMLKem5++nujiSZ83W+/oqDMJVm9LP3t1yMJySLrC5z/wUHjjD6aeX5gvQ8/vb4SMjbk18u4mdhBLLQzjmddZ9dTvBTuCekyZOWtHi+MsY4pLWOEGqEJJuHzYaQszyZkbZFpaNt16EhhLuFIhuEoDF78ZP9A0Obf2KBegjhAAAAAElFTkSuQmCC","guardian":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAhFBMVEX///+rjEZQjnQtWUcAAADX1c/Y1cvX1czX1MzX08vW083X08rW08vX0snW0snV0crAuq7Auq3Auaq+ua3dkET/gi+DpZy5k2Syk0/wdyjecipqlYPsZCqFhmBmiYDLZSNdf3XeSSh4dVCmXCxOeWbUQSDKPBxBcVpkW1BgVko5ZVJ5CxKoxgN0AAAABXRSTlMAAAAAAMJrBrEAAAOASURBVHjapZaJcttIDAW5lvfIHtnLYiLDee4kzwsL+///F45I66AkW467akSoIHRhhjOkuq5bLper4fL/wHAhiscBItiMIYSgm+j76GOga1xdXXWD4PNy2epHQ9q1HrAz0+mneCswfeB+K/i8Wi6HsZoEA4vFojtP4E1vO8GmvvWw5QUBEd4TrFabBj53F9LbEfZOcLt8WN2ubi8WTEu7J1g9DPUPt5cLPBM83N3e3g2C6+tu4PqYmaCPxk5w99/9XRsvCaLR9+G0Y8ID3f3916/DuO8azwmMgTA4WuQWp7uvEy8KYFObOQpsR4K7S4kJ7Izod1MYaSvwetoivk2wWAyCGR4PUNmZbawHnOWLBTQeqxgZj3PBWQEHbhPRD2TfrlNuOqCmPQs2I6M/I0hCAleAgtwKNrmeMhIux1lBLwklknpy1l0rbfXinMD0SEDTxDwXLlVt2tubwrrbY02fNZFxlEMoKpB2gsfDHz2G/fev735+/6/NcU6yC0lxVtDbv7z78aff39s6EiRylRFxdgoB//z25x/v/kKa5ygD0T778/tAYMCS5rmKsoTKz9wFYRc4kee3OBU0byJtBZr9SFkViAqsnG8yQGpDz0whWqmi0DynPU4eJmy6xUDLffz06UueP+xnBMkueXPz4UvW9ws+thZEveaBkmV2325ubj59gXqFgPV6r4OhhQ9DD4cCIZ0XPK7Xj/MO8lDgFwWzNcjZDBC6cArddBcOkcyld6Htgx+6GXq+g2z6Z8HivEDPCSyxGchInN3K50A22Iim8ZNAESnFgKTjg5URaEyiAZA4mEK4CtPcCs97rngqEukcW5gJsgzGZTEThBKaYaynEjutQ0FRxs4T5z8kmbGF5nJVumYCtdo28NFDVEjpafZ22lQWsw5Mtmo4fg8IcE6fzjKm8EwALrBPvQckV1S5QrgYMDYHAoHBzjqeQogKRVRIY49ZTjQT2K288NEiQiE1C5AeV6o83wdNXRiYC4KUhFNIZELl0SLKgKn2oflG0saaaMCYsdOZYCQlceo9gJTQrttvB4JdOAVItCcTgl0sYIqRnuKUOBJk2i1pp/fi9BS3a/va4nK6uxqReqHFq7naCix5X3B9kiNB9yToUzJvEVi8SSBDvlXwpjVAAl19h6BX3wNm2ng4/SqB3MCVU5T1OgGokfb0/LVpczpVfuqPyjdt8tQvCjuwWwAAAABJRU5ErkJggg==","horse":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAAAD///+lpaWGhoareS2nbh92dnZxcXGPaR1jY2OKVS6AXCJyVBp2SShRUVFvQh9hOh1FPC9ZMxc2NDdOLBM2MCZTJQ5OIgsrKi1JHwkqJR0/Gwg6GAUhHiEfHBcuEwQpDwMjEQcmDQEiDgMbDQUcCAAZBgAPBwMNBgMQAgAIAAABAQEAAAAaegGbAAAAAXRSTlMAQObYZgAABHpJREFUeNqllouaojgQhTOzuurYitKsNCS7pR1lF2fe//n21CUBvMznN3MISYVQP5VKEN0LKitT6Z6rKovNZlMUm6KsnCtgVlVRpbFduYMw8qIKq0zlDkAgd+WrgNKqDNiIilcBmwXXi6rAPARQKOD1CCqroNVWAd++IYJfBVQ7+IOwq55M+PmF1WKLUlRlWRRlWRUPAbufXNiutihlIRE8m8KiwjLxQqHCWVaLtJgFlr6sxqtfoYstURQvRQBgwcAxgB/GusvY8wvVo8HX9Tog+IASRTfbetp9Dqjr3wL4+nCofYxEU8BisX3anQLgf/CRoOjqEELycCuzcvex6voARKQQKGImaPJWUmPoPpb41xQgIplJ3jvuJQXOQTAAKcCErTdspPtljMT5R+w1/CPbZB03SPfv47cRLl9+IHYR1T++AKEdDO7/Ev2TWqci6G8U7XiJAM6ASASeuKOA5Xw2my/b1I4AHyjaCd5z1BFCg04g7WCwnWoCiNEAsnJZ3LPufgh9ZCbA+8fH+yQRCB1Rj7Wftfv5DKHP25Hpa68FHnzYLmDdAdoW5etXhD4yzZGLVAZgZFAAP2e5tAiW6z//WC/bkalugpDWpnA6Se7uALP523qmUzDT3P10CieIRi/yev325vZwBA2lHZleUiA1ceN42U7fz+fvJ1kPKAN0/RFPOzLFjbimyC0DTud/z+f/zifyQnCm9qE83EicI/lIEQA6nUUAgKAAn0VpfxiY/YiiFhwOPichIAuyMl4BbB/QC1GVART1iAQBENAogOS9NACccaCPYQtBAeFGznSAyBLQNPIDpYBAcQLYrlar7Ttqad+3E0CMY4AiAKABcDwenQn29YrmBgAnTgNcFZEB4RlA36JHABQFxEcR9N3n8fjZ9RNAfpsBgIQShEB3EbA/E6QT4x0gzyFQAlxVvZYLnAG5TACQ8Q2AIhEIub/KgdKhvly6z8/ucuFbWYEoeC/mQWQNACFCaDq4dz28u65Hm3IgN3ueqnxf1c8A0wjgBoB4d5DlIEWARFoEYwQ6CMAAcNPH94zIOZBlgz8RI2ALoc4QW0YMX3sGcLniHHIAwS2IP9zNURGyjBkAP10CnNMcjJJoADFqi0AUCF62kHzc5MBLEjUJFoFUDEhz0EejdGxMc+DtwyxmbRGg4CAK9tGSh+dqkgOLIJg3BAMCwFNMe/k60ZCDNIc8AwPAm68TO0O3gCEH+isfIEFoIoM0zKXhbcTbi9OanIMUAE2SCJjNLAPIwdFOFOSg7zkHtvJp8sZLyyjmeEwb7/PX0Y23b9PoLmzYsMVoGrXQGgMyf4/Dwc67rpGmwc2ocBm12kIffic9hEpax3Zjg3Kr5L6BakHZ7jSKAOEScGraXEAl4UkcHDp8feOZYIZctBswPV0ye/0AgDSGPMXGs4TTsKFJys8PqvRXLAihEQQqGPII8UTRAGVA86H+pAcMRyR7WEOGPGTQZECNDcsgsYJVLnLrs9hBx1hqycUkHrUvqxgONt9iUv+p7ocjlD66/wNdcSNfhkmkngAAAABJRU5ErkJggg==","llama":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAMAAADlCI9NAAAAVFBMVEUAAAD868b14rjx3K/v2anr057jypXMqX7EonmlpaW6mnOvkW2liWaGhoareS2nbh92dnaiayOPaR2AXCJyVBpjUT1FPC9BOy82MCYzKSMqJR0fHBcP+iOkAAAAAXRSTlMAQObYZgAAA3lJREFUeNrtV0t22zAMJDAg+0ulxm7URr3/PYsPmUiMXja0vPJYJMbyAiOAGjynN7ACCmVkPO0AButlC1ueRnEkgBydAHBA45afIICJ8bEG/htvdhHRcI4APIGU7wVAauUB4wJiUX6OgAIymjaACLNLEBjPxJRZTjkDh4Ag5EHEuCUvym8pgOgTAZFWdw3Gc4EU3LQCpPhEQJbs2TXGpxTbbyygKNIhcom8UpRVbiwNQxS0AytEuvaqMs+YlWz4jQQwMdEL8wuRUgaaAIFyhkjN27ILwgvcjIhsx5AAZiL+8kWDUiiqAHddAL0AAM2TiWvVBgXw9x9PTz++814Ac61H2SFMUAFiplq2dAaYTctRC/RCawCFbQ1B4oFaopwC4OZ9uwJ49+HpowWg0QqAHCgVKdCsf18CEYn7cWbIdx61QQf3AhQQRc67FrgEA9roHK0AVXQCwIAAbj8NSt2R2xvC8R6eI6COYOwFZEEMZmlngGm0BYi3Gf0hjFZDcu58KH7xJhA5GRmCBLCjFpRqTGK3cHgEAGZhrkYA8Fjx+etXIl1MtaDOkgCsS7JsBcRcZF+ul2ngDEROejUBrxTgGuMQKnojMgAMRdWMsRYwRSt1cSy/m9gSSVbsBCjEhHH1oiEfgCVn9h3vb3bMl3oCvABdE9pAYpACAxUAwTP7jhbIQvJBAM3fIfttqS4wZkQIv4+AoI0nWP2lHEDCDaoCDAgQ1ONskQXuL4ibSRD171sQXYCA6ykEBgRYqpAB1tWiHD/U8tfxr8U0imimeNoMiImp3+VtIG3cebnM0zRf1hbTKCQjQ0R0N6Iri4SoQwFrhzSKLJLjgywwgqzL4wcBy3vplf65SRcsP8xbxFjRLS7lBwKmdZknLf28bmgaQv2H4SEr8Ri8pN6ZlnXV69u31eNyky54Ul1xOQ1eckm9M9ljX66/fl4vq9Hn5+d5uAKezD7FVv1W99Q7k2Wd5t/XaV6DXqZpVEDpbCZvQuqdabHE02xZGx0X8AlS70xLvP/zrPGdpvPQO9N6hFMF9M50bxw4033RO9PRMDoVvTMdDaNT0TvT0TA6Fb0zbSbQcpcu9M7kE8hH0LqhZwrosJlAm7mU7od47FmH0Bpz6eev6+XuAqbpMmt0ev2t9J4CZheg17qh6X6ICTSHDzR6TwHrIdIDDzzwwAMPjOA/NfpDB1xAY2EAAAAASUVORK5CYII=","minecart":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEUAAADBxMW2ubqvsrOprq+epKaUl5iMkJKFiYt1g4ludXlsdHhham5SVVZNUVI/QkMaGx04QmSDAAAAAXRSTlMAQObYZgAAATFJREFUeNrtk9FuwyAMRVMa7jWzwf3/rx3QLmsiOlpV2lOPk+BYypFRzLIs53A6hXA617sSzsurEABTSkRPsLxGAIEYI0ACiCAC4tqp5fbARGApJavRsLoggLHGyrWvmAoOIPSWtiamgmw7MgIhcQuAM0G+U+TcBERcY+wNgJwJPO9wBAq3Blo+E+wM7ghSIRqkVGaCPV3w9RsTQUVAMRMC+MlkUHusISVfLlkoW8ZRbRmTRFXNTG9YZ1wdCoTqXsy8dNysuJtQ7Z6JoBTV0rlmrk3gB0zHW2gCU7XS6ZlrugrKxp+Ccuyg3ATljscC0eLtM/d+aX+tVfOy46GAQwGfFsiwA5HnBRwK+O4W/k/w/m+U4SDJ84MkMhxlmY7y8TCVGy8fpsR+WnXDGuPq8mHIN8fuL8tkDiT4AAAAAElFTkSuQmCC","parrot":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAP1BMVEUAAAD/////7nn/6j3/5TPGxsa7u7vZra23t7ewsLCoqKienp6ZmZmWlpaRkZGQkJD3cwmGhoYlJSUPDw8AAAD7udxiAAAAAXRSTlMAQObYZgAAANJJREFUeNrN0tEKwjAMBdDGxpnbZqtx/v+32jYMN9QKPnkhYdBDk0EDHSIQ0CGBDkEV/pFgahtgBhxEZu7nSGj1Ajg6SAmpVQe4M98hgHCMVUAgqklbObgyXwGhXczUWlXg10Z+bj/4i3X19gra1KJrDfVGakcARdFyqyEHS353w35J2oGiBRO8++miqrU2MJdZIN6pJy+Lz3Cgs04yeaees6qeByMypZQo548jLDdl9mnE8D18B+EyBiG4+AGMduBwCi2/g+BiAAJ/BTwEW/4XPABsMA1LwNN2rAAAAABJRU5ErkJggg==","piglin":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEUAAAD/gID/////7aj/5bX12iryuobMzIPCwnTooHTVlXreihzJgmWHh1e6ZkWtVTKiWTplXEOhPjiESzOXQyKNNQ1rOSR6JiF2Kw08OS5TKxpgIwo6GgwhHhyEOBusAAAAAnRSTlMABHH+CSEAAAKgSURBVHja7ZZxU9swDMXDWAMSRspwYiDQ7/81pyd5Vzzf3Oz4t78GRU2kF9m5Hm8y7h8sMM34zMQrcKZj3BvTRHMVoHVVJwRm41n1eSDwYFSB2QW0AoG4psY0JgRAK5BeiV7TWCD2wLt7AXkhehE1Du1BL6CPKT0quL4HgMgFxIBAy6xt3hICsYniHBRIzET+6Ij1jxg3/NUyXxEwiK0wiITZBJC3And3d10uzCzKjOkNOzGrX6wKJoUVpiTJQ5MbVseyqpX9SEQWmHUV+4obhI8LQCd5aHJDBALCRLIaQuRfWSRhBK51M7bKQ5MbqwpLjAyB5Kmw6AoFToZAgNCE0OQQMIXEGHkFtU3UUsUU9XX6DnlocgNNql4HvEuRAzWO/Kx342xMFXbibWwb81TJOS+oOyQg9reK8mafqbLkJR8UEFEW3nRjzDBV8nJwAgGs1qoY5DKB0QrEukrJZc9BcXz7S6AiolspC8AMIJeLQME9xC9JJppL3FmKen/J1moPsOhFzfi4gXNZvMuKdiL0xmPLVjBaHTBiK1DQH8lealfyB1mIsbEqIABcBETQKjiDYsRi84I0WwYp6yeilFgSp/iFBgJVSMchBeTsR82RVgFiCIAJgMRkihBn/w0XI9ZS+/GxtK1LXyaQVnkHn3acLDhlh6TIkQms6s05/Tw9vQUfJzs+3v45Aa4mXCTCCnh3nj73T0wQOY6oQyT080WAqcKO70H2F9tsQq3zpzdLOJ/P7+/nX+84I8SqvT//2QKEv+umGzdu3ABH/cLAFxwVGPuC4xMs353AGAmM/ELvC8b0fqHzBUN6v9D7gjG9X+h8wZjeL3S+YEzvFzpfMKb3C91/5TG9XxD5zgTy3xP0fqHzBWN6v9D5gjG9X7jmC34DNs5yRa6KJBYAAAAASUVORK5CYII=","pillager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAflBMVEWnra0CAgIAAAD////Hzs6Trq2VoKCVnJyVm5uTmZmQlpaOk5OLkZGKkJCIjo6EiYlmh4VzeXlwdXVobm5nbm5SWFhQVlYyZjx2QypfNiEmR0daLzg5Ojk5OTlPKxlLJi0fNjYqKikeKio+Hg8lJSU2GB4yFwkeHRwjEBQUFBN24XvqAAAAA3RSTlMAAAD6dsTeAAACP0lEQVR42u2VYZOaMBCG1TOCDUYQemeqRDEq8v//YN9laQYckaAzbT/ckyPEmXsfdhlnnUwbwlBKGS7CBjmZfn6m6WQ6G2DiBHUegrTmFUHIpGeQSorT9fcEixANvCt4rwVm4V5ig7/AvQRJ+AuQQPOSgjjwzYHPw4Im267AnaW3wIXbdxINC9zDZUPbADwEHMnztZTrPOc467wEa+SJc54vl3l+bgqADPgJJHf78SXl1wd/oDgb1sMCeg4yifqxXC5Vwk93DAsSMoBE/QQqkZxPEvrDNSxIWJGyIOW4Y1gwG+BfCS4Nt4YXBJso2ngLTsBe7bUlQB6GMQLkrYfAvwJq4Z0KYEDeR3C6QzOGBEb/wQCtRwjMZbVabQ7G5Qk/weFCa3fYIb874Nxa/YLj0QkuN1r49/0eEZxbq1dw/AWDp8C/haLwbMGa7XarjTa2UwGWXwXNW7a6Zqu7EQ8BPfoKDDSEfcJDAYWtIQlTMBVvXR4KIDaoHApotLmWTFWUZVGVXXoEhquHgS4nAF6C2Qi+Bd8CYi60ibIoe1mAvAmy4C2BzWB4XSCszdDDaAGHxVzE2jCxGC2IYyHimAcOBPFoAWY34MFJuxMU+5pyPhei5PPDCcRD9niiHaP34AQlJg+oRFGIqgA9A6Q9XGlrC0oSxKCi/FiBfcJdC27R5gQ49662gN8VV0ibE7jCUOWzH5KiNrgOuwJXEZ7aJ7jd4QT3pfa1oJTKAqWCDPcsU9noL5IKAhUFUaRqAvX/TKTfnHu1gRak8lQAAAAASUVORK5CYII=","rabbit":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAMFBMVEUAAAD02ezy2Ovx1unxzue0pZSkjXOUgWKUfWKLdVp7aUpqWUFjVENhU0NZTDtSSDkNYhzDAAAAAXRSTlMAQObYZgAAAYBJREFUeNp10L1uE0EUxfERBdhQ0PAivAFPgUJHFT5ewC7TBJ8LBW4i3TM0VEgz09B6ptiOV+ARkjJt5GJyNbubtZLdv7zro52fJWtdq5aqENe3prV37vl2v959dK2SCsERQBrYwtoNwOdAP4AVrAsDZ7iUAWSG6B/AZtsAvsgl6VqBjGkEL84/NcAPvBoBlSnFfmL37z/Exxi/xj8x9kBVUsptBsX1DRjtCIAbUkjqSptZYflSyikA0HVdm8dM0pdaK87x7WwC9qTNZ+/ckH7G1Xv7RVCIj+3emXrzdgT0geJczaH9JcKnarlHGSDhoynOg2PJQYUqPpVuDtRjUVGIip3PAedrf7kVLtz0NYXarkUAEBBgGQgVBBeBMlKC+kUQfLQPEyGK3WYLi3RT2adDyr7kYAAbWD6dgpJKLnYr2UBfKqegDh0jx2JH96TVz9tpzLX+MYJf8+Bl+juNuV7FEeQFcPg9jbleH/YDuNvPA3s+jcd9L+1FqEiqVlZMZ/eZmCL8uK8JdAAAAABJRU5ErkJggg==","sheep":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEX////w+fz49vUAAAD////49vXs7Oze3t7S0tL/uLjmlJTAnoa3lHuviGtXRjoICAgAAABdC2QvAAAABHRSTlMAAAAAs5NmmgAAAhFJREFUeNqdkgFy2zAMBOMqONC+hdv/v7YRqCSMPO0kvpFEUhKWwBEv29Rl5MgcUo7U5dDLf7Qdep9cFNJINeEpQCoyx8id8BxgSJHaAXoOIMWRQ16+oUfAyNSMH08BRg5lu/jDDC6HUhEjMzWGfgQYmRE5QhkairGv1PVo/GoFNrKjsLG3bX/7AZA0rjcL25R8u3YpzZgAsANbwvEI2H/lhn6/2q9/xI02oouZAFsIBTZRnAHz90psqKzUrrYz3wEdCzZlcwJ0sVIm12v1Yq73awKEsNMCYThnoOP863ar2Qf79mN/vpvIYWBgsk6Af+tyQaCQcTFnDso29vcAKDG2yxZ0KCaDFTBad7hvb/MVICTseZloK3ohFg+0jcwGDOmUQSJCJjFB0DxhFsCmdq4z0DkDu2MKBcZWBUQQWkvYs8j7m8bYthWAbRVk2SSeHRGmlhKUYx567piHDKiykacHiTAWZmnlJnS8RmoFkBK2FdgUvYjp62Jib69j+ArQh22JwGkC265PQG/erT8fK+AwHkOY6JEG+hPgclFlCoxZASZQKKd5CMsWRCwmGibDprBXgA0gCQKZBgWBlwzALkw15wxIEhMVMtjOjo71FIr5CSj8FYCxQVHYCQSAzdrKmIIy9aaTB02WfZwfIthhImLxwEf9xT48tDImpveRBFAErCUUZeZNA76lD8B9VdX9p4C/n54rtHuYBiAAAAAASUVORK5CYII=","shulker":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAzFBMVEWOYI4AAAD////m8K3h6KjT1ZrHw426tnmzr3GsqGujdqOjdKOjcqOec56ecp6ecZ6ecJ6ebp6ebZ6Xa5eXapeXaZeXZ5eXZpeXZZePZ4+PZo+PZY+PZI+OZI6PY4+OY46OYY6OYI6MYYyMYIyMXoyJYImHYYeJX4mHYIeHX4eHXoeHXIeHW4d/XH+BWoF/W3+BWYF/Wn9/WX9/WH9/V39/Vn93V3d3VXd3VHd3Und3UHdwUHBwT3BwTnBuT25wTHBuTG5uS25uSm4AAADM1DMFAAAAAnRSTlMAAHaTzTgAAASDSURBVHja5ZN/e5s2EMdpk2Xrthg8dKfYuMVet4U7sTr86CRskuL2/b+nnUiN/Xh7nhT2574guNOdPjoJEby6ULFYlEWSbGtp5Sr5ayM6xnr7QsFlR9I4JtswuYbZunITBOc5LwMWlhGZpOUKjK1HAwpCpTWAQq2U4v1oQM3gpQBiRMzay/iLgJUlRAWAKBi2xWjA0rGK1R2AFga5ajSgYI34fAMCP44H0B0opTQqQEQevweJywCw3wJUxpWjAe8aAwBKAfR7UE/YAwC8Q+URCBOWUFKMKlaACCJqzw+SmJtv+Iy50szSSEPWlKMBya5h43ZM1nJmXTEaYIu6bauybevicV9V7Yu/c7EMk+JduCyW0bJIwmybhCtvl8l8IbGsTEKxZ6tiEa2KJJK45C3mSz9uu5xlwdKxJUeWHTnecbtyxpkdu9yxv/ZLlzXkjDXea8w+OeY6FovaYE6NQdMwsDOKXBlJBMUG6t/lTOiaLSuWnMyVoXEEvS9viQeJ7Q8/+AuQWqkIUWkQyYPalTWAIF3gZSSegyiOAaVTKiiNQp+qfBa7emsQlEIEgdyxqwqGGJWSBNCKmqrIUAN6Oorv6iBxJI4IY60cp0njfQ+RHsebd45RpMUFbWm9sKRVjH4IgvhBRE5s6YoRFdsqMo1CD9DyMk01zy0o6NNjJFuGPl8jgC+LXOUrSDdp2jdQ1EoF6dr78lTQ70mart9u0rdpisD7lSXx5ZIbNbfB1sBwOEK/5uzkz8X/kzE9+rfUFIWBwZ/5Cu6dSQeAy9f3jk6+zHYvbQBak0r+egA43gRzY0/E3FUh2VMCuTLkZohHZMsod+sBmLsy+N09nBJ+/dDeu4chIfztw/7efThN8P7h031zlv/+YR9441Kbr/L2oTscum64uxf/xkt1xCLKmTNmw58nALr80PX6fOj4MAXAncmNlxgvL2Fz4XZ5ZwTiJSR+Gg/gjg7S2AjniSdUIOP6S9afT1qCr5sOxhdiDjQNcJDLc7ibAqDOPLEcJpnfs0YDpOp+C5npMKkCX7c/SE9yC2LCUc46zpmIc8PUTQHQ8U96kuckALHpb5GhlwGXv3Mnkqll+v7570d5dhtGURRGx85ZeBvezue3Rz+chdE8nIdDfC7ZMmQAhICgENNhACoFZ/6tUggAp3iM+hgPnhMkrPTwBSONWqtzICAinIAQK1QDwBMV4NkMMwRBxCfAnfZTDBP8on3B6hmwXcoKNUAMAD8nW1Mns9DPqATy07L4Y5tE8xkoP0D9uCqzIpHFgxaiBolnQWIpZkdgHGtyvF5YFtsAO5ZG6dLbO4O0Y2QrccnLXQ7kqI8HBTfsZIQ8M0u23LKTniZrSHrJlaWxfUTiufRVEheW5R1Jy3ZlsEyrtkzL9mNayPvjp9W6eqylr07rtko/7pO0fpT4XmJttSnbZVpLbvlYie/7vh6k6+urq+vrm5s3b25uXo3SEXAl+i+Aq17/V4Df/3Ndf9W3A64uNBbw/T/0Q68RS/B6/eXq6svrZ/u7XiMBNzd+CycDjhs5BfA3y7f3PUOzujsAAAAASUVORK5CYII=","sniffer":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAMAAABlApw1AAAAe1BMVEUAAAD83VH6yTfyuCrpsSvopSHfnzHejyfUjifRgR/GeRxFnYrDchU4jXspiGCqVAilVAEsc02SQQBXUDOTMR1xQQIdXTwcWzpKNE6BIRhbNglENCUTRzM8LEREKxFxExMPNCosIjdgDQ0kHi5QCAgaGSJBCAg8BwYIBwb3shenAAAAAXRSTlMAQObYZgAADgFJREFUeNrUmYGK4zgMhsPOsjdXXz0nanSIBgSmsPP+T3jSL3vTpl2oZ8zA/iO7iexQfYkVJZ3ll2QZkSxDygTl7M0MO96WeSrzZ29C8J0CoUP5TwLop5+JmbHr9qcAxOnPlFNC/L7hni8AUFEzEXx+GIBAkJMbCLBv3dcAaA0K/RQAzj9n4hBRSl8BIB57xUX4BEDP34Tw13Vl38lzllA1aa1iQph3AN0wFBvG1PR0Em83UAPgSORZAOoAimVeRO8BTBuAxMRBgLaCiF0rgodrEoCqtfIQQKV68OgB4NOKqmN7e/ouBIJMfQXZ1iyAfgGKI5QiOwB1QFGn9KFSYiKu2whALwW8sotSItMkAJOWokXsb5ee/14LAEV8IgCMbqAS4w7q8ZNvpGmPEjXWgwOg3QH80wQAAUApVUcAPNi0ZbDjoBbMAnArovIAAOH/bfJP5ERRlQCw9nwSk4shoowVNBcAyVlEdgAe/V+QMSAnYmKkwEgSE0MoAQYAojkAEYloUSToYr10u8UBgCDZawXCSBLHbXSrAXlSIdOKtaBSIrZFkMtF3ORutogWMxw0UAeoZQG3KmzNNQcg7qOlRGwO4MLHPUBpAAqAsdtoLCEGQZ6XA205e7gBUEK/AShugkMG6gARGBzAtzhPzIGzqrcAKLog9q57gJMNquls9iwAzna/BHib5Hk5UFnVGpdTEQ4AifX/GIAcgM/K6vZsHYhnoUzxJMF5Yg6sFsyZz0ynwkbBixhAtzsAOREXa+uZ7Rg9P7+EyOLfnuXMMQ+Az35eiE7MJwIA9BDAZpgRTqOhrwN1gBjLHwQzC9nKq5k1IjfcKcPkQRKzh0GYv7oGrkBUAiJnpxSeKQCrmTWPjRi1Svub8AMAXnxWO2Yd+1nFjNjk/cQl5IZI2P5Mx2vdAVgjHIYDR96JuT8MrZRBNPVnFY1ibDoSHekI+aa7xMZM/XWyWFuG1OPPCbUYKQDNA8BrMervkV394fEo8KLaAaB8CIBM2ysZT63EoUu9VFEVKXTjpyLurjZ+EdXiANZ0GVKkAJtBUY3zbICL4o3gdtkf1VeQXmIcO2UcIOInQ9hqGTnERABT9fjr7gpUD7peXCpGGBAyCNCV8tVLGdFsgJ/v7++Vb/xczfezYhjVIQDKaBL36AlJQKbJSwghimjVHYB63Ii/4vyL9zIOgCrGxCZcgZxoNkC9SK1COwBy58WH1XMYJW4cIH6V4Owk222IaCZA/LZCfLjxH5hKURsLACSwyihALJh4FGoinr2EUAiE395u/G9vLCgDDoBKp6Ki4wAhZm9GMj0HtIpZUT78uPH/OLAagJq5cAeSMpzErv5fDYbINBVAxUyUX7/f+L+/srsV1m6j4wC7+FES4JoHICoIkO4ACH7YJ26j/aW4P1TkaJMBrNHh9cb/eqAYCBMkgo4/C0ENotPMBnA7PQA4dQL0Ju8iAuu6bQ506LcOE9qMjtEpuudq5HocxG1rP/d6DaosAFj2AsAicuuN0NJN9BFjSi3qRH3pJ+s6wAbtI9ahx5xwowVBp06mvoeWcp++bBI0XvbiGNljEQAShWUEQXBkAgVCii/GFELXGKkPEGIjdOChcAZ2bOFM4ZDmQSMCwF7/PeFxUdxVMuf2PUwRnltbAJxSe+5n32cMpGDckiHFVpvXnRFj3qgzYyYAURAjguWjwtqwxpnCEGNzEJMLcBhhsj46XJk4ID6BFdMwBbg5BoOBOWM8INsARwTLA728fHv5Fnp5+S0AvgYhrejjuxHrytjj/lUYCQ/C4P/buQLdxHEg6tOqQidVp1XlXcUnegOG8v+feDPvzcjUC6E6jiyR/MD2eDx23nOSkinb/StsHwc8ZYZchGMQy5nDZNDFTaLQiwJI/w9KSFfAHcSjpQkwFdxWPmvy0wp81YYAOra+z4CL9JOD7pYiIXDL32ZjPreFmhmO5qIAsNc3SroCW9DKVmGsIUBbsIgXzg530Gp2GnmMw0W+W51iq5nTAlQsDUr2uC3l+8SrAv7Q96wA23uUrbGgCnLE2tQTbqRhIGDRcXLIQf0gF2o8Tg1EgCpX4eUUS5LBdQGKWQE4LPdnt/25gxoFyJMLHKiCJiQFeRgM4V6EgHCAMSrnzfmxbWSQLsDoA9pcFbClAJDZ7rY7XVE9O/XY2maYR99oYOCtheS5o/AwZKctJ7lyko6ZfuX4qoYZAYEZAT93WIynd7fb8SDkrYYKgh6G6csMeHAhNEnqcso78MJczuBk620pwH3mxOozAn78YDUngIspYQowAtZssXbQVS8ogpaWXRMDAwVjmE8BocHnoPLLUGNQqYcMrlxCP/5RAVrNCdhCgPMA1S14g0ATAGkmwApqbTkKpwXvUGMmunBDE31UprX54KTczwJe+OkFgDsqx7eXl5dvhBovKdlC2ECuqS8DxZjH+ZkvBCCQfpDh+YEb7Lgi9Pl0W9gFWIOFQ4DHpwawCwF/K3etAOd9jpTIE5vA9XxF2CBGBtFHTaahnQ6XxWUoQJu2LLiTdrhgeJP+K8AM6/qbhQcKJQpW9NKPxj1scF2xAwHhjmWbbW92wky3wH8oEf/UoIELJrDpjtIqepq3NbTaNG1SC2bT+oDPbwJQbgsAe+CCADNiXevEYYNH6o5Pf0qNS2PujRnWwB8zYKcu8IsCXtsJOBeAozQ7liIdVBy2DtugQDcMKAxvapPQY1RzekALZ+frAl4hYHV4VfgVtFoBfhOs9AzwJuZNsE4BTcFaz8Am8Oxn4AUPEgQeRLVyfFOkp8cGj2sQYZkMKoU/CG3S0wP8jbG/zYRFBekeHK/hxoyK+nRiBcwIMHxrAHcAI8sLOIUA8q+oZwRsyF8LDLTom7HZLCxA6SrlWo0zXtbTdk7A5kU1WIFBG4C5tABSrmAP5tU6dUbA29v3t+/Ea8A6bwqtlhZQlbdBOZuOit6sgD83DXECoq9jiwvAnmsDS1/szF1CvOKt2mjRl3q05j2x+E0cCtyIakYAuBLNao7fIICcz5Xc/jEK6h04sLCAuGxi86vf0fP3wMs16F2wuADSjh8+VlV8DtyB5QXwJJgA415Px1UJ4AcxuFtrAvQcrEeAsSZOZvNCqisSUMHbysls3MurFKCGk1+XgHiO45XTPgnWJEAVYP9XK6BCAF/AmgTUyud/sraGZr06gTh87Pf7j8Ot8SUE8CcnBbACbgj4AMGPW+OLC9AX6i8IOOwPIDg7vkhKGfdu+zxbq4D4PMM5uCngY69lfnwJAeBfIYJJPdrjVwQctMyOLyaAF77y9gz/hBlrEQCYBNzJJ1SqZTUCTiFAAe5QcUGASKD4X3WrwVZKTcl6Itlgbkf28AcKwHZHTsNaXfWCgCJaSpUslSQzRIjakhLEhIAsXfiDBVQXoIjUrKYOtRSQrdz2agKUP95G0HpmZXorzkyEP1KAopJ71HhdEJCLsa7YXxNQQT0IuhkCuvDHCUAOHNR9/y8LkKysRaoYNSWX1UMfBUAOBQiIl7Pwh6aU53t/RFHzVwFTybWITGKscYnUXE2AekwA5Ey55GwxXfgiH2TVf9F+OR+YJgEfazNqmQpYqq0E1aHsJ1Tq6cIf/kHGnz0w6zUB0/tk1TsrItqUaPbjEfLYS4g7j7u5XhXwbqze9/aQ9m6PaXs6+FaCaLvxFvHIDzLfeW3OBZxSh73ioMQUe9SHw77h1vhjP4lP8SRH9rwd1pKRnU4UYFCz3c9rycj460SQR6knltNaEho8uCm0QaGh9f8r4PjbcUdG9qwCbucDQ8AQcIYkAaZgx1xylSJMA/xxujL9ysdaIjYz4gkEFGZYkYJV5VbRtnwAQ1VbG9BOgYDyNAJAKVKwyIeVa2RkUOQRFGA+lPIEAvjHwpGCWSN+1eR6JkC9TZ+F12cS0FIwI4Wrp4rkWkIA0y8IKFDqAuQJBEyfUjAjVa1SW4VRwDQh7+QoxCK70d70BAK6FExJ2Q6raS9JJnDy9EsgzBO0yZpnEDCfcc1nbM8hYD7jms/YnkDAnRnZEwi4LyN7AgF3ZGTPI+D+hKZquRv1gmMhAVKlHRQVCiEsdNGu0mLQa4u02WIVl+vWaebdGZlgISmSj8VZFKfUaMlRxDgUuNRGYQyYlljEZ6BUEQx08yCMS4rF3ZkPFKlS8Y3CMevCYMEDoKKnHAuOntVmX8AAMRpdciyi8SSJ8Vw4A3Wsgy2BWXCgewVk4VNsrrnosGSxlruVcbBiY6JOi0O/GAPGwJPbIsovixGDomzUz+dlJc2hmtWucrcAiedvAQ01+gSoCMZQaWhLhjyG+6z1xYyqm5f90RluKVaSiEBJN8HDU+r5Kc75ZR5fEI2oLgGKb6icAIhgNz1GUEq+nFF188icywnFJ7CR0k/w8JR6fkUUpfEzF95cvHQJUOyLR4I0nB4TIq5lVKXNQ8soLkqG/n++9BNcSkq/8IPexg/ljHifAMUgCXCH23dUFKK+axlVE1C4vjXm6QT8MsHDU+r5UUDwcxE1CwOKXEqAGMLrvvtKC/2ZjEpSmwcCGUs1UqmfMPmEJqDnVz7zYzKUtJeqCNrUJ0AJK2UdlZos9bBAxKAvNRZpGVViRiWf5iUcVC1zqrtop0vBhJmWiIZPRadHspbzVDWqS9DsHsEbRpLENkmxo4JHUfY2bg0iBPQZ4/1UIEttwbxibnvJ+Tx40YMGsJPUpWCeaakFn8ZaSlYmqyf1tAStgN/yWOA7sgWwwHdky+D+78gGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBtaCfwE/iN7wd4XgKAAAAABJRU5ErkJggg==","spider":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAKlBMVEUAAACSiX+MgndgVEhPRTxHPjWoDg49NC0yKyYmIBsmHxoaFA88AgIiAADotIQjAAAAAXRSTlMAQObYZgAAAgpJREFUeNp10rFu1EAQBuB7B8RDUCIs0tB5rUuUNAivfBKvkI5b/eNLyVkzg6hQYGfyAkn6oDwAFUUqUvA4rHTGthTlb7b4P+3urHZV4uqqsuKbHdNNz3S9A5V1NUVIVW0leQfOCuQvhNzTDJhF3W6RlUvJV5R7przjBSBxu5KbHmV73OJaUc7DBDIVIKs5zuSU4nSIkYotgSUox25z0GAtfe+qk+GWN0PCARhI1fgwyJhjpOb7QDQBN0DVJ9BRiJmhB8CQAlhlAfZNaxAfb8ziwuSLQeqmrdx8BMJi0qsvBrms6hP3AuZIFxNYRJBj6L5W9d8UYg8SGcGmjSlRFuOB1/vqz7v6mLYbcscIEoYOAjNLoB+/6urtbwarGabB2q4juBnR5dnj+fnZ4wlDM2QEbQhdVHXOoLr69PBwVFfM0sNmgEE9g5Ve34U3dTh9IcZu/0Gsw2atboDL6f37u48vL+7E4c4jaD80YU2ult0v/NvP01d+707CGMG2DVVH5uNrPk0a2oog7vYM4G1qgN6FngEAgZmc8aQKMTSBgY62KbShCwIKaTODGPhztU6csA11FTgJQhNpBuGoNM2QIGDsQx0ktfF4ARKDIiKYmUAhdMZtxzIDYN+g5xLJVO4Aw8BYAG9L7waQeiaQGwlIZ5ARu9g7a9Yc0wYFK+kCeAbgDvfegdK7qyy+4z9b0kGP3NmJngAAAABJRU5ErkJggg==","tadpole":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAABtUz1jSTNTOSNJLxlEKhQWCgDfr9AwAAAAAXRSTlMAQObYZgAAADdJREFUeNpjYGAyCglgAAFGRVcHMINNzMgARBuliSUZGQEZzkZGxsHODNiAs6KwA5RlYsBAOQAAqGUGQPKmAvcAAAAASUVORK5CYII=","turtle":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAMFBMVEUAAAD////K0JHCt4ComnNHv0qUi2OCiFQ/pEI4jTopfUkwcj8gakMlZDMbWzExMTA/pVLKAAAAAXRSTlMAQObYZgAABDNJREFUeNqd1s9r40YUB/DAZr1Z3JT+By2S6XnRiJyD9ZjmtBRSUbWnQITMQlgKXeJL6aGxlpltD2VZjKY2uRW2JodAlxAxm9DD4satYnKuI7OH0qUkEfQ/6Iwk/7isrNnvSUb2h5n3pHlekqkG9AVC60vvnLuEPJsCDxMRL01pYIWQ1hRwo+T6leeBixUA234MsJV98Cxdxx5YFuDSwG3b/tzFX8nLigtoDZngpdlSAHYbOYCMmoZMBaAa+LaIQ0/i+GKpsm1ouqYhFYARCRCWAZamGcLACkD4ITn+nvzXyQCUAWvlgdWQBQGlrBNLYFn8WO7BVABGTQ/Aa56kQAUAtBoAzgHl3DI0rV4XVVQDVvyWtT4FdE0dcDbr9yaAbiJ1wN80Pkqv7riWoWsIGmrAXX9Py4BbKN2CjhQBsolmQE0dWAlaZlaDZWTUTFNDpirwDNazGnhQr2mAVWsQMjf7cgWQ2IJuYjWgGoZTwHIxbIMqwHl7AmCrpmMFYBkAHhx5YfpSt971ZL7tt8yC35Y5Vfdq97JLxoiFkNwBqJyq5Ds9B8IgIIQ89lzLQGZ5wHmqTQBGbZ+0AOmarius4CnKAR4y33E+Qyapm6R8DeietZ4DzJft2CAy5YcjbYEEKp5nU992GKEAIMu4VRLotPGP2aWF0AZlbQCsMl2rnaMJQEQC9gIZCFQAfvTgMAd8/wvKfpU9MKHkXCSs7fE2iGx8uuQ4NmX8uGVstJA5edpNE0q/W7IHtHNMZPIVpPMaewtr8tYuWHJezwD1pPN6rRiocnbm22TQ4SPO/2XsivOLOcAwFgNhNyBdxnnMTznrnPITNWCV8796vd6IixE75pyfxvEMSOf1x8XAe6PLg2ESHYwuo+RG7CJOrn+b3kznNS4G7kT9YZIk/eh3r/FtEg2T5lzT5bxetIJlgETkbxDBjWbTA1ifA3StEKiOX0H28oDIcMSvB75t0+jqMAd0ExUC798IADdFdgVwniSsG9hOl+2/zu6n8xoXrSDuAzSaMi7g81HI6B+93oCyw5IPUvXkDVgZsA2f3PAwePLcdnpkBtQWAWNAzTRfm/djzsgvsgbPaX5EyHm9CHCnwMOYd3uB/Ov600EOuHJee4VFvGx4GbDb2ImTq5eBWAHp8kkR5bzGBcDqOJqtYGcYhzSSXRjQvAbpvMaFW7h8NAW+kTVwRBfOnEkN0nldCPB5YCQAW3Th5ylQcQGKpr0EmtMapMCXogZPJFCQghXsR2kbD4blANmFeUB0IRgQ26FnndclAdkFKwdAdiH44YyQSD6JpSK70NjNa9DciTlnpBtFAe2UB8YwXcF9CTCxggErD8RvADLgkXiZRjzsMkK7jJcFVuN/5l7nm3icRCFjL4fJRdkuXPfngCi54uxP1hEzonQX4v7sRMLnMefhfpIwXrAFhXyw4P7/kgmYSeJwxJwAAAAASUVORK5CYII=","vex":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAMFBMVEUAAABthJtgeY9Ta4H////z+Pzg6fHG2eqivNWUrMOGn7eCl6t5kqp6j6RthJtgcoMKluMvAAAABHRSTlMAoKCgEjok+wAAAPlJREFUeNq1yL1Kw1AAhuE3hxYrRYm5gmivQL0Hwa1LnAtCFpdOjuKY4KBjfnYhIUPWEnIBhgxZRSjHC8hp3KWxkg5ndfD5pu8FDqNAKQkwKXIE9Fuj3zCQjECYDCaPs4tOQP9pDME4B1MAbIwTgJEwv2yixPcCPw2igGkcljlZ3YfP33WSJTB9yhG25HaJPLUBtkCdvl5fpVlVVRy3ntdQZW+eX6e77UIcNqAke0eq+JCgGvam4apoUGqtHtC067K9Q1O+l2WMJl9RvPAnl7+0L5Ao9NBB16GxZpZloTGFeWYC47l7DzrXcUF3sHTQjW9YoHMW4zn/5QeNK1xt8XQSVQAAAABJRU5ErkJggg==","villager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAbFBMVEX///++iGy3gnKze2J6enpra2thYWFUVFRUU1NISElMODM9LSkAAAD///++iGy3gnKUj4m1e2eze2KBfXl/e3eja01vbWqQXkNjYmAAlhFUU1N1Ry93QjVcQjpISElMODM9LSkzJBEjIyMjGBTjk4HHAAAADXRSTlMAAAAAAAAAAAAAAAAA7Uh4SAAAAn9JREFUeNrtlN1ymzAQRm3cuG5C9oMFJIW0idu+/zt2/wieiTNAk0ufgdEKs0cryWJXB0RguUEO1/Xzc871Irs3AViTQdnYLgAzGfmPkFnT9V4tiAI+IyCB/19AVgA+KyCaF9FZL3iDlfUCAl0AjpYmFgWagjkJfjNCtCwgml7niyrmcJ0gho7mQkDrBJALsAhwyYY1IAP4bahgdmKFgBme8PjE/PRI3mMGG1gWxMpnE3GetmFiWQA/yJl/CpzJutggYAYYIjAyQfu8XlAv8DWCb5sFqW2Btk2llJSKctwqIAFJ8oVFQRL+ChcCEKGlKwJSQLRfENBHFYCMZYG+2F6tAOauFgRtC8K1RYSdVqhgd6eCUmIUxTtdKknySXchOYOQEhkAmNmm4YJ5FPWM0nRdbKNGZRxHH2KElx8CRmWCvu+7roxd17nADE1qhdR0RfP1mQZMbAqwnxcT9KnYS5Lc903Tq0U6jVTt+Xo5SesWCUMvIheUMvh5GnwqqpKUJPU0jUSik57jnyswABWgitMYU2MjZlw0X9ppDbpOTMSkwCCQCXw+FBe4uGGUdehGy3950ScaEC4/duwCaWHPorEdGSM/0mMRRlKYogD2bZzGZvuJIa+/SFIQYfCjqvb7w6EKDiYAGe5h4DU4/3o9ezSzF94JGK4IC84Tr+d3PHzwTbTqvQVkqjMlSEa5KjhYLUElPJxOD8r9/cmjGQJxJmMgQVN2B0UCbUxxPJ2+OyI4BnfKEcAwxF95mARL1BcAnJmcTIRqq0DzQsCZwJsEUIgGFUCIKmiTQEceZsGwRlBPQGHY3EOQB2Jalz9XAB11crFWUH+Sm+AmuAlugi8T/AM2/NtEbUTDnAAAAABJRU5ErkJggg==","warden":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAOVBMVEUAAADR1ra7w5sp3+uir4aBmYhudXsAkpVAV2wFYl0HSFcDQVAXKC8GLjcLISoRGyERFRoNEhcFBBJsUoYuAAAAAXRSTlMAQObYZgAABmJJREFUeNrtmuti4ygMhWMChEYrjtn3f9iVEG7r4E7iSyf7wyfcbGetzxIixTuXbyqloICdiCHDJV1+U0UEgFNiAOUdAIZApObfBlAUoLwToBCVE+B1gNvl+laA6+12e68HPoTgvXOAru8FYNrpgbJCAJwIgLHwhW4Sgo8jAfCjcSMIzgXAnJGZSO1f9wFgydiP4pS4fSNnMX+Rx98JIMLUQNQYRD0Mknog2bnMdDXrh4UAOQPIZl/GvWuiGwYXJ4DL5VgAZKDkYhqBRwIwwCKA8dKqTCkE9xoAGkAZpf+QRjQHADjF4NQDLsTEwHOApBFb4QELey7lH+WwwyZoZX0gUQiJ0XtgfxZkoHa1GQuQH6YhGCyyCDwHsOdf4YEMMz9qJ70AzASNwTBoBPAKAKWwDgBoIBMA5vYtBhaBg0LQA4xFalaGDsAYRHYexwNkmGGhGBUDetQgMF8Jf2EOQAHQ7FehmwPMthIy/9YcUAoNv3R2+F2wRLQk/J05kAH1/fJK2BCZJ7DjFiJ8AejwwxC+AeDLCRwCl1cBSAnW/hjZ43+OUeZCSrDR8SHof45nMhb1gI4PBFgnMBvYGwC6deBoEd3vdyKWXkV/cVdmMrMiae/0FgC6VQQpSSj+OgCpWhDoHSEww1MM3uIBc32bjG/wgJrV5qZNeg5wvdyOzgJqifCaB2Rjfj02BDf6ss89QG//4/A5UC3fTU8BrnRo5IkSiexAC7VLVuyKXZo8QHwAADMR852ll08temCH2lpzl5rbN5pZ3Znf6MJ7AVRZpPeXponaqczI+mFmaUi/ALQkUAIizvsAckaWCjVXTRXpqvSoIGsjKmUc60mUCUCccBGEvI+gAMVqwchjgRRoq6q2pVfr9Vt6AANoDNe9LjDrKjNq4uW3JbDuG4BoL8BMI1jUUCZBy3e9fscVAFkbsCUFN5zZrs2EXwIwcfm3Sga9+r3i9Ot5EAAKq3ETd6Ff+CO52uf7/TAAyLOrxA8ovZjLXLY47gdosTb7ED0Q9CHIfwTI2zwwFuR6Tya2tyUwtv4d5aTpd2N+rz6BV2zNOAOQjtHfrP9/SXcmsU/fAHLptAoAmAYvzQF7fuJFD5jwIkC/De4VQ4gdgKbhPATo77BqRbTUIlr8DjP3bCYsjfMWAHusZYBhGLAUjHYSHcEKgH5164XBDeoF1K6UUYuJWejMNApg/VYAspndS9+Vs5c6DMkNbNlrzz4MSqUCSs6zNWMdABPRTyEIzg1JanCDspSmUXn0pDkggwhZR2s9MLY58GMIvHMuSaMM3g0oTc6FWmoIMiElUK72sSEE9/pZBhCrUaowBO8FIFdsOCcnXfUAQCknKZSBzZPwfuflEHjnozdzMm4GgODkggFkCi47KYHyawBLGc3Mi6tYEKvRe6cgUgGU0QCC90JQjIBCILP/IsD4sNhC0n0aPgL4GAQgSgkegHlAD/Tajr8Jx5bKDiySdEdjmANEr7a8lz7FYAAZiDGFmLYDmMRsqinupbo4OGEA8xwgBIEQ6z5SSp8eoETKsBnAHGBWw+CEw2kfKtFsIUoxqAvEGFEitOCBiUmv7fPA4LyYFPmkzZTb83e/lNT3UQZMjGICM4goxk0AaE+BwfsghoUjSpXeSTcHYOIkDDFxYhFKExh6aSMAGoDzwUz66M0Z0rnwAKBOSMykNjGFD9UJnDYCQM1XAK8Q3kfp1BnehzkAbNdO0j2+zFYA3gegGeakSO8FQKsM5wBgUbVf9FPy7I/6zQBjBQiaSGK7proUn2JI84mFwlLkU83PNEpFv7au8UBKFH2qa11QBrVOibqdNOx5l7QdoGAEJSIxqg4IMUWtxMRzgF77AQosgjbF1XBIOohEBH4GMFq7C6CJRYlTrHlGHLUB49c98Imv1kgYki1zicGMsgQAaw8DaAJQ85wsz2p5uIVZBSxk+A4xO8gbtmY1FQtamjPAsDs+TlilrC0BBqHVrphpbN6cVpMsH0jBwn/MRAARMZqj6hAytEFZElbvDdGs9wD0RL3/Ta9Mwp5jtLrln4Pgs8ULAE+0CmASNkzCowBW7w27hQ3WaYP1AP3e8DkAFt9NWIatA9i0NyyosGDriqV5aWmOVQD93lCV/3yPKYlrpdKl+RqATXtDeqI1ACv3hsfrx73hqVOnTp06derUqVOnTp06derU/1n/AR0CP3Q2vq+HAAAAAElFTkSuQmCC","witch":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACACAMAAACMX59YAAAAmVBMVEUAAAD///+2qJWrn42rnYmmmoijlIOgkoCPj4+YiXeWdliWdFcltDWUc1Z6d3eAcl6PbFNra2uQXkN6XnBhYWFoWUwMixp1Ry8vaDVaTTZMTExHT0hQQy0/Pz9IPCc6OjpANSQkQCg1Lh0dPAkxKRwoKCgsKRg2F1guJxonJiYwFE0YKRoTLgEeHh4oEEIdCy8REREVByUKDAvCurIkAAAAAXRSTlMAQObYZgAAA1lJREFUeNrtloFS2kAQhiPphVJbKVq10XDG2Ba4mjvx/R+u/+5yR1U0d2SqYyefgcuO+T/2NoYxyw4PMyLPlVL5KN+gsuz8/Pg46+bw65dPtEoeginjBdFAkAvTEkwVxen1eoJRjg30FfTbgjAKQ0wlD0NQTEKQNq98ntcANhU3fQkVile1talogRJBkQsiIFG3QPnrVQHkNBhAt8BHCgKFxBURJSh8/hcjFeULECXwMzs4KYqTAwpLXgxFtwBXkWM6/gDGU0kHugUTMoDpeHx6Oh5PleQnExy0dAsmrICAmUp8S/ZeKQum/BFIFUyYWIEGP0GMYAEM+OeCgnkVQQNqCJrlcqlBDXBWqVGuKlSE1lVZVpW2wAtoeSxoWEB1XZVaKV2WqEBVleCBwNEaBFoEsm4Epaa3RgQlTvHmSGCQdxCYIKglWEOAbpdNAxclaoR8hWZwOGedgcABWkVQe0ENFY4lIIFmgVQaabw4CPzKglrX/MkNTuigAJpmQaUbrl4WIMXD07JKhHagMfiGigYmHFXVIahl9UNssANUAGdIw7FTgMslSAMAItAiCDpsCT/ZLubzppHcfD4D4tFVSV1UGwHycOwWXMwR/Hg0w3JBAuwaR83AQhORHtDjbgGYHc1mtH4DMjbN1DpUPKnseRZ+eRFjrbPWGKx88vev4gQGOQPYZJIFoQO7swNZXsSGLTzpYNEpcIA7gEHOxRY7RBFgBs4L/BycW6P0HaBar52VLxz7tAMJiUC6ySwiEBiZMucd8oR5IkAqCMS1EVi+2iwMFw5hEUTAAkuC2xsIaENUCdEC9EICRGy6wPEMsGkvWKcK1jKDrcAlbmENgoArt7/A7CFwDwRuDwFP0W+BJ5J+GyEwj+6CSRQYEZitgH6iBU4ExgtMssAaayCgR5QqK/8B2PgtWMsCePhhIB+wCX8H4PYGQdKJAG9JHYjAypNhKQ0ShshXs8DtIXCISMECrliYpbEK3AcSBS2zv6C9Y9pB8IaC/rfRkyZYRfKsoI0kspGOzrtuQdtHcEe8R0H/GfS/C23gd/uYNMH19+u9BFcbLs8+n11ePSSpgxU6WLUeea6TJsiz2xd88tsJ+m8h9osj+gvl3QnA6j7rBQ+uD9z2wMDAwMDAwH/EH571WWMJHeH4AAAAAElFTkSuQmCC","wolf":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAw1BMVEXt5+jk3t/c3Nzf2dnW0NHKxsfIwsO3t7ferIWzs7Nu1Je3q6WhoaGdnU10oIaBgYEatVh+dnBegyJlZi1iWkAodi5WVlZUVFRERERHQjs+PTBENiY5ODVDNSWAAHY/MCQzMzMtLSg1Kh8sLCo0KR4ZGRkAAAD////k2Nnd2tvV0NDTz8/Kx8jJwcLBvr7UtaTOr5bEq5ywqqefmpaalZGnj36ajIiVhnmheFuUe2iBdm2Mb1JJQjk5PD85ODUtLSgSFBY76smzAAAAJ3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi/HzzAAADR0lEQVR42s2UbXfbNgyF6Wli41WZqm3NtkQOZ3ZVwwCFbShO6r6k/v+/ahdwtjOp/dJvvZT5gqP7HAC2GYZhWFDBYBIilsvLy5Ty8HsPiY4yirIQBgtfX1/HLlbD/xUcQIXh51JI1ut1TumiXyz6SKKkAi4AzEQGCLH7AhCpFDxMmBmAlNIffYw9MlMgPewrAPDHKWCxiAtmEFjYyogIrNd//frixU8/lyKIF4htdUAIsxIETiEAfMPGQRmDC0HzGt1Xz6AKUwAXJxC8VAgkb+TgIgIacV//7UE1K8Fsb477/fGN+Q1HAFw9e5auErZi5KcVANcsA+D3H+7vP+yFvA9CvBZhr8qmU4dP9Ukx3AzABP/DAwjE9hbGb1TcYnYCynCOksJYpwCR/cM9QfcPe3lSApWwAgJ5AbazPhhqCkgpvdwddnjOzlLKOZnEatH/CKKEgJ0w5CuA7WHrgL8dkNMVLMKj18BWxegBIgVHZQrIOb/cHDYO+CGfAIl1VMHjDYRvFATYQ9hMAb9Am08bJHF2dg6Z/wqq+9j3nf3wYmhjFWOoY+xirOowBWw3Nzc3R3w22+1utz0fHqFl09Z919e1WAqS61hBDsA6B4Bg/g36cNidP5bySKVtYmeDCkSr6nl8jiy6PkYsU8Dh+Omk4+EEIHosVFV17LouFhKlEioQapj7LoZYTwE2NaucXl9cvLa9XwSLUHW9DaERDayRd4ghdH++whzngM+f373LKwA+fnz/dvCLIIaqRgv6qGKAEJxQhVcd0ghfBSQHvH2P0I8h4O3Tt6Cqo+riZK8i9MV98HThcVZMQsyDiLVO7CjYEGYqSlSFAABYUwDx6T/YwEesTANWOIRxNCuRFLZWLtGqpmmW7QxAzGZdqllUDFBOAMvA9pgVuTRt2yyXmOYZCDOsjYqjeGAqEBPEBSIERkCaJue2BWbeA7jwcYACMbAl4CWI+NYBVAyQVmkOuNPxTvVubAUWJZQAJxh2ZAD8RKNyaVv7r+c5AH6MUbMKwW5NZKtamP26RgiPjkwruLMxpgBhvr29ZTEAmwsAtq3gMdbpNDIjfSBWaTUFrFJOVlvGQHrAm9XNPmEAwCqc7UWbpoDh2/WdAf4B+LQj08eGOFAAAAAASUVORK5CYII=","zombie":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAclBMVEUAAAAAzMyPj495nGVxlVtvlVxtlVtnkFYAr69ph1Z6d3cAqKgAnp5ae0gAmZlra2tXdUdOezZhYWFIdTJJcTVWScwAf39KaS0+aS07Yi9MTExGOqU2WiUAaGg4UiYAW1s/Pz86MYkwKHImIVsoKCgaGho5R/XAAAAAAXRSTlMAQObYZgAAAkJJREFUeNrtk2FzmzAMhpPNm+0akmjVqFRGEsPy///iXtnlml27laRfeWwswZ0eI3NsZkRFVWwUdHMrIqzKitKC3C4gVjhgOQLVOwQEAcvdAmViwZQiuKOFsj2J3i1gZWEVrAqEbxaIlkHMAni5QK15VRSpwTI/UFuYFnx/q2ZCQYyMEq5PSKWMJW8gZSv//av75rneqcJFxMqLemdiiq1zLraR6llimEtk2fdnpvZycfFyaeGScggkqKclLQjqWShG1RhR/XIKCEgWtCByLJs96tOTPiIROoogMhEvO0QWqf+AWqXdsQIEWfhP/AS/wXy//VXYji/Mz8N2G5iIPxYcC28EW0CsnxOwqnyqhTf/yQhy3/fjNE096Lru1CRl0dR0oGlSCAn5bteZYI7vCcYiGIYuhUa1CQH5kFIAVRbAHP8S9FeCoQhC2XgAKSDB8h9BroIMQc79aRhOwQwoqzkyTMt3Ke3m+CrIVWAxwzacTiZIRQBCgwyXgAgEtGAzk/tcdh6R2ETNkEyAOSCfBcykLjovyuy9j68CVPUAS4lWZB3AkQa8b1WlJMzqW9eykvhD9O8IkM1foR5Bg3wwlzlQJ967loQ0Ru+vD7EKMjJggnJsuKosYZpA2TsXiVnjdQvnsxVa+fm8B93QdbanlRUBkoBFWMk574RF/PUbPJ9R+OVhj/BsgnEap1xIoZsmyO1EcyYI0IFXQTz4+CoA+4f93uIPAMHYF3JTcyRokkmodbFVEo6HeNisrKysrKysrPyDP68WY0lh7YK7AAAAAElFTkSuQmCC","zombie_villager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAt1BMVEVskkNwbWdVczVjW1tWYC5jVC9IYC4/WChUSSg4TSM4OyExPSUuNyQAAAD///+Iqlt3oEd2kk9skkOCe3RyhFFmij9ffzdwbWdedUVXdUdVczVjW1tUZkBOazBgXjhOaC1HZTdQVzdUTU1PUTNBWSiZKys/WChcQjpURypDTCQ4TSNKPj42TCpJQSRMODNCNzcxRB8vQh44OyExPSUsPRw7MTEyNyQqOSE9LSk2MiAzJBEgKxgjIyNApSiHAAAADnRSTlMAAAAAAAAAAAAAAAAAAKroblcAAAMeSURBVHja7dF/X9s2EMfxrGs3oGtxHXTSztIuE+mtyG1+2HNKxp7/49pXIoHSUhxe65/52E6cmHs7MpMXuxxR3p0iFF6+3Gz+vPztlxdP9AZN9h8IfQ1c/vEMgMkgItV/kYbN5upys/nw4dWhAOarGkS4Ay6vthmYfL8HAHNViD2w3VxdbbfPAGoMV1VVuz2w/fTpeUBt6ro6r4yWwtnZycnJ2dmrgwHMwqjODbmADgeIqrx6Q5XBKvALSlRyOCZjAJM5ZyJig0dgKkN3sw4HjwMEwTAFNlRfuIpDnkIF4DAOMAsRgGAMuYvzEBwmQRTG0SGAGlYX5hfv8AjfzYMT54QzwJ4OAkRFHc//Kc2ZhJQ9xvHCBwDCAkGE3r4P4f1bkuxB9ThRFR4FNCVFqQ9zFHp8wr7OX616XBsFUt+vUwbmf6M5ZtI6rYHgwqpfrQ4BUhb6eanv0rpba5dS32G8GwdOT1+f5iYjjQG/PvmHTwE/o5/Q5EFWhVnUNnc9FxBCfChgUd91/et7gDGu9AjgyNHnm8833wIQvgDoe7+A6to9CnQQvgQYgDwCmLqmGwhjS1Bh4scAMiQPgCZnse2zdmqbiHkS2Qm2URG11iEict47T6gAbRObaNvYNjhpbIyxzIsw42War8a4U/M8Nod5vQdibNs4DC0MGzNgpzGlJEiTLfMQUIwYNo68I3WexO2BdgCgQ3awNVlJuzrcGpP5FVkhckCIRLGLuwVaTaopJLyBGuK9gPmptRbfNFMc1qozZfFCglQKoIgDOeagA7Ym3zEOXa7MN1gASBBRlQwZQ96JOBwF4MCeidg5puQ4YMELPNgO5UeXsWVEgAYVJlMALkIBKIAAwHnH0SI8FE2xybddYr5tmzZFJAwAeWYIorcACzE5KC4wBwDLYVgu24gwPeR57KlFHpN1XRsiZgehACKz2wUJ+xnOF7uu/1pcL77Kq6caZUD2/0ZFAk9zM9XrfYvrb1L1TPXvNbFnhwqQEPOKZbVKaZW0aWIpvy+bZVOypUYT7vFx9tGz9zOcFuDN/+gIHIEjcASOwBH44cB/1lQM4ZNhKecAAAAASUVORK5CYII="} \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/objModels.js b/prismarine-viewer/viewer/lib/entity/objModels.js new file mode 100644 index 00000000..bfd6b114 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/objModels.js @@ -0,0 +1,3 @@ +import * as externalModels from './exportedModels' + +export { externalModels } diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index 08dfa2c7..427bc446 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -159,7 +159,7 @@ export abstract class WorldRendererCommon texture.minFilter = THREE.NearestFilter texture.flipY = false this.material.map = texture - }, (tex) => { + }, () => { this.downloadedTextureImage = this.material.map!.image const loadBlockStates = async () => { return new Promise(resolve => { @@ -174,7 +174,7 @@ export abstract class WorldRendererCommon } loadBlockStates().then((blockStates) => { for (const worker of this.workers) { - worker.postMessage({ type: 'rendererData', json: blockStates, textureSize: tex.image.width, outputFormat: this.outputFormat }) + worker.postMessage({ type: 'rendererData', json: blockStates, textureSize: this.material.map!.image.width, outputFormat: this.outputFormat }) } }) }) From d47a92bf3575d0cc8ef3f13b2dd0059831ffad65 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 18 Apr 2024 09:57:55 +0300 Subject: [PATCH 0007/1074] add new entity models --- .../viewer/lib/entity/exportedModels.js | 38 + .../viewer/lib/entity/externalTextures.json | 2 +- .../viewer/lib/entity/models/allay.obj | 325 ++ .../viewer/lib/entity/models/axolotl.obj | 509 +++ .../viewer/lib/entity/models/blaze.obj | 601 ++++ .../viewer/lib/entity/models/boat.obj | 417 +++ .../viewer/lib/entity/models/camel.obj | 1061 ++++++ .../viewer/lib/entity/models/cat.obj | 509 +++ .../viewer/lib/entity/models/chicken.obj | 371 ++ .../viewer/lib/entity/models/cod.obj | 371 ++ .../viewer/lib/entity/models/creeper.obj | 279 ++ .../viewer/lib/entity/models/dolphin.obj | 371 ++ .../viewer/lib/entity/models/ender_dragon.obj | 2993 +++++++++++++++++ .../viewer/lib/entity/models/enderman.obj | 325 ++ .../viewer/lib/entity/models/endermite.obj | 187 + .../viewer/lib/entity/models/fox.obj | 463 +++ .../viewer/lib/entity/models/frog.obj | 739 ++++ .../viewer/lib/entity/models/ghast.obj | 463 +++ .../viewer/lib/entity/models/goat.obj | 601 ++++ .../viewer/lib/entity/models/guardian.obj | 1015 ++++++ .../viewer/lib/entity/models/horse.obj | 1061 ++++++ .../viewer/lib/entity/models/llama.obj | 509 +++ .../viewer/lib/entity/models/minecart.obj | 233 ++ .../viewer/lib/entity/models/parrot.obj | 509 +++ .../viewer/lib/entity/models/piglin.obj | 739 ++++ .../viewer/lib/entity/models/pillager.obj | 371 ++ .../viewer/lib/entity/models/rabbit.obj | 555 +++ .../viewer/lib/entity/models/sheep.obj | 555 +++ .../viewer/lib/entity/models/shulker.obj | 141 + .../viewer/lib/entity/models/sniffer.obj | 693 ++++ .../viewer/lib/entity/models/spider.obj | 509 +++ .../viewer/lib/entity/models/tadpole.obj | 95 + .../viewer/lib/entity/models/turtle.obj | 371 ++ .../viewer/lib/entity/models/vex.obj | 325 ++ .../viewer/lib/entity/models/villager.obj | 509 +++ .../viewer/lib/entity/models/warden.obj | 463 +++ .../viewer/lib/entity/models/witch.obj | 647 ++++ .../viewer/lib/entity/models/wolf.obj | 509 +++ .../viewer/lib/entity/models/zombie.obj | 325 ++ .../lib/entity/models/zombie_villager.obj | 463 +++ src/panorama.ts | 4 +- 41 files changed, 21223 insertions(+), 3 deletions(-) create mode 100644 prismarine-viewer/viewer/lib/entity/exportedModels.js create mode 100644 prismarine-viewer/viewer/lib/entity/models/allay.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/axolotl.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/blaze.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/boat.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/camel.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/cat.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/chicken.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/cod.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/creeper.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/dolphin.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/ender_dragon.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/enderman.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/endermite.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/fox.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/frog.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/ghast.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/goat.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/guardian.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/horse.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/llama.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/minecart.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/parrot.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/piglin.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/pillager.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/rabbit.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/sheep.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/shulker.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/sniffer.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/spider.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/tadpole.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/turtle.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/vex.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/villager.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/warden.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/witch.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/wolf.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/zombie.obj create mode 100644 prismarine-viewer/viewer/lib/entity/models/zombie_villager.obj diff --git a/prismarine-viewer/viewer/lib/entity/exportedModels.js b/prismarine-viewer/viewer/lib/entity/exportedModels.js new file mode 100644 index 00000000..b43658ec --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/exportedModels.js @@ -0,0 +1,38 @@ +export { default as allay } from './models/allay.obj' +export { default as axolotl } from './models/axolotl.obj' +export { default as blaze } from './models/blaze.obj' +export { default as camel } from './models/camel.obj' +export { default as cat } from './models/cat.obj' +export { default as chicken } from './models/chicken.obj' +export { default as cod } from './models/cod.obj' +export { default as creeper } from './models/creeper.obj' +export { default as dolphin } from './models/dolphin.obj' +export { default as ender_dragon } from './models/ender_dragon.obj' +export { default as enderman } from './models/enderman.obj' +export { default as endermite } from './models/endermite.obj' +export { default as fox } from './models/fox.obj' +export { default as frog } from './models/frog.obj' +export { default as ghast } from './models/ghast.obj' +export { default as goat } from './models/goat.obj' +export { default as guardian } from './models/guardian.obj' +export { default as horse } from './models/horse.obj' +export { default as llama } from './models/llama.obj' +export { default as minecart } from './models/minecart.obj' +export { default as parrot } from './models/parrot.obj' +export { default as piglin } from './models/piglin.obj' +export { default as pillager } from './models/pillager.obj' +export { default as rabbit } from './models/rabbit.obj' +// export { default as sheep } from './models/sheep.obj' +export { default as shulker } from './models/shulker.obj' +export { default as sniffer } from './models/sniffer.obj' +export { default as spider } from './models/spider.obj' +export { default as tadpole } from './models/tadpole.obj' +export { default as turtle } from './models/turtle.obj' +export { default as vex } from './models/vex.obj' +export { default as villager } from './models/villager.obj' +export { default as warden } from './models/warden.obj' +export { default as witch } from './models/witch.obj' +export { default as wolf } from './models/wolf.obj' +export { default as zombie_villager } from './models/zombie_villager.obj' +export { default as zombie } from './models/zombie.obj' +export { default as boat } from './models/boat.obj' diff --git a/prismarine-viewer/viewer/lib/entity/externalTextures.json b/prismarine-viewer/viewer/lib/entity/externalTextures.json index a5ec3d13..82ad82a8 100644 --- a/prismarine-viewer/viewer/lib/entity/externalTextures.json +++ b/prismarine-viewer/viewer/lib/entity/externalTextures.json @@ -1 +1 @@ -{"allay":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAV1BMVEUAAAA4jNkuh9Ypg9FBnNpCm9r///+c/P+A/P9k+/9N8/hM6f9Q2f8+5eo94PdG0P821+4s1ewiz/8syf8ox/8bxPNNq+wQwf8os+hCnNpCm9oep9s0h8D7j8AOAAAABnRSTlMAoKCg3PODq/XXAAAA60lEQVR42tWP0W7DIAxFb9OtwdA6xQ3rzZL//84BD0nRljzsZdqxZCx8hLio3Lz4GwtYMWLDi4jnPM+vwogNKTTC43Elr6vgRMQ1wvM5ktsbvRPXN38wGxKHMmnI9M65vgxavwsg2WCpCvlSg6iqlCF4ceKbFEGZVC+5NFFXYUtxZzILl1xmiffoxUcA5DUHKULZp6iqsQzU6KNWYcxBUMnp8A2mwWxAhTPR0qRYFs6sDT+zTMZpWj5pO8L0wamexJ9xXvm10J27rrQ94dSdOqC0PSFXPV4JRuwRzIxGHMB38O14j4N9Wf4/vgDzpRGDwkNeQQAAAABJRU5ErkJggg==","axolotl":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEUAAACvsv+zsPmmqv+nn/+GkPXWhCt+iOyBb+d1b/9odutodOyTWuRbb+NlZfS0W0xsV+JpVuNNWc82QZ86AGw+Ir4cAAAAAXRSTlMAQObYZgAAAUdJREFUeNrtk9FugzAMRXG4twFS1jbl/791cbJUQnuAmE2VKk5cKpDukeNA9zeAhP4mwDlgahdAEoDm1dAukIzmlXaB/HBcUGbQJCBkBejgkMrt3j5WeYGD0iAglkXkehVZFlBQ2b0FkKjtE2CjIIYEUfIhESdMCUyWoyBFZPZI+Nks8OUs/f7kXSsLgCxwiRbBl9YRgddazcC5lhnc/T1VFdQObDMIwdJBRQQhYNWBTTCXYzR0AMZIyOy9c373FuQFGXLJLzYFEJQvQSHKgwKwJQAF1BWqIBC6hNlKbAg0GPXyjDHkeqoj6iVAn4DdP/NQhuHxsAr6HroAswB52QUcySTgeGQGg3J8lPY55h7Q9705XQdpEgwaHXVhtHZQX6Whew+X+mfldsn5W3fEYM9fVjfm/pXShd1g38UrdvuIGZycnJy8kW/CDQ5IMRlUUgAAAABJRU5ErkJggg==","blaze":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAJ1BMVEUAAAD//////4T/+Ef/1Sj8shf8lgDReACrdQGLNAFsMQBfAgExDgs044iSAAAAAXRSTlMAQObYZgAAAPdJREFUeNrdzzFuAjEQheH3vNR4xtCkibyQA4CSCyAlfZocIjdKm4sFxAHwGKVmQo21Ts9X//IbE1evBfpBjG9ozXDlJZkKTkAr4IpShNVkMjiJ7wuUkwEJhcAmAzFGNcTJoFisJZph6heJiG7xDLT4XKRC4KiubvSf24kY6hiLnVPMVfE+NhPbo2Y3YVBfPA2/Q3PkchGGx++H4yZvd3GdNrjBr32FeDzPUdN88Mvn7QRHHiSX9SkMwnxYNTdkq7sDlMsLkZHRBEwBGaBpKnQ6GqsVegLIfrDOfOkGI0W7gQTN6JhJQlcYCOm+oJyjHyD+F7jg7v0B5TtIgi1mkx4AAAAASUVORK5CYII=","camel":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAATlBMVEUAAAD8w2n1ul3prUrbnz3xi1ywmYjLkzfrdTmoilu4gieqg0Scf1DaZiyMcEV/b2OnTiFtX0h3XTNfUj5VSENfSCN/ORlJPzBRIQwvKBwTHWK4AAAAAXRSTlMAQObYZgAACApJREFUeNrtmItiqzYMho2kE7VeKbRJGX3/F110sQ0xlNC0y85Z/6aJLwJ92EYWhBC6U4iil5fjy0uYCppGPmEiRIyRtSBFkVVYC66maQCbs8JH+iuYDgngeDxuAwAwovQhInA0GpAazwAauBbgcAgGcBTNAUBOBLPrB0A+awrAaADMMwDYAkjmXQb4+wIAFQDDkgAQHKCWHnYNgGsdABpYBXgCYI58K0BUMRMicTRlAAQAXAbAx8dHfGLmpxUAaK4D4OwfkLkCwBpAqZ6ezgBPT1Iu/fsXoQOwAAAgOYH6yLeZFKQOJut8fX17ent9XQcAhD0ARAhYAAQH3t7ftfb+/gZClwHwTZgeXx8RpfxpgOcCQITqQ1YBJ4DJCCQAdIDz9aukgPjZNWBBJ68AI5DpiIEIVFEEKmEUFAyAKCswf8PyGsAtgBeLu+5fgG0VEHEQbwXA2QhFFNbUFBkANHMB6HVlgGMGkHa3YDIAZUKKMZIUzL+OwToAFE+N/+UmrQBOASTurgGgE5Ao+Qe7F8KaAJNrkTlzlLME3ucwE4QMgJCngIg5gBO4Y/sxrQMgpqtEQkLU7wwiVflUQ8h2E6iIWKRxAI1A/8mmAUQY1qReHbdIWmDWWgGwDjupSVQFVIfyXQq4FBdXMok9Nub+LPk2AA4I6ZILCC7dBSuZxB4b88zEImIDELcZIJWJkJAqgKVMYo+N+0ciGwsFmM5ALhLLnwJsbeQ7bAyAAIGYMgAnAiz+mVj11QDqH4EsCjrAljYziWJj3RyLagAktI8RMIUtbWQSRZHZt9lVAGZxTc+EhEZA2wBLmQQvAcy7DbkGiM9Hfubjc0S3C5uqMwmRpjIi9Hs7+AAROYAQ14P0fDw+H+XrYiAbFTBYQc/pIqLLTEIVfBNSC+JQ+tVadX2sUvcKAAbARUQXmYRfMjg0s1bNf14FeuD1sUq2J2iQUH8b4qnoMpMg8RIaE5OIA3m3E7AYXR+rfGdH39fTNfjv5UaOZxUAJhuB1A0GIEbboaIApG1U3bh/MoIagAjnI7AEQLQHAETEBCIFiHJmKyxlEgVANJkCQAMQo+tjlR+ZvHjcIbddzCTyIiRi4ckGnnCL0YeximcAlkawpRWN+08El5mENTqAj1SIeiw5tk3iZqwqAN7MYuMAZQSWMwmPAzGyAzAno+VoWcWq2RSgYzFj0/gApDNVmYSYCTSILZtN7k0cXAPMY5V8pgBGpABGkgGqTIItnRWB+YuBrBOdwGxmmscq8zGZAo4mRmjm/mOVSVhCb4rmTwDIbdhBLwDqWGWMDhCTHIBUalllEjOAyOs2M1WhQk1qgPouWM4kygjYFPDEhsxmH8D6CCxmEtMRiGs2M63HqnoNlEUgzcuZBJp0KtdsZlqPVfVd4P6dYDmTQJPBrtjMNI9VVSByaPYRyABmVCsDmMK2qlhVRULzawCRZkbogvwE0yBKgeQ3Nc9VAUxiVQ3gCbcGy2ozcgDKTzBi5G8TGqloq1mU73ChKlaJlwwAYHcOAfgUuOYAVN4IEBIgkdZUVACkWAOUWFUBgG2HbJsh1GtAz5sB0F9pIBFpbQ7gPVc/GdUJSfJfRiCfFwHBLpKJDZkQtZUEUcTWVwOsxyqwlIwtJQOOsQxAAdA29a5dFEk5jcHaDICjnfv6JyN7s4SMoIk5c0kIHIAFwNeQHipOSBxZFcVWARij7bY1wHqsUv+AhKAEpH3qRWTH6hVb3GPx7GKeNiMjl8fXfU9GnhVL0c5WQvEXyV+q6o8WSoMWbQq0XDq1Vo5LQv/dCeDnqAWz54LKJru/GcCvL6uUPVsldD+1XTm4AEDYI7DrnF0hpjKQrzzKLTgbIRsbx4MI+wHyO8lyJSAVL4p/JQD3KJ354ss7TDsuWh/uBGgAmTC/1wWgNOeAFE2EkNYEJTutMEKzC2BcADACBPRNldK6xwkApnuCiqH5NwABjwSwBTDUAHIK9sQIPLpaK6ImSfKFmJ9Bix0xa6t2ap8W9gHYhHuMRf2j6GsCiSPbh9DnPLqVZyZgrQAOJwUK6+pXXrJH4pxykzqBRgGSCHWWtS9bMkWwPduWMpMVkrP24eGh7YfhQwDf6/NG6/Eb9cxS1T9m5UTpy3Zi6f49qfWJrC67d79tGyrZLehZrCgngQAYI6f9V+v5CTbb6wSopO5coVb7IAr/ltqhFw1t+D7p/I6iUGsYx2GQr3A/Cdmt8on73DgO/RDuqr7t/1yAdq3WnSqAr/dSolldO5xuXgPbXsqOWtcOh677srtgWK2N7sTVjaXYnU5fEwfavu+G3gdRCl3ft63GnrYagTtEwjVqL/SC+uvXL8Gt274PSgfMh6w19Uttfy7AMPbmYRyG3jQstX3n9jOI9Ne11BZ+9KMf/eh30tj37XkLa/t+vBdAa7oXwJABhh+A/yVAOw69J3L9MPbjXGFRnrkmm9t0dpnTmHFsLxKNsKgzrxCb5a0AYXKGuzzq3x+gHwpL/wPwA/AD8F+OA22/0fW7ArTTveCjzait6KquT6mf7oYfbUb9sLGMvjsfuD/AuNH13QDDuNF1f4D7Pxd0J1F3pycjf4vbHQ4b8aKqjEPvMzDus9zWNoCfd7C3bTst9wMMVWWv5e37Xl3ZtvxjAA790FWn3WN5O8DYySry17ujlK0STKk+mqUbjl/22qAbxlM57eTNbnKQ62JZUL3/9kDUnfur8LnD8vZANI5V/L7J0r12G4XqtFXFtd/Sx32j8N0Ap9N24R/eOq3aGiGdPwAAAABJRU5ErkJggg==","cat":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAATlBMVEXv9O3r8Oj72bPW1sz71Wf2ymD1yF7ywFnxv1jvt1Pqq0uvdh57bWJjSy9KMBc6Kh0RDxgAAADq6urOzs6vr7C+c3NanRJWU18kJDEcGCdfq47cAAAAEnRSTlMAAAAAAAAAAAAAAAAAAAAAAACVcz0/AAABUUlEQVR42t3T3VrCMAyA4Yi1SmtlSxSS+79Rkz6R0dEywTO/0rPyPst+IFhiMSJyAW+amJBFA08EEWBeBQtQ/1BKuRuY5yAusACo4ABSBUpFxbsCPkJKDgiLgAktANYYOFhyDlxQgFCFbUA6VaGg9lsAj3LExmBCi1i8MdDNBWJ5GBDmFmBhFuE7ANQWgInVY+q8B8wh58w8gy2rBxASIRJ2gVwBOOf3oAFQ6wL1kP0QeQU0AhRdIb5eAe+15V1vAWqB/X4E2PgrADtA3O/XgJ3WTSDeCJi8zcc4eAo+QroBsC7hC4AMOAspxGQNAUZdTDwAtkdAQrTdALQAMYX4FkIYA1VwoNZ+CynqCLeuIOSkAYyAqRZjFyDNAe8FytIOLuoCNv3hkLPtkP3k8xNc1RthZ6YiPwAMmmoAHUC028DGCKevkwg8DnxafwDmO/uHwDebkIAap1EwrQAAAABJRU5ErkJggg==","chicken":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAALVBMVEUAAAD////i4uL85XDT09PhzGLGxsbgu2nTrlrQqT/Bk0OWcjRjVkH/AAAAAADtfCsnAAAAAXRSTlMAQObYZgAAAO9JREFUeNrtzMFJxFAQxvFZrGAewaMwwxQg2IA7fMzZElQecxZswHZc7CAd2MM72IlJVoXEbATP+7998OMj2kmHW6LXQ9/T0AUt25UuB/D+dgQ317+AXLZ7OgxN4vmJ5vGxforGXhbgSj9ElFqjrxYXomN+GriqmqG1H3E3B7DmQN0A0Wpk0laqKlw2gKv9AdycbRNE1dgA1SOy0hTWQCIrgqaUlnGBqkLY4aeAq0FYfT/OFRBQVGERWQddAKh7ZuFVUCwqorow8166jgVzoBaZWV2FRZS5iM2BYwKwBzEfjJSYg/zOIx7hDk86948+AcUmS5dD8ZFCAAAAAElFTkSuQmCC","cod":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAJFBMVEX///8AAADr2sPWxa3KtJXCqIW2lmusiVmScVqEZVEiHyYAAAB2QJV6AAAAAnRSTlMAAHaTzTgAAACbSURBVHja7coxCsJAEIXh5w18RSRiZQT7sAS8Rgyz2kbYIN5CiDBbx8CewHM6QS3sLf1hivl4yMc626+ZCgKQzENVF6eSsaCVkRCRfCiZhFYwcM4t+13SqFdOwS6/Vw+5HA3qFyz7beOqriX9ezFsKmlcySn4lFKMMQiJGYWwR9VQyTnGmggh3M7eeyGBQ0u4TwZkR/C7P/weVk/OOkCzBdD8ogAAAABJRU5ErkJggg==","creeper":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAK2klEQVR42tWZ61NU5/3And+L3zTNdDpT08Q0NiamOtFG8cJlQa4uy22vsCzLLrssgtw0KooIMcaqFFFRXOSiQjA11lwIVRF1QRBW7gIuy9H1pLgpM9SZ/hmf7j4zzXT6Jn1jkTPzzNlzec6e7+f53s+yn9piOzdzwltJp3SdNrmZW1IHKc5E+ufvUDJhJndYR4/UTa5Pw8ePrWQ1mrjp/5qhhT76JRfLlvoWcXYzceei+EMAws7v06n070R9LpXxF0NktKSjuR1L7/wtSr3ZHBgsYNDfi8Gp5Za3gw7/1aUPIHkwjLSxKAytGg5KBZT1FOD3+/nkWTH75uwMzQ0w9sJNXk86X/nbyT5lpuqvhWSPJnFL/mrpAyh6bMI+osPUmEnetA7bPS0j824OeXdS6DbR4+ui23MDSZKYm5sT+3JvPoYuJU2e00sfQHrfdpTd4bh9A0LVi3stQsiqsV3sdtnF7wOTeZQ/ykeWZbzyY/IeGnDUOrgndy59AHG1CmxuHa1yPabmDF68eEHB5wVitXd2Z9Ev9XJkdhelXTYBQ1+nE5B2XilgcL536QPoePInrnmvsOz6MrT3NUzNj2NxWshx5uBodmB2ZmHo2c7M/BTGJgPWhmwRKfZM5nBwomDpAzD0a9gxYhQAXr/6Os8XvhcAhuUB0j/X4BjWUThnxNRjRD0Ry26fhYzzBg75Cyh/UPjqA1DPxKC/r6Td24RjVI+lJ42cOgtFY1nYh/Rcf/wFy7/9JZruBNrH24Wa1/gP8tn0XrTONEpnzOwbzaPl6VkB6Xe33iWpbjslwxby+4w898/hGDSwtzdPRI978i0+9lnZNW1FU5+2+ICyHqSgP6PjrHSUlBYV2t446qQTJN2PEgnQusa1ATAWElzh7H1UiKYhhTK/ncJ+k4Cx566D5AYl9z33gwDEuC13cGikhPl/PMfRZse90EvpkF1cW92+msrJQgrdWVzw1LL4Kt6ow+fz0em/ykXpnMj24k/GEn8+AMBTTvJoOKsy30KRvZlG+SzmS1m8q1sRPBYrWnilUHj/q1NX2dS1id989zY51VbMrZlIPi+H/1rMoYDArmnXj4CyhtScnq1h73j+4gOonCrih4UfMHuTyXmqpsN/DZd8gxb5LK2yE81UjBA4cCvFMyaSb0eK329FvUGVpzioDQJE/qwRi5TG9/5nYv7oC7fQkE/9JVQMltAr32PFzTf4xdev0/aojdimGJTuMP6vbdnPFhWAozsDkcpOWcXqKFyh2CU16uloqqUjnJZOUOgy0yTXs1L/Br/VvMmw5CblrIpcr4bM7kQhaPXf9lPeJ7RBCH3YU0qLVMdl2UnR7WwkeZY94zmUDxaKOsLQoqPoSebia0DecDoXZScJDbECwPKOX5E3qSX+dhjX59r4s9RK+kWdUPnA7WKsMq2gWDYxKPWxe9gmkh/9ZQ2Vo6UiTzgwvYMDDwuCgor0WFevERlj0YgZe4udPc9zMM4oGZOHFh9AbJOCK1Ije6d2EXVRQeaFDOJubqXaW0mDp0ZUdcVXi4Tg/z4c/QbSL2nRtKcKDbjmacXozMDeamP/QD4LCwtMShMMzw1gv2wjsS6Bsgc7xPlPPKWYXSkBGDYWXwMmdUEBRIJz1ddMu9yMsS+RG95vSGlMEit94m9lwuYbpT8Gzwsz2FYfQcmMGePkdjq912iW64MOVAh9yF3K7LwHq9PKvhk7H89YSW8w0Om/hnu+lz0PczFeNlA1Xfzq5QkZl/W0+xqEEzwmVfG+6h10Bi3bdfEoDKH8ZPXYmIA07xUFkk/2sacvlztyJ9f9X9Ar3eVLbyvai6lBkxCmUDCQyRVvCxVPCnCM6BYfSDAiqM7Fc9RTToOnmhXhb/KB4X00VdtZqfk1PzU/GDojzmyiyXdK+ABbgw31hWTOeY6z85kRw8x2kTdc9jYQcS6MzR3riHVFcdxXRlpf7OIDyD2Zy+GZErJGE0U4eztlOaEV61hr+oBVmrf5qfnbasJIm1BgH1YzK3kplIzYn6gxNOsolI0YHii5LrdRIBkJda1HRJ7eUHIGNDxaGFl8ADMLjyj63sTO/mBr6yve177DyqS3eCN0Oe9pVvxXGmCYiiPTpcITeNa+GRtlQ/kk1Megn44ht19H91xHAHAqb327nJQBFbWzxznmKRcR438ucLCo2ekxYvWoaXhaJ1bkva53yK4145YG+HjQjqYrhpOeCmESyV0Rwjeo7ilI7FaIVpnyYSiq4fDgPSJ9zn6YSlqtikfSGFGHN+NwGfjUWymumbtTRNTR9SuxdxuELyiczRDzj3krhSPdULWWNRnvCT/00gEE/1T7OJbtfwnn/PRJRNX3zWtY2yzMyjNknTeyz72DW/6vWd3+Hkc8VWgbU4WPiOvcjOF4CiFHP+DDPatIP5HGGtNqdrgzyGjS81R+QpgplKQj0XQG5oef28oV2RmYnyaSqdIHVlE3FDxLF6F395kS1ls/JGT/GrRNqQLuSwegcaZSMGIUL7Kx6SNCLm3gnq+LHZKBfRO5jM8PiZfXt2tYdWOlKIxCT29AUb+VyMBQnNmMyqUQqx92KoSPLOuprDuIZTKZ5PEoATTqQhgfFa0XYfCy9zza5lRMLUZszTnoz2pxPDBQefIgIZaPSL+kF5mpfUaDeiLm5QMom3Dw2Q+7eDo/i31Wzac/lOJocbB/No+Do0V4pRmsj1Ip8ZsIrRMtcsJPhwiBoxtCUT0MReOJFoVT5piSbF8qCls4m459yLbbm1D3JbHy9pusav0NIbYNNEunSGxMEN2irM+NZE4mElUTgq3GROa0EtOTJIQZ3n0b2+D/ICzW/r2C8gGRw1Mynv2vUPfjfmruEbl9OvIHM0W1eFE+i84TTfL9SCIDKq19vA3lnQihrmXj+aJrvKM+jy2V61HsD/mxAoy5t4XMaj364ymEVq8npGINH5jfZeOxNWwIqHxNYH6mW0VKb7S4/2df/D9bKta/fACHRoqxNdkEgP8QXuwDQxRE6XeVYvWD3wlSxxSo7oRR7SkXDdOw2hDhwAwXdFhdapHsZLgTOSkd5bWm1/j5n36OqnubmK9siEM7GUuyK1oci/mnN4lnJThjSOmKxdFsI6T2Q2Euy171LbIhTAgfcIoilT4tHSHmeAQR9VuFUOrxSKJrtlBRVyaupbQkkv/AyA3pujCbmEZFsM8gntEr3+XIuU+IyozC2mrmxvy3rz6AkKO/I++4GdWJSNLOxPJZ9RFR5YkGi+xENxVN0QML+2p2EXl0I6b7SSKcJl5IQDsdzw6fnrGFIYzjCcIciqrz6Jr/jpvSN8Fy/NUHYO7WCJtd17saU18SJdUFRBzfgPlJkugFnJKOkuPS0OG9TuSRjYSUrWVPTQlrzKtRnNhA6IH1VJ05yMZAKN1YsVZohmNCg8GTENSqVx/Altu/FwA2XQph273NQq1//+lq1u17H6fvlHBusefFt0VsPTp0dRoRYYyTcaJeUN0JF98RExpjUN6NEB2prEklCbe2cmwpAPjll78QAPJHLWxoWidyg8SuSMrO7KLs5G76JBc5ly3onGrS7kYJh2rxpKC8E0Z8QxTGVl0QlACnu6BG2RxP/M2tXJMuBfsRS6CtPhZNm+wU9noyMAKrJjrK33ivEGLdyOHnxRQ8y0DfrAmGUfElKfNuUgBUGFkziZgmVQzIvaIBUx+A853vS5J6FOI40Rn30gH8ExZbYyyH/1DEAAAAAElFTkSuQmCC","dolphin":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEX///+wwc2In7V8gp1ZV3NXVHBIRWP////D0uO/0Nu9y92wxNmwwc2lutCmuc2dssmSo7qKmrGAhqJrcY4ICR+8V/49AAAAB3RSTlMAAAAAAAAAVWTqWAAAAc1JREFUeNrt1GGPokAMxvFRz9sd2+kz5fb7f9ZrmYECnuDmkn3FL0oaSf8RJaT7iB6Pz8/Hg3J3u91+mzRCITtVIJwNS3JcUzMHSlkErtfr3fQAPQxB8uhVYPAA5xHf3fQNSguU6eSLwJ9hHXBpROTXR5S7F4GcLTBd5ioQP9BuwJF4gWU/wAt2tumBpnQRINoEhGUORIHeDggE0gJlWgLKPHUvLkEEqLUCIhZAVQXsaCoAP2q38yMG1Y8vdcOg7utD9VsBFgNf9zfEcO7eCuTMvdG3bb0X+K3AL3sDzGmlFNpVZskB22xxR9sRENkGUAqA4rDWPoqPk+OngIaKWdVnaVAVo2pDBKotGl+KQhurUa1zQAQjMRHICywCE3/vSrq2h0+/8KnDvC5s95m5D6ntR4BZLpfL+BgRv7WEKKY0Y03d3UWALZ5GlLMAkjPFdBQgskCOQKbl4ThQiEoEQHlEiGkRwItA3OsKalsa07cCg+/51hBTBGQvIIJxTWHUJ0Bk/V8AEXsKpD3M8Ux1ywCI8F5AwJD/CAhUtBUkFYeNMvlXQABVf3kCHgBq1YVagQgcid2N6tIxEWGXZ+ykScdie4En6XQ6nU6n00/7C3s4RNq7Xn9vAAAAAElFTkSuQmCC","ender_dragon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAAAdVBMVEUAAADgefqKioqFhYV9fX17e3t2dnZ0dHRwcHBpaWliYmJdXV3MAPpXV1dNTU1LS0tHR0eWALwjIyMiIiIhISEgICAcHBwbGxsaGhoYGBgXFxcWFhYREREQEBAPDw8ODg4NDQ0MDAwLCwsKCgoJCQkICAgDAwM0IucAAAAAAXRSTlMAQObYZgAAEQRJREFUeNrtXYt22ygTdm13JSVxnKa/XQsS+1/U7fs/4goj9AkNFyFF9lqHOWcOFwFWycx8DAzqStHb2/5N5Rjn3Mfh9uH+GAc0rG+YRvZ92+/3zQCMH49HyadjnWfgaz2zt1dt6j4MZcknlT82KVP9rykI46g+jKlx9JhH/WzQBOBdkdYcmoDX11eVK0v5spp52S+72/v6oV71USmIjiPbkL4+ouOU5fC++7e3RqQ5/3U6nTQz3i+T9u0zVz/an3OZmkTac0b7DiDefYfhfZ+f3/bNAJhzLXxG2dPe7Mdc9eAViI7DWL8/GzQB5B0G9f3+/e0VAxiC2Ct72qMt6ddpU5aSf/9Tp9YXhxKRvkMnAL+FvFf493me/yXTmk3B47xftrRHW+7oB3aKIhX4vnINRQH8FvKevvvn3fPzfves0rc96wsi65Y5c7fnui0sP2Xmtt4hJRqKAuTd/X1fX9+enl53T69Pu9c6/xpCAdKetoUAU4YozoUCx0gUkIK8e3veve32V6EOoQBpT9oSAQ5bcqAAVSgw6RsYh3PaN0yc+VFgqNV1oYP/d8F8LAqopRQQB78bohgUAPHSKrTIe/rTcaajgEIZyquhRFAgYMUNy08t8GBLjvZQqDCCjPRHfMT8gmhZw6OtzQIPteSkPeMsqq8UeL3+N/0T7WMcdbvAWroVvkZ4ugLuWMNTxHD5AmEUgBKRvnGW/0RQaRCahASItrcKrdMX8K7hz5+y3fmslAh5WR/qSy1/D5WQJ1ZzGjtQgEWigHz++SnbfZ6hRDIv67197ejDnPm+1WyEBRZTCxKHEnTL2sqr8iAUQL13Aj4+ZJuPMwRY5mV9AEF8/git91hfziPKsPbUgY32BajAc24ohacv8UGQD/sFjBGr7y8zj68AjvcFjn2B56yvFGEE4SyQp+OUPUsbLJe+8iRfAAIPhYJSDEOQkuYpQlELCuZmmYXLHGV3u/Ca3BB4KNsgFHCgD3chFDU+YBbaEXK297YLr+cNgdfLGCgF42wYCtjzzMj7JqAcXSY+RBwKGAIPxPk4y/TjQ+aHoIADlcoACritN6fP3eVwvW+JRVFgOFutvQuhIlCAWnn6PJSnKKLGNPf9+8se9RwCDAe3aav3/Hvv7LT8zIVEAatOygQVSF/aDsx99UABn3JBsPFbkXnfTgyPKMPaU0sbjQ4WX4AHlAt9I/O+nRgWUYa1j/AFOEMf3jkEO/z8+fPw+fmzTj/PMv9TtjMPyGQf9Ee9f/1PEcG3E1OS8jH0fJgvgDZ2Pry/vx8+Pt7r9OMs8+94FmSMH3wfigJEwMaiAicWeIgv8CUnwp73CfsC/jV8EBWmngswhrbmya4qrwaQC4kGnRGUx5CVD6BCOe1cwIoy4NizAIJEwR0hzkO+QBgVgALxvgDHb3KO8azto30BO1qFUCBq7U9QINYX4F1rzsjvk/ZhXyCICBEoAKvqKyNfxvsC2FWSqf8cItoXsL93wBfg5FzAW55yOgwU0P1Jv0koQPNhX4BY+cCOUSQKcCsKYIlDfn8CCnDkZ/cFqNUdfC5Q6rYqlTwWBfA+9N2G7gixoC/gbR+upyig26oU449BgbBvQscM7viwAAqwqBghigIYkyEfiwK+9T9Fq8Bp8CTfgCJCwKqT8caiAP1dZz7mNDiqDOaDT4cZ6TcuLkhxB0lUvlUAKJr/XGC8L0DahX2BMApFRIdGMEEB/9o/phyut59GXwUUB3NN3oYa1v6aL79fvtX08vuCfmELGtr3D5V9J7OE+dTTaEv/E9fvggmIiAnCDg22HM2yFmpSPsWcDmPMSez1Ay6/f9Qz8PLj9wXt4mJq4tlhgX2Rosdmza9OpOXuT9O33g1SYzZl/RtqPFX2IsDl95+Xmv5ABeYnxuN8AXraXPNB5g8HxsOn097fryfgz48ff/5ABeanoC8QRBFZdzgef177hHwRf4ySnABJUIH5KTJSFKEYunz89vKtrCfgndeZkxGfZEMd724QJuB2KhARKQp0gDLU7b69vHxjdVmmsmwokM83wO8DBRTdUgVid4QCvkew7PMDMAE3VIHoc4H6Gay7HVXa/KBIVTjTnQkorZeCZqDoSFEWPC0m7QMogDU+IypALgVNp6mRojTmqM9xkarGCbNHBfb7t/08KFCOOh3WbenSCu08t9ZAxpbqpaXSci9iBhXwRIp6bpOZVp6zv1++XenlbziwQAke9iVaZcIEoJ1xNXQGIrsuodghRnyD/7cTwGzPwyjQKgEmgFmvhs5BFmsfE95wFdx2AkrynJQH+jI3RYH4GCFttS0ogOcnLtsj5UphRvLMKECtvbt+KlPnupeXKcrN786IAlxbc2LZ4QCjfvLveeKDfM9mQ4FYYfwK1OEaLbhCCSgVFFKVgSi7nQMFIFzL5vwvoIBzLQ22L2/6yxXkewrQllEPNhQETBSIXN6x+wLYByQoIC1/w9/z799l2jKx4kGO3P8fOW58jBEmQCpCixby2X632z0rllc9ZaoYiIAdnTDHWfsZxrX7AtgINU+A9b1oxfv6wr9MFQMRYFXjOLzzM8O4dl8AG6GGsrb3op92kl+fnpA3EIFHCGZ05Od4Hnz3mGMj1NiR0uv/mq9Cv9upVNZJJhsakRze+WFjxou/e8yxD0iiQeX6/8r6wr/MNzx5AsL7/5PGDZ8u0wnovkvkXeHx7LLWI1Eg/u5xdxeIRZwqT0WB8K0xNse4nHkmgESDRuzoRHH86XA8D480xQQQFIg/HY7nQIxQNMdHmmICjLV/5I5OPIdjhOZBF88E4Ddxihymuaz1SHSJjzS9tIQ+ZXkrFOCc+erH8/BIU0wA+vDZUSAcEToZXRz1ngnAVyJiUOD+vsD0GCPKYRS4my8wHV3GsedwcwYUwFp+RnRB3FIvL1OUm34zTABQ4Ia+AE6PZblU7ciuFNqGUYHx/6gv4KgfqwSeff15doQmjutEgTn29WGxSaiCbzuzbdf202M0ZYwJwcT4qMNYxju0bQ3hn2Vf/5F4tRQq8jy/Jbtf5F4TkGVZsV5nRbZeb400U7yuy0hlXf1cporrtiiD67p2PFlux1y5KF/dh/Jiu91sY7koxvZzv8j5cp8J2Gw3m2gucvSLYvffObvTBChhjeZsbD+3Ll7uMwNFAQGN4KLYjuvnfhFxPt8PBa4CmteMNM9VCguuhF/mNyhL1v2R5i33FCf3TsDlTihwIw6gQHW5qRLkRVHckakqbPLL+ZYykOcFEVZVhjDX9aYAq7LuhzpDYVR7jKvHqp/pvpuCqsI6u07AzeyAWsJgKRPF6De2P1WFbSEuUgluJQOFtuajUCAvSP+paLDNxVnJwG2EQAuzSuMY/fLR/ekEZGoCbmUJCr1WHyHA8Bmy0f2pESwqqQAt3wAF1JoeKeWu0KKueV6nqp9uo/2DXh2UBfVWFKjU3x88Nwrk92MrCmACuiyyOR1lup8/th1o3CfVgQImVxCWeYhzXGr3neaq57gY4z3kwyV6FUXqaU1RwGRR5Le4bIVQ57HtQKwTJh0Ik6AoQBVgK2aERZxKt1ue4XYq9YZ6tFu07jAJLwqAi21ezWsMGfb/h/y/A1y3DyoV2loVxo8CUIBNLmaeAOz/D/lqNGNBoeb4PwY8n2DxokCrDFmRiZn9A4Ro+4XVvEXmRQFczm8mIBYFKq0AVaEUYzUjDd3v56fP0+nMuEoDKMBlO8QnxaKAAALM5yTHfyHi83j6lNZdpj4UkG0YMz7CG4kCmIB1pvJzWf/eF+RUeiy59W7wx/H0IZ+pNLy0AkeiQNVRgKK65me2/jTlnLY/n36dT1ynY/+HmQEo0KY56mb74gSzp5zR9ufj8fPEdEqe98Mh8OFeogwBFKhaBUDdbF+c6N8Ndlr5o/yHf5yOOqWC3wusM1AAS6IwClTnJs23SgHmUQJ8PxQRpShTK3+6Wn/5TKVkPBKSwTinF2+4BwVyZQTFWaVy61DnZxABXHbvpviiHJkAZf2POiXjkfBqxjgNtmMeFMhEdwKqrFaAJi95FhSAcJKUTICy/keVuifACPMgwXoe9NAWX7QK0HOQ57hrDOG0pNzgX8r6OwPkIPhUGRBs50WBQnSWwUIqgMzPJQP4fqghpCgz8zulR2X9G8FGvSqbH/6iyqDrvCjQnYAq0+UOz+cDQEibMvmwbvn+fn5//zi805giy9VNxCupZ1AwDwps8wp+gCi2hWjy4Bm+OGFYf5SpgB8On4fD+X+H2WKLtptcSPTXCmDdIfpSFIDAQrBRXt2atutMQAGyNSxAl79wAmCpCRrAgb0hba7LnkohQNEoxIXwl/oCuE9A0eD2E4BlDxTAwnPtBDFmpqtb03otJ4AoAOUZfAFYf6SrGxJQwKUAMxyaEetPfIFbEVBAI0C+zYXKO/gLUQDWH+X7oYBWAHJGMIMlcPkAGh3uggJOBai+XhFg9a07QvdCgSrPN9oxBtvl4ct8AaAByndCAYUAPQWoxHkGRMA9gM7llxLpXVDAqgAV8hae6X7CfVBAK0AXAUSFvJUXcFcAKFBk6x4CIO/iL70rsJYp4v91GQFx9rsCTRtLH5nirkAIBVRMTgHhh0Ps5i++K1D062Q8EOoQF4Tn6Icx0Eazjg51nhGokGMshwSEf7YVwT3ignBoxlkPBZQCZLAAs04ABPm2XGK5VfZRYFszwiQG8mj9b4QbAq7TDRXg4vq8fdYKOSJF0V6PSxRL/fu4Wm5Rf2Obb4AA4NmMoD/mX+fRRrMZAm0wqeu1y+VvKuFXitBDASBADE9BgHswCZ6bSMXqYWiWJdclXz0AwQHXwo/8NMf7XGWrhyGOHaiym5/y97+IB1IB1u44cY78pO3Xy1k8hgpgG7YRfuQnbL+qSNLVw1DZuXyP/PjtVxVH9Ego0J4/MI78r5EqoDdLHh4Fjmyk8Csu1quHoc7/VgNFsKFAXvgPwbq+QL5dPQx1LT/jyNvcdGHf+dN14HyzegwCCjQHcMjTlhkOxgIssgdSgXYJBEVwBM5Vg53iqnggFYAjjAs69kM4kefYCveyKB5DBXAY16IA8rSlvCk2cAIeDQUQko38ilJVbYYpQfVQKMAh/MhbD+EuQ5VAPBQKsDYWyVgOWScASrAsFEDgnPejXLgsQ4X+cVEAjjAzlkP2pa5UAuvf/IFRABGprJt3TEC2tiqBiECBx90R6t4Y84ZKVA/qC4R2hJSji8C5LlcPjgLUKXZMwEXYY4Wqx0OB+A/v6ltjuDQDFgQFFkjN39oaMSoeDgUm7PhcQxKEdwLWqyVS5+6wvjgDrggKLI4MK69DJlBHUGBxZH5CZZ1lFVUCoMACqbfU2RZm4Fy1eBQw/975dtPzC8TSUYDs+vRukImFo0DfAaaxQ9WyUYB8Skd9+lB0jd+iUcCy9ZnJIDohMAGLRgG6CySaL74JKMGCUcD2PSlRIIiuKwP5ElHAuv9fNZ8nr4SxHMq2C1QB6xmAqAoVrVlV3fpiszwVcG2BV81HaSvRrdssRgXCEyD0h3AF6rL18lTAfRBWVSqcGbtEoi6vFkbecyDRfM1ZwE9YhAqEJwBwqC6piKa8PBSA1ZepfUmEXaJqcShgGD0hnEuiTS6qhaEAJiAwCXpJVIgFooB9CVSZdZW+pFJVS0MBt/UX5pKouZAiFoYCDutP7w8LfNt/USjgjweqKlGRJdECUMCvANQoYkmk0GABKhAxAdRBXgIKhBXA6yCvFkDYCYxhoRzkVaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQo0X+M/gVoPrkgKWtroAAAAABJRU5ErkJggg==","enderman":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAABGdBTUEAALGPC/xhBQAAAY5JREFUaN7lWNESgzAI8yv8/z/tXjZPHSShYitb73rXedo1AQJ0WchY17WhudQZ7TS18Qb5AXtY/yUBO8tXIaCRqRNwXlcgwDJgmAALfBUP8AjYEdHnAZUIAGdvPy+CnobJIVw9DVIPEABawuEyyvYx1sMIMP8fAbUO7ukBImZmCCEP2AhglnRip8vio7MIxYEsaVkdeYNjYfbN/BBA1twP9AxpB0qlMwj48gBP5Ji1rXc8nfBImk6A5+KqShNwdTwgKy0xYRzdS4yoY651W8EDRwGVJEDVITGtjiEAaEBq3o4SwGqRVAKsdVYIsAzDCACV6VwCFMBCpqLvgudzQ6CnjL5afmeX4pdE0LIQuYCBzZbQfT4rC6COUQGn9B3MQ28pSIxDSDdNrKdQSZJ7lDurMeZm6iEjKVENh8cQgBowBFK5gEHhsO3xFA/oKXp6vg8RoHaD2QRkiaDnAYcZAcB+E6GTRVAhQCVJyVImKOUiBLW3KL4jzU2POHp64RIQ/ADO6D6Ry1gl9tlN1Xm+AK8s2jHadDijAAAAAElFTkSuQmCC","endermite":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAADR0lEQVRo3u2Y61ITQRCF5wGsEhESCrkloiEhITctQG4xiQQRuRuIKPrH93+Etr8OHQOloPyQbJKu6prNzu5mz+nuMz0bwpWtL+7LVqkl69lzWU5tS3IiJ9NjL+TZ0+cyF89I6LJ66di8+qoZ5mLpkIhnuqfD6KO4+e/stvse1OqFc9EXk1rpSCAD4G1Pysx46hoBq4Vv5mvZZpifzBuYvyXgtvseDHi9qF44k7N4yXwzeyicf1dsaTY0ZDW9K5WlExvVw1buOOg1YS2zF/TeUM03yaDwdun0Gvju47vuezDTP5dq/pMBfZP+YOPyy4bsvv5u55mnJJhTANKzQO5rRBaQ5fmqFBKbUkxWZGXhvUW/VmgaaH5TFmTGXFfd3kzz21K/501T3qKoGWCCSCbUVBNUtKwcOKeiJRNPZiU+MmOORiS6BDKSBADcvHjeIcEBVwqnspE9MgIgBLCTowkjITYyLVNj8zIbW2D+j7Xf80bd4lrvDv6fMyCSte/WKH0xEfMRcXPA1Hwlf3JnBiCKCOLG4kHnOZExIs8L+0gpAN6WR40+vQHgOefNEeBjj6esR/AMWEvvGQn+nChlgC53TfGRqOOoP/2BAlMCdkTB6crwWbZLF7Y6+HWsIlzLvGZA5zlRygB7YR8BbYAU+Eb2wIBxjHMe8FzD0klvwDzHdo0e+3MiQwAR5YV99PpfvVr7iaodZz7K/soP6w+cAL8G4LaXUIL8OZEigKj62O78diy9yQCAA5RmiPTmOgjgHPNEnBaZ+5wAnhMlAtidtZc7dYRONynmCjIoAUEjHzTyJpAInp3XJRPRY2QViKwRsc3cUafOKQGEDWdOI29LG0RBAOA18qb27AsgJNIEmKJfEcCIOwnUsjY7oa+NKLt6m+Jn2moPAZBDc0Oa9zMBmtotaZS/At7qmpRWAsgOAx+pxuY+GWDKXbwwEm7u7yHCxY7a7zv7BbxljupbVuimiBECEDxteoyIvrOd8qUBZROk67+pPEABTjZo+9sBjx70tfnX3tRUOSQnsmHgbCV/aV9t+Vw9M54aPAL4Xk8GaDfYG5+s/1MjZILHqE2Q7ev53Ra/Zuj7PgDxAyhC6B80BqoPGNrQhja0Qbaf/P4PM3XaxMkAAAAASUVORK5CYII=","fox":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAgBAMAAACm+uYvAAAAJ1BMVEWAgIAAAAD59PTn2dPVtp/nj0G0j4PifCHMaSCwUSKOPyRWPzQGBA4kh8LGAAAAAnRSTlMAAHaTzTgAAAGUSURBVHjahdAxb9NAFAfw8wRIDLkFEsSCG4kMHVAzwAiV5W9gXUdA1omugPWOEdpwzxthaP2qLhnrD9ClHaKuvQ/Vv2OnrZuhf1myrJ/+vvdO6YcZ8p/4jdZqoKLB87AchKCQqA9X2+F1HJa3sNuCUv/3ZfRV/q3hMP4E0A8DSABN46knV1prUYm4FJGK/d4KyJgyTfP74FZQZOZvkiSfG2AA86xYwyHg4x0U9AgUtAlDZiYibvN7Mknyb5PJeKxGVQelIPM4RjVG1Ahl7CF41XU9j8e3IG77bfb9yssJYKHXAWCf5kctoIwnArySra3pdLqzI3UD7RwK0f0cTD/cAS7rwL5TK0D5HjzJfmK7TYhedoBPDCsiHfgf4b0LQWvnOE9S9n5WuAaSXazVgO/AFRn1piIuARUTGQNQEtTg2ekyAghAmAz1wXXgjSGAVFwPWU4WOPyXTeyx95R1cAaQhSZyNrWeiIoWShkB5gDObcpEM9qEfAXG9MC50ua2whlmD3ARzu2Ly+vzL5pZjuy+MPvC3QC9wfXEFSoo+QAAAABJRU5ErkJggg==","frog":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAQlBMVEUAAAD9trb/ioq+rWqxnl+mkE9/oFjlXl5zlktjkC6NdEVWgCLMPj5NgDBGaypJax46Whk3VBkxRhRGKiktJi0uHRCwcSzMAAAAAXRSTlMAQObYZgAAAadJREFUeNrFleFShDAMhBEoZ1x1Qz3f/1VtQm9qgVoZf7h0pqWXr2k2M8eQJMBwSSJSvStpow0sUmdgCHMIbEQTIgCo5CMkzNM0zaEBgPf7x0SNUfUBhHmeQwOoiq4zTPOUhk32BF+VomvAlDAPT1jY+LRxXrQlqA638G3lHkKQxFL0i501vxzus2WIyunjfidUYwb8uClU98mr7CyRFGwrh4ecUwABj61Iwlt15zcwSeHjAGgS379fILxTk+I2mt0gCRmyXpNs5qeJZ4BQKQW43ToABITgEgAU4DaOt58Bwp/fAxChlAzj0zj2gOcKGK8Brh6wyBmw6bv9SCMpAybfy408ZPB4UlUpAp/pBAEbBTiqZO7V4Nm1NESU/BFYdsDSBaQCpAvIDpAWUOwnSBDwSSTt2foUICT7SqVPjx3qaeOUsHBTjOoiAdrr0BCEGK5Ilg7wtwwgrEj3ZKXscnM9AFRCBO5JZE0IGc/+xbIpCV53v8eVjQ9K3qdgV1zro8hrtuIKkC3Cr53dPFIqcxG9EjaPTIPb1DGpVmlEaUNHa924dfgHfQFwmyc0LyT5NwAAAABJRU5ErkJggg==","ghast":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAIVBMVEUAAAD////5+fnw8PDl5OTk4uLd2trYzMydmZlzc3NLSkr5ldknAAAAAXRSTlMAQObYZgAAAYdJREFUeNp9ksGN2zAQRdmDO5iBfN95JlWAgeRuAkLOZuRNzgrcQYLdBoJVOoirjCmRYDYy8i//wIc/n+Q4J7gs6YgdJxFRBBNXVQENRE8yZZG187sKkEIGLi/z/HL5D/Blvt3mH+8Ay044ZgBeb3e90QDVCkz94QFgpbGugOmvDPy2vxNYgMPnDFCAloCoLgDXqf9wfJBgKwAfU/+M8S9AGQH9MXzDSskGYJQRgcMEurkmDSCxfSiABtCeegsssuJbQETFTKS6q6r/v/FOl/1wXSrRtQOESDh1F6aeZG12mKBvC6N9Bq6nBtA8xApM5vCJRxpXAAdgEfg6f/80/wS8wggrMCwjbCl33T09Zw+6dqolB5/Yw45p9xRAORMiaB2hQLTRlLSWHNTXBHICwD6Jv0Qg3E3CGTDWLffOJ7B9NFkTRP1ZYbTRkyCaUxiS6TCyaBhNwwgoOQGcMsp+RBRe38CE4axrhxhKAlYqALmEEqIpRA9D+SwTikQpt1n93R5IcTOKi/wBKsTOnkkgxrkAAAAASUVORK5CYII=","goat":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAMFBMVEUAAAD////6+vrw7+zq597b1cLArJCenp6ciHaDg4OFcmF0c3NXV1dNTU1APj40MzImjJ+xAAAAAXRSTlMAQObYZgAAA5JJREFUeNqNk71u7EQUx0eb9YqKZ4jOeFPchjAze4s0rObDQrcy9ngU3QKixDNaueAFaChIFFHQR4IGci2078ADoER5g0g8ANqKHs7YeONsyIqf5HP88fP5j3dt8r+ZAAOokPxVQaDgvc/J9Q8bgsQ24oCnlFehfVWYUMrAuT0CMAZVE8JpCFer8O1HfRtFCKVUFdbeVRVuZ7O+jSfQOGEdqkrHKwm2XQHAhRYFaYzOk76Nn0Kg0GCEBW2O8lnfxk8hMCK0rjJSSrNM+razBtc0vtAppOnhpG9PQlJFmjbYAiTY5bRvO4IL+BS1qWqXJ33bFVzjv7z//f5h88fHfXsREXxOxuwKIbhd4YDSyiDaDpQUAXb4TNAaBdxiQQGQ4+H5U7CZ1kbXeL0rRQqAznZCFDDC1tZWOpbzFCPE0wQKtdHZ5/H277pSUEjnczYIBxSsMVGwUbBRoGNhmrLaZeZdVdf2g4mlECk9eiuXg7Dg/tQZ8+Gytu+rWC4WgtIL9SRIu3KZD5d1cFkshRGpkmqISLLitlmFq6v2arXKYvk5M9qWehBmzrbfN6v21za2WG5xSbW3+fN3nkrgez9Myrgkw9DQ/c3h681WONCCA+wRJlQoyvcJAJwPE3zmry79zIbTlcuHCEbVdpE2tb62iTSZM8ttBJdCkZ4UZG3lRKZHRh+OItgQYebSGj0t7Fzb5RAhmIRBcM464xPvTf20BsqVGtbw5/2P95vN8NoPEamiQP4TCsAAIMUe97oXmo/d7rQCzijITq2QYiSkwAAFilWim9LT6+vrchwRBd7BUKAvBQZM/itIBhyi8CyCoUGV4lwA7okXE1IZ71NKCRFn6fnuBCrRUFpbISSTUnUTKoA363Uv8KKUkluFApOqKBcVMhbUpCykKpVdCCnL4sAQJKF8K9hJXZbleSEW87K059OcRIQ+GYR8mkxre14sjua2TqakF7R+txVwYELK6fz4GDseJwhRNApbEjIlx8tlMhwlREIU9sDYyX4B2Jsd4eGGjPnk79eF7v1N/+oaQnpuvrm5ITPnvD9be8Uov+DATXMLKem5++nujiSZ83W+/oqDMJVm9LP3t1yMJySLrC5z/wUHjjD6aeX5gvQ8/vb4SMjbk18u4mdhBLLQzjmddZ9dTvBTuCekyZOWtHi+MsY4pLWOEGqEJJuHzYaQszyZkbZFpaNt16EhhLuFIhuEoDF78ZP9A0Obf2KBegjhAAAAAElFTkSuQmCC","guardian":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAhFBMVEX///+rjEZQjnQtWUcAAADX1c/Y1cvX1czX1MzX08vW083X08rW08vX0snW0snV0crAuq7Auq3Auaq+ua3dkET/gi+DpZy5k2Syk0/wdyjecipqlYPsZCqFhmBmiYDLZSNdf3XeSSh4dVCmXCxOeWbUQSDKPBxBcVpkW1BgVko5ZVJ5CxKoxgN0AAAABXRSTlMAAAAAAMJrBrEAAAOASURBVHjapZaJcttIDAW5lvfIHtnLYiLDee4kzwsL+///F45I66AkW467akSoIHRhhjOkuq5bLper4fL/wHAhiscBItiMIYSgm+j76GOga1xdXXWD4PNy2epHQ9q1HrAz0+mneCswfeB+K/i8Wi6HsZoEA4vFojtP4E1vO8GmvvWw5QUBEd4TrFabBj53F9LbEfZOcLt8WN2ubi8WTEu7J1g9DPUPt5cLPBM83N3e3g2C6+tu4PqYmaCPxk5w99/9XRsvCaLR9+G0Y8ID3f3916/DuO8azwmMgTA4WuQWp7uvEy8KYFObOQpsR4K7S4kJ7Izod1MYaSvwetoivk2wWAyCGR4PUNmZbawHnOWLBTQeqxgZj3PBWQEHbhPRD2TfrlNuOqCmPQs2I6M/I0hCAleAgtwKNrmeMhIux1lBLwklknpy1l0rbfXinMD0SEDTxDwXLlVt2tubwrrbY02fNZFxlEMoKpB2gsfDHz2G/fev735+/6/NcU6yC0lxVtDbv7z78aff39s6EiRylRFxdgoB//z25x/v/kKa5ygD0T778/tAYMCS5rmKsoTKz9wFYRc4kee3OBU0byJtBZr9SFkViAqsnG8yQGpDz0whWqmi0DynPU4eJmy6xUDLffz06UueP+xnBMkueXPz4UvW9ws+thZEveaBkmV2325ubj59gXqFgPV6r4OhhQ9DD4cCIZ0XPK7Xj/MO8lDgFwWzNcjZDBC6cArddBcOkcyld6Htgx+6GXq+g2z6Z8HivEDPCSyxGchInN3K50A22Iim8ZNAESnFgKTjg5URaEyiAZA4mEK4CtPcCs97rngqEukcW5gJsgzGZTEThBKaYaynEjutQ0FRxs4T5z8kmbGF5nJVumYCtdo28NFDVEjpafZ22lQWsw5Mtmo4fg8IcE6fzjKm8EwALrBPvQckV1S5QrgYMDYHAoHBzjqeQogKRVRIY49ZTjQT2K288NEiQiE1C5AeV6o83wdNXRiYC4KUhFNIZELl0SLKgKn2oflG0saaaMCYsdOZYCQlceo9gJTQrttvB4JdOAVItCcTgl0sYIqRnuKUOBJk2i1pp/fi9BS3a/va4nK6uxqReqHFq7naCix5X3B9kiNB9yToUzJvEVi8SSBDvlXwpjVAAl19h6BX3wNm2ng4/SqB3MCVU5T1OgGokfb0/LVpczpVfuqPyjdt8tQvCjuwWwAAAABJRU5ErkJggg==","horse":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAAAD///+lpaWGhoareS2nbh92dnZxcXGPaR1jY2OKVS6AXCJyVBp2SShRUVFvQh9hOh1FPC9ZMxc2NDdOLBM2MCZTJQ5OIgsrKi1JHwkqJR0/Gwg6GAUhHiEfHBcuEwQpDwMjEQcmDQEiDgMbDQUcCAAZBgAPBwMNBgMQAgAIAAABAQEAAAAaegGbAAAAAXRSTlMAQObYZgAABHpJREFUeNqllouaojgQhTOzuurYitKsNCS7pR1lF2fe//n21CUBvMznN3MISYVQP5VKEN0LKitT6Z6rKovNZlMUm6KsnCtgVlVRpbFduYMw8qIKq0zlDkAgd+WrgNKqDNiIilcBmwXXi6rAPARQKOD1CCqroNVWAd++IYJfBVQ7+IOwq55M+PmF1WKLUlRlWRRlWRUPAbufXNiutihlIRE8m8KiwjLxQqHCWVaLtJgFlr6sxqtfoYstURQvRQBgwcAxgB/GusvY8wvVo8HX9Tog+IASRTfbetp9Dqjr3wL4+nCofYxEU8BisX3anQLgf/CRoOjqEELycCuzcvex6voARKQQKGImaPJWUmPoPpb41xQgIplJ3jvuJQXOQTAAKcCErTdspPtljMT5R+w1/CPbZB03SPfv47cRLl9+IHYR1T++AKEdDO7/Ev2TWqci6G8U7XiJAM6ASASeuKOA5Xw2my/b1I4AHyjaCd5z1BFCg04g7WCwnWoCiNEAsnJZ3LPufgh9ZCbA+8fH+yQRCB1Rj7Wftfv5DKHP25Hpa68FHnzYLmDdAdoW5etXhD4yzZGLVAZgZFAAP2e5tAiW6z//WC/bkalugpDWpnA6Se7uALP523qmUzDT3P10CieIRi/yev325vZwBA2lHZleUiA1ceN42U7fz+fvJ1kPKAN0/RFPOzLFjbimyC0DTud/z+f/zifyQnCm9qE83EicI/lIEQA6nUUAgKAAn0VpfxiY/YiiFhwOPichIAuyMl4BbB/QC1GVART1iAQBENAogOS9NACccaCPYQtBAeFGznSAyBLQNPIDpYBAcQLYrlar7Ttqad+3E0CMY4AiAKABcDwenQn29YrmBgAnTgNcFZEB4RlA36JHABQFxEcR9N3n8fjZ9RNAfpsBgIQShEB3EbA/E6QT4x0gzyFQAlxVvZYLnAG5TACQ8Q2AIhEIub/KgdKhvly6z8/ucuFbWYEoeC/mQWQNACFCaDq4dz28u65Hm3IgN3ueqnxf1c8A0wjgBoB4d5DlIEWARFoEYwQ6CMAAcNPH94zIOZBlgz8RI2ALoc4QW0YMX3sGcLniHHIAwS2IP9zNURGyjBkAP10CnNMcjJJoADFqi0AUCF62kHzc5MBLEjUJFoFUDEhz0EejdGxMc+DtwyxmbRGg4CAK9tGSh+dqkgOLIJg3BAMCwFNMe/k60ZCDNIc8AwPAm68TO0O3gCEH+isfIEFoIoM0zKXhbcTbi9OanIMUAE2SCJjNLAPIwdFOFOSg7zkHtvJp8sZLyyjmeEwb7/PX0Y23b9PoLmzYsMVoGrXQGgMyf4/Dwc67rpGmwc2ocBm12kIffic9hEpax3Zjg3Kr5L6BakHZ7jSKAOEScGraXEAl4UkcHDp8feOZYIZctBswPV0ye/0AgDSGPMXGs4TTsKFJys8PqvRXLAihEQQqGPII8UTRAGVA86H+pAcMRyR7WEOGPGTQZECNDcsgsYJVLnLrs9hBx1hqycUkHrUvqxgONt9iUv+p7ocjlD66/wNdcSNfhkmkngAAAABJRU5ErkJggg==","llama":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAMAAADlCI9NAAAAVFBMVEUAAAD868b14rjx3K/v2anr057jypXMqX7EonmlpaW6mnOvkW2liWaGhoareS2nbh92dnaiayOPaR2AXCJyVBpjUT1FPC9BOy82MCYzKSMqJR0fHBcP+iOkAAAAAXRSTlMAQObYZgAAA3lJREFUeNrtV0t22zAMJDAg+0ulxm7URr3/PYsPmUiMXja0vPJYJMbyAiOAGjynN7ACCmVkPO0AButlC1ueRnEkgBydAHBA45afIICJ8bEG/htvdhHRcI4APIGU7wVAauUB4wJiUX6OgAIymjaACLNLEBjPxJRZTjkDh4Ag5EHEuCUvym8pgOgTAZFWdw3Gc4EU3LQCpPhEQJbs2TXGpxTbbyygKNIhcom8UpRVbiwNQxS0AytEuvaqMs+YlWz4jQQwMdEL8wuRUgaaAIFyhkjN27ILwgvcjIhsx5AAZiL+8kWDUiiqAHddAL0AAM2TiWvVBgXw9x9PTz++814Ac61H2SFMUAFiplq2dAaYTctRC/RCawCFbQ1B4oFaopwC4OZ9uwJ49+HpowWg0QqAHCgVKdCsf18CEYn7cWbIdx61QQf3AhQQRc67FrgEA9roHK0AVXQCwIAAbj8NSt2R2xvC8R6eI6COYOwFZEEMZmlngGm0BYi3Gf0hjFZDcu58KH7xJhA5GRmCBLCjFpRqTGK3cHgEAGZhrkYA8Fjx+etXIl1MtaDOkgCsS7JsBcRcZF+ul2ngDEROejUBrxTgGuMQKnojMgAMRdWMsRYwRSt1cSy/m9gSSVbsBCjEhHH1oiEfgCVn9h3vb3bMl3oCvABdE9pAYpACAxUAwTP7jhbIQvJBAM3fIfttqS4wZkQIv4+AoI0nWP2lHEDCDaoCDAgQ1ONskQXuL4ibSRD171sQXYCA6ykEBgRYqpAB1tWiHD/U8tfxr8U0imimeNoMiImp3+VtIG3cebnM0zRf1hbTKCQjQ0R0N6Iri4SoQwFrhzSKLJLjgywwgqzL4wcBy3vplf65SRcsP8xbxFjRLS7lBwKmdZknLf28bmgaQv2H4SEr8Ri8pN6ZlnXV69u31eNyky54Ul1xOQ1eckm9M9ljX66/fl4vq9Hn5+d5uAKezD7FVv1W99Q7k2Wd5t/XaV6DXqZpVEDpbCZvQuqdabHE02xZGx0X8AlS70xLvP/zrPGdpvPQO9N6hFMF9M50bxw4033RO9PRMDoVvTMdDaNT0TvT0TA6Fb0zbSbQcpcu9M7kE8hH0LqhZwrosJlAm7mU7od47FmH0Bpz6eev6+XuAqbpMmt0ev2t9J4CZheg17qh6X6ICTSHDzR6TwHrIdIDDzzwwAMPjOA/NfpDB1xAY2EAAAAASUVORK5CYII=","minecart":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEUAAADBxMW2ubqvsrOprq+epKaUl5iMkJKFiYt1g4ludXlsdHhham5SVVZNUVI/QkMaGx04QmSDAAAAAXRSTlMAQObYZgAAATFJREFUeNrtk9FuwyAMRVMa7jWzwf3/rx3QLmsiOlpV2lOPk+BYypFRzLIs53A6hXA617sSzsurEABTSkRPsLxGAIEYI0ACiCAC4tqp5fbARGApJavRsLoggLHGyrWvmAoOIPSWtiamgmw7MgIhcQuAM0G+U+TcBERcY+wNgJwJPO9wBAq3Blo+E+wM7ghSIRqkVGaCPV3w9RsTQUVAMRMC+MlkUHusISVfLlkoW8ZRbRmTRFXNTG9YZ1wdCoTqXsy8dNysuJtQ7Z6JoBTV0rlmrk3gB0zHW2gCU7XS6ZlrugrKxp+Ccuyg3ATljscC0eLtM/d+aX+tVfOy46GAQwGfFsiwA5HnBRwK+O4W/k/w/m+U4SDJ84MkMhxlmY7y8TCVGy8fpsR+WnXDGuPq8mHIN8fuL8tkDiT4AAAAAElFTkSuQmCC","parrot":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAP1BMVEUAAAD/////7nn/6j3/5TPGxsa7u7vZra23t7ewsLCoqKienp6ZmZmWlpaRkZGQkJD3cwmGhoYlJSUPDw8AAAD7udxiAAAAAXRSTlMAQObYZgAAANJJREFUeNrN0tEKwjAMBdDGxpnbZqtx/v+32jYMN9QKPnkhYdBDk0EDHSIQ0CGBDkEV/pFgahtgBhxEZu7nSGj1Ajg6SAmpVQe4M98hgHCMVUAgqklbObgyXwGhXczUWlXg10Z+bj/4i3X19gra1KJrDfVGakcARdFyqyEHS353w35J2oGiBRO8++miqrU2MJdZIN6pJy+Lz3Cgs04yeaees6qeByMypZQo548jLDdl9mnE8D18B+EyBiG4+AGMduBwCi2/g+BiAAJ/BTwEW/4XPABsMA1LwNN2rAAAAABJRU5ErkJggg==","piglin":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEUAAAD/gID/////7aj/5bX12iryuobMzIPCwnTooHTVlXreihzJgmWHh1e6ZkWtVTKiWTplXEOhPjiESzOXQyKNNQ1rOSR6JiF2Kw08OS5TKxpgIwo6GgwhHhyEOBusAAAAAnRSTlMABHH+CSEAAAKgSURBVHja7ZZxU9swDMXDWAMSRspwYiDQ7/81pyd5Vzzf3Oz4t78GRU2kF9m5Hm8y7h8sMM34zMQrcKZj3BvTRHMVoHVVJwRm41n1eSDwYFSB2QW0AoG4psY0JgRAK5BeiV7TWCD2wLt7AXkhehE1Du1BL6CPKT0quL4HgMgFxIBAy6xt3hICsYniHBRIzET+6Ij1jxg3/NUyXxEwiK0wiITZBJC3And3d10uzCzKjOkNOzGrX6wKJoUVpiTJQ5MbVseyqpX9SEQWmHUV+4obhI8LQCd5aHJDBALCRLIaQuRfWSRhBK51M7bKQ5MbqwpLjAyB5Kmw6AoFToZAgNCE0OQQMIXEGHkFtU3UUsUU9XX6DnlocgNNql4HvEuRAzWO/Kx342xMFXbibWwb81TJOS+oOyQg9reK8mafqbLkJR8UEFEW3nRjzDBV8nJwAgGs1qoY5DKB0QrEukrJZc9BcXz7S6AiolspC8AMIJeLQME9xC9JJppL3FmKen/J1moPsOhFzfi4gXNZvMuKdiL0xmPLVjBaHTBiK1DQH8lealfyB1mIsbEqIABcBETQKjiDYsRi84I0WwYp6yeilFgSp/iFBgJVSMchBeTsR82RVgFiCIAJgMRkihBn/w0XI9ZS+/GxtK1LXyaQVnkHn3acLDhlh6TIkQms6s05/Tw9vQUfJzs+3v45Aa4mXCTCCnh3nj73T0wQOY6oQyT080WAqcKO70H2F9tsQq3zpzdLOJ/P7+/nX+84I8SqvT//2QKEv+umGzdu3ABH/cLAFxwVGPuC4xMs353AGAmM/ELvC8b0fqHzBUN6v9D7gjG9X+h8wZjeL3S+YEzvFzpfMKb3C91/5TG9XxD5zgTy3xP0fqHzBWN6v9D5gjG9X7jmC34DNs5yRa6KJBYAAAAASUVORK5CYII=","pillager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAflBMVEWnra0CAgIAAAD////Hzs6Trq2VoKCVnJyVm5uTmZmQlpaOk5OLkZGKkJCIjo6EiYlmh4VzeXlwdXVobm5nbm5SWFhQVlYyZjx2QypfNiEmR0daLzg5Ojk5OTlPKxlLJi0fNjYqKikeKio+Hg8lJSU2GB4yFwkeHRwjEBQUFBN24XvqAAAAA3RSTlMAAAD6dsTeAAACP0lEQVR42u2VYZOaMBCG1TOCDUYQemeqRDEq8v//YN9laQYckaAzbT/ckyPEmXsfdhlnnUwbwlBKGS7CBjmZfn6m6WQ6G2DiBHUegrTmFUHIpGeQSorT9fcEixANvCt4rwVm4V5ig7/AvQRJ+AuQQPOSgjjwzYHPw4Im267AnaW3wIXbdxINC9zDZUPbADwEHMnztZTrPOc467wEa+SJc54vl3l+bgqADPgJJHf78SXl1wd/oDgb1sMCeg4yifqxXC5Vwk93DAsSMoBE/QQqkZxPEvrDNSxIWJGyIOW4Y1gwG+BfCS4Nt4YXBJso2ngLTsBe7bUlQB6GMQLkrYfAvwJq4Z0KYEDeR3C6QzOGBEb/wQCtRwjMZbVabQ7G5Qk/weFCa3fYIb874Nxa/YLj0QkuN1r49/0eEZxbq1dw/AWDp8C/haLwbMGa7XarjTa2UwGWXwXNW7a6Zqu7EQ8BPfoKDDSEfcJDAYWtIQlTMBVvXR4KIDaoHApotLmWTFWUZVGVXXoEhquHgS4nAF6C2Qi+Bd8CYi60ibIoe1mAvAmy4C2BzWB4XSCszdDDaAGHxVzE2jCxGC2IYyHimAcOBPFoAWY34MFJuxMU+5pyPhei5PPDCcRD9niiHaP34AQlJg+oRFGIqgA9A6Q9XGlrC0oSxKCi/FiBfcJdC27R5gQ49662gN8VV0ibE7jCUOWzH5KiNrgOuwJXEZ7aJ7jd4QT3pfa1oJTKAqWCDPcsU9noL5IKAhUFUaRqAvX/TKTfnHu1gRak8lQAAAAASUVORK5CYII=","rabbit":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAMFBMVEUAAAD02ezy2Ovx1unxzue0pZSkjXOUgWKUfWKLdVp7aUpqWUFjVENhU0NZTDtSSDkNYhzDAAAAAXRSTlMAQObYZgAAAYBJREFUeNp10L1uE0EUxfERBdhQ0PAivAFPgUJHFT5ewC7TBJ8LBW4i3TM0VEgz09B6ptiOV+ARkjJt5GJyNbubtZLdv7zro52fJWtdq5aqENe3prV37vl2v959dK2SCsERQBrYwtoNwOdAP4AVrAsDZ7iUAWSG6B/AZtsAvsgl6VqBjGkEL84/NcAPvBoBlSnFfmL37z/Exxi/xj8x9kBVUsptBsX1DRjtCIAbUkjqSptZYflSyikA0HVdm8dM0pdaK87x7WwC9qTNZ+/ckH7G1Xv7RVCIj+3emXrzdgT0geJczaH9JcKnarlHGSDhoynOg2PJQYUqPpVuDtRjUVGIip3PAedrf7kVLtz0NYXarkUAEBBgGQgVBBeBMlKC+kUQfLQPEyGK3WYLi3RT2adDyr7kYAAbWD6dgpJKLnYr2UBfKqegDh0jx2JH96TVz9tpzLX+MYJf8+Bl+juNuV7FEeQFcPg9jbleH/YDuNvPA3s+jcd9L+1FqEiqVlZMZ/eZmCL8uK8JdAAAAABJRU5ErkJggg==","sheep":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEX////w+fz49vUAAAD////49vXs7Oze3t7S0tL/uLjmlJTAnoa3lHuviGtXRjoICAgAAABdC2QvAAAABHRSTlMAAAAAs5NmmgAAAhFJREFUeNqdkgFy2zAMBOMqONC+hdv/v7YRqCSMPO0kvpFEUhKWwBEv29Rl5MgcUo7U5dDLf7Qdep9cFNJINeEpQCoyx8id8BxgSJHaAXoOIMWRQ16+oUfAyNSMH08BRg5lu/jDDC6HUhEjMzWGfgQYmRE5QhkairGv1PVo/GoFNrKjsLG3bX/7AZA0rjcL25R8u3YpzZgAsANbwvEI2H/lhn6/2q9/xI02oouZAFsIBTZRnAHz90psqKzUrrYz3wEdCzZlcwJ0sVIm12v1Yq73awKEsNMCYThnoOP863ar2Qf79mN/vpvIYWBgsk6Af+tyQaCQcTFnDso29vcAKDG2yxZ0KCaDFTBad7hvb/MVICTseZloK3ohFg+0jcwGDOmUQSJCJjFB0DxhFsCmdq4z0DkDu2MKBcZWBUQQWkvYs8j7m8bYthWAbRVk2SSeHRGmlhKUYx567piHDKiykacHiTAWZmnlJnS8RmoFkBK2FdgUvYjp62Jib69j+ArQh22JwGkC265PQG/erT8fK+AwHkOY6JEG+hPgclFlCoxZASZQKKd5CMsWRCwmGibDprBXgA0gCQKZBgWBlwzALkw15wxIEhMVMtjOjo71FIr5CSj8FYCxQVHYCQSAzdrKmIIy9aaTB02WfZwfIthhImLxwEf9xT48tDImpveRBFAErCUUZeZNA76lD8B9VdX9p4C/n54rtHuYBiAAAAAASUVORK5CYII=","shulker":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAzFBMVEWOYI4AAAD////m8K3h6KjT1ZrHw426tnmzr3GsqGujdqOjdKOjcqOec56ecp6ecZ6ecJ6ebp6ebZ6Xa5eXapeXaZeXZ5eXZpeXZZePZ4+PZo+PZY+PZI+OZI6PY4+OY46OYY6OYI6MYYyMYIyMXoyJYImHYYeJX4mHYIeHX4eHXoeHXIeHW4d/XH+BWoF/W3+BWYF/Wn9/WX9/WH9/V39/Vn93V3d3VXd3VHd3Und3UHdwUHBwT3BwTnBuT25wTHBuTG5uS25uSm4AAADM1DMFAAAAAnRSTlMAAHaTzTgAAASDSURBVHja5ZN/e5s2EMdpk2Xrthg8dKfYuMVet4U7sTr86CRskuL2/b+nnUiN/Xh7nhT2574guNOdPjoJEby6ULFYlEWSbGtp5Sr5ayM6xnr7QsFlR9I4JtswuYbZunITBOc5LwMWlhGZpOUKjK1HAwpCpTWAQq2U4v1oQM3gpQBiRMzay/iLgJUlRAWAKBi2xWjA0rGK1R2AFga5ajSgYI34fAMCP44H0B0opTQqQEQevweJywCw3wJUxpWjAe8aAwBKAfR7UE/YAwC8Q+URCBOWUFKMKlaACCJqzw+SmJtv+Iy50szSSEPWlKMBya5h43ZM1nJmXTEaYIu6bauybevicV9V7Yu/c7EMk+JduCyW0bJIwmybhCtvl8l8IbGsTEKxZ6tiEa2KJJK45C3mSz9uu5xlwdKxJUeWHTnecbtyxpkdu9yxv/ZLlzXkjDXea8w+OeY6FovaYE6NQdMwsDOKXBlJBMUG6t/lTOiaLSuWnMyVoXEEvS9viQeJ7Q8/+AuQWqkIUWkQyYPalTWAIF3gZSSegyiOAaVTKiiNQp+qfBa7emsQlEIEgdyxqwqGGJWSBNCKmqrIUAN6Oorv6iBxJI4IY60cp0njfQ+RHsebd45RpMUFbWm9sKRVjH4IgvhBRE5s6YoRFdsqMo1CD9DyMk01zy0o6NNjJFuGPl8jgC+LXOUrSDdp2jdQ1EoF6dr78lTQ70mart9u0rdpisD7lSXx5ZIbNbfB1sBwOEK/5uzkz8X/kzE9+rfUFIWBwZ/5Cu6dSQeAy9f3jk6+zHYvbQBak0r+egA43gRzY0/E3FUh2VMCuTLkZohHZMsod+sBmLsy+N09nBJ+/dDeu4chIfztw/7efThN8P7h031zlv/+YR9441Kbr/L2oTscum64uxf/xkt1xCLKmTNmw58nALr80PX6fOj4MAXAncmNlxgvL2Fz4XZ5ZwTiJSR+Gg/gjg7S2AjniSdUIOP6S9afT1qCr5sOxhdiDjQNcJDLc7ibAqDOPLEcJpnfs0YDpOp+C5npMKkCX7c/SE9yC2LCUc46zpmIc8PUTQHQ8U96kuckALHpb5GhlwGXv3Mnkqll+v7570d5dhtGURRGx85ZeBvezue3Rz+chdE8nIdDfC7ZMmQAhICgENNhACoFZ/6tUggAp3iM+hgPnhMkrPTwBSONWqtzICAinIAQK1QDwBMV4NkMMwRBxCfAnfZTDBP8on3B6hmwXcoKNUAMAD8nW1Mns9DPqATy07L4Y5tE8xkoP0D9uCqzIpHFgxaiBolnQWIpZkdgHGtyvF5YFtsAO5ZG6dLbO4O0Y2QrccnLXQ7kqI8HBTfsZIQ8M0u23LKTniZrSHrJlaWxfUTiufRVEheW5R1Jy3ZlsEyrtkzL9mNayPvjp9W6eqylr07rtko/7pO0fpT4XmJttSnbZVpLbvlYie/7vh6k6+urq+vrm5s3b25uXo3SEXAl+i+Aq17/V4Df/3Ndf9W3A64uNBbw/T/0Q68RS/B6/eXq6svrZ/u7XiMBNzd+CycDjhs5BfA3y7f3PUOzujsAAAAASUVORK5CYII=","sniffer":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAMAAABlApw1AAAAe1BMVEUAAAD83VH6yTfyuCrpsSvopSHfnzHejyfUjifRgR/GeRxFnYrDchU4jXspiGCqVAilVAEsc02SQQBXUDOTMR1xQQIdXTwcWzpKNE6BIRhbNglENCUTRzM8LEREKxFxExMPNCosIjdgDQ0kHi5QCAgaGSJBCAg8BwYIBwb3shenAAAAAXRSTlMAQObYZgAADgFJREFUeNrUmYGK4zgMhsPOsjdXXz0nanSIBgSmsPP+T3jSL3vTpl2oZ8zA/iO7iexQfYkVJZ3ll2QZkSxDygTl7M0MO96WeSrzZ29C8J0CoUP5TwLop5+JmbHr9qcAxOnPlFNC/L7hni8AUFEzEXx+GIBAkJMbCLBv3dcAaA0K/RQAzj9n4hBRSl8BIB57xUX4BEDP34Tw13Vl38lzllA1aa1iQph3AN0wFBvG1PR0Em83UAPgSORZAOoAimVeRO8BTBuAxMRBgLaCiF0rgodrEoCqtfIQQKV68OgB4NOKqmN7e/ouBIJMfQXZ1iyAfgGKI5QiOwB1QFGn9KFSYiKu2whALwW8sotSItMkAJOWokXsb5ee/14LAEV8IgCMbqAS4w7q8ZNvpGmPEjXWgwOg3QH80wQAAUApVUcAPNi0ZbDjoBbMAnArovIAAOH/bfJP5ERRlQCw9nwSk4shoowVNBcAyVlEdgAe/V+QMSAnYmKkwEgSE0MoAQYAojkAEYloUSToYr10u8UBgCDZawXCSBLHbXSrAXlSIdOKtaBSIrZFkMtF3ORutogWMxw0UAeoZQG3KmzNNQcg7qOlRGwO4MLHPUBpAAqAsdtoLCEGQZ6XA205e7gBUEK/AShugkMG6gARGBzAtzhPzIGzqrcAKLog9q57gJMNquls9iwAzna/BHib5Hk5UFnVGpdTEQ4AifX/GIAcgM/K6vZsHYhnoUzxJMF5Yg6sFsyZz0ynwkbBixhAtzsAOREXa+uZ7Rg9P7+EyOLfnuXMMQ+Az35eiE7MJwIA9BDAZpgRTqOhrwN1gBjLHwQzC9nKq5k1IjfcKcPkQRKzh0GYv7oGrkBUAiJnpxSeKQCrmTWPjRi1Svub8AMAXnxWO2Yd+1nFjNjk/cQl5IZI2P5Mx2vdAVgjHIYDR96JuT8MrZRBNPVnFY1ibDoSHekI+aa7xMZM/XWyWFuG1OPPCbUYKQDNA8BrMervkV394fEo8KLaAaB8CIBM2ysZT63EoUu9VFEVKXTjpyLurjZ+EdXiANZ0GVKkAJtBUY3zbICL4o3gdtkf1VeQXmIcO2UcIOInQ9hqGTnERABT9fjr7gpUD7peXCpGGBAyCNCV8tVLGdFsgJ/v7++Vb/xczfezYhjVIQDKaBL36AlJQKbJSwghimjVHYB63Ii/4vyL9zIOgCrGxCZcgZxoNkC9SK1COwBy58WH1XMYJW4cIH6V4Owk222IaCZA/LZCfLjxH5hKURsLACSwyihALJh4FGoinr2EUAiE395u/G9vLCgDDoBKp6Ki4wAhZm9GMj0HtIpZUT78uPH/OLAagJq5cAeSMpzErv5fDYbINBVAxUyUX7/f+L+/srsV1m6j4wC7+FES4JoHICoIkO4ACH7YJ26j/aW4P1TkaJMBrNHh9cb/eqAYCBMkgo4/C0ENotPMBnA7PQA4dQL0Ju8iAuu6bQ506LcOE9qMjtEpuudq5HocxG1rP/d6DaosAFj2AsAicuuN0NJN9BFjSi3qRH3pJ+s6wAbtI9ahx5xwowVBp06mvoeWcp++bBI0XvbiGNljEQAShWUEQXBkAgVCii/GFELXGKkPEGIjdOChcAZ2bOFM4ZDmQSMCwF7/PeFxUdxVMuf2PUwRnltbAJxSe+5n32cMpGDckiHFVpvXnRFj3qgzYyYAURAjguWjwtqwxpnCEGNzEJMLcBhhsj46XJk4ID6BFdMwBbg5BoOBOWM8INsARwTLA728fHv5Fnp5+S0AvgYhrejjuxHrytjj/lUYCQ/C4P/buQLdxHEg6tOqQidVp1XlXcUnegOG8v+feDPvzcjUC6E6jiyR/MD2eDx23nOSkinb/StsHwc8ZYZchGMQy5nDZNDFTaLQiwJI/w9KSFfAHcSjpQkwFdxWPmvy0wp81YYAOra+z4CL9JOD7pYiIXDL32ZjPreFmhmO5qIAsNc3SroCW9DKVmGsIUBbsIgXzg530Gp2GnmMw0W+W51iq5nTAlQsDUr2uC3l+8SrAv7Q96wA23uUrbGgCnLE2tQTbqRhIGDRcXLIQf0gF2o8Tg1EgCpX4eUUS5LBdQGKWQE4LPdnt/25gxoFyJMLHKiCJiQFeRgM4V6EgHCAMSrnzfmxbWSQLsDoA9pcFbClAJDZ7rY7XVE9O/XY2maYR99oYOCtheS5o/AwZKctJ7lyko6ZfuX4qoYZAYEZAT93WIynd7fb8SDkrYYKgh6G6csMeHAhNEnqcso78MJczuBk620pwH3mxOozAn78YDUngIspYQowAtZssXbQVS8ogpaWXRMDAwVjmE8BocHnoPLLUGNQqYcMrlxCP/5RAVrNCdhCgPMA1S14g0ATAGkmwApqbTkKpwXvUGMmunBDE31UprX54KTczwJe+OkFgDsqx7eXl5dvhBovKdlC2ECuqS8DxZjH+ZkvBCCQfpDh+YEb7Lgi9Pl0W9gFWIOFQ4DHpwawCwF/K3etAOd9jpTIE5vA9XxF2CBGBtFHTaahnQ6XxWUoQJu2LLiTdrhgeJP+K8AM6/qbhQcKJQpW9NKPxj1scF2xAwHhjmWbbW92wky3wH8oEf/UoIELJrDpjtIqepq3NbTaNG1SC2bT+oDPbwJQbgsAe+CCADNiXevEYYNH6o5Pf0qNS2PujRnWwB8zYKcu8IsCXtsJOBeAozQ7liIdVBy2DtugQDcMKAxvapPQY1RzekALZ+frAl4hYHV4VfgVtFoBfhOs9AzwJuZNsE4BTcFaz8Am8Oxn4AUPEgQeRLVyfFOkp8cGj2sQYZkMKoU/CG3S0wP8jbG/zYRFBekeHK/hxoyK+nRiBcwIMHxrAHcAI8sLOIUA8q+oZwRsyF8LDLTom7HZLCxA6SrlWo0zXtbTdk7A5kU1WIFBG4C5tABSrmAP5tU6dUbA29v3t+/Ea8A6bwqtlhZQlbdBOZuOit6sgD83DXECoq9jiwvAnmsDS1/szF1CvOKt2mjRl3q05j2x+E0cCtyIakYAuBLNao7fIICcz5Xc/jEK6h04sLCAuGxi86vf0fP3wMs16F2wuADSjh8+VlV8DtyB5QXwJJgA415Px1UJ4AcxuFtrAvQcrEeAsSZOZvNCqisSUMHbysls3MurFKCGk1+XgHiO45XTPgnWJEAVYP9XK6BCAF/AmgTUyud/sraGZr06gTh87Pf7j8Ot8SUE8CcnBbACbgj4AMGPW+OLC9AX6i8IOOwPIDg7vkhKGfdu+zxbq4D4PMM5uCngY69lfnwJAeBfIYJJPdrjVwQctMyOLyaAF77y9gz/hBlrEQCYBNzJJ1SqZTUCTiFAAe5QcUGASKD4X3WrwVZKTcl6Itlgbkf28AcKwHZHTsNaXfWCgCJaSpUslSQzRIjakhLEhIAsXfiDBVQXoIjUrKYOtRSQrdz2agKUP95G0HpmZXorzkyEP1KAopJ71HhdEJCLsa7YXxNQQT0IuhkCuvDHCUAOHNR9/y8LkKysRaoYNSWX1UMfBUAOBQiIl7Pwh6aU53t/RFHzVwFTybWITGKscYnUXE2AekwA5Ey55GwxXfgiH2TVf9F+OR+YJgEfazNqmQpYqq0E1aHsJ1Tq6cIf/kHGnz0w6zUB0/tk1TsrItqUaPbjEfLYS4g7j7u5XhXwbqze9/aQ9m6PaXs6+FaCaLvxFvHIDzLfeW3OBZxSh73ioMQUe9SHw77h1vhjP4lP8SRH9rwd1pKRnU4UYFCz3c9rycj460SQR6knltNaEho8uCm0QaGh9f8r4PjbcUdG9qwCbucDQ8AQcIYkAaZgx1xylSJMA/xxujL9ysdaIjYz4gkEFGZYkYJV5VbRtnwAQ1VbG9BOgYDyNAJAKVKwyIeVa2RkUOQRFGA+lPIEAvjHwpGCWSN+1eR6JkC9TZ+F12cS0FIwI4Wrp4rkWkIA0y8IKFDqAuQJBEyfUjAjVa1SW4VRwDQh7+QoxCK70d70BAK6FExJ2Q6raS9JJnDy9EsgzBO0yZpnEDCfcc1nbM8hYD7jms/YnkDAnRnZEwi4LyN7AgF3ZGTPI+D+hKZquRv1gmMhAVKlHRQVCiEsdNGu0mLQa4u02WIVl+vWaebdGZlgISmSj8VZFKfUaMlRxDgUuNRGYQyYlljEZ6BUEQx08yCMS4rF3ZkPFKlS8Y3CMevCYMEDoKKnHAuOntVmX8AAMRpdciyi8SSJ8Vw4A3Wsgy2BWXCgewVk4VNsrrnosGSxlruVcbBiY6JOi0O/GAPGwJPbIsovixGDomzUz+dlJc2hmtWucrcAiedvAQ01+gSoCMZQaWhLhjyG+6z1xYyqm5f90RluKVaSiEBJN8HDU+r5Kc75ZR5fEI2oLgGKb6icAIhgNz1GUEq+nFF188icywnFJ7CR0k/w8JR6fkUUpfEzF95cvHQJUOyLR4I0nB4TIq5lVKXNQ8soLkqG/n++9BNcSkq/8IPexg/ljHifAMUgCXCH23dUFKK+axlVE1C4vjXm6QT8MsHDU+r5UUDwcxE1CwOKXEqAGMLrvvtKC/2ZjEpSmwcCGUs1UqmfMPmEJqDnVz7zYzKUtJeqCNrUJ0AJK2UdlZos9bBAxKAvNRZpGVViRiWf5iUcVC1zqrtop0vBhJmWiIZPRadHspbzVDWqS9DsHsEbRpLENkmxo4JHUfY2bg0iBPQZ4/1UIEttwbxibnvJ+Tx40YMGsJPUpWCeaakFn8ZaSlYmqyf1tAStgN/yWOA7sgWwwHdky+D+78gGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBtaCfwE/iN7wd4XgKAAAAABJRU5ErkJggg==","spider":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAKlBMVEUAAACSiX+MgndgVEhPRTxHPjWoDg49NC0yKyYmIBsmHxoaFA88AgIiAADotIQjAAAAAXRSTlMAQObYZgAAAgpJREFUeNp10rFu1EAQBuB7B8RDUCIs0tB5rUuUNAivfBKvkI5b/eNLyVkzg6hQYGfyAkn6oDwAFUUqUvA4rHTGthTlb7b4P+3urHZV4uqqsuKbHdNNz3S9A5V1NUVIVW0leQfOCuQvhNzTDJhF3W6RlUvJV5R7przjBSBxu5KbHmV73OJaUc7DBDIVIKs5zuSU4nSIkYotgSUox25z0GAtfe+qk+GWN0PCARhI1fgwyJhjpOb7QDQBN0DVJ9BRiJmhB8CQAlhlAfZNaxAfb8ziwuSLQeqmrdx8BMJi0qsvBrms6hP3AuZIFxNYRJBj6L5W9d8UYg8SGcGmjSlRFuOB1/vqz7v6mLYbcscIEoYOAjNLoB+/6urtbwarGabB2q4juBnR5dnj+fnZ4wlDM2QEbQhdVHXOoLr69PBwVFfM0sNmgEE9g5Ve34U3dTh9IcZu/0Gsw2atboDL6f37u48vL+7E4c4jaD80YU2ult0v/NvP01d+707CGMG2DVVH5uNrPk0a2oog7vYM4G1qgN6FngEAgZmc8aQKMTSBgY62KbShCwIKaTODGPhztU6csA11FTgJQhNpBuGoNM2QIGDsQx0ktfF4ARKDIiKYmUAhdMZtxzIDYN+g5xLJVO4Aw8BYAG9L7waQeiaQGwlIZ5ARu9g7a9Yc0wYFK+kCeAbgDvfegdK7qyy+4z9b0kGP3NmJngAAAABJRU5ErkJggg==","tadpole":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAABtUz1jSTNTOSNJLxlEKhQWCgDfr9AwAAAAAXRSTlMAQObYZgAAADdJREFUeNpjYGAyCglgAAFGRVcHMINNzMgARBuliSUZGQEZzkZGxsHODNiAs6KwA5RlYsBAOQAAqGUGQPKmAvcAAAAASUVORK5CYII=","turtle":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAMFBMVEUAAAD////K0JHCt4ComnNHv0qUi2OCiFQ/pEI4jTopfUkwcj8gakMlZDMbWzExMTA/pVLKAAAAAXRSTlMAQObYZgAABDNJREFUeNqd1s9r40YUB/DAZr1Z3JT+By2S6XnRiJyD9ZjmtBRSUbWnQITMQlgKXeJL6aGxlpltD2VZjKY2uRW2JodAlxAxm9DD4satYnKuI7OH0qUkEfQ/6Iwk/7isrNnvSUb2h5n3pHlekqkG9AVC60vvnLuEPJsCDxMRL01pYIWQ1hRwo+T6leeBixUA234MsJV98Cxdxx5YFuDSwG3b/tzFX8nLigtoDZngpdlSAHYbOYCMmoZMBaAa+LaIQ0/i+GKpsm1ouqYhFYARCRCWAZamGcLACkD4ITn+nvzXyQCUAWvlgdWQBQGlrBNLYFn8WO7BVABGTQ/Aa56kQAUAtBoAzgHl3DI0rV4XVVQDVvyWtT4FdE0dcDbr9yaAbiJ1wN80Pkqv7riWoWsIGmrAXX9Py4BbKN2CjhQBsolmQE0dWAlaZlaDZWTUTFNDpirwDNazGnhQr2mAVWsQMjf7cgWQ2IJuYjWgGoZTwHIxbIMqwHl7AmCrpmMFYBkAHhx5YfpSt971ZL7tt8yC35Y5Vfdq97JLxoiFkNwBqJyq5Ds9B8IgIIQ89lzLQGZ5wHmqTQBGbZ+0AOmarius4CnKAR4y33E+Qyapm6R8DeietZ4DzJft2CAy5YcjbYEEKp5nU992GKEAIMu4VRLotPGP2aWF0AZlbQCsMl2rnaMJQEQC9gIZCFQAfvTgMAd8/wvKfpU9MKHkXCSs7fE2iGx8uuQ4NmX8uGVstJA5edpNE0q/W7IHtHNMZPIVpPMaewtr8tYuWHJezwD1pPN6rRiocnbm22TQ4SPO/2XsivOLOcAwFgNhNyBdxnnMTznrnPITNWCV8796vd6IixE75pyfxvEMSOf1x8XAe6PLg2ESHYwuo+RG7CJOrn+b3kznNS4G7kT9YZIk/eh3r/FtEg2T5lzT5bxetIJlgETkbxDBjWbTA1ifA3StEKiOX0H28oDIcMSvB75t0+jqMAd0ExUC798IADdFdgVwniSsG9hOl+2/zu6n8xoXrSDuAzSaMi7g81HI6B+93oCyw5IPUvXkDVgZsA2f3PAwePLcdnpkBtQWAWNAzTRfm/djzsgvsgbPaX5EyHm9CHCnwMOYd3uB/Ov600EOuHJee4VFvGx4GbDb2ImTq5eBWAHp8kkR5bzGBcDqOJqtYGcYhzSSXRjQvAbpvMaFW7h8NAW+kTVwRBfOnEkN0nldCPB5YCQAW3Th5ylQcQGKpr0EmtMapMCXogZPJFCQghXsR2kbD4blANmFeUB0IRgQ26FnndclAdkFKwdAdiH44YyQSD6JpSK70NjNa9DciTlnpBtFAe2UB8YwXcF9CTCxggErD8RvADLgkXiZRjzsMkK7jJcFVuN/5l7nm3icRCFjL4fJRdkuXPfngCi54uxP1hEzonQX4v7sRMLnMefhfpIwXrAFhXyw4P7/kgmYSeJwxJwAAAAASUVORK5CYII=","vex":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAMFBMVEUAAABthJtgeY9Ta4H////z+Pzg6fHG2eqivNWUrMOGn7eCl6t5kqp6j6RthJtgcoMKluMvAAAABHRSTlMAoKCgEjok+wAAAPlJREFUeNq1yL1Kw1AAhuE3hxYrRYm5gmivQL0Hwa1LnAtCFpdOjuKY4KBjfnYhIUPWEnIBhgxZRSjHC8hp3KWxkg5ndfD5pu8FDqNAKQkwKXIE9Fuj3zCQjECYDCaPs4tOQP9pDME4B1MAbIwTgJEwv2yixPcCPw2igGkcljlZ3YfP33WSJTB9yhG25HaJPLUBtkCdvl5fpVlVVRy3ntdQZW+eX6e77UIcNqAke0eq+JCgGvam4apoUGqtHtC067K9Q1O+l2WMJl9RvPAnl7+0L5Ao9NBB16GxZpZloTGFeWYC47l7DzrXcUF3sHTQjW9YoHMW4zn/5QeNK1xt8XQSVQAAAABJRU5ErkJggg==","villager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAbFBMVEX///++iGy3gnKze2J6enpra2thYWFUVFRUU1NISElMODM9LSkAAAD///++iGy3gnKUj4m1e2eze2KBfXl/e3eja01vbWqQXkNjYmAAlhFUU1N1Ry93QjVcQjpISElMODM9LSkzJBEjIyMjGBTjk4HHAAAADXRSTlMAAAAAAAAAAAAAAAAA7Uh4SAAAAn9JREFUeNrtlN1ymzAQRm3cuG5C9oMFJIW0idu+/zt2/wieiTNAk0ufgdEKs0cryWJXB0RguUEO1/Xzc871Irs3AViTQdnYLgAzGfmPkFnT9V4tiAI+IyCB/19AVgA+KyCaF9FZL3iDlfUCAl0AjpYmFgWagjkJfjNCtCwgml7niyrmcJ0gho7mQkDrBJALsAhwyYY1IAP4bahgdmKFgBme8PjE/PRI3mMGG1gWxMpnE3GetmFiWQA/yJl/CpzJutggYAYYIjAyQfu8XlAv8DWCb5sFqW2Btk2llJSKctwqIAFJ8oVFQRL+ChcCEKGlKwJSQLRfENBHFYCMZYG+2F6tAOauFgRtC8K1RYSdVqhgd6eCUmIUxTtdKknySXchOYOQEhkAmNmm4YJ5FPWM0nRdbKNGZRxHH2KElx8CRmWCvu+7roxd17nADE1qhdR0RfP1mQZMbAqwnxcT9KnYS5Lc903Tq0U6jVTt+Xo5SesWCUMvIheUMvh5GnwqqpKUJPU0jUSik57jnyswABWgitMYU2MjZlw0X9ppDbpOTMSkwCCQCXw+FBe4uGGUdehGy3950ScaEC4/duwCaWHPorEdGSM/0mMRRlKYogD2bZzGZvuJIa+/SFIQYfCjqvb7w6EKDiYAGe5h4DU4/3o9ezSzF94JGK4IC84Tr+d3PHzwTbTqvQVkqjMlSEa5KjhYLUElPJxOD8r9/cmjGQJxJmMgQVN2B0UCbUxxPJ2+OyI4BnfKEcAwxF95mARL1BcAnJmcTIRqq0DzQsCZwJsEUIgGFUCIKmiTQEceZsGwRlBPQGHY3EOQB2Jalz9XAB11crFWUH+Sm+AmuAlugi8T/AM2/NtEbUTDnAAAAABJRU5ErkJggg==","warden":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAOVBMVEUAAADR1ra7w5sp3+uir4aBmYhudXsAkpVAV2wFYl0HSFcDQVAXKC8GLjcLISoRGyERFRoNEhcFBBJsUoYuAAAAAXRSTlMAQObYZgAABmJJREFUeNrtmuti4ygMhWMChEYrjtn3f9iVEG7r4E7iSyf7wyfcbGetzxIixTuXbyqloICdiCHDJV1+U0UEgFNiAOUdAIZApObfBlAUoLwToBCVE+B1gNvl+laA6+12e68HPoTgvXOAru8FYNrpgbJCAJwIgLHwhW4Sgo8jAfCjcSMIzgXAnJGZSO1f9wFgydiP4pS4fSNnMX+Rx98JIMLUQNQYRD0Mknog2bnMdDXrh4UAOQPIZl/GvWuiGwYXJ4DL5VgAZKDkYhqBRwIwwCKA8dKqTCkE9xoAGkAZpf+QRjQHADjF4NQDLsTEwHOApBFb4QELey7lH+WwwyZoZX0gUQiJ0XtgfxZkoHa1GQuQH6YhGCyyCDwHsOdf4YEMMz9qJ70AzASNwTBoBPAKAKWwDgBoIBMA5vYtBhaBg0LQA4xFalaGDsAYRHYexwNkmGGhGBUDetQgMF8Jf2EOQAHQ7FehmwPMthIy/9YcUAoNv3R2+F2wRLQk/J05kAH1/fJK2BCZJ7DjFiJ8AejwwxC+AeDLCRwCl1cBSAnW/hjZ43+OUeZCSrDR8SHof45nMhb1gI4PBFgnMBvYGwC6deBoEd3vdyKWXkV/cVdmMrMiae/0FgC6VQQpSSj+OgCpWhDoHSEww1MM3uIBc32bjG/wgJrV5qZNeg5wvdyOzgJqifCaB2Rjfj02BDf6ss89QG//4/A5UC3fTU8BrnRo5IkSiexAC7VLVuyKXZo8QHwAADMR852ll08temCH2lpzl5rbN5pZ3Znf6MJ7AVRZpPeXponaqczI+mFmaUi/ALQkUAIizvsAckaWCjVXTRXpqvSoIGsjKmUc60mUCUCccBGEvI+gAMVqwchjgRRoq6q2pVfr9Vt6AANoDNe9LjDrKjNq4uW3JbDuG4BoL8BMI1jUUCZBy3e9fscVAFkbsCUFN5zZrs2EXwIwcfm3Sga9+r3i9Ot5EAAKq3ETd6Ff+CO52uf7/TAAyLOrxA8ovZjLXLY47gdosTb7ED0Q9CHIfwTI2zwwFuR6Tya2tyUwtv4d5aTpd2N+rz6BV2zNOAOQjtHfrP9/SXcmsU/fAHLptAoAmAYvzQF7fuJFD5jwIkC/De4VQ4gdgKbhPATo77BqRbTUIlr8DjP3bCYsjfMWAHusZYBhGLAUjHYSHcEKgH5164XBDeoF1K6UUYuJWejMNApg/VYAspndS9+Vs5c6DMkNbNlrzz4MSqUCSs6zNWMdABPRTyEIzg1JanCDspSmUXn0pDkggwhZR2s9MLY58GMIvHMuSaMM3g0oTc6FWmoIMiElUK72sSEE9/pZBhCrUaowBO8FIFdsOCcnXfUAQCknKZSBzZPwfuflEHjnozdzMm4GgODkggFkCi47KYHyawBLGc3Mi6tYEKvRe6cgUgGU0QCC90JQjIBCILP/IsD4sNhC0n0aPgL4GAQgSgkegHlAD/Tajr8Jx5bKDiySdEdjmANEr7a8lz7FYAAZiDGFmLYDmMRsqinupbo4OGEA8xwgBIEQ6z5SSp8eoETKsBnAHGBWw+CEw2kfKtFsIUoxqAvEGFEitOCBiUmv7fPA4LyYFPmkzZTb83e/lNT3UQZMjGICM4goxk0AaE+BwfsghoUjSpXeSTcHYOIkDDFxYhFKExh6aSMAGoDzwUz66M0Z0rnwAKBOSMykNjGFD9UJnDYCQM1XAK8Q3kfp1BnehzkAbNdO0j2+zFYA3gegGeakSO8FQKsM5wBgUbVf9FPy7I/6zQBjBQiaSGK7proUn2JI84mFwlLkU83PNEpFv7au8UBKFH2qa11QBrVOibqdNOx5l7QdoGAEJSIxqg4IMUWtxMRzgF77AQosgjbF1XBIOohEBH4GMFq7C6CJRYlTrHlGHLUB49c98Imv1kgYki1zicGMsgQAaw8DaAJQ85wsz2p5uIVZBSxk+A4xO8gbtmY1FQtamjPAsDs+TlilrC0BBqHVrphpbN6cVpMsH0jBwn/MRAARMZqj6hAytEFZElbvDdGs9wD0RL3/Ta9Mwp5jtLrln4Pgs8ULAE+0CmASNkzCowBW7w27hQ3WaYP1AP3e8DkAFt9NWIatA9i0NyyosGDriqV5aWmOVQD93lCV/3yPKYlrpdKl+RqATXtDeqI1ACv3hsfrx73hqVOnTp06derUqVOnTp06derU/1n/AR0CP3Q2vq+HAAAAAElFTkSuQmCC","witch":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACACAMAAACMX59YAAAAmVBMVEUAAAD///+2qJWrn42rnYmmmoijlIOgkoCPj4+YiXeWdliWdFcltDWUc1Z6d3eAcl6PbFNra2uQXkN6XnBhYWFoWUwMixp1Ry8vaDVaTTZMTExHT0hQQy0/Pz9IPCc6OjpANSQkQCg1Lh0dPAkxKRwoKCgsKRg2F1guJxonJiYwFE0YKRoTLgEeHh4oEEIdCy8REREVByUKDAvCurIkAAAAAXRSTlMAQObYZgAAA1lJREFUeNrtloFS2kAQhiPphVJbKVq10XDG2Ba4mjvx/R+u/+5yR1U0d2SqYyefgcuO+T/2NoYxyw4PMyLPlVL5KN+gsuz8/Pg46+bw65dPtEoeginjBdFAkAvTEkwVxen1eoJRjg30FfTbgjAKQ0wlD0NQTEKQNq98ntcANhU3fQkVile1talogRJBkQsiIFG3QPnrVQHkNBhAt8BHCgKFxBURJSh8/hcjFeULECXwMzs4KYqTAwpLXgxFtwBXkWM6/gDGU0kHugUTMoDpeHx6Oh5PleQnExy0dAsmrICAmUp8S/ZeKQum/BFIFUyYWIEGP0GMYAEM+OeCgnkVQQNqCJrlcqlBDXBWqVGuKlSE1lVZVpW2wAtoeSxoWEB1XZVaKV2WqEBVleCBwNEaBFoEsm4Epaa3RgQlTvHmSGCQdxCYIKglWEOAbpdNAxclaoR8hWZwOGedgcABWkVQe0ENFY4lIIFmgVQaabw4CPzKglrX/MkNTuigAJpmQaUbrl4WIMXD07JKhHagMfiGigYmHFXVIahl9UNssANUAGdIw7FTgMslSAMAItAiCDpsCT/ZLubzppHcfD4D4tFVSV1UGwHycOwWXMwR/Hg0w3JBAuwaR83AQhORHtDjbgGYHc1mtH4DMjbN1DpUPKnseRZ+eRFjrbPWGKx88vev4gQGOQPYZJIFoQO7swNZXsSGLTzpYNEpcIA7gEHOxRY7RBFgBs4L/BycW6P0HaBar52VLxz7tAMJiUC6ySwiEBiZMucd8oR5IkAqCMS1EVi+2iwMFw5hEUTAAkuC2xsIaENUCdEC9EICRGy6wPEMsGkvWKcK1jKDrcAlbmENgoArt7/A7CFwDwRuDwFP0W+BJ5J+GyEwj+6CSRQYEZitgH6iBU4ExgtMssAaayCgR5QqK/8B2PgtWMsCePhhIB+wCX8H4PYGQdKJAG9JHYjAypNhKQ0ShshXs8DtIXCISMECrliYpbEK3AcSBS2zv6C9Y9pB8IaC/rfRkyZYRfKsoI0kspGOzrtuQdtHcEe8R0H/GfS/C23gd/uYNMH19+u9BFcbLs8+n11ePSSpgxU6WLUeea6TJsiz2xd88tsJ+m8h9osj+gvl3QnA6j7rBQ+uD9z2wMDAwMDAwH/EH571WWMJHeH4AAAAAElFTkSuQmCC","wolf":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAw1BMVEXt5+jk3t/c3Nzf2dnW0NHKxsfIwsO3t7ferIWzs7Nu1Je3q6WhoaGdnU10oIaBgYEatVh+dnBegyJlZi1iWkAodi5WVlZUVFRERERHQjs+PTBENiY5ODVDNSWAAHY/MCQzMzMtLSg1Kh8sLCo0KR4ZGRkAAAD////k2Nnd2tvV0NDTz8/Kx8jJwcLBvr7UtaTOr5bEq5ywqqefmpaalZGnj36ajIiVhnmheFuUe2iBdm2Mb1JJQjk5PD85ODUtLSgSFBY76smzAAAAJ3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi/HzzAAADR0lEQVR42s2UbXfbNgyF6Wli41WZqm3NtkQOZ3ZVwwCFbShO6r6k/v+/ahdwtjOp/dJvvZT5gqP7HAC2GYZhWFDBYBIilsvLy5Ty8HsPiY4yirIQBgtfX1/HLlbD/xUcQIXh51JI1ut1TumiXyz6SKKkAi4AzEQGCLH7AhCpFDxMmBmAlNIffYw9MlMgPewrAPDHKWCxiAtmEFjYyogIrNd//frixU8/lyKIF4htdUAIsxIETiEAfMPGQRmDC0HzGt1Xz6AKUwAXJxC8VAgkb+TgIgIacV//7UE1K8Fsb477/fGN+Q1HAFw9e5auErZi5KcVANcsA+D3H+7vP+yFvA9CvBZhr8qmU4dP9Ukx3AzABP/DAwjE9hbGb1TcYnYCynCOksJYpwCR/cM9QfcPe3lSApWwAgJ5AbazPhhqCkgpvdwddnjOzlLKOZnEatH/CKKEgJ0w5CuA7WHrgL8dkNMVLMKj18BWxegBIgVHZQrIOb/cHDYO+CGfAIl1VMHjDYRvFATYQ9hMAb9Am08bJHF2dg6Z/wqq+9j3nf3wYmhjFWOoY+xirOowBWw3Nzc3R3w22+1utz0fHqFl09Z919e1WAqS61hBDsA6B4Bg/g36cNidP5bySKVtYmeDCkSr6nl8jiy6PkYsU8Dh+Omk4+EEIHosVFV17LouFhKlEioQapj7LoZYTwE2NaucXl9cvLa9XwSLUHW9DaERDayRd4ghdH++whzngM+f373LKwA+fnz/dvCLIIaqRgv6qGKAEJxQhVcd0ghfBSQHvH2P0I8h4O3Tt6Cqo+riZK8i9MV98HThcVZMQsyDiLVO7CjYEGYqSlSFAABYUwDx6T/YwEesTANWOIRxNCuRFLZWLtGqpmmW7QxAzGZdqllUDFBOAMvA9pgVuTRt2yyXmOYZCDOsjYqjeGAqEBPEBSIERkCaJue2BWbeA7jwcYACMbAl4CWI+NYBVAyQVmkOuNPxTvVubAUWJZQAJxh2ZAD8RKNyaVv7r+c5AH6MUbMKwW5NZKtamP26RgiPjkwruLMxpgBhvr29ZTEAmwsAtq3gMdbpNDIjfSBWaTUFrFJOVlvGQHrAm9XNPmEAwCqc7UWbpoDh2/WdAf4B+LQj08eGOFAAAAAASUVORK5CYII=","zombie":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAclBMVEUAAAAAzMyPj495nGVxlVtvlVxtlVtnkFYAr69ph1Z6d3cAqKgAnp5ae0gAmZlra2tXdUdOezZhYWFIdTJJcTVWScwAf39KaS0+aS07Yi9MTExGOqU2WiUAaGg4UiYAW1s/Pz86MYkwKHImIVsoKCgaGho5R/XAAAAAAXRSTlMAQObYZgAAAkJJREFUeNrtk2FzmzAMhpPNm+0akmjVqFRGEsPy///iXtnlml27laRfeWwswZ0eI3NsZkRFVWwUdHMrIqzKitKC3C4gVjhgOQLVOwQEAcvdAmViwZQiuKOFsj2J3i1gZWEVrAqEbxaIlkHMAni5QK15VRSpwTI/UFuYFnx/q2ZCQYyMEq5PSKWMJW8gZSv//av75rneqcJFxMqLemdiiq1zLraR6llimEtk2fdnpvZycfFyaeGScggkqKclLQjqWShG1RhR/XIKCEgWtCByLJs96tOTPiIROoogMhEvO0QWqf+AWqXdsQIEWfhP/AS/wXy//VXYji/Mz8N2G5iIPxYcC28EW0CsnxOwqnyqhTf/yQhy3/fjNE096Lru1CRl0dR0oGlSCAn5bteZYI7vCcYiGIYuhUa1CQH5kFIAVRbAHP8S9FeCoQhC2XgAKSDB8h9BroIMQc79aRhOwQwoqzkyTMt3Ke3m+CrIVWAxwzacTiZIRQBCgwyXgAgEtGAzk/tcdh6R2ETNkEyAOSCfBcykLjovyuy9j68CVPUAS4lWZB3AkQa8b1WlJMzqW9eykvhD9O8IkM1foR5Bg3wwlzlQJ967loQ0Ru+vD7EKMjJggnJsuKosYZpA2TsXiVnjdQvnsxVa+fm8B93QdbanlRUBkoBFWMk574RF/PUbPJ9R+OVhj/BsgnEap1xIoZsmyO1EcyYI0IFXQTz4+CoA+4f93uIPAMHYF3JTcyRokkmodbFVEo6HeNisrKysrKysrPyDP68WY0lh7YK7AAAAAElFTkSuQmCC","zombie_villager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAt1BMVEVskkNwbWdVczVjW1tWYC5jVC9IYC4/WChUSSg4TSM4OyExPSUuNyQAAAD///+Iqlt3oEd2kk9skkOCe3RyhFFmij9ffzdwbWdedUVXdUdVczVjW1tUZkBOazBgXjhOaC1HZTdQVzdUTU1PUTNBWSiZKys/WChcQjpURypDTCQ4TSNKPj42TCpJQSRMODNCNzcxRB8vQh44OyExPSUsPRw7MTEyNyQqOSE9LSk2MiAzJBEgKxgjIyNApSiHAAAADnRSTlMAAAAAAAAAAAAAAAAAAKroblcAAAMeSURBVHja7dF/X9s2EMfxrGs3oGtxHXTSztIuE+mtyG1+2HNKxp7/49pXIoHSUhxe65/52E6cmHs7MpMXuxxR3p0iFF6+3Gz+vPztlxdP9AZN9h8IfQ1c/vEMgMkgItV/kYbN5upys/nw4dWhAOarGkS4Ay6vthmYfL8HAHNViD2w3VxdbbfPAGoMV1VVuz2w/fTpeUBt6ro6r4yWwtnZycnJ2dmrgwHMwqjODbmADgeIqrx6Q5XBKvALSlRyOCZjAJM5ZyJig0dgKkN3sw4HjwMEwTAFNlRfuIpDnkIF4DAOMAsRgGAMuYvzEBwmQRTG0SGAGlYX5hfv8AjfzYMT54QzwJ4OAkRFHc//Kc2ZhJQ9xvHCBwDCAkGE3r4P4f1bkuxB9ThRFR4FNCVFqQ9zFHp8wr7OX616XBsFUt+vUwbmf6M5ZtI6rYHgwqpfrQ4BUhb6eanv0rpba5dS32G8GwdOT1+f5iYjjQG/PvmHTwE/o5/Q5EFWhVnUNnc9FxBCfChgUd91/et7gDGu9AjgyNHnm8833wIQvgDoe7+A6to9CnQQvgQYgDwCmLqmGwhjS1Bh4scAMiQPgCZnse2zdmqbiHkS2Qm2URG11iEict47T6gAbRObaNvYNjhpbIyxzIsw42War8a4U/M8Nod5vQdibNs4DC0MGzNgpzGlJEiTLfMQUIwYNo68I3WexO2BdgCgQ3awNVlJuzrcGpP5FVkhckCIRLGLuwVaTaopJLyBGuK9gPmptRbfNFMc1qozZfFCglQKoIgDOeagA7Ym3zEOXa7MN1gASBBRlQwZQ96JOBwF4MCeidg5puQ4YMELPNgO5UeXsWVEgAYVJlMALkIBKIAAwHnH0SI8FE2xybddYr5tmzZFJAwAeWYIorcACzE5KC4wBwDLYVgu24gwPeR57KlFHpN1XRsiZgehACKz2wUJ+xnOF7uu/1pcL77Kq6caZUD2/0ZFAk9zM9XrfYvrb1L1TPXvNbFnhwqQEPOKZbVKaZW0aWIpvy+bZVOypUYT7vFx9tGz9zOcFuDN/+gIHIEjcASOwBH44cB/1lQM4ZNhKecAAAAASUVORK5CYII="} \ No newline at end of file +{"allay":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAV1BMVEUAAAA4jNkuh9Ypg9FBnNpCm9r///+c/P+A/P9k+/9N8/hM6f9Q2f8+5eo94PdG0P821+4s1ewiz/8syf8ox/8bxPNNq+wQwf8os+hCnNpCm9oep9s0h8D7j8AOAAAABnRSTlMAoKCg3PODq/XXAAAA60lEQVR42tWP0W7DIAxFb9OtwdA6xQ3rzZL//84BD0nRljzsZdqxZCx8hLio3Lz4GwtYMWLDi4jnPM+vwogNKTTC43Elr6vgRMQ1wvM5ktsbvRPXN38wGxKHMmnI9M65vgxavwsg2WCpCvlSg6iqlCF4ceKbFEGZVC+5NFFXYUtxZzILl1xmiffoxUcA5DUHKULZp6iqsQzU6KNWYcxBUMnp8A2mwWxAhTPR0qRYFs6sDT+zTMZpWj5pO8L0wamexJ9xXvm10J27rrQ94dSdOqC0PSFXPV4JRuwRzIxGHMB38O14j4N9Wf4/vgDzpRGDwkNeQQAAAABJRU5ErkJggg==","axolotl":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEUAAACvsv+zsPmmqv+nn/+GkPXWhCt+iOyBb+d1b/9odutodOyTWuRbb+NlZfS0W0xsV+JpVuNNWc82QZ86AGw+Ir4cAAAAAXRSTlMAQObYZgAAAUdJREFUeNrtk9FugzAMRXG4twFS1jbl/791cbJUQnuAmE2VKk5cKpDukeNA9zeAhP4mwDlgahdAEoDm1dAukIzmlXaB/HBcUGbQJCBkBejgkMrt3j5WeYGD0iAglkXkehVZFlBQ2b0FkKjtE2CjIIYEUfIhESdMCUyWoyBFZPZI+Nks8OUs/f7kXSsLgCxwiRbBl9YRgddazcC5lhnc/T1VFdQObDMIwdJBRQQhYNWBTTCXYzR0AMZIyOy9c373FuQFGXLJLzYFEJQvQSHKgwKwJQAF1BWqIBC6hNlKbAg0GPXyjDHkeqoj6iVAn4DdP/NQhuHxsAr6HroAswB52QUcySTgeGQGg3J8lPY55h7Q9705XQdpEgwaHXVhtHZQX6Whew+X+mfldsn5W3fEYM9fVjfm/pXShd1g38UrdvuIGZycnJy8kW/CDQ5IMRlUUgAAAABJRU5ErkJggg==","blaze":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAJ1BMVEUAAAD//////4T/+Ef/1Sj8shf8lgDReACrdQGLNAFsMQBfAgExDgs044iSAAAAAXRSTlMAQObYZgAAAPdJREFUeNrdzzFuAjEQheH3vNR4xtCkibyQA4CSCyAlfZocIjdKm4sFxAHwGKVmQo21Ts9X//IbE1evBfpBjG9ozXDlJZkKTkAr4IpShNVkMjiJ7wuUkwEJhcAmAzFGNcTJoFisJZph6heJiG7xDLT4XKRC4KiubvSf24kY6hiLnVPMVfE+NhPbo2Y3YVBfPA2/Q3PkchGGx++H4yZvd3GdNrjBr32FeDzPUdN88Mvn7QRHHiSX9SkMwnxYNTdkq7sDlMsLkZHRBEwBGaBpKnQ6GqsVegLIfrDOfOkGI0W7gQTN6JhJQlcYCOm+oJyjHyD+F7jg7v0B5TtIgi1mkx4AAAAASUVORK5CYII=","boat":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAG1BMVEX///8AAADCbT+6YzetXTKgVjCZUCuPTCqIRyg96zNeAAAAAnRSTlMAAHaTzTgAAAPOSURBVHja7VTLbus2EBX6XOcPimGzL3jG7rbIzChdFjap3GUB65Fl0ZtY/oFr67NLqoljFVDkRXFXOZZnQI/nmOYcnqL4se/7U59xyGGy+qtI+OanHDdWvOLmEkXxnWp1DKZqj43mVB2jakiroH+8EfhZgu8t2BdVC/opWCbKq6hppfbbG8F2juApxqp9RRPDp+G0f112hyF9/9tfxr+wmiF4NvZE6VmNMdyfWoAB3oHRHs4ENrsDgzYChcYc4/3eHhq1YFWOXfr+D3/mrjueIdhHgVgVhMcYu2c1a/dRY473ZwKPGYLh6Df0MzndjvFxeFoDW1glOT4Q2n6/81TcydwOyqHvhqHfH3I6NN3jcBoSDmM6Oq2GUxAqUM5OQTjEIGBhtm28b7Sq2pgnGWJbslWJ/cnP6+C5jGKKlUXvaePrh7axJmjT1ow1r7ns0kZOvpAwt4PSOyFHxBpFtL6vYQIBx6oxq1zZJ4IvVGy2s2NkgEO0ynYcY7yvg2pVNe1zp0lh+RD7/u9EMDvGath3w6k7jOkxH2I/5AMc0/HcJavZMToLEI0rckSrx+GztcGsqncQcHfuWtmskG69c3TriDlaFbvPNUSwEw5V0/bnLtLZMSqiCrOM2wgP+1A2eYSat/G2A8YcgVngChaj5G3kyxSqJ2vbRrBrD+cux7O3cXKd4+/T69z4HZFLj3u5tGvXTwmKuEXGCv0rLn9COELBlfqXSxvlvwS0oYxbGl5xSbDsieS33hP8ypG/cyBP7C/qy54I2TFUsE5xJyrKpVzUlz0RWgsEWiprrQLWUi/qy57Y79Ohp6frcsro2ov6sidSAI8GagJhAURxUV/2RG1ijM/pXcUzLurLnlhgOyeDjGVPzDqYymBSd/owHM+eOKMDAmHlHYknELtJnfvDcIz6jici7FjApQlqQGUtk/qv2RFbfccTEWqooDRkGUxUkHGbCfYyeuK8DrqzDCYqyKC+Hw9x3hMpMNYKmIIFIuBJfdkTsw4eJjKY1Jc9sQBGJbykfoJUX/TEgjw2BHKgjSM/TJDqi55I3rmNzwyUkvPkSQj5gzvv6GbZEzH6ADgK1xCDCtISlhJUbpY9EVFWdVSwxUY4WgDXMQgHrsHxCk9sX+ygzcjpctneLCL7gVhAaRaE2QRQBpeM8TXfOPWDf6VwVsN5GRe6l3VwDYHztElvuJQchgmuIaCEDdFForu3dAUBtpIHBnAevKmkzAJAa6heRTB2ytgBE6juFGBBLSwzXf+zDsaBrwUQiAnALChFwIB+DR28X/4g+CD4ILgW/wAFIWww3uybGQAAAABJRU5ErkJggg==","camel":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAATlBMVEUAAAD8w2n1ul3prUrbnz3xi1ywmYjLkzfrdTmoilu4gieqg0Scf1DaZiyMcEV/b2OnTiFtX0h3XTNfUj5VSENfSCN/ORlJPzBRIQwvKBwTHWK4AAAAAXRSTlMAQObYZgAACApJREFUeNrtmItiqzYMho2kE7VeKbRJGX3/F110sQ0xlNC0y85Z/6aJLwJ92EYWhBC6U4iil5fjy0uYCppGPmEiRIyRtSBFkVVYC66maQCbs8JH+iuYDgngeDxuAwAwovQhInA0GpAazwAauBbgcAgGcBTNAUBOBLPrB0A+awrAaADMMwDYAkjmXQb4+wIAFQDDkgAQHKCWHnYNgGsdABpYBXgCYI58K0BUMRMicTRlAAQAXAbAx8dHfGLmpxUAaK4D4OwfkLkCwBpAqZ6ezgBPT1Iu/fsXoQOwAAAgOYH6yLeZFKQOJut8fX17ent9XQcAhD0ARAhYAAQH3t7ftfb+/gZClwHwTZgeXx8RpfxpgOcCQITqQ1YBJ4DJCCQAdIDz9aukgPjZNWBBJ68AI5DpiIEIVFEEKmEUFAyAKCswf8PyGsAtgBeLu+5fgG0VEHEQbwXA2QhFFNbUFBkANHMB6HVlgGMGkHa3YDIAZUKKMZIUzL+OwToAFE+N/+UmrQBOASTurgGgE5Ao+Qe7F8KaAJNrkTlzlLME3ucwE4QMgJCngIg5gBO4Y/sxrQMgpqtEQkLU7wwiVflUQ8h2E6iIWKRxAI1A/8mmAUQY1qReHbdIWmDWWgGwDjupSVQFVIfyXQq4FBdXMok9Nub+LPk2AA4I6ZILCC7dBSuZxB4b88zEImIDELcZIJWJkJAqgKVMYo+N+0ciGwsFmM5ALhLLnwJsbeQ7bAyAAIGYMgAnAiz+mVj11QDqH4EsCjrAljYziWJj3RyLagAktI8RMIUtbWQSRZHZt9lVAGZxTc+EhEZA2wBLmQQvAcy7DbkGiM9Hfubjc0S3C5uqMwmRpjIi9Hs7+AAROYAQ14P0fDw+H+XrYiAbFTBYQc/pIqLLTEIVfBNSC+JQ+tVadX2sUvcKAAbARUQXmYRfMjg0s1bNf14FeuD1sUq2J2iQUH8b4qnoMpMg8RIaE5OIA3m3E7AYXR+rfGdH39fTNfjv5UaOZxUAJhuB1A0GIEbboaIApG1U3bh/MoIagAjnI7AEQLQHAETEBCIFiHJmKyxlEgVANJkCQAMQo+tjlR+ZvHjcIbddzCTyIiRi4ckGnnCL0YeximcAlkawpRWN+08El5mENTqAj1SIeiw5tk3iZqwqAN7MYuMAZQSWMwmPAzGyAzAno+VoWcWq2RSgYzFj0/gApDNVmYSYCTSILZtN7k0cXAPMY5V8pgBGpABGkgGqTIItnRWB+YuBrBOdwGxmmscq8zGZAo4mRmjm/mOVSVhCb4rmTwDIbdhBLwDqWGWMDhCTHIBUalllEjOAyOs2M1WhQk1qgPouWM4kygjYFPDEhsxmH8D6CCxmEtMRiGs2M63HqnoNlEUgzcuZBJp0KtdsZlqPVfVd4P6dYDmTQJPBrtjMNI9VVSByaPYRyABmVCsDmMK2qlhVRULzawCRZkbogvwE0yBKgeQ3Nc9VAUxiVQ3gCbcGy2ozcgDKTzBi5G8TGqloq1mU73ChKlaJlwwAYHcOAfgUuOYAVN4IEBIgkdZUVACkWAOUWFUBgG2HbJsh1GtAz5sB0F9pIBFpbQ7gPVc/GdUJSfJfRiCfFwHBLpKJDZkQtZUEUcTWVwOsxyqwlIwtJQOOsQxAAdA29a5dFEk5jcHaDICjnfv6JyN7s4SMoIk5c0kIHIAFwNeQHipOSBxZFcVWARij7bY1wHqsUv+AhKAEpH3qRWTH6hVb3GPx7GKeNiMjl8fXfU9GnhVL0c5WQvEXyV+q6o8WSoMWbQq0XDq1Vo5LQv/dCeDnqAWz54LKJru/GcCvL6uUPVsldD+1XTm4AEDYI7DrnF0hpjKQrzzKLTgbIRsbx4MI+wHyO8lyJSAVL4p/JQD3KJ354ss7TDsuWh/uBGgAmTC/1wWgNOeAFE2EkNYEJTutMEKzC2BcADACBPRNldK6xwkApnuCiqH5NwABjwSwBTDUAHIK9sQIPLpaK6ImSfKFmJ9Bix0xa6t2ap8W9gHYhHuMRf2j6GsCiSPbh9DnPLqVZyZgrQAOJwUK6+pXXrJH4pxykzqBRgGSCHWWtS9bMkWwPduWMpMVkrP24eGh7YfhQwDf6/NG6/Eb9cxS1T9m5UTpy3Zi6f49qfWJrC67d79tGyrZLehZrCgngQAYI6f9V+v5CTbb6wSopO5coVb7IAr/ltqhFw1t+D7p/I6iUGsYx2GQr3A/Cdmt8on73DgO/RDuqr7t/1yAdq3WnSqAr/dSolldO5xuXgPbXsqOWtcOh677srtgWK2N7sTVjaXYnU5fEwfavu+G3gdRCl3ft63GnrYagTtEwjVqL/SC+uvXL8Gt274PSgfMh6w19Uttfy7AMPbmYRyG3jQstX3n9jOI9Ne11BZ+9KMf/eh30tj37XkLa/t+vBdAa7oXwJABhh+A/yVAOw69J3L9MPbjXGFRnrkmm9t0dpnTmHFsLxKNsKgzrxCb5a0AYXKGuzzq3x+gHwpL/wPwA/AD8F+OA22/0fW7ArTTveCjzait6KquT6mf7oYfbUb9sLGMvjsfuD/AuNH13QDDuNF1f4D7Pxd0J1F3pycjf4vbHQ4b8aKqjEPvMzDus9zWNoCfd7C3bTst9wMMVWWv5e37Xl3ZtvxjAA790FWn3WN5O8DYySry17ujlK0STKk+mqUbjl/22qAbxlM57eTNbnKQ62JZUL3/9kDUnfur8LnD8vZANI5V/L7J0r12G4XqtFXFtd/Sx32j8N0Ap9N24R/eOq3aGiGdPwAAAABJRU5ErkJggg==","cat":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAATlBMVEXv9O3r8Oj72bPW1sz71Wf2ymD1yF7ywFnxv1jvt1Pqq0uvdh57bWJjSy9KMBc6Kh0RDxgAAADq6urOzs6vr7C+c3NanRJWU18kJDEcGCdfq47cAAAAEnRSTlMAAAAAAAAAAAAAAAAAAAAAAACVcz0/AAABUUlEQVR42t3T3VrCMAyA4Yi1SmtlSxSS+79Rkz6R0dEywTO/0rPyPst+IFhiMSJyAW+amJBFA08EEWBeBQtQ/1BKuRuY5yAusACo4ABSBUpFxbsCPkJKDgiLgAktANYYOFhyDlxQgFCFbUA6VaGg9lsAj3LExmBCi1i8MdDNBWJ5GBDmFmBhFuE7ANQWgInVY+q8B8wh58w8gy2rBxASIRJ2gVwBOOf3oAFQ6wL1kP0QeQU0AhRdIb5eAe+15V1vAWqB/X4E2PgrADtA3O/XgJ3WTSDeCJi8zcc4eAo+QroBsC7hC4AMOAspxGQNAUZdTDwAtkdAQrTdALQAMYX4FkIYA1VwoNZ+CynqCLeuIOSkAYyAqRZjFyDNAe8FytIOLuoCNv3hkLPtkP3k8xNc1RthZ6YiPwAMmmoAHUC028DGCKevkwg8DnxafwDmO/uHwDebkIAap1EwrQAAAABJRU5ErkJggg==","chicken":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAALVBMVEUAAAD////i4uL85XDT09PhzGLGxsbgu2nTrlrQqT/Bk0OWcjRjVkH/AAAAAADtfCsnAAAAAXRSTlMAQObYZgAAAO9JREFUeNrtzMFJxFAQxvFZrGAewaMwwxQg2IA7fMzZElQecxZswHZc7CAd2MM72IlJVoXEbATP+7998OMj2kmHW6LXQ9/T0AUt25UuB/D+dgQ317+AXLZ7OgxN4vmJ5vGxforGXhbgSj9ElFqjrxYXomN+GriqmqG1H3E3B7DmQN0A0Wpk0laqKlw2gKv9AdycbRNE1dgA1SOy0hTWQCIrgqaUlnGBqkLY4aeAq0FYfT/OFRBQVGERWQddAKh7ZuFVUCwqorow8166jgVzoBaZWV2FRZS5iM2BYwKwBzEfjJSYg/zOIx7hDk86948+AcUmS5dD8ZFCAAAAAElFTkSuQmCC","cod":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAJFBMVEX///8AAADr2sPWxa3KtJXCqIW2lmusiVmScVqEZVEiHyYAAAB2QJV6AAAAAnRSTlMAAHaTzTgAAACbSURBVHja7coxCsJAEIXh5w18RSRiZQT7sAS8Rgyz2kbYIN5CiDBbx8CewHM6QS3sLf1hivl4yMc626+ZCgKQzENVF6eSsaCVkRCRfCiZhFYwcM4t+13SqFdOwS6/Vw+5HA3qFyz7beOqriX9ezFsKmlcySn4lFKMMQiJGYWwR9VQyTnGmggh3M7eeyGBQ0u4TwZkR/C7P/weVk/OOkCzBdD8ogAAAABJRU5ErkJggg==","creeper":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAK2klEQVR42tWZ61NU5/3And+L3zTNdDpT08Q0NiamOtFG8cJlQa4uy22vsCzLLrssgtw0KooIMcaqFFFRXOSiQjA11lwIVRF1QRBW7gIuy9H1pLgpM9SZ/hmf7j4zzXT6Jn1jkTPzzNlzec6e7+f53s+yn9piOzdzwltJp3SdNrmZW1IHKc5E+ufvUDJhJndYR4/UTa5Pw8ePrWQ1mrjp/5qhhT76JRfLlvoWcXYzceei+EMAws7v06n070R9LpXxF0NktKSjuR1L7/wtSr3ZHBgsYNDfi8Gp5Za3gw7/1aUPIHkwjLSxKAytGg5KBZT1FOD3+/nkWTH75uwMzQ0w9sJNXk86X/nbyT5lpuqvhWSPJnFL/mrpAyh6bMI+osPUmEnetA7bPS0j824OeXdS6DbR4+ui23MDSZKYm5sT+3JvPoYuJU2e00sfQHrfdpTd4bh9A0LVi3stQsiqsV3sdtnF7wOTeZQ/ykeWZbzyY/IeGnDUOrgndy59AHG1CmxuHa1yPabmDF68eEHB5wVitXd2Z9Ev9XJkdhelXTYBQ1+nE5B2XilgcL536QPoePInrnmvsOz6MrT3NUzNj2NxWshx5uBodmB2ZmHo2c7M/BTGJgPWhmwRKfZM5nBwomDpAzD0a9gxYhQAXr/6Os8XvhcAhuUB0j/X4BjWUThnxNRjRD0Ry26fhYzzBg75Cyh/UPjqA1DPxKC/r6Td24RjVI+lJ42cOgtFY1nYh/Rcf/wFy7/9JZruBNrH24Wa1/gP8tn0XrTONEpnzOwbzaPl6VkB6Xe33iWpbjslwxby+4w898/hGDSwtzdPRI978i0+9lnZNW1FU5+2+ICyHqSgP6PjrHSUlBYV2t446qQTJN2PEgnQusa1ATAWElzh7H1UiKYhhTK/ncJ+k4Cx566D5AYl9z33gwDEuC13cGikhPl/PMfRZse90EvpkF1cW92+msrJQgrdWVzw1LL4Kt6ow+fz0em/ykXpnMj24k/GEn8+AMBTTvJoOKsy30KRvZlG+SzmS1m8q1sRPBYrWnilUHj/q1NX2dS1id989zY51VbMrZlIPi+H/1rMoYDArmnXj4CyhtScnq1h73j+4gOonCrih4UfMHuTyXmqpsN/DZd8gxb5LK2yE81UjBA4cCvFMyaSb0eK329FvUGVpzioDQJE/qwRi5TG9/5nYv7oC7fQkE/9JVQMltAr32PFzTf4xdev0/aojdimGJTuMP6vbdnPFhWAozsDkcpOWcXqKFyh2CU16uloqqUjnJZOUOgy0yTXs1L/Br/VvMmw5CblrIpcr4bM7kQhaPXf9lPeJ7RBCH3YU0qLVMdl2UnR7WwkeZY94zmUDxaKOsLQoqPoSebia0DecDoXZScJDbECwPKOX5E3qSX+dhjX59r4s9RK+kWdUPnA7WKsMq2gWDYxKPWxe9gmkh/9ZQ2Vo6UiTzgwvYMDDwuCgor0WFevERlj0YgZe4udPc9zMM4oGZOHFh9AbJOCK1Ije6d2EXVRQeaFDOJubqXaW0mDp0ZUdcVXi4Tg/z4c/QbSL2nRtKcKDbjmacXozMDeamP/QD4LCwtMShMMzw1gv2wjsS6Bsgc7xPlPPKWYXSkBGDYWXwMmdUEBRIJz1ddMu9yMsS+RG95vSGlMEit94m9lwuYbpT8Gzwsz2FYfQcmMGePkdjq912iW64MOVAh9yF3K7LwHq9PKvhk7H89YSW8w0Om/hnu+lz0PczFeNlA1Xfzq5QkZl/W0+xqEEzwmVfG+6h10Bi3bdfEoDKH8ZPXYmIA07xUFkk/2sacvlztyJ9f9X9Ar3eVLbyvai6lBkxCmUDCQyRVvCxVPCnCM6BYfSDAiqM7Fc9RTToOnmhXhb/KB4X00VdtZqfk1PzU/GDojzmyiyXdK+ABbgw31hWTOeY6z85kRw8x2kTdc9jYQcS6MzR3riHVFcdxXRlpf7OIDyD2Zy+GZErJGE0U4eztlOaEV61hr+oBVmrf5qfnbasJIm1BgH1YzK3kplIzYn6gxNOsolI0YHii5LrdRIBkJda1HRJ7eUHIGNDxaGFl8ADMLjyj63sTO/mBr6yve177DyqS3eCN0Oe9pVvxXGmCYiiPTpcITeNa+GRtlQ/kk1Megn44ht19H91xHAHAqb327nJQBFbWzxznmKRcR438ucLCo2ekxYvWoaXhaJ1bkva53yK4145YG+HjQjqYrhpOeCmESyV0Rwjeo7ilI7FaIVpnyYSiq4fDgPSJ9zn6YSlqtikfSGFGHN+NwGfjUWymumbtTRNTR9SuxdxuELyiczRDzj3krhSPdULWWNRnvCT/00gEE/1T7OJbtfwnn/PRJRNX3zWtY2yzMyjNknTeyz72DW/6vWd3+Hkc8VWgbU4WPiOvcjOF4CiFHP+DDPatIP5HGGtNqdrgzyGjS81R+QpgplKQj0XQG5oef28oV2RmYnyaSqdIHVlE3FDxLF6F395kS1ls/JGT/GrRNqQLuSwegcaZSMGIUL7Kx6SNCLm3gnq+LHZKBfRO5jM8PiZfXt2tYdWOlKIxCT29AUb+VyMBQnNmMyqUQqx92KoSPLOuprDuIZTKZ5PEoATTqQhgfFa0XYfCy9zza5lRMLUZszTnoz2pxPDBQefIgIZaPSL+kF5mpfUaDeiLm5QMom3Dw2Q+7eDo/i31Wzac/lOJocbB/No+Do0V4pRmsj1Ip8ZsIrRMtcsJPhwiBoxtCUT0MReOJFoVT5piSbF8qCls4m459yLbbm1D3JbHy9pusav0NIbYNNEunSGxMEN2irM+NZE4mElUTgq3GROa0EtOTJIQZ3n0b2+D/ICzW/r2C8gGRw1Mynv2vUPfjfmruEbl9OvIHM0W1eFE+i84TTfL9SCIDKq19vA3lnQihrmXj+aJrvKM+jy2V61HsD/mxAoy5t4XMaj364ymEVq8npGINH5jfZeOxNWwIqHxNYH6mW0VKb7S4/2df/D9bKta/fACHRoqxNdkEgP8QXuwDQxRE6XeVYvWD3wlSxxSo7oRR7SkXDdOw2hDhwAwXdFhdapHsZLgTOSkd5bWm1/j5n36OqnubmK9siEM7GUuyK1oci/mnN4lnJThjSOmKxdFsI6T2Q2Euy171LbIhTAgfcIoilT4tHSHmeAQR9VuFUOrxSKJrtlBRVyaupbQkkv/AyA3pujCbmEZFsM8gntEr3+XIuU+IyozC2mrmxvy3rz6AkKO/I++4GdWJSNLOxPJZ9RFR5YkGi+xENxVN0QML+2p2EXl0I6b7SSKcJl5IQDsdzw6fnrGFIYzjCcIciqrz6Jr/jpvSN8Fy/NUHYO7WCJtd17saU18SJdUFRBzfgPlJkugFnJKOkuPS0OG9TuSRjYSUrWVPTQlrzKtRnNhA6IH1VJ05yMZAKN1YsVZohmNCg8GTENSqVx/Altu/FwA2XQph273NQq1//+lq1u17H6fvlHBusefFt0VsPTp0dRoRYYyTcaJeUN0JF98RExpjUN6NEB2prEklCbe2cmwpAPjll78QAPJHLWxoWidyg8SuSMrO7KLs5G76JBc5ly3onGrS7kYJh2rxpKC8E0Z8QxTGVl0QlACnu6BG2RxP/M2tXJMuBfsRS6CtPhZNm+wU9noyMAKrJjrK33ivEGLdyOHnxRQ8y0DfrAmGUfElKfNuUgBUGFkziZgmVQzIvaIBUx+A853vS5J6FOI40Rn30gH8ExZbYyyH/1DEAAAAAElFTkSuQmCC","dolphin":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEX///+wwc2In7V8gp1ZV3NXVHBIRWP////D0uO/0Nu9y92wxNmwwc2lutCmuc2dssmSo7qKmrGAhqJrcY4ICR+8V/49AAAAB3RSTlMAAAAAAAAAVWTqWAAAAc1JREFUeNrt1GGPokAMxvFRz9sd2+kz5fb7f9ZrmYECnuDmkn3FL0oaSf8RJaT7iB6Pz8/Hg3J3u91+mzRCITtVIJwNS3JcUzMHSlkErtfr3fQAPQxB8uhVYPAA5xHf3fQNSguU6eSLwJ9hHXBpROTXR5S7F4GcLTBd5ioQP9BuwJF4gWU/wAt2tumBpnQRINoEhGUORIHeDggE0gJlWgLKPHUvLkEEqLUCIhZAVQXsaCoAP2q38yMG1Y8vdcOg7utD9VsBFgNf9zfEcO7eCuTMvdG3bb0X+K3AL3sDzGmlFNpVZskB22xxR9sRENkGUAqA4rDWPoqPk+OngIaKWdVnaVAVo2pDBKotGl+KQhurUa1zQAQjMRHICywCE3/vSrq2h0+/8KnDvC5s95m5D6ntR4BZLpfL+BgRv7WEKKY0Y03d3UWALZ5GlLMAkjPFdBQgskCOQKbl4ThQiEoEQHlEiGkRwItA3OsKalsa07cCg+/51hBTBGQvIIJxTWHUJ0Bk/V8AEXsKpD3M8Ux1ywCI8F5AwJD/CAhUtBUkFYeNMvlXQABVf3kCHgBq1YVagQgcid2N6tIxEWGXZ+ykScdie4En6XQ6nU6n00/7C3s4RNq7Xn9vAAAAAElFTkSuQmCC","ender_dragon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAAAdVBMVEUAAADgefqKioqFhYV9fX17e3t2dnZ0dHRwcHBpaWliYmJdXV3MAPpXV1dNTU1LS0tHR0eWALwjIyMiIiIhISEgICAcHBwbGxsaGhoYGBgXFxcWFhYREREQEBAPDw8ODg4NDQ0MDAwLCwsKCgoJCQkICAgDAwM0IucAAAAAAXRSTlMAQObYZgAAEQRJREFUeNrtXYt22ygTdm13JSVxnKa/XQsS+1/U7fs/4goj9AkNFyFF9lqHOWcOFwFWycx8DAzqStHb2/5N5Rjn3Mfh9uH+GAc0rG+YRvZ92+/3zQCMH49HyadjnWfgaz2zt1dt6j4MZcknlT82KVP9rykI46g+jKlx9JhH/WzQBOBdkdYcmoDX11eVK0v5spp52S+72/v6oV71USmIjiPbkL4+ouOU5fC++7e3RqQ5/3U6nTQz3i+T9u0zVz/an3OZmkTac0b7DiDefYfhfZ+f3/bNAJhzLXxG2dPe7Mdc9eAViI7DWL8/GzQB5B0G9f3+/e0VAxiC2Ct72qMt6ddpU5aSf/9Tp9YXhxKRvkMnAL+FvFf493me/yXTmk3B47xftrRHW+7oB3aKIhX4vnINRQH8FvKevvvn3fPzfves0rc96wsi65Y5c7fnui0sP2Xmtt4hJRqKAuTd/X1fX9+enl53T69Pu9c6/xpCAdKetoUAU4YozoUCx0gUkIK8e3veve32V6EOoQBpT9oSAQ5bcqAAVSgw6RsYh3PaN0yc+VFgqNV1oYP/d8F8LAqopRQQB78bohgUAPHSKrTIe/rTcaajgEIZyquhRFAgYMUNy08t8GBLjvZQqDCCjPRHfMT8gmhZw6OtzQIPteSkPeMsqq8UeL3+N/0T7WMcdbvAWroVvkZ4ugLuWMNTxHD5AmEUgBKRvnGW/0RQaRCahASItrcKrdMX8K7hz5+y3fmslAh5WR/qSy1/D5WQJ1ZzGjtQgEWigHz++SnbfZ6hRDIv67197ejDnPm+1WyEBRZTCxKHEnTL2sqr8iAUQL13Aj4+ZJuPMwRY5mV9AEF8/git91hfziPKsPbUgY32BajAc24ohacv8UGQD/sFjBGr7y8zj68AjvcFjn2B56yvFGEE4SyQp+OUPUsbLJe+8iRfAAIPhYJSDEOQkuYpQlELCuZmmYXLHGV3u/Ca3BB4KNsgFHCgD3chFDU+YBbaEXK297YLr+cNgdfLGCgF42wYCtjzzMj7JqAcXSY+RBwKGAIPxPk4y/TjQ+aHoIADlcoACritN6fP3eVwvW+JRVFgOFutvQuhIlCAWnn6PJSnKKLGNPf9+8se9RwCDAe3aav3/Hvv7LT8zIVEAatOygQVSF/aDsx99UABn3JBsPFbkXnfTgyPKMPaU0sbjQ4WX4AHlAt9I/O+nRgWUYa1j/AFOEMf3jkEO/z8+fPw+fmzTj/PMv9TtjMPyGQf9Ee9f/1PEcG3E1OS8jH0fJgvgDZ2Pry/vx8+Pt7r9OMs8+94FmSMH3wfigJEwMaiAicWeIgv8CUnwp73CfsC/jV8EBWmngswhrbmya4qrwaQC4kGnRGUx5CVD6BCOe1cwIoy4NizAIJEwR0hzkO+QBgVgALxvgDHb3KO8azto30BO1qFUCBq7U9QINYX4F1rzsjvk/ZhXyCICBEoAKvqKyNfxvsC2FWSqf8cItoXsL93wBfg5FzAW55yOgwU0P1Jv0koQPNhX4BY+cCOUSQKcCsKYIlDfn8CCnDkZ/cFqNUdfC5Q6rYqlTwWBfA+9N2G7gixoC/gbR+upyig26oU449BgbBvQscM7viwAAqwqBghigIYkyEfiwK+9T9Fq8Bp8CTfgCJCwKqT8caiAP1dZz7mNDiqDOaDT4cZ6TcuLkhxB0lUvlUAKJr/XGC8L0DahX2BMApFRIdGMEEB/9o/phyut59GXwUUB3NN3oYa1v6aL79fvtX08vuCfmELGtr3D5V9J7OE+dTTaEv/E9fvggmIiAnCDg22HM2yFmpSPsWcDmPMSez1Ay6/f9Qz8PLj9wXt4mJq4tlhgX2Rosdmza9OpOXuT9O33g1SYzZl/RtqPFX2IsDl95+Xmv5ABeYnxuN8AXraXPNB5g8HxsOn097fryfgz48ff/5ABeanoC8QRBFZdzgef177hHwRf4ySnABJUIH5KTJSFKEYunz89vKtrCfgndeZkxGfZEMd724QJuB2KhARKQp0gDLU7b69vHxjdVmmsmwokM83wO8DBRTdUgVid4QCvkew7PMDMAE3VIHoc4H6Gay7HVXa/KBIVTjTnQkorZeCZqDoSFEWPC0m7QMogDU+IypALgVNp6mRojTmqM9xkarGCbNHBfb7t/08KFCOOh3WbenSCu08t9ZAxpbqpaXSci9iBhXwRIp6bpOZVp6zv1++XenlbziwQAke9iVaZcIEoJ1xNXQGIrsuodghRnyD/7cTwGzPwyjQKgEmgFmvhs5BFmsfE95wFdx2AkrynJQH+jI3RYH4GCFttS0ogOcnLtsj5UphRvLMKECtvbt+KlPnupeXKcrN786IAlxbc2LZ4QCjfvLveeKDfM9mQ4FYYfwK1OEaLbhCCSgVFFKVgSi7nQMFIFzL5vwvoIBzLQ22L2/6yxXkewrQllEPNhQETBSIXN6x+wLYByQoIC1/w9/z799l2jKx4kGO3P8fOW58jBEmQCpCixby2X632z0rllc9ZaoYiIAdnTDHWfsZxrX7AtgINU+A9b1oxfv6wr9MFQMRYFXjOLzzM8O4dl8AG6GGsrb3op92kl+fnpA3EIFHCGZ05Od4Hnz3mGMj1NiR0uv/mq9Cv9upVNZJJhsakRze+WFjxou/e8yxD0iiQeX6/8r6wr/MNzx5AsL7/5PGDZ8u0wnovkvkXeHx7LLWI1Eg/u5xdxeIRZwqT0WB8K0xNse4nHkmgESDRuzoRHH86XA8D480xQQQFIg/HY7nQIxQNMdHmmICjLV/5I5OPIdjhOZBF88E4Ddxihymuaz1SHSJjzS9tIQ+ZXkrFOCc+erH8/BIU0wA+vDZUSAcEToZXRz1ngnAVyJiUOD+vsD0GCPKYRS4my8wHV3GsedwcwYUwFp+RnRB3FIvL1OUm34zTABQ4Ia+AE6PZblU7ciuFNqGUYHx/6gv4KgfqwSeff15doQmjutEgTn29WGxSaiCbzuzbdf202M0ZYwJwcT4qMNYxju0bQ3hn2Vf/5F4tRQq8jy/Jbtf5F4TkGVZsV5nRbZeb400U7yuy0hlXf1cporrtiiD67p2PFlux1y5KF/dh/Jiu91sY7koxvZzv8j5cp8J2Gw3m2gucvSLYvffObvTBChhjeZsbD+3Ll7uMwNFAQGN4KLYjuvnfhFxPt8PBa4CmteMNM9VCguuhF/mNyhL1v2R5i33FCf3TsDlTihwIw6gQHW5qRLkRVHckakqbPLL+ZYykOcFEVZVhjDX9aYAq7LuhzpDYVR7jKvHqp/pvpuCqsI6u07AzeyAWsJgKRPF6De2P1WFbSEuUgluJQOFtuajUCAvSP+paLDNxVnJwG2EQAuzSuMY/fLR/ekEZGoCbmUJCr1WHyHA8Bmy0f2pESwqqQAt3wAF1JoeKeWu0KKueV6nqp9uo/2DXh2UBfVWFKjU3x88Nwrk92MrCmACuiyyOR1lup8/th1o3CfVgQImVxCWeYhzXGr3neaq57gY4z3kwyV6FUXqaU1RwGRR5Le4bIVQ57HtQKwTJh0Ik6AoQBVgK2aERZxKt1ue4XYq9YZ6tFu07jAJLwqAi21ezWsMGfb/h/y/A1y3DyoV2loVxo8CUIBNLmaeAOz/D/lqNGNBoeb4PwY8n2DxokCrDFmRiZn9A4Ro+4XVvEXmRQFczm8mIBYFKq0AVaEUYzUjDd3v56fP0+nMuEoDKMBlO8QnxaKAAALM5yTHfyHi83j6lNZdpj4UkG0YMz7CG4kCmIB1pvJzWf/eF+RUeiy59W7wx/H0IZ+pNLy0AkeiQNVRgKK65me2/jTlnLY/n36dT1ynY/+HmQEo0KY56mb74gSzp5zR9ufj8fPEdEqe98Mh8OFeogwBFKhaBUDdbF+c6N8Ndlr5o/yHf5yOOqWC3wusM1AAS6IwClTnJs23SgHmUQJ8PxQRpShTK3+6Wn/5TKVkPBKSwTinF2+4BwVyZQTFWaVy61DnZxABXHbvpviiHJkAZf2POiXjkfBqxjgNtmMeFMhEdwKqrFaAJi95FhSAcJKUTICy/keVuifACPMgwXoe9NAWX7QK0HOQ57hrDOG0pNzgX8r6OwPkIPhUGRBs50WBQnSWwUIqgMzPJQP4fqghpCgz8zulR2X9G8FGvSqbH/6iyqDrvCjQnYAq0+UOz+cDQEibMvmwbvn+fn5//zi805giy9VNxCupZ1AwDwps8wp+gCi2hWjy4Bm+OGFYf5SpgB8On4fD+X+H2WKLtptcSPTXCmDdIfpSFIDAQrBRXt2atutMQAGyNSxAl79wAmCpCRrAgb0hba7LnkohQNEoxIXwl/oCuE9A0eD2E4BlDxTAwnPtBDFmpqtb03otJ4AoAOUZfAFYf6SrGxJQwKUAMxyaEetPfIFbEVBAI0C+zYXKO/gLUQDWH+X7oYBWAHJGMIMlcPkAGh3uggJOBai+XhFg9a07QvdCgSrPN9oxBtvl4ct8AaAByndCAYUAPQWoxHkGRMA9gM7llxLpXVDAqgAV8hae6X7CfVBAK0AXAUSFvJUXcFcAKFBk6x4CIO/iL70rsJYp4v91GQFx9rsCTRtLH5nirkAIBVRMTgHhh0Ps5i++K1D062Q8EOoQF4Tn6Icx0Eazjg51nhGokGMshwSEf7YVwT3ignBoxlkPBZQCZLAAs04ABPm2XGK5VfZRYFszwiQG8mj9b4QbAq7TDRXg4vq8fdYKOSJF0V6PSxRL/fu4Wm5Rf2Obb4AA4NmMoD/mX+fRRrMZAm0wqeu1y+VvKuFXitBDASBADE9BgHswCZ6bSMXqYWiWJdclXz0AwQHXwo/8NMf7XGWrhyGOHaiym5/y97+IB1IB1u44cY78pO3Xy1k8hgpgG7YRfuQnbL+qSNLVw1DZuXyP/PjtVxVH9Ego0J4/MI78r5EqoDdLHh4Fjmyk8Csu1quHoc7/VgNFsKFAXvgPwbq+QL5dPQx1LT/jyNvcdGHf+dN14HyzegwCCjQHcMjTlhkOxgIssgdSgXYJBEVwBM5Vg53iqnggFYAjjAs69kM4kefYCveyKB5DBXAY16IA8rSlvCk2cAIeDQUQko38ilJVbYYpQfVQKMAh/MhbD+EuQ5VAPBQKsDYWyVgOWScASrAsFEDgnPejXLgsQ4X+cVEAjjAzlkP2pa5UAuvf/IFRABGprJt3TEC2tiqBiECBx90R6t4Y84ZKVA/qC4R2hJSji8C5LlcPjgLUKXZMwEXYY4Wqx0OB+A/v6ltjuDQDFgQFFkjN39oaMSoeDgUm7PhcQxKEdwLWqyVS5+6wvjgDrggKLI4MK69DJlBHUGBxZH5CZZ1lFVUCoMACqbfU2RZm4Fy1eBQw/975dtPzC8TSUYDs+vRukImFo0DfAaaxQ9WyUYB8Skd9+lB0jd+iUcCy9ZnJIDohMAGLRgG6CySaL74JKMGCUcD2PSlRIIiuKwP5ElHAuv9fNZ8nr4SxHMq2C1QB6xmAqAoVrVlV3fpiszwVcG2BV81HaSvRrdssRgXCEyD0h3AF6rL18lTAfRBWVSqcGbtEoi6vFkbecyDRfM1ZwE9YhAqEJwBwqC6piKa8PBSA1ZepfUmEXaJqcShgGD0hnEuiTS6qhaEAJiAwCXpJVIgFooB9CVSZdZW+pFJVS0MBt/UX5pKouZAiFoYCDutP7w8LfNt/USjgjweqKlGRJdECUMCvANQoYkmk0GABKhAxAdRBXgIKhBXA6yCvFkDYCYxhoRzkVaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQo0X+M/gVoPrkgKWtroAAAAABJRU5ErkJggg==","enderman":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAABGdBTUEAALGPC/xhBQAAAY5JREFUaN7lWNESgzAI8yv8/z/tXjZPHSShYitb73rXedo1AQJ0WchY17WhudQZ7TS18Qb5AXtY/yUBO8tXIaCRqRNwXlcgwDJgmAALfBUP8AjYEdHnAZUIAGdvPy+CnobJIVw9DVIPEABawuEyyvYx1sMIMP8fAbUO7ukBImZmCCEP2AhglnRip8vio7MIxYEsaVkdeYNjYfbN/BBA1twP9AxpB0qlMwj48gBP5Ji1rXc8nfBImk6A5+KqShNwdTwgKy0xYRzdS4yoY651W8EDRwGVJEDVITGtjiEAaEBq3o4SwGqRVAKsdVYIsAzDCACV6VwCFMBCpqLvgudzQ6CnjL5afmeX4pdE0LIQuYCBzZbQfT4rC6COUQGn9B3MQ28pSIxDSDdNrKdQSZJ7lDurMeZm6iEjKVENh8cQgBowBFK5gEHhsO3xFA/oKXp6vg8RoHaD2QRkiaDnAYcZAcB+E6GTRVAhQCVJyVImKOUiBLW3KL4jzU2POHp64RIQ/ADO6D6Ry1gl9tlN1Xm+AK8s2jHadDijAAAAAElFTkSuQmCC","endermite":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAADR0lEQVRo3u2Y61ITQRCF5wGsEhESCrkloiEhITctQG4xiQQRuRuIKPrH93+Etr8OHQOloPyQbJKu6prNzu5mz+nuMz0bwpWtL+7LVqkl69lzWU5tS3IiJ9NjL+TZ0+cyF89I6LJ66di8+qoZ5mLpkIhnuqfD6KO4+e/stvse1OqFc9EXk1rpSCAD4G1Pysx46hoBq4Vv5mvZZpifzBuYvyXgtvseDHi9qF44k7N4yXwzeyicf1dsaTY0ZDW9K5WlExvVw1buOOg1YS2zF/TeUM03yaDwdun0Gvju47vuezDTP5dq/pMBfZP+YOPyy4bsvv5u55mnJJhTANKzQO5rRBaQ5fmqFBKbUkxWZGXhvUW/VmgaaH5TFmTGXFfd3kzz21K/501T3qKoGWCCSCbUVBNUtKwcOKeiJRNPZiU+MmOORiS6BDKSBADcvHjeIcEBVwqnspE9MgIgBLCTowkjITYyLVNj8zIbW2D+j7Xf80bd4lrvDv6fMyCSte/WKH0xEfMRcXPA1Hwlf3JnBiCKCOLG4kHnOZExIs8L+0gpAN6WR40+vQHgOefNEeBjj6esR/AMWEvvGQn+nChlgC53TfGRqOOoP/2BAlMCdkTB6crwWbZLF7Y6+HWsIlzLvGZA5zlRygB7YR8BbYAU+Eb2wIBxjHMe8FzD0klvwDzHdo0e+3MiQwAR5YV99PpfvVr7iaodZz7K/soP6w+cAL8G4LaXUIL8OZEigKj62O78diy9yQCAA5RmiPTmOgjgHPNEnBaZ+5wAnhMlAtidtZc7dYRONynmCjIoAUEjHzTyJpAInp3XJRPRY2QViKwRsc3cUafOKQGEDWdOI29LG0RBAOA18qb27AsgJNIEmKJfEcCIOwnUsjY7oa+NKLt6m+Jn2moPAZBDc0Oa9zMBmtotaZS/At7qmpRWAsgOAx+pxuY+GWDKXbwwEm7u7yHCxY7a7zv7BbxljupbVuimiBECEDxteoyIvrOd8qUBZROk67+pPEABTjZo+9sBjx70tfnX3tRUOSQnsmHgbCV/aV9t+Vw9M54aPAL4Xk8GaDfYG5+s/1MjZILHqE2Q7ev53Ra/Zuj7PgDxAyhC6B80BqoPGNrQhja0Qbaf/P4PM3XaxMkAAAAASUVORK5CYII=","fox":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAgBAMAAACm+uYvAAAAJ1BMVEWAgIAAAAD59PTn2dPVtp/nj0G0j4PifCHMaSCwUSKOPyRWPzQGBA4kh8LGAAAAAnRSTlMAAHaTzTgAAAGUSURBVHjahdAxb9NAFAfw8wRIDLkFEsSCG4kMHVAzwAiV5W9gXUdA1omugPWOEdpwzxthaP2qLhnrD9ClHaKuvQ/Vv2OnrZuhf1myrJ/+vvdO6YcZ8p/4jdZqoKLB87AchKCQqA9X2+F1HJa3sNuCUv/3ZfRV/q3hMP4E0A8DSABN46knV1prUYm4FJGK/d4KyJgyTfP74FZQZOZvkiSfG2AA86xYwyHg4x0U9AgUtAlDZiYibvN7Mknyb5PJeKxGVQelIPM4RjVG1Ahl7CF41XU9j8e3IG77bfb9yssJYKHXAWCf5kctoIwnArySra3pdLqzI3UD7RwK0f0cTD/cAS7rwL5TK0D5HjzJfmK7TYhedoBPDCsiHfgf4b0LQWvnOE9S9n5WuAaSXazVgO/AFRn1piIuARUTGQNQEtTg2ekyAghAmAz1wXXgjSGAVFwPWU4WOPyXTeyx95R1cAaQhSZyNrWeiIoWShkB5gDObcpEM9qEfAXG9MC50ua2whlmD3ARzu2Ly+vzL5pZjuy+MPvC3QC9wfXEFSoo+QAAAABJRU5ErkJggg==","frog":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAQlBMVEUAAAD9trb/ioq+rWqxnl+mkE9/oFjlXl5zlktjkC6NdEVWgCLMPj5NgDBGaypJax46Whk3VBkxRhRGKiktJi0uHRCwcSzMAAAAAXRSTlMAQObYZgAAAadJREFUeNrFleFShDAMhBEoZ1x1Qz3f/1VtQm9qgVoZf7h0pqWXr2k2M8eQJMBwSSJSvStpow0sUmdgCHMIbEQTIgCo5CMkzNM0zaEBgPf7x0SNUfUBhHmeQwOoiq4zTPOUhk32BF+VomvAlDAPT1jY+LRxXrQlqA638G3lHkKQxFL0i501vxzus2WIyunjfidUYwb8uClU98mr7CyRFGwrh4ecUwABj61Iwlt15zcwSeHjAGgS379fILxTk+I2mt0gCRmyXpNs5qeJZ4BQKQW43ToABITgEgAU4DaOt58Bwp/fAxChlAzj0zj2gOcKGK8Brh6wyBmw6bv9SCMpAybfy408ZPB4UlUpAp/pBAEbBTiqZO7V4Nm1NESU/BFYdsDSBaQCpAvIDpAWUOwnSBDwSSTt2foUICT7SqVPjx3qaeOUsHBTjOoiAdrr0BCEGK5Ilg7wtwwgrEj3ZKXscnM9AFRCBO5JZE0IGc/+xbIpCV53v8eVjQ9K3qdgV1zro8hrtuIKkC3Cr53dPFIqcxG9EjaPTIPb1DGpVmlEaUNHa924dfgHfQFwmyc0LyT5NwAAAABJRU5ErkJggg==","ghast":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAIVBMVEUAAAD////5+fnw8PDl5OTk4uLd2trYzMydmZlzc3NLSkr5ldknAAAAAXRSTlMAQObYZgAAAYdJREFUeNp9ksGN2zAQRdmDO5iBfN95JlWAgeRuAkLOZuRNzgrcQYLdBoJVOoirjCmRYDYy8i//wIc/n+Q4J7gs6YgdJxFRBBNXVQENRE8yZZG187sKkEIGLi/z/HL5D/Blvt3mH+8Ay044ZgBeb3e90QDVCkz94QFgpbGugOmvDPy2vxNYgMPnDFCAloCoLgDXqf9wfJBgKwAfU/+M8S9AGQH9MXzDSskGYJQRgcMEurkmDSCxfSiABtCeegsssuJbQETFTKS6q6r/v/FOl/1wXSrRtQOESDh1F6aeZG12mKBvC6N9Bq6nBtA8xApM5vCJRxpXAAdgEfg6f/80/wS8wggrMCwjbCl33T09Zw+6dqolB5/Yw45p9xRAORMiaB2hQLTRlLSWHNTXBHICwD6Jv0Qg3E3CGTDWLffOJ7B9NFkTRP1ZYbTRkyCaUxiS6TCyaBhNwwgoOQGcMsp+RBRe38CE4axrhxhKAlYqALmEEqIpRA9D+SwTikQpt1n93R5IcTOKi/wBKsTOnkkgxrkAAAAASUVORK5CYII=","goat":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAMFBMVEUAAAD////6+vrw7+zq597b1cLArJCenp6ciHaDg4OFcmF0c3NXV1dNTU1APj40MzImjJ+xAAAAAXRSTlMAQObYZgAAA5JJREFUeNqNk71u7EQUx0eb9YqKZ4jOeFPchjAze4s0rObDQrcy9ngU3QKixDNaueAFaChIFFHQR4IGci2078ADoER5g0g8ANqKHs7YeONsyIqf5HP88fP5j3dt8r+ZAAOokPxVQaDgvc/J9Q8bgsQ24oCnlFehfVWYUMrAuT0CMAZVE8JpCFer8O1HfRtFCKVUFdbeVRVuZ7O+jSfQOGEdqkrHKwm2XQHAhRYFaYzOk76Nn0Kg0GCEBW2O8lnfxk8hMCK0rjJSSrNM+razBtc0vtAppOnhpG9PQlJFmjbYAiTY5bRvO4IL+BS1qWqXJ33bFVzjv7z//f5h88fHfXsREXxOxuwKIbhd4YDSyiDaDpQUAXb4TNAaBdxiQQGQ4+H5U7CZ1kbXeL0rRQqAznZCFDDC1tZWOpbzFCPE0wQKtdHZ5/H277pSUEjnczYIBxSsMVGwUbBRoGNhmrLaZeZdVdf2g4mlECk9eiuXg7Dg/tQZ8+Gytu+rWC4WgtIL9SRIu3KZD5d1cFkshRGpkmqISLLitlmFq6v2arXKYvk5M9qWehBmzrbfN6v21za2WG5xSbW3+fN3nkrgez9Myrgkw9DQ/c3h681WONCCA+wRJlQoyvcJAJwPE3zmry79zIbTlcuHCEbVdpE2tb62iTSZM8ttBJdCkZ4UZG3lRKZHRh+OItgQYebSGj0t7Fzb5RAhmIRBcM464xPvTf20BsqVGtbw5/2P95vN8NoPEamiQP4TCsAAIMUe97oXmo/d7rQCzijITq2QYiSkwAAFilWim9LT6+vrchwRBd7BUKAvBQZM/itIBhyi8CyCoUGV4lwA7okXE1IZ71NKCRFn6fnuBCrRUFpbISSTUnUTKoA363Uv8KKUkluFApOqKBcVMhbUpCykKpVdCCnL4sAQJKF8K9hJXZbleSEW87K059OcRIQ+GYR8mkxre14sjua2TqakF7R+txVwYELK6fz4GDseJwhRNApbEjIlx8tlMhwlREIU9sDYyX4B2Jsd4eGGjPnk79eF7v1N/+oaQnpuvrm5ITPnvD9be8Uov+DATXMLKem5++nujiSZ83W+/oqDMJVm9LP3t1yMJySLrC5z/wUHjjD6aeX5gvQ8/vb4SMjbk18u4mdhBLLQzjmddZ9dTvBTuCekyZOWtHi+MsY4pLWOEGqEJJuHzYaQszyZkbZFpaNt16EhhLuFIhuEoDF78ZP9A0Obf2KBegjhAAAAAElFTkSuQmCC","guardian":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAhFBMVEX///+rjEZQjnQtWUcAAADX1c/Y1cvX1czX1MzX08vW083X08rW08vX0snW0snV0crAuq7Auq3Auaq+ua3dkET/gi+DpZy5k2Syk0/wdyjecipqlYPsZCqFhmBmiYDLZSNdf3XeSSh4dVCmXCxOeWbUQSDKPBxBcVpkW1BgVko5ZVJ5CxKoxgN0AAAABXRSTlMAAAAAAMJrBrEAAAOASURBVHjapZaJcttIDAW5lvfIHtnLYiLDee4kzwsL+///F45I66AkW467akSoIHRhhjOkuq5bLper4fL/wHAhiscBItiMIYSgm+j76GOga1xdXXWD4PNy2epHQ9q1HrAz0+mneCswfeB+K/i8Wi6HsZoEA4vFojtP4E1vO8GmvvWw5QUBEd4TrFabBj53F9LbEfZOcLt8WN2ubi8WTEu7J1g9DPUPt5cLPBM83N3e3g2C6+tu4PqYmaCPxk5w99/9XRsvCaLR9+G0Y8ID3f3916/DuO8azwmMgTA4WuQWp7uvEy8KYFObOQpsR4K7S4kJ7Izod1MYaSvwetoivk2wWAyCGR4PUNmZbawHnOWLBTQeqxgZj3PBWQEHbhPRD2TfrlNuOqCmPQs2I6M/I0hCAleAgtwKNrmeMhIux1lBLwklknpy1l0rbfXinMD0SEDTxDwXLlVt2tubwrrbY02fNZFxlEMoKpB2gsfDHz2G/fev735+/6/NcU6yC0lxVtDbv7z78aff39s6EiRylRFxdgoB//z25x/v/kKa5ygD0T778/tAYMCS5rmKsoTKz9wFYRc4kee3OBU0byJtBZr9SFkViAqsnG8yQGpDz0whWqmi0DynPU4eJmy6xUDLffz06UueP+xnBMkueXPz4UvW9ws+thZEveaBkmV2325ubj59gXqFgPV6r4OhhQ9DD4cCIZ0XPK7Xj/MO8lDgFwWzNcjZDBC6cArddBcOkcyld6Htgx+6GXq+g2z6Z8HivEDPCSyxGchInN3K50A22Iim8ZNAESnFgKTjg5URaEyiAZA4mEK4CtPcCs97rngqEukcW5gJsgzGZTEThBKaYaynEjutQ0FRxs4T5z8kmbGF5nJVumYCtdo28NFDVEjpafZ22lQWsw5Mtmo4fg8IcE6fzjKm8EwALrBPvQckV1S5QrgYMDYHAoHBzjqeQogKRVRIY49ZTjQT2K288NEiQiE1C5AeV6o83wdNXRiYC4KUhFNIZELl0SLKgKn2oflG0saaaMCYsdOZYCQlceo9gJTQrttvB4JdOAVItCcTgl0sYIqRnuKUOBJk2i1pp/fi9BS3a/va4nK6uxqReqHFq7naCix5X3B9kiNB9yToUzJvEVi8SSBDvlXwpjVAAl19h6BX3wNm2ng4/SqB3MCVU5T1OgGokfb0/LVpczpVfuqPyjdt8tQvCjuwWwAAAABJRU5ErkJggg==","horse":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAAAD///+lpaWGhoareS2nbh92dnZxcXGPaR1jY2OKVS6AXCJyVBp2SShRUVFvQh9hOh1FPC9ZMxc2NDdOLBM2MCZTJQ5OIgsrKi1JHwkqJR0/Gwg6GAUhHiEfHBcuEwQpDwMjEQcmDQEiDgMbDQUcCAAZBgAPBwMNBgMQAgAIAAABAQEAAAAaegGbAAAAAXRSTlMAQObYZgAABHpJREFUeNqllouaojgQhTOzuurYitKsNCS7pR1lF2fe//n21CUBvMznN3MISYVQP5VKEN0LKitT6Z6rKovNZlMUm6KsnCtgVlVRpbFduYMw8qIKq0zlDkAgd+WrgNKqDNiIilcBmwXXi6rAPARQKOD1CCqroNVWAd++IYJfBVQ7+IOwq55M+PmF1WKLUlRlWRRlWRUPAbufXNiutihlIRE8m8KiwjLxQqHCWVaLtJgFlr6sxqtfoYstURQvRQBgwcAxgB/GusvY8wvVo8HX9Tog+IASRTfbetp9Dqjr3wL4+nCofYxEU8BisX3anQLgf/CRoOjqEELycCuzcvex6voARKQQKGImaPJWUmPoPpb41xQgIplJ3jvuJQXOQTAAKcCErTdspPtljMT5R+w1/CPbZB03SPfv47cRLl9+IHYR1T++AKEdDO7/Ev2TWqci6G8U7XiJAM6ASASeuKOA5Xw2my/b1I4AHyjaCd5z1BFCg04g7WCwnWoCiNEAsnJZ3LPufgh9ZCbA+8fH+yQRCB1Rj7Wftfv5DKHP25Hpa68FHnzYLmDdAdoW5etXhD4yzZGLVAZgZFAAP2e5tAiW6z//WC/bkalugpDWpnA6Se7uALP523qmUzDT3P10CieIRi/yev325vZwBA2lHZleUiA1ceN42U7fz+fvJ1kPKAN0/RFPOzLFjbimyC0DTud/z+f/zifyQnCm9qE83EicI/lIEQA6nUUAgKAAn0VpfxiY/YiiFhwOPichIAuyMl4BbB/QC1GVART1iAQBENAogOS9NACccaCPYQtBAeFGznSAyBLQNPIDpYBAcQLYrlar7Ttqad+3E0CMY4AiAKABcDwenQn29YrmBgAnTgNcFZEB4RlA36JHABQFxEcR9N3n8fjZ9RNAfpsBgIQShEB3EbA/E6QT4x0gzyFQAlxVvZYLnAG5TACQ8Q2AIhEIub/KgdKhvly6z8/ucuFbWYEoeC/mQWQNACFCaDq4dz28u65Hm3IgN3ueqnxf1c8A0wjgBoB4d5DlIEWARFoEYwQ6CMAAcNPH94zIOZBlgz8RI2ALoc4QW0YMX3sGcLniHHIAwS2IP9zNURGyjBkAP10CnNMcjJJoADFqi0AUCF62kHzc5MBLEjUJFoFUDEhz0EejdGxMc+DtwyxmbRGg4CAK9tGSh+dqkgOLIJg3BAMCwFNMe/k60ZCDNIc8AwPAm68TO0O3gCEH+isfIEFoIoM0zKXhbcTbi9OanIMUAE2SCJjNLAPIwdFOFOSg7zkHtvJp8sZLyyjmeEwb7/PX0Y23b9PoLmzYsMVoGrXQGgMyf4/Dwc67rpGmwc2ocBm12kIffic9hEpax3Zjg3Kr5L6BakHZ7jSKAOEScGraXEAl4UkcHDp8feOZYIZctBswPV0ye/0AgDSGPMXGs4TTsKFJys8PqvRXLAihEQQqGPII8UTRAGVA86H+pAcMRyR7WEOGPGTQZECNDcsgsYJVLnLrs9hBx1hqycUkHrUvqxgONt9iUv+p7ocjlD66/wNdcSNfhkmkngAAAABJRU5ErkJggg==","llama":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAMAAADlCI9NAAAAVFBMVEUAAAD868b14rjx3K/v2anr057jypXMqX7EonmlpaW6mnOvkW2liWaGhoareS2nbh92dnaiayOPaR2AXCJyVBpjUT1FPC9BOy82MCYzKSMqJR0fHBcP+iOkAAAAAXRSTlMAQObYZgAAA3lJREFUeNrtV0t22zAMJDAg+0ulxm7URr3/PYsPmUiMXja0vPJYJMbyAiOAGjynN7ACCmVkPO0AButlC1ueRnEkgBydAHBA45afIICJ8bEG/htvdhHRcI4APIGU7wVAauUB4wJiUX6OgAIymjaACLNLEBjPxJRZTjkDh4Ag5EHEuCUvym8pgOgTAZFWdw3Gc4EU3LQCpPhEQJbs2TXGpxTbbyygKNIhcom8UpRVbiwNQxS0AytEuvaqMs+YlWz4jQQwMdEL8wuRUgaaAIFyhkjN27ILwgvcjIhsx5AAZiL+8kWDUiiqAHddAL0AAM2TiWvVBgXw9x9PTz++814Ac61H2SFMUAFiplq2dAaYTctRC/RCawCFbQ1B4oFaopwC4OZ9uwJ49+HpowWg0QqAHCgVKdCsf18CEYn7cWbIdx61QQf3AhQQRc67FrgEA9roHK0AVXQCwIAAbj8NSt2R2xvC8R6eI6COYOwFZEEMZmlngGm0BYi3Gf0hjFZDcu58KH7xJhA5GRmCBLCjFpRqTGK3cHgEAGZhrkYA8Fjx+etXIl1MtaDOkgCsS7JsBcRcZF+ul2ngDEROejUBrxTgGuMQKnojMgAMRdWMsRYwRSt1cSy/m9gSSVbsBCjEhHH1oiEfgCVn9h3vb3bMl3oCvABdE9pAYpACAxUAwTP7jhbIQvJBAM3fIfttqS4wZkQIv4+AoI0nWP2lHEDCDaoCDAgQ1ONskQXuL4ibSRD171sQXYCA6ykEBgRYqpAB1tWiHD/U8tfxr8U0imimeNoMiImp3+VtIG3cebnM0zRf1hbTKCQjQ0R0N6Iri4SoQwFrhzSKLJLjgywwgqzL4wcBy3vplf65SRcsP8xbxFjRLS7lBwKmdZknLf28bmgaQv2H4SEr8Ri8pN6ZlnXV69u31eNyky54Ul1xOQ1eckm9M9ljX66/fl4vq9Hn5+d5uAKezD7FVv1W99Q7k2Wd5t/XaV6DXqZpVEDpbCZvQuqdabHE02xZGx0X8AlS70xLvP/zrPGdpvPQO9N6hFMF9M50bxw4033RO9PRMDoVvTMdDaNT0TvT0TA6Fb0zbSbQcpcu9M7kE8hH0LqhZwrosJlAm7mU7od47FmH0Bpz6eev6+XuAqbpMmt0ev2t9J4CZheg17qh6X6ICTSHDzR6TwHrIdIDDzzwwAMPjOA/NfpDB1xAY2EAAAAASUVORK5CYII=","minecart":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEUAAADBxMW2ubqvsrOprq+epKaUl5iMkJKFiYt1g4ludXlsdHhham5SVVZNUVI/QkMaGx04QmSDAAAAAXRSTlMAQObYZgAAATFJREFUeNrtk9FuwyAMRVMa7jWzwf3/rx3QLmsiOlpV2lOPk+BYypFRzLIs53A6hXA617sSzsurEABTSkRPsLxGAIEYI0ACiCAC4tqp5fbARGApJavRsLoggLHGyrWvmAoOIPSWtiamgmw7MgIhcQuAM0G+U+TcBERcY+wNgJwJPO9wBAq3Blo+E+wM7ghSIRqkVGaCPV3w9RsTQUVAMRMC+MlkUHusISVfLlkoW8ZRbRmTRFXNTG9YZ1wdCoTqXsy8dNysuJtQ7Z6JoBTV0rlmrk3gB0zHW2gCU7XS6ZlrugrKxp+Ccuyg3ATljscC0eLtM/d+aX+tVfOy46GAQwGfFsiwA5HnBRwK+O4W/k/w/m+U4SDJ84MkMhxlmY7y8TCVGy8fpsR+WnXDGuPq8mHIN8fuL8tkDiT4AAAAAElFTkSuQmCC","parrot":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAP1BMVEUAAAD/////7nn/6j3/5TPGxsa7u7vZra23t7ewsLCoqKienp6ZmZmWlpaRkZGQkJD3cwmGhoYlJSUPDw8AAAD7udxiAAAAAXRSTlMAQObYZgAAANJJREFUeNrN0tEKwjAMBdDGxpnbZqtx/v+32jYMN9QKPnkhYdBDk0EDHSIQ0CGBDkEV/pFgahtgBhxEZu7nSGj1Ajg6SAmpVQe4M98hgHCMVUAgqklbObgyXwGhXczUWlXg10Z+bj/4i3X19gra1KJrDfVGakcARdFyqyEHS353w35J2oGiBRO8++miqrU2MJdZIN6pJy+Lz3Cgs04yeaees6qeByMypZQo548jLDdl9mnE8D18B+EyBiG4+AGMduBwCi2/g+BiAAJ/BTwEW/4XPABsMA1LwNN2rAAAAABJRU5ErkJggg==","piglin":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEUAAAD/gID/////7aj/5bX12iryuobMzIPCwnTooHTVlXreihzJgmWHh1e6ZkWtVTKiWTplXEOhPjiESzOXQyKNNQ1rOSR6JiF2Kw08OS5TKxpgIwo6GgwhHhyEOBusAAAAAnRSTlMABHH+CSEAAAKgSURBVHja7ZZxU9swDMXDWAMSRspwYiDQ7/81pyd5Vzzf3Oz4t78GRU2kF9m5Hm8y7h8sMM34zMQrcKZj3BvTRHMVoHVVJwRm41n1eSDwYFSB2QW0AoG4psY0JgRAK5BeiV7TWCD2wLt7AXkhehE1Du1BL6CPKT0quL4HgMgFxIBAy6xt3hICsYniHBRIzET+6Ij1jxg3/NUyXxEwiK0wiITZBJC3And3d10uzCzKjOkNOzGrX6wKJoUVpiTJQ5MbVseyqpX9SEQWmHUV+4obhI8LQCd5aHJDBALCRLIaQuRfWSRhBK51M7bKQ5MbqwpLjAyB5Kmw6AoFToZAgNCE0OQQMIXEGHkFtU3UUsUU9XX6DnlocgNNql4HvEuRAzWO/Kx342xMFXbibWwb81TJOS+oOyQg9reK8mafqbLkJR8UEFEW3nRjzDBV8nJwAgGs1qoY5DKB0QrEukrJZc9BcXz7S6AiolspC8AMIJeLQME9xC9JJppL3FmKen/J1moPsOhFzfi4gXNZvMuKdiL0xmPLVjBaHTBiK1DQH8lealfyB1mIsbEqIABcBETQKjiDYsRi84I0WwYp6yeilFgSp/iFBgJVSMchBeTsR82RVgFiCIAJgMRkihBn/w0XI9ZS+/GxtK1LXyaQVnkHn3acLDhlh6TIkQms6s05/Tw9vQUfJzs+3v45Aa4mXCTCCnh3nj73T0wQOY6oQyT080WAqcKO70H2F9tsQq3zpzdLOJ/P7+/nX+84I8SqvT//2QKEv+umGzdu3ABH/cLAFxwVGPuC4xMs353AGAmM/ELvC8b0fqHzBUN6v9D7gjG9X+h8wZjeL3S+YEzvFzpfMKb3C91/5TG9XxD5zgTy3xP0fqHzBWN6v9D5gjG9X7jmC34DNs5yRa6KJBYAAAAASUVORK5CYII=","pillager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAflBMVEWnra0CAgIAAAD////Hzs6Trq2VoKCVnJyVm5uTmZmQlpaOk5OLkZGKkJCIjo6EiYlmh4VzeXlwdXVobm5nbm5SWFhQVlYyZjx2QypfNiEmR0daLzg5Ojk5OTlPKxlLJi0fNjYqKikeKio+Hg8lJSU2GB4yFwkeHRwjEBQUFBN24XvqAAAAA3RSTlMAAAD6dsTeAAACP0lEQVR42u2VYZOaMBCG1TOCDUYQemeqRDEq8v//YN9laQYckaAzbT/ckyPEmXsfdhlnnUwbwlBKGS7CBjmZfn6m6WQ6G2DiBHUegrTmFUHIpGeQSorT9fcEixANvCt4rwVm4V5ig7/AvQRJ+AuQQPOSgjjwzYHPw4Im267AnaW3wIXbdxINC9zDZUPbADwEHMnztZTrPOc467wEa+SJc54vl3l+bgqADPgJJHf78SXl1wd/oDgb1sMCeg4yifqxXC5Vwk93DAsSMoBE/QQqkZxPEvrDNSxIWJGyIOW4Y1gwG+BfCS4Nt4YXBJso2ngLTsBe7bUlQB6GMQLkrYfAvwJq4Z0KYEDeR3C6QzOGBEb/wQCtRwjMZbVabQ7G5Qk/weFCa3fYIb874Nxa/YLj0QkuN1r49/0eEZxbq1dw/AWDp8C/haLwbMGa7XarjTa2UwGWXwXNW7a6Zqu7EQ8BPfoKDDSEfcJDAYWtIQlTMBVvXR4KIDaoHApotLmWTFWUZVGVXXoEhquHgS4nAF6C2Qi+Bd8CYi60ibIoe1mAvAmy4C2BzWB4XSCszdDDaAGHxVzE2jCxGC2IYyHimAcOBPFoAWY34MFJuxMU+5pyPhei5PPDCcRD9niiHaP34AQlJg+oRFGIqgA9A6Q9XGlrC0oSxKCi/FiBfcJdC27R5gQ49662gN8VV0ibE7jCUOWzH5KiNrgOuwJXEZ7aJ7jd4QT3pfa1oJTKAqWCDPcsU9noL5IKAhUFUaRqAvX/TKTfnHu1gRak8lQAAAAASUVORK5CYII=","rabbit":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAMFBMVEUAAAD02ezy2Ovx1unxzue0pZSkjXOUgWKUfWKLdVp7aUpqWUFjVENhU0NZTDtSSDkNYhzDAAAAAXRSTlMAQObYZgAAAYBJREFUeNp10L1uE0EUxfERBdhQ0PAivAFPgUJHFT5ewC7TBJ8LBW4i3TM0VEgz09B6ptiOV+ARkjJt5GJyNbubtZLdv7zro52fJWtdq5aqENe3prV37vl2v959dK2SCsERQBrYwtoNwOdAP4AVrAsDZ7iUAWSG6B/AZtsAvsgl6VqBjGkEL84/NcAPvBoBlSnFfmL37z/Exxi/xj8x9kBVUsptBsX1DRjtCIAbUkjqSptZYflSyikA0HVdm8dM0pdaK87x7WwC9qTNZ+/ckH7G1Xv7RVCIj+3emXrzdgT0geJczaH9JcKnarlHGSDhoynOg2PJQYUqPpVuDtRjUVGIip3PAedrf7kVLtz0NYXarkUAEBBgGQgVBBeBMlKC+kUQfLQPEyGK3WYLi3RT2adDyr7kYAAbWD6dgpJKLnYr2UBfKqegDh0jx2JH96TVz9tpzLX+MYJf8+Bl+juNuV7FEeQFcPg9jbleH/YDuNvPA3s+jcd9L+1FqEiqVlZMZ/eZmCL8uK8JdAAAAABJRU5ErkJggg==","sheep":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEX////w+fz49vUAAAD////49vXs7Oze3t7S0tL/uLjmlJTAnoa3lHuviGtXRjoICAgAAABdC2QvAAAABHRSTlMAAAAAs5NmmgAAAhFJREFUeNqdkgFy2zAMBOMqONC+hdv/v7YRqCSMPO0kvpFEUhKWwBEv29Rl5MgcUo7U5dDLf7Qdep9cFNJINeEpQCoyx8id8BxgSJHaAXoOIMWRQ16+oUfAyNSMH08BRg5lu/jDDC6HUhEjMzWGfgQYmRE5QhkairGv1PVo/GoFNrKjsLG3bX/7AZA0rjcL25R8u3YpzZgAsANbwvEI2H/lhn6/2q9/xI02oouZAFsIBTZRnAHz90psqKzUrrYz3wEdCzZlcwJ0sVIm12v1Yq73awKEsNMCYThnoOP863ar2Qf79mN/vpvIYWBgsk6Af+tyQaCQcTFnDso29vcAKDG2yxZ0KCaDFTBad7hvb/MVICTseZloK3ohFg+0jcwGDOmUQSJCJjFB0DxhFsCmdq4z0DkDu2MKBcZWBUQQWkvYs8j7m8bYthWAbRVk2SSeHRGmlhKUYx567piHDKiykacHiTAWZmnlJnS8RmoFkBK2FdgUvYjp62Jib69j+ArQh22JwGkC265PQG/erT8fK+AwHkOY6JEG+hPgclFlCoxZASZQKKd5CMsWRCwmGibDprBXgA0gCQKZBgWBlwzALkw15wxIEhMVMtjOjo71FIr5CSj8FYCxQVHYCQSAzdrKmIIy9aaTB02WfZwfIthhImLxwEf9xT48tDImpveRBFAErCUUZeZNA76lD8B9VdX9p4C/n54rtHuYBiAAAAAASUVORK5CYII=","shulker":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAzFBMVEWOYI4AAAD////m8K3h6KjT1ZrHw426tnmzr3GsqGujdqOjdKOjcqOec56ecp6ecZ6ecJ6ebp6ebZ6Xa5eXapeXaZeXZ5eXZpeXZZePZ4+PZo+PZY+PZI+OZI6PY4+OY46OYY6OYI6MYYyMYIyMXoyJYImHYYeJX4mHYIeHX4eHXoeHXIeHW4d/XH+BWoF/W3+BWYF/Wn9/WX9/WH9/V39/Vn93V3d3VXd3VHd3Und3UHdwUHBwT3BwTnBuT25wTHBuTG5uS25uSm4AAADM1DMFAAAAAnRSTlMAAHaTzTgAAASDSURBVHja5ZN/e5s2EMdpk2Xrthg8dKfYuMVet4U7sTr86CRskuL2/b+nnUiN/Xh7nhT2574guNOdPjoJEby6ULFYlEWSbGtp5Sr5ayM6xnr7QsFlR9I4JtswuYbZunITBOc5LwMWlhGZpOUKjK1HAwpCpTWAQq2U4v1oQM3gpQBiRMzay/iLgJUlRAWAKBi2xWjA0rGK1R2AFga5ajSgYI34fAMCP44H0B0opTQqQEQevweJywCw3wJUxpWjAe8aAwBKAfR7UE/YAwC8Q+URCBOWUFKMKlaACCJqzw+SmJtv+Iy50szSSEPWlKMBya5h43ZM1nJmXTEaYIu6bauybevicV9V7Yu/c7EMk+JduCyW0bJIwmybhCtvl8l8IbGsTEKxZ6tiEa2KJJK45C3mSz9uu5xlwdKxJUeWHTnecbtyxpkdu9yxv/ZLlzXkjDXea8w+OeY6FovaYE6NQdMwsDOKXBlJBMUG6t/lTOiaLSuWnMyVoXEEvS9viQeJ7Q8/+AuQWqkIUWkQyYPalTWAIF3gZSSegyiOAaVTKiiNQp+qfBa7emsQlEIEgdyxqwqGGJWSBNCKmqrIUAN6Oorv6iBxJI4IY60cp0njfQ+RHsebd45RpMUFbWm9sKRVjH4IgvhBRE5s6YoRFdsqMo1CD9DyMk01zy0o6NNjJFuGPl8jgC+LXOUrSDdp2jdQ1EoF6dr78lTQ70mart9u0rdpisD7lSXx5ZIbNbfB1sBwOEK/5uzkz8X/kzE9+rfUFIWBwZ/5Cu6dSQeAy9f3jk6+zHYvbQBak0r+egA43gRzY0/E3FUh2VMCuTLkZohHZMsod+sBmLsy+N09nBJ+/dDeu4chIfztw/7efThN8P7h031zlv/+YR9441Kbr/L2oTscum64uxf/xkt1xCLKmTNmw58nALr80PX6fOj4MAXAncmNlxgvL2Fz4XZ5ZwTiJSR+Gg/gjg7S2AjniSdUIOP6S9afT1qCr5sOxhdiDjQNcJDLc7ibAqDOPLEcJpnfs0YDpOp+C5npMKkCX7c/SE9yC2LCUc46zpmIc8PUTQHQ8U96kuckALHpb5GhlwGXv3Mnkqll+v7570d5dhtGURRGx85ZeBvezue3Rz+chdE8nIdDfC7ZMmQAhICgENNhACoFZ/6tUggAp3iM+hgPnhMkrPTwBSONWqtzICAinIAQK1QDwBMV4NkMMwRBxCfAnfZTDBP8on3B6hmwXcoKNUAMAD8nW1Mns9DPqATy07L4Y5tE8xkoP0D9uCqzIpHFgxaiBolnQWIpZkdgHGtyvF5YFtsAO5ZG6dLbO4O0Y2QrccnLXQ7kqI8HBTfsZIQ8M0u23LKTniZrSHrJlaWxfUTiufRVEheW5R1Jy3ZlsEyrtkzL9mNayPvjp9W6eqylr07rtko/7pO0fpT4XmJttSnbZVpLbvlYie/7vh6k6+urq+vrm5s3b25uXo3SEXAl+i+Aq17/V4Df/3Ndf9W3A64uNBbw/T/0Q68RS/B6/eXq6svrZ/u7XiMBNzd+CycDjhs5BfA3y7f3PUOzujsAAAAASUVORK5CYII=","sniffer":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAMAAABlApw1AAAAe1BMVEUAAAD83VH6yTfyuCrpsSvopSHfnzHejyfUjifRgR/GeRxFnYrDchU4jXspiGCqVAilVAEsc02SQQBXUDOTMR1xQQIdXTwcWzpKNE6BIRhbNglENCUTRzM8LEREKxFxExMPNCosIjdgDQ0kHi5QCAgaGSJBCAg8BwYIBwb3shenAAAAAXRSTlMAQObYZgAADgFJREFUeNrUmYGK4zgMhsPOsjdXXz0nanSIBgSmsPP+T3jSL3vTpl2oZ8zA/iO7iexQfYkVJZ3ll2QZkSxDygTl7M0MO96WeSrzZ29C8J0CoUP5TwLop5+JmbHr9qcAxOnPlFNC/L7hni8AUFEzEXx+GIBAkJMbCLBv3dcAaA0K/RQAzj9n4hBRSl8BIB57xUX4BEDP34Tw13Vl38lzllA1aa1iQph3AN0wFBvG1PR0Em83UAPgSORZAOoAimVeRO8BTBuAxMRBgLaCiF0rgodrEoCqtfIQQKV68OgB4NOKqmN7e/ouBIJMfQXZ1iyAfgGKI5QiOwB1QFGn9KFSYiKu2whALwW8sotSItMkAJOWokXsb5ee/14LAEV8IgCMbqAS4w7q8ZNvpGmPEjXWgwOg3QH80wQAAUApVUcAPNi0ZbDjoBbMAnArovIAAOH/bfJP5ERRlQCw9nwSk4shoowVNBcAyVlEdgAe/V+QMSAnYmKkwEgSE0MoAQYAojkAEYloUSToYr10u8UBgCDZawXCSBLHbXSrAXlSIdOKtaBSIrZFkMtF3ORutogWMxw0UAeoZQG3KmzNNQcg7qOlRGwO4MLHPUBpAAqAsdtoLCEGQZ6XA205e7gBUEK/AShugkMG6gARGBzAtzhPzIGzqrcAKLog9q57gJMNquls9iwAzna/BHib5Hk5UFnVGpdTEQ4AifX/GIAcgM/K6vZsHYhnoUzxJMF5Yg6sFsyZz0ynwkbBixhAtzsAOREXa+uZ7Rg9P7+EyOLfnuXMMQ+Az35eiE7MJwIA9BDAZpgRTqOhrwN1gBjLHwQzC9nKq5k1IjfcKcPkQRKzh0GYv7oGrkBUAiJnpxSeKQCrmTWPjRi1Svub8AMAXnxWO2Yd+1nFjNjk/cQl5IZI2P5Mx2vdAVgjHIYDR96JuT8MrZRBNPVnFY1ibDoSHekI+aa7xMZM/XWyWFuG1OPPCbUYKQDNA8BrMervkV394fEo8KLaAaB8CIBM2ysZT63EoUu9VFEVKXTjpyLurjZ+EdXiANZ0GVKkAJtBUY3zbICL4o3gdtkf1VeQXmIcO2UcIOInQ9hqGTnERABT9fjr7gpUD7peXCpGGBAyCNCV8tVLGdFsgJ/v7++Vb/xczfezYhjVIQDKaBL36AlJQKbJSwghimjVHYB63Ii/4vyL9zIOgCrGxCZcgZxoNkC9SK1COwBy58WH1XMYJW4cIH6V4Owk222IaCZA/LZCfLjxH5hKURsLACSwyihALJh4FGoinr2EUAiE395u/G9vLCgDDoBKp6Ki4wAhZm9GMj0HtIpZUT78uPH/OLAagJq5cAeSMpzErv5fDYbINBVAxUyUX7/f+L+/srsV1m6j4wC7+FES4JoHICoIkO4ACH7YJ26j/aW4P1TkaJMBrNHh9cb/eqAYCBMkgo4/C0ENotPMBnA7PQA4dQL0Ju8iAuu6bQ506LcOE9qMjtEpuudq5HocxG1rP/d6DaosAFj2AsAicuuN0NJN9BFjSi3qRH3pJ+s6wAbtI9ahx5xwowVBp06mvoeWcp++bBI0XvbiGNljEQAShWUEQXBkAgVCii/GFELXGKkPEGIjdOChcAZ2bOFM4ZDmQSMCwF7/PeFxUdxVMuf2PUwRnltbAJxSe+5n32cMpGDckiHFVpvXnRFj3qgzYyYAURAjguWjwtqwxpnCEGNzEJMLcBhhsj46XJk4ID6BFdMwBbg5BoOBOWM8INsARwTLA728fHv5Fnp5+S0AvgYhrejjuxHrytjj/lUYCQ/C4P/buQLdxHEg6tOqQidVp1XlXcUnegOG8v+feDPvzcjUC6E6jiyR/MD2eDx23nOSkinb/StsHwc8ZYZchGMQy5nDZNDFTaLQiwJI/w9KSFfAHcSjpQkwFdxWPmvy0wp81YYAOra+z4CL9JOD7pYiIXDL32ZjPreFmhmO5qIAsNc3SroCW9DKVmGsIUBbsIgXzg530Gp2GnmMw0W+W51iq5nTAlQsDUr2uC3l+8SrAv7Q96wA23uUrbGgCnLE2tQTbqRhIGDRcXLIQf0gF2o8Tg1EgCpX4eUUS5LBdQGKWQE4LPdnt/25gxoFyJMLHKiCJiQFeRgM4V6EgHCAMSrnzfmxbWSQLsDoA9pcFbClAJDZ7rY7XVE9O/XY2maYR99oYOCtheS5o/AwZKctJ7lyko6ZfuX4qoYZAYEZAT93WIynd7fb8SDkrYYKgh6G6csMeHAhNEnqcso78MJczuBk620pwH3mxOozAn78YDUngIspYQowAtZssXbQVS8ogpaWXRMDAwVjmE8BocHnoPLLUGNQqYcMrlxCP/5RAVrNCdhCgPMA1S14g0ATAGkmwApqbTkKpwXvUGMmunBDE31UprX54KTczwJe+OkFgDsqx7eXl5dvhBovKdlC2ECuqS8DxZjH+ZkvBCCQfpDh+YEb7Lgi9Pl0W9gFWIOFQ4DHpwawCwF/K3etAOd9jpTIE5vA9XxF2CBGBtFHTaahnQ6XxWUoQJu2LLiTdrhgeJP+K8AM6/qbhQcKJQpW9NKPxj1scF2xAwHhjmWbbW92wky3wH8oEf/UoIELJrDpjtIqepq3NbTaNG1SC2bT+oDPbwJQbgsAe+CCADNiXevEYYNH6o5Pf0qNS2PujRnWwB8zYKcu8IsCXtsJOBeAozQ7liIdVBy2DtugQDcMKAxvapPQY1RzekALZ+frAl4hYHV4VfgVtFoBfhOs9AzwJuZNsE4BTcFaz8Am8Oxn4AUPEgQeRLVyfFOkp8cGj2sQYZkMKoU/CG3S0wP8jbG/zYRFBekeHK/hxoyK+nRiBcwIMHxrAHcAI8sLOIUA8q+oZwRsyF8LDLTom7HZLCxA6SrlWo0zXtbTdk7A5kU1WIFBG4C5tABSrmAP5tU6dUbA29v3t+/Ea8A6bwqtlhZQlbdBOZuOit6sgD83DXECoq9jiwvAnmsDS1/szF1CvOKt2mjRl3q05j2x+E0cCtyIakYAuBLNao7fIICcz5Xc/jEK6h04sLCAuGxi86vf0fP3wMs16F2wuADSjh8+VlV8DtyB5QXwJJgA415Px1UJ4AcxuFtrAvQcrEeAsSZOZvNCqisSUMHbysls3MurFKCGk1+XgHiO45XTPgnWJEAVYP9XK6BCAF/AmgTUyud/sraGZr06gTh87Pf7j8Ot8SUE8CcnBbACbgj4AMGPW+OLC9AX6i8IOOwPIDg7vkhKGfdu+zxbq4D4PMM5uCngY69lfnwJAeBfIYJJPdrjVwQctMyOLyaAF77y9gz/hBlrEQCYBNzJJ1SqZTUCTiFAAe5QcUGASKD4X3WrwVZKTcl6Itlgbkf28AcKwHZHTsNaXfWCgCJaSpUslSQzRIjakhLEhIAsXfiDBVQXoIjUrKYOtRSQrdz2agKUP95G0HpmZXorzkyEP1KAopJ71HhdEJCLsa7YXxNQQT0IuhkCuvDHCUAOHNR9/y8LkKysRaoYNSWX1UMfBUAOBQiIl7Pwh6aU53t/RFHzVwFTybWITGKscYnUXE2AekwA5Ey55GwxXfgiH2TVf9F+OR+YJgEfazNqmQpYqq0E1aHsJ1Tq6cIf/kHGnz0w6zUB0/tk1TsrItqUaPbjEfLYS4g7j7u5XhXwbqze9/aQ9m6PaXs6+FaCaLvxFvHIDzLfeW3OBZxSh73ioMQUe9SHw77h1vhjP4lP8SRH9rwd1pKRnU4UYFCz3c9rycj460SQR6knltNaEho8uCm0QaGh9f8r4PjbcUdG9qwCbucDQ8AQcIYkAaZgx1xylSJMA/xxujL9ysdaIjYz4gkEFGZYkYJV5VbRtnwAQ1VbG9BOgYDyNAJAKVKwyIeVa2RkUOQRFGA+lPIEAvjHwpGCWSN+1eR6JkC9TZ+F12cS0FIwI4Wrp4rkWkIA0y8IKFDqAuQJBEyfUjAjVa1SW4VRwDQh7+QoxCK70d70BAK6FExJ2Q6raS9JJnDy9EsgzBO0yZpnEDCfcc1nbM8hYD7jms/YnkDAnRnZEwi4LyN7AgF3ZGTPI+D+hKZquRv1gmMhAVKlHRQVCiEsdNGu0mLQa4u02WIVl+vWaebdGZlgISmSj8VZFKfUaMlRxDgUuNRGYQyYlljEZ6BUEQx08yCMS4rF3ZkPFKlS8Y3CMevCYMEDoKKnHAuOntVmX8AAMRpdciyi8SSJ8Vw4A3Wsgy2BWXCgewVk4VNsrrnosGSxlruVcbBiY6JOi0O/GAPGwJPbIsovixGDomzUz+dlJc2hmtWucrcAiedvAQ01+gSoCMZQaWhLhjyG+6z1xYyqm5f90RluKVaSiEBJN8HDU+r5Kc75ZR5fEI2oLgGKb6icAIhgNz1GUEq+nFF188icywnFJ7CR0k/w8JR6fkUUpfEzF95cvHQJUOyLR4I0nB4TIq5lVKXNQ8soLkqG/n++9BNcSkq/8IPexg/ljHifAMUgCXCH23dUFKK+axlVE1C4vjXm6QT8MsHDU+r5UUDwcxE1CwOKXEqAGMLrvvtKC/2ZjEpSmwcCGUs1UqmfMPmEJqDnVz7zYzKUtJeqCNrUJ0AJK2UdlZos9bBAxKAvNRZpGVViRiWf5iUcVC1zqrtop0vBhJmWiIZPRadHspbzVDWqS9DsHsEbRpLENkmxo4JHUfY2bg0iBPQZ4/1UIEttwbxibnvJ+Tx40YMGsJPUpWCeaakFn8ZaSlYmqyf1tAStgN/yWOA7sgWwwHdky+D+78gGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBtaCfwE/iN7wd4XgKAAAAABJRU5ErkJggg==","spider":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAKlBMVEUAAACSiX+MgndgVEhPRTxHPjWoDg49NC0yKyYmIBsmHxoaFA88AgIiAADotIQjAAAAAXRSTlMAQObYZgAAAgpJREFUeNp10rFu1EAQBuB7B8RDUCIs0tB5rUuUNAivfBKvkI5b/eNLyVkzg6hQYGfyAkn6oDwAFUUqUvA4rHTGthTlb7b4P+3urHZV4uqqsuKbHdNNz3S9A5V1NUVIVW0leQfOCuQvhNzTDJhF3W6RlUvJV5R7przjBSBxu5KbHmV73OJaUc7DBDIVIKs5zuSU4nSIkYotgSUox25z0GAtfe+qk+GWN0PCARhI1fgwyJhjpOb7QDQBN0DVJ9BRiJmhB8CQAlhlAfZNaxAfb8ziwuSLQeqmrdx8BMJi0qsvBrms6hP3AuZIFxNYRJBj6L5W9d8UYg8SGcGmjSlRFuOB1/vqz7v6mLYbcscIEoYOAjNLoB+/6urtbwarGabB2q4juBnR5dnj+fnZ4wlDM2QEbQhdVHXOoLr69PBwVFfM0sNmgEE9g5Ve34U3dTh9IcZu/0Gsw2atboDL6f37u48vL+7E4c4jaD80YU2ult0v/NvP01d+707CGMG2DVVH5uNrPk0a2oog7vYM4G1qgN6FngEAgZmc8aQKMTSBgY62KbShCwIKaTODGPhztU6csA11FTgJQhNpBuGoNM2QIGDsQx0ktfF4ARKDIiKYmUAhdMZtxzIDYN+g5xLJVO4Aw8BYAG9L7waQeiaQGwlIZ5ARu9g7a9Yc0wYFK+kCeAbgDvfegdK7qyy+4z9b0kGP3NmJngAAAABJRU5ErkJggg==","tadpole":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAABtUz1jSTNTOSNJLxlEKhQWCgDfr9AwAAAAAXRSTlMAQObYZgAAADdJREFUeNpjYGAyCglgAAFGRVcHMINNzMgARBuliSUZGQEZzkZGxsHODNiAs6KwA5RlYsBAOQAAqGUGQPKmAvcAAAAASUVORK5CYII=","turtle":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAMFBMVEUAAAD////K0JHCt4ComnNHv0qUi2OCiFQ/pEI4jTopfUkwcj8gakMlZDMbWzExMTA/pVLKAAAAAXRSTlMAQObYZgAABDNJREFUeNqd1s9r40YUB/DAZr1Z3JT+By2S6XnRiJyD9ZjmtBRSUbWnQITMQlgKXeJL6aGxlpltD2VZjKY2uRW2JodAlxAxm9DD4satYnKuI7OH0qUkEfQ/6Iwk/7isrNnvSUb2h5n3pHlekqkG9AVC60vvnLuEPJsCDxMRL01pYIWQ1hRwo+T6leeBixUA234MsJV98Cxdxx5YFuDSwG3b/tzFX8nLigtoDZngpdlSAHYbOYCMmoZMBaAa+LaIQ0/i+GKpsm1ouqYhFYARCRCWAZamGcLACkD4ITn+nvzXyQCUAWvlgdWQBQGlrBNLYFn8WO7BVABGTQ/Aa56kQAUAtBoAzgHl3DI0rV4XVVQDVvyWtT4FdE0dcDbr9yaAbiJ1wN80Pkqv7riWoWsIGmrAXX9Py4BbKN2CjhQBsolmQE0dWAlaZlaDZWTUTFNDpirwDNazGnhQr2mAVWsQMjf7cgWQ2IJuYjWgGoZTwHIxbIMqwHl7AmCrpmMFYBkAHhx5YfpSt971ZL7tt8yC35Y5Vfdq97JLxoiFkNwBqJyq5Ds9B8IgIIQ89lzLQGZ5wHmqTQBGbZ+0AOmarius4CnKAR4y33E+Qyapm6R8DeietZ4DzJft2CAy5YcjbYEEKp5nU992GKEAIMu4VRLotPGP2aWF0AZlbQCsMl2rnaMJQEQC9gIZCFQAfvTgMAd8/wvKfpU9MKHkXCSs7fE2iGx8uuQ4NmX8uGVstJA5edpNE0q/W7IHtHNMZPIVpPMaewtr8tYuWHJezwD1pPN6rRiocnbm22TQ4SPO/2XsivOLOcAwFgNhNyBdxnnMTznrnPITNWCV8796vd6IixE75pyfxvEMSOf1x8XAe6PLg2ESHYwuo+RG7CJOrn+b3kznNS4G7kT9YZIk/eh3r/FtEg2T5lzT5bxetIJlgETkbxDBjWbTA1ifA3StEKiOX0H28oDIcMSvB75t0+jqMAd0ExUC798IADdFdgVwniSsG9hOl+2/zu6n8xoXrSDuAzSaMi7g81HI6B+93oCyw5IPUvXkDVgZsA2f3PAwePLcdnpkBtQWAWNAzTRfm/djzsgvsgbPaX5EyHm9CHCnwMOYd3uB/Ov600EOuHJee4VFvGx4GbDb2ImTq5eBWAHp8kkR5bzGBcDqOJqtYGcYhzSSXRjQvAbpvMaFW7h8NAW+kTVwRBfOnEkN0nldCPB5YCQAW3Th5ylQcQGKpr0EmtMapMCXogZPJFCQghXsR2kbD4blANmFeUB0IRgQ26FnndclAdkFKwdAdiH44YyQSD6JpSK70NjNa9DciTlnpBtFAe2UB8YwXcF9CTCxggErD8RvADLgkXiZRjzsMkK7jJcFVuN/5l7nm3icRCFjL4fJRdkuXPfngCi54uxP1hEzonQX4v7sRMLnMefhfpIwXrAFhXyw4P7/kgmYSeJwxJwAAAAASUVORK5CYII=","vex":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAMFBMVEUAAABthJtgeY9Ta4H////z+Pzg6fHG2eqivNWUrMOGn7eCl6t5kqp6j6RthJtgcoMKluMvAAAABHRSTlMAoKCgEjok+wAAAPlJREFUeNq1yL1Kw1AAhuE3hxYrRYm5gmivQL0Hwa1LnAtCFpdOjuKY4KBjfnYhIUPWEnIBhgxZRSjHC8hp3KWxkg5ndfD5pu8FDqNAKQkwKXIE9Fuj3zCQjECYDCaPs4tOQP9pDME4B1MAbIwTgJEwv2yixPcCPw2igGkcljlZ3YfP33WSJTB9yhG25HaJPLUBtkCdvl5fpVlVVRy3ntdQZW+eX6e77UIcNqAke0eq+JCgGvam4apoUGqtHtC067K9Q1O+l2WMJl9RvPAnl7+0L5Ao9NBB16GxZpZloTGFeWYC47l7DzrXcUF3sHTQjW9YoHMW4zn/5QeNK1xt8XQSVQAAAABJRU5ErkJggg==","villager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAbFBMVEX///++iGy3gnKze2J6enpra2thYWFUVFRUU1NISElMODM9LSkAAAD///++iGy3gnKUj4m1e2eze2KBfXl/e3eja01vbWqQXkNjYmAAlhFUU1N1Ry93QjVcQjpISElMODM9LSkzJBEjIyMjGBTjk4HHAAAADXRSTlMAAAAAAAAAAAAAAAAA7Uh4SAAAAn9JREFUeNrtlN1ymzAQRm3cuG5C9oMFJIW0idu+/zt2/wieiTNAk0ufgdEKs0cryWJXB0RguUEO1/Xzc871Irs3AViTQdnYLgAzGfmPkFnT9V4tiAI+IyCB/19AVgA+KyCaF9FZL3iDlfUCAl0AjpYmFgWagjkJfjNCtCwgml7niyrmcJ0gho7mQkDrBJALsAhwyYY1IAP4bahgdmKFgBme8PjE/PRI3mMGG1gWxMpnE3GetmFiWQA/yJl/CpzJutggYAYYIjAyQfu8XlAv8DWCb5sFqW2Btk2llJSKctwqIAFJ8oVFQRL+ChcCEKGlKwJSQLRfENBHFYCMZYG+2F6tAOauFgRtC8K1RYSdVqhgd6eCUmIUxTtdKknySXchOYOQEhkAmNmm4YJ5FPWM0nRdbKNGZRxHH2KElx8CRmWCvu+7roxd17nADE1qhdR0RfP1mQZMbAqwnxcT9KnYS5Lc903Tq0U6jVTt+Xo5SesWCUMvIheUMvh5GnwqqpKUJPU0jUSik57jnyswABWgitMYU2MjZlw0X9ppDbpOTMSkwCCQCXw+FBe4uGGUdehGy3950ScaEC4/duwCaWHPorEdGSM/0mMRRlKYogD2bZzGZvuJIa+/SFIQYfCjqvb7w6EKDiYAGe5h4DU4/3o9ezSzF94JGK4IC84Tr+d3PHzwTbTqvQVkqjMlSEa5KjhYLUElPJxOD8r9/cmjGQJxJmMgQVN2B0UCbUxxPJ2+OyI4BnfKEcAwxF95mARL1BcAnJmcTIRqq0DzQsCZwJsEUIgGFUCIKmiTQEceZsGwRlBPQGHY3EOQB2Jalz9XAB11crFWUH+Sm+AmuAlugi8T/AM2/NtEbUTDnAAAAABJRU5ErkJggg==","warden":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAOVBMVEUAAADR1ra7w5sp3+uir4aBmYhudXsAkpVAV2wFYl0HSFcDQVAXKC8GLjcLISoRGyERFRoNEhcFBBJsUoYuAAAAAXRSTlMAQObYZgAABmJJREFUeNrtmuti4ygMhWMChEYrjtn3f9iVEG7r4E7iSyf7wyfcbGetzxIixTuXbyqloICdiCHDJV1+U0UEgFNiAOUdAIZApObfBlAUoLwToBCVE+B1gNvl+laA6+12e68HPoTgvXOAru8FYNrpgbJCAJwIgLHwhW4Sgo8jAfCjcSMIzgXAnJGZSO1f9wFgydiP4pS4fSNnMX+Rx98JIMLUQNQYRD0Mknog2bnMdDXrh4UAOQPIZl/GvWuiGwYXJ4DL5VgAZKDkYhqBRwIwwCKA8dKqTCkE9xoAGkAZpf+QRjQHADjF4NQDLsTEwHOApBFb4QELey7lH+WwwyZoZX0gUQiJ0XtgfxZkoHa1GQuQH6YhGCyyCDwHsOdf4YEMMz9qJ70AzASNwTBoBPAKAKWwDgBoIBMA5vYtBhaBg0LQA4xFalaGDsAYRHYexwNkmGGhGBUDetQgMF8Jf2EOQAHQ7FehmwPMthIy/9YcUAoNv3R2+F2wRLQk/J05kAH1/fJK2BCZJ7DjFiJ8AejwwxC+AeDLCRwCl1cBSAnW/hjZ43+OUeZCSrDR8SHof45nMhb1gI4PBFgnMBvYGwC6deBoEd3vdyKWXkV/cVdmMrMiae/0FgC6VQQpSSj+OgCpWhDoHSEww1MM3uIBc32bjG/wgJrV5qZNeg5wvdyOzgJqifCaB2Rjfj02BDf6ss89QG//4/A5UC3fTU8BrnRo5IkSiexAC7VLVuyKXZo8QHwAADMR852ll08temCH2lpzl5rbN5pZ3Znf6MJ7AVRZpPeXponaqczI+mFmaUi/ALQkUAIizvsAckaWCjVXTRXpqvSoIGsjKmUc60mUCUCccBGEvI+gAMVqwchjgRRoq6q2pVfr9Vt6AANoDNe9LjDrKjNq4uW3JbDuG4BoL8BMI1jUUCZBy3e9fscVAFkbsCUFN5zZrs2EXwIwcfm3Sga9+r3i9Ot5EAAKq3ETd6Ff+CO52uf7/TAAyLOrxA8ovZjLXLY47gdosTb7ED0Q9CHIfwTI2zwwFuR6Tya2tyUwtv4d5aTpd2N+rz6BV2zNOAOQjtHfrP9/SXcmsU/fAHLptAoAmAYvzQF7fuJFD5jwIkC/De4VQ4gdgKbhPATo77BqRbTUIlr8DjP3bCYsjfMWAHusZYBhGLAUjHYSHcEKgH5164XBDeoF1K6UUYuJWejMNApg/VYAspndS9+Vs5c6DMkNbNlrzz4MSqUCSs6zNWMdABPRTyEIzg1JanCDspSmUXn0pDkggwhZR2s9MLY58GMIvHMuSaMM3g0oTc6FWmoIMiElUK72sSEE9/pZBhCrUaowBO8FIFdsOCcnXfUAQCknKZSBzZPwfuflEHjnozdzMm4GgODkggFkCi47KYHyawBLGc3Mi6tYEKvRe6cgUgGU0QCC90JQjIBCILP/IsD4sNhC0n0aPgL4GAQgSgkegHlAD/Tajr8Jx5bKDiySdEdjmANEr7a8lz7FYAAZiDGFmLYDmMRsqinupbo4OGEA8xwgBIEQ6z5SSp8eoETKsBnAHGBWw+CEw2kfKtFsIUoxqAvEGFEitOCBiUmv7fPA4LyYFPmkzZTb83e/lNT3UQZMjGICM4goxk0AaE+BwfsghoUjSpXeSTcHYOIkDDFxYhFKExh6aSMAGoDzwUz66M0Z0rnwAKBOSMykNjGFD9UJnDYCQM1XAK8Q3kfp1BnehzkAbNdO0j2+zFYA3gegGeakSO8FQKsM5wBgUbVf9FPy7I/6zQBjBQiaSGK7proUn2JI84mFwlLkU83PNEpFv7au8UBKFH2qa11QBrVOibqdNOx5l7QdoGAEJSIxqg4IMUWtxMRzgF77AQosgjbF1XBIOohEBH4GMFq7C6CJRYlTrHlGHLUB49c98Imv1kgYki1zicGMsgQAaw8DaAJQ85wsz2p5uIVZBSxk+A4xO8gbtmY1FQtamjPAsDs+TlilrC0BBqHVrphpbN6cVpMsH0jBwn/MRAARMZqj6hAytEFZElbvDdGs9wD0RL3/Ta9Mwp5jtLrln4Pgs8ULAE+0CmASNkzCowBW7w27hQ3WaYP1AP3e8DkAFt9NWIatA9i0NyyosGDriqV5aWmOVQD93lCV/3yPKYlrpdKl+RqATXtDeqI1ACv3hsfrx73hqVOnTp06derUqVOnTp06derU/1n/AR0CP3Q2vq+HAAAAAElFTkSuQmCC","witch":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACACAMAAACMX59YAAAAmVBMVEUAAAD///+2qJWrn42rnYmmmoijlIOgkoCPj4+YiXeWdliWdFcltDWUc1Z6d3eAcl6PbFNra2uQXkN6XnBhYWFoWUwMixp1Ry8vaDVaTTZMTExHT0hQQy0/Pz9IPCc6OjpANSQkQCg1Lh0dPAkxKRwoKCgsKRg2F1guJxonJiYwFE0YKRoTLgEeHh4oEEIdCy8REREVByUKDAvCurIkAAAAAXRSTlMAQObYZgAAA1lJREFUeNrtloFS2kAQhiPphVJbKVq10XDG2Ba4mjvx/R+u/+5yR1U0d2SqYyefgcuO+T/2NoYxyw4PMyLPlVL5KN+gsuz8/Pg46+bw65dPtEoeginjBdFAkAvTEkwVxen1eoJRjg30FfTbgjAKQ0wlD0NQTEKQNq98ntcANhU3fQkVile1talogRJBkQsiIFG3QPnrVQHkNBhAt8BHCgKFxBURJSh8/hcjFeULECXwMzs4KYqTAwpLXgxFtwBXkWM6/gDGU0kHugUTMoDpeHx6Oh5PleQnExy0dAsmrICAmUp8S/ZeKQum/BFIFUyYWIEGP0GMYAEM+OeCgnkVQQNqCJrlcqlBDXBWqVGuKlSE1lVZVpW2wAtoeSxoWEB1XZVaKV2WqEBVleCBwNEaBFoEsm4Epaa3RgQlTvHmSGCQdxCYIKglWEOAbpdNAxclaoR8hWZwOGedgcABWkVQe0ENFY4lIIFmgVQaabw4CPzKglrX/MkNTuigAJpmQaUbrl4WIMXD07JKhHagMfiGigYmHFXVIahl9UNssANUAGdIw7FTgMslSAMAItAiCDpsCT/ZLubzppHcfD4D4tFVSV1UGwHycOwWXMwR/Hg0w3JBAuwaR83AQhORHtDjbgGYHc1mtH4DMjbN1DpUPKnseRZ+eRFjrbPWGKx88vev4gQGOQPYZJIFoQO7swNZXsSGLTzpYNEpcIA7gEHOxRY7RBFgBs4L/BycW6P0HaBar52VLxz7tAMJiUC6ySwiEBiZMucd8oR5IkAqCMS1EVi+2iwMFw5hEUTAAkuC2xsIaENUCdEC9EICRGy6wPEMsGkvWKcK1jKDrcAlbmENgoArt7/A7CFwDwRuDwFP0W+BJ5J+GyEwj+6CSRQYEZitgH6iBU4ExgtMssAaayCgR5QqK/8B2PgtWMsCePhhIB+wCX8H4PYGQdKJAG9JHYjAypNhKQ0ShshXs8DtIXCISMECrliYpbEK3AcSBS2zv6C9Y9pB8IaC/rfRkyZYRfKsoI0kspGOzrtuQdtHcEe8R0H/GfS/C23gd/uYNMH19+u9BFcbLs8+n11ePSSpgxU6WLUeea6TJsiz2xd88tsJ+m8h9osj+gvl3QnA6j7rBQ+uD9z2wMDAwMDAwH/EH571WWMJHeH4AAAAAElFTkSuQmCC","wolf":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAw1BMVEXt5+jk3t/c3Nzf2dnW0NHKxsfIwsO3t7ferIWzs7Nu1Je3q6WhoaGdnU10oIaBgYEatVh+dnBegyJlZi1iWkAodi5WVlZUVFRERERHQjs+PTBENiY5ODVDNSWAAHY/MCQzMzMtLSg1Kh8sLCo0KR4ZGRkAAAD////k2Nnd2tvV0NDTz8/Kx8jJwcLBvr7UtaTOr5bEq5ywqqefmpaalZGnj36ajIiVhnmheFuUe2iBdm2Mb1JJQjk5PD85ODUtLSgSFBY76smzAAAAJ3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi/HzzAAADR0lEQVR42s2UbXfbNgyF6Wli41WZqm3NtkQOZ3ZVwwCFbShO6r6k/v+/ahdwtjOp/dJvvZT5gqP7HAC2GYZhWFDBYBIilsvLy5Ty8HsPiY4yirIQBgtfX1/HLlbD/xUcQIXh51JI1ut1TumiXyz6SKKkAi4AzEQGCLH7AhCpFDxMmBmAlNIffYw9MlMgPewrAPDHKWCxiAtmEFjYyogIrNd//frixU8/lyKIF4htdUAIsxIETiEAfMPGQRmDC0HzGt1Xz6AKUwAXJxC8VAgkb+TgIgIacV//7UE1K8Fsb477/fGN+Q1HAFw9e5auErZi5KcVANcsA+D3H+7vP+yFvA9CvBZhr8qmU4dP9Ukx3AzABP/DAwjE9hbGb1TcYnYCynCOksJYpwCR/cM9QfcPe3lSApWwAgJ5AbazPhhqCkgpvdwddnjOzlLKOZnEatH/CKKEgJ0w5CuA7WHrgL8dkNMVLMKj18BWxegBIgVHZQrIOb/cHDYO+CGfAIl1VMHjDYRvFATYQ9hMAb9Am08bJHF2dg6Z/wqq+9j3nf3wYmhjFWOoY+xirOowBWw3Nzc3R3w22+1utz0fHqFl09Z919e1WAqS61hBDsA6B4Bg/g36cNidP5bySKVtYmeDCkSr6nl8jiy6PkYsU8Dh+Omk4+EEIHosVFV17LouFhKlEioQapj7LoZYTwE2NaucXl9cvLa9XwSLUHW9DaERDayRd4ghdH++whzngM+f373LKwA+fnz/dvCLIIaqRgv6qGKAEJxQhVcd0ghfBSQHvH2P0I8h4O3Tt6Cqo+riZK8i9MV98HThcVZMQsyDiLVO7CjYEGYqSlSFAABYUwDx6T/YwEesTANWOIRxNCuRFLZWLtGqpmmW7QxAzGZdqllUDFBOAMvA9pgVuTRt2yyXmOYZCDOsjYqjeGAqEBPEBSIERkCaJue2BWbeA7jwcYACMbAl4CWI+NYBVAyQVmkOuNPxTvVubAUWJZQAJxh2ZAD8RKNyaVv7r+c5AH6MUbMKwW5NZKtamP26RgiPjkwruLMxpgBhvr29ZTEAmwsAtq3gMdbpNDIjfSBWaTUFrFJOVlvGQHrAm9XNPmEAwCqc7UWbpoDh2/WdAf4B+LQj08eGOFAAAAAASUVORK5CYII=","zombie":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAclBMVEUAAAAAzMyPj495nGVxlVtvlVxtlVtnkFYAr69ph1Z6d3cAqKgAnp5ae0gAmZlra2tXdUdOezZhYWFIdTJJcTVWScwAf39KaS0+aS07Yi9MTExGOqU2WiUAaGg4UiYAW1s/Pz86MYkwKHImIVsoKCgaGho5R/XAAAAAAXRSTlMAQObYZgAAAkJJREFUeNrtk2FzmzAMhpPNm+0akmjVqFRGEsPy///iXtnlml27laRfeWwswZ0eI3NsZkRFVWwUdHMrIqzKitKC3C4gVjhgOQLVOwQEAcvdAmViwZQiuKOFsj2J3i1gZWEVrAqEbxaIlkHMAni5QK15VRSpwTI/UFuYFnx/q2ZCQYyMEq5PSKWMJW8gZSv//av75rneqcJFxMqLemdiiq1zLraR6llimEtk2fdnpvZycfFyaeGScggkqKclLQjqWShG1RhR/XIKCEgWtCByLJs96tOTPiIROoogMhEvO0QWqf+AWqXdsQIEWfhP/AS/wXy//VXYji/Mz8N2G5iIPxYcC28EW0CsnxOwqnyqhTf/yQhy3/fjNE096Lru1CRl0dR0oGlSCAn5bteZYI7vCcYiGIYuhUa1CQH5kFIAVRbAHP8S9FeCoQhC2XgAKSDB8h9BroIMQc79aRhOwQwoqzkyTMt3Ke3m+CrIVWAxwzacTiZIRQBCgwyXgAgEtGAzk/tcdh6R2ETNkEyAOSCfBcykLjovyuy9j68CVPUAS4lWZB3AkQa8b1WlJMzqW9eykvhD9O8IkM1foR5Bg3wwlzlQJ967loQ0Ru+vD7EKMjJggnJsuKosYZpA2TsXiVnjdQvnsxVa+fm8B93QdbanlRUBkoBFWMk574RF/PUbPJ9R+OVhj/BsgnEap1xIoZsmyO1EcyYI0IFXQTz4+CoA+4f93uIPAMHYF3JTcyRokkmodbFVEo6HeNisrKysrKysrPyDP68WY0lh7YK7AAAAAElFTkSuQmCC","zombie_villager":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAt1BMVEVskkNwbWdVczVjW1tWYC5jVC9IYC4/WChUSSg4TSM4OyExPSUuNyQAAAD///+Iqlt3oEd2kk9skkOCe3RyhFFmij9ffzdwbWdedUVXdUdVczVjW1tUZkBOazBgXjhOaC1HZTdQVzdUTU1PUTNBWSiZKys/WChcQjpURypDTCQ4TSNKPj42TCpJQSRMODNCNzcxRB8vQh44OyExPSUsPRw7MTEyNyQqOSE9LSk2MiAzJBEgKxgjIyNApSiHAAAADnRSTlMAAAAAAAAAAAAAAAAAAKroblcAAAMeSURBVHja7dF/X9s2EMfxrGs3oGtxHXTSztIuE+mtyG1+2HNKxp7/49pXIoHSUhxe65/52E6cmHs7MpMXuxxR3p0iFF6+3Gz+vPztlxdP9AZN9h8IfQ1c/vEMgMkgItV/kYbN5upys/nw4dWhAOarGkS4Ay6vthmYfL8HAHNViD2w3VxdbbfPAGoMV1VVuz2w/fTpeUBt6ro6r4yWwtnZycnJ2dmrgwHMwqjODbmADgeIqrx6Q5XBKvALSlRyOCZjAJM5ZyJig0dgKkN3sw4HjwMEwTAFNlRfuIpDnkIF4DAOMAsRgGAMuYvzEBwmQRTG0SGAGlYX5hfv8AjfzYMT54QzwJ4OAkRFHc//Kc2ZhJQ9xvHCBwDCAkGE3r4P4f1bkuxB9ThRFR4FNCVFqQ9zFHp8wr7OX616XBsFUt+vUwbmf6M5ZtI6rYHgwqpfrQ4BUhb6eanv0rpba5dS32G8GwdOT1+f5iYjjQG/PvmHTwE/o5/Q5EFWhVnUNnc9FxBCfChgUd91/et7gDGu9AjgyNHnm8833wIQvgDoe7+A6to9CnQQvgQYgDwCmLqmGwhjS1Bh4scAMiQPgCZnse2zdmqbiHkS2Qm2URG11iEict47T6gAbRObaNvYNjhpbIyxzIsw42War8a4U/M8Nod5vQdibNs4DC0MGzNgpzGlJEiTLfMQUIwYNo68I3WexO2BdgCgQ3awNVlJuzrcGpP5FVkhckCIRLGLuwVaTaopJLyBGuK9gPmptRbfNFMc1qozZfFCglQKoIgDOeagA7Ym3zEOXa7MN1gASBBRlQwZQ96JOBwF4MCeidg5puQ4YMELPNgO5UeXsWVEgAYVJlMALkIBKIAAwHnH0SI8FE2xybddYr5tmzZFJAwAeWYIorcACzE5KC4wBwDLYVgu24gwPeR57KlFHpN1XRsiZgehACKz2wUJ+xnOF7uu/1pcL77Kq6caZUD2/0ZFAk9zM9XrfYvrb1L1TPXvNbFnhwqQEPOKZbVKaZW0aWIpvy+bZVOypUYT7vFx9tGz9zOcFuDN/+gIHIEjcASOwBH44cB/1lQM4ZNhKecAAAAASUVORK5CYII="} \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/allay.obj b/prismarine-viewer/viewer/lib/entity/models/allay.obj new file mode 100644 index 00000000..69765c22 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/allay.obj @@ -0,0 +1,325 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o head +v 0.15625 0.5631249999999999 0.15625 +v 0.15625 0.5631249999999999 -0.15625 +v 0.15625 0.250625 0.15625 +v 0.15625 0.250625 -0.15625 +v -0.15625 0.5631249999999999 -0.15625 +v -0.15625 0.5631249999999999 0.15625 +v -0.15625 0.250625 -0.15625 +v -0.15625 0.250625 0.15625 +vt 0.15625 0.84375 +vt 0.3125 0.84375 +vt 0.3125 0.6875 +vt 0.15625 0.6875 +vt 0 0.84375 +vt 0.15625 0.84375 +vt 0.15625 0.6875 +vt 0 0.6875 +vt 0.46875 0.84375 +vt 0.625 0.84375 +vt 0.625 0.6875 +vt 0.46875 0.6875 +vt 0.3125 0.84375 +vt 0.46875 0.84375 +vt 0.46875 0.6875 +vt 0.3125 0.6875 +vt 0.3125 0.84375 +vt 0.15625 0.84375 +vt 0.15625 1 +vt 0.3125 1 +vt 0.46875 1 +vt 0.3125 1 +vt 0.3125 0.84375 +vt 0.46875 0.84375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b432e290-ff98-8fcb-61cd-b0f5c289cd94 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0.09375 0.25 0.0625 +v 0.09375 0.25 -0.0625 +v 0.09375 0 0.0625 +v 0.09375 0 -0.0625 +v -0.09375 0.25 -0.0625 +v -0.09375 0.25 0.0625 +v -0.09375 0 -0.0625 +v -0.09375 0 0.0625 +vt 0.0625 0.625 +vt 0.15625 0.625 +vt 0.15625 0.5 +vt 0.0625 0.5 +vt 0 0.625 +vt 0.0625 0.625 +vt 0.0625 0.5 +vt 0 0.5 +vt 0.21875 0.625 +vt 0.3125 0.625 +vt 0.3125 0.5 +vt 0.21875 0.5 +vt 0.15625 0.625 +vt 0.21875 0.625 +vt 0.21875 0.5 +vt 0.15625 0.5 +vt 0.15625 0.625 +vt 0.0625 0.625 +vt 0.0625 0.6875 +vt 0.15625 0.6875 +vt 0.25 0.6875 +vt 0.15625 0.6875 +vt 0.15625 0.625 +vt 0.25 0.625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b432e290-ff98-8fcb-61cd-b0f5c289cd94 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o body +v 0.08125000000000004 0.23750000000000004 0.050000000000000044 +v 0.08125000000000004 0.23750000000000004 -0.04999999999999999 +v 0.08125000000000004 -0.04999999999999999 0.050000000000000044 +v 0.08125000000000004 -0.04999999999999999 -0.04999999999999999 +v -0.08124999999999999 0.23750000000000004 -0.04999999999999999 +v -0.08124999999999999 0.23750000000000004 0.050000000000000044 +v -0.08124999999999999 -0.04999999999999999 -0.04999999999999999 +v -0.08124999999999999 -0.04999999999999999 0.050000000000000044 +vt 0.0625 0.4375 +vt 0.15625 0.4375 +vt 0.15625 0.28125 +vt 0.0625 0.28125 +vt 0 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.28125 +vt 0 0.28125 +vt 0.21875 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.28125 +vt 0.21875 0.28125 +vt 0.15625 0.4375 +vt 0.21875 0.4375 +vt 0.21875 0.28125 +vt 0.15625 0.28125 +vt 0.15625 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.5 +vt 0.15625 0.5 +vt 0.25 0.5 +vt 0.15625 0.5 +vt 0.15625 0.4375 +vt 0.25 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b432e290-ff98-8fcb-61cd-b0f5c289cd94 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o right_arm +v 0.15625 0.25 0.0625 +v 0.15625 0.25 -0.0625 +v 0.15625 0 0.0625 +v 0.15625 0 -0.0625 +v 0.09375 0.25 -0.0625 +v 0.09375 0.25 0.0625 +v 0.09375 0 -0.0625 +v 0.09375 0 0.0625 +vt 0.78125 0.9375 +vt 0.8125 0.9375 +vt 0.8125 0.8125 +vt 0.78125 0.8125 +vt 0.71875 0.9375 +vt 0.78125 0.9375 +vt 0.78125 0.8125 +vt 0.71875 0.8125 +vt 0.875 0.9375 +vt 0.90625 0.9375 +vt 0.90625 0.8125 +vt 0.875 0.8125 +vt 0.8125 0.9375 +vt 0.875 0.9375 +vt 0.875 0.8125 +vt 0.8125 0.8125 +vt 0.8125 0.9375 +vt 0.78125 0.9375 +vt 0.78125 1 +vt 0.8125 1 +vt 0.84375 1 +vt 0.8125 1 +vt 0.8125 0.9375 +vt 0.84375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b432e290-ff98-8fcb-61cd-b0f5c289cd94 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o left_arm +v -0.09375 0.25 0.0625 +v -0.09375 0.25 -0.0625 +v -0.09375 0 0.0625 +v -0.09375 0 -0.0625 +v -0.15625 0.25 -0.0625 +v -0.15625 0.25 0.0625 +v -0.15625 0 -0.0625 +v -0.15625 0 0.0625 +vt 0.78125 0.75 +vt 0.8125 0.75 +vt 0.8125 0.625 +vt 0.78125 0.625 +vt 0.71875 0.75 +vt 0.78125 0.75 +vt 0.78125 0.625 +vt 0.71875 0.625 +vt 0.875 0.75 +vt 0.90625 0.75 +vt 0.90625 0.625 +vt 0.875 0.625 +vt 0.8125 0.75 +vt 0.875 0.75 +vt 0.875 0.625 +vt 0.8125 0.625 +vt 0.8125 0.75 +vt 0.78125 0.75 +vt 0.78125 0.8125 +vt 0.8125 0.8125 +vt 0.84375 0.8125 +vt 0.8125 0.8125 +vt 0.8125 0.75 +vt 0.84375 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b432e290-ff98-8fcb-61cd-b0f5c289cd94 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o left_wing +v -0.03125 0.1875 0.5625 +v -0.03125 0.1875 0.0625 +v -0.03125 -0.125 0.5625 +v -0.03125 -0.125 0.0625 +v -0.03125 0.1875 0.0625 +v -0.03125 0.1875 0.5625 +v -0.03125 -0.125 0.0625 +v -0.03125 -0.125 0.5625 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 0.75 0.15625 +vt 0.75 0.15625 +vt 1 0.3125 +vt 0.75 0.3125 +vt 0.75 0.15625 +vt 1 0.15625 +vt 1 0.3125 +vt 1 0.3125 +vt 1 0.15625 +vt 1 0.15625 +vt 0.75 0.3125 +vt 0.5 0.3125 +vt 0.5 0.15625 +vt 0.75 0.15625 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 0.75 0.5625 +vt 0.75 0.5625 +vt 0.75 0.5625 +vt 0.75 0.5625 +vt 0.75 0.3125 +vt 0.75 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b432e290-ff98-8fcb-61cd-b0f5c289cd94 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o right_wing +v 0.03125 0.1875 0.5625 +v 0.03125 0.1875 0.0625 +v 0.03125 -0.125 0.5625 +v 0.03125 -0.125 0.0625 +v 0.03125 0.1875 0.0625 +v 0.03125 0.1875 0.5625 +v 0.03125 -0.125 0.0625 +v 0.03125 -0.125 0.5625 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 0.75 0.15625 +vt 0.75 0.15625 +vt 0.5 0.3125 +vt 0.75 0.3125 +vt 0.75 0.15625 +vt 0.5 0.15625 +vt 1 0.3125 +vt 1 0.3125 +vt 1 0.15625 +vt 1 0.15625 +vt 0.75 0.3125 +vt 1 0.3125 +vt 1 0.15625 +vt 0.75 0.15625 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 0.75 0.5625 +vt 0.75 0.5625 +vt 0.75 0.5625 +vt 0.75 0.5625 +vt 0.75 0.3125 +vt 0.75 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b432e290-ff98-8fcb-61cd-b0f5c289cd94 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/axolotl.obj b/prismarine-viewer/viewer/lib/entity/models/axolotl.obj new file mode 100644 index 00000000..706474b3 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/axolotl.obj @@ -0,0 +1,509 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.25 0.25 0.3125 +v 0.25 0.25 -0.3125 +v 0.25 0 0.3125 +v 0.25 0 -0.3125 +v -0.25 0.25 -0.3125 +v -0.25 0.25 0.3125 +v -0.25 0 -0.3125 +v -0.25 0 0.3125 +vt 0.15625 0.671875 +vt 0.28125 0.671875 +vt 0.28125 0.609375 +vt 0.15625 0.609375 +vt 0 0.671875 +vt 0.15625 0.671875 +vt 0.15625 0.609375 +vt 0 0.609375 +vt 0.4375 0.671875 +vt 0.5625 0.671875 +vt 0.5625 0.609375 +vt 0.4375 0.609375 +vt 0.28125 0.671875 +vt 0.4375 0.671875 +vt 0.4375 0.609375 +vt 0.28125 0.609375 +vt 0.28125 0.671875 +vt 0.15625 0.671875 +vt 0.15625 0.828125 +vt 0.28125 0.828125 +vt 0.40625 0.828125 +vt 0.28125 0.828125 +vt 0.28125 0.671875 +vt 0.40625 0.671875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0 0.3125 0.25 +v 0 0.3125 -0.3125 +v 0 0 0.25 +v 0 0 -0.3125 +v 0 0.3125 -0.3125 +v 0 0.3125 0.25 +v 0 0 -0.3125 +v 0 0 0.25 +vt 0.171875 0.59375 +vt 0.171875 0.59375 +vt 0.171875 0.515625 +vt 0.171875 0.515625 +vt 0.03125 0.59375 +vt 0.171875 0.59375 +vt 0.171875 0.515625 +vt 0.03125 0.515625 +vt 0.3125 0.59375 +vt 0.3125 0.59375 +vt 0.3125 0.515625 +vt 0.3125 0.515625 +vt 0.171875 0.59375 +vt 0.3125 0.59375 +vt 0.3125 0.515625 +vt 0.171875 0.515625 +vt 0.171875 0.59375 +vt 0.171875 0.59375 +vt 0.171875 0.734375 +vt 0.171875 0.734375 +vt 0.171875 0.734375 +vt 0.171875 0.734375 +vt 0.171875 0.59375 +vt 0.171875 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o right_arm +v 0.25 0.0625 -0.375 +v 0.25 0.0625 -0.375 +v 0.5625 0.0625 -0.375 +v 0.5625 0.0625 -0.375 +v 0.25 0.0625 -0.1875 +v 0.25 0.0625 -0.1875 +v 0.5625 0.0625 -0.1875 +v 0.5625 0.0625 -0.1875 +vt 0.03125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.71875 +vt 0.03125 0.71875 +vt 0.03125 0.796875 +vt 0.03125 0.796875 +vt 0.03125 0.71875 +vt 0.03125 0.71875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vt 0.125 0.71875 +vt 0.078125 0.71875 +vt 0.078125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.71875 +vt 0.078125 0.71875 +vt 0.078125 0.796875 +vt 0.03125 0.796875 +vt 0.03125 0.796875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vn -2.220446049250313e-16 -1 -2.220446049250313e-16 +vn 4.930380657631324e-32 2.220446049250313e-16 -1 +vn 2.220446049250313e-16 1 2.220446049250313e-16 +vn -4.930380657631324e-32 -2.220446049250313e-16 1 +vn -1 2.220446049250313e-16 4.930380657631324e-32 +vn 1 -2.220446049250313e-16 -4.930380657631324e-32 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o right_leg +v 0.25 0.0625 0.3125 +v 0.25 0.0625 0.3125 +v 0.5625 0.0625 0.3125 +v 0.5625 0.0625 0.3125 +v 0.25 0.0625 0.125 +v 0.25 0.0625 0.125 +v 0.5625 0.0625 0.125 +v 0.5625 0.0625 0.125 +vt 0.03125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.71875 +vt 0.03125 0.71875 +vt 0.03125 0.796875 +vt 0.03125 0.796875 +vt 0.03125 0.71875 +vt 0.03125 0.71875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vt 0.125 0.71875 +vt 0.078125 0.71875 +vt 0.078125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.71875 +vt 0.078125 0.71875 +vt 0.078125 0.796875 +vt 0.03125 0.796875 +vt 0.03125 0.796875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vn 2.220446049250313e-16 1 -2.220446049250313e-16 +vn 4.930380657631324e-32 2.220446049250313e-16 1 +vn -2.220446049250313e-16 -1 2.220446049250313e-16 +vn -4.930380657631324e-32 -2.220446049250313e-16 -1 +vn -1 2.220446049250313e-16 -4.930380657631324e-32 +vn 1 -2.220446049250313e-16 4.930380657631324e-32 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o left_arm +v -0.25 0.0625 -0.1875 +v -0.25 0.0625 -0.1875 +v -0.5625 0.0625 -0.1875 +v -0.5625 0.0625 -0.1875 +v -0.25 0.0625 -0.375 +v -0.25 0.0625 -0.375 +v -0.5625 0.0625 -0.375 +v -0.5625 0.0625 -0.375 +vt 0.03125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.71875 +vt 0.03125 0.71875 +vt 0.03125 0.796875 +vt 0.03125 0.796875 +vt 0.03125 0.71875 +vt 0.03125 0.71875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vt 0.125 0.71875 +vt 0.078125 0.71875 +vt 0.078125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.71875 +vt 0.078125 0.71875 +vt 0.078125 0.796875 +vt 0.03125 0.796875 +vt 0.03125 0.796875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vn 2.220446049250313e-16 -1 -2.220446049250313e-16 +vn 4.930380657631324e-32 -2.220446049250313e-16 1 +vn -2.220446049250313e-16 1 2.220446049250313e-16 +vn -4.930380657631324e-32 2.220446049250313e-16 -1 +vn 1 2.220446049250313e-16 4.930380657631324e-32 +vn -1 -2.220446049250313e-16 -4.930380657631324e-32 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o left_leg +v -0.25 0.0625 0.125 +v -0.25 0.0625 0.125 +v -0.5625 0.0625 0.125 +v -0.5625 0.0625 0.125 +v -0.25 0.0625 0.3125 +v -0.25 0.0625 0.3125 +v -0.5625 0.0625 0.3125 +v -0.5625 0.0625 0.3125 +vt 0.03125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.71875 +vt 0.03125 0.71875 +vt 0.03125 0.796875 +vt 0.03125 0.796875 +vt 0.03125 0.71875 +vt 0.03125 0.71875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vt 0.125 0.71875 +vt 0.078125 0.71875 +vt 0.078125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.71875 +vt 0.078125 0.71875 +vt 0.078125 0.796875 +vt 0.03125 0.796875 +vt 0.03125 0.796875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.796875 +vt 0.125 0.796875 +vn -2.220446049250313e-16 1 -2.220446049250313e-16 +vn 4.930380657631324e-32 -2.220446049250313e-16 -1 +vn 2.220446049250313e-16 -1 2.220446049250313e-16 +vn -4.930380657631324e-32 2.220446049250313e-16 1 +vn 1 2.220446049250313e-16 -4.930380657631324e-32 +vn -1 -2.220446049250313e-16 4.930380657631324e-32 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o tail +v 0 0.3125 1 +v 0 0.3125 0.25 +v 0 0 1 +v 0 0 0.25 +v 0 0.3125 0.25 +v 0 0.3125 1 +v 0 0 0.25 +v 0 0 1 +vt 0.21875 0.515625 +vt 0.21875 0.515625 +vt 0.21875 0.4375 +vt 0.21875 0.4375 +vt 0.03125 0.515625 +vt 0.21875 0.515625 +vt 0.21875 0.4375 +vt 0.03125 0.4375 +vt 0.40625 0.515625 +vt 0.40625 0.515625 +vt 0.40625 0.4375 +vt 0.40625 0.4375 +vt 0.21875 0.515625 +vt 0.40625 0.515625 +vt 0.40625 0.4375 +vt 0.21875 0.4375 +vt 0.21875 0.515625 +vt 0.21875 0.515625 +vt 0.21875 0.703125 +vt 0.21875 0.703125 +vt 0.21875 0.703125 +vt 0.21875 0.703125 +vt 0.21875 0.515625 +vt 0.21875 0.515625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o head +v 0.25 0.3125 -0.3125 +v 0.25 0.3125 -0.625 +v 0.25 0 -0.3125 +v 0.25 0 -0.625 +v -0.25 0.3125 -0.625 +v -0.25 0.3125 -0.3125 +v -0.25 0 -0.625 +v -0.25 0 -0.3125 +vt 0.078125 0.90625 +vt 0.203125 0.90625 +vt 0.203125 0.828125 +vt 0.078125 0.828125 +vt 0 0.90625 +vt 0.078125 0.90625 +vt 0.078125 0.828125 +vt 0 0.828125 +vt 0.28125 0.90625 +vt 0.40625 0.90625 +vt 0.40625 0.828125 +vt 0.28125 0.828125 +vt 0.203125 0.90625 +vt 0.28125 0.90625 +vt 0.28125 0.828125 +vt 0.203125 0.828125 +vt 0.203125 0.90625 +vt 0.078125 0.90625 +vt 0.078125 0.984375 +vt 0.203125 0.984375 +vt 0.328125 0.984375 +vt 0.203125 0.984375 +vt 0.203125 0.90625 +vt 0.328125 0.90625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o left_gills +v -0.25 0.4375 -0.375 +v -0.25 0.4375 -0.375 +v -0.25 0 -0.375 +v -0.25 0 -0.375 +v -0.4375 0.4375 -0.375 +v -0.4375 0.4375 -0.375 +v -0.4375 0 -0.375 +v -0.4375 0 -0.375 +vt 0.171875 0.375 +vt 0.21875 0.375 +vt 0.21875 0.265625 +vt 0.171875 0.265625 +vt 0.171875 0.375 +vt 0.171875 0.375 +vt 0.171875 0.265625 +vt 0.171875 0.265625 +vt 0.21875 0.375 +vt 0.265625 0.375 +vt 0.265625 0.265625 +vt 0.21875 0.265625 +vt 0.21875 0.375 +vt 0.21875 0.375 +vt 0.21875 0.265625 +vt 0.21875 0.265625 +vt 0.21875 0.375 +vt 0.171875 0.375 +vt 0.171875 0.375 +vt 0.21875 0.375 +vt 0.265625 0.375 +vt 0.21875 0.375 +vt 0.21875 0.375 +vt 0.265625 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o right_gills +v 0.4375 0.4375 -0.375 +v 0.4375 0.4375 -0.375 +v 0.4375 0 -0.375 +v 0.4375 0 -0.375 +v 0.25 0.4375 -0.375 +v 0.25 0.4375 -0.375 +v 0.25 0 -0.375 +v 0.25 0 -0.375 +vt 0 0.375 +vt 0.046875 0.375 +vt 0.046875 0.265625 +vt 0 0.265625 +vt 0 0.375 +vt 0 0.375 +vt 0 0.265625 +vt 0 0.265625 +vt 0.046875 0.375 +vt 0.09375 0.375 +vt 0.09375 0.265625 +vt 0.046875 0.265625 +vt 0.046875 0.375 +vt 0.046875 0.375 +vt 0.046875 0.265625 +vt 0.046875 0.265625 +vt 0.046875 0.375 +vt 0 0.375 +vt 0 0.375 +vt 0.046875 0.375 +vt 0.09375 0.375 +vt 0.046875 0.375 +vt 0.046875 0.375 +vt 0.09375 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o top_gills +v 0.25 0.5 -0.375 +v 0.25 0.5 -0.375 +v 0.25 0.3125 -0.375 +v 0.25 0.3125 -0.375 +v -0.25 0.5 -0.375 +v -0.25 0.5 -0.375 +v -0.25 0.3125 -0.375 +v -0.25 0.3125 -0.375 +vt 0.046875 0.421875 +vt 0.171875 0.421875 +vt 0.171875 0.375 +vt 0.046875 0.375 +vt 0.046875 0.421875 +vt 0.046875 0.421875 +vt 0.046875 0.375 +vt 0.046875 0.375 +vt 0.171875 0.421875 +vt 0.296875 0.421875 +vt 0.296875 0.375 +vt 0.171875 0.375 +vt 0.171875 0.421875 +vt 0.171875 0.421875 +vt 0.171875 0.375 +vt 0.171875 0.375 +vt 0.171875 0.421875 +vt 0.046875 0.421875 +vt 0.046875 0.421875 +vt 0.171875 0.421875 +vt 0.296875 0.421875 +vt 0.171875 0.421875 +vt 0.171875 0.421875 +vt 0.296875 0.421875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_eacaae49-c631-7fce-d186-9315d408fc43 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/blaze.obj b/prismarine-viewer/viewer/lib/entity/models/blaze.obj new file mode 100644 index 00000000..d4037c53 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/blaze.obj @@ -0,0 +1,601 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o upperBodyParts0 +v -0.5 1.625 -0.0625 +v -0.5 1.625 -0.1875 +v -0.5 1.125 -0.0625 +v -0.5 1.125 -0.1875 +v -0.625 1.625 -0.1875 +v -0.625 1.625 -0.0625 +v -0.625 1.125 -0.1875 +v -0.625 1.125 -0.0625 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o upperBodyParts1 +v 0.625 1.625 0.1875 +v 0.625 1.625 0.0625 +v 0.625 1.125 0.1875 +v 0.625 1.125 0.0625 +v 0.5 1.625 0.0625 +v 0.5 1.625 0.1875 +v 0.5 1.125 0.0625 +v 0.5 1.125 0.1875 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o upperBodyParts2 +v -0.0625 1.625 0.625 +v -0.0625 1.625 0.5 +v -0.0625 1.125 0.625 +v -0.0625 1.125 0.5 +v -0.1875 1.625 0.5 +v -0.1875 1.625 0.625 +v -0.1875 1.125 0.5 +v -0.1875 1.125 0.625 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o upperBodyParts3 +v 0.1875 1.625 -0.5 +v 0.1875 1.625 -0.625 +v 0.1875 1.125 -0.5 +v 0.1875 1.125 -0.625 +v 0.0625 1.625 -0.625 +v 0.0625 1.625 -0.5 +v 0.0625 1.125 -0.625 +v 0.0625 1.125 -0.5 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o upperBodyParts4 +v -0.3125 1.125 0.0625 +v -0.3125 1.125 -0.0625 +v -0.3125 0.625 0.0625 +v -0.3125 0.625 -0.0625 +v -0.4375 1.125 -0.0625 +v -0.4375 1.125 0.0625 +v -0.4375 0.625 -0.0625 +v -0.4375 0.625 0.0625 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o upperBodyParts5 +v 0.4375 1.125 0.0625 +v 0.4375 1.125 -0.0625 +v 0.4375 0.625 0.0625 +v 0.4375 0.625 -0.0625 +v 0.3125 1.125 -0.0625 +v 0.3125 1.125 0.0625 +v 0.3125 0.625 -0.0625 +v 0.3125 0.625 0.0625 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o upperBodyParts6 +v 0.0625 1.125 0.4375 +v 0.0625 1.125 0.3125 +v 0.0625 0.625 0.4375 +v 0.0625 0.625 0.3125 +v -0.0625 1.125 0.3125 +v -0.0625 1.125 0.4375 +v -0.0625 0.625 0.3125 +v -0.0625 0.625 0.4375 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o upperBodyParts7 +v 0.0625 1.125 -0.3125 +v 0.0625 1.125 -0.4375 +v 0.0625 0.625 -0.3125 +v 0.0625 0.625 -0.4375 +v -0.0625 1.125 -0.4375 +v -0.0625 1.125 -0.3125 +v -0.0625 0.625 -0.4375 +v -0.0625 0.625 -0.3125 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o upperBodyParts8 +v -0.1875 0.5 0.25 +v -0.1875 0.5 0.125 +v -0.1875 0 0.25 +v -0.1875 0 0.125 +v -0.3125 0.5 0.125 +v -0.3125 0.5 0.25 +v -0.3125 0 0.125 +v -0.3125 0 0.25 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o upperBodyParts9 +v 0.3125 0.5 -0.125 +v 0.3125 0.5 -0.25 +v 0.3125 0 -0.125 +v 0.3125 0 -0.25 +v 0.1875 0.5 -0.25 +v 0.1875 0.5 -0.125 +v 0.1875 0 -0.25 +v 0.1875 0 -0.125 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o upperBodyParts10 +v 0.25 0.5 0.3125 +v 0.25 0.5 0.1875 +v 0.25 0 0.3125 +v 0.25 0 0.1875 +v 0.125 0.5 0.1875 +v 0.125 0.5 0.3125 +v 0.125 0 0.1875 +v 0.125 0 0.3125 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o upperBodyParts11 +v -0.125 0.5 -0.1875 +v -0.125 0.5 -0.3125 +v -0.125 0 -0.1875 +v -0.125 0 -0.3125 +v -0.25 0.5 -0.3125 +v -0.25 0.5 -0.1875 +v -0.25 0 -0.3125 +v -0.25 0 -0.1875 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.1875 +vt 0.03125 0.1875 +vt 0 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.1875 +vt 0 0.1875 +vt 0.09375 0.4375 +vt 0.125 0.4375 +vt 0.125 0.1875 +vt 0.09375 0.1875 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.09375 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.5 +vt 0.0625 0.5 +vt 0.09375 0.5 +vt 0.0625 0.5 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o Head +v 0.25 1.75 0.25 +v 0.25 1.75 -0.25 +v 0.25 1.25 0.25 +v 0.25 1.25 -0.25 +v -0.25 1.75 -0.25 +v -0.25 1.75 0.25 +v -0.25 1.25 -0.25 +v -0.25 1.25 0.25 +vt 0.125 0.75 +vt 0.25 0.75 +vt 0.25 0.5 +vt 0.125 0.5 +vt 0 0.75 +vt 0.125 0.75 +vt 0.125 0.5 +vt 0 0.5 +vt 0.375 0.75 +vt 0.5 0.75 +vt 0.5 0.5 +vt 0.375 0.5 +vt 0.25 0.75 +vt 0.375 0.75 +vt 0.375 0.5 +vt 0.25 0.5 +vt 0.25 0.75 +vt 0.125 0.75 +vt 0.125 1 +vt 0.25 1 +vt 0.375 1 +vt 0.25 1 +vt 0.25 0.75 +vt 0.375 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e49346a5-14a5-1082-ba30-5d05bc57359f +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/boat.obj b/prismarine-viewer/viewer/lib/entity/models/boat.obj new file mode 100644 index 00000000..72b2ca2a --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/boat.obj @@ -0,0 +1,417 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o bottom +v 0.875 1.3125000000000002 -0.5 +v 0.875 1.1250000000000002 -0.5 +v 0.875 1.3125 0.5 +v 0.875 1.125 0.5 +v -0.875 1.1250000000000002 -0.5 +v -0.875 1.3125000000000002 -0.5 +v -0.875 1.125 0.5 +v -0.875 1.3125 0.5 +vt 0.2421875 0.953125 +vt 0.0234375 0.953125 +vt 0.0234375 0.703125 +vt 0.2421875 0.703125 +vt 0.265625 0.953125 +vt 0.2421875 0.953125 +vt 0.2421875 0.703125 +vt 0.265625 0.703125 +vt 0.484375 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.703125 +vt 0.484375 0.703125 +vt 0.0234375 0.953125 +vt 0 0.953125 +vt 0 0.703125 +vt 0.0234375 0.703125 +vt 0.0234375 0.953125 +vt 0.2421875 0.953125 +vt 0.2421875 1 +vt 0.0234375 1 +vt 0.2421875 1 +vt 0.4609375 1 +vt 0.4609375 0.953125 +vt 0.2421875 0.953125 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o front +v -0.9999999999999999 1.6875 0.5 +v -0.8749999999999999 1.6875 0.5 +v -0.9999999999999999 1.3125 0.5 +v -0.8749999999999999 1.3125 0.5 +v -0.8750000000000001 1.6875 -0.5 +v -1 1.6875 -0.5 +v -0.8750000000000001 1.3125 -0.5 +v -1 1.3125 -0.5 +vt 0.140625 0.546875 +vt 0.015625 0.546875 +vt 0.015625 0.453125 +vt 0.140625 0.453125 +vt 0.15625 0.546875 +vt 0.140625 0.546875 +vt 0.140625 0.453125 +vt 0.15625 0.453125 +vt 0.28125 0.546875 +vt 0.15625 0.546875 +vt 0.15625 0.453125 +vt 0.28125 0.453125 +vt 0.015625 0.546875 +vt 0 0.546875 +vt 0 0.453125 +vt 0.015625 0.453125 +vt 0.015625 0.546875 +vt 0.140625 0.546875 +vt 0.140625 0.578125 +vt 0.015625 0.578125 +vt 0.140625 0.578125 +vt 0.265625 0.578125 +vt 0.265625 0.546875 +vt 0.140625 0.546875 +vn 1 0 -2.220446049250313e-16 +vn 2.220446049250313e-16 0 1 +vn -1 0 2.220446049250313e-16 +vn -2.220446049250313e-16 0 -1 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o back +v 1 1.6875 -0.5625 +v 0.875 1.6875 -0.5625 +v 1 1.3125 -0.5625 +v 0.875 1.3125 -0.5625 +v 0.875 1.6875 0.5625 +v 1 1.6875 0.5625 +v 0.875 1.3125 0.5625 +v 1 1.3125 0.5625 +vt 0.15625 0.671875 +vt 0.015625 0.671875 +vt 0.015625 0.578125 +vt 0.15625 0.578125 +vt 0.171875 0.671875 +vt 0.15625 0.671875 +vt 0.15625 0.578125 +vt 0.171875 0.578125 +vt 0.3125 0.671875 +vt 0.171875 0.671875 +vt 0.171875 0.578125 +vt 0.3125 0.578125 +vt 0.015625 0.671875 +vt 0 0.671875 +vt 0 0.578125 +vt 0.015625 0.578125 +vt 0.015625 0.671875 +vt 0.15625 0.671875 +vt 0.15625 0.703125 +vt 0.015625 0.703125 +vt 0.15625 0.703125 +vt 0.296875 0.703125 +vt 0.296875 0.671875 +vt 0.15625 0.671875 +vn -1 0 -2.220446049250313e-16 +vn 2.220446049250313e-16 0 -1 +vn 1 0 2.220446049250313e-16 +vn -2.220446049250313e-16 0 1 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o right +v -0.875 1.6875 -0.6250000000000001 +v -0.875 1.6875 -0.5000000000000001 +v -0.875 1.3125 -0.6250000000000001 +v -0.875 1.3125 -0.5000000000000001 +v 0.875 1.6875 -0.4999999999999999 +v 0.875 1.6875 -0.6249999999999999 +v 0.875 1.3125 -0.4999999999999999 +v 0.875 1.3125 -0.6249999999999999 +vt 0.234375 0.421875 +vt 0.015625 0.421875 +vt 0.015625 0.328125 +vt 0.234375 0.328125 +vt 0.25 0.421875 +vt 0.234375 0.421875 +vt 0.234375 0.328125 +vt 0.25 0.328125 +vt 0.46875 0.421875 +vt 0.25 0.421875 +vt 0.25 0.328125 +vt 0.46875 0.328125 +vt 0.015625 0.421875 +vt 0 0.421875 +vt 0 0.328125 +vt 0.015625 0.328125 +vt 0.015625 0.421875 +vt 0.234375 0.421875 +vt 0.234375 0.453125 +vt 0.015625 0.453125 +vt 0.234375 0.453125 +vt 0.453125 0.453125 +vt 0.453125 0.421875 +vt 0.234375 0.421875 +vn -1.2246467991473532e-16 0 1 +vn -1 0 -1.2246467991473532e-16 +vn 1.2246467991473532e-16 0 -1 +vn 1 0 1.2246467991473532e-16 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o left +v 0.875 1.6875 0.625 +v 0.875 1.6875 0.5 +v 0.875 1.3125 0.625 +v 0.875 1.3125 0.5 +v -0.875 1.6875 0.5 +v -0.875 1.6875 0.625 +v -0.875 1.3125 0.5 +v -0.875 1.3125 0.625 +vt 0.234375 0.296875 +vt 0.015625 0.296875 +vt 0.015625 0.203125 +vt 0.234375 0.203125 +vt 0.25 0.296875 +vt 0.234375 0.296875 +vt 0.234375 0.203125 +vt 0.25 0.203125 +vt 0.46875 0.296875 +vt 0.25 0.296875 +vt 0.25 0.203125 +vt 0.46875 0.203125 +vt 0.015625 0.296875 +vt 0 0.296875 +vt 0 0.203125 +vt 0.015625 0.203125 +vt 0.015625 0.296875 +vt 0.234375 0.296875 +vt 0.234375 0.328125 +vt 0.015625 0.328125 +vt 0.234375 0.328125 +vt 0.453125 0.328125 +vt 0.453125 0.296875 +vt 0.234375 0.296875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o paddle_left +v 0.21875 1.4135015877365276 1.2703323467065926 +v 0.21875 1.9760015877365271 0.29605376744909906 +v 0.21875 1.3052484122634724 1.2078323467065926 +v 0.21875 1.8677484122634724 0.23355376744909906 +v 0.09375 1.9760015877365271 0.29605376744909906 +v 0.09375 1.4135015877365276 1.2703323467065926 +v 0.09375 1.8677484122634724 0.23355376744909906 +v 0.09375 1.3052484122634724 1.2078323467065926 +vt 0.640625 0.71875 +vt 0.625 0.71875 +vt 0.625 0.6875 +vt 0.640625 0.6875 +vt 0.78125 0.71875 +vt 0.640625 0.71875 +vt 0.640625 0.6875 +vt 0.78125 0.6875 +vt 0.796875 0.71875 +vt 0.78125 0.71875 +vt 0.78125 0.6875 +vt 0.796875 0.6875 +vt 0.625 0.71875 +vt 0.484375 0.71875 +vt 0.484375 0.6875 +vt 0.625 0.6875 +vt 0.625 0.71875 +vt 0.640625 0.71875 +vt 0.640625 1 +vt 0.625 1 +vt 0.640625 1 +vt 0.65625 1 +vt 0.65625 0.71875 +vt 0.640625 0.71875 +vn 0 0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 -0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 0.49999999999999994 +vn 0 -0.8660254037844387 -0.49999999999999994 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o paddle_left +v 0.156875 1.4821313509461098 1.5264621099161748 +v 0.156875 1.7008813509461098 1.147575995760483 +v 0.156875 1.1573718245269453 1.3389621099161748 +v 0.156875 1.3761218245269453 0.960075995760483 +v 0.09437499999999999 1.7008813509461098 1.147575995760483 +v 0.09437499999999999 1.4821313509461098 1.5264621099161748 +v 0.09437499999999999 1.3761218245269453 0.960075995760483 +v 0.09437499999999999 1.1573718245269453 1.3389621099161748 +vt 0.546875 0.890625 +vt 0.5390625 0.890625 +vt 0.5390625 0.796875 +vt 0.546875 0.796875 +vt 0.6015625 0.890625 +vt 0.546875 0.890625 +vt 0.546875 0.796875 +vt 0.6015625 0.796875 +vt 0.609375 0.890625 +vt 0.6015625 0.890625 +vt 0.6015625 0.796875 +vt 0.609375 0.796875 +vt 0.5390625 0.890625 +vt 0.484375 0.890625 +vt 0.484375 0.796875 +vt 0.5390625 0.796875 +vt 0.5390625 0.890625 +vt 0.546875 0.890625 +vt 0.546875 1 +vt 0.5390625 1 +vt 0.546875 1 +vt 0.5546875 1 +vt 0.5546875 0.890625 +vt 0.546875 0.890625 +vn 0 0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 -0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 0.49999999999999994 +vn 0 -0.8660254037844387 -0.49999999999999994 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o paddle_right +v 0.09374999999999989 1.4135015877365273 -1.2703323467065928 +v 0.09375 1.9760015877365271 -0.29605376744909917 +v 0.09374999999999989 1.3052484122634724 -1.2078323467065928 +v 0.09375 1.8677484122634724 -0.23355376744909917 +v 0.21875 1.9760015877365271 -0.29605376744909917 +v 0.2187499999999999 1.4135015877365273 -1.2703323467065928 +v 0.21875 1.8677484122634724 -0.23355376744909917 +v 0.21875 1.3052484122634724 -1.2078323467065928 +vt 0.640625 0.40625 +vt 0.625 0.40625 +vt 0.625 0.375 +vt 0.640625 0.375 +vt 0.78125 0.40625 +vt 0.640625 0.40625 +vt 0.640625 0.375 +vt 0.78125 0.375 +vt 0.796875 0.40625 +vt 0.78125 0.40625 +vt 0.78125 0.375 +vt 0.796875 0.375 +vt 0.625 0.40625 +vt 0.484375 0.40625 +vt 0.484375 0.375 +vt 0.625 0.375 +vt 0.625 0.40625 +vt 0.640625 0.40625 +vt 0.640625 0.6875 +vt 0.625 0.6875 +vt 0.640625 0.6875 +vt 0.65625 0.6875 +vt 0.65625 0.40625 +vt 0.640625 0.40625 +vn 1.0605752387249069e-16 0.49999999999999994 0.8660254037844387 +vn -1 -1.848892746611746e-32 1.224646799147353e-16 +vn -1.0605752387249069e-16 -0.49999999999999994 -0.8660254037844387 +vn 1 1.848892746611746e-32 -1.224646799147353e-16 +vn -6.123233995736765e-17 0.8660254037844388 -0.49999999999999994 +vn 6.123233995736765e-17 -0.8660254037844388 0.49999999999999994 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o paddle_right +v 0.09437499999999988 1.4821313509461096 -1.526462109916175 +v 0.09437499999999988 1.7008813509461094 -1.1475759957604832 +v 0.09437499999999988 1.157371824526945 -1.338962109916175 +v 0.09437499999999988 1.376121824526945 -0.9600759957604832 +v 0.15687499999999988 1.7008813509461094 -1.1475759957604832 +v 0.15687499999999988 1.4821313509461096 -1.526462109916175 +v 0.15687499999999988 1.376121824526945 -0.9600759957604832 +v 0.15687499999999988 1.157371824526945 -1.338962109916175 +vt 0.546875 0.578125 +vt 0.5390625 0.578125 +vt 0.5390625 0.484375 +vt 0.546875 0.484375 +vt 0.6015625 0.578125 +vt 0.546875 0.578125 +vt 0.546875 0.484375 +vt 0.6015625 0.484375 +vt 0.609375 0.578125 +vt 0.6015625 0.578125 +vt 0.6015625 0.484375 +vt 0.609375 0.484375 +vt 0.5390625 0.578125 +vt 0.484375 0.578125 +vt 0.484375 0.484375 +vt 0.5390625 0.484375 +vt 0.5390625 0.578125 +vt 0.546875 0.578125 +vt 0.546875 0.6875 +vt 0.5390625 0.6875 +vt 0.546875 0.6875 +vt 0.5546875 0.6875 +vt 0.5546875 0.578125 +vt 0.546875 0.578125 +vn 1.0605752387249069e-16 0.49999999999999994 0.8660254037844387 +vn -1 -1.848892746611746e-32 1.224646799147353e-16 +vn -1.0605752387249069e-16 -0.49999999999999994 -0.8660254037844387 +vn 1 1.848892746611746e-32 -1.224646799147353e-16 +vn -6.123233995736765e-17 0.8660254037844388 -0.49999999999999994 +vn 6.123233995736765e-17 -0.8660254037844388 0.49999999999999994 +usemtl m_e12ce080-c1e9-6394-d577-2c59cc23ff2d +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/camel.obj b/prismarine-viewer/viewer/lib/entity/models/camel.obj new file mode 100644 index 00000000..8c8f050a --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/camel.obj @@ -0,0 +1,1061 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.46875 2 0.8125 +v 0.46875 2 -0.875 +v 0.46875 1.25 0.8125 +v 0.46875 1.25 -0.875 +v -0.46875 2 -0.875 +v -0.46875 2 0.8125 +v -0.46875 1.25 -0.875 +v -0.46875 1.25 0.8125 +vt 0.2109375 0.59375 +vt 0.328125 0.59375 +vt 0.328125 0.5 +vt 0.2109375 0.5 +vt 0 0.59375 +vt 0.2109375 0.59375 +vt 0.2109375 0.5 +vt 0 0.5 +vt 0.5390625 0.59375 +vt 0.65625 0.59375 +vt 0.65625 0.5 +vt 0.5390625 0.5 +vt 0.328125 0.59375 +vt 0.5390625 0.59375 +vt 0.5390625 0.5 +vt 0.328125 0.5 +vt 0.328125 0.59375 +vt 0.2109375 0.59375 +vt 0.2109375 0.8046875 +vt 0.328125 0.8046875 +vt 0.4453125 0.8046875 +vt 0.328125 0.8046875 +vt 0.328125 0.59375 +vt 0.4453125 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o saddle layer +v 0.2875 2.31875 0.31875 +v 0.2875 2.31875 -0.38125 +v 0.2875 1.99375 0.31875 +v 0.2875 1.99375 -0.38125 +v -0.2875 2.31875 -0.38125 +v -0.2875 2.31875 0.31875 +v -0.2875 1.99375 -0.38125 +v -0.2875 1.99375 0.31875 +vt 0.6640625 0.4140625 +vt 0.734375 0.4140625 +vt 0.734375 0.375 +vt 0.6640625 0.375 +vt 0.578125 0.4140625 +vt 0.6640625 0.4140625 +vt 0.6640625 0.375 +vt 0.578125 0.375 +vt 0.8203125 0.4140625 +vt 0.890625 0.4140625 +vt 0.890625 0.375 +vt 0.8203125 0.375 +vt 0.734375 0.4140625 +vt 0.8203125 0.4140625 +vt 0.8203125 0.375 +vt 0.734375 0.375 +vt 0.734375 0.4140625 +vt 0.6640625 0.4140625 +vt 0.6640625 0.5 +vt 0.734375 0.5 +vt 0.8046875 0.5 +vt 0.734375 0.5 +vt 0.734375 0.4140625 +vt 0.8046875 0.4140625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o saddle layer +v 0.22499999999999998 2.50625 0.31875 +v 0.22499999999999998 2.50625 -0.38125 +v 0.22499999999999998 2.30625 0.31875 +v 0.22499999999999998 2.30625 -0.38125 +v -0.22499999999999998 2.50625 -0.38125 +v -0.22499999999999998 2.50625 0.31875 +v -0.22499999999999998 2.30625 -0.38125 +v -0.22499999999999998 2.30625 0.31875 +vt 0.8046875 0.0234375 +vt 0.859375 0.0234375 +vt 0.859375 0 +vt 0.8046875 0 +vt 0.71875 0.0234375 +vt 0.8046875 0.0234375 +vt 0.8046875 0 +vt 0.71875 0 +vt 0.9453125 0.0234375 +vt 1 0.0234375 +vt 1 0 +vt 0.9453125 0 +vt 0.859375 0.0234375 +vt 0.9453125 0.0234375 +vt 0.9453125 0 +vt 0.859375 0 +vt 0.859375 0.0234375 +vt 0.8046875 0.0234375 +vt 0.8046875 0.109375 +vt 0.859375 0.109375 +vt 0.9140625 0.109375 +vt 0.859375 0.109375 +vt 0.859375 0.0234375 +vt 0.9140625 0.0234375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o saddle layer +v 0.475 2.00625 0.8187500000000001 +v 0.475 2.00625 -0.88125 +v 0.475 1.24375 0.8187500000000001 +v 0.475 1.24375 -0.88125 +v -0.475 2.00625 -0.88125 +v -0.475 2.00625 0.8187500000000001 +v -0.475 1.24375 -0.88125 +v -0.475 1.24375 0.8187500000000001 +vt 0.2109375 0.09375 +vt 0.328125 0.09375 +vt 0.328125 0 +vt 0.2109375 0 +vt 0 0.09375 +vt 0.2109375 0.09375 +vt 0.2109375 0 +vt 0 0 +vt 0.5390625 0.09375 +vt 0.65625 0.09375 +vt 0.65625 0 +vt 0.5390625 0 +vt 0.328125 0.09375 +vt 0.5390625 0.09375 +vt 0.5390625 0 +vt 0.328125 0 +vt 0.328125 0.09375 +vt 0.2109375 0.09375 +vt 0.2109375 0.3046875 +vt 0.328125 0.3046875 +vt 0.4453125 0.3046875 +vt 0.328125 0.3046875 +vt 0.328125 0.09375 +vt 0.4453125 0.09375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o tail +v -0.09375 1.8125 0.8125 +v -0.09375 1.8125 0.8125 +v -0.09375 0.9375 0.8125 +v -0.09375 0.9375 0.8125 +v 0.09375 1.8125 0.8125 +v 0.09375 1.8125 0.8125 +v 0.09375 0.9375 0.8125 +v 0.09375 0.9375 0.8125 +vt 0.953125 1 +vt 0.9765625 1 +vt 0.9765625 0.890625 +vt 0.953125 0.890625 +vt 0.953125 1 +vt 0.953125 1 +vt 0.953125 0.890625 +vt 0.953125 0.890625 +vt 0.9765625 1 +vt 1 1 +vt 1 0.890625 +vt 0.9765625 0.890625 +vt 0.9765625 1 +vt 0.9765625 1 +vt 0.9765625 0.890625 +vt 0.9765625 0.890625 +vt 0.9765625 1 +vt 0.953125 1 +vt 0.953125 1 +vt 0.9765625 1 +vt 1 1 +vt 0.9765625 1 +vt 0.9765625 1 +vt 1 1 +vn 1.2246467991473532e-16 0 1 +vn -1 0 1.2246467991473532e-16 +vn -1.2246467991473532e-16 0 -1 +vn 1 0 -1.2246467991473532e-16 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o head +v 0.21875 1.875 -0.375 +v 0.21875 1.875 -1.5625 +v 0.21875 1.375 -0.375 +v 0.21875 1.375 -1.5625 +v -0.21875 1.875 -1.5625 +v -0.21875 1.875 -0.375 +v -0.21875 1.375 -1.5625 +v -0.21875 1.375 -0.375 +vt 0.6171875 0.6640625 +vt 0.671875 0.6640625 +vt 0.671875 0.6015625 +vt 0.6171875 0.6015625 +vt 0.46875 0.6640625 +vt 0.6171875 0.6640625 +vt 0.6171875 0.6015625 +vt 0.46875 0.6015625 +vt 0.8203125 0.6640625 +vt 0.875 0.6640625 +vt 0.875 0.6015625 +vt 0.8203125 0.6015625 +vt 0.671875 0.6640625 +vt 0.8203125 0.6640625 +vt 0.8203125 0.6015625 +vt 0.671875 0.6015625 +vt 0.671875 0.6640625 +vt 0.6171875 0.6640625 +vt 0.6171875 0.8125 +vt 0.671875 0.8125 +vt 0.7265625 0.8125 +vt 0.671875 0.8125 +vt 0.671875 0.6640625 +vt 0.7265625 0.6640625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o head +v 0.21875 2.75 -1.125 +v 0.21875 2.75 -1.5625 +v 0.21875 1.875 -1.125 +v 0.21875 1.875 -1.5625 +v -0.21875 2.75 -1.5625 +v -0.21875 2.75 -1.125 +v -0.21875 1.875 -1.5625 +v -0.21875 1.875 -1.125 +vt 0.21875 0.9453125 +vt 0.2734375 0.9453125 +vt 0.2734375 0.8359375 +vt 0.21875 0.8359375 +vt 0.1640625 0.9453125 +vt 0.21875 0.9453125 +vt 0.21875 0.8359375 +vt 0.1640625 0.8359375 +vt 0.328125 0.9453125 +vt 0.3828125 0.9453125 +vt 0.3828125 0.8359375 +vt 0.328125 0.8359375 +vt 0.2734375 0.9453125 +vt 0.328125 0.9453125 +vt 0.328125 0.8359375 +vt 0.2734375 0.8359375 +vt 0.2734375 0.9453125 +vt 0.21875 0.9453125 +vt 0.21875 1 +vt 0.2734375 1 +vt 0.328125 1 +vt 0.2734375 1 +vt 0.2734375 0.9453125 +vt 0.328125 0.9453125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o head +v 0.15625 2.75 -1.5625 +v 0.15625 2.75 -1.9375 +v 0.15625 2.4375 -1.5625 +v 0.15625 2.4375 -1.9375 +v -0.15625 2.75 -1.9375 +v -0.15625 2.75 -1.5625 +v -0.15625 2.4375 -1.9375 +v -0.15625 2.4375 -1.5625 +vt 0.4375 0.953125 +vt 0.4765625 0.953125 +vt 0.4765625 0.9140625 +vt 0.4375 0.9140625 +vt 0.390625 0.953125 +vt 0.4375 0.953125 +vt 0.4375 0.9140625 +vt 0.390625 0.9140625 +vt 0.5234375 0.953125 +vt 0.5625 0.953125 +vt 0.5625 0.9140625 +vt 0.5234375 0.9140625 +vt 0.4765625 0.953125 +vt 0.5234375 0.953125 +vt 0.5234375 0.9140625 +vt 0.4765625 0.9140625 +vt 0.4765625 0.953125 +vt 0.4375 0.953125 +vt 0.4375 1 +vt 0.4765625 1 +vt 0.515625 1 +vt 0.4765625 1 +vt 0.4765625 0.953125 +vt 0.515625 0.953125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o bridle layer +v 0.22499999999999998 1.88125 -0.36875 +v 0.22499999999999998 1.88125 -1.56875 +v 0.22499999999999998 1.36875 -0.36875 +v 0.22499999999999998 1.36875 -1.56875 +v -0.22499999999999998 1.88125 -1.56875 +v -0.22499999999999998 1.88125 -0.36875 +v -0.22499999999999998 1.36875 -1.56875 +v -0.22499999999999998 1.36875 -0.36875 +vt 0.6171875 0.171875 +vt 0.671875 0.171875 +vt 0.671875 0.109375 +vt 0.6171875 0.109375 +vt 0.46875 0.171875 +vt 0.6171875 0.171875 +vt 0.6171875 0.109375 +vt 0.46875 0.109375 +vt 0.8203125 0.171875 +vt 0.875 0.171875 +vt 0.875 0.109375 +vt 0.8203125 0.109375 +vt 0.671875 0.171875 +vt 0.8203125 0.171875 +vt 0.8203125 0.109375 +vt 0.671875 0.109375 +vt 0.671875 0.171875 +vt 0.6171875 0.171875 +vt 0.6171875 0.3203125 +vt 0.671875 0.3203125 +vt 0.7265625 0.3203125 +vt 0.671875 0.3203125 +vt 0.671875 0.171875 +vt 0.7265625 0.171875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o bridle layer +v 0.22499999999999998 2.75625 -1.11875 +v 0.22499999999999998 2.75625 -1.56875 +v 0.22499999999999998 1.86875 -1.11875 +v 0.22499999999999998 1.86875 -1.56875 +v -0.22499999999999998 2.75625 -1.56875 +v -0.22499999999999998 2.75625 -1.11875 +v -0.22499999999999998 1.86875 -1.56875 +v -0.22499999999999998 1.86875 -1.11875 +vt 0.21875 0.4453125 +vt 0.2734375 0.4453125 +vt 0.2734375 0.3359375 +vt 0.21875 0.3359375 +vt 0.1640625 0.4453125 +vt 0.21875 0.4453125 +vt 0.21875 0.3359375 +vt 0.1640625 0.3359375 +vt 0.328125 0.4453125 +vt 0.3828125 0.4453125 +vt 0.3828125 0.3359375 +vt 0.328125 0.3359375 +vt 0.2734375 0.4453125 +vt 0.328125 0.4453125 +vt 0.328125 0.3359375 +vt 0.2734375 0.3359375 +vt 0.2734375 0.4453125 +vt 0.21875 0.4453125 +vt 0.21875 0.5 +vt 0.2734375 0.5 +vt 0.328125 0.5 +vt 0.2734375 0.5 +vt 0.2734375 0.4453125 +vt 0.328125 0.4453125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o bridle layer +v 0.16249999999999998 2.75625 -1.5625 +v 0.16249999999999998 2.75625 -1.9500000000000002 +v 0.16249999999999998 2.43125 -1.5625 +v 0.16249999999999998 2.43125 -1.9500000000000002 +v -0.16249999999999998 2.75625 -1.9500000000000002 +v -0.16249999999999998 2.75625 -1.5625 +v -0.16249999999999998 2.43125 -1.9500000000000002 +v -0.16249999999999998 2.43125 -1.5625 +vt 0.4375 0.453125 +vt 0.4765625 0.453125 +vt 0.4765625 0.4140625 +vt 0.4375 0.4140625 +vt 0.390625 0.453125 +vt 0.4375 0.453125 +vt 0.4375 0.4140625 +vt 0.390625 0.4140625 +vt 0.5234375 0.453125 +vt 0.5625 0.453125 +vt 0.5625 0.4140625 +vt 0.5234375 0.4140625 +vt 0.4765625 0.453125 +vt 0.5234375 0.453125 +vt 0.5234375 0.4140625 +vt 0.4765625 0.4140625 +vt 0.4765625 0.453125 +vt 0.4375 0.453125 +vt 0.4375 0.5 +vt 0.4765625 0.5 +vt 0.515625 0.5 +vt 0.4765625 0.5 +vt 0.4765625 0.453125 +vt 0.515625 0.453125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o bridle +v -0.15625 2.625 -1.625 +v -0.15625 2.625 -1.75 +v -0.15625 2.5 -1.625 +v -0.15625 2.5 -1.75 +v -0.21875 2.625 -1.75 +v -0.21875 2.625 -1.625 +v -0.21875 2.5 -1.75 +v -0.21875 2.5 -1.625 +vt 0.59375 0.4375 +vt 0.6015625 0.4375 +vt 0.6015625 0.421875 +vt 0.59375 0.421875 +vt 0.578125 0.4375 +vt 0.59375 0.4375 +vt 0.59375 0.421875 +vt 0.578125 0.421875 +vt 0.6171875 0.4375 +vt 0.625 0.4375 +vt 0.625 0.421875 +vt 0.6171875 0.421875 +vt 0.6015625 0.4375 +vt 0.6171875 0.4375 +vt 0.6171875 0.421875 +vt 0.6015625 0.421875 +vt 0.6015625 0.4375 +vt 0.59375 0.4375 +vt 0.59375 0.453125 +vt 0.6015625 0.453125 +vt 0.609375 0.453125 +vt 0.6015625 0.453125 +vt 0.6015625 0.4375 +vt 0.609375 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o bridle +v 0.21875 2.625 -1.625 +v 0.21875 2.625 -1.75 +v 0.21875 2.5 -1.625 +v 0.21875 2.5 -1.75 +v 0.15625 2.625 -1.75 +v 0.15625 2.625 -1.625 +v 0.15625 2.5 -1.75 +v 0.15625 2.5 -1.625 +vt 0.6015625 0.4375 +vt 0.59375 0.4375 +vt 0.59375 0.421875 +vt 0.6015625 0.421875 +vt 0.6171875 0.4375 +vt 0.6015625 0.4375 +vt 0.6015625 0.421875 +vt 0.6171875 0.421875 +vt 0.625 0.4375 +vt 0.6171875 0.4375 +vt 0.6171875 0.421875 +vt 0.625 0.421875 +vt 0.59375 0.4375 +vt 0.578125 0.4375 +vt 0.578125 0.421875 +vt 0.59375 0.421875 +vt 0.59375 0.4375 +vt 0.6015625 0.4375 +vt 0.6015625 0.453125 +vt 0.59375 0.453125 +vt 0.6015625 0.453125 +vt 0.609375 0.453125 +vt 0.609375 0.4375 +vt 0.6015625 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 +o left_ear +v -0.1875 2.71875 -1.15625 +v -0.1875 2.71875 -1.28125 +v -0.1875 2.65625 -1.15625 +v -0.1875 2.65625 -1.28125 +v -0.375 2.71875 -1.28125 +v -0.375 2.71875 -1.15625 +v -0.375 2.65625 -1.28125 +v -0.375 2.65625 -1.15625 +vt 0.3671875 0.984375 +vt 0.390625 0.984375 +vt 0.390625 0.9765625 +vt 0.3671875 0.9765625 +vt 0.3515625 0.984375 +vt 0.3671875 0.984375 +vt 0.3671875 0.9765625 +vt 0.3515625 0.9765625 +vt 0.40625 0.984375 +vt 0.4296875 0.984375 +vt 0.4296875 0.9765625 +vt 0.40625 0.9765625 +vt 0.390625 0.984375 +vt 0.40625 0.984375 +vt 0.40625 0.9765625 +vt 0.390625 0.9765625 +vt 0.390625 0.984375 +vt 0.3671875 0.984375 +vt 0.3671875 1 +vt 0.390625 1 +vt 0.4140625 1 +vt 0.390625 1 +vt 0.390625 0.984375 +vt 0.4140625 0.984375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 108/316/79 111/315/79 109/314/79 106/313/79 +f 107/320/80 108/319/80 106/318/80 105/317/80 +f 112/324/81 107/323/81 105/322/81 110/321/81 +f 111/328/82 112/327/82 110/326/82 109/325/82 +f 110/332/83 105/331/83 106/330/83 109/329/83 +f 111/336/84 108/335/84 107/334/84 112/333/84 +o right_ear +v 0.375 2.71875 -1.15625 +v 0.375 2.71875 -1.28125 +v 0.375 2.65625 -1.15625 +v 0.375 2.65625 -1.28125 +v 0.1875 2.71875 -1.28125 +v 0.1875 2.71875 -1.15625 +v 0.1875 2.65625 -1.28125 +v 0.1875 2.65625 -1.15625 +vt 0.5390625 0.984375 +vt 0.5625 0.984375 +vt 0.5625 0.9765625 +vt 0.5390625 0.9765625 +vt 0.5234375 0.984375 +vt 0.5390625 0.984375 +vt 0.5390625 0.9765625 +vt 0.5234375 0.9765625 +vt 0.578125 0.984375 +vt 0.6015625 0.984375 +vt 0.6015625 0.9765625 +vt 0.578125 0.9765625 +vt 0.5625 0.984375 +vt 0.578125 0.984375 +vt 0.578125 0.9765625 +vt 0.5625 0.9765625 +vt 0.5625 0.984375 +vt 0.5390625 0.984375 +vt 0.5390625 1 +vt 0.5625 1 +vt 0.5859375 1 +vt 0.5625 1 +vt 0.5625 0.984375 +vt 0.5859375 0.984375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 116/340/85 119/339/85 117/338/85 114/337/85 +f 115/344/86 116/343/86 114/342/86 113/341/86 +f 120/348/87 115/347/87 113/346/87 118/345/87 +f 119/352/88 120/351/88 118/350/88 117/349/88 +f 118/356/89 113/355/89 114/354/89 117/353/89 +f 119/360/90 116/359/90 115/358/90 120/357/90 +o reins layer +v -0.23125 2.5625 -0.75 +v -0.23125 2.5625 -1.6875 +v -0.23125 2.125 -0.75 +v -0.23125 2.125 -1.6875 +v -0.23125 2.5625 -1.6875 +v -0.23125 2.5625 -0.75 +v -0.23125 2.125 -1.6875 +v -0.23125 2.125 -0.75 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5 +vt 0.8828125 0.5 +vt 0.765625 0.5546875 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5 +vt 0.765625 0.5 +vt 1 0.5546875 +vt 1 0.5546875 +vt 1 0.5 +vt 1 0.5 +vt 0.8828125 0.5546875 +vt 1 0.5546875 +vt 1 0.5 +vt 0.8828125 0.5 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5546875 +vt 0.8828125 0.671875 +vt 0.8828125 0.671875 +vt 0.8828125 0.671875 +vt 0.8828125 0.671875 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5546875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 124/364/91 127/363/91 125/362/91 122/361/91 +f 123/368/92 124/367/92 122/366/92 121/365/92 +f 128/372/93 123/371/93 121/370/93 126/369/93 +f 127/376/94 128/375/94 126/374/94 125/373/94 +f 126/380/95 121/379/95 122/378/95 125/377/95 +f 127/384/96 124/383/96 123/382/96 128/381/96 +o reins layer +v 0.23124999999999996 2.5625 -0.75 +v 0.23124999999999996 2.5625 -0.75 +v 0.23124999999999996 2.125 -0.75 +v 0.23124999999999996 2.125 -0.75 +v -0.23125 2.5625 -0.75 +v -0.23125 2.5625 -0.75 +v -0.23125 2.125 -0.75 +v -0.23125 2.125 -0.75 +vt 0.65625 0.5546875 +vt 0.7109375 0.5546875 +vt 0.7109375 0.5 +vt 0.65625 0.5 +vt 0.65625 0.5546875 +vt 0.65625 0.5546875 +vt 0.65625 0.5 +vt 0.65625 0.5 +vt 0.7109375 0.5546875 +vt 0.765625 0.5546875 +vt 0.765625 0.5 +vt 0.7109375 0.5 +vt 0.7109375 0.5546875 +vt 0.7109375 0.5546875 +vt 0.7109375 0.5 +vt 0.7109375 0.5 +vt 0.7109375 0.5546875 +vt 0.65625 0.5546875 +vt 0.65625 0.5546875 +vt 0.7109375 0.5546875 +vt 0.765625 0.5546875 +vt 0.7109375 0.5546875 +vt 0.7109375 0.5546875 +vt 0.765625 0.5546875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 132/388/97 135/387/97 133/386/97 130/385/97 +f 131/392/98 132/391/98 130/390/98 129/389/98 +f 136/396/99 131/395/99 129/394/99 134/393/99 +f 135/400/100 136/399/100 134/398/100 133/397/100 +f 134/404/101 129/403/101 130/402/101 133/401/101 +f 135/408/102 132/407/102 131/406/102 136/405/102 +o reins layer +v 0.23124999999999996 2.5625 -0.75 +v 0.23124999999999996 2.5625 -1.6875 +v 0.23124999999999996 2.125 -0.75 +v 0.23124999999999996 2.125 -1.6875 +v 0.23124999999999996 2.5625 -1.6875 +v 0.23124999999999996 2.5625 -0.75 +v 0.23124999999999996 2.125 -1.6875 +v 0.23124999999999996 2.125 -0.75 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5 +vt 0.8828125 0.5 +vt 0.765625 0.5546875 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5 +vt 0.765625 0.5 +vt 1 0.5546875 +vt 1 0.5546875 +vt 1 0.5 +vt 1 0.5 +vt 0.8828125 0.5546875 +vt 1 0.5546875 +vt 1 0.5 +vt 0.8828125 0.5 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5546875 +vt 0.8828125 0.671875 +vt 0.8828125 0.671875 +vt 0.8828125 0.671875 +vt 0.8828125 0.671875 +vt 0.8828125 0.5546875 +vt 0.8828125 0.5546875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 140/412/103 143/411/103 141/410/103 138/409/103 +f 139/416/104 140/415/104 138/414/104 137/413/104 +f 144/420/105 139/419/105 137/418/105 142/417/105 +f 143/424/106 144/423/106 142/422/106 141/421/106 +f 142/428/107 137/427/107 138/426/107 141/425/107 +f 143/432/108 140/431/108 139/430/108 144/429/108 +o hump +v 0.28125 2.3125 0.3125 +v 0.28125 2.3125 -0.375 +v 0.28125 2 0.3125 +v 0.28125 2 -0.375 +v -0.28125 2.3125 -0.375 +v -0.28125 2.3125 0.3125 +v -0.28125 2 -0.375 +v -0.28125 2 0.3125 +vt 0.6640625 0.9140625 +vt 0.734375 0.9140625 +vt 0.734375 0.875 +vt 0.6640625 0.875 +vt 0.578125 0.9140625 +vt 0.6640625 0.9140625 +vt 0.6640625 0.875 +vt 0.578125 0.875 +vt 0.8203125 0.9140625 +vt 0.890625 0.9140625 +vt 0.890625 0.875 +vt 0.8203125 0.875 +vt 0.734375 0.9140625 +vt 0.8203125 0.9140625 +vt 0.8203125 0.875 +vt 0.734375 0.875 +vt 0.734375 0.9140625 +vt 0.6640625 0.9140625 +vt 0.6640625 1 +vt 0.734375 1 +vt 0.8046875 1 +vt 0.734375 1 +vt 0.734375 0.9140625 +vt 0.8046875 0.9140625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 148/436/109 151/435/109 149/434/109 146/433/109 +f 147/440/110 148/439/110 146/438/110 145/437/110 +f 152/444/111 147/443/111 145/442/111 150/441/111 +f 151/448/112 152/447/112 150/446/112 149/445/112 +f 150/452/113 145/451/113 146/450/113 149/449/113 +f 151/456/114 148/455/114 147/454/114 152/453/114 +o right_front_leg +v 0.4625 1.3125 -0.5 +v 0.4625 1.3125 -0.8125 +v 0.4625 0 -0.5 +v 0.4625 0 -0.8125 +v 0.15000000000000002 1.3125 -0.8125 +v 0.15000000000000002 1.3125 -0.5 +v 0.15000000000000002 0 -0.8125 +v 0.15000000000000002 0 -0.5 +vt 0.0390625 0.7578125 +vt 0.078125 0.7578125 +vt 0.078125 0.59375 +vt 0.0390625 0.59375 +vt 0 0.7578125 +vt 0.0390625 0.7578125 +vt 0.0390625 0.59375 +vt 0 0.59375 +vt 0.1171875 0.7578125 +vt 0.15625 0.7578125 +vt 0.15625 0.59375 +vt 0.1171875 0.59375 +vt 0.078125 0.7578125 +vt 0.1171875 0.7578125 +vt 0.1171875 0.59375 +vt 0.078125 0.59375 +vt 0.078125 0.7578125 +vt 0.0390625 0.7578125 +vt 0.0390625 0.796875 +vt 0.078125 0.796875 +vt 0.1171875 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.7578125 +vt 0.1171875 0.7578125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 156/460/115 159/459/115 157/458/115 154/457/115 +f 155/464/116 156/463/116 154/462/116 153/461/116 +f 160/468/117 155/467/117 153/466/117 158/465/117 +f 159/472/118 160/471/118 158/470/118 157/469/118 +f 158/476/119 153/475/119 154/474/119 157/473/119 +f 159/480/120 156/479/120 155/478/120 160/477/120 +o left_front_leg +v -0.15000000000000002 1.3125 -0.5 +v -0.15000000000000002 1.3125 -0.8125 +v -0.15000000000000002 0 -0.5 +v -0.15000000000000002 0 -0.8125 +v -0.4625 1.3125 -0.8125 +v -0.4625 1.3125 -0.5 +v -0.4625 0 -0.8125 +v -0.4625 0 -0.5 +vt 0.0390625 0.9609375 +vt 0.078125 0.9609375 +vt 0.078125 0.796875 +vt 0.0390625 0.796875 +vt 0 0.9609375 +vt 0.0390625 0.9609375 +vt 0.0390625 0.796875 +vt 0 0.796875 +vt 0.1171875 0.9609375 +vt 0.15625 0.9609375 +vt 0.15625 0.796875 +vt 0.1171875 0.796875 +vt 0.078125 0.9609375 +vt 0.1171875 0.9609375 +vt 0.1171875 0.796875 +vt 0.078125 0.796875 +vt 0.078125 0.9609375 +vt 0.0390625 0.9609375 +vt 0.0390625 1 +vt 0.078125 1 +vt 0.1171875 1 +vt 0.078125 1 +vt 0.078125 0.9609375 +vt 0.1171875 0.9609375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 164/484/121 167/483/121 165/482/121 162/481/121 +f 163/488/122 164/487/122 162/486/122 161/485/122 +f 168/492/123 163/491/123 161/490/123 166/489/123 +f 167/496/124 168/495/124 166/494/124 165/493/124 +f 166/500/125 161/499/125 162/498/125 165/497/125 +f 167/504/126 164/503/126 163/502/126 168/501/126 +o left_hind_leg +v -0.15000000000000002 1.3125 0.75 +v -0.15000000000000002 1.3125 0.4375 +v -0.15000000000000002 0 0.75 +v -0.15000000000000002 0 0.4375 +v -0.4625 1.3125 0.4375 +v -0.4625 1.3125 0.75 +v -0.4625 0 0.4375 +v -0.4625 0 0.75 +vt 0.4921875 0.8359375 +vt 0.53125 0.8359375 +vt 0.53125 0.671875 +vt 0.4921875 0.671875 +vt 0.453125 0.8359375 +vt 0.4921875 0.8359375 +vt 0.4921875 0.671875 +vt 0.453125 0.671875 +vt 0.5703125 0.8359375 +vt 0.609375 0.8359375 +vt 0.609375 0.671875 +vt 0.5703125 0.671875 +vt 0.53125 0.8359375 +vt 0.5703125 0.8359375 +vt 0.5703125 0.671875 +vt 0.53125 0.671875 +vt 0.53125 0.8359375 +vt 0.4921875 0.8359375 +vt 0.4921875 0.875 +vt 0.53125 0.875 +vt 0.5703125 0.875 +vt 0.53125 0.875 +vt 0.53125 0.8359375 +vt 0.5703125 0.8359375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 172/508/127 175/507/127 173/506/127 170/505/127 +f 171/512/128 172/511/128 170/510/128 169/509/128 +f 176/516/129 171/515/129 169/514/129 174/513/129 +f 175/520/130 176/519/130 174/518/130 173/517/130 +f 174/524/131 169/523/131 170/522/131 173/521/131 +f 175/528/132 172/527/132 171/526/132 176/525/132 +o right_hind_leg +v 0.4625 1.3125 0.75 +v 0.4625 1.3125 0.4375 +v 0.4625 0 0.75 +v 0.4625 0 0.4375 +v 0.15000000000000002 1.3125 0.4375 +v 0.15000000000000002 1.3125 0.75 +v 0.15000000000000002 0 0.4375 +v 0.15000000000000002 0 0.75 +vt 0.7734375 0.8359375 +vt 0.8125 0.8359375 +vt 0.8125 0.671875 +vt 0.7734375 0.671875 +vt 0.734375 0.8359375 +vt 0.7734375 0.8359375 +vt 0.7734375 0.671875 +vt 0.734375 0.671875 +vt 0.8515625 0.8359375 +vt 0.890625 0.8359375 +vt 0.890625 0.671875 +vt 0.8515625 0.671875 +vt 0.8125 0.8359375 +vt 0.8515625 0.8359375 +vt 0.8515625 0.671875 +vt 0.8125 0.671875 +vt 0.8125 0.8359375 +vt 0.7734375 0.8359375 +vt 0.7734375 0.875 +vt 0.8125 0.875 +vt 0.8515625 0.875 +vt 0.8125 0.875 +vt 0.8125 0.8359375 +vt 0.8515625 0.8359375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_ef8cbfee-18ba-edcd-78d9-3f4313675f2e +f 180/532/133 183/531/133 181/530/133 178/529/133 +f 179/536/134 180/535/134 178/534/134 177/533/134 +f 184/540/135 179/539/135 177/538/135 182/537/135 +f 183/544/136 184/543/136 182/542/136 181/541/136 +f 182/548/137 177/547/137 178/546/137 181/545/137 +f 183/552/138 180/551/138 179/550/138 184/549/138 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/cat.obj b/prismarine-viewer/viewer/lib/entity/models/cat.obj new file mode 100644 index 00000000..8067b5c6 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/cat.obj @@ -0,0 +1,509 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.125 0.625 -0.4375 +v 0.125 0.2500000000000001 -0.4375 +v 0.125 0.625 0.5625 +v 0.125 0.2499999999999999 0.5625 +v -0.125 0.2500000000000001 -0.4375 +v -0.125 0.625 -0.4375 +v -0.125 0.2499999999999999 0.5625 +v -0.125 0.625 0.5625 +vt 0.40625 0.8125 +vt 0.46875 0.8125 +vt 0.46875 0.3125 +vt 0.40625 0.3125 +vt 0.3125 0.8125 +vt 0.40625 0.8125 +vt 0.40625 0.3125 +vt 0.3125 0.3125 +vt 0.5625 0.8125 +vt 0.625 0.8125 +vt 0.625 0.3125 +vt 0.5625 0.3125 +vt 0.46875 0.8125 +vt 0.5625 0.8125 +vt 0.5625 0.3125 +vt 0.46875 0.3125 +vt 0.46875 0.8125 +vt 0.40625 0.8125 +vt 0.40625 1 +vt 0.46875 1 +vt 0.53125 1 +vt 0.46875 1 +vt 0.46875 0.8125 +vt 0.53125 0.8125 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o head +v 0.15625 0.6875 -0.4375 +v 0.15625 0.6875 -0.75 +v 0.15625 0.4375 -0.4375 +v 0.15625 0.4375 -0.75 +v -0.15625 0.6875 -0.75 +v -0.15625 0.6875 -0.4375 +v -0.15625 0.4375 -0.75 +v -0.15625 0.4375 -0.4375 +vt 0.078125 0.84375 +vt 0.15625 0.84375 +vt 0.15625 0.71875 +vt 0.078125 0.71875 +vt 0 0.84375 +vt 0.078125 0.84375 +vt 0.078125 0.71875 +vt 0 0.71875 +vt 0.234375 0.84375 +vt 0.3125 0.84375 +vt 0.3125 0.71875 +vt 0.234375 0.71875 +vt 0.15625 0.84375 +vt 0.234375 0.84375 +vt 0.234375 0.71875 +vt 0.15625 0.71875 +vt 0.15625 0.84375 +vt 0.078125 0.84375 +vt 0.078125 1 +vt 0.15625 1 +vt 0.234375 1 +vt 0.15625 1 +vt 0.15625 0.84375 +vt 0.234375 0.84375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.09375 0.5634762499999999 -0.6875 +v 0.09375 0.5634762499999999 -0.8125 +v 0.09375 0.43847625 -0.6875 +v 0.09375 0.43847625 -0.8125 +v -0.09375 0.5634762499999999 -0.8125 +v -0.09375 0.5634762499999999 -0.6875 +v -0.09375 0.43847625 -0.8125 +v -0.09375 0.43847625 -0.6875 +vt 0.03125 0.1875 +vt 0.078125 0.1875 +vt 0.078125 0.125 +vt 0.03125 0.125 +vt 0 0.1875 +vt 0.03125 0.1875 +vt 0.03125 0.125 +vt 0 0.125 +vt 0.109375 0.1875 +vt 0.15625 0.1875 +vt 0.15625 0.125 +vt 0.109375 0.125 +vt 0.078125 0.1875 +vt 0.109375 0.1875 +vt 0.109375 0.125 +vt 0.078125 0.125 +vt 0.078125 0.1875 +vt 0.03125 0.1875 +vt 0.03125 0.25 +vt 0.078125 0.25 +vt 0.125 0.25 +vt 0.078125 0.25 +vt 0.078125 0.1875 +vt 0.125 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.125 0.75 -0.4375 +v 0.125 0.75 -0.5625 +v 0.125 0.6875 -0.4375 +v 0.125 0.6875 -0.5625 +v 0.0625 0.75 -0.5625 +v 0.0625 0.75 -0.4375 +v 0.0625 0.6875 -0.5625 +v 0.0625 0.6875 -0.4375 +vt 0.03125 0.625 +vt 0.046875 0.625 +vt 0.046875 0.59375 +vt 0.03125 0.59375 +vt 0 0.625 +vt 0.03125 0.625 +vt 0.03125 0.59375 +vt 0 0.59375 +vt 0.078125 0.625 +vt 0.09375 0.625 +vt 0.09375 0.59375 +vt 0.078125 0.59375 +vt 0.046875 0.625 +vt 0.078125 0.625 +vt 0.078125 0.59375 +vt 0.046875 0.59375 +vt 0.046875 0.625 +vt 0.03125 0.625 +vt 0.03125 0.6875 +vt 0.046875 0.6875 +vt 0.0625 0.6875 +vt 0.046875 0.6875 +vt 0.046875 0.625 +vt 0.0625 0.625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o head +v -0.0625 0.75 -0.4375 +v -0.0625 0.75 -0.5625 +v -0.0625 0.6875 -0.4375 +v -0.0625 0.6875 -0.5625 +v -0.125 0.75 -0.5625 +v -0.125 0.75 -0.4375 +v -0.125 0.6875 -0.5625 +v -0.125 0.6875 -0.4375 +vt 0.125 0.625 +vt 0.140625 0.625 +vt 0.140625 0.59375 +vt 0.125 0.59375 +vt 0.09375 0.625 +vt 0.125 0.625 +vt 0.125 0.59375 +vt 0.09375 0.59375 +vt 0.171875 0.625 +vt 0.1875 0.625 +vt 0.1875 0.59375 +vt 0.171875 0.59375 +vt 0.140625 0.625 +vt 0.171875 0.625 +vt 0.171875 0.59375 +vt 0.140625 0.59375 +vt 0.140625 0.625 +vt 0.125 0.625 +vt 0.125 0.6875 +vt 0.140625 0.6875 +vt 0.15625 0.6875 +vt 0.140625 0.6875 +vt 0.140625 0.625 +vt 0.15625 0.625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o tail1 +v 0.03125 0.6066941738241591 0.5441941738241594 +v 0.03125 0.5625 0.5 +v 0.03125 0.2531407832308854 0.8977475644174331 +v 0.03125 0.20894660940672616 0.853553390593274 +v -0.03125 0.5625 0.5 +v -0.03125 0.6066941738241591 0.5441941738241594 +v -0.03125 0.20894660940672616 0.853553390593274 +v -0.03125 0.2531407832308854 0.8977475644174331 +vt 0.015625 0.5 +vt 0.03125 0.5 +vt 0.03125 0.25 +vt 0.015625 0.25 +vt 0 0.5 +vt 0.015625 0.5 +vt 0.015625 0.25 +vt 0 0.25 +vt 0.046875 0.5 +vt 0.0625 0.5 +vt 0.0625 0.25 +vt 0.046875 0.25 +vt 0.03125 0.5 +vt 0.046875 0.5 +vt 0.046875 0.25 +vt 0.03125 0.25 +vt 0.03125 0.5 +vt 0.015625 0.5 +vt 0.015625 0.53125 +vt 0.03125 0.53125 +vt 0.046875 0.53125 +vt 0.03125 0.53125 +vt 0.03125 0.5 +vt 0.046875 0.5 +vn 0 -0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 -0.7071067811865476 +vn 0 -0.7071067811865475 0.7071067811865476 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o tail2 +v 0.03125 0.27144660940672627 0.8535533905932737 +v 0.03125 0.20894660940672627 0.8535533905932737 +v 0.03125 0.2714466094067264 1.3535533905932737 +v 0.03125 0.20894660940672638 1.3535533905932737 +v -0.03125 0.20894660940672627 0.8535533905932737 +v -0.03125 0.27144660940672627 0.8535533905932737 +v -0.03125 0.20894660940672638 1.3535533905932737 +v -0.03125 0.2714466094067264 1.3535533905932737 +vt 0.078125 0.5 +vt 0.09375 0.5 +vt 0.09375 0.25 +vt 0.078125 0.25 +vt 0.0625 0.5 +vt 0.078125 0.5 +vt 0.078125 0.25 +vt 0.0625 0.25 +vt 0.109375 0.5 +vt 0.125 0.5 +vt 0.125 0.25 +vt 0.109375 0.25 +vt 0.09375 0.5 +vt 0.109375 0.5 +vt 0.109375 0.25 +vt 0.09375 0.25 +vt 0.09375 0.5 +vt 0.078125 0.5 +vt 0.078125 0.53125 +vt 0.09375 0.53125 +vt 0.109375 0.53125 +vt 0.09375 0.53125 +vt 0.09375 0.5 +vt 0.109375 0.5 +vn 0 -1 2.220446049250313e-16 +vn 1 0 0 +vn 0 1 -2.220446049250313e-16 +vn -1 0 0 +vn 0 -2.220446049250313e-16 -1 +vn 0 2.220446049250313e-16 1 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o backLegL +v -0.006249999999999978 0.375 0.5 +v -0.006249999999999978 0.375 0.375 +v -0.006249999999999978 0 0.5 +v -0.006249999999999978 0 0.375 +v -0.13124999999999998 0.375 0.375 +v -0.13124999999999998 0.375 0.5 +v -0.13124999999999998 0 0.375 +v -0.13124999999999998 0 0.5 +vt 0.15625 0.53125 +vt 0.1875 0.53125 +vt 0.1875 0.34375 +vt 0.15625 0.34375 +vt 0.125 0.53125 +vt 0.15625 0.53125 +vt 0.15625 0.34375 +vt 0.125 0.34375 +vt 0.21875 0.53125 +vt 0.25 0.53125 +vt 0.25 0.34375 +vt 0.21875 0.34375 +vt 0.1875 0.53125 +vt 0.21875 0.53125 +vt 0.21875 0.34375 +vt 0.1875 0.34375 +vt 0.1875 0.53125 +vt 0.15625 0.53125 +vt 0.15625 0.59375 +vt 0.1875 0.59375 +vt 0.21875 0.59375 +vt 0.1875 0.59375 +vt 0.1875 0.53125 +vt 0.21875 0.53125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o backLegR +v 0.13124999999999998 0.375 0.5 +v 0.13124999999999998 0.375 0.375 +v 0.13124999999999998 0 0.5 +v 0.13124999999999998 0 0.375 +v 0.006249999999999978 0.375 0.375 +v 0.006249999999999978 0.375 0.5 +v 0.006249999999999978 0 0.375 +v 0.006249999999999978 0 0.5 +vt 0.15625 0.53125 +vt 0.1875 0.53125 +vt 0.1875 0.34375 +vt 0.15625 0.34375 +vt 0.125 0.53125 +vt 0.15625 0.53125 +vt 0.15625 0.34375 +vt 0.125 0.34375 +vt 0.21875 0.53125 +vt 0.25 0.53125 +vt 0.25 0.34375 +vt 0.21875 0.34375 +vt 0.1875 0.53125 +vt 0.21875 0.53125 +vt 0.21875 0.34375 +vt 0.1875 0.34375 +vt 0.1875 0.53125 +vt 0.15625 0.53125 +vt 0.15625 0.59375 +vt 0.1875 0.59375 +vt 0.21875 0.59375 +vt 0.1875 0.59375 +vt 0.1875 0.53125 +vt 0.21875 0.53125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o frontLegL +v -0.012500000000000011 0.6375 -0.1875 +v -0.012500000000000011 0.6375 -0.3125 +v -0.012500000000000011 0.012499999999999956 -0.1875 +v -0.012500000000000011 0.012499999999999956 -0.3125 +v -0.1375 0.6375 -0.3125 +v -0.1375 0.6375 -0.1875 +v -0.1375 0.012499999999999956 -0.3125 +v -0.1375 0.012499999999999956 -0.1875 +vt 0.65625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.625 +vt 0.65625 0.625 +vt 0.625 0.9375 +vt 0.65625 0.9375 +vt 0.65625 0.625 +vt 0.625 0.625 +vt 0.71875 0.9375 +vt 0.75 0.9375 +vt 0.75 0.625 +vt 0.71875 0.625 +vt 0.6875 0.9375 +vt 0.71875 0.9375 +vt 0.71875 0.625 +vt 0.6875 0.625 +vt 0.6875 0.9375 +vt 0.65625 0.9375 +vt 0.65625 1 +vt 0.6875 1 +vt 0.71875 1 +vt 0.6875 1 +vt 0.6875 0.9375 +vt 0.71875 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o frontLegR +v 0.13749999999999996 0.6375 -0.1875 +v 0.13749999999999996 0.6375 -0.3125 +v 0.13749999999999996 0.012499999999999956 -0.1875 +v 0.13749999999999996 0.012499999999999956 -0.3125 +v 0.012499999999999956 0.6375 -0.3125 +v 0.012499999999999956 0.6375 -0.1875 +v 0.012499999999999956 0.012499999999999956 -0.3125 +v 0.012499999999999956 0.012499999999999956 -0.1875 +vt 0.65625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.625 +vt 0.65625 0.625 +vt 0.625 0.9375 +vt 0.65625 0.9375 +vt 0.65625 0.625 +vt 0.625 0.625 +vt 0.71875 0.9375 +vt 0.75 0.9375 +vt 0.75 0.625 +vt 0.71875 0.625 +vt 0.6875 0.9375 +vt 0.71875 0.9375 +vt 0.71875 0.625 +vt 0.6875 0.625 +vt 0.6875 0.9375 +vt 0.65625 0.9375 +vt 0.65625 1 +vt 0.6875 1 +vt 0.71875 1 +vt 0.6875 1 +vt 0.6875 0.9375 +vt 0.71875 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_2ee28436-932f-1f18-8613-04d9bd8d8ca4 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/chicken.obj b/prismarine-viewer/viewer/lib/entity/models/chicken.obj new file mode 100644 index 00000000..ec873ffd --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/chicken.obj @@ -0,0 +1,371 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.1875 0.6875 -0.25 +v 0.1875 0.3125 -0.25 +v 0.1875 0.6875 0.25 +v 0.1875 0.3125 0.25 +v -0.1875 0.3125 -0.25 +v -0.1875 0.6875 -0.25 +v -0.1875 0.3125 0.25 +v -0.1875 0.6875 0.25 +vt 0.09375 0.53125 +vt 0.1875 0.53125 +vt 0.1875 0.28125 +vt 0.09375 0.28125 +vt 0 0.53125 +vt 0.09375 0.53125 +vt 0.09375 0.28125 +vt 0 0.28125 +vt 0.28125 0.53125 +vt 0.375 0.53125 +vt 0.375 0.28125 +vt 0.28125 0.28125 +vt 0.1875 0.53125 +vt 0.28125 0.53125 +vt 0.28125 0.28125 +vt 0.1875 0.28125 +vt 0.1875 0.53125 +vt 0.09375 0.53125 +vt 0.09375 0.71875 +vt 0.1875 0.71875 +vt 0.28125 0.71875 +vt 0.1875 0.71875 +vt 0.1875 0.53125 +vt 0.28125 0.53125 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_a3a58acf-2885-3588-3386-06528bca041b +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o head +v 0.125 0.9375 -0.1875 +v 0.125 0.9375 -0.375 +v 0.125 0.5625 -0.1875 +v 0.125 0.5625 -0.375 +v -0.125 0.9375 -0.375 +v -0.125 0.9375 -0.1875 +v -0.125 0.5625 -0.375 +v -0.125 0.5625 -0.1875 +vt 0.046875 0.90625 +vt 0.109375 0.90625 +vt 0.109375 0.71875 +vt 0.046875 0.71875 +vt 0 0.90625 +vt 0.046875 0.90625 +vt 0.046875 0.71875 +vt 0 0.71875 +vt 0.15625 0.90625 +vt 0.21875 0.90625 +vt 0.21875 0.71875 +vt 0.15625 0.71875 +vt 0.109375 0.90625 +vt 0.15625 0.90625 +vt 0.15625 0.71875 +vt 0.109375 0.71875 +vt 0.109375 0.90625 +vt 0.046875 0.90625 +vt 0.046875 1 +vt 0.109375 1 +vt 0.171875 1 +vt 0.109375 1 +vt 0.109375 0.90625 +vt 0.171875 0.90625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a3a58acf-2885-3588-3386-06528bca041b +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o comb +v 0.0625 0.6875 -0.3125 +v 0.0625 0.6875 -0.4375 +v 0.0625 0.5625 -0.3125 +v 0.0625 0.5625 -0.4375 +v -0.0625 0.6875 -0.4375 +v -0.0625 0.6875 -0.3125 +v -0.0625 0.5625 -0.4375 +v -0.0625 0.5625 -0.3125 +vt 0.25 0.8125 +vt 0.28125 0.8125 +vt 0.28125 0.75 +vt 0.25 0.75 +vt 0.21875 0.8125 +vt 0.25 0.8125 +vt 0.25 0.75 +vt 0.21875 0.75 +vt 0.3125 0.8125 +vt 0.34375 0.8125 +vt 0.34375 0.75 +vt 0.3125 0.75 +vt 0.28125 0.8125 +vt 0.3125 0.8125 +vt 0.3125 0.75 +vt 0.28125 0.75 +vt 0.28125 0.8125 +vt 0.25 0.8125 +vt 0.25 0.875 +vt 0.28125 0.875 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.28125 0.8125 +vt 0.3125 0.8125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a3a58acf-2885-3588-3386-06528bca041b +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o beak +v 0.125 0.8224431423663936 -0.35273540157455374 +v 0.125 0.8333376102098509 -0.4772597388360219 +v 0.125 0.6979188051049254 -0.363629869418011 +v 0.125 0.7088132729483827 -0.4881542066794792 +v -0.125 0.8333376102098509 -0.4772597388360219 +v -0.125 0.8224431423663936 -0.35273540157455374 +v -0.125 0.7088132729483827 -0.4881542066794792 +v -0.125 0.6979188051049254 -0.363629869418011 +vt 0.25 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.25 0.875 +vt 0.21875 0.9375 +vt 0.25 0.9375 +vt 0.25 0.875 +vt 0.21875 0.875 +vt 0.34375 0.9375 +vt 0.40625 0.9375 +vt 0.40625 0.875 +vt 0.34375 0.875 +vt 0.3125 0.9375 +vt 0.34375 0.9375 +vt 0.34375 0.875 +vt 0.3125 0.875 +vt 0.3125 0.9375 +vt 0.25 0.9375 +vt 0.25 1 +vt 0.3125 1 +vt 0.375 1 +vt 0.3125 1 +vt 0.3125 0.9375 +vt 0.375 0.9375 +vn 0 0.08715574274765818 -0.9961946980917455 +vn 1 0 0 +vn 0 -0.08715574274765818 0.9961946980917455 +vn -1 0 0 +vn 0 0.9961946980917455 0.08715574274765818 +vn 0 -0.9961946980917455 -0.08715574274765818 +usemtl m_a3a58acf-2885-3588-3386-06528bca041b +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o leg0 +v 0.1875 0.3125 0.0625 +v 0.1875 0.3125 -0.125 +v 0.1875 0 0.0625 +v 0.1875 0 -0.125 +v 0 0.3125 -0.125 +v 0 0.3125 0.0625 +v 0 0 -0.125 +v 0 0 0.0625 +vt 0.453125 0.90625 +vt 0.5 0.90625 +vt 0.5 0.75 +vt 0.453125 0.75 +vt 0.40625 0.90625 +vt 0.453125 0.90625 +vt 0.453125 0.75 +vt 0.40625 0.75 +vt 0.546875 0.90625 +vt 0.59375 0.90625 +vt 0.59375 0.75 +vt 0.546875 0.75 +vt 0.5 0.90625 +vt 0.546875 0.90625 +vt 0.546875 0.75 +vt 0.5 0.75 +vt 0.5 0.90625 +vt 0.453125 0.90625 +vt 0.453125 1 +vt 0.5 1 +vt 0.546875 1 +vt 0.5 1 +vt 0.5 0.90625 +vt 0.546875 0.90625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a3a58acf-2885-3588-3386-06528bca041b +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o leg1 +v 0 0.3125 0.0625 +v 0 0.3125 -0.125 +v 0 0 0.0625 +v 0 0 -0.125 +v -0.1875 0.3125 -0.125 +v -0.1875 0.3125 0.0625 +v -0.1875 0 -0.125 +v -0.1875 0 0.0625 +vt 0.453125 0.90625 +vt 0.5 0.90625 +vt 0.5 0.75 +vt 0.453125 0.75 +vt 0.40625 0.90625 +vt 0.453125 0.90625 +vt 0.453125 0.75 +vt 0.40625 0.75 +vt 0.546875 0.90625 +vt 0.59375 0.90625 +vt 0.59375 0.75 +vt 0.546875 0.75 +vt 0.5 0.90625 +vt 0.546875 0.90625 +vt 0.546875 0.75 +vt 0.5 0.75 +vt 0.5 0.90625 +vt 0.453125 0.90625 +vt 0.453125 1 +vt 0.5 1 +vt 0.546875 1 +vt 0.5 1 +vt 0.5 0.90625 +vt 0.546875 0.90625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a3a58acf-2885-3588-3386-06528bca041b +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o wing0 +v 0.25 0.6875 0.1875 +v 0.25 0.6875 -0.1875 +v 0.25 0.4375 0.1875 +v 0.25 0.4375 -0.1875 +v 0.1875 0.6875 -0.1875 +v 0.1875 0.6875 0.1875 +v 0.1875 0.4375 -0.1875 +v 0.1875 0.4375 0.1875 +vt 0.46875 0.40625 +vt 0.484375 0.40625 +vt 0.484375 0.28125 +vt 0.46875 0.28125 +vt 0.375 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.28125 +vt 0.375 0.28125 +vt 0.578125 0.40625 +vt 0.59375 0.40625 +vt 0.59375 0.28125 +vt 0.578125 0.28125 +vt 0.484375 0.40625 +vt 0.578125 0.40625 +vt 0.578125 0.28125 +vt 0.484375 0.28125 +vt 0.484375 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.59375 +vt 0.484375 0.59375 +vt 0.5 0.59375 +vt 0.484375 0.59375 +vt 0.484375 0.40625 +vt 0.5 0.40625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a3a58acf-2885-3588-3386-06528bca041b +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o wing1 +v -0.1875 0.6875 0.1875 +v -0.1875 0.6875 -0.1875 +v -0.1875 0.4375 0.1875 +v -0.1875 0.4375 -0.1875 +v -0.25 0.6875 -0.1875 +v -0.25 0.6875 0.1875 +v -0.25 0.4375 -0.1875 +v -0.25 0.4375 0.1875 +vt 0.46875 0.40625 +vt 0.484375 0.40625 +vt 0.484375 0.28125 +vt 0.46875 0.28125 +vt 0.375 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.28125 +vt 0.375 0.28125 +vt 0.578125 0.40625 +vt 0.59375 0.40625 +vt 0.59375 0.28125 +vt 0.578125 0.28125 +vt 0.484375 0.40625 +vt 0.578125 0.40625 +vt 0.578125 0.28125 +vt 0.484375 0.28125 +vt 0.484375 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.59375 +vt 0.484375 0.59375 +vt 0.5 0.59375 +vt 0.484375 0.59375 +vt 0.484375 0.40625 +vt 0.5 0.40625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a3a58acf-2885-3588-3386-06528bca041b +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/cod.obj b/prismarine-viewer/viewer/lib/entity/models/cod.obj new file mode 100644 index 00000000..2b469b8b --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/cod.obj @@ -0,0 +1,371 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.0625 0.25 0.5 +v 0.0625 0.25 0.0625 +v 0.0625 0 0.5 +v 0.0625 0 0.0625 +v -0.0625 0.25 0.0625 +v -0.0625 0.25 0.5 +v -0.0625 0 0.0625 +v -0.0625 0 0.5 +vt 0.21875 0.78125 +vt 0.28125 0.78125 +vt 0.28125 0.65625 +vt 0.21875 0.65625 +vt 0 0.78125 +vt 0.21875 0.78125 +vt 0.21875 0.65625 +vt 0 0.65625 +vt 0.5 0.78125 +vt 0.5625 0.78125 +vt 0.5625 0.65625 +vt 0.5 0.65625 +vt 0.28125 0.78125 +vt 0.5 0.78125 +vt 0.5 0.65625 +vt 0.28125 0.65625 +vt 0.28125 0.78125 +vt 0.21875 0.78125 +vt 0.21875 1 +vt 0.28125 1 +vt 0.34375 1 +vt 0.28125 1 +vt 0.28125 0.78125 +vt 0.34375 0.78125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_92191bde-46b9-ba2f-846b-1e3ee628119f +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0 0.3125 0.375 +v 0 0.3125 0 +v 0 0.25 0.375 +v 0 0.25 0 +v 0 0.3125 0 +v 0 0.3125 0.375 +v 0 0.25 0 +v 0 0.25 0.375 +vt 0.8125 1 +vt 0.8125 1 +vt 0.8125 0.96875 +vt 0.8125 0.96875 +vt 0.625 1 +vt 0.8125 1 +vt 0.8125 0.96875 +vt 0.625 0.96875 +vt 1 1 +vt 1 1 +vt 1 0.96875 +vt 1 0.96875 +vt 0.8125 1 +vt 1 1 +vt 1 0.96875 +vt 0.8125 0.96875 +vt 0.8125 1 +vt 0.8125 1 +vt 0.8125 1.1875 +vt 0.8125 1.1875 +vt 0.8125 1.1875 +vt 0.8125 1.1875 +vt 0.8125 1 +vt 0.8125 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_92191bde-46b9-ba2f-846b-1e3ee628119f +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o body +v 0 0 0.3125 +v 0 0 0.1875 +v 0 -0.0625 0.3125 +v 0 -0.0625 0.1875 +v 0 0 0.1875 +v 0 0 0.3125 +v 0 -0.0625 0.1875 +v 0 -0.0625 0.3125 +vt 0.75 0.96875 +vt 0.75 0.96875 +vt 0.75 0.9375 +vt 0.75 0.9375 +vt 0.6875 0.96875 +vt 0.75 0.96875 +vt 0.75 0.9375 +vt 0.6875 0.9375 +vt 0.8125 0.96875 +vt 0.8125 0.96875 +vt 0.8125 0.9375 +vt 0.8125 0.9375 +vt 0.75 0.96875 +vt 0.8125 0.96875 +vt 0.8125 0.9375 +vt 0.75 0.9375 +vt 0.75 0.96875 +vt 0.75 0.96875 +vt 0.75 1.03125 +vt 0.75 1.03125 +vt 0.75 1.03125 +vt 0.75 1.03125 +vt 0.75 0.96875 +vt 0.75 0.96875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_92191bde-46b9-ba2f-846b-1e3ee628119f +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.062450000000000006 0.25005 -0.125 +v 0.062450000000000006 0.25005 -0.1875 +v 0.062450000000000006 0.06255 -0.125 +v 0.062450000000000006 0.06255 -0.1875 +v -0.06255 0.25005 -0.1875 +v -0.06255 0.25005 -0.125 +v -0.06255 0.06255 -0.1875 +v -0.06255 0.06255 -0.125 +vt 0.03125 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.875 +vt 0.03125 0.875 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.875 +vt 0 0.875 +vt 0.125 0.96875 +vt 0.1875 0.96875 +vt 0.1875 0.875 +vt 0.125 0.875 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.875 +vt 0.09375 0.875 +vt 0.09375 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.09375 1 +vt 0.15625 1 +vt 0.09375 1 +vt 0.09375 0.96875 +vt 0.15625 0.96875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_92191bde-46b9-ba2f-846b-1e3ee628119f +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o head +v 0.0625 0.25 0.0625 +v 0.0625 0.25 -0.125 +v 0.0625 0 0.0625 +v 0.0625 0 -0.125 +v -0.0625 0.25 -0.125 +v -0.0625 0.25 0.0625 +v -0.0625 0 -0.125 +v -0.0625 0 0.0625 +vt 0.4375 0.90625 +vt 0.5 0.90625 +vt 0.5 0.78125 +vt 0.4375 0.78125 +vt 0.34375 0.90625 +vt 0.4375 0.90625 +vt 0.4375 0.78125 +vt 0.34375 0.78125 +vt 0.59375 0.90625 +vt 0.65625 0.90625 +vt 0.65625 0.78125 +vt 0.59375 0.78125 +vt 0.5 0.90625 +vt 0.59375 0.90625 +vt 0.59375 0.78125 +vt 0.5 0.78125 +vt 0.5 0.90625 +vt 0.4375 0.90625 +vt 0.4375 1 +vt 0.5 1 +vt 0.5625 1 +vt 0.5 1 +vt 0.5 0.90625 +vt 0.5625 0.90625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_92191bde-46b9-ba2f-846b-1e3ee628119f +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o leftFin +v -0.0625 0.0625 0.125 +v -0.0625 0.0625 0 +v -0.026651472728059622 0.011302997231938061 0.125 +v -0.026651472728059622 0.011302997231938061 0 +v -0.164894005536124 -0.009197054543880756 0 +v -0.164894005536124 -0.009197054543880756 0.125 +v -0.12904547826418356 -0.06039405731194275 0 +v -0.12904547826418356 -0.06039405731194275 0.125 +vt 0.8125 0.8125 +vt 0.875 0.8125 +vt 0.875 0.78125 +vt 0.8125 0.78125 +vt 0.75 0.8125 +vt 0.8125 0.8125 +vt 0.8125 0.78125 +vt 0.75 0.78125 +vt 0.9375 0.8125 +vt 1 0.8125 +vt 1 0.78125 +vt 0.9375 0.78125 +vt 0.875 0.8125 +vt 0.9375 0.8125 +vt 0.9375 0.78125 +vt 0.875 0.78125 +vt 0.875 0.8125 +vt 0.8125 0.8125 +vt 0.8125 0.875 +vt 0.875 0.875 +vt 0.9375 0.875 +vt 0.875 0.875 +vt 0.875 0.8125 +vt 0.9375 0.8125 +vn 0 0 -1 +vn 0.8191520442889918 0.573576436351046 0 +vn 0 0 1 +vn -0.8191520442889918 -0.573576436351046 0 +vn -0.573576436351046 0.8191520442889918 0 +vn 0.573576436351046 -0.8191520442889918 0 +usemtl m_92191bde-46b9-ba2f-846b-1e3ee628119f +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o rightFin +v 0.164894005536124 -0.009197054543880756 0.125 +v 0.164894005536124 -0.009197054543880756 0 +v 0.12904547826418356 -0.06039405731194275 0.125 +v 0.12904547826418356 -0.06039405731194275 0 +v 0.0625 0.0625 0 +v 0.0625 0.0625 0.125 +v 0.026651472728059566 0.011302997231938061 0 +v 0.026651472728059566 0.011302997231938061 0.125 +vt 0.8125 0.90625 +vt 0.875 0.90625 +vt 0.875 0.875 +vt 0.8125 0.875 +vt 0.75 0.90625 +vt 0.8125 0.90625 +vt 0.8125 0.875 +vt 0.75 0.875 +vt 0.9375 0.90625 +vt 1 0.90625 +vt 1 0.875 +vt 0.9375 0.875 +vt 0.875 0.90625 +vt 0.9375 0.90625 +vt 0.9375 0.875 +vt 0.875 0.875 +vt 0.875 0.90625 +vt 0.8125 0.90625 +vt 0.8125 0.96875 +vt 0.875 0.96875 +vt 0.9375 0.96875 +vt 0.875 0.96875 +vt 0.875 0.90625 +vt 0.9375 0.90625 +vn 0 0 -1 +vn 0.8191520442889918 -0.573576436351046 0 +vn 0 0 1 +vn -0.8191520442889918 0.573576436351046 0 +vn 0.573576436351046 0.8191520442889918 0 +vn -0.573576436351046 -0.8191520442889918 0 +usemtl m_92191bde-46b9-ba2f-846b-1e3ee628119f +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o tailfin +v 0 0.25 0.875 +v 0 0.25 0.5 +v 0 0 0.875 +v 0 0 0.5 +v 0 0.25 0.5 +v 0 0.25 0.875 +v 0 0 0.5 +v 0 0 0.875 +vt 0.8125 0.78125 +vt 0.8125 0.78125 +vt 0.8125 0.65625 +vt 0.8125 0.65625 +vt 0.625 0.78125 +vt 0.8125 0.78125 +vt 0.8125 0.65625 +vt 0.625 0.65625 +vt 1 0.78125 +vt 1 0.78125 +vt 1 0.65625 +vt 1 0.65625 +vt 0.8125 0.78125 +vt 1 0.78125 +vt 1 0.65625 +vt 0.8125 0.65625 +vt 0.8125 0.78125 +vt 0.8125 0.78125 +vt 0.8125 0.96875 +vt 0.8125 0.96875 +vt 0.8125 0.96875 +vt 0.8125 0.96875 +vt 0.8125 0.78125 +vt 0.8125 0.78125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_92191bde-46b9-ba2f-846b-1e3ee628119f +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/creeper.obj b/prismarine-viewer/viewer/lib/entity/models/creeper.obj new file mode 100644 index 00000000..2e68c50e --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/creeper.obj @@ -0,0 +1,279 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o Body +v 0.25 1.125 0.125 +v 0.25 1.125 -0.125 +v 0.25 0.375 0.125 +v 0.25 0.375 -0.125 +v -0.25 1.125 -0.125 +v -0.25 1.125 0.125 +v -0.25 0.375 -0.125 +v -0.25 0.375 0.125 +vt 0.3125 0.375 +vt 0.4375 0.375 +vt 0.4375 0 +vt 0.3125 0 +vt 0.25 0.375 +vt 0.3125 0.375 +vt 0.3125 0 +vt 0.25 0 +vt 0.5 0.375 +vt 0.625 0.375 +vt 0.625 0 +vt 0.5 0 +vt 0.4375 0.375 +vt 0.5 0.375 +vt 0.5 0 +vt 0.4375 0 +vt 0.4375 0.375 +vt 0.3125 0.375 +vt 0.3125 0.5 +vt 0.4375 0.5 +vt 0.5625 0.5 +vt 0.4375 0.5 +vt 0.4375 0.375 +vt 0.5625 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5d56b934-8e1a-577b-049f-fb19876a8641 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o Head +v 0.25 1.625 0.25 +v 0.25 1.625 -0.25 +v 0.25 1.125 0.25 +v 0.25 1.125 -0.25 +v -0.25 1.625 -0.25 +v -0.25 1.625 0.25 +v -0.25 1.125 -0.25 +v -0.25 1.125 0.25 +vt 0.125 0.75 +vt 0.25 0.75 +vt 0.25 0.5 +vt 0.125 0.5 +vt 0 0.75 +vt 0.125 0.75 +vt 0.125 0.5 +vt 0 0.5 +vt 0.375 0.75 +vt 0.5 0.75 +vt 0.5 0.5 +vt 0.375 0.5 +vt 0.25 0.75 +vt 0.375 0.75 +vt 0.375 0.5 +vt 0.25 0.5 +vt 0.25 0.75 +vt 0.125 0.75 +vt 0.125 1 +vt 0.25 1 +vt 0.375 1 +vt 0.25 1 +vt 0.25 0.75 +vt 0.375 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5d56b934-8e1a-577b-049f-fb19876a8641 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o leg0 +v 0.25 0.375 0.375 +v 0.25 0.375 0.125 +v 0.25 0 0.375 +v 0.25 0 0.125 +v 0 0.375 0.125 +v 0 0.375 0.375 +v 0 0 0.125 +v 0 0 0.375 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0 0.375 +vt 0.0625 0.375 +vt 0.0625 0.1875 +vt 0 0.1875 +vt 0.1875 0.375 +vt 0.25 0.375 +vt 0.25 0.1875 +vt 0.1875 0.1875 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0.1875 +vt 0.125 0.1875 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.5 +vt 0.125 0.5 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.375 +vt 0.1875 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5d56b934-8e1a-577b-049f-fb19876a8641 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o leg1 +v 0 0.375 0.375 +v 0 0.375 0.125 +v 0 0 0.375 +v 0 0 0.125 +v -0.25 0.375 0.125 +v -0.25 0.375 0.375 +v -0.25 0 0.125 +v -0.25 0 0.375 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0 0.375 +vt 0.0625 0.375 +vt 0.0625 0.1875 +vt 0 0.1875 +vt 0.1875 0.375 +vt 0.25 0.375 +vt 0.25 0.1875 +vt 0.1875 0.1875 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0.1875 +vt 0.125 0.1875 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.5 +vt 0.125 0.5 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.375 +vt 0.1875 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5d56b934-8e1a-577b-049f-fb19876a8641 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o leg2 +v 0.25 0.375 -0.125 +v 0.25 0.375 -0.375 +v 0.25 0 -0.125 +v 0.25 0 -0.375 +v 0 0.375 -0.375 +v 0 0.375 -0.125 +v 0 0 -0.375 +v 0 0 -0.125 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0 0.375 +vt 0.0625 0.375 +vt 0.0625 0.1875 +vt 0 0.1875 +vt 0.1875 0.375 +vt 0.25 0.375 +vt 0.25 0.1875 +vt 0.1875 0.1875 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0.1875 +vt 0.125 0.1875 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.5 +vt 0.125 0.5 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.375 +vt 0.1875 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5d56b934-8e1a-577b-049f-fb19876a8641 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o leg3 +v 0 0.375 -0.125 +v 0 0.375 -0.375 +v 0 0 -0.125 +v 0 0 -0.375 +v -0.25 0.375 -0.375 +v -0.25 0.375 -0.125 +v -0.25 0 -0.375 +v -0.25 0 -0.125 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0 0.375 +vt 0.0625 0.375 +vt 0.0625 0.1875 +vt 0 0.1875 +vt 0.1875 0.375 +vt 0.25 0.375 +vt 0.25 0.1875 +vt 0.1875 0.1875 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0.1875 +vt 0.125 0.1875 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.5 +vt 0.125 0.5 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.375 +vt 0.1875 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5d56b934-8e1a-577b-049f-fb19876a8641 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/dolphin.obj b/prismarine-viewer/viewer/lib/entity/models/dolphin.obj new file mode 100644 index 00000000..478ce015 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/dolphin.obj @@ -0,0 +1,371 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.25 0.4375 0.625 +v 0.25 0.4375 -0.1875 +v 0.25 0 0.625 +v 0.25 0 -0.1875 +v -0.25 0.4375 -0.1875 +v -0.25 0.4375 0.625 +v -0.25 0 -0.1875 +v -0.25 0 0.625 +vt 0.546875 0.796875 +vt 0.671875 0.796875 +vt 0.671875 0.6875 +vt 0.546875 0.6875 +vt 0.34375 0.796875 +vt 0.546875 0.796875 +vt 0.546875 0.6875 +vt 0.34375 0.6875 +vt 0.875 0.796875 +vt 1 0.796875 +vt 1 0.6875 +vt 0.875 0.6875 +vt 0.671875 0.796875 +vt 0.875 0.796875 +vt 0.875 0.6875 +vt 0.671875 0.6875 +vt 0.671875 0.796875 +vt 0.546875 0.796875 +vt 0.546875 1 +vt 0.671875 1 +vt 0.796875 1 +vt 0.671875 1 +vt 0.671875 0.796875 +vt 0.796875 0.796875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_84be203d-dd47-5073-42d4-8589a81aedb5 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o head +v 0.25 0.4375 -0.1875 +v 0.25 0.4375 -0.5625 +v 0.25 0 -0.1875 +v 0.25 0 -0.5625 +v -0.25 0.4375 -0.5625 +v -0.25 0.4375 -0.1875 +v -0.25 0 -0.5625 +v -0.25 0 -0.1875 +vt 0.09375 0.90625 +vt 0.21875 0.90625 +vt 0.21875 0.796875 +vt 0.09375 0.796875 +vt 0 0.90625 +vt 0.09375 0.90625 +vt 0.09375 0.796875 +vt 0 0.796875 +vt 0.3125 0.90625 +vt 0.4375 0.90625 +vt 0.4375 0.796875 +vt 0.3125 0.796875 +vt 0.21875 0.90625 +vt 0.3125 0.90625 +vt 0.3125 0.796875 +vt 0.21875 0.796875 +vt 0.21875 0.90625 +vt 0.09375 0.90625 +vt 0.09375 1 +vt 0.21875 1 +vt 0.34375 1 +vt 0.21875 1 +vt 0.21875 0.90625 +vt 0.34375 0.90625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_84be203d-dd47-5073-42d4-8589a81aedb5 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o nose +v 0.0625 0.125 -0.5625 +v 0.0625 0.125 -0.8125 +v 0.0625 0 -0.5625 +v 0.0625 0 -0.8125 +v -0.0625 0.125 -0.8125 +v -0.0625 0.125 -0.5625 +v -0.0625 0 -0.8125 +v -0.0625 0 -0.5625 +vt 0.0625 0.734375 +vt 0.09375 0.734375 +vt 0.09375 0.703125 +vt 0.0625 0.703125 +vt 0 0.734375 +vt 0.0625 0.734375 +vt 0.0625 0.703125 +vt 0 0.703125 +vt 0.15625 0.734375 +vt 0.1875 0.734375 +vt 0.1875 0.703125 +vt 0.15625 0.703125 +vt 0.09375 0.734375 +vt 0.15625 0.734375 +vt 0.15625 0.703125 +vt 0.09375 0.703125 +vt 0.09375 0.734375 +vt 0.0625 0.734375 +vt 0.0625 0.796875 +vt 0.09375 0.796875 +vt 0.125 0.796875 +vt 0.09375 0.796875 +vt 0.09375 0.734375 +vt 0.125 0.734375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_84be203d-dd47-5073-42d4-8589a81aedb5 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o tail +v 0.125 0.25743308235954887 1.3237397711116625 +v 0.125 0.31735265549856384 0.6388559161735876 +v 0.125 -0.0538777607941216 1.2965036015030194 +v 0.125 0.006041812344893427 0.6116197465649442 +v -0.125 0.31735265549856384 0.6388559161735876 +v -0.125 0.25743308235954887 1.3237397711116625 +v -0.125 0.006041812344893427 0.6116197465649442 +v -0.125 -0.0538777607941216 1.2965036015030194 +vt 0.171875 0.53125 +vt 0.234375 0.53125 +vt 0.234375 0.453125 +vt 0.171875 0.453125 +vt 0 0.53125 +vt 0.171875 0.53125 +vt 0.171875 0.453125 +vt 0 0.453125 +vt 0.40625 0.53125 +vt 0.46875 0.53125 +vt 0.46875 0.453125 +vt 0.40625 0.453125 +vt 0.234375 0.53125 +vt 0.40625 0.53125 +vt 0.40625 0.453125 +vt 0.234375 0.453125 +vt 0.234375 0.53125 +vt 0.171875 0.53125 +vt 0.171875 0.703125 +vt 0.234375 0.703125 +vt 0.296875 0.703125 +vt 0.234375 0.703125 +vt 0.234375 0.53125 +vt 0.296875 0.53125 +vn 0 0.08715574274765818 -0.9961946980917455 +vn 1 0 0 +vn 0 -0.08715574274765818 0.9961946980917455 +vn -1 0 0 +vn 0 0.9961946980917455 0.08715574274765818 +vn 0 -0.9961946980917455 -0.08715574274765818 +usemtl m_84be203d-dd47-5073-42d4-8589a81aedb5 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o tail_fin +v 0.3125 0.06737675474652305 1.559379883370239 +v 0.3125 0.15173340012547243 1.1939911090757758 +v 0.3125 0.006478625697445839 1.5453204424737472 +v 0.3125 0.09083527107639522 1.1799316681792842 +v -0.3125 0.15173340012547243 1.1939911090757758 +v -0.3125 0.06737675474652305 1.559379883370239 +v -0.3125 0.09083527107639522 1.1799316681792842 +v -0.3125 0.006478625697445839 1.5453204424737472 +vt 0.390625 0.59375 +vt 0.546875 0.59375 +vt 0.546875 0.578125 +vt 0.390625 0.578125 +vt 0.296875 0.59375 +vt 0.390625 0.59375 +vt 0.390625 0.578125 +vt 0.296875 0.578125 +vt 0.640625 0.59375 +vt 0.796875 0.59375 +vt 0.796875 0.578125 +vt 0.640625 0.578125 +vt 0.546875 0.59375 +vt 0.640625 0.59375 +vt 0.640625 0.578125 +vt 0.546875 0.578125 +vt 0.546875 0.59375 +vt 0.390625 0.59375 +vt 0.390625 0.6875 +vt 0.546875 0.6875 +vt 0.703125 0.6875 +vt 0.546875 0.6875 +vt 0.546875 0.59375 +vt 0.703125 0.59375 +vn 0 0.224951054343865 -0.9743700647852354 +vn 1 0 0 +vn 0 -0.224951054343865 0.9743700647852354 +vn -1 0 0 +vn 0 0.9743700647852354 0.224951054343865 +vn 0 -0.9743700647852354 -0.224951054343865 +usemtl m_84be203d-dd47-5073-42d4-8589a81aedb5 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o back_fin +v 0.03125 0.7045071448143734 0.22503005919760444 +v 0.03125 0.4338742061317362 0.06878005919760444 +v 0.03125 0.5795071448143734 0.44153641014371414 +v 0.03125 0.3088742061317362 0.28528641014371414 +v -0.03125 0.4338742061317362 0.06878005919760444 +v -0.03125 0.7045071448143734 0.22503005919760444 +v -0.03125 0.3088742061317362 0.28528641014371414 +v -0.03125 0.5795071448143734 0.44153641014371414 +vt 0.875 0.921875 +vt 0.890625 0.921875 +vt 0.890625 0.859375 +vt 0.875 0.859375 +vt 0.796875 0.921875 +vt 0.875 0.921875 +vt 0.875 0.859375 +vt 0.796875 0.859375 +vt 0.96875 0.921875 +vt 0.984375 0.921875 +vt 0.984375 0.859375 +vt 0.96875 0.859375 +vt 0.890625 0.921875 +vt 0.96875 0.921875 +vt 0.96875 0.859375 +vt 0.890625 0.859375 +vt 0.890625 0.921875 +vt 0.875 0.921875 +vt 0.875 1 +vt 0.890625 1 +vt 0.90625 1 +vt 0.890625 1 +vt 0.890625 0.921875 +vt 0.90625 0.921875 +vn 0 -0.8660254037844386 -0.5000000000000001 +vn 1 0 0 +vn 0 0.8660254037844386 0.5000000000000001 +vn -1 0 0 +vn 0 0.5000000000000001 -0.8660254037844386 +vn 0 -0.5000000000000001 0.8660254037844386 +usemtl m_84be203d-dd47-5073-42d4-8589a81aedb5 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o left_fin +v -0.5939081233075358 0.0007485675108518386 0.11737888892342419 +v -0.25118856264048317 0.1055284523428025 -0.13356080198015846 +v -0.456779654809827 0.04267294763203877 0.32216689999567216 +v -0.11406009414277446 0.14745283246398944 0.07122720909208935 +v -0.2329153310953121 0.04575940509511278 -0.13356080198015846 +v -0.5756348917623646 -0.05902047973683788 0.11737888892342419 +v -0.09578686259760338 0.08768378521629971 0.07122720909208935 +v -0.438506423264656 -0.01709609961565095 0.32216689999567216 +vt 0.859375 0.578125 +vt 0.875 0.578125 +vt 0.875 0.515625 +vt 0.859375 0.515625 +vt 0.75 0.578125 +vt 0.859375 0.578125 +vt 0.859375 0.515625 +vt 0.75 0.515625 +vt 0.984375 0.578125 +vt 1 0.578125 +vt 1 0.515625 +vt 0.984375 0.515625 +vt 0.875 0.578125 +vt 0.984375 0.578125 +vt 0.984375 0.515625 +vt 0.875 0.515625 +vt 0.875 0.578125 +vt 0.859375 0.578125 +vt 0.859375 0.6875 +vt 0.875 0.6875 +vt 0.890625 0.6875 +vt 0.875 0.6875 +vt 0.875 0.578125 +vt 0.890625 0.578125 +vn 0.7833589958104059 0.23949687961588728 -0.5735764363510463 +vn -0.2923717047227367 0.9563047559630355 -8.326672684688674e-17 +vn -0.7833589958104059 -0.23949687961588728 0.5735764363510463 +vn 0.2923717047227367 -0.9563047559630355 8.326672684688674e-17 +vn -0.5485138739908348 -0.16769752048474773 -0.8191520442889918 +vn 0.5485138739908348 0.16769752048474773 0.8191520442889918 +usemtl m_84be203d-dd47-5073-42d4-8589a81aedb5 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o left_fin +v 0.5756348917623646 -0.05902047973683788 0.11737888892342419 +v 0.23291533109531204 0.04575940509511278 -0.13356080198015846 +v 0.43850642326465605 -0.01709609961565095 0.32216689999567216 +v 0.09578686259760338 0.08768378521629971 0.07122720909208935 +v 0.25118856264048317 0.1055284523428025 -0.13356080198015846 +v 0.5939081233075358 0.0007485675108518386 0.11737888892342419 +v 0.1140600941427744 0.14745283246398944 0.07122720909208935 +v 0.4567796548098271 0.04267294763203877 0.32216689999567216 +vt 0.875 0.578125 +vt 0.859375 0.578125 +vt 0.859375 0.515625 +vt 0.875 0.515625 +vt 0.984375 0.578125 +vt 0.875 0.578125 +vt 0.875 0.515625 +vt 0.984375 0.515625 +vt 1 0.578125 +vt 0.984375 0.578125 +vt 0.984375 0.515625 +vt 1 0.515625 +vt 0.859375 0.578125 +vt 0.75 0.578125 +vt 0.75 0.515625 +vt 0.859375 0.515625 +vt 0.859375 0.578125 +vt 0.875 0.578125 +vt 0.875 0.6875 +vt 0.859375 0.6875 +vt 0.875 0.6875 +vt 0.890625 0.6875 +vt 0.890625 0.578125 +vt 0.875 0.578125 +vn -0.7833589958104059 0.23949687961588728 -0.5735764363510463 +vn -0.2923717047227367 -0.9563047559630355 8.326672684688674e-17 +vn 0.7833589958104059 -0.23949687961588728 0.5735764363510463 +vn 0.2923717047227367 0.9563047559630355 -8.326672684688674e-17 +vn 0.5485138739908348 -0.16769752048474773 -0.8191520442889918 +vn -0.5485138739908348 0.16769752048474773 0.8191520442889918 +usemtl m_84be203d-dd47-5073-42d4-8589a81aedb5 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/ender_dragon.obj b/prismarine-viewer/viewer/lib/entity/models/ender_dragon.obj new file mode 100644 index 00000000..84c909a9 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/ender_dragon.obj @@ -0,0 +1,2993 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o neck +v 0.3125 0.7488108431536706 -0.47276383039135683 +v 0.3125 0.803283182370957 -1.0953855166986979 +v 0.3125 0.1261891568463296 -0.5272361696086432 +v 0.3125 0.18066149606361592 -1.1498578559159842 +v -0.3125 0.803283182370957 -1.0953855166986979 +v -0.3125 0.7488108431536706 -0.47276383039135683 +v -0.3125 0.18066149606361592 -1.1498578559159842 +v -0.3125 0.1261891568463296 -0.5272361696086432 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 0.08715574274765818 -0.9961946980917455 +vn 1 0 0 +vn 0 -0.08715574274765818 0.9961946980917455 +vn -1 0 0 +vn 0 0.9961946980917455 0.08715574274765818 +vn 0 -0.9961946980917455 -0.08715574274765818 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o neck +v 0.0625 1.0087539855200642 -0.5754992319659105 +v 0.0625 1.041437389050436 -0.9490722437503151 +v 0.0625 0.7597053109971279 -0.597288167652825 +v 0.0625 0.7923887145274997 -0.9708611794372296 +v -0.0625 1.041437389050436 -0.9490722437503151 +v -0.0625 1.0087539855200642 -0.5754992319659105 +v -0.0625 0.7923887145274997 -0.9708611794372296 +v -0.0625 0.7597053109971279 -0.597288167652825 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 0.08715574274765818 -0.9961946980917455 +vn 1 0 0 +vn 0 -0.08715574274765818 0.9961946980917455 +vn -1 0 0 +vn 0 0.9961946980917455 0.08715574274765818 +vn 0 -0.9961946980917455 -0.08715574274765818 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o neck +v 0.3125 0.8044723392172863 -1.1226216863073408 +v 0.3125 0.8044723392172863 -1.7476216863073408 +v 0.3125 0.17947233921728634 -1.1226216863073408 +v 0.3125 0.17947233921728634 -1.7476216863073408 +v -0.3125 0.8044723392172863 -1.7476216863073408 +v -0.3125 0.8044723392172863 -1.1226216863073408 +v -0.3125 0.17947233921728634 -1.7476216863073408 +v -0.3125 0.17947233921728634 -1.1226216863073408 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o neck +v 0.0625 1.0544723392172863 -1.2476216863073408 +v 0.0625 1.0544723392172863 -1.6226216863073408 +v 0.0625 0.8044723392172863 -1.2476216863073408 +v 0.0625 0.8044723392172863 -1.6226216863073408 +v -0.0625 1.0544723392172863 -1.6226216863073408 +v -0.0625 1.0544723392172863 -1.2476216863073408 +v -0.0625 0.8044723392172863 -1.6226216863073408 +v -0.0625 0.8044723392172863 -1.2476216863073408 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o neck +v 0.3125 0.803283182370957 -1.774857855915984 +v 0.3125 0.7488108431536706 -2.3974795422233246 +v 0.3125 0.18066149606361592 -1.7203855166986977 +v 0.3125 0.12618915684632948 -2.3430072030060387 +v -0.3125 0.7488108431536706 -2.3974795422233246 +v -0.3125 0.803283182370957 -1.774857855915984 +v -0.3125 0.12618915684632948 -2.3430072030060387 +v -0.3125 0.18066149606361592 -1.7203855166986977 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.08715574274765818 -0.9961946980917455 +vn 1 0 0 +vn 0 0.08715574274765818 0.9961946980917455 +vn -1 0 0 +vn 0 0.9961946980917455 -0.08715574274765818 +vn 0 -0.9961946980917455 0.08715574274765818 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o neck +v 0.0625 1.041437389050436 -1.9211711288643667 +v 0.0625 1.0087539855200642 -2.2947441406487714 +v 0.0625 0.7923887145274997 -1.8993821931774522 +v 0.0625 0.7597053109971279 -2.272955204961857 +v -0.0625 1.0087539855200642 -2.2947441406487714 +v -0.0625 1.041437389050436 -1.9211711288643667 +v -0.0625 0.7597053109971279 -2.272955204961857 +v -0.0625 0.7923887145274997 -1.8993821931774522 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.08715574274765818 -0.9961946980917455 +vn 1 0 0 +vn 0 0.08715574274765818 0.9961946980917455 +vn -1 0 0 +vn 0 0.9961946980917455 -0.08715574274765818 +vn 0 -0.9961946980917455 0.08715574274765818 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o neck +v 0.3125 0.7452524228163151 -2.424508428135597 +v 0.3125 0.6367223117744836 -3.0400132737682273 +v 0.3125 0.1297475771836849 -2.315978317093766 +v 0.3125 0.02121746614185338 -2.931483162726396 +v -0.3125 0.6367223117744836 -3.0400132737682273 +v -0.3125 0.7452524228163151 -2.424508428135597 +v -0.3125 0.02121746614185338 -2.931483162726396 +v -0.3125 0.1297475771836849 -2.315978317093766 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.17364817766693036 -0.9848077530122081 +vn 1 0 0 +vn 0 0.17364817766693036 0.9848077530122081 +vn -1 0 0 +vn 0 0.9848077530122081 -0.17364817766693036 +vn 0 -0.9848077530122081 0.17364817766693036 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o neck +v 0.0625 0.9697483388610009 -2.591021441678856 +v 0.0625 0.9046302722359019 -2.960324349058434 +v 0.0625 0.7235464006079488 -2.5476093972621237 +v 0.0625 0.6584283339828498 -2.9169123046417016 +v -0.0625 0.9046302722359019 -2.960324349058434 +v -0.0625 0.9697483388610009 -2.591021441678856 +v -0.0625 0.6584283339828498 -2.9169123046417016 +v -0.0625 0.7235464006079488 -2.5476093972621237 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.17364817766693036 -0.9848077530122081 +vn 1 0 0 +vn 0 0.17364817766693036 0.9848077530122081 +vn -1 0 0 +vn 0 0.9848077530122081 -0.17364817766693036 +vn 0 -0.9848077530122081 0.17364817766693036 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o neck +v 0.3125 0.6308217096735025 -3.0666291698418497 +v 0.3125 0.469059806484427 -3.670332811272517 +v 0.3125 0.027118068242834803 -2.904867266652774 +v 0.3125 -0.13464383494624066 -3.5085709080834415 +v -0.3125 0.469059806484427 -3.670332811272517 +v -0.3125 0.6308217096735025 -3.0666291698418497 +v -0.3125 -0.13464383494624066 -3.5085709080834415 +v -0.3125 0.027118068242834803 -2.904867266652774 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.25881904510252074 -0.9659258262890683 +vn 1 0 0 +vn 0 0.25881904510252074 0.9659258262890683 +vn -1 0 0 +vn 0 0.9659258262890683 -0.25881904510252074 +vn 0 -0.9659258262890683 0.25881904510252074 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o neck +v 0.0625 0.8399507856079544 -3.252074659403613 +v 0.0625 0.7428936436945093 -3.6142968442620136 +v 0.0625 0.5984693290356873 -3.187369898127983 +v 0.0625 0.5014121871222421 -3.5495920829863836 +v -0.0625 0.7428936436945093 -3.6142968442620136 +v -0.0625 0.8399507856079544 -3.252074659403613 +v -0.0625 0.5014121871222421 -3.5495920829863836 +v -0.0625 0.5984693290356873 -3.187369898127983 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.25881904510252074 -0.9659258262890683 +vn 1 0 0 +vn 0 0.25881904510252074 0.9659258262890683 +vn -1 0 0 +vn 0 0.9659258262890683 -0.25881904510252074 +vn 0 -0.9659258262890683 0.25881904510252074 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o head +v 0.375 -0.07332885084174778 -4.433059161823504 +v 0.375 -0.41534899416741644 -5.372751782609413 +v 0.375 -0.3669827948373441 -4.326177867034232 +v 0.375 -0.7090029381630127 -5.265870487820141 +v -0.375 -0.41534899416741644 -5.372751782609413 +v -0.375 -0.07332885084174778 -4.433059161823504 +v -0.375 -0.7090029381630127 -5.265870487820141 +v -0.375 -0.3669827948373441 -4.326177867034232 +vt 0.75 0.765625 +vt 0.796875 0.765625 +vt 0.796875 0.74609375 +vt 0.75 0.74609375 +vt 0.6875 0.765625 +vt 0.75 0.765625 +vt 0.75 0.74609375 +vt 0.6875 0.74609375 +vt 0.859375 0.765625 +vt 0.90625 0.765625 +vt 0.90625 0.74609375 +vt 0.859375 0.74609375 +vt 0.796875 0.765625 +vt 0.859375 0.765625 +vt 0.859375 0.74609375 +vt 0.796875 0.74609375 +vt 0.796875 0.765625 +vt 0.75 0.765625 +vt 0.75 0.828125 +vt 0.796875 0.828125 +vt 0.84375 0.828125 +vt 0.796875 0.828125 +vt 0.796875 0.765625 +vt 0.84375 0.765625 +vn 0 -0.34202014332566877 -0.9396926207859084 +vn 1 0 0 +vn 0 0.34202014332566877 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 -0.34202014332566877 +vn 0 -0.9396926207859084 0.34202014332566877 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o head +v 0.5 0.6370542961620473 -3.760461931340814 +v 0.5 0.2950341528363787 -4.7001545521267225 +v 0.5 -0.3026383246238611 -3.418441788015145 +v 0.5 -0.6446584679495297 -4.358134408801053 +v -0.5 0.2950341528363787 -4.7001545521267225 +v -0.5 0.6370542961620473 -3.760461931340814 +v -0.5 -0.6446584679495297 -4.358134408801053 +v -0.5 -0.3026383246238611 -3.418441788015145 +vt 0.5 0.8203125 +vt 0.5625 0.8203125 +vt 0.5625 0.7578125 +vt 0.5 0.7578125 +vt 0.4375 0.8203125 +vt 0.5 0.8203125 +vt 0.5 0.7578125 +vt 0.4375 0.7578125 +vt 0.625 0.8203125 +vt 0.6875 0.8203125 +vt 0.6875 0.7578125 +vt 0.625 0.7578125 +vt 0.5625 0.8203125 +vt 0.625 0.8203125 +vt 0.625 0.7578125 +vt 0.5625 0.7578125 +vt 0.5625 0.8203125 +vt 0.5 0.8203125 +vt 0.5 0.8828125 +vt 0.5625 0.8828125 +vt 0.625 0.8828125 +vt 0.5625 0.8828125 +vt 0.5625 0.8203125 +vt 0.625 0.8203125 +vn 0 -0.34202014332566877 -0.9396926207859084 +vn 1 0 0 +vn 0 0.34202014332566877 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 -0.34202014332566877 +vn 0 -0.9396926207859084 0.34202014332566877 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o head +v 0.3125 0.7864724155271074 -4.080890122368709 +v 0.3125 0.6582148617799817 -4.433274855163424 +v 0.3125 0.5515492603306302 -3.9953850865372913 +v 0.3125 0.42329170658350446 -4.347769819332006 +v 0.1875 0.6582148617799817 -4.433274855163424 +v 0.1875 0.7864724155271074 -4.080890122368709 +v 0.1875 0.42329170658350446 -4.347769819332006 +v 0.1875 0.5515492603306302 -3.9953850865372913 +vt 0.03125 0.9765625 +vt 0.0234375 0.9765625 +vt 0.0234375 0.9609375 +vt 0.03125 0.9609375 +vt 0.0546875 0.9765625 +vt 0.03125 0.9765625 +vt 0.03125 0.9609375 +vt 0.0546875 0.9609375 +vt 0.0625 0.9765625 +vt 0.0546875 0.9765625 +vt 0.0546875 0.9609375 +vt 0.0625 0.9609375 +vt 0.0234375 0.9765625 +vt 0 0.9765625 +vt 0 0.9609375 +vt 0.0234375 0.9609375 +vt 0.0234375 0.9765625 +vt 0.03125 0.9765625 +vt 0.03125 1 +vt 0.0234375 1 +vt 0.03125 1 +vt 0.0390625 1 +vt 0.0390625 0.9765625 +vt 0.03125 0.9765625 +vn 0 -0.34202014332566877 -0.9396926207859084 +vn 1 0 0 +vn 0 0.34202014332566877 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 -0.34202014332566877 +vn 0 -0.9396926207859084 0.34202014332566877 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 +o head +v 0.3125 -0.16962986282205206 -5.063119567730405 +v 0.3125 -0.2551348986534694 -5.298042722926883 +v 0.3125 -0.28709144042029067 -5.020367049814697 +v 0.3125 -0.372596476251708 -5.255290205011175 +v 0.1875 -0.2551348986534694 -5.298042722926883 +v 0.1875 -0.16962986282205206 -5.063119567730405 +v 0.1875 -0.372596476251708 -5.255290205011175 +v 0.1875 -0.28709144042029067 -5.020367049814697 +vt 0.4609375 0.984375 +vt 0.453125 0.984375 +vt 0.453125 0.9765625 +vt 0.4609375 0.9765625 +vt 0.4765625 0.984375 +vt 0.4609375 0.984375 +vt 0.4609375 0.9765625 +vt 0.4765625 0.9765625 +vt 0.484375 0.984375 +vt 0.4765625 0.984375 +vt 0.4765625 0.9765625 +vt 0.484375 0.9765625 +vt 0.453125 0.984375 +vt 0.4375 0.984375 +vt 0.4375 0.9765625 +vt 0.453125 0.9765625 +vt 0.453125 0.984375 +vt 0.4609375 0.984375 +vt 0.4609375 1 +vt 0.453125 1 +vt 0.4609375 1 +vt 0.46875 1 +vt 0.46875 0.984375 +vt 0.4609375 0.984375 +vn 0 -0.34202014332566877 -0.9396926207859084 +vn 1 0 0 +vn 0 0.34202014332566877 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 -0.34202014332566877 +vn 0 -0.9396926207859084 0.34202014332566877 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 108/316/79 111/315/79 109/314/79 106/313/79 +f 107/320/80 108/319/80 106/318/80 105/317/80 +f 112/324/81 107/323/81 105/322/81 110/321/81 +f 111/328/82 112/327/82 110/326/82 109/325/82 +f 110/332/83 105/331/83 106/330/83 109/329/83 +f 111/336/84 108/335/84 107/334/84 112/333/84 +o head +v -0.1875 0.7864724155271074 -4.080890122368709 +v -0.1875 0.6582148617799817 -4.433274855163424 +v -0.1875 0.5515492603306302 -3.9953850865372913 +v -0.1875 0.42329170658350446 -4.347769819332006 +v -0.3125 0.6582148617799817 -4.433274855163424 +v -0.3125 0.7864724155271074 -4.080890122368709 +v -0.3125 0.42329170658350446 -4.347769819332006 +v -0.3125 0.5515492603306302 -3.9953850865372913 +vt 0.0234375 0.9765625 +vt 0.03125 0.9765625 +vt 0.03125 0.9609375 +vt 0.0234375 0.9609375 +vt 0 0.9765625 +vt 0.0234375 0.9765625 +vt 0.0234375 0.9609375 +vt 0 0.9609375 +vt 0.0546875 0.9765625 +vt 0.0625 0.9765625 +vt 0.0625 0.9609375 +vt 0.0546875 0.9609375 +vt 0.03125 0.9765625 +vt 0.0546875 0.9765625 +vt 0.0546875 0.9609375 +vt 0.03125 0.9609375 +vt 0.03125 0.9765625 +vt 0.0234375 0.9765625 +vt 0.0234375 1 +vt 0.03125 1 +vt 0.0390625 1 +vt 0.03125 1 +vt 0.03125 0.9765625 +vt 0.0390625 0.9765625 +vn 0 -0.34202014332566877 -0.9396926207859084 +vn 1 0 0 +vn 0 0.34202014332566877 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 -0.34202014332566877 +vn 0 -0.9396926207859084 0.34202014332566877 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 116/340/85 119/339/85 117/338/85 114/337/85 +f 115/344/86 116/343/86 114/342/86 113/341/86 +f 120/348/87 115/347/87 113/346/87 118/345/87 +f 119/352/88 120/351/88 118/350/88 117/349/88 +f 118/356/89 113/355/89 114/354/89 117/353/89 +f 119/360/90 116/359/90 115/358/90 120/357/90 +o head +v -0.1875 -0.16962986282205206 -5.063119567730405 +v -0.1875 -0.2551348986534694 -5.298042722926883 +v -0.1875 -0.28709144042029067 -5.020367049814697 +v -0.1875 -0.372596476251708 -5.255290205011175 +v -0.3125 -0.2551348986534694 -5.298042722926883 +v -0.3125 -0.16962986282205206 -5.063119567730405 +v -0.3125 -0.372596476251708 -5.255290205011175 +v -0.3125 -0.28709144042029067 -5.020367049814697 +vt 0.453125 0.984375 +vt 0.4609375 0.984375 +vt 0.4609375 0.9765625 +vt 0.453125 0.9765625 +vt 0.4375 0.984375 +vt 0.453125 0.984375 +vt 0.453125 0.9765625 +vt 0.4375 0.9765625 +vt 0.4765625 0.984375 +vt 0.484375 0.984375 +vt 0.484375 0.9765625 +vt 0.4765625 0.9765625 +vt 0.4609375 0.984375 +vt 0.4765625 0.984375 +vt 0.4765625 0.9765625 +vt 0.4609375 0.9765625 +vt 0.4609375 0.984375 +vt 0.453125 0.984375 +vt 0.453125 1 +vt 0.4609375 1 +vt 0.46875 1 +vt 0.4609375 1 +vt 0.4609375 0.984375 +vt 0.46875 0.984375 +vn 0 -0.34202014332566877 -0.9396926207859084 +vn 1 0 0 +vn 0 0.34202014332566877 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 -0.34202014332566877 +vn 0 -0.9396926207859084 0.34202014332566877 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 124/364/91 127/363/91 125/362/91 122/361/91 +f 123/368/92 124/367/92 122/366/92 121/365/92 +f 128/372/93 123/371/93 121/370/93 126/369/93 +f 127/376/94 128/375/94 126/374/94 125/373/94 +f 126/380/95 121/379/95 122/378/95 125/377/95 +f 127/384/96 124/383/96 123/382/96 128/381/96 +o jaw +v 0.375 -0.3814550631514302 -4.318644081003175 +v 0.375 -0.9550314995024762 -5.137796125292168 +v 0.375 -0.5862430742236779 -4.175249971915413 +v 0.375 -1.159819510574724 -4.994402016204406 +v -0.375 -0.9550314995024762 -5.137796125292168 +v -0.375 -0.3814550631514302 -4.318644081003175 +v -0.375 -1.159819510574724 -4.994402016204406 +v -0.375 -0.5862430742236779 -4.175249971915413 +vt 0.75 0.68359375 +vt 0.796875 0.68359375 +vt 0.796875 0.66796875 +vt 0.75 0.66796875 +vt 0.6875 0.68359375 +vt 0.75 0.68359375 +vt 0.75 0.66796875 +vt 0.6875 0.66796875 +vt 0.859375 0.68359375 +vt 0.90625 0.68359375 +vt 0.90625 0.66796875 +vt 0.859375 0.66796875 +vt 0.796875 0.68359375 +vt 0.859375 0.68359375 +vt 0.859375 0.66796875 +vt 0.796875 0.66796875 +vt 0.796875 0.68359375 +vt 0.75 0.68359375 +vt 0.75 0.74609375 +vt 0.796875 0.74609375 +vt 0.84375 0.74609375 +vt 0.796875 0.74609375 +vt 0.796875 0.68359375 +vt 0.84375 0.68359375 +vn 0 -0.5735764363510462 -0.8191520442889919 +vn 1 0 0 +vn 0 0.5735764363510462 0.8191520442889919 +vn -1 0 0 +vn 0 0.8191520442889919 -0.5735764363510462 +vn 0 -0.8191520442889919 0.5735764363510462 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 132/388/97 135/387/97 133/386/97 130/385/97 +f 131/392/98 132/391/98 130/390/98 129/389/98 +f 136/396/99 131/395/99 129/394/99 134/393/99 +f 135/400/100 136/399/100 134/398/100 133/397/100 +f 134/404/101 129/403/101 130/402/101 133/401/101 +f 135/408/102 132/407/102 131/406/102 136/405/102 +o body +v 0.75 1.25 3.5 +v 0.75 1.25 -0.5 +v 0.75 -0.25 3.5 +v 0.75 -0.25 -0.5 +v -0.75 1.25 -0.5 +v -0.75 1.25 3.5 +v -0.75 -0.25 -0.5 +v -0.75 -0.25 3.5 +vt 0.25 0.75 +vt 0.34375 0.75 +vt 0.34375 0.65625 +vt 0.25 0.65625 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 0.65625 +vt 0 0.65625 +vt 0.59375 0.75 +vt 0.6875 0.75 +vt 0.6875 0.65625 +vt 0.59375 0.65625 +vt 0.34375 0.75 +vt 0.59375 0.75 +vt 0.59375 0.65625 +vt 0.34375 0.65625 +vt 0.34375 0.75 +vt 0.25 0.75 +vt 0.25 1 +vt 0.34375 1 +vt 0.4375 1 +vt 0.34375 1 +vt 0.34375 0.75 +vt 0.4375 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 140/412/103 143/411/103 141/410/103 138/409/103 +f 139/416/104 140/415/104 138/414/104 137/413/104 +f 144/420/105 139/419/105 137/418/105 142/417/105 +f 143/424/106 144/423/106 142/422/106 141/421/106 +f 142/428/107 137/427/107 138/426/107 141/425/107 +f 143/432/108 140/431/108 139/430/108 144/429/108 +o body +v 0.0625 1.625 0.625 +v 0.0625 1.625 -0.125 +v 0.0625 1.25 0.625 +v 0.0625 1.25 -0.125 +v -0.0625 1.625 -0.125 +v -0.0625 1.625 0.625 +v -0.0625 1.25 -0.125 +v -0.0625 1.25 0.625 +vt 0.90625 0.74609375 +vt 0.9140625 0.74609375 +vt 0.9140625 0.72265625 +vt 0.90625 0.72265625 +vt 0.859375 0.74609375 +vt 0.90625 0.74609375 +vt 0.90625 0.72265625 +vt 0.859375 0.72265625 +vt 0.9609375 0.74609375 +vt 0.96875 0.74609375 +vt 0.96875 0.72265625 +vt 0.9609375 0.72265625 +vt 0.9140625 0.74609375 +vt 0.9609375 0.74609375 +vt 0.9609375 0.72265625 +vt 0.9140625 0.72265625 +vt 0.9140625 0.74609375 +vt 0.90625 0.74609375 +vt 0.90625 0.79296875 +vt 0.9140625 0.79296875 +vt 0.921875 0.79296875 +vt 0.9140625 0.79296875 +vt 0.9140625 0.74609375 +vt 0.921875 0.74609375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 148/436/109 151/435/109 149/434/109 146/433/109 +f 147/440/110 148/439/110 146/438/110 145/437/110 +f 152/444/111 147/443/111 145/442/111 150/441/111 +f 151/448/112 152/447/112 150/446/112 149/445/112 +f 150/452/113 145/451/113 146/450/113 149/449/113 +f 151/456/114 148/455/114 147/454/114 152/453/114 +o body +v 0.0625 1.625 1.875 +v 0.0625 1.625 1.125 +v 0.0625 1.25 1.875 +v 0.0625 1.25 1.125 +v -0.0625 1.625 1.125 +v -0.0625 1.625 1.875 +v -0.0625 1.25 1.125 +v -0.0625 1.25 1.875 +vt 0.90625 0.74609375 +vt 0.9140625 0.74609375 +vt 0.9140625 0.72265625 +vt 0.90625 0.72265625 +vt 0.859375 0.74609375 +vt 0.90625 0.74609375 +vt 0.90625 0.72265625 +vt 0.859375 0.72265625 +vt 0.9609375 0.74609375 +vt 0.96875 0.74609375 +vt 0.96875 0.72265625 +vt 0.9609375 0.72265625 +vt 0.9140625 0.74609375 +vt 0.9609375 0.74609375 +vt 0.9609375 0.72265625 +vt 0.9140625 0.72265625 +vt 0.9140625 0.74609375 +vt 0.90625 0.74609375 +vt 0.90625 0.79296875 +vt 0.9140625 0.79296875 +vt 0.921875 0.79296875 +vt 0.9140625 0.79296875 +vt 0.9140625 0.74609375 +vt 0.921875 0.74609375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 156/460/115 159/459/115 157/458/115 154/457/115 +f 155/464/116 156/463/116 154/462/116 153/461/116 +f 160/468/117 155/467/117 153/466/117 158/465/117 +f 159/472/118 160/471/118 158/470/118 157/469/118 +f 158/476/119 153/475/119 154/474/119 157/473/119 +f 159/480/120 156/479/120 155/478/120 160/477/120 +o body +v 0.0625 1.625 3.125 +v 0.0625 1.625 2.375 +v 0.0625 1.25 3.125 +v 0.0625 1.25 2.375 +v -0.0625 1.625 2.375 +v -0.0625 1.625 3.125 +v -0.0625 1.25 2.375 +v -0.0625 1.25 3.125 +vt 0.90625 0.74609375 +vt 0.9140625 0.74609375 +vt 0.9140625 0.72265625 +vt 0.90625 0.72265625 +vt 0.859375 0.74609375 +vt 0.90625 0.74609375 +vt 0.90625 0.72265625 +vt 0.859375 0.72265625 +vt 0.9609375 0.74609375 +vt 0.96875 0.74609375 +vt 0.96875 0.72265625 +vt 0.9609375 0.72265625 +vt 0.9140625 0.74609375 +vt 0.9609375 0.74609375 +vt 0.9609375 0.72265625 +vt 0.9140625 0.72265625 +vt 0.9140625 0.74609375 +vt 0.90625 0.74609375 +vt 0.90625 0.79296875 +vt 0.9140625 0.79296875 +vt 0.921875 0.79296875 +vt 0.9140625 0.79296875 +vt 0.9140625 0.74609375 +vt 0.921875 0.74609375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 164/484/121 167/483/121 165/482/121 162/481/121 +f 163/488/122 164/487/122 162/486/122 161/485/122 +f 168/492/123 163/491/123 161/490/123 166/489/123 +f 167/496/124 168/495/124 166/494/124 165/493/124 +f 166/500/125 161/499/125 162/498/125 165/497/125 +f 167/504/126 164/503/126 163/502/126 168/501/126 +o wing +v 4.0582975240428985 2.024698766671211 0.9789705600873082 +v 4.143802559874316 2.039775611474734 0.48656668358120414 +v 4.1451216128763635 1.5322948901651068 0.9789705600873082 +v 4.230626648707781 1.5473717349686296 0.48656668358120414 +v 0.7493404734989761 1.4412403606548134 -0.12120193825305198 +v 0.6638354376675588 1.4261635158512906 0.37120193825305203 +v 0.8361645623324412 0.9488364841487094 -0.12120193825305198 +v 0.7506595265010241 0.9337596393451866 0.37120193825305203 +vt 0.46875 0.625 +vt 0.6875 0.625 +vt 0.6875 0.59375 +vt 0.46875 0.59375 +vt 0.4375 0.625 +vt 0.46875 0.625 +vt 0.46875 0.59375 +vt 0.4375 0.59375 +vt 0.71875 0.625 +vt 0.9375 0.625 +vt 0.9375 0.59375 +vt 0.71875 0.59375 +vt 0.6875 0.625 +vt 0.71875 0.625 +vt 0.71875 0.59375 +vt 0.6875 0.59375 +vt 0.6875 0.625 +vt 0.46875 0.625 +vt 0.46875 0.65625 +vt 0.6875 0.65625 +vt 0.90625 0.65625 +vt 0.6875 0.65625 +vt 0.6875 0.625 +vt 0.90625 0.625 +vn 0.17101007166283433 0.030153689607045803 -0.984807753012208 +vn 0.9698463103929543 0.17101007166283436 0.17364817766693036 +vn -0.17101007166283433 -0.030153689607045803 0.984807753012208 +vn -0.9698463103929543 -0.17101007166283436 -0.17364817766693036 +vn -0.17364817766693033 0.984807753012208 0 +vn 0.17364817766693033 -0.984807753012208 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 172/508/127 175/507/127 173/506/127 170/505/127 +f 171/512/128 172/511/128 170/510/128 169/509/128 +f 176/516/129 171/515/129 169/514/129 174/513/129 +f 175/520/130 176/519/130 174/518/130 173/517/130 +f 174/524/131 169/523/131 170/522/131 173/521/131 +f 175/528/132 172/527/132 171/526/132 176/525/132 +o wing +v 3.5249413191357313 1.677431666078797 4.303420761460185 +v 4.123690332545229 1.7830072718154657 0.8553626162261914 +v 3.525158379357814 1.6762006563875311 4.303420761460185 +v 4.123907392767313 1.7817762621242004 0.8553626162261914 +v 0.7280159382818976 1.184258258405967 0.24737693416985151 +v 0.12926692487239855 1.0786826526692979 3.695435079403845 +v 0.728232998503981 1.1830272487147016 0.24737693416985151 +v 0.12948398509448222 1.0774516429780323 3.695435079403845 +vt 0 0.4375 +vt 0.21875 0.4375 +vt 0.21875 0.4375 +vt 0 0.4375 +vt -0.21875 0.4375 +vt 0 0.4375 +vt 0 0.4375 +vt -0.21875 0.4375 +vt 0.4375 0.4375 +vt 0.65625 0.4375 +vt 0.65625 0.4375 +vt 0.4375 0.4375 +vt 0.21875 0.4375 +vt 0.4375 0.4375 +vt 0.4375 0.4375 +vt 0.21875 0.4375 +vt 0.21875 0.4375 +vt 0 0.4375 +vt 0 0.65625 +vt 0.21875 0.65625 +vt 0.4375 0.65625 +vt 0.21875 0.65625 +vt 0.21875 0.4375 +vt 0.4375 0.4375 +vn 0.17101007166283433 0.030153689607045803 -0.984807753012208 +vn 0.9698463103929543 0.17101007166283436 0.17364817766693036 +vn -0.17101007166283433 -0.030153689607045803 0.984807753012208 +vn -0.9698463103929543 -0.17101007166283436 -0.17364817766693036 +vn -0.17364817766693033 0.984807753012208 0 +vn 0.17364817766693033 -0.984807753012208 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 180/532/133 183/531/133 181/530/133 178/529/133 +f 179/536/134 180/535/134 178/534/134 177/533/134 +f 184/540/135 179/539/135 177/538/135 182/537/135 +f 183/544/136 184/543/136 182/542/136 181/541/136 +f 182/548/137 177/547/137 178/546/137 181/545/137 +f 183/552/138 180/551/138 179/550/138 184/549/138 +o wingtip +v 7.541772295535269 1.2888090706299558 1.4344091768703897 +v 7.584524813450978 1.2963474930317171 1.1882072386173377 +v 7.499639529805786 1.0428327037253111 1.4195613832169185 +v 7.542392047721496 1.0503711261270725 1.1733594449638665 +v 4.186904728197936 1.912792645473123 0.6170915495344658 +v 4.144152210282227 1.9052542230713616 0.8632934877875178 +v 4.144771962468453 1.6668162785684784 0.6022437558809948 +v 4.102019444552744 1.659277856166717 0.8484456941340466 +vt 0.453125 0.453125 +vt 0.671875 0.453125 +vt 0.671875 0.4375 +vt 0.453125 0.4375 +vt 0.4375 0.453125 +vt 0.453125 0.453125 +vt 0.453125 0.4375 +vt 0.4375 0.4375 +vt 0.6875 0.453125 +vt 0.90625 0.453125 +vt 0.90625 0.4375 +vt 0.6875 0.4375 +vt 0.671875 0.453125 +vt 0.6875 0.453125 +vt 0.6875 0.4375 +vt 0.671875 0.4375 +vt 0.671875 0.453125 +vt 0.453125 0.453125 +vt 0.453125 0.46875 +vt 0.671875 0.46875 +vt 0.890625 0.46875 +vt 0.671875 0.46875 +vt 0.671875 0.453125 +vt 0.890625 0.453125 +vn 0.17101007166283436 0.0301536896070458 -0.9848077530122081 +vn 0.9707485957865836 -0.1761271864118303 0.16317591116653485 +vn -0.17101007166283436 -0.0301536896070458 0.9848077530122081 +vn -0.9707485957865836 0.1761271864118303 -0.16317591116653485 +vn 0.16853106291793427 0.9839054676185789 0.059391174613884684 +vn -0.16853106291793427 -0.9839054676185789 -0.059391174613884684 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 188/556/139 191/555/139 189/554/139 186/553/139 +f 187/560/140 188/559/140 186/558/140 185/557/140 +f 192/564/141 187/563/141 185/562/141 190/561/141 +f 191/568/142 192/567/142 190/566/142 189/565/142 +f 190/572/143 185/571/143 186/570/143 189/569/143 +f 191/576/144 188/575/144 187/574/144 192/573/144 +o wingtip +v 6.922775830342509 1.060768988922723 4.874567024860628 +v 7.521524843752008 1.1663445946593922 1.4265088796266343 +v 6.922565166513862 1.0595391070881996 4.874492785892361 +v 7.521314179923362 1.165114712824869 1.426434640658367 +v 4.122691322754232 1.7830099060838132 0.855189220654804 +v 3.523942309344733 1.677434300347144 4.303247365888798 +v 4.122480658925585 1.7817800242492896 0.8551149816865367 +v 3.5237316455160856 1.6762044185126204 4.30317312692053 +vt 0 0.21875 +vt 0.21875 0.21875 +vt 0.21875 0.21875 +vt 0 0.21875 +vt -0.21875 0.21875 +vt 0 0.21875 +vt 0 0.21875 +vt -0.21875 0.21875 +vt 0.4375 0.21875 +vt 0.65625 0.21875 +vt 0.65625 0.21875 +vt 0.4375 0.21875 +vt 0.21875 0.21875 +vt 0.4375 0.21875 +vt 0.4375 0.21875 +vt 0.21875 0.21875 +vt 0.21875 0.21875 +vt 0 0.21875 +vt 0 0.4375 +vt 0.21875 0.4375 +vt 0.4375 0.4375 +vt 0.21875 0.4375 +vt 0.21875 0.21875 +vt 0.4375 0.21875 +vn 0.17101007166283436 0.0301536896070458 -0.9848077530122081 +vn 0.9707485957865836 -0.1761271864118303 0.16317591116653485 +vn -0.17101007166283436 -0.0301536896070458 0.9848077530122081 +vn -0.9707485957865836 0.1761271864118303 -0.16317591116653485 +vn 0.16853106291793427 0.9839054676185789 0.059391174613884684 +vn -0.16853106291793427 -0.9839054676185789 -0.059391174613884684 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 196/580/145 199/579/145 197/578/145 194/577/145 +f 195/584/146 196/583/146 194/582/146 193/581/146 +f 200/588/147 195/587/147 193/586/147 198/585/147 +f 199/592/148 200/591/148 198/590/148 197/589/148 +f 198/596/149 193/595/149 194/594/149 197/593/149 +f 199/600/150 196/599/150 195/598/150 200/597/150 +o wing1 +v -0.6638354376675588 1.4261635158512906 0.37120193825305203 +v -0.749340473498976 1.4412403606548134 -0.12120193825305198 +v -0.7506595265010241 0.9337596393451866 0.37120193825305203 +v -0.8361645623324412 0.9488364841487094 -0.12120193825305198 +v -4.143802559874316 2.039775611474734 0.48656668358120414 +v -4.0582975240428985 2.024698766671211 0.9789705600873082 +v -4.230626648707781 1.5473717349686296 0.48656668358120414 +v -4.1451216128763635 1.5322948901651068 0.9789705600873082 +vt 0.6875 0.625 +vt 0.46875 0.625 +vt 0.46875 0.59375 +vt 0.6875 0.59375 +vt 0.71875 0.625 +vt 0.6875 0.625 +vt 0.6875 0.59375 +vt 0.71875 0.59375 +vt 0.9375 0.625 +vt 0.71875 0.625 +vt 0.71875 0.59375 +vt 0.9375 0.59375 +vt 0.46875 0.625 +vt 0.4375 0.625 +vt 0.4375 0.59375 +vt 0.46875 0.59375 +vt 0.46875 0.625 +vt 0.6875 0.625 +vt 0.6875 0.65625 +vt 0.46875 0.65625 +vt 0.6875 0.65625 +vt 0.90625 0.65625 +vt 0.90625 0.625 +vt 0.6875 0.625 +vn -0.17101007166283433 0.030153689607045803 -0.984807753012208 +vn 0.9698463103929543 -0.17101007166283436 -0.17364817766693036 +vn 0.17101007166283433 -0.030153689607045803 0.984807753012208 +vn -0.9698463103929543 0.17101007166283436 0.17364817766693036 +vn 0.17364817766693033 0.984807753012208 0 +vn -0.17364817766693033 -0.984807753012208 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 204/604/151 207/603/151 205/602/151 202/601/151 +f 203/608/152 204/607/152 202/606/152 201/605/152 +f 208/612/153 203/611/153 201/610/153 206/609/153 +f 207/616/154 208/615/154 206/614/154 205/613/154 +f 206/620/155 201/619/155 202/618/155 205/617/155 +f 207/624/156 204/623/156 203/622/156 208/621/156 +o wing1 +v -0.1292669248723986 1.0786826526692979 3.695435079403845 +v -0.7280159382818975 1.184258258405967 0.24737693416985151 +v -0.12948398509448228 1.0774516429780323 3.695435079403845 +v -0.7282329985039812 1.1830272487147016 0.24737693416985151 +v -4.123690332545229 1.7830072718154657 0.8553626162261914 +v -3.524941319135731 1.677431666078797 4.303420761460185 +v -4.123907392767313 1.7817762621242004 0.8553626162261914 +v -3.5251583793578143 1.6762006563875311 4.303420761460185 +vt 0.21875 0.4375 +vt 0 0.4375 +vt 0 0.4375 +vt 0.21875 0.4375 +vt 0.4375 0.4375 +vt 0.21875 0.4375 +vt 0.21875 0.4375 +vt 0.4375 0.4375 +vt 0.65625 0.4375 +vt 0.4375 0.4375 +vt 0.4375 0.4375 +vt 0.65625 0.4375 +vt 0 0.4375 +vt -0.21875 0.4375 +vt -0.21875 0.4375 +vt 0 0.4375 +vt 0 0.4375 +vt 0.21875 0.4375 +vt 0.21875 0.65625 +vt 0 0.65625 +vt 0.21875 0.65625 +vt 0.4375 0.65625 +vt 0.4375 0.4375 +vt 0.21875 0.4375 +vn -0.17101007166283433 0.030153689607045803 -0.984807753012208 +vn 0.9698463103929543 -0.17101007166283436 -0.17364817766693036 +vn 0.17101007166283433 -0.030153689607045803 0.984807753012208 +vn -0.9698463103929543 0.17101007166283436 0.17364817766693036 +vn 0.17364817766693033 0.984807753012208 0 +vn -0.17364817766693033 -0.984807753012208 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 212/628/157 215/627/157 213/626/157 210/625/157 +f 211/632/158 212/631/158 210/630/158 209/629/158 +f 216/636/159 211/635/159 209/634/159 214/633/159 +f 215/640/160 216/639/160 214/638/160 213/637/160 +f 214/644/161 209/643/161 210/642/161 213/641/161 +f 215/648/162 212/647/162 211/646/162 216/645/162 +o wingtip1 +v -4.144152210282227 1.9052542230713616 0.8632934877875178 +v -4.186904728197936 1.912792645473123 0.6170915495344658 +v -4.102019444552744 1.659277856166717 0.8484456941340466 +v -4.144771962468453 1.6668162785684784 0.6022437558809948 +v -7.584524813450978 1.2963474930317171 1.1882072386173377 +v -7.541772295535269 1.2888090706299558 1.4344091768703897 +v -7.542392047721495 1.0503711261270725 1.1733594449638665 +v -7.499639529805786 1.0428327037253111 1.4195613832169185 +vt 0.671875 0.453125 +vt 0.453125 0.453125 +vt 0.453125 0.4375 +vt 0.671875 0.4375 +vt 0.6875 0.453125 +vt 0.671875 0.453125 +vt 0.671875 0.4375 +vt 0.6875 0.4375 +vt 0.90625 0.453125 +vt 0.6875 0.453125 +vt 0.6875 0.4375 +vt 0.90625 0.4375 +vt 0.453125 0.453125 +vt 0.4375 0.453125 +vt 0.4375 0.4375 +vt 0.453125 0.4375 +vt 0.453125 0.453125 +vt 0.671875 0.453125 +vt 0.671875 0.46875 +vt 0.453125 0.46875 +vt 0.671875 0.46875 +vt 0.890625 0.46875 +vt 0.890625 0.453125 +vt 0.671875 0.453125 +vn -0.17101007166283436 0.0301536896070458 -0.9848077530122081 +vn 0.9707485957865836 0.1761271864118303 -0.16317591116653485 +vn 0.17101007166283436 -0.0301536896070458 0.9848077530122081 +vn -0.9707485957865836 -0.1761271864118303 0.16317591116653485 +vn -0.16853106291793427 0.9839054676185789 0.059391174613884684 +vn 0.16853106291793427 -0.9839054676185789 -0.059391174613884684 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 220/652/163 223/651/163 221/650/163 218/649/163 +f 219/656/164 220/655/164 218/654/164 217/653/164 +f 224/660/165 219/659/165 217/658/165 222/657/165 +f 223/664/166 224/663/166 222/662/166 221/661/166 +f 222/668/167 217/667/167 218/666/167 221/665/167 +f 223/672/168 220/671/168 219/670/168 224/669/168 +o wingtip1 +v -3.523942309344733 1.677434300347144 4.303247365888798 +v -4.122691322754232 1.7830099060838132 0.855189220654804 +v -3.5237316455160856 1.6762044185126204 4.30317312692053 +v -4.122480658925585 1.7817800242492896 0.8551149816865367 +v -7.521524843752008 1.1663445946593922 1.4265088796266343 +v -6.922775830342509 1.060768988922723 4.874567024860628 +v -7.521314179923361 1.165114712824869 1.426434640658367 +v -6.922565166513862 1.0595391070881996 4.874492785892361 +vt 0.21875 0.21875 +vt 0 0.21875 +vt 0 0.21875 +vt 0.21875 0.21875 +vt 0.4375 0.21875 +vt 0.21875 0.21875 +vt 0.21875 0.21875 +vt 0.4375 0.21875 +vt 0.65625 0.21875 +vt 0.4375 0.21875 +vt 0.4375 0.21875 +vt 0.65625 0.21875 +vt 0 0.21875 +vt -0.21875 0.21875 +vt -0.21875 0.21875 +vt 0 0.21875 +vt 0 0.21875 +vt 0.21875 0.21875 +vt 0.21875 0.4375 +vt 0 0.4375 +vt 0.21875 0.4375 +vt 0.4375 0.4375 +vt 0.4375 0.21875 +vt 0.21875 0.21875 +vn -0.17101007166283436 0.0301536896070458 -0.9848077530122081 +vn 0.9707485957865836 0.1761271864118303 -0.16317591116653485 +vn 0.17101007166283436 -0.0301536896070458 0.9848077530122081 +vn -0.9707485957865836 -0.1761271864118303 0.16317591116653485 +vn -0.16853106291793427 0.9839054676185789 0.059391174613884684 +vn 0.16853106291793427 -0.9839054676185789 -0.059391174613884684 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 228/676/169 231/675/169 229/674/169 226/673/169 +f 227/680/170 228/679/170 226/678/170 225/677/170 +f 232/684/171 227/683/171 225/682/171 230/681/171 +f 231/688/172 232/687/172 230/686/172 229/685/172 +f 230/692/173 225/691/173 226/690/173 229/689/173 +f 231/696/174 228/695/174 227/694/174 232/693/174 +o rearleg +v 1.5 1.0580127018922192 2.6584936490538906 +v 1.5 0.1919872981077808 2.1584936490538906 +v 1.5 0.05801270189221919 4.390544456622768 +v 1.5 -0.8080127018922196 3.8905444566227683 +v 0.5 0.1919872981077808 2.1584936490538906 +v 0.5 1.0580127018922192 2.6584936490538906 +v 0.5 -0.8080127018922196 3.8905444566227683 +v 0.5 0.05801270189221919 4.390544456622768 +vt 0.0625 0.9375 +vt 0.125 0.9375 +vt 0.125 0.8125 +vt 0.0625 0.8125 +vt 0 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.8125 +vt 0 0.8125 +vt 0.1875 0.9375 +vt 0.25 0.9375 +vt 0.25 0.8125 +vt 0.1875 0.8125 +vt 0.125 0.9375 +vt 0.1875 0.9375 +vt 0.1875 0.8125 +vt 0.125 0.8125 +vt 0.125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 1 +vt 0.125 1 +vt 0.1875 1 +vt 0.125 1 +vt 0.125 0.9375 +vt 0.1875 0.9375 +vn 0 -0.8660254037844386 -0.5000000000000001 +vn 1 0 0 +vn 0 0.8660254037844386 0.5000000000000001 +vn -1 0 0 +vn 0 0.5000000000000001 -0.8660254037844386 +vn 0 -0.5000000000000001 0.8660254037844386 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 236/700/175 239/699/175 237/698/175 234/697/175 +f 235/704/176 236/703/176 234/702/176 233/701/176 +f 240/708/177 235/707/177 233/706/177 238/705/177 +f 239/712/178 240/711/178 238/710/178 237/709/178 +f 238/716/179 233/715/179 234/714/179 237/713/179 +f 239/720/180 236/719/180 235/718/180 240/717/180 +o rearlegtip +v 1.375 -0.009562569109802244 4.19903062623141 +v 1.375 -0.7567085926786117 4.133663819170667 +v 1.375 -0.18387405460511896 6.191420022414902 +v 1.375 -0.9310200781739284 6.126053215354158 +v 0.625 -0.7567085926786117 4.133663819170667 +v 0.625 -0.009562569109802244 4.19903062623141 +v 0.625 -0.9310200781739284 6.126053215354158 +v 0.625 -0.18387405460511896 6.191420022414902 +vt 0.8125 0.953125 +vt 0.859375 0.953125 +vt 0.859375 0.828125 +vt 0.8125 0.828125 +vt 0.765625 0.953125 +vt 0.8125 0.953125 +vt 0.8125 0.828125 +vt 0.765625 0.828125 +vt 0.90625 0.953125 +vt 0.953125 0.953125 +vt 0.953125 0.828125 +vt 0.90625 0.828125 +vt 0.859375 0.953125 +vt 0.90625 0.953125 +vt 0.90625 0.828125 +vt 0.859375 0.828125 +vt 0.859375 0.953125 +vt 0.8125 0.953125 +vt 0.8125 1 +vt 0.859375 1 +vt 0.90625 1 +vt 0.859375 1 +vt 0.859375 0.953125 +vt 0.90625 0.953125 +vn 0 -0.9961946980917455 -0.0871557427476583 +vn 1 0 0 +vn 0 0.9961946980917455 0.0871557427476583 +vn -1 0 0 +vn 0 0.0871557427476583 -0.9961946980917455 +vn 0 -0.0871557427476583 0.9961946980917455 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 244/724/181 247/723/181 245/722/181 242/721/181 +f 243/728/182 244/727/182 242/726/182 241/725/182 +f 248/732/183 243/731/183 241/730/183 246/729/183 +f 247/736/184 248/735/184 246/734/184 245/733/184 +f 246/740/185 241/739/185 242/738/185 245/737/185 +f 247/744/186 244/743/186 243/742/186 248/741/186 +o rearfoot +v 1.5625 -0.42819812424051307 5.992592482541166 +v 1.5625 -1.5772647889189804 6.956773897070976 +v 1.5625 -0.187152770608062 6.279859148710783 +v 1.5625 -1.3362194352865284 7.244040563240592 +v 0.4375 -1.5772647889189804 6.956773897070976 +v 0.4375 -0.42819812424051307 5.992592482541166 +v 0.4375 -1.3362194352865284 7.244040563240592 +v 0.4375 -0.187152770608062 6.279859148710783 +vt 0.53125 0.90625 +vt 0.6015625 0.90625 +vt 0.6015625 0.8828125 +vt 0.53125 0.8828125 +vt 0.4375 0.90625 +vt 0.53125 0.90625 +vt 0.53125 0.8828125 +vt 0.4375 0.8828125 +vt 0.6953125 0.90625 +vt 0.765625 0.90625 +vt 0.765625 0.8828125 +vt 0.6953125 0.8828125 +vt 0.6015625 0.90625 +vt 0.6953125 0.90625 +vt 0.6953125 0.8828125 +vt 0.6015625 0.8828125 +vt 0.6015625 0.90625 +vt 0.53125 0.90625 +vt 0.53125 1 +vt 0.6015625 1 +vt 0.671875 1 +vt 0.6015625 1 +vt 0.6015625 0.90625 +vt 0.671875 0.90625 +vn 0 -0.766044443118978 0.6427876096865393 +vn 1 0 0 +vn 0 0.766044443118978 -0.6427876096865393 +vn -1 0 0 +vn 0 -0.6427876096865393 -0.766044443118978 +vn 0 0.6427876096865393 0.766044443118978 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 252/748/187 255/747/187 253/746/187 250/745/187 +f 251/752/188 252/751/188 250/750/188 249/749/188 +f 256/756/189 251/755/189 249/754/189 254/753/189 +f 255/760/190 256/759/190 254/758/190 253/757/190 +f 254/764/191 249/763/191 250/762/191 253/761/191 +f 255/768/192 252/767/192 251/766/192 256/765/192 +o rearleg1 +v -0.5 1.0580127018922192 2.6584936490538906 +v -0.5 0.1919872981077808 2.1584936490538906 +v -0.5 0.05801270189221919 4.390544456622768 +v -0.5 -0.8080127018922196 3.8905444566227683 +v -1.5 0.1919872981077808 2.1584936490538906 +v -1.5 1.0580127018922192 2.6584936490538906 +v -1.5 -0.8080127018922196 3.8905444566227683 +v -1.5 0.05801270189221919 4.390544456622768 +vt 0.125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.8125 +vt 0.125 0.8125 +vt 0.1875 0.9375 +vt 0.125 0.9375 +vt 0.125 0.8125 +vt 0.1875 0.8125 +vt 0.25 0.9375 +vt 0.1875 0.9375 +vt 0.1875 0.8125 +vt 0.25 0.8125 +vt 0.0625 0.9375 +vt 0 0.9375 +vt 0 0.8125 +vt 0.0625 0.8125 +vt 0.0625 0.9375 +vt 0.125 0.9375 +vt 0.125 1 +vt 0.0625 1 +vt 0.125 1 +vt 0.1875 1 +vt 0.1875 0.9375 +vt 0.125 0.9375 +vn 0 -0.8660254037844386 -0.5000000000000001 +vn 1 0 0 +vn 0 0.8660254037844386 0.5000000000000001 +vn -1 0 0 +vn 0 0.5000000000000001 -0.8660254037844386 +vn 0 -0.5000000000000001 0.8660254037844386 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 260/772/193 263/771/193 261/770/193 258/769/193 +f 259/776/194 260/775/194 258/774/194 257/773/194 +f 264/780/195 259/779/195 257/778/195 262/777/195 +f 263/784/196 264/783/196 262/782/196 261/781/196 +f 262/788/197 257/787/197 258/786/197 261/785/197 +f 263/792/198 260/791/198 259/790/198 264/789/198 +o rearlegtip +v -0.625 -0.009562569109802244 4.19903062623141 +v -0.625 -0.7567085926786117 4.133663819170667 +v -0.625 -0.18387405460511896 6.191420022414902 +v -0.625 -0.9310200781739284 6.126053215354158 +v -1.375 -0.7567085926786117 4.133663819170667 +v -1.375 -0.009562569109802244 4.19903062623141 +v -1.375 -0.9310200781739284 6.126053215354158 +v -1.375 -0.18387405460511896 6.191420022414902 +vt 0.859375 0.953125 +vt 0.8125 0.953125 +vt 0.8125 0.828125 +vt 0.859375 0.828125 +vt 0.90625 0.953125 +vt 0.859375 0.953125 +vt 0.859375 0.828125 +vt 0.90625 0.828125 +vt 0.953125 0.953125 +vt 0.90625 0.953125 +vt 0.90625 0.828125 +vt 0.953125 0.828125 +vt 0.8125 0.953125 +vt 0.765625 0.953125 +vt 0.765625 0.828125 +vt 0.8125 0.828125 +vt 0.8125 0.953125 +vt 0.859375 0.953125 +vt 0.859375 1 +vt 0.8125 1 +vt 0.859375 1 +vt 0.90625 1 +vt 0.90625 0.953125 +vt 0.859375 0.953125 +vn 0 -0.9961946980917455 -0.0871557427476583 +vn 1 0 0 +vn 0 0.9961946980917455 0.0871557427476583 +vn -1 0 0 +vn 0 0.0871557427476583 -0.9961946980917455 +vn 0 -0.0871557427476583 0.9961946980917455 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 268/796/199 271/795/199 269/794/199 266/793/199 +f 267/800/200 268/799/200 266/798/200 265/797/200 +f 272/804/201 267/803/201 265/802/201 270/801/201 +f 271/808/202 272/807/202 270/806/202 269/805/202 +f 270/812/203 265/811/203 266/810/203 269/809/203 +f 271/816/204 268/815/204 267/814/204 272/813/204 +o rearfoot +v -0.4375 -0.42819812424051307 5.992592482541166 +v -0.4375 -1.5772647889189804 6.956773897070976 +v -0.4375 -0.187152770608062 6.279859148710783 +v -0.4375 -1.3362194352865284 7.244040563240592 +v -1.5625 -1.5772647889189804 6.956773897070976 +v -1.5625 -0.42819812424051307 5.992592482541166 +v -1.5625 -1.3362194352865284 7.244040563240592 +v -1.5625 -0.187152770608062 6.279859148710783 +vt 0.6015625 0.90625 +vt 0.53125 0.90625 +vt 0.53125 0.8828125 +vt 0.6015625 0.8828125 +vt 0.6953125 0.90625 +vt 0.6015625 0.90625 +vt 0.6015625 0.8828125 +vt 0.6953125 0.8828125 +vt 0.765625 0.90625 +vt 0.6953125 0.90625 +vt 0.6953125 0.8828125 +vt 0.765625 0.8828125 +vt 0.53125 0.90625 +vt 0.4375 0.90625 +vt 0.4375 0.8828125 +vt 0.53125 0.8828125 +vt 0.53125 0.90625 +vt 0.6015625 0.90625 +vt 0.6015625 1 +vt 0.53125 1 +vt 0.6015625 1 +vt 0.671875 1 +vt 0.671875 0.90625 +vt 0.6015625 0.90625 +vn 0 -0.766044443118978 0.6427876096865393 +vn 1 0 0 +vn 0 0.766044443118978 -0.6427876096865393 +vn -1 0 0 +vn 0 -0.6427876096865393 -0.766044443118978 +vn 0 0.6427876096865393 0.766044443118978 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 276/820/205 279/819/205 277/818/205 274/817/205 +f 275/824/206 276/823/206 274/822/206 273/821/206 +f 280/828/207 275/827/207 273/826/207 278/825/207 +f 279/832/208 280/831/208 278/830/208 277/829/208 +f 278/836/209 273/835/209 274/834/209 277/833/209 +f 279/840/210 276/839/210 275/838/210 280/837/210 +o frontleg +v 1 0.5822315121943373 0.004077618676012307 +v 1 0.1290776186760123 -0.20723151219433733 +v 1 -0.05169588041671158 1.3635392992309874 +v 1 -0.5048497739350366 1.1522301683606377 +v 0.5 0.1290776186760123 -0.20723151219433733 +v 0.5 0.5822315121943373 0.004077618676012307 +v 0.5 -0.5048497739350366 1.1522301683606377 +v 0.5 -0.05169588041671158 1.3635392992309874 +vt 0.46875 0.5625 +vt 0.5 0.5625 +vt 0.5 0.46875 +vt 0.46875 0.46875 +vt 0.4375 0.5625 +vt 0.46875 0.5625 +vt 0.46875 0.46875 +vt 0.4375 0.46875 +vt 0.53125 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.46875 +vt 0.53125 0.46875 +vt 0.5 0.5625 +vt 0.53125 0.5625 +vt 0.53125 0.46875 +vt 0.5 0.46875 +vt 0.5 0.5625 +vt 0.46875 0.5625 +vt 0.46875 0.59375 +vt 0.5 0.59375 +vt 0.53125 0.59375 +vt 0.5 0.59375 +vt 0.5 0.5625 +vt 0.53125 0.5625 +vn 0 -0.90630778703665 -0.4226182617406993 +vn 1 0 0 +vn 0 0.90630778703665 0.4226182617406993 +vn -1 0 0 +vn 0 0.4226182617406993 -0.90630778703665 +vn 0 -0.4226182617406993 0.90630778703665 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 284/844/211 287/843/211 285/842/211 282/841/211 +f 283/848/212 284/847/212 282/846/212 281/845/212 +f 288/852/213 283/851/213 281/850/213 286/849/213 +f 287/856/214 288/855/214 286/854/214 285/853/214 +f 286/860/215 281/859/215 282/858/215 285/857/215 +f 287/864/216 284/863/216 283/862/216 288/861/216 +o frontlegtip +v 0.9375 -0.10149613187923717 1.346273081444131 +v 0.9375 -0.3666611748241926 1.0811080384991758 +v 0.9375 -1.1621563036590583 2.4069332532239525 +v 0.9375 -1.4273213466040136 2.141768210278997 +v 0.5625 -0.3666611748241926 1.0811080384991758 +v 0.5625 -0.10149613187923717 1.346273081444131 +v 0.5625 -1.4273213466040136 2.141768210278997 +v 0.5625 -1.1621563036590583 2.4069332532239525 +vt 0.90625 0.4375 +vt 0.9296875 0.4375 +vt 0.9296875 0.34375 +vt 0.90625 0.34375 +vt 0.8828125 0.4375 +vt 0.90625 0.4375 +vt 0.90625 0.34375 +vt 0.8828125 0.34375 +vt 0.953125 0.4375 +vt 0.9765625 0.4375 +vt 0.9765625 0.34375 +vt 0.953125 0.34375 +vt 0.9296875 0.4375 +vt 0.953125 0.4375 +vt 0.953125 0.34375 +vt 0.9296875 0.34375 +vt 0.9296875 0.4375 +vt 0.90625 0.4375 +vt 0.90625 0.4609375 +vt 0.9296875 0.4609375 +vt 0.953125 0.4609375 +vt 0.9296875 0.4609375 +vt 0.9296875 0.4375 +vt 0.953125 0.4375 +vn 0 -0.7071067811865477 -0.7071067811865474 +vn 1 0 0 +vn 0 0.7071067811865477 0.7071067811865474 +vn -1 0 0 +vn 0 0.7071067811865474 -0.7071067811865477 +vn 0 -0.7071067811865474 0.7071067811865477 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 292/868/217 295/867/217 293/866/217 290/865/217 +f 291/872/218 292/871/218 290/870/218 289/869/218 +f 296/876/219 291/875/219 289/874/219 294/873/219 +f 295/880/220 296/879/220 294/878/220 293/877/220 +f 294/884/221 289/883/221 290/882/221 293/881/221 +f 295/888/222 292/887/222 291/886/222 296/885/222 +o frontfoot +v 1 -1.0005446513073766 2.2301565579273155 +v 1 -2.0005446513073766 2.2301565579273155 +v 1 -1.0005446513073766 2.4801565579273155 +v 1 -2.0005446513073766 2.4801565579273155 +v 0.5 -2.0005446513073766 2.2301565579273155 +v 0.5 -1.0005446513073766 2.2301565579273155 +v 0.5 -2.0005446513073766 2.4801565579273155 +v 0.5 -1.0005446513073766 2.4801565579273155 +vt 0.625 0.53125 +vt 0.65625 0.53125 +vt 0.65625 0.515625 +vt 0.625 0.515625 +vt 0.5625 0.53125 +vt 0.625 0.53125 +vt 0.625 0.515625 +vt 0.5625 0.515625 +vt 0.71875 0.53125 +vt 0.75 0.53125 +vt 0.75 0.515625 +vt 0.71875 0.515625 +vt 0.65625 0.53125 +vt 0.71875 0.53125 +vt 0.71875 0.515625 +vt 0.65625 0.515625 +vt 0.65625 0.53125 +vt 0.625 0.53125 +vt 0.625 0.59375 +vt 0.65625 0.59375 +vt 0.6875 0.59375 +vt 0.65625 0.59375 +vt 0.65625 0.53125 +vt 0.6875 0.53125 +vn 0 -1 2.7755575615628914e-16 +vn 1 0 0 +vn 0 1 -2.7755575615628914e-16 +vn -1 0 0 +vn 0 -2.7755575615628914e-16 -1 +vn 0 2.7755575615628914e-16 1 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 300/892/223 303/891/223 301/890/223 298/889/223 +f 299/896/224 300/895/224 298/894/224 297/893/224 +f 304/900/225 299/899/225 297/898/225 302/897/225 +f 303/904/226 304/903/226 302/902/226 301/901/226 +f 302/908/227 297/907/227 298/906/227 301/905/227 +f 303/912/228 300/911/228 299/910/228 304/909/228 +o frontleg1 +v -0.5 0.5822315121943373 0.004077618676012307 +v -0.5 0.1290776186760123 -0.20723151219433733 +v -0.5 -0.05169588041671158 1.3635392992309874 +v -0.5 -0.5048497739350366 1.1522301683606377 +v -1 0.1290776186760123 -0.20723151219433733 +v -1 0.5822315121943373 0.004077618676012307 +v -1 -0.5048497739350366 1.1522301683606377 +v -1 -0.05169588041671158 1.3635392992309874 +vt 0.5 0.5625 +vt 0.46875 0.5625 +vt 0.46875 0.46875 +vt 0.5 0.46875 +vt 0.53125 0.5625 +vt 0.5 0.5625 +vt 0.5 0.46875 +vt 0.53125 0.46875 +vt 0.5625 0.5625 +vt 0.53125 0.5625 +vt 0.53125 0.46875 +vt 0.5625 0.46875 +vt 0.46875 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.46875 +vt 0.46875 0.46875 +vt 0.46875 0.5625 +vt 0.5 0.5625 +vt 0.5 0.59375 +vt 0.46875 0.59375 +vt 0.5 0.59375 +vt 0.53125 0.59375 +vt 0.53125 0.5625 +vt 0.5 0.5625 +vn 0 -0.90630778703665 -0.4226182617406993 +vn 1 0 0 +vn 0 0.90630778703665 0.4226182617406993 +vn -1 0 0 +vn 0 0.4226182617406993 -0.90630778703665 +vn 0 -0.4226182617406993 0.90630778703665 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 308/916/229 311/915/229 309/914/229 306/913/229 +f 307/920/230 308/919/230 306/918/230 305/917/230 +f 312/924/231 307/923/231 305/922/231 310/921/231 +f 311/928/232 312/927/232 310/926/232 309/925/232 +f 310/932/233 305/931/233 306/930/233 309/929/233 +f 311/936/234 308/935/234 307/934/234 312/933/234 +o frontlegtip +v -0.5625 -0.10149613187923717 1.346273081444131 +v -0.5625 -0.3666611748241926 1.0811080384991758 +v -0.5625 -1.1621563036590583 2.4069332532239525 +v -0.5625 -1.4273213466040136 2.141768210278997 +v -0.9375 -0.3666611748241926 1.0811080384991758 +v -0.9375 -0.10149613187923717 1.346273081444131 +v -0.9375 -1.4273213466040136 2.141768210278997 +v -0.9375 -1.1621563036590583 2.4069332532239525 +vt 0.9296875 0.4375 +vt 0.90625 0.4375 +vt 0.90625 0.34375 +vt 0.9296875 0.34375 +vt 0.953125 0.4375 +vt 0.9296875 0.4375 +vt 0.9296875 0.34375 +vt 0.953125 0.34375 +vt 0.9765625 0.4375 +vt 0.953125 0.4375 +vt 0.953125 0.34375 +vt 0.9765625 0.34375 +vt 0.90625 0.4375 +vt 0.8828125 0.4375 +vt 0.8828125 0.34375 +vt 0.90625 0.34375 +vt 0.90625 0.4375 +vt 0.9296875 0.4375 +vt 0.9296875 0.4609375 +vt 0.90625 0.4609375 +vt 0.9296875 0.4609375 +vt 0.953125 0.4609375 +vt 0.953125 0.4375 +vt 0.9296875 0.4375 +vn 0 -0.7071067811865477 -0.7071067811865474 +vn 1 0 0 +vn 0 0.7071067811865477 0.7071067811865474 +vn -1 0 0 +vn 0 0.7071067811865474 -0.7071067811865477 +vn 0 -0.7071067811865474 0.7071067811865477 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 316/940/235 319/939/235 317/938/235 314/937/235 +f 315/944/236 316/943/236 314/942/236 313/941/236 +f 320/948/237 315/947/237 313/946/237 318/945/237 +f 319/952/238 320/951/238 318/950/238 317/949/238 +f 318/956/239 313/955/239 314/954/239 317/953/239 +f 319/960/240 316/959/240 315/958/240 320/957/240 +o frontfoot +v -0.5 -1.0005446513073766 2.2301565579273155 +v -0.5 -2.0005446513073766 2.2301565579273155 +v -0.5 -1.0005446513073766 2.4801565579273155 +v -0.5 -2.0005446513073766 2.4801565579273155 +v -1 -2.0005446513073766 2.2301565579273155 +v -1 -1.0005446513073766 2.2301565579273155 +v -1 -2.0005446513073766 2.4801565579273155 +v -1 -1.0005446513073766 2.4801565579273155 +vt 0.65625 0.53125 +vt 0.625 0.53125 +vt 0.625 0.515625 +vt 0.65625 0.515625 +vt 0.71875 0.53125 +vt 0.65625 0.53125 +vt 0.65625 0.515625 +vt 0.71875 0.515625 +vt 0.75 0.53125 +vt 0.71875 0.53125 +vt 0.71875 0.515625 +vt 0.75 0.515625 +vt 0.625 0.53125 +vt 0.5625 0.53125 +vt 0.5625 0.515625 +vt 0.625 0.515625 +vt 0.625 0.53125 +vt 0.65625 0.53125 +vt 0.65625 0.59375 +vt 0.625 0.59375 +vt 0.65625 0.59375 +vt 0.6875 0.59375 +vt 0.6875 0.53125 +vt 0.65625 0.53125 +vn 0 -1 2.7755575615628914e-16 +vn 1 0 0 +vn 0 1 -2.7755575615628914e-16 +vn -1 0 0 +vn 0 -2.7755575615628914e-16 -1 +vn 0 2.7755575615628914e-16 1 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 324/964/241 327/963/241 325/962/241 322/961/241 +f 323/968/242 324/967/242 322/966/242 321/965/242 +f 328/972/243 323/971/243 321/970/243 326/969/243 +f 327/976/244 328/975/244 326/974/244 325/973/244 +f 326/980/245 321/979/245 322/978/245 325/977/245 +f 327/984/246 324/983/246 323/982/246 328/981/246 +o tail +v 0.3125 1.1875 4.125 +v 0.3125 1.1875 3.5 +v 0.3125 0.5625 4.125 +v 0.3125 0.5625 3.5 +v -0.3125 1.1875 3.5 +v -0.3125 1.1875 4.125 +v -0.3125 0.5625 3.5 +v -0.3125 0.5625 4.125 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 332/988/247 335/987/247 333/986/247 330/985/247 +f 331/992/248 332/991/248 330/990/248 329/989/248 +f 336/996/249 331/995/249 329/994/249 334/993/249 +f 335/1000/250 336/999/250 334/998/250 333/997/250 +f 334/1004/251 329/1003/251 330/1002/251 333/1001/251 +f 335/1008/252 332/1007/252 331/1006/252 336/1005/252 +o tail +v 0.0625 1.4375 4 +v 0.0625 1.4375 3.625 +v 0.0625 1.1875 4 +v 0.0625 1.1875 3.625 +v -0.0625 1.4375 3.625 +v -0.0625 1.4375 4 +v -0.0625 1.1875 3.625 +v -0.0625 1.1875 4 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 340/1012/253 343/1011/253 341/1010/253 338/1009/253 +f 339/1016/254 340/1015/254 338/1014/254 337/1013/254 +f 344/1020/255 339/1019/255 337/1018/255 342/1017/255 +f 343/1024/256 344/1023/256 342/1022/256 341/1021/256 +f 342/1028/257 337/1027/257 338/1026/257 341/1025/257 +f 343/1032/258 340/1031/258 339/1030/258 344/1029/258 +o tail +v 0.3125 1.1983601587596744 4.744450932461093 +v 0.3125 1.1874524047363721 4.119546122988348 +v 0.3125 0.5734553492869299 4.755358686484396 +v 0.3125 0.5625475952636276 4.130453877011651 +v -0.3125 1.1874524047363721 4.119546122988348 +v -0.3125 1.1983601587596744 4.744450932461093 +v -0.3125 0.5625475952636276 4.130453877011651 +v -0.3125 0.5734553492869299 4.755358686484396 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.01745240643728351 -0.9998476951563913 +vn 1 0 0 +vn 0 0.01745240643728351 0.9998476951563913 +vn -1 0 0 +vn 0 0.9998476951563913 -0.01745240643728351 +vn 0 -0.9998476951563913 0.01745240643728351 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 348/1036/259 351/1035/259 349/1034/259 346/1033/259 +f 347/1040/260 348/1039/260 346/1038/260 345/1037/260 +f 352/1044/261 347/1043/261 345/1042/261 350/1041/261 +f 351/1048/262 352/1047/262 350/1046/262 349/1045/262 +f 350/1052/263 345/1051/263 346/1050/263 349/1049/263 +f 351/1056/264 348/1055/264 347/1054/264 352/1053/264 +o tail +v 0.0625 1.4461405317441118 4.615106868957223 +v 0.0625 1.4395958793301304 4.240163983273576 +v 0.0625 1.196178607955014 4.619469970566544 +v 0.0625 1.1896339555410327 4.244527084882897 +v -0.0625 1.4395958793301304 4.240163983273576 +v -0.0625 1.4461405317441118 4.615106868957223 +v -0.0625 1.1896339555410327 4.244527084882897 +v -0.0625 1.196178607955014 4.619469970566544 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.01745240643728351 -0.9998476951563913 +vn 1 0 0 +vn 0 0.01745240643728351 0.9998476951563913 +vn -1 0 0 +vn 0 0.9998476951563913 -0.01745240643728351 +vn 0 -0.9998476951563913 0.01745240643728351 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 356/1060/265 359/1059/265 357/1058/265 354/1057/265 +f 355/1064/266 356/1063/266 354/1062/266 353/1061/266 +f 360/1068/267 355/1067/267 353/1066/267 358/1065/267 +f 359/1072/268 360/1071/268 358/1070/268 357/1069/268 +f 358/1076/269 353/1075/269 354/1074/269 357/1073/269 +f 359/1080/270 356/1079/270 355/1078/270 360/1077/270 +o tail +v 0.3125 1.2200295729058328 5.363617983640148 +v 0.3125 1.1982173874667696 4.738998716753213 +v 0.3125 0.595410306018898 5.385430169079211 +v 0.3125 0.5735981205798348 4.760810902192276 +v -0.3125 1.1982173874667696 4.738998716753213 +v -0.3125 1.2200295729058328 5.363617983640148 +v -0.3125 0.5735981205798348 4.760810902192276 +v -0.3125 0.595410306018898 5.385430169079211 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.03489949670250097 -0.9993908270190958 +vn 1 0 0 +vn 0 0.03489949670250097 0.9993908270190958 +vn -1 0 0 +vn 0 0.9993908270190958 -0.03489949670250097 +vn 0 -0.9993908270190958 0.03489949670250097 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 364/1084/271 367/1083/271 365/1082/271 362/1081/271 +f 363/1088/272 364/1087/272 362/1086/272 361/1085/272 +f 368/1092/273 363/1091/273 361/1090/273 366/1089/273 +f 367/1096/274 368/1095/274 366/1094/274 365/1093/274 +f 366/1100/275 361/1099/275 362/1098/275 365/1097/275 +f 367/1104/276 364/1103/276 363/1102/276 368/1101/276 +o tail +v 0.0625 1.465514842572794 5.229969256087136 +v 0.0625 1.4524275313093562 4.855197695954975 +v 0.0625 1.21566713581802 5.238694130262761 +v 0.0625 1.2025798245545822 4.8639225701306 +v -0.0625 1.4524275313093562 4.855197695954975 +v -0.0625 1.465514842572794 5.229969256087136 +v -0.0625 1.2025798245545822 4.8639225701306 +v -0.0625 1.21566713581802 5.238694130262761 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.03489949670250097 -0.9993908270190958 +vn 1 0 0 +vn 0 0.03489949670250097 0.9993908270190958 +vn -1 0 0 +vn 0 0.9993908270190958 -0.03489949670250097 +vn 0 -0.9993908270190958 0.03489949670250097 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 372/1108/277 375/1107/277 373/1106/277 370/1105/277 +f 371/1112/278 372/1111/278 370/1110/278 369/1109/278 +f 376/1116/279 371/1115/279 369/1114/279 374/1113/279 +f 375/1120/280 376/1119/280 374/1118/280 373/1117/280 +f 374/1124/281 369/1123/281 370/1122/281 373/1121/281 +f 375/1128/282 372/1127/282 371/1126/282 376/1125/282 +o tail +v 0.3125 1.2525016417250097 5.982312549255369 +v 0.3125 1.2197916690731698 5.35816909003376 +v 0.3125 0.628358182503401 6.015022521907208 +v 0.3125 0.5956482098515612 5.3908790626856 +v -0.3125 1.2197916690731698 5.35816909003376 +v -0.3125 1.2525016417250097 5.982312549255369 +v -0.3125 0.5956482098515612 5.3908790626856 +v -0.3125 0.628358182503401 6.015022521907208 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.05233595624294383 -0.9986295347545739 +vn 1 0 0 +vn 0 0.05233595624294383 0.9986295347545739 +vn -1 0 0 +vn 0 0.9986295347545739 -0.05233595624294383 +vn 0 -0.9986295347545739 0.05233595624294383 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 380/1132/283 383/1131/283 381/1130/283 378/1129/283 +f 379/1136/284 380/1135/284 378/1134/284 377/1133/284 +f 384/1140/285 379/1139/285 377/1138/285 382/1137/285 +f 383/1144/286 384/1143/286 382/1142/286 381/1141/286 +f 382/1148/287 377/1147/287 378/1146/287 381/1145/287 +f 383/1152/288 380/1151/288 379/1150/288 384/1149/288 +o tail +v 0.0625 1.4956170308832855 5.844399868350311 +v 0.0625 1.4759910472921813 5.469913792817346 +v 0.0625 1.245959647194642 5.857483857411047 +v 0.0625 1.2263336636035378 5.482997781878082 +v -0.0625 1.4759910472921813 5.469913792817346 +v -0.0625 1.4956170308832855 5.844399868350311 +v -0.0625 1.2263336636035378 5.482997781878082 +v -0.0625 1.245959647194642 5.857483857411047 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.05233595624294383 -0.9986295347545739 +vn 1 0 0 +vn 0 0.05233595624294383 0.9986295347545739 +vn -1 0 0 +vn 0 0.9986295347545739 -0.05233595624294383 +vn 0 -0.9986295347545739 0.05233595624294383 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 388/1156/289 391/1155/289 389/1154/289 386/1153/289 +f 387/1160/290 388/1159/290 386/1158/290 385/1157/290 +f 392/1164/291 387/1163/291 385/1162/291 390/1161/291 +f 391/1168/292 392/1167/292 390/1166/292 389/1165/292 +f 390/1172/293 385/1171/293 386/1170/293 389/1169/293 +f 391/1176/294 388/1175/294 387/1174/294 392/1173/294 +o tail +v 0.3125 1.3062130944851622 6.594053052279986 +v 0.3125 1.2517407552678759 5.971431365972645 +v 0.3125 0.6835914081778212 6.648525391497273 +v 0.3125 0.6291190689605348 6.025903705189932 +v -0.3125 1.2517407552678759 5.971431365972645 +v -0.3125 1.3062130944851622 6.594053052279986 +v -0.3125 0.6291190689605348 6.025903705189932 +v -0.3125 0.6835914081778212 6.648525391497273 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.08715574274765817 -0.9961946980917457 +vn 1 0 0 +vn 0 0.08715574274765817 0.9961946980917457 +vn -1 0 0 +vn 0 0.9961946980917457 -0.08715574274765817 +vn 0 -0.9961946980917457 0.08715574274765817 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 396/1180/295 399/1179/295 397/1178/295 394/1177/295 +f 395/1184/296 396/1183/296 394/1182/296 393/1181/296 +f 400/1188/297 395/1187/297 393/1186/297 398/1185/297 +f 399/1192/298 400/1191/298 398/1190/298 397/1189/298 +f 398/1196/299 393/1195/299 394/1194/299 397/1193/299 +f 399/1200/300 396/1199/300 395/1198/300 400/1197/300 +o tail +v 0.0625 1.544367301164641 6.447739779331603 +v 0.0625 1.5116838976342697 6.074166767547199 +v 0.0625 1.295318626641705 6.469528715018518 +v 0.0625 1.2626352231113331 6.095955703234114 +v -0.0625 1.5116838976342697 6.074166767547199 +v -0.0625 1.544367301164641 6.447739779331603 +v -0.0625 1.2626352231113331 6.095955703234114 +v -0.0625 1.295318626641705 6.469528715018518 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.08715574274765817 -0.9961946980917457 +vn 1 0 0 +vn 0 0.08715574274765817 0.9961946980917457 +vn -1 0 0 +vn 0 0.9961946980917457 -0.08715574274765817 +vn 0 -0.9961946980917457 0.08715574274765817 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 404/1204/301 407/1203/301 405/1202/301 402/1201/301 +f 403/1208/302 404/1207/302 402/1206/302 401/1205/302 +f 408/1212/303 403/1211/303 401/1210/303 406/1209/303 +f 407/1216/304 408/1215/304 406/1214/304 405/1213/304 +f 406/1220/305 401/1219/305 402/1218/305 405/1217/305 +f 407/1224/306 404/1223/306 403/1222/306 408/1221/306 +o tail +v 0.3125 1.3913442109132734 7.196715170802091 +v 0.3125 1.304361022813232 6.577797627838609 +v 0.3125 0.772426667949792 7.283698358902132 +v 0.3125 0.6854434798497508 6.66478081593865 +v -0.3125 1.304361022813232 6.577797627838609 +v -0.3125 1.3913442109132734 7.196715170802091 +v -0.3125 0.6854434798497508 6.66478081593865 +v -0.3125 0.772426667949792 7.283698358902132 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.13917310096006544 -0.9902680687415704 +vn 1 0 0 +vn 0 0.13917310096006544 0.9902680687415704 +vn -1 0 0 +vn 0 0.9902680687415704 -0.13917310096006544 +vn 0 -0.9902680687415704 0.13917310096006544 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 412/1228/307 415/1227/307 413/1226/307 410/1225/307 +f 411/1232/308 412/1231/308 410/1230/308 409/1229/308 +f 416/1236/309 411/1235/309 409/1234/309 414/1233/309 +f 415/1240/310 416/1239/310 414/1238/310 413/1237/310 +f 414/1244/311 409/1243/311 410/1242/311 413/1241/311 +f 415/1248/312 412/1247/312 411/1246/312 416/1245/312 +o tail +v 0.0625 1.6215145904786574 7.038138386969378 +v 0.0625 1.5693246776186331 6.666787861191289 +v 0.0625 1.373947573293265 7.0729316622093945 +v 0.0625 1.3217576604332402 6.701581136431305 +v -0.0625 1.5693246776186331 6.666787861191289 +v -0.0625 1.6215145904786574 7.038138386969378 +v -0.0625 1.3217576604332402 6.701581136431305 +v -0.0625 1.373947573293265 7.0729316622093945 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.13917310096006544 -0.9902680687415704 +vn 1 0 0 +vn 0 0.13917310096006544 0.9902680687415704 +vn -1 0 0 +vn 0 0.9902680687415704 -0.13917310096006544 +vn 0 -0.9902680687415704 0.13917310096006544 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 420/1252/313 423/1251/313 421/1250/313 418/1249/313 +f 419/1256/314 420/1255/314 418/1254/314 417/1253/314 +f 424/1260/315 419/1259/315 417/1258/315 422/1257/315 +f 423/1264/316 424/1263/316 422/1262/316 421/1261/316 +f 422/1268/317 417/1267/317 418/1266/317 421/1265/317 +f 423/1272/318 420/1271/318 419/1270/318 424/1269/318 +o tail +v 0.3125 1.507899556369268 7.79409594345173 +v 0.3125 1.3886439342589278 7.180578953796941 +v 0.3125 0.894382566714478 7.9133515655620705 +v 0.3125 0.7751269446041376 7.299834575907282 +v -0.3125 1.3886439342589278 7.180578953796941 +v -0.3125 1.507899556369268 7.79409594345173 +v -0.3125 0.7751269446041376 7.299834575907282 +v -0.3125 0.894382566714478 7.9133515655620705 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.1908089953765448 -0.981627183447664 +vn 1 0 0 +vn 0 0.1908089953765448 0.981627183447664 +vn -1 0 0 +vn 0 0.981627183447664 -0.1908089953765448 +vn 0 -0.981627183447664 0.1908089953765448 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 428/1276/319 431/1275/319 429/1274/319 426/1273/319 +f 427/1280/320 428/1279/320 426/1278/320 425/1277/320 +f 432/1284/321 427/1283/321 425/1282/321 430/1281/321 +f 431/1288/322 432/1287/322 430/1286/322 429/1285/322 +f 430/1292/323 425/1291/323 426/1290/323 429/1289/323 +f 431/1296/324 428/1295/324 427/1294/324 432/1293/324 +o tail +v 0.0625 1.7294552278091162 7.623690296676635 +v 0.0625 1.6579018545429118 7.255580102883762 +v 0.0625 1.4840484319472 7.6713925455207725 +v 0.0625 1.4124950586809957 7.303282351727899 +v -0.0625 1.6579018545429118 7.255580102883762 +v -0.0625 1.7294552278091162 7.623690296676635 +v -0.0625 1.4124950586809957 7.303282351727899 +v -0.0625 1.4840484319472 7.6713925455207725 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.1908089953765448 -0.981627183447664 +vn 1 0 0 +vn 0 0.1908089953765448 0.981627183447664 +vn -1 0 0 +vn 0 0.981627183447664 -0.1908089953765448 +vn 0 -0.981627183447664 0.1908089953765448 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 436/1300/325 439/1299/325 437/1298/325 434/1297/325 +f 435/1304/326 436/1303/326 434/1302/326 433/1301/326 +f 440/1308/327 435/1307/327 433/1306/327 438/1305/327 +f 439/1312/328 440/1311/328 438/1310/328 437/1309/328 +f 438/1316/329 433/1315/329 434/1314/329 437/1313/329 +f 439/1320/330 436/1319/330 435/1318/330 440/1317/330 +o tail +v 0.3125 1.6367569935322868 8.40009360158498 +v 0.3125 1.506812186771187 7.788751351126351 +v 0.3125 1.025414743073658 8.53003840834608 +v 0.3125 0.8954699363125587 7.918696157887451 +v -0.3125 1.506812186771187 7.788751351126351 +v -0.3125 1.6367569935322868 8.40009360158498 +v -0.3125 0.8954699363125587 7.918696157887451 +v -0.3125 1.025414743073658 8.53003840834608 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.20791169081775934 -0.9781476007338057 +vn 1 0 0 +vn 0 0.20791169081775934 0.9781476007338057 +vn -1 0 0 +vn 0 0.9781476007338057 -0.20791169081775934 +vn 0 -0.9781476007338057 0.20791169081775934 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 444/1324/331 447/1323/331 445/1322/331 442/1321/331 +f 443/1328/332 444/1327/332 442/1326/332 441/1325/332 +f 448/1332/333 443/1331/333 441/1330/333 446/1329/333 +f 447/1336/334 448/1335/334 446/1334/334 445/1333/334 +f 446/1340/335 441/1339/335 442/1338/335 445/1337/335 +f 447/1344/336 444/1343/336 443/1342/336 448/1341/336 +o tail +v 0.0625 1.8553049323635182 8.225847228788815 +v 0.0625 1.7773380483068584 7.8590418785136364 +v 0.0625 1.6107680321800668 8.277825151493253 +v 0.0625 1.532801148123407 7.911019801218078 +v -0.0625 1.7773380483068584 7.8590418785136364 +v -0.0625 1.8553049323635182 8.225847228788815 +v -0.0625 1.532801148123407 7.911019801218078 +v -0.0625 1.6107680321800668 8.277825151493253 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.20791169081775934 -0.9781476007338057 +vn 1 0 0 +vn 0 0.20791169081775934 0.9781476007338057 +vn -1 0 0 +vn 0 0.9781476007338057 -0.20791169081775934 +vn 0 -0.9781476007338057 0.20791169081775934 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 452/1348/337 455/1347/337 453/1346/337 450/1345/337 +f 451/1352/338 452/1351/338 450/1350/338 449/1349/338 +f 456/1356/339 451/1355/339 449/1354/339 454/1353/339 +f 455/1360/340 456/1359/340 454/1358/340 453/1357/340 +f 454/1364/341 449/1363/341 450/1362/341 453/1361/341 +f 455/1368/342 452/1367/342 451/1366/342 456/1365/342 +o tail +v 0.3125 1.7570999852407079 9.018955183565149 +v 0.3125 1.6378443631303679 8.405438193910358 +v 0.3125 1.143582995585918 9.13821080567549 +v 0.3125 1.0243273734755776 8.524693816020699 +v -0.3125 1.6378443631303679 8.405438193910358 +v -0.3125 1.7570999852407079 9.018955183565149 +v -0.3125 1.0243273734755776 8.524693816020699 +v -0.3125 1.143582995585918 9.13821080567549 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.1908089953765448 -0.981627183447664 +vn 1 0 0 +vn 0 0.1908089953765448 0.981627183447664 +vn -1 0 0 +vn 0 0.981627183447664 -0.1908089953765448 +vn 0 -0.981627183447664 0.1908089953765448 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 460/1372/343 463/1371/343 461/1370/343 458/1369/343 +f 459/1376/344 460/1375/344 458/1374/344 457/1373/344 +f 464/1380/345 459/1379/345 457/1378/345 462/1377/345 +f 463/1384/346 464/1383/346 462/1382/346 461/1381/346 +f 462/1388/347 457/1387/347 458/1386/347 461/1385/347 +f 463/1392/348 460/1391/348 459/1390/348 464/1389/348 +o tail +v 0.0625 1.978655656680556 8.848549536790054 +v 0.0625 1.9071022834143516 8.480439342997181 +v 0.0625 1.73324886081864 8.89625178563419 +v 0.0625 1.6616954875524357 8.528141591841317 +v -0.0625 1.9071022834143516 8.480439342997181 +v -0.0625 1.978655656680556 8.848549536790054 +v -0.0625 1.6616954875524357 8.528141591841317 +v -0.0625 1.73324886081864 8.89625178563419 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.1908089953765448 -0.981627183447664 +vn 1 0 0 +vn 0 0.1908089953765448 0.981627183447664 +vn -1 0 0 +vn 0 0.981627183447664 -0.1908089953765448 +vn 0 -0.981627183447664 0.1908089953765448 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 468/1396/349 471/1395/349 469/1394/349 466/1393/349 +f 467/1400/350 468/1399/350 466/1398/350 465/1397/350 +f 472/1404/351 467/1403/351 465/1402/351 470/1401/351 +f 471/1408/352 472/1407/352 470/1406/352 469/1405/352 +f 470/1412/353 465/1411/353 466/1410/353 469/1409/353 +f 471/1416/354 468/1415/354 467/1414/354 472/1413/354 +o tail +v 0.3125 1.8567656374994383 9.64700243716721 +v 0.3125 1.7589940968492939 9.029697224295248 +v 0.3125 1.239460424627477 9.744773977817353 +v 0.3125 1.1416888839773327 9.127468764945391 +v -0.3125 1.7589940968492939 9.029697224295248 +v -0.3125 1.8567656374994383 9.64700243716721 +v -0.3125 1.1416888839773327 9.127468764945391 +v -0.3125 1.239460424627477 9.744773977817353 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.15643446504023087 -0.9876883405951378 +vn 1 0 0 +vn 0 0.15643446504023087 0.9876883405951378 +vn -1 0 0 +vn 0 0.9876883405951378 -0.15643446504023087 +vn 0 -0.9876883405951378 0.15643446504023087 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 476/1420/355 479/1419/355 477/1418/355 474/1417/355 +f 475/1424/356 476/1423/356 474/1422/356 473/1421/356 +f 480/1428/357 475/1427/357 473/1426/357 478/1425/357 +f 479/1432/358 480/1431/358 478/1430/358 477/1429/358 +f 478/1436/359 473/1435/359 474/1434/359 477/1433/359 +f 479/1440/360 476/1439/360 475/1438/360 480/1437/360 +o tail +v 0.0625 2.084133414518194 9.484432778332758 +v 0.0625 2.025470490128107 9.114049650609582 +v 0.0625 1.8372113293694095 9.523541394592817 +v 0.0625 1.7785484049793228 9.15315826686964 +v -0.0625 2.025470490128107 9.114049650609582 +v -0.0625 2.084133414518194 9.484432778332758 +v -0.0625 1.7785484049793228 9.15315826686964 +v -0.0625 1.8372113293694095 9.523541394592817 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.15643446504023087 -0.9876883405951378 +vn 1 0 0 +vn 0 0.15643446504023087 0.9876883405951378 +vn -1 0 0 +vn 0 0.9876883405951378 -0.15643446504023087 +vn 0 -0.9876883405951378 0.15643446504023087 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 484/1444/361 487/1443/361 485/1442/361 482/1441/361 +f 483/1448/362 484/1447/362 482/1446/362 481/1445/362 +f 488/1452/363 483/1451/363 481/1450/363 486/1449/363 +f 487/1456/364 488/1455/364 486/1454/364 485/1453/364 +f 486/1460/365 481/1459/365 482/1458/365 485/1457/365 +f 487/1464/366 484/1463/366 483/1462/366 488/1461/366 +o tail +v 0.3125 1.924231412908326 10.284799247326308 +v 0.3125 1.858901123366043 9.663223062721139 +v 0.3125 1.3026552283031554 10.350129536868593 +v 0.3125 1.237324938760872 9.728553352263424 +v -0.3125 1.858901123366043 9.663223062721139 +v -0.3125 1.924231412908326 10.284799247326308 +v -0.3125 1.237324938760872 9.728553352263424 +v -0.3125 1.3026552283031554 10.350129536868593 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.10452846326765347 -0.9945218953682733 +vn 1 0 0 +vn 0 0.10452846326765347 0.9945218953682733 +vn -1 0 0 +vn 0 0.9945218953682733 -0.10452846326765347 +vn 0 -0.9945218953682733 0.10452846326765347 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 492/1468/367 495/1467/367 493/1466/367 490/1465/367 +f 491/1472/368 492/1471/368 490/1470/368 489/1469/368 +f 496/1476/369 491/1475/369 489/1474/369 494/1473/369 +f 495/1480/370 496/1479/370 494/1478/370 493/1477/370 +f 494/1484/371 489/1483/371 490/1482/371 493/1481/371 +f 495/1488/372 492/1487/372 491/1486/372 496/1485/372 +o tail +v 0.0625 2.159795828841938 10.134351894588363 +v 0.0625 2.120597655116568 9.76140618382526 +v 0.0625 1.91116535499987 10.160484010405275 +v 0.0625 1.8719671812745 9.787538299642172 +v -0.0625 2.120597655116568 9.76140618382526 +v -0.0625 2.159795828841938 10.134351894588363 +v -0.0625 1.8719671812745 9.787538299642172 +v -0.0625 1.91116535499987 10.160484010405275 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.10452846326765347 -0.9945218953682733 +vn 1 0 0 +vn 0 0.10452846326765347 0.9945218953682733 +vn -1 0 0 +vn 0 0.9945218953682733 -0.10452846326765347 +vn 0 -0.9945218953682733 0.10452846326765347 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 500/1492/373 503/1491/373 501/1490/373 498/1489/373 +f 499/1496/374 500/1495/374 498/1494/374 497/1493/374 +f 504/1500/375 499/1499/375 497/1498/375 502/1497/375 +f 503/1504/376 504/1503/376 502/1502/376 501/1501/376 +f 502/1508/377 497/1507/377 498/1506/377 501/1505/377 +f 503/1512/378 500/1511/378 499/1510/378 504/1509/378 +o tail +v 0.3125 1.958225022868385 10.92525286499314 +v 0.3125 1.9255150502165446 10.301109405771532 +v 0.3125 1.3340815636467762 10.957962837644981 +v 0.3125 1.3013715909949364 10.333819378423373 +v -0.3125 1.9255150502165446 10.301109405771532 +v -0.3125 1.958225022868385 10.92525286499314 +v -0.3125 1.3013715909949364 10.333819378423373 +v -0.3125 1.3340815636467762 10.957962837644981 +vt 0.7890625 0.5546875 +vt 0.828125 0.5546875 +vt 0.828125 0.515625 +vt 0.7890625 0.515625 +vt 0.75 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.515625 +vt 0.75 0.515625 +vt 0.8671875 0.5546875 +vt 0.90625 0.5546875 +vt 0.90625 0.515625 +vt 0.8671875 0.515625 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vt 0.8671875 0.515625 +vt 0.828125 0.515625 +vt 0.828125 0.5546875 +vt 0.7890625 0.5546875 +vt 0.7890625 0.59375 +vt 0.828125 0.59375 +vt 0.8671875 0.59375 +vt 0.828125 0.59375 +vt 0.828125 0.5546875 +vt 0.8671875 0.5546875 +vn 0 -0.05233595624294385 -0.998629534754574 +vn 1 0 0 +vn 0 0.05233595624294385 0.998629534754574 +vn -1 0 0 +vn 0 0.998629534754574 -0.05233595624294385 +vn 0 -0.998629534754574 0.05233595624294385 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 508/1516/379 511/1515/379 509/1514/379 506/1513/379 +f 507/1520/380 508/1519/380 506/1518/380 505/1517/380 +f 512/1524/381 507/1523/381 505/1522/381 510/1521/381 +f 511/1528/382 512/1527/382 510/1526/382 509/1525/382 +f 510/1532/383 505/1531/383 506/1530/383 509/1529/383 +f 511/1536/384 508/1535/384 507/1534/384 512/1533/384 +o tail +v 0.0625 2.20134041202666 10.787340184088084 +v 0.0625 2.1817144284355567 10.412854108555118 +v 0.0625 1.9516830283380169 10.80042417314882 +v 0.0625 1.9320570447469132 10.425938097615854 +v -0.0625 2.1817144284355567 10.412854108555118 +v -0.0625 2.20134041202666 10.787340184088084 +v -0.0625 1.9320570447469132 10.425938097615854 +v -0.0625 1.9516830283380169 10.80042417314882 +vt 0.2109375 0.9765625 +vt 0.21875 0.9765625 +vt 0.21875 0.9609375 +vt 0.2109375 0.9609375 +vt 0.1875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 0.9609375 +vt 0.1875 0.9609375 +vt 0.2421875 0.9765625 +vt 0.25 0.9765625 +vt 0.25 0.9609375 +vt 0.2421875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2421875 0.9765625 +vt 0.2421875 0.9609375 +vt 0.21875 0.9609375 +vt 0.21875 0.9765625 +vt 0.2109375 0.9765625 +vt 0.2109375 1 +vt 0.21875 1 +vt 0.2265625 1 +vt 0.21875 1 +vt 0.21875 0.9765625 +vt 0.2265625 0.9765625 +vn 0 -0.05233595624294385 -0.998629534754574 +vn 1 0 0 +vn 0 0.05233595624294385 0.998629534754574 +vn -1 0 0 +vn 0 0.998629534754574 -0.05233595624294385 +vn 0 -0.998629534754574 0.05233595624294385 +usemtl m_e48612ca-0475-df4f-6d9d-44f43691817f +f 516/1540/385 519/1539/385 517/1538/385 514/1537/385 +f 515/1544/386 516/1543/386 514/1542/386 513/1541/386 +f 520/1548/387 515/1547/387 513/1546/387 518/1545/387 +f 519/1552/388 520/1551/388 518/1550/388 517/1549/388 +f 518/1556/389 513/1555/389 514/1554/389 517/1553/389 +f 519/1560/390 516/1559/390 515/1558/390 520/1557/390 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/enderman.obj b/prismarine-viewer/viewer/lib/entity/models/enderman.obj new file mode 100644 index 00000000..6b405674 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/enderman.obj @@ -0,0 +1,325 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o Head +v 0.21875 2.96875 0.21875 +v 0.21875 2.96875 -0.21875 +v 0.21875 2.53125 0.21875 +v 0.21875 2.53125 -0.21875 +v -0.21875 2.96875 -0.21875 +v -0.21875 2.96875 0.21875 +v -0.21875 2.53125 -0.21875 +v -0.21875 2.53125 0.21875 +vt 0.125 0.75 +vt 0.25 0.75 +vt 0.25 0.5 +vt 0.125 0.5 +vt 0 0.75 +vt 0.125 0.75 +vt 0.125 0.5 +vt 0 0.5 +vt 0.375 0.75 +vt 0.5 0.75 +vt 0.5 0.5 +vt 0.375 0.5 +vt 0.25 0.75 +vt 0.375 0.75 +vt 0.375 0.5 +vt 0.25 0.5 +vt 0.25 0.75 +vt 0.125 0.75 +vt 0.125 1 +vt 0.25 1 +vt 0.375 1 +vt 0.25 1 +vt 0.25 0.75 +vt 0.375 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_981d8dac-1361-c897-71b0-9983b6b479fc +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o Head layer +v 0.21875 2.84375 0.21875 +v 0.21875 2.84375 -0.21875 +v 0.21875 2.40625 0.21875 +v 0.21875 2.40625 -0.21875 +v -0.21875 2.84375 -0.21875 +v -0.21875 2.84375 0.21875 +v -0.21875 2.40625 -0.21875 +v -0.21875 2.40625 0.21875 +vt 0.125 0.25 +vt 0.25 0.25 +vt 0.25 0 +vt 0.125 0 +vt 0 0.25 +vt 0.125 0.25 +vt 0.125 0 +vt 0 0 +vt 0.375 0.25 +vt 0.5 0.25 +vt 0.5 0 +vt 0.375 0 +vt 0.25 0.25 +vt 0.375 0.25 +vt 0.375 0 +vt 0.25 0 +vt 0.25 0.25 +vt 0.125 0.25 +vt 0.125 0.5 +vt 0.25 0.5 +vt 0.375 0.5 +vt 0.25 0.5 +vt 0.25 0.25 +vt 0.375 0.25 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_981d8dac-1361-c897-71b0-9983b6b479fc +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o Body +v 0.25 2.375 0.125 +v 0.25 2.375 -0.125 +v 0.25 1.625 0.125 +v 0.25 1.625 -0.125 +v -0.25 2.375 -0.125 +v -0.25 2.375 0.125 +v -0.25 1.625 -0.125 +v -0.25 1.625 0.125 +vt 0.5625 0.375 +vt 0.6875 0.375 +vt 0.6875 0 +vt 0.5625 0 +vt 0.5 0.375 +vt 0.5625 0.375 +vt 0.5625 0 +vt 0.5 0 +vt 0.75 0.375 +vt 0.875 0.375 +vt 0.875 0 +vt 0.75 0 +vt 0.6875 0.375 +vt 0.75 0.375 +vt 0.75 0 +vt 0.6875 0 +vt 0.6875 0.375 +vt 0.5625 0.375 +vt 0.5625 0.5 +vt 0.6875 0.5 +vt 0.8125 0.5 +vt 0.6875 0.5 +vt 0.6875 0.375 +vt 0.8125 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_981d8dac-1361-c897-71b0-9983b6b479fc +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o RightArm +v 0.375 2.375 0.0625 +v 0.375 2.375 -0.0625 +v 0.375 0.5 0.0625 +v 0.375 0.5 -0.0625 +v 0.25 2.375 -0.0625 +v 0.25 2.375 0.0625 +v 0.25 0.5 -0.0625 +v 0.25 0.5 0.0625 +vt 0.90625 0.9375 +vt 0.9375 0.9375 +vt 0.9375 0 +vt 0.90625 0 +vt 0.875 0.9375 +vt 0.90625 0.9375 +vt 0.90625 0 +vt 0.875 0 +vt 0.96875 0.9375 +vt 1 0.9375 +vt 1 0 +vt 0.96875 0 +vt 0.9375 0.9375 +vt 0.96875 0.9375 +vt 0.96875 0 +vt 0.9375 0 +vt 0.9375 0.9375 +vt 0.90625 0.9375 +vt 0.90625 1 +vt 0.9375 1 +vt 0.96875 1 +vt 0.9375 1 +vt 0.9375 0.9375 +vt 0.96875 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_981d8dac-1361-c897-71b0-9983b6b479fc +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o LeftArm +v -0.25 2.375 0.0625 +v -0.25 2.375 -0.0625 +v -0.25 0.5 0.0625 +v -0.25 0.5 -0.0625 +v -0.375 2.375 -0.0625 +v -0.375 2.375 0.0625 +v -0.375 0.5 -0.0625 +v -0.375 0.5 0.0625 +vt 0.9375 0.9375 +vt 0.90625 0.9375 +vt 0.90625 0 +vt 0.9375 0 +vt 0.96875 0.9375 +vt 0.9375 0.9375 +vt 0.9375 0 +vt 0.96875 0 +vt 1 0.9375 +vt 0.96875 0.9375 +vt 0.96875 0 +vt 1 0 +vt 0.90625 0.9375 +vt 0.875 0.9375 +vt 0.875 0 +vt 0.90625 0 +vt 0.90625 0.9375 +vt 0.9375 0.9375 +vt 0.9375 1 +vt 0.90625 1 +vt 0.9375 1 +vt 0.96875 1 +vt 0.96875 0.9375 +vt 0.9375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_981d8dac-1361-c897-71b0-9983b6b479fc +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o RightLeg +v 0.1875 1.625 0.0625 +v 0.1875 1.625 -0.0625 +v 0.1875 -0.25 0.0625 +v 0.1875 -0.25 -0.0625 +v 0.0625 1.625 -0.0625 +v 0.0625 1.625 0.0625 +v 0.0625 -0.25 -0.0625 +v 0.0625 -0.25 0.0625 +vt 0.90625 0.9375 +vt 0.9375 0.9375 +vt 0.9375 0 +vt 0.90625 0 +vt 0.875 0.9375 +vt 0.90625 0.9375 +vt 0.90625 0 +vt 0.875 0 +vt 0.96875 0.9375 +vt 1 0.9375 +vt 1 0 +vt 0.96875 0 +vt 0.9375 0.9375 +vt 0.96875 0.9375 +vt 0.96875 0 +vt 0.9375 0 +vt 0.9375 0.9375 +vt 0.90625 0.9375 +vt 0.90625 1 +vt 0.9375 1 +vt 0.96875 1 +vt 0.9375 1 +vt 0.9375 0.9375 +vt 0.96875 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_981d8dac-1361-c897-71b0-9983b6b479fc +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o LeftLeg +v -0.0625 1.625 0.0625 +v -0.0625 1.625 -0.0625 +v -0.0625 -0.25 0.0625 +v -0.0625 -0.25 -0.0625 +v -0.1875 1.625 -0.0625 +v -0.1875 1.625 0.0625 +v -0.1875 -0.25 -0.0625 +v -0.1875 -0.25 0.0625 +vt 0.9375 0.9375 +vt 0.90625 0.9375 +vt 0.90625 0 +vt 0.9375 0 +vt 0.96875 0.9375 +vt 0.9375 0.9375 +vt 0.9375 0 +vt 0.96875 0 +vt 1 0.9375 +vt 0.96875 0.9375 +vt 0.96875 0 +vt 1 0 +vt 0.90625 0.9375 +vt 0.875 0.9375 +vt 0.875 0 +vt 0.90625 0 +vt 0.90625 0.9375 +vt 0.9375 0.9375 +vt 0.9375 1 +vt 0.90625 1 +vt 0.9375 1 +vt 0.96875 1 +vt 0.96875 0.9375 +vt 0.9375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_981d8dac-1361-c897-71b0-9983b6b479fc +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/endermite.obj b/prismarine-viewer/viewer/lib/entity/models/endermite.obj new file mode 100644 index 00000000..595376cd --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/endermite.obj @@ -0,0 +1,187 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o section_2 +v 0.09375 0.1875 0.21875 +v 0.09375 0.1875 0.15625 +v 0.09375 0 0.21875 +v 0.09375 0 0.15625 +v -0.09375 0.1875 0.15625 +v -0.09375 0.1875 0.21875 +v -0.09375 0 0.15625 +v -0.09375 0 0.21875 +vt 0.015625 0.53125 +vt 0.0625 0.53125 +vt 0.0625 0.4375 +vt 0.015625 0.4375 +vt 0 0.53125 +vt 0.015625 0.53125 +vt 0.015625 0.4375 +vt 0 0.4375 +vt 0.078125 0.53125 +vt 0.125 0.53125 +vt 0.125 0.4375 +vt 0.078125 0.4375 +vt 0.0625 0.53125 +vt 0.078125 0.53125 +vt 0.078125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.53125 +vt 0.015625 0.53125 +vt 0.015625 0.5625 +vt 0.0625 0.5625 +vt 0.109375 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.53125 +vt 0.109375 0.53125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_50f00cc5-283b-b301-14d6-d02da334960b +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o section_0 +v 0.125 0.1875 -0.15000000000000002 +v 0.125 0.1875 -0.275 +v 0.125 0 -0.15000000000000002 +v 0.125 0 -0.275 +v -0.125 0.1875 -0.275 +v -0.125 0.1875 -0.15000000000000002 +v -0.125 0 -0.275 +v -0.125 0 -0.15000000000000002 +vt 0.03125 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.84375 +vt 0.03125 0.84375 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.84375 +vt 0 0.84375 +vt 0.125 0.9375 +vt 0.1875 0.9375 +vt 0.1875 0.84375 +vt 0.125 0.84375 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.84375 +vt 0.09375 0.84375 +vt 0.09375 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.09375 1 +vt 0.15625 1 +vt 0.09375 1 +vt 0.09375 0.9375 +vt 0.15625 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_50f00cc5-283b-b301-14d6-d02da334960b +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o section_1 +v 0.1875 0.25 0.16249999999999998 +v 0.1875 0.25 -0.15000000000000002 +v 0.1875 0 0.16249999999999998 +v 0.1875 0 -0.15000000000000002 +v -0.1875 0.25 -0.15000000000000002 +v -0.1875 0.25 0.16249999999999998 +v -0.1875 0 -0.15000000000000002 +v -0.1875 0 0.16249999999999998 +vt 0.078125 0.6875 +vt 0.171875 0.6875 +vt 0.171875 0.5625 +vt 0.078125 0.5625 +vt 0 0.6875 +vt 0.078125 0.6875 +vt 0.078125 0.5625 +vt 0 0.5625 +vt 0.25 0.6875 +vt 0.34375 0.6875 +vt 0.34375 0.5625 +vt 0.25 0.5625 +vt 0.171875 0.6875 +vt 0.25 0.6875 +vt 0.25 0.5625 +vt 0.171875 0.5625 +vt 0.171875 0.6875 +vt 0.078125 0.6875 +vt 0.078125 0.84375 +vt 0.171875 0.84375 +vt 0.265625 0.84375 +vt 0.171875 0.84375 +vt 0.171875 0.6875 +vt 0.265625 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_50f00cc5-283b-b301-14d6-d02da334960b +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o section_3 +v 0.03125 0.125 0.28125 +v 0.03125 0.125 0.21875 +v 0.03125 0 0.28125 +v 0.03125 0 0.21875 +v -0.03125 0.125 0.21875 +v -0.03125 0.125 0.28125 +v -0.03125 0 0.21875 +v -0.03125 0 0.28125 +vt 0.015625 0.40625 +vt 0.03125 0.40625 +vt 0.03125 0.34375 +vt 0.015625 0.34375 +vt 0 0.40625 +vt 0.015625 0.40625 +vt 0.015625 0.34375 +vt 0 0.34375 +vt 0.046875 0.40625 +vt 0.0625 0.40625 +vt 0.0625 0.34375 +vt 0.046875 0.34375 +vt 0.03125 0.40625 +vt 0.046875 0.40625 +vt 0.046875 0.34375 +vt 0.03125 0.34375 +vt 0.03125 0.40625 +vt 0.015625 0.40625 +vt 0.015625 0.4375 +vt 0.03125 0.4375 +vt 0.046875 0.4375 +vt 0.03125 0.4375 +vt 0.03125 0.40625 +vt 0.046875 0.40625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_50f00cc5-283b-b301-14d6-d02da334960b +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/fox.obj b/prismarine-viewer/viewer/lib/entity/models/fox.obj new file mode 100644 index 00000000..a0645b37 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/fox.obj @@ -0,0 +1,463 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.1875 0.6875 -0.1875 +v 0.1875 0.3125 -0.1875 +v 0.1875 0.6875 0.5 +v 0.1875 0.3124999999999999 0.5 +v -0.1875 0.3125 -0.1875 +v -0.1875 0.6875 -0.1875 +v -0.1875 0.3124999999999999 0.5 +v -0.1875 0.6875 0.5 +vt 0.625 0.34375 +vt 0.75 0.34375 +vt 0.75 0 +vt 0.625 0 +vt 0.5 0.34375 +vt 0.625 0.34375 +vt 0.625 0 +vt 0.5 0 +vt 0.875 0.34375 +vt 1 0.34375 +vt 1 0 +vt 0.875 0 +vt 0.75 0.34375 +vt 0.875 0.34375 +vt 0.875 0 +vt 0.75 0 +vt 0.75 0.34375 +vt 0.625 0.34375 +vt 0.625 0.53125 +vt 0.75 0.53125 +vt 0.875 0.53125 +vt 0.75 0.53125 +vt 0.75 0.34375 +vt 0.875 0.34375 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o head +v 0.25 0.625 -0.1875 +v 0.25 0.625 -0.5625 +v 0.25 0.25 -0.1875 +v 0.25 0.25 -0.5625 +v -0.25 0.625 -0.5625 +v -0.25 0.625 -0.1875 +v -0.25 0.25 -0.5625 +v -0.25 0.25 -0.1875 +vt 0.14583333333333334 0.65625 +vt 0.3125 0.65625 +vt 0.3125 0.46875 +vt 0.14583333333333334 0.46875 +vt 0.020833333333333332 0.65625 +vt 0.14583333333333334 0.65625 +vt 0.14583333333333334 0.46875 +vt 0.020833333333333332 0.46875 +vt 0.4375 0.65625 +vt 0.6041666666666666 0.65625 +vt 0.6041666666666666 0.46875 +vt 0.4375 0.46875 +vt 0.3125 0.65625 +vt 0.4375 0.65625 +vt 0.4375 0.46875 +vt 0.3125 0.46875 +vt 0.3125 0.65625 +vt 0.14583333333333334 0.65625 +vt 0.14583333333333334 0.84375 +vt 0.3125 0.84375 +vt 0.4791666666666667 0.84375 +vt 0.3125 0.84375 +vt 0.3125 0.65625 +vt 0.4791666666666667 0.65625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.25 0.75 -0.4375 +v 0.25 0.75 -0.5 +v 0.25 0.625 -0.4375 +v 0.25 0.625 -0.5 +v 0.125 0.75 -0.5 +v 0.125 0.75 -0.4375 +v 0.125 0.625 -0.5 +v 0.125 0.625 -0.4375 +vt 0.1875 0.9375 +vt 0.22916666666666666 0.9375 +vt 0.22916666666666666 0.875 +vt 0.1875 0.875 +vt 0.16666666666666666 0.9375 +vt 0.1875 0.9375 +vt 0.1875 0.875 +vt 0.16666666666666666 0.875 +vt 0.25 0.9375 +vt 0.2916666666666667 0.9375 +vt 0.2916666666666667 0.875 +vt 0.25 0.875 +vt 0.22916666666666666 0.9375 +vt 0.25 0.9375 +vt 0.25 0.875 +vt 0.22916666666666666 0.875 +vt 0.22916666666666666 0.9375 +vt 0.1875 0.9375 +vt 0.1875 0.96875 +vt 0.22916666666666666 0.96875 +vt 0.2708333333333333 0.96875 +vt 0.22916666666666666 0.96875 +vt 0.22916666666666666 0.9375 +vt 0.2708333333333333 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v -0.125 0.75 -0.4375 +v -0.125 0.75 -0.5 +v -0.125 0.625 -0.4375 +v -0.125 0.625 -0.5 +v -0.25 0.75 -0.5 +v -0.25 0.75 -0.4375 +v -0.25 0.625 -0.5 +v -0.25 0.625 -0.4375 +vt 0.3333333333333333 0.9375 +vt 0.375 0.9375 +vt 0.375 0.875 +vt 0.3333333333333333 0.875 +vt 0.3125 0.9375 +vt 0.3333333333333333 0.9375 +vt 0.3333333333333333 0.875 +vt 0.3125 0.875 +vt 0.3958333333333333 0.9375 +vt 0.4375 0.9375 +vt 0.4375 0.875 +vt 0.3958333333333333 0.875 +vt 0.375 0.9375 +vt 0.3958333333333333 0.9375 +vt 0.3958333333333333 0.875 +vt 0.375 0.875 +vt 0.375 0.9375 +vt 0.3333333333333333 0.9375 +vt 0.3333333333333333 0.96875 +vt 0.375 0.96875 +vt 0.4166666666666667 0.96875 +vt 0.375 0.96875 +vt 0.375 0.9375 +vt 0.4166666666666667 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o head +v 0.125 0.375 -0.5625 +v 0.125 0.375 -0.75 +v 0.125 0.25 -0.5625 +v 0.125 0.25 -0.75 +v -0.125 0.375 -0.75 +v -0.125 0.375 -0.5625 +v -0.125 0.25 -0.75 +v -0.125 0.25 -0.5625 +vt 0.1875 0.34375 +vt 0.2708333333333333 0.34375 +vt 0.2708333333333333 0.28125 +vt 0.1875 0.28125 +vt 0.125 0.34375 +vt 0.1875 0.34375 +vt 0.1875 0.28125 +vt 0.125 0.28125 +vt 0.3333333333333333 0.34375 +vt 0.4166666666666667 0.34375 +vt 0.4166666666666667 0.28125 +vt 0.3333333333333333 0.28125 +vt 0.2708333333333333 0.34375 +vt 0.3333333333333333 0.34375 +vt 0.3333333333333333 0.28125 +vt 0.2708333333333333 0.28125 +vt 0.2708333333333333 0.34375 +vt 0.1875 0.34375 +vt 0.1875 0.4375 +vt 0.2708333333333333 0.4375 +vt 0.3541666666666667 0.4375 +vt 0.2708333333333333 0.4375 +vt 0.2708333333333333 0.34375 +vt 0.3541666666666667 0.34375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o leg0 +v 0.18781249999999994 0.375 0.4375 +v 0.18781249999999994 0.375 0.3125 +v 0.18781249999999994 0 0.4375 +v 0.18781249999999994 0 0.3125 +v 0.06281249999999994 0.375 0.3125 +v 0.06281249999999994 0.375 0.4375 +v 0.06281249999999994 0 0.3125 +v 0.06281249999999994 0 0.4375 +vt 0.3125 0.1875 +vt 0.3541666666666667 0.1875 +vt 0.3541666666666667 0 +vt 0.3125 0 +vt 0.2708333333333333 0.1875 +vt 0.3125 0.1875 +vt 0.3125 0 +vt 0.2708333333333333 0 +vt 0.3958333333333333 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0 +vt 0.3958333333333333 0 +vt 0.3541666666666667 0.1875 +vt 0.3958333333333333 0.1875 +vt 0.3958333333333333 0 +vt 0.3541666666666667 0 +vt 0.3541666666666667 0.1875 +vt 0.3125 0.1875 +vt 0.3125 0.25 +vt 0.3541666666666667 0.25 +vt 0.3958333333333333 0.25 +vt 0.3541666666666667 0.25 +vt 0.3541666666666667 0.1875 +vt 0.3958333333333333 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o leg1 +v -0.0628125 0.375 0.4375 +v -0.0628125 0.375 0.3125 +v -0.0628125 0 0.4375 +v -0.0628125 0 0.3125 +v -0.1878125 0.375 0.3125 +v -0.1878125 0.375 0.4375 +v -0.1878125 0 0.3125 +v -0.1878125 0 0.4375 +vt 0.125 0.1875 +vt 0.16666666666666666 0.1875 +vt 0.16666666666666666 0 +vt 0.125 0 +vt 0.08333333333333333 0.1875 +vt 0.125 0.1875 +vt 0.125 0 +vt 0.08333333333333333 0 +vt 0.20833333333333334 0.1875 +vt 0.25 0.1875 +vt 0.25 0 +vt 0.20833333333333334 0 +vt 0.16666666666666666 0.1875 +vt 0.20833333333333334 0.1875 +vt 0.20833333333333334 0 +vt 0.16666666666666666 0 +vt 0.16666666666666666 0.1875 +vt 0.125 0.1875 +vt 0.125 0.25 +vt 0.16666666666666666 0.25 +vt 0.20833333333333334 0.25 +vt 0.16666666666666666 0.25 +vt 0.16666666666666666 0.1875 +vt 0.20833333333333334 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o leg2 +v 0.18781249999999994 0.375 0 +v 0.18781249999999994 0.375 -0.125 +v 0.18781249999999994 0 0 +v 0.18781249999999994 0 -0.125 +v 0.06281249999999994 0.375 -0.125 +v 0.06281249999999994 0.375 0 +v 0.06281249999999994 0 -0.125 +v 0.06281249999999994 0 0 +vt 0.3125 0.1875 +vt 0.3541666666666667 0.1875 +vt 0.3541666666666667 0 +vt 0.3125 0 +vt 0.2708333333333333 0.1875 +vt 0.3125 0.1875 +vt 0.3125 0 +vt 0.2708333333333333 0 +vt 0.3958333333333333 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0 +vt 0.3958333333333333 0 +vt 0.3541666666666667 0.1875 +vt 0.3958333333333333 0.1875 +vt 0.3958333333333333 0 +vt 0.3541666666666667 0 +vt 0.3541666666666667 0.1875 +vt 0.3125 0.1875 +vt 0.3125 0.25 +vt 0.3541666666666667 0.25 +vt 0.3958333333333333 0.25 +vt 0.3541666666666667 0.25 +vt 0.3541666666666667 0.1875 +vt 0.3958333333333333 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o leg3 +v -0.0628125 0.375 0 +v -0.0628125 0.375 -0.125 +v -0.0628125 0 0 +v -0.0628125 0 -0.125 +v -0.1878125 0.375 -0.125 +v -0.1878125 0.375 0 +v -0.1878125 0 -0.125 +v -0.1878125 0 0 +vt 0.125 0.1875 +vt 0.16666666666666666 0.1875 +vt 0.16666666666666666 0 +vt 0.125 0 +vt 0.08333333333333333 0.1875 +vt 0.125 0.1875 +vt 0.125 0 +vt 0.08333333333333333 0 +vt 0.20833333333333334 0.1875 +vt 0.25 0.1875 +vt 0.25 0 +vt 0.20833333333333334 0 +vt 0.16666666666666666 0.1875 +vt 0.20833333333333334 0.1875 +vt 0.20833333333333334 0 +vt 0.16666666666666666 0 +vt 0.16666666666666666 0.1875 +vt 0.125 0.1875 +vt 0.125 0.25 +vt 0.16666666666666666 0.25 +vt 0.20833333333333334 0.25 +vt 0.16666666666666666 0.25 +vt 0.16666666666666666 0.1875 +vt 0.20833333333333334 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o tail +v 0.125 0.671875 0.5 +v 0.125 0.359375 0.5 +v 0.125 0.671875 1.0625 +v 0.125 0.3593749999999999 1.0625 +v -0.125 0.359375 0.5 +v -0.125 0.671875 0.5 +v -0.125 0.3593749999999999 1.0625 +v -0.125 0.671875 1.0625 +vt 0.7291666666666666 0.84375 +vt 0.8125 0.84375 +vt 0.8125 0.5625 +vt 0.7291666666666666 0.5625 +vt 0.625 0.84375 +vt 0.7291666666666666 0.84375 +vt 0.7291666666666666 0.5625 +vt 0.625 0.5625 +vt 0.9166666666666666 0.84375 +vt 1 0.84375 +vt 1 0.5625 +vt 0.9166666666666666 0.5625 +vt 0.8125 0.84375 +vt 0.9166666666666666 0.84375 +vt 0.9166666666666666 0.5625 +vt 0.8125 0.5625 +vt 0.8125 0.84375 +vt 0.7291666666666666 0.84375 +vt 0.7291666666666666 1 +vt 0.8125 1 +vt 0.8958333333333334 1 +vt 0.8125 1 +vt 0.8125 0.84375 +vt 0.8958333333333334 0.84375 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_55d42d08-0bdc-6d16-75c7-074abfaa1062 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/frog.obj b/prismarine-viewer/viewer/lib/entity/models/frog.obj new file mode 100644 index 00000000..e76a114e --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/frog.obj @@ -0,0 +1,739 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.21875 0.25 0.3125 +v 0.21875 0.25 -0.25 +v 0.21875 0.0625 0.3125 +v 0.21875 0.0625 -0.25 +v -0.21875 0.25 -0.25 +v -0.21875 0.25 0.3125 +v -0.21875 0.0625 -0.25 +v -0.21875 0.0625 0.3125 +vt 0.25 0.7916666666666666 +vt 0.3958333333333333 0.7916666666666666 +vt 0.3958333333333333 0.7291666666666667 +vt 0.25 0.7291666666666667 +vt 0.0625 0.7916666666666666 +vt 0.25 0.7916666666666666 +vt 0.25 0.7291666666666667 +vt 0.0625 0.7291666666666667 +vt 0.5833333333333334 0.7916666666666666 +vt 0.7291666666666666 0.7916666666666666 +vt 0.7291666666666666 0.7291666666666667 +vt 0.5833333333333334 0.7291666666666667 +vt 0.3958333333333333 0.7916666666666666 +vt 0.5833333333333334 0.7916666666666666 +vt 0.5833333333333334 0.7291666666666667 +vt 0.3958333333333333 0.7291666666666667 +vt 0.3958333333333333 0.7916666666666666 +vt 0.25 0.7916666666666666 +vt 0.25 0.9791666666666666 +vt 0.3958333333333333 0.9791666666666666 +vt 0.5416666666666666 0.9791666666666666 +vt 0.3958333333333333 0.9791666666666666 +vt 0.3958333333333333 0.7916666666666666 +vt 0.5416666666666666 0.7916666666666666 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0.21875 0.1875 0.3125 +v 0.21875 0.1875 -0.25 +v 0.21875 0.1875 0.3125 +v 0.21875 0.1875 -0.25 +v -0.21875 0.1875 -0.25 +v -0.21875 0.1875 0.3125 +v -0.21875 0.1875 -0.25 +v -0.21875 0.1875 0.3125 +vt 0.6666666666666666 0.35416666666666663 +vt 0.8125 0.35416666666666663 +vt 0.8125 0.35416666666666663 +vt 0.6666666666666666 0.35416666666666663 +vt 0.4791666666666667 0.35416666666666663 +vt 0.6666666666666666 0.35416666666666663 +vt 0.6666666666666666 0.35416666666666663 +vt 0.4791666666666667 0.35416666666666663 +vt 1 0.35416666666666663 +vt 1.1458333333333333 0.35416666666666663 +vt 1.1458333333333333 0.35416666666666663 +vt 1 0.35416666666666663 +vt 0.8125 0.35416666666666663 +vt 1 0.35416666666666663 +vt 1 0.35416666666666663 +vt 0.8125 0.35416666666666663 +vt 0.8125 0.35416666666666663 +vt 0.6666666666666666 0.35416666666666663 +vt 0.6666666666666666 0.5416666666666667 +vt 0.8125 0.5416666666666667 +vt 0.9583333333333334 0.5416666666666667 +vt 0.8125 0.5416666666666667 +vt 0.8125 0.35416666666666663 +vt 0.9583333333333334 0.35416666666666663 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.21875 0.3125 0.3125 +v 0.21875 0.3125 -0.25 +v 0.21875 0.3125 0.3125 +v 0.21875 0.3125 -0.25 +v -0.21875 0.3125 -0.25 +v -0.21875 0.3125 0.3125 +v -0.21875 0.3125 -0.25 +v -0.21875 0.3125 0.3125 +vt 0.6666666666666666 0.5416666666666667 +vt 0.8125 0.5416666666666667 +vt 0.8125 0.5416666666666667 +vt 0.6666666666666666 0.5416666666666667 +vt 0.4791666666666667 0.5416666666666667 +vt 0.6666666666666666 0.5416666666666667 +vt 0.6666666666666666 0.5416666666666667 +vt 0.4791666666666667 0.5416666666666667 +vt 1 0.5416666666666667 +vt 1.1458333333333333 0.5416666666666667 +vt 1.1458333333333333 0.5416666666666667 +vt 1 0.5416666666666667 +vt 0.8125 0.5416666666666667 +vt 1 0.5416666666666667 +vt 1 0.5416666666666667 +vt 0.8125 0.5416666666666667 +vt 0.8125 0.5416666666666667 +vt 0.6666666666666666 0.5416666666666667 +vt 0.6666666666666666 0.7291666666666667 +vt 0.8125 0.7291666666666667 +vt 0.9583333333333334 0.7291666666666667 +vt 0.8125 0.7291666666666667 +vt 0.8125 0.5416666666666667 +vt 0.9583333333333334 0.5416666666666667 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.21875 0.375 0.3125 +v 0.21875 0.375 -0.25 +v 0.21875 0.1875 0.3125 +v 0.21875 0.1875 -0.25 +v -0.21875 0.375 -0.25 +v -0.21875 0.375 0.3125 +v -0.21875 0.1875 -0.25 +v -0.21875 0.1875 0.3125 +vt 0.1875 0.5416666666666667 +vt 0.3333333333333333 0.5416666666666667 +vt 0.3333333333333333 0.47916666666666663 +vt 0.1875 0.47916666666666663 +vt 0 0.5416666666666667 +vt 0.1875 0.5416666666666667 +vt 0.1875 0.47916666666666663 +vt 0 0.47916666666666663 +vt 0.5208333333333334 0.5416666666666667 +vt 0.6666666666666666 0.5416666666666667 +vt 0.6666666666666666 0.47916666666666663 +vt 0.5208333333333334 0.47916666666666663 +vt 0.3333333333333333 0.5416666666666667 +vt 0.5208333333333334 0.5416666666666667 +vt 0.5208333333333334 0.47916666666666663 +vt 0.3333333333333333 0.47916666666666663 +vt 0.3333333333333333 0.5416666666666667 +vt 0.1875 0.5416666666666667 +vt 0.1875 0.7291666666666667 +vt 0.3333333333333333 0.7291666666666667 +vt 0.4791666666666667 0.7291666666666667 +vt 0.3333333333333333 0.7291666666666667 +vt 0.3333333333333333 0.5416666666666667 +vt 0.4791666666666667 0.5416666666666667 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o right_eye +v 0.21875 0.5 0 +v 0.21875 0.5 -0.1875 +v 0.21875 0.375 0 +v 0.21875 0.375 -0.1875 +v 0.03125 0.5 -0.1875 +v 0.03125 0.5 0 +v 0.03125 0.375 -0.1875 +v 0.03125 0.375 0 +vt 0.0625 0.9375 +vt 0.125 0.9375 +vt 0.125 0.8958333333333334 +vt 0.0625 0.8958333333333334 +vt 0 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.8958333333333334 +vt 0 0.8958333333333334 +vt 0.1875 0.9375 +vt 0.25 0.9375 +vt 0.25 0.8958333333333334 +vt 0.1875 0.8958333333333334 +vt 0.125 0.9375 +vt 0.1875 0.9375 +vt 0.1875 0.8958333333333334 +vt 0.125 0.8958333333333334 +vt 0.125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 1 +vt 0.125 1 +vt 0.1875 1 +vt 0.125 1 +vt 0.125 0.9375 +vt 0.1875 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o left_eye +v -0.03125 0.5 0 +v -0.03125 0.5 -0.1875 +v -0.03125 0.375 0 +v -0.03125 0.375 -0.1875 +v -0.21875 0.5 -0.1875 +v -0.21875 0.5 0 +v -0.21875 0.375 -0.1875 +v -0.21875 0.375 0 +vt 0.0625 0.8333333333333334 +vt 0.125 0.8333333333333334 +vt 0.125 0.7916666666666666 +vt 0.0625 0.7916666666666666 +vt 0 0.8333333333333334 +vt 0.0625 0.8333333333333334 +vt 0.0625 0.7916666666666666 +vt 0 0.7916666666666666 +vt 0.1875 0.8333333333333334 +vt 0.25 0.8333333333333334 +vt 0.25 0.7916666666666666 +vt 0.1875 0.7916666666666666 +vt 0.125 0.8333333333333334 +vt 0.1875 0.8333333333333334 +vt 0.1875 0.7916666666666666 +vt 0.125 0.7916666666666666 +vt 0.125 0.8333333333333334 +vt 0.0625 0.8333333333333334 +vt 0.0625 0.8958333333333334 +vt 0.125 0.8958333333333334 +vt 0.1875 0.8958333333333334 +vt 0.125 0.8958333333333334 +vt 0.125 0.8333333333333334 +vt 0.1875 0.8333333333333334 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o croaking_body +v 0.21250000000000002 0.1875 -0.0625 +v 0.21250000000000002 0.1875 -0.2375 +v 0.21250000000000002 0.07499999999999996 -0.0625 +v 0.21250000000000002 0.07499999999999996 -0.2375 +v -0.21250000000000002 0.1875 -0.2375 +v -0.21250000000000002 0.1875 -0.0625 +v -0.21250000000000002 0.07499999999999996 -0.2375 +v -0.21250000000000002 0.07499999999999996 -0.0625 +vt 0.6041666666666666 0.8333333333333334 +vt 0.75 0.8333333333333334 +vt 0.75 0.7916666666666666 +vt 0.6041666666666666 0.7916666666666666 +vt 0.5416666666666666 0.8333333333333334 +vt 0.6041666666666666 0.8333333333333334 +vt 0.6041666666666666 0.7916666666666666 +vt 0.5416666666666666 0.7916666666666666 +vt 0.8125 0.8333333333333334 +vt 0.9583333333333334 0.8333333333333334 +vt 0.9583333333333334 0.7916666666666666 +vt 0.8125 0.7916666666666666 +vt 0.75 0.8333333333333334 +vt 0.8125 0.8333333333333334 +vt 0.8125 0.7916666666666666 +vt 0.75 0.7916666666666666 +vt 0.75 0.8333333333333334 +vt 0.6041666666666666 0.8333333333333334 +vt 0.6041666666666666 0.8958333333333334 +vt 0.75 0.8958333333333334 +vt 0.8958333333333334 0.8958333333333334 +vt 0.75 0.8958333333333334 +vt 0.75 0.8333333333333334 +vt 0.8958333333333334 0.8333333333333334 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o tongue +v 0.125 0.19374999999999998 0.30625 +v 0.125 0.19374999999999998 -0.13124999999999998 +v 0.125 0.19374999999999998 0.30625 +v 0.125 0.19374999999999998 -0.13124999999999998 +v -0.125 0.19374999999999998 -0.13124999999999998 +v -0.125 0.19374999999999998 0.30625 +v -0.125 0.19374999999999998 -0.13124999999999998 +v -0.125 0.19374999999999998 0.30625 +vt 0.5 0.5833333333333333 +vt 0.5833333333333334 0.5833333333333333 +vt 0.5833333333333334 0.5833333333333333 +vt 0.5 0.5833333333333333 +vt 0.3541666666666667 0.5833333333333333 +vt 0.5 0.5833333333333333 +vt 0.5 0.5833333333333333 +vt 0.3541666666666667 0.5833333333333333 +vt 0.7291666666666666 0.5833333333333333 +vt 0.8125 0.5833333333333333 +vt 0.8125 0.5833333333333333 +vt 0.7291666666666666 0.5833333333333333 +vt 0.5833333333333334 0.5833333333333333 +vt 0.7291666666666666 0.5833333333333333 +vt 0.7291666666666666 0.5833333333333333 +vt 0.5833333333333334 0.5833333333333333 +vt 0.5833333333333334 0.5833333333333333 +vt 0.5 0.5833333333333333 +vt 0.5 0.7291666666666667 +vt 0.5833333333333334 0.7291666666666667 +vt 0.6666666666666666 0.7291666666666667 +vt 0.5833333333333334 0.7291666666666667 +vt 0.5833333333333334 0.5833333333333333 +vt 0.6666666666666666 0.5833333333333333 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o left_arm +v -0.1875 0.1875 -0.03125 +v -0.1875 0.1875 -0.21875 +v -0.1875 0 -0.03125 +v -0.1875 0 -0.21875 +v -0.3125 0.1875 -0.21875 +v -0.3125 0.1875 -0.03125 +v -0.3125 0 -0.21875 +v -0.3125 0 -0.03125 +vt 0.0625 0.27083333333333337 +vt 0.10416666666666667 0.27083333333333337 +vt 0.10416666666666667 0.20833333333333337 +vt 0.0625 0.20833333333333337 +vt 0 0.27083333333333337 +vt 0.0625 0.27083333333333337 +vt 0.0625 0.20833333333333337 +vt 0 0.20833333333333337 +vt 0.16666666666666666 0.27083333333333337 +vt 0.20833333333333334 0.27083333333333337 +vt 0.20833333333333334 0.20833333333333337 +vt 0.16666666666666666 0.20833333333333337 +vt 0.10416666666666667 0.27083333333333337 +vt 0.16666666666666666 0.27083333333333337 +vt 0.16666666666666666 0.20833333333333337 +vt 0.10416666666666667 0.20833333333333337 +vt 0.10416666666666667 0.27083333333333337 +vt 0.0625 0.27083333333333337 +vt 0.0625 0.33333333333333337 +vt 0.10416666666666667 0.33333333333333337 +vt 0.14583333333333334 0.33333333333333337 +vt 0.10416666666666667 0.33333333333333337 +vt 0.10416666666666667 0.27083333333333337 +vt 0.14583333333333334 0.27083333333333337 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o left_arm +v 0 -0.0006249999999999867 0.03125 +v 0 -0.0006249999999999867 -0.46875 +v 0 -0.0006249999999999867 0.03125 +v 0 -0.0006249999999999867 -0.46875 +v -0.5 -0.0006249999999999867 -0.46875 +v -0.5 -0.0006249999999999867 0.03125 +v -0.5 -0.0006249999999999867 -0.46875 +v -0.5 -0.0006249999999999867 0.03125 +vt 0.5416666666666666 0 +vt 0.7083333333333334 0 +vt 0.7083333333333334 0 +vt 0.5416666666666666 0 +vt 0.375 0 +vt 0.5416666666666666 0 +vt 0.5416666666666666 0 +vt 0.375 0 +vt 0.875 0 +vt 1.0416666666666667 0 +vt 1.0416666666666667 0 +vt 0.875 0 +vt 0.7083333333333334 0 +vt 0.875 0 +vt 0.875 0 +vt 0.7083333333333334 0 +vt 0.7083333333333334 0 +vt 0.5416666666666666 0 +vt 0.5416666666666666 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.875 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.7083333333333334 0 +vt 0.875 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o right_arm +v 0.3125 0.1875 -0.03125 +v 0.3125 0.1875 -0.21875 +v 0.3125 0 -0.03125 +v 0.3125 0 -0.21875 +v 0.1875 0.1875 -0.21875 +v 0.1875 0.1875 -0.03125 +v 0.1875 0 -0.21875 +v 0.1875 0 -0.03125 +vt 0.0625 0.14583333333333337 +vt 0.10416666666666667 0.14583333333333337 +vt 0.10416666666666667 0.08333333333333337 +vt 0.0625 0.08333333333333337 +vt 0 0.14583333333333337 +vt 0.0625 0.14583333333333337 +vt 0.0625 0.08333333333333337 +vt 0 0.08333333333333337 +vt 0.16666666666666666 0.14583333333333337 +vt 0.20833333333333334 0.14583333333333337 +vt 0.20833333333333334 0.08333333333333337 +vt 0.16666666666666666 0.08333333333333337 +vt 0.10416666666666667 0.14583333333333337 +vt 0.16666666666666666 0.14583333333333337 +vt 0.16666666666666666 0.08333333333333337 +vt 0.10416666666666667 0.08333333333333337 +vt 0.10416666666666667 0.14583333333333337 +vt 0.0625 0.14583333333333337 +vt 0.0625 0.20833333333333337 +vt 0.10416666666666667 0.20833333333333337 +vt 0.14583333333333334 0.20833333333333337 +vt 0.10416666666666667 0.20833333333333337 +vt 0.10416666666666667 0.14583333333333337 +vt 0.14583333333333334 0.14583333333333337 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o right_arm +v 0.5 -0.0006249999999999867 0.03125 +v 0.5 -0.0006249999999999867 -0.46875 +v 0.5 -0.0006249999999999867 0.03125 +v 0.5 -0.0006249999999999867 -0.46875 +v 0 -0.0006249999999999867 -0.46875 +v 0 -0.0006249999999999867 0.03125 +v 0 -0.0006249999999999867 -0.46875 +v 0 -0.0006249999999999867 0.03125 +vt 0.20833333333333334 0 +vt 0.375 0 +vt 0.375 0 +vt 0.20833333333333334 0 +vt 0.041666666666666664 0 +vt 0.20833333333333334 0 +vt 0.20833333333333334 0 +vt 0.041666666666666664 0 +vt 0.5416666666666666 0 +vt 0.7083333333333334 0 +vt 0.7083333333333334 0 +vt 0.5416666666666666 0 +vt 0.375 0 +vt 0.5416666666666666 0 +vt 0.5416666666666666 0 +vt 0.375 0 +vt 0.375 0 +vt 0.20833333333333334 0 +vt 0.20833333333333334 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.375 0 +vt 0.5416666666666666 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o left_leg +v -0.15625 0.1875 0.375 +v -0.15625 0.1875 0.125 +v -0.15625 0 0.375 +v -0.15625 0 0.125 +v -0.34375 0.1875 0.125 +v -0.34375 0.1875 0.375 +v -0.34375 0 0.125 +v -0.34375 0 0.375 +vt 0.375 0.39583333333333337 +vt 0.4375 0.39583333333333337 +vt 0.4375 0.33333333333333337 +vt 0.375 0.33333333333333337 +vt 0.2916666666666667 0.39583333333333337 +vt 0.375 0.39583333333333337 +vt 0.375 0.33333333333333337 +vt 0.2916666666666667 0.33333333333333337 +vt 0.5208333333333334 0.39583333333333337 +vt 0.5833333333333334 0.39583333333333337 +vt 0.5833333333333334 0.33333333333333337 +vt 0.5208333333333334 0.33333333333333337 +vt 0.4375 0.39583333333333337 +vt 0.5208333333333334 0.39583333333333337 +vt 0.5208333333333334 0.33333333333333337 +vt 0.4375 0.33333333333333337 +vt 0.4375 0.39583333333333337 +vt 0.375 0.39583333333333337 +vt 0.375 0.47916666666666663 +vt 0.4375 0.47916666666666663 +vt 0.5 0.47916666666666663 +vt 0.4375 0.47916666666666663 +vt 0.4375 0.39583333333333337 +vt 0.5 0.39583333333333337 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 +o left_leg +v -0.09375 -0.0006249999999999867 0.5 +v -0.09375 -0.0006249999999999867 0 +v -0.09375 -0.0006249999999999867 0.5 +v -0.09375 -0.0006249999999999867 0 +v -0.59375 -0.0006249999999999867 0 +v -0.59375 -0.0006249999999999867 0.5 +v -0.59375 -0.0006249999999999867 0 +v -0.59375 -0.0006249999999999867 0.5 +vt 0.20833333333333334 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.20833333333333334 0.16666666666666663 +vt 0.041666666666666664 0.16666666666666663 +vt 0.20833333333333334 0.16666666666666663 +vt 0.20833333333333334 0.16666666666666663 +vt 0.041666666666666664 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.20833333333333334 0.16666666666666663 +vt 0.20833333333333334 0.33333333333333337 +vt 0.375 0.33333333333333337 +vt 0.5416666666666666 0.33333333333333337 +vt 0.375 0.33333333333333337 +vt 0.375 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 108/316/79 111/315/79 109/314/79 106/313/79 +f 107/320/80 108/319/80 106/318/80 105/317/80 +f 112/324/81 107/323/81 105/322/81 110/321/81 +f 111/328/82 112/327/82 110/326/82 109/325/82 +f 110/332/83 105/331/83 106/330/83 109/329/83 +f 111/336/84 108/335/84 107/334/84 112/333/84 +o right_leg +v 0.34375 0.1875 0.375 +v 0.34375 0.1875 0.125 +v 0.34375 0 0.375 +v 0.34375 0 0.125 +v 0.15625 0.1875 0.125 +v 0.15625 0.1875 0.375 +v 0.15625 0 0.125 +v 0.15625 0 0.375 +vt 0.08333333333333333 0.39583333333333337 +vt 0.14583333333333334 0.39583333333333337 +vt 0.14583333333333334 0.33333333333333337 +vt 0.08333333333333333 0.33333333333333337 +vt 0 0.39583333333333337 +vt 0.08333333333333333 0.39583333333333337 +vt 0.08333333333333333 0.33333333333333337 +vt 0 0.33333333333333337 +vt 0.22916666666666666 0.39583333333333337 +vt 0.2916666666666667 0.39583333333333337 +vt 0.2916666666666667 0.33333333333333337 +vt 0.22916666666666666 0.33333333333333337 +vt 0.14583333333333334 0.39583333333333337 +vt 0.22916666666666666 0.39583333333333337 +vt 0.22916666666666666 0.33333333333333337 +vt 0.14583333333333334 0.33333333333333337 +vt 0.14583333333333334 0.39583333333333337 +vt 0.08333333333333333 0.39583333333333337 +vt 0.08333333333333333 0.47916666666666663 +vt 0.14583333333333334 0.47916666666666663 +vt 0.20833333333333334 0.47916666666666663 +vt 0.14583333333333334 0.47916666666666663 +vt 0.14583333333333334 0.39583333333333337 +vt 0.20833333333333334 0.39583333333333337 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 116/340/85 119/339/85 117/338/85 114/337/85 +f 115/344/86 116/343/86 114/342/86 113/341/86 +f 120/348/87 115/347/87 113/346/87 118/345/87 +f 119/352/88 120/351/88 118/350/88 117/349/88 +f 118/356/89 113/355/89 114/354/89 117/353/89 +f 119/360/90 116/359/90 115/358/90 120/357/90 +o right_leg +v 0.59375 -0.0006249999999999867 0.5 +v 0.59375 -0.0006249999999999867 0 +v 0.59375 -0.0006249999999999867 0.5 +v 0.59375 -0.0006249999999999867 0 +v 0.09375 -0.0006249999999999867 0 +v 0.09375 -0.0006249999999999867 0.5 +v 0.09375 -0.0006249999999999867 0 +v 0.09375 -0.0006249999999999867 0.5 +vt 0.5416666666666666 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.375 0.16666666666666663 +vt 0.875 0.16666666666666663 +vt 1.0416666666666667 0.16666666666666663 +vt 1.0416666666666667 0.16666666666666663 +vt 0.875 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.875 0.16666666666666663 +vt 0.875 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.7083333333333334 0.16666666666666663 +vt 0.5416666666666666 0.16666666666666663 +vt 0.5416666666666666 0.33333333333333337 +vt 0.7083333333333334 0.33333333333333337 +vt 0.875 0.33333333333333337 +vt 0.7083333333333334 0.33333333333333337 +vt 0.7083333333333334 0.16666666666666663 +vt 0.875 0.16666666666666663 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_4288dcd0-d35c-c2c4-0fee-38c374635ee1 +f 124/364/91 127/363/91 125/362/91 122/361/91 +f 123/368/92 124/367/92 122/366/92 121/365/92 +f 128/372/93 123/371/93 121/370/93 126/369/93 +f 127/376/94 128/375/94 126/374/94 125/373/94 +f 126/380/95 121/379/95 122/378/95 125/377/95 +f 127/384/96 124/383/96 123/382/96 128/381/96 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/ghast.obj b/prismarine-viewer/viewer/lib/entity/models/ghast.obj new file mode 100644 index 00000000..bed7ccb2 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/ghast.obj @@ -0,0 +1,463 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.5 1 0.5 +v 0.5 1 -0.5 +v 0.5 0 0.5 +v 0.5 0 -0.5 +v -0.5 1 -0.5 +v -0.5 1 0.5 +v -0.5 0 -0.5 +v -0.5 0 0.5 +vt 0.25 0.5 +vt 0.5 0.5 +vt 0.5 0 +vt 0.25 0 +vt 0 0.5 +vt 0.25 0.5 +vt 0.25 0 +vt 0 0 +vt 0.75 0.5 +vt 1 0.5 +vt 1 0 +vt 0.75 0 +vt 0.5 0.5 +vt 0.75 0.5 +vt 0.75 0 +vt 0.5 0 +vt 0.5 0.5 +vt 0.25 0.5 +vt 0.25 1 +vt 0.5 1 +vt 0.75 1 +vt 0.5 1 +vt 0.5 0.5 +vt 0.75 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o tentacles_0 +v 0.30000000000000004 0.0625 -0.25 +v 0.30000000000000004 0.0625 -0.375 +v 0.30000000000000004 -0.5 -0.25 +v 0.30000000000000004 -0.5 -0.375 +v 0.17500000000000004 0.0625 -0.375 +v 0.17500000000000004 0.0625 -0.25 +v 0.17500000000000004 -0.5 -0.375 +v 0.17500000000000004 -0.5 -0.25 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.65625 +vt 0.03125 0.65625 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.65625 +vt 0 0.65625 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.65625 +vt 0.09375 0.65625 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.65625 +vt 0.0625 0.65625 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o tentacles_1 +v -0.01874999999999999 0.0625 -0.25 +v -0.01874999999999999 0.0625 -0.375 +v -0.01874999999999999 -0.625 -0.25 +v -0.01874999999999999 -0.625 -0.375 +v -0.14375 0.0625 -0.375 +v -0.14375 0.0625 -0.25 +v -0.14375 -0.625 -0.375 +v -0.14375 -0.625 -0.25 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.59375 +vt 0.03125 0.59375 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.59375 +vt 0 0.59375 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.59375 +vt 0.09375 0.59375 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o tentacles_2 +v -0.33125 0.0625 -0.25 +v -0.33125 0.0625 -0.375 +v -0.33125 -0.4375 -0.25 +v -0.33125 -0.4375 -0.375 +v -0.45625 0.0625 -0.375 +v -0.45625 0.0625 -0.25 +v -0.45625 -0.4375 -0.375 +v -0.45625 -0.4375 -0.25 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.6875 +vt 0.03125 0.6875 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.6875 +vt 0 0.6875 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.6875 +vt 0.09375 0.6875 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o tentacles_3 +v 0.45625000000000004 0.0625 0.0625 +v 0.45625000000000004 0.0625 -0.0625 +v 0.45625000000000004 -0.5 0.0625 +v 0.45625000000000004 -0.5 -0.0625 +v 0.33125000000000004 0.0625 -0.0625 +v 0.33125000000000004 0.0625 0.0625 +v 0.33125000000000004 -0.5 -0.0625 +v 0.33125000000000004 -0.5 0.0625 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.65625 +vt 0.03125 0.65625 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.65625 +vt 0 0.65625 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.65625 +vt 0.09375 0.65625 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.65625 +vt 0.0625 0.65625 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o tentacles_4 +v 0.14375000000000004 0.0625 0.0625 +v 0.14375000000000004 0.0625 -0.0625 +v 0.14375000000000004 -0.75 0.0625 +v 0.14375000000000004 -0.75 -0.0625 +v 0.018750000000000044 0.0625 -0.0625 +v 0.018750000000000044 0.0625 0.0625 +v 0.018750000000000044 -0.75 -0.0625 +v 0.018750000000000044 -0.75 0.0625 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.53125 +vt 0.03125 0.53125 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.53125 +vt 0 0.53125 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.53125 +vt 0.09375 0.53125 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.53125 +vt 0.0625 0.53125 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o tentacles_5 +v -0.175 0.0625 0.0625 +v -0.175 0.0625 -0.0625 +v -0.175 -0.625 0.0625 +v -0.175 -0.625 -0.0625 +v -0.3 0.0625 -0.0625 +v -0.3 0.0625 0.0625 +v -0.3 -0.625 -0.0625 +v -0.3 -0.625 0.0625 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.59375 +vt 0.03125 0.59375 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.59375 +vt 0 0.59375 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.59375 +vt 0.09375 0.59375 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o tentacles_6 +v 0.30000000000000004 0.0625 0.375 +v 0.30000000000000004 0.0625 0.25 +v 0.30000000000000004 -0.6875 0.375 +v 0.30000000000000004 -0.6875 0.25 +v 0.17500000000000004 0.0625 0.25 +v 0.17500000000000004 0.0625 0.375 +v 0.17500000000000004 -0.6875 0.25 +v 0.17500000000000004 -0.6875 0.375 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.5625 +vt 0.03125 0.5625 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.5625 +vt 0 0.5625 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.5625 +vt 0.09375 0.5625 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o tentacles_7 +v -0.01874999999999999 0.0625 0.375 +v -0.01874999999999999 0.0625 0.25 +v -0.01874999999999999 -0.6875 0.375 +v -0.01874999999999999 -0.6875 0.25 +v -0.14375 0.0625 0.25 +v -0.14375 0.0625 0.375 +v -0.14375 -0.6875 0.25 +v -0.14375 -0.6875 0.375 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.5625 +vt 0.03125 0.5625 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.5625 +vt 0 0.5625 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.5625 +vt 0.09375 0.5625 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o tentacles_8 +v -0.33125 0.0625 0.375 +v -0.33125 0.0625 0.25 +v -0.33125 -0.75 0.375 +v -0.33125 -0.75 0.25 +v -0.45625 0.0625 0.25 +v -0.45625 0.0625 0.375 +v -0.45625 -0.75 0.25 +v -0.45625 -0.75 0.375 +vt 0.03125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.53125 +vt 0.03125 0.53125 +vt 0 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.53125 +vt 0 0.53125 +vt 0.09375 0.9375 +vt 0.125 0.9375 +vt 0.125 0.53125 +vt 0.09375 0.53125 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vt 0.09375 0.53125 +vt 0.0625 0.53125 +vt 0.0625 0.9375 +vt 0.03125 0.9375 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0.09375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_be60a09e-8083-c62f-16c0-359ca5c36498 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/goat.obj b/prismarine-viewer/viewer/lib/entity/models/goat.obj new file mode 100644 index 00000000..adb8910c --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/goat.obj @@ -0,0 +1,601 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o left_back_leg +v -0.0625 0.375 0.4375 +v -0.0625 0.375 0.25 +v -0.0625 0 0.4375 +v -0.0625 0 0.25 +v -0.25 0.375 0.25 +v -0.25 0.375 0.4375 +v -0.25 0 0.25 +v -0.25 0 0.4375 +vt 0.609375 0.5 +vt 0.65625 0.5 +vt 0.65625 0.40625 +vt 0.609375 0.40625 +vt 0.5625 0.5 +vt 0.609375 0.5 +vt 0.609375 0.40625 +vt 0.5625 0.40625 +vt 0.703125 0.5 +vt 0.75 0.5 +vt 0.75 0.40625 +vt 0.703125 0.40625 +vt 0.65625 0.5 +vt 0.703125 0.5 +vt 0.703125 0.40625 +vt 0.65625 0.40625 +vt 0.65625 0.5 +vt 0.609375 0.5 +vt 0.609375 0.546875 +vt 0.65625 0.546875 +vt 0.703125 0.546875 +vt 0.65625 0.546875 +vt 0.65625 0.5 +vt 0.703125 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o right_back_leg +v 0.1875 0.375 0.4375 +v 0.1875 0.375 0.25 +v 0.1875 0 0.4375 +v 0.1875 0 0.25 +v 0 0.375 0.25 +v 0 0.375 0.4375 +v 0 0 0.25 +v 0 0 0.4375 +vt 0.8125 0.5 +vt 0.859375 0.5 +vt 0.859375 0.40625 +vt 0.8125 0.40625 +vt 0.765625 0.5 +vt 0.8125 0.5 +vt 0.8125 0.40625 +vt 0.765625 0.40625 +vt 0.90625 0.5 +vt 0.953125 0.5 +vt 0.953125 0.40625 +vt 0.90625 0.40625 +vt 0.859375 0.5 +vt 0.90625 0.5 +vt 0.90625 0.40625 +vt 0.859375 0.40625 +vt 0.859375 0.5 +vt 0.8125 0.5 +vt 0.8125 0.546875 +vt 0.859375 0.546875 +vt 0.90625 0.546875 +vt 0.859375 0.546875 +vt 0.859375 0.5 +vt 0.90625 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o right_front_leg +v 0.1875 0.625 -0.1875 +v 0.1875 0.625 -0.375 +v 0.1875 0 -0.1875 +v 0.1875 0 -0.375 +v 0 0.625 -0.375 +v 0 0.625 -0.1875 +v 0 0 -0.375 +v 0 0 -0.1875 +vt 0.8125 0.921875 +vt 0.859375 0.921875 +vt 0.859375 0.765625 +vt 0.8125 0.765625 +vt 0.765625 0.921875 +vt 0.8125 0.921875 +vt 0.8125 0.765625 +vt 0.765625 0.765625 +vt 0.90625 0.921875 +vt 0.953125 0.921875 +vt 0.953125 0.765625 +vt 0.90625 0.765625 +vt 0.859375 0.921875 +vt 0.90625 0.921875 +vt 0.90625 0.765625 +vt 0.859375 0.765625 +vt 0.859375 0.921875 +vt 0.8125 0.921875 +vt 0.8125 0.96875 +vt 0.859375 0.96875 +vt 0.90625 0.96875 +vt 0.859375 0.96875 +vt 0.859375 0.921875 +vt 0.90625 0.921875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o left_front_leg +v -0.0625 0.625 -0.1875 +v -0.0625 0.625 -0.375 +v -0.0625 0 -0.1875 +v -0.0625 0 -0.375 +v -0.25 0.625 -0.375 +v -0.25 0.625 -0.1875 +v -0.25 0 -0.375 +v -0.25 0 -0.1875 +vt 0.59375 0.921875 +vt 0.640625 0.921875 +vt 0.640625 0.765625 +vt 0.59375 0.765625 +vt 0.546875 0.921875 +vt 0.59375 0.921875 +vt 0.59375 0.765625 +vt 0.546875 0.765625 +vt 0.6875 0.921875 +vt 0.734375 0.921875 +vt 0.734375 0.765625 +vt 0.6875 0.765625 +vt 0.640625 0.921875 +vt 0.6875 0.921875 +vt 0.6875 0.765625 +vt 0.640625 0.765625 +vt 0.640625 0.921875 +vt 0.59375 0.921875 +vt 0.59375 0.96875 +vt 0.640625 0.96875 +vt 0.6875 0.96875 +vt 0.640625 0.96875 +vt 0.640625 0.921875 +vt 0.6875 0.921875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o body +v 0.25 1.0625 0.5625 +v 0.25 1.0625 -0.4375 +v 0.25 0.375 0.5625 +v 0.25 0.375 -0.4375 +v -0.3125 1.0625 -0.4375 +v -0.3125 1.0625 0.5625 +v -0.3125 0.375 -0.4375 +v -0.3125 0.375 0.5625 +vt 0.265625 0.734375 +vt 0.40625 0.734375 +vt 0.40625 0.5625 +vt 0.265625 0.5625 +vt 0.015625 0.734375 +vt 0.265625 0.734375 +vt 0.265625 0.5625 +vt 0.015625 0.5625 +vt 0.65625 0.734375 +vt 0.796875 0.734375 +vt 0.796875 0.5625 +vt 0.65625 0.5625 +vt 0.40625 0.734375 +vt 0.65625 0.734375 +vt 0.65625 0.5625 +vt 0.40625 0.5625 +vt 0.40625 0.734375 +vt 0.265625 0.734375 +vt 0.265625 0.984375 +vt 0.40625 0.984375 +vt 0.546875 0.984375 +vt 0.40625 0.984375 +vt 0.40625 0.734375 +vt 0.546875 0.734375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o body +v 0.3125 1.125 0.1875 +v 0.3125 1.125 -0.5 +v 0.3125 0.25 0.1875 +v 0.3125 0.25 -0.5 +v -0.375 1.125 -0.5 +v -0.375 1.125 0.1875 +v -0.375 0.25 -0.5 +v -0.375 0.25 0.1875 +vt 0.171875 0.390625 +vt 0.34375 0.390625 +vt 0.34375 0.171875 +vt 0.171875 0.171875 +vt 0 0.390625 +vt 0.171875 0.390625 +vt 0.171875 0.171875 +vt 0 0.171875 +vt 0.515625 0.390625 +vt 0.6875 0.390625 +vt 0.6875 0.171875 +vt 0.515625 0.171875 +vt 0.34375 0.390625 +vt 0.515625 0.390625 +vt 0.515625 0.171875 +vt 0.34375 0.171875 +vt 0.34375 0.390625 +vt 0.171875 0.390625 +vt 0.171875 0.5625 +vt 0.34375 0.5625 +vt 0.515625 0.5625 +vt 0.34375 0.5625 +vt 0.34375 0.390625 +vt 0.515625 0.390625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o Head +v 0.125 1.3707881146238856 -0.6330909565283671 +v 0.125 0.8588180869432658 -0.991576229247771 +v 0.125 1.1198484237203028 -0.2747119371519333 +v 0.125 0.607878396039683 -0.6331972098713372 +v -0.1875 0.8588180869432658 -0.991576229247771 +v -0.1875 1.3707881146238856 -0.6330909565283671 +v -0.1875 0.607878396039683 -0.6331972098713372 +v -0.1875 1.1198484237203028 -0.2747119371519333 +vt 0.6875 0.125 +vt 0.765625 0.125 +vt 0.765625 0.015625 +vt 0.6875 0.015625 +vt 0.53125 0.125 +vt 0.6875 0.125 +vt 0.6875 0.015625 +vt 0.53125 0.015625 +vt 0.921875 0.125 +vt 1 0.125 +vt 1 0.015625 +vt 0.921875 0.015625 +vt 0.765625 0.125 +vt 0.921875 0.125 +vt 0.921875 0.015625 +vt 0.765625 0.015625 +vt 0.765625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.28125 +vt 0.765625 0.28125 +vt 0.84375 0.28125 +vt 0.765625 0.28125 +vt 0.765625 0.125 +vt 0.84375 0.125 +vn 0 -0.8191520442889917 -0.5735764363510463 +vn 1 0 0 +vn 0 0.8191520442889917 0.5735764363510463 +vn -1 0 0 +vn 0 0.5735764363510463 -0.8191520442889917 +vn 0 -0.5735764363510463 0.8191520442889917 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o Head +v 0.12437500000000001 1.625 -0.5 +v 0.12437500000000001 1.625 -0.625 +v 0.12437500000000001 1.1875 -0.5 +v 0.12437500000000001 1.1875 -0.625 +v -0.0006249999999999867 1.625 -0.625 +v -0.0006249999999999867 1.625 -0.5 +v -0.0006249999999999867 1.1875 -0.625 +v -0.0006249999999999867 1.1875 -0.5 +vt 0.21875 0.109375 +vt 0.25 0.109375 +vt 0.25 0 +vt 0.21875 0 +vt 0.1875 0.109375 +vt 0.21875 0.109375 +vt 0.21875 0 +vt 0.1875 0 +vt 0.28125 0.109375 +vt 0.3125 0.109375 +vt 0.3125 0 +vt 0.28125 0 +vt 0.25 0.109375 +vt 0.28125 0.109375 +vt 0.28125 0 +vt 0.25 0 +vt 0.25 0.109375 +vt 0.21875 0.109375 +vt 0.21875 0.140625 +vt 0.25 0.140625 +vt 0.28125 0.140625 +vt 0.25 0.140625 +vt 0.25 0.109375 +vt 0.28125 0.109375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o Head +v -0.06187500000000001 1.625 -0.5 +v -0.06187500000000001 1.625 -0.625 +v -0.06187500000000001 1.1875 -0.5 +v -0.06187500000000001 1.1875 -0.625 +v -0.186875 1.625 -0.625 +v -0.186875 1.625 -0.5 +v -0.186875 1.1875 -0.625 +v -0.186875 1.1875 -0.5 +vt 0.21875 0.109375 +vt 0.25 0.109375 +vt 0.25 0 +vt 0.21875 0 +vt 0.1875 0.109375 +vt 0.21875 0.109375 +vt 0.21875 0 +vt 0.1875 0 +vt 0.28125 0.109375 +vt 0.3125 0.109375 +vt 0.3125 0 +vt 0.28125 0 +vt 0.25 0.109375 +vt 0.28125 0.109375 +vt 0.28125 0 +vt 0.25 0 +vt 0.25 0.109375 +vt 0.21875 0.109375 +vt 0.21875 0.140625 +vt 0.25 0.140625 +vt 0.28125 0.140625 +vt 0.25 0.140625 +vt 0.25 0.109375 +vt 0.28125 0.109375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o Head +v -0.1875 1.3125 -0.5625 +v -0.1875 1.3125 -0.625 +v -0.1875 1.1875 -0.5625 +v -0.1875 1.1875 -0.625 +v -0.375 1.3125 -0.625 +v -0.375 1.3125 -0.5625 +v -0.375 1.1875 -0.625 +v -0.375 1.1875 -0.5625 +vt 0.09375 0.03125 +vt 0.046875 0.03125 +vt 0.046875 0 +vt 0.09375 0 +vt 0.109375 0.03125 +vt 0.09375 0.03125 +vt 0.09375 0 +vt 0.109375 0 +vt 0.15625 0.03125 +vt 0.109375 0.03125 +vt 0.109375 0 +vt 0.15625 0 +vt 0.046875 0.03125 +vt 0.03125 0.03125 +vt 0.03125 0 +vt 0.046875 0 +vt 0.046875 0.03125 +vt 0.09375 0.03125 +vt 0.09375 0.046875 +vt 0.046875 0.046875 +vt 0.09375 0.046875 +vt 0.140625 0.046875 +vt 0.140625 0.03125 +vt 0.09375 0.03125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o Head +v 0.3125 1.3125 -0.5625 +v 0.3125 1.3125 -0.625 +v 0.3125 1.1875 -0.5625 +v 0.3125 1.1875 -0.625 +v 0.125 1.3125 -0.625 +v 0.125 1.3125 -0.5625 +v 0.125 1.1875 -0.625 +v 0.125 1.1875 -0.5625 +vt 0.046875 0.03125 +vt 0.09375 0.03125 +vt 0.09375 0 +vt 0.046875 0 +vt 0.03125 0.03125 +vt 0.046875 0.03125 +vt 0.046875 0 +vt 0.03125 0 +vt 0.109375 0.03125 +vt 0.15625 0.03125 +vt 0.15625 0 +vt 0.109375 0 +vt 0.09375 0.03125 +vt 0.109375 0.03125 +vt 0.109375 0 +vt 0.09375 0 +vt 0.09375 0.03125 +vt 0.046875 0.03125 +vt 0.046875 0.046875 +vt 0.09375 0.046875 +vt 0.140625 0.046875 +vt 0.09375 0.046875 +vt 0.09375 0.03125 +vt 0.140625 0.03125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o Head +v -0.03125 0.8125 -0.5625 +v -0.03125 0.8125 -0.875 +v -0.03125 0.375 -0.5625 +v -0.03125 0.375 -0.875 +v -0.03125 0.8125 -0.875 +v -0.03125 0.8125 -0.5625 +v -0.03125 0.375 -0.875 +v -0.03125 0.375 -0.5625 +vt 0.4375 0.109375 +vt 0.4375 0.109375 +vt 0.4375 0 +vt 0.4375 0 +vt 0.359375 0.109375 +vt 0.4375 0.109375 +vt 0.4375 0 +vt 0.359375 0 +vt 0.515625 0.109375 +vt 0.515625 0.109375 +vt 0.515625 0 +vt 0.515625 0 +vt 0.4375 0.109375 +vt 0.515625 0.109375 +vt 0.515625 0 +vt 0.4375 0 +vt 0.4375 0.109375 +vt 0.4375 0.109375 +vt 0.4375 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0.109375 +vt 0.4375 0.109375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o HeadMain +v 0.125 1.3707881146238856 -0.6330909565283671 +v 0.125 0.8588180869432658 -0.991576229247771 +v 0.125 1.1198484237203028 -0.2747119371519333 +v 0.125 0.607878396039683 -0.6331972098713372 +v -0.1875 0.8588180869432658 -0.991576229247771 +v -0.1875 1.3707881146238856 -0.6330909565283671 +v -0.1875 0.607878396039683 -0.6331972098713372 +v -0.1875 1.1198484237203028 -0.2747119371519333 +vt 0.6875 0.125 +vt 0.765625 0.125 +vt 0.765625 0.015625 +vt 0.6875 0.015625 +vt 0.53125 0.125 +vt 0.6875 0.125 +vt 0.6875 0.015625 +vt 0.53125 0.015625 +vt 0.921875 0.125 +vt 1 0.125 +vt 1 0.015625 +vt 0.921875 0.015625 +vt 0.765625 0.125 +vt 0.921875 0.125 +vt 0.921875 0.015625 +vt 0.765625 0.015625 +vt 0.765625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.28125 +vt 0.765625 0.28125 +vt 0.84375 0.28125 +vt 0.765625 0.28125 +vt 0.765625 0.125 +vt 0.84375 0.125 +vn 0 -0.8191520442889917 -0.5735764363510463 +vn 1 0 0 +vn 0 0.8191520442889917 0.5735764363510463 +vn -1 0 0 +vn 0 0.5735764363510463 -0.8191520442889917 +vn 0 -0.5735764363510463 0.8191520442889917 +usemtl m_bd56fb3d-3403-c92f-d539-6df121464423 +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/guardian.obj b/prismarine-viewer/viewer/lib/entity/models/guardian.obj new file mode 100644 index 00000000..0addde29 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/guardian.obj @@ -0,0 +1,1015 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o head +v 0.375 0.875 0.5 +v 0.375 0.875 -0.5 +v 0.375 0.125 0.5 +v 0.375 0.125 -0.5 +v -0.375 0.875 -0.5 +v -0.375 0.875 0.5 +v -0.375 0.125 -0.5 +v -0.375 0.125 0.5 +vt 0.25 0.75 +vt 0.4375 0.75 +vt 0.4375 0.5625 +vt 0.25 0.5625 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 0.5625 +vt 0 0.5625 +vt 0.6875 0.75 +vt 0.875 0.75 +vt 0.875 0.5625 +vt 0.6875 0.5625 +vt 0.4375 0.75 +vt 0.6875 0.75 +vt 0.6875 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.75 +vt 0.25 0.75 +vt 0.25 1 +vt 0.4375 1 +vt 0.625 1 +vt 0.4375 1 +vt 0.4375 0.75 +vt 0.625 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o head +v 0.5 0.875 0.375 +v 0.5 0.875 -0.375 +v 0.5 0.125 0.375 +v 0.5 0.125 -0.375 +v 0.375 0.875 -0.375 +v 0.375 0.875 0.375 +v 0.375 0.125 -0.375 +v 0.375 0.125 0.375 +vt 0.1875 0.375 +vt 0.21875 0.375 +vt 0.21875 0.1875 +vt 0.1875 0.1875 +vt 0 0.375 +vt 0.1875 0.375 +vt 0.1875 0.1875 +vt 0 0.1875 +vt 0.40625 0.375 +vt 0.4375 0.375 +vt 0.4375 0.1875 +vt 0.40625 0.1875 +vt 0.21875 0.375 +vt 0.40625 0.375 +vt 0.40625 0.1875 +vt 0.21875 0.1875 +vt 0.21875 0.375 +vt 0.1875 0.375 +vt 0.1875 0.5625 +vt 0.21875 0.5625 +vt 0.25 0.5625 +vt 0.21875 0.5625 +vt 0.21875 0.375 +vt 0.25 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v -0.375 0.875 0.375 +v -0.375 0.875 -0.375 +v -0.375 0.125 0.375 +v -0.375 0.125 -0.375 +v -0.5 0.875 -0.375 +v -0.5 0.875 0.375 +v -0.5 0.125 -0.375 +v -0.5 0.125 0.375 +vt 0.21875 0.375 +vt 0.1875 0.375 +vt 0.1875 0.1875 +vt 0.21875 0.1875 +vt 0.40625 0.375 +vt 0.21875 0.375 +vt 0.21875 0.1875 +vt 0.40625 0.1875 +vt 0.4375 0.375 +vt 0.40625 0.375 +vt 0.40625 0.1875 +vt 0.4375 0.1875 +vt 0.1875 0.375 +vt 0 0.375 +vt 0 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.375 +vt 0.21875 0.375 +vt 0.21875 0.5625 +vt 0.1875 0.5625 +vt 0.21875 0.5625 +vt 0.25 0.5625 +vt 0.25 0.375 +vt 0.21875 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.375 1 0.375 +v 0.375 1 -0.375 +v 0.375 0.875 0.375 +v 0.375 0.875 -0.375 +v -0.375 1 -0.375 +v -0.375 1 0.375 +v -0.375 0.875 -0.375 +v -0.375 0.875 0.375 +vt 0.625 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0.15625 +vt 0.625 0.15625 +vt 0.8125 0.1875 +vt 0.625 0.1875 +vt 0.625 0.15625 +vt 0.8125 0.15625 +vt 1 0.1875 +vt 0.8125 0.1875 +vt 0.8125 0.15625 +vt 1 0.15625 +vt 0.4375 0.1875 +vt 0.25 0.1875 +vt 0.25 0.15625 +vt 0.4375 0.15625 +vt 0.4375 0.1875 +vt 0.625 0.1875 +vt 0.625 0.375 +vt 0.4375 0.375 +vt 0.625 0.375 +vt 0.8125 0.375 +vt 0.8125 0.1875 +vt 0.625 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o head +v 0.375 0.125 0.375 +v 0.375 0.125 -0.375 +v 0.375 0 0.375 +v 0.375 0 -0.375 +v -0.375 0.125 -0.375 +v -0.375 0.125 0.375 +v -0.375 0 -0.375 +v -0.375 0 0.375 +vt 0.625 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0.15625 +vt 0.625 0.15625 +vt 0.8125 0.1875 +vt 0.625 0.1875 +vt 0.625 0.15625 +vt 0.8125 0.15625 +vt 1 0.1875 +vt 0.8125 0.1875 +vt 0.8125 0.15625 +vt 1 0.15625 +vt 0.4375 0.1875 +vt 0.25 0.1875 +vt 0.25 0.15625 +vt 0.4375 0.15625 +vt 0.4375 0.1875 +vt 0.625 0.1875 +vt 0.625 0.375 +vt 0.4375 0.375 +vt 0.625 0.375 +vt 0.8125 0.375 +vt 0.8125 0.1875 +vt 0.625 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o eye +v 0.0625 0.5625 -0.453125 +v 0.0625 0.5625 -0.515625 +v 0.0625 0.4375 -0.453125 +v 0.0625 0.4375 -0.515625 +v -0.0625 0.5625 -0.515625 +v -0.0625 0.5625 -0.453125 +v -0.0625 0.4375 -0.515625 +v -0.0625 0.4375 -0.453125 +vt 0.140625 0.984375 +vt 0.171875 0.984375 +vt 0.171875 0.953125 +vt 0.140625 0.953125 +vt 0.125 0.984375 +vt 0.140625 0.984375 +vt 0.140625 0.953125 +vt 0.125 0.953125 +vt 0.1875 0.984375 +vt 0.21875 0.984375 +vt 0.21875 0.953125 +vt 0.1875 0.953125 +vt 0.171875 0.984375 +vt 0.1875 0.984375 +vt 0.1875 0.953125 +vt 0.171875 0.953125 +vt 0.171875 0.984375 +vt 0.140625 0.984375 +vt 0.140625 1 +vt 0.171875 1 +vt 0.203125 1 +vt 0.171875 1 +vt 0.171875 0.984375 +vt 0.203125 0.984375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o tailpart0 +v 0.125 0.625 1 +v 0.125 0.625 0.5 +v 0.125 0.375 1 +v 0.125 0.375 0.5 +v -0.125 0.625 0.5 +v -0.125 0.625 1 +v -0.125 0.375 0.5 +v -0.125 0.375 1 +vt 0.75 0.875 +vt 0.8125 0.875 +vt 0.8125 0.8125 +vt 0.75 0.8125 +vt 0.625 0.875 +vt 0.75 0.875 +vt 0.75 0.8125 +vt 0.625 0.8125 +vt 0.9375 0.875 +vt 1 0.875 +vt 1 0.8125 +vt 0.9375 0.8125 +vt 0.8125 0.875 +vt 0.9375 0.875 +vt 0.9375 0.8125 +vt 0.8125 0.8125 +vt 0.8125 0.875 +vt 0.75 0.875 +vt 0.75 1 +vt 0.8125 1 +vt 0.875 1 +vt 0.8125 1 +vt 0.8125 0.875 +vt 0.875 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o tailpart1 +v 0.09375 0.625 1.4375 +v 0.09375 0.625 1 +v 0.09375 0.4375 1.4375 +v 0.09375 0.4375 1 +v -0.09375 0.625 1 +v -0.09375 0.625 1.4375 +v -0.09375 0.4375 1 +v -0.09375 0.4375 1.4375 +vt 0.109375 0.046875 +vt 0.15625 0.046875 +vt 0.15625 0 +vt 0.109375 0 +vt 0 0.046875 +vt 0.109375 0.046875 +vt 0.109375 0 +vt 0 0 +vt 0.265625 0.046875 +vt 0.3125 0.046875 +vt 0.3125 0 +vt 0.265625 0 +vt 0.15625 0.046875 +vt 0.265625 0.046875 +vt 0.265625 0 +vt 0.15625 0 +vt 0.15625 0.046875 +vt 0.109375 0.046875 +vt 0.109375 0.15625 +vt 0.15625 0.15625 +vt 0.203125 0.15625 +vt 0.15625 0.15625 +vt 0.15625 0.046875 +vt 0.203125 0.046875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o tailpart2 +v 0.0625 0.625 1.8125 +v 0.0625 0.625 1.4375 +v 0.0625 0.5 1.8125 +v 0.0625 0.5 1.4375 +v -0.0625 0.625 1.4375 +v -0.0625 0.625 1.8125 +v -0.0625 0.5 1.4375 +v -0.0625 0.5 1.8125 +vt 0.734375 0.40625 +vt 0.765625 0.40625 +vt 0.765625 0.375 +vt 0.734375 0.375 +vt 0.640625 0.40625 +vt 0.734375 0.40625 +vt 0.734375 0.375 +vt 0.640625 0.375 +vt 0.859375 0.40625 +vt 0.890625 0.40625 +vt 0.890625 0.375 +vt 0.859375 0.375 +vt 0.765625 0.40625 +vt 0.859375 0.40625 +vt 0.859375 0.375 +vt 0.765625 0.375 +vt 0.765625 0.40625 +vt 0.734375 0.40625 +vt 0.734375 0.5 +vt 0.765625 0.5 +vt 0.796875 0.5 +vt 0.765625 0.5 +vt 0.765625 0.40625 +vt 0.796875 0.40625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o tailpart2 +v 0 0.84375 2.1875 +v 0 0.84375 1.625 +v 0 0.28125 2.1875 +v 0 0.28125 1.625 +v -0.0625 0.84375 1.625 +v -0.0625 0.84375 2.1875 +v -0.0625 0.28125 1.625 +v -0.0625 0.28125 2.1875 +vt 0.53125 0.5625 +vt 0.546875 0.5625 +vt 0.546875 0.421875 +vt 0.53125 0.421875 +vt 0.390625 0.5625 +vt 0.53125 0.5625 +vt 0.53125 0.421875 +vt 0.390625 0.421875 +vt 0.6875 0.5625 +vt 0.703125 0.5625 +vt 0.703125 0.421875 +vt 0.6875 0.421875 +vt 0.546875 0.5625 +vt 0.6875 0.5625 +vt 0.6875 0.421875 +vt 0.546875 0.421875 +vt 0.546875 0.5625 +vt 0.53125 0.5625 +vt 0.53125 0.703125 +vt 0.546875 0.703125 +vt 0.5625 0.703125 +vt 0.546875 0.703125 +vt 0.546875 0.5625 +vt 0.5625 0.5625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o spikepart0 +v -0.6518640639063484 1.2458835005110844 0.0625 +v -0.6518640639063484 1.2458835005110844 -0.0625 +v -0.25411649948891535 0.8481359360936516 0.0625 +v -0.25411649948891535 0.8481359360936516 -0.0625 +v -0.7402524115546669 1.157495152862766 -0.0625 +v -0.7402524115546669 1.157495152862766 0.0625 +v -0.34250484713723384 0.7597475884453331 -0.0625 +v -0.34250484713723384 0.7597475884453331 0.0625 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 0 0 -1 +vn 0.7071067811865475 0.7071067811865476 0 +vn 0 0 1 +vn -0.7071067811865475 -0.7071067811865476 0 +vn -0.7071067811865476 0.7071067811865475 0 +vn 0.7071067811865476 -0.7071067811865475 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o spikepart1 +v 0.7402524115546669 1.157495152862766 0.0625 +v 0.7402524115546669 1.157495152862766 -0.0625 +v 0.34250484713723384 0.7597475884453331 0.0625 +v 0.34250484713723384 0.7597475884453331 -0.0625 +v 0.6518640639063484 1.2458835005110844 -0.0625 +v 0.6518640639063484 1.2458835005110844 0.0625 +v 0.25411649948891535 0.8481359360936516 -0.0625 +v 0.25411649948891535 0.8481359360936516 0.0625 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 0 0 -1 +vn 0.7071067811865475 -0.7071067811865476 0 +vn 0 0 1 +vn -0.7071067811865475 0.7071067811865476 0 +vn 0.7071067811865476 0.7071067811865475 0 +vn -0.7071067811865476 -0.7071067811865475 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o spikepart2 +v 0.0625 1.2458835005110844 -0.6518640639063484 +v 0.0625 1.157495152862766 -0.7402524115546669 +v 0.0625 0.8481359360936516 -0.25411649948891535 +v 0.0625 0.7597475884453331 -0.34250484713723384 +v -0.0625 1.157495152862766 -0.7402524115546669 +v -0.0625 1.2458835005110844 -0.6518640639063484 +v -0.0625 0.7597475884453331 -0.34250484713723384 +v -0.0625 0.8481359360936516 -0.25411649948891535 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 0 -0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 -0.7071067811865476 +vn 0 -0.7071067811865475 0.7071067811865476 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 +o spikepart3 +v 0.0625 1.1464466094067263 0.7513009550107066 +v 0.0625 1.2348349570550448 0.6629126073623883 +v 0.0625 0.7486990449892934 0.3535533905932735 +v 0.0625 0.8370873926376117 0.26516504294495524 +v -0.0625 1.2348349570550448 0.6629126073623883 +v -0.0625 1.1464466094067263 0.7513009550107066 +v -0.0625 0.8370873926376117 0.26516504294495524 +v -0.0625 0.7486990449892934 0.3535533905932735 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 0 0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 -0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 0.7071067811865476 +vn 0 -0.7071067811865475 -0.7071067811865476 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 108/316/79 111/315/79 109/314/79 106/313/79 +f 107/320/80 108/319/80 106/318/80 105/317/80 +f 112/324/81 107/323/81 105/322/81 110/321/81 +f 111/328/82 112/327/82 110/326/82 109/325/82 +f 110/332/83 105/331/83 106/330/83 109/329/83 +f 111/336/84 108/335/84 107/334/84 112/333/84 +o spikepart4 +v -0.7623494984667472 -0.16833006186201072 0.0625 +v -0.7623494984667472 -0.16833006186201072 -0.0625 +v -0.36460193404931407 0.22941750255542193 0.0625 +v -0.36460193404931407 0.22941750255542193 -0.0625 +v -0.6739611508184287 -0.256718409510329 -0.0625 +v -0.6739611508184287 -0.256718409510329 0.0625 +v -0.2762135864009956 0.14102915490710366 -0.0625 +v -0.2762135864009956 0.14102915490710366 0.0625 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 0 0 -1 +vn -0.7071067811865475 0.7071067811865477 0 +vn 0 0 1 +vn 0.7071067811865475 -0.7071067811865477 0 +vn -0.7071067811865477 -0.7071067811865475 0 +vn 0.7071067811865477 0.7071067811865475 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 116/340/85 119/339/85 117/338/85 114/337/85 +f 115/344/86 116/343/86 114/342/86 113/341/86 +f 120/348/87 115/347/87 113/346/87 118/345/87 +f 119/352/88 120/351/88 118/350/88 117/349/88 +f 118/356/89 113/355/89 114/354/89 117/353/89 +f 119/360/90 116/359/90 115/358/90 120/357/90 +o spikepart5 +v 0.6739611508184287 -0.256718409510329 0.0625 +v 0.6739611508184287 -0.256718409510329 -0.0625 +v 0.2762135864009956 0.14102915490710366 0.0625 +v 0.2762135864009956 0.14102915490710366 -0.0625 +v 0.7623494984667472 -0.16833006186201072 -0.0625 +v 0.7623494984667472 -0.16833006186201072 0.0625 +v 0.36460193404931407 0.22941750255542193 -0.0625 +v 0.36460193404931407 0.22941750255542193 0.0625 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 0 0 -1 +vn -0.7071067811865475 -0.7071067811865477 0 +vn 0 0 1 +vn 0.7071067811865475 0.7071067811865477 0 +vn 0.7071067811865477 -0.7071067811865475 0 +vn -0.7071067811865477 0.7071067811865475 0 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 124/364/91 127/363/91 125/362/91 122/361/91 +f 123/368/92 124/367/92 122/366/92 121/365/92 +f 128/372/93 123/371/93 121/370/93 126/369/93 +f 127/376/94 128/375/94 126/374/94 125/373/94 +f 126/380/95 121/379/95 122/378/95 125/377/95 +f 127/384/96 124/383/96 123/382/96 128/381/96 +o spikepart6 +v 0.0625 -0.21252423568616985 -0.8065436722909063 +v 0.0625 -0.30091258333448856 -0.7181553246425878 +v 0.0625 0.18522332873126324 -0.4087961078734732 +v 0.0625 0.09683498108294453 -0.3204077602251547 +v -0.0625 -0.30091258333448856 -0.7181553246425878 +v -0.0625 -0.21252423568616985 -0.8065436722909063 +v -0.0625 0.09683498108294453 -0.3204077602251547 +v -0.0625 0.18522332873126324 -0.4087961078734732 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 0 -0.7071067811865477 0.7071067811865475 +vn 1 0 0 +vn 0 0.7071067811865477 -0.7071067811865475 +vn -1 0 0 +vn 0 -0.7071067811865475 -0.7071067811865477 +vn 0 0.7071067811865475 0.7071067811865477 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 132/388/97 135/387/97 133/386/97 130/385/97 +f 131/392/98 132/391/98 130/390/98 129/389/98 +f 136/396/99 131/395/99 129/394/99 134/393/99 +f 135/400/100 136/399/100 134/398/100 133/397/100 +f 134/404/101 129/403/101 130/402/101 133/401/101 +f 135/408/102 132/407/102 131/406/102 136/405/102 +o spikepart7 +v 0.0625 -0.256718409510329 0.6739611508184287 +v 0.0625 -0.16833006186201072 0.7623494984667472 +v 0.0625 0.14102915490710366 0.2762135864009956 +v 0.0625 0.22941750255542193 0.36460193404931407 +v -0.0625 -0.16833006186201072 0.7623494984667472 +v -0.0625 -0.256718409510329 0.6739611508184287 +v -0.0625 0.22941750255542193 0.36460193404931407 +v -0.0625 0.14102915490710366 0.2762135864009956 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 0 0.7071067811865477 0.7071067811865475 +vn 1 0 0 +vn 0 -0.7071067811865477 -0.7071067811865475 +vn -1 0 0 +vn 0 -0.7071067811865475 0.7071067811865477 +vn 0 0.7071067811865475 -0.7071067811865477 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 140/412/103 143/411/103 141/410/103 138/409/103 +f 139/416/104 140/415/104 138/414/104 137/413/104 +f 144/420/105 139/419/105 137/418/105 142/417/105 +f 143/424/106 144/423/106 142/422/106 141/421/106 +f 142/428/107 137/427/107 138/426/107 141/425/107 +f 143/432/108 140/431/108 139/430/108 144/429/108 +o spikepart8 +v -0.7292038680986273 0.5625000000000004 -0.8175922157469457 +v -0.7292038680986275 0.43750000000000044 -0.8175922157469457 +v -0.33145630368119416 0.5625000000000002 -0.41984465132951265 +v -0.3314563036811944 0.4375000000000002 -0.41984465132951265 +v -0.8175922157469457 0.43750000000000044 -0.7292038680986275 +v -0.8175922157469455 0.5625000000000004 -0.7292038680986275 +v -0.41984465132951265 0.4375000000000002 -0.3314563036811944 +v -0.41984465132951243 0.5625000000000002 -0.3314563036811944 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn -2.355138688025663e-16 -1 -2.3551386880256634e-16 +vn 0.7071067811865476 7.850462293418876e-17 -0.7071067811865476 +vn 2.355138688025663e-16 1 2.3551386880256634e-16 +vn -0.7071067811865476 -7.850462293418876e-17 0.7071067811865476 +vn -0.7071067811865475 2.355138688025663e-16 -0.7071067811865476 +vn 0.7071067811865475 -2.355138688025663e-16 0.7071067811865476 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 148/436/109 151/435/109 149/434/109 146/433/109 +f 147/440/110 148/439/110 146/438/110 145/437/110 +f 152/444/111 147/443/111 145/442/111 150/441/111 +f 151/448/112 152/447/112 150/446/112 149/445/112 +f 150/452/113 145/451/113 146/450/113 149/449/113 +f 151/456/114 148/455/114 147/454/114 152/453/114 +o spikepart8 +v 0.8175922157469455 0.5625000000000004 -0.7292038680986275 +v 0.8175922157469457 0.43750000000000044 -0.7292038680986275 +v 0.41984465132951243 0.5625000000000002 -0.3314563036811944 +v 0.41984465132951265 0.4375000000000002 -0.3314563036811944 +v 0.7292038680986275 0.43750000000000044 -0.8175922157469457 +v 0.7292038680986273 0.5625000000000004 -0.8175922157469457 +v 0.3314563036811944 0.4375000000000002 -0.41984465132951265 +v 0.33145630368119416 0.5625000000000002 -0.41984465132951265 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 2.355138688025663e-16 -1 -2.3551386880256634e-16 +vn 0.7071067811865476 -7.850462293418876e-17 0.7071067811865476 +vn -2.355138688025663e-16 1 2.3551386880256634e-16 +vn -0.7071067811865476 7.850462293418876e-17 -0.7071067811865476 +vn 0.7071067811865475 2.355138688025663e-16 -0.7071067811865476 +vn -0.7071067811865475 -2.355138688025663e-16 0.7071067811865476 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 156/460/115 159/459/115 157/458/115 154/457/115 +f 155/464/116 156/463/116 154/462/116 153/461/116 +f 160/468/117 155/467/117 153/466/117 158/465/117 +f 159/472/118 160/471/118 158/470/118 157/469/118 +f 158/476/119 153/475/119 154/474/119 157/473/119 +f 159/480/120 156/479/120 155/478/120 160/477/120 +o spikepart8 +v -0.8175922157469455 0.5625 0.7292038680986273 +v -0.8175922157469457 0.4375000000000002 0.7292038680986273 +v -0.41984465132951243 0.5625 0.33145630368119416 +v -0.41984465132951265 0.4375 0.33145630368119416 +v -0.7292038680986275 0.4375000000000002 0.8175922157469455 +v -0.7292038680986273 0.5625 0.8175922157469455 +v -0.3314563036811944 0.4375 0.41984465132951243 +v -0.33145630368119416 0.5625 0.41984465132951243 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn -1.5700924586837752e-16 -1 1.570092458683775e-16 +vn -0.7071067811865475 7.850462293418875e-17 -0.7071067811865476 +vn 1.5700924586837752e-16 1 -1.570092458683775e-16 +vn 0.7071067811865475 -7.850462293418875e-17 0.7071067811865476 +vn -0.7071067811865476 7.850462293418876e-17 0.7071067811865475 +vn 0.7071067811865476 -7.850462293418876e-17 -0.7071067811865475 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 164/484/121 167/483/121 165/482/121 162/481/121 +f 163/488/122 164/487/122 162/486/122 161/485/122 +f 168/492/123 163/491/123 161/490/123 166/489/123 +f 167/496/124 168/495/124 166/494/124 165/493/124 +f 166/500/125 161/499/125 162/498/125 165/497/125 +f 167/504/126 164/503/126 163/502/126 168/501/126 +o spikepart8 +v 0.7292038680986273 0.5625 0.8175922157469455 +v 0.7292038680986275 0.4375000000000002 0.8175922157469455 +v 0.33145630368119416 0.5625 0.41984465132951243 +v 0.3314563036811944 0.4375 0.41984465132951243 +v 0.8175922157469457 0.4375000000000002 0.7292038680986273 +v 0.8175922157469455 0.5625 0.7292038680986273 +v 0.41984465132951265 0.4375 0.33145630368119416 +v 0.41984465132951243 0.5625 0.33145630368119416 +vt 0.03125 0.96875 +vt 0.0625 0.96875 +vt 0.0625 0.828125 +vt 0.03125 0.828125 +vt 0 0.96875 +vt 0.03125 0.96875 +vt 0.03125 0.828125 +vt 0 0.828125 +vt 0.09375 0.96875 +vt 0.125 0.96875 +vt 0.125 0.828125 +vt 0.09375 0.828125 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vt 0.09375 0.828125 +vt 0.0625 0.828125 +vt 0.0625 0.96875 +vt 0.03125 0.96875 +vt 0.03125 1 +vt 0.0625 1 +vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.96875 +vt 0.09375 0.96875 +vn 1.5700924586837752e-16 -1 1.570092458683775e-16 +vn -0.7071067811865475 -7.850462293418875e-17 0.7071067811865476 +vn -1.5700924586837752e-16 1 -1.570092458683775e-16 +vn 0.7071067811865475 7.850462293418875e-17 -0.7071067811865476 +vn 0.7071067811865476 7.850462293418876e-17 0.7071067811865475 +vn -0.7071067811865476 -7.850462293418876e-17 -0.7071067811865475 +usemtl m_18bfdc93-cc40-fa86-b211-05ac08cf8255 +f 172/508/127 175/507/127 173/506/127 170/505/127 +f 171/512/128 172/511/128 170/510/128 169/509/128 +f 176/516/129 171/515/129 169/514/129 174/513/129 +f 175/520/130 176/519/130 174/518/130 173/517/130 +f 174/524/131 169/523/131 170/522/131 173/521/131 +f 175/528/132 172/527/132 171/526/132 176/525/132 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/horse.obj b/prismarine-viewer/viewer/lib/entity/models/horse.obj new file mode 100644 index 00000000..bb08e913 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/horse.obj @@ -0,0 +1,1061 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o Body +v 0.3125 1.3125 0.6875 +v 0.3125 1.3125 -0.6875 +v 0.3125 0.6875 0.6875 +v 0.3125 0.6875 -0.6875 +v -0.3125 1.3125 -0.6875 +v -0.3125 1.3125 0.6875 +v -0.3125 0.6875 -0.6875 +v -0.3125 0.6875 0.6875 +vt 0.34375 0.15625 +vt 0.5 0.15625 +vt 0.5 0 +vt 0.34375 0 +vt 0 0.15625 +vt 0.34375 0.15625 +vt 0.34375 0 +vt 0 0 +vt 0.84375 0.15625 +vt 1 0.15625 +vt 1 0 +vt 0.84375 0 +vt 0.5 0.15625 +vt 0.84375 0.15625 +vt 0.84375 0 +vt 0.5 0 +vt 0.5 0.15625 +vt 0.34375 0.15625 +vt 0.34375 0.5 +vt 0.5 0.5 +vt 0.65625 0.5 +vt 0.5 0.5 +vt 0.5 0.15625 +vt 0.65625 0.15625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o TailA +v 0.09375 1.3125 0.7957531754730547 +v 0.09375 1.1875 0.5792468245269451 +v 0.09375 0.5547277716886161 1.2332531754730547 +v 0.09375 0.4297277716886161 1.0167468245269449 +v -0.09375 1.1875 0.5792468245269451 +v -0.09375 1.3125 0.7957531754730547 +v -0.09375 0.4297277716886161 1.0167468245269449 +v -0.09375 0.5547277716886161 1.2332531754730547 +vt 0.71875 0.375 +vt 0.765625 0.375 +vt 0.765625 0.15625 +vt 0.71875 0.15625 +vt 0.65625 0.375 +vt 0.71875 0.375 +vt 0.71875 0.15625 +vt 0.65625 0.15625 +vt 0.828125 0.375 +vt 0.875 0.375 +vt 0.875 0.15625 +vt 0.828125 0.15625 +vt 0.765625 0.375 +vt 0.828125 0.375 +vt 0.828125 0.15625 +vt 0.765625 0.15625 +vt 0.765625 0.375 +vt 0.71875 0.375 +vt 0.71875 0.4375 +vt 0.765625 0.4375 +vt 0.8125 0.4375 +vt 0.765625 0.4375 +vt 0.765625 0.375 +vt 0.8125 0.375 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o Leg1A +v -0.0625 0.6875 0.6875 +v -0.0625 0.6875 0.4375 +v -0.0625 0 0.6875 +v -0.0625 0 0.4375 +v -0.3125 0.6875 0.4375 +v -0.3125 0.6875 0.6875 +v -0.3125 0 0.4375 +v -0.3125 0 0.6875 +vt 0.875 0.609375 +vt 0.8125 0.609375 +vt 0.8125 0.4375 +vt 0.875 0.4375 +vt 0.9375 0.609375 +vt 0.875 0.609375 +vt 0.875 0.4375 +vt 0.9375 0.4375 +vt 1 0.609375 +vt 0.9375 0.609375 +vt 0.9375 0.4375 +vt 1 0.4375 +vt 0.8125 0.609375 +vt 0.75 0.609375 +vt 0.75 0.4375 +vt 0.8125 0.4375 +vt 0.8125 0.609375 +vt 0.875 0.609375 +vt 0.875 0.671875 +vt 0.8125 0.671875 +vt 0.875 0.671875 +vt 0.9375 0.671875 +vt 0.9375 0.609375 +vt 0.875 0.609375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o Leg2A +v 0.3125 0.6875 0.6875 +v 0.3125 0.6875 0.4375 +v 0.3125 0 0.6875 +v 0.3125 0 0.4375 +v 0.0625 0.6875 0.4375 +v 0.0625 0.6875 0.6875 +v 0.0625 0 0.4375 +v 0.0625 0 0.6875 +vt 0.8125 0.609375 +vt 0.875 0.609375 +vt 0.875 0.4375 +vt 0.8125 0.4375 +vt 0.75 0.609375 +vt 0.8125 0.609375 +vt 0.8125 0.4375 +vt 0.75 0.4375 +vt 0.9375 0.609375 +vt 1 0.609375 +vt 1 0.4375 +vt 0.9375 0.4375 +vt 0.875 0.609375 +vt 0.9375 0.609375 +vt 0.9375 0.4375 +vt 0.875 0.4375 +vt 0.875 0.609375 +vt 0.8125 0.609375 +vt 0.8125 0.671875 +vt 0.875 0.671875 +vt 0.9375 0.671875 +vt 0.875 0.671875 +vt 0.875 0.609375 +vt 0.9375 0.609375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o Leg3A +v -0.0625 0.6875 -0.4375 +v -0.0625 0.6875 -0.6875 +v -0.0625 0 -0.4375 +v -0.0625 0 -0.6875 +v -0.3125 0.6875 -0.6875 +v -0.3125 0.6875 -0.4375 +v -0.3125 0 -0.6875 +v -0.3125 0 -0.4375 +vt 0.875 0.609375 +vt 0.8125 0.609375 +vt 0.8125 0.4375 +vt 0.875 0.4375 +vt 0.9375 0.609375 +vt 0.875 0.609375 +vt 0.875 0.4375 +vt 0.9375 0.4375 +vt 1 0.609375 +vt 0.9375 0.609375 +vt 0.9375 0.4375 +vt 1 0.4375 +vt 0.8125 0.609375 +vt 0.75 0.609375 +vt 0.75 0.4375 +vt 0.8125 0.4375 +vt 0.8125 0.609375 +vt 0.875 0.609375 +vt 0.875 0.671875 +vt 0.8125 0.671875 +vt 0.875 0.671875 +vt 0.9375 0.671875 +vt 0.9375 0.609375 +vt 0.875 0.609375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o Leg4A +v 0.3125 0.6875 -0.4375 +v 0.3125 0.6875 -0.6875 +v 0.3125 0 -0.4375 +v 0.3125 0 -0.6875 +v 0.0625 0.6875 -0.6875 +v 0.0625 0.6875 -0.4375 +v 0.0625 0 -0.6875 +v 0.0625 0 -0.4375 +vt 0.8125 0.609375 +vt 0.875 0.609375 +vt 0.875 0.4375 +vt 0.8125 0.4375 +vt 0.75 0.609375 +vt 0.8125 0.609375 +vt 0.8125 0.4375 +vt 0.75 0.4375 +vt 0.9375 0.609375 +vt 1 0.609375 +vt 1 0.4375 +vt 0.9375 0.4375 +vt 0.875 0.609375 +vt 0.9375 0.609375 +vt 0.9375 0.4375 +vt 0.875 0.4375 +vt 0.875 0.609375 +vt 0.8125 0.609375 +vt 0.8125 0.671875 +vt 0.875 0.671875 +vt 0.9375 0.671875 +vt 0.875 0.671875 +vt 0.875 0.609375 +vt 0.9375 0.609375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o Head +v 0.1875 2.051882938682637 -0.7896234122634724 +v 0.1875 1.833132938682637 -1.1685095264191645 +v 0.1875 1.78125 -0.6333734122634727 +v 0.1875 1.5625 -1.0122595264191645 +v -0.1875 1.833132938682637 -1.1685095264191645 +v -0.1875 2.051882938682637 -0.7896234122634724 +v -0.1875 1.5625 -1.0122595264191645 +v -0.1875 1.78125 -0.6333734122634727 +vt 0.109375 0.6875 +vt 0.203125 0.6875 +vt 0.203125 0.609375 +vt 0.109375 0.609375 +vt 0 0.6875 +vt 0.109375 0.6875 +vt 0.109375 0.609375 +vt 0 0.609375 +vt 0.3125 0.6875 +vt 0.40625 0.6875 +vt 0.40625 0.609375 +vt 0.3125 0.609375 +vt 0.203125 0.6875 +vt 0.3125 0.6875 +vt 0.3125 0.609375 +vt 0.203125 0.609375 +vt 0.203125 0.6875 +vt 0.109375 0.6875 +vt 0.109375 0.796875 +vt 0.203125 0.796875 +vt 0.296875 0.796875 +vt 0.203125 0.796875 +vt 0.203125 0.6875 +vt 0.296875 0.6875 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o UMouth +v 0.125 1.833132938682637 -1.1685095264191645 +v 0.125 1.676882938682637 -1.4391424651018014 +v 0.125 1.5625 -1.0122595264191645 +v 0.125 1.40625 -1.2828924651018019 +v -0.125 1.676882938682637 -1.4391424651018014 +v -0.125 1.833132938682637 -1.1685095264191645 +v -0.125 1.40625 -1.2828924651018019 +v -0.125 1.5625 -1.0122595264191645 +vt 0.078125 0.53125 +vt 0.140625 0.53125 +vt 0.140625 0.453125 +vt 0.078125 0.453125 +vt 0 0.53125 +vt 0.078125 0.53125 +vt 0.078125 0.453125 +vt 0 0.453125 +vt 0.21875 0.53125 +vt 0.28125 0.53125 +vt 0.28125 0.453125 +vt 0.21875 0.453125 +vt 0.140625 0.53125 +vt 0.21875 0.53125 +vt 0.21875 0.453125 +vt 0.140625 0.453125 +vt 0.140625 0.53125 +vt 0.078125 0.53125 +vt 0.078125 0.609375 +vt 0.140625 0.609375 +vt 0.203125 0.609375 +vt 0.140625 0.609375 +vt 0.140625 0.53125 +vt 0.203125 0.53125 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o Ear1 +v -0.06465012057680164 2.1600077984998522 -0.8465349149312555 +v -0.06192650361593727 2.1288767141844853 -0.9006615026677829 +v -0.050497791707081574 1.9982459393130734 -0.7527849149312555 +v -0.04777417474621726 1.9671148549977064 -0.8069115026677829 +v -0.1864508408774055 2.117982246341028 -0.9006615026677829 +v -0.1891744578382698 2.149113330656395 -0.8465349149312555 +v -0.17229851200768548 1.9562203871542492 -0.8069115026677829 +v -0.1750221289685498 1.987351471469616 -0.7527849149312555 +vt 0.34375 0.734375 +vt 0.3125 0.734375 +vt 0.3125 0.6875 +vt 0.34375 0.6875 +vt 0.359375 0.734375 +vt 0.34375 0.734375 +vt 0.34375 0.6875 +vt 0.359375 0.6875 +vt 0.390625 0.734375 +vt 0.359375 0.734375 +vt 0.359375 0.6875 +vt 0.390625 0.6875 +vt 0.3125 0.734375 +vt 0.296875 0.734375 +vt 0.296875 0.6875 +vt 0.3125 0.6875 +vt 0.3125 0.734375 +vt 0.34375 0.734375 +vt 0.34375 0.75 +vt 0.3125 0.75 +vt 0.34375 0.75 +vt 0.375 0.75 +vt 0.375 0.734375 +vt 0.34375 0.734375 +vn 0.0435778713738291 -0.4980973490458729 -0.8660254037844388 +vn 0.9961946980917455 0.0871557427476582 -1.3877787807814457e-17 +vn -0.0435778713738291 0.4980973490458729 0.8660254037844388 +vn -0.9961946980917455 -0.0871557427476582 1.3877787807814457e-17 +vn -0.07547908730517335 0.862729915662821 -0.5 +vn 0.07547908730517335 -0.862729915662821 0.5 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o Ear2 +v 0.1891744578382698 2.149113330656395 -0.8465349149312555 +v 0.1864508408774055 2.117982246341028 -0.9006615026677829 +v 0.17502212896854985 1.987351471469616 -0.7527849149312555 +v 0.17229851200768542 1.9562203871542492 -0.8069115026677829 +v 0.06192650361593732 2.1288767141844853 -0.9006615026677829 +v 0.06465012057680164 2.1600077984998522 -0.8465349149312555 +v 0.04777417474621726 1.9671148549977064 -0.8069115026677829 +v 0.050497791707081574 1.9982459393130734 -0.7527849149312555 +vt 0.3125 0.734375 +vt 0.34375 0.734375 +vt 0.34375 0.6875 +vt 0.3125 0.6875 +vt 0.296875 0.734375 +vt 0.3125 0.734375 +vt 0.3125 0.6875 +vt 0.296875 0.6875 +vt 0.359375 0.734375 +vt 0.390625 0.734375 +vt 0.390625 0.6875 +vt 0.359375 0.6875 +vt 0.34375 0.734375 +vt 0.359375 0.734375 +vt 0.359375 0.6875 +vt 0.34375 0.6875 +vt 0.34375 0.734375 +vt 0.3125 0.734375 +vt 0.3125 0.75 +vt 0.34375 0.75 +vt 0.375 0.75 +vt 0.34375 0.75 +vt 0.34375 0.734375 +vt 0.375 0.734375 +vn -0.0435778713738291 -0.4980973490458729 -0.8660254037844388 +vn 0.9961946980917455 -0.0871557427476582 1.3877787807814457e-17 +vn 0.0435778713738291 0.4980973490458729 0.8660254037844388 +vn -0.9961946980917455 0.0871557427476582 -1.3877787807814457e-17 +vn 0.07547908730517335 0.862729915662821 -0.5 +vn -0.07547908730517335 -0.862729915662821 0.5 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o MuleEarL +v -0.15935822581478865 2.3816773650616265 -0.9715349149312555 +v -0.15127013065533484 2.351492182990093 -1.0256615026677829 +v -0.061295283546407786 2.0157014821763357 -0.7527849149312555 +v -0.05320718838695404 1.9855163001048024 -0.8069115026677829 +v -0.27201085894146837 2.3191398023522782 -1.0256615026677829 +v -0.28009895410092217 2.3493249844238115 -0.9715349149312555 +v -0.1739479166730875 1.9531639194669874 -0.8069115026677829 +v -0.1820360118325413 1.9833491015385207 -0.7527849149312555 +vt 0.046875 0.796875 +vt 0.015625 0.796875 +vt 0.015625 0.6875 +vt 0.046875 0.6875 +vt 0.0625 0.796875 +vt 0.046875 0.796875 +vt 0.046875 0.6875 +vt 0.0625 0.6875 +vt 0.09375 0.796875 +vt 0.0625 0.796875 +vt 0.0625 0.6875 +vt 0.09375 0.6875 +vt 0.015625 0.796875 +vt 0 0.796875 +vt 0 0.6875 +vt 0.015625 0.6875 +vt 0.015625 0.796875 +vt 0.046875 0.796875 +vt 0.046875 0.8125 +vt 0.015625 0.8125 +vt 0.046875 0.8125 +vt 0.078125 0.8125 +vt 0.078125 0.796875 +vt 0.046875 0.796875 +vn 0.12940952255126037 -0.48296291314453416 -0.8660254037844387 +vn 0.9659258262890683 0.25881904510252074 1.3877787807814457e-17 +vn -0.12940952255126037 0.48296291314453416 0.8660254037844387 +vn -0.9659258262890683 -0.25881904510252074 -1.3877787807814457e-17 +vn -0.2241438680420134 0.8365163037378079 -0.5 +vn 0.2241438680420134 -0.8365163037378079 0.5 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o MuleEarR +v 0.2800989541009222 2.3493249844238115 -0.9715349149312555 +v 0.27201085894146837 2.3191398023522782 -1.0256615026677829 +v 0.18203601183254126 1.9833491015385207 -0.7527849149312555 +v 0.1739479166730875 1.9531639194669874 -0.8069115026677829 +v 0.1512701306553348 2.351492182990093 -1.0256615026677829 +v 0.15935822581478865 2.3816773650616265 -0.9715349149312555 +v 0.05320718838695404 1.9855163001048024 -0.8069115026677829 +v 0.061295283546407786 2.0157014821763357 -0.7527849149312555 +vt 0.015625 0.796875 +vt 0.046875 0.796875 +vt 0.046875 0.6875 +vt 0.015625 0.6875 +vt 0 0.796875 +vt 0.015625 0.796875 +vt 0.015625 0.6875 +vt 0 0.6875 +vt 0.0625 0.796875 +vt 0.09375 0.796875 +vt 0.09375 0.6875 +vt 0.0625 0.6875 +vt 0.046875 0.796875 +vt 0.0625 0.796875 +vt 0.0625 0.6875 +vt 0.046875 0.6875 +vt 0.046875 0.796875 +vt 0.015625 0.796875 +vt 0.015625 0.8125 +vt 0.046875 0.8125 +vt 0.078125 0.8125 +vt 0.046875 0.8125 +vt 0.046875 0.796875 +vt 0.078125 0.796875 +vn -0.12940952255126037 -0.48296291314453416 -0.8660254037844387 +vn 0.9659258262890683 -0.25881904510252074 -1.3877787807814457e-17 +vn 0.12940952255126037 0.48296291314453416 0.8660254037844387 +vn -0.9659258262890683 0.25881904510252074 1.3877787807814457e-17 +vn 0.2241438680420134 0.8365163037378079 -0.5 +vn -0.2241438680420134 -0.8365163037378079 0.5 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o Neck +v 0.125 1.7828924651018019 -0.6272436490538904 +v 0.125 1.5641424651018019 -1.0061297632095823 +v 0.125 1.1333734122634724 -0.2522436490538904 +v 0.125 0.9146234122634727 -0.6311297632095825 +v -0.125 1.5641424651018019 -1.0061297632095823 +v -0.125 1.7828924651018019 -0.6272436490538904 +v -0.125 0.9146234122634727 -0.6311297632095825 +v -0.125 1.1333734122634724 -0.2522436490538904 +vt 0.109375 0.34375 +vt 0.171875 0.34375 +vt 0.171875 0.15625 +vt 0.109375 0.15625 +vt 0 0.34375 +vt 0.109375 0.34375 +vt 0.109375 0.15625 +vt 0 0.15625 +vt 0.28125 0.34375 +vt 0.34375 0.34375 +vt 0.34375 0.15625 +vt 0.28125 0.15625 +vt 0.171875 0.34375 +vt 0.28125 0.34375 +vt 0.28125 0.15625 +vt 0.171875 0.15625 +vt 0.171875 0.34375 +vt 0.109375 0.34375 +vt 0.109375 0.453125 +vt 0.171875 0.453125 +vt 0.234375 0.453125 +vt 0.171875 0.453125 +vt 0.171875 0.34375 +vt 0.234375 0.34375 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 +o Mane +v 0.0625 2.1160254037844384 -0.6752404735808355 +v 0.0625 2.0535254037844384 -0.7834936490538902 +v 0.0625 1.25 -0.1752404735808355 +v 0.0625 1.1875 -0.2834936490538904 +v -0.0625 2.0535254037844384 -0.7834936490538902 +v -0.0625 2.1160254037844384 -0.6752404735808355 +v -0.0625 1.1875 -0.2834936490538904 +v -0.0625 1.25 -0.1752404735808355 +vt 0.90625 0.40625 +vt 0.9375 0.40625 +vt 0.9375 0.15625 +vt 0.90625 0.15625 +vt 0.875 0.40625 +vt 0.90625 0.40625 +vt 0.90625 0.15625 +vt 0.875 0.15625 +vt 0.96875 0.40625 +vt 1 0.40625 +vt 1 0.15625 +vt 0.96875 0.15625 +vt 0.9375 0.40625 +vt 0.96875 0.40625 +vt 0.96875 0.15625 +vt 0.9375 0.15625 +vt 0.9375 0.40625 +vt 0.90625 0.40625 +vt 0.90625 0.4375 +vt 0.9375 0.4375 +vt 0.96875 0.4375 +vt 0.9375 0.4375 +vt 0.9375 0.40625 +vt 0.96875 0.40625 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 108/316/79 111/315/79 109/314/79 106/313/79 +f 107/320/80 108/319/80 106/318/80 105/317/80 +f 112/324/81 107/323/81 105/322/81 110/321/81 +f 111/328/82 112/327/82 110/326/82 109/325/82 +f 110/332/83 105/331/83 106/330/83 109/329/83 +f 111/336/84 108/335/84 107/334/84 112/333/84 +o Bag1 +v 0.5 1.3125 0.125 +v 0.3125000000000001 1.3125 0.12499999999999989 +v 0.5 0.8125 0.125 +v 0.3125000000000001 0.8125 0.12499999999999989 +v 0.3125 1.3125 0.625 +v 0.5 1.3125 0.625 +v 0.3125 0.8125 0.625 +v 0.5 0.8125 0.625 +vt 0.453125 0.625 +vt 0.578125 0.625 +vt 0.578125 0.5 +vt 0.453125 0.5 +vt 0.40625 0.625 +vt 0.453125 0.625 +vt 0.453125 0.5 +vt 0.40625 0.5 +vt 0.625 0.625 +vt 0.75 0.625 +vt 0.75 0.5 +vt 0.625 0.5 +vt 0.578125 0.625 +vt 0.625 0.625 +vt 0.625 0.5 +vt 0.578125 0.5 +vt 0.578125 0.625 +vt 0.453125 0.625 +vt 0.453125 0.671875 +vt 0.578125 0.671875 +vt 0.703125 0.671875 +vt 0.578125 0.671875 +vt 0.578125 0.625 +vt 0.703125 0.625 +vn -1 0 -2.220446049250313e-16 +vn 2.220446049250313e-16 0 -1 +vn 1 0 2.220446049250313e-16 +vn -2.220446049250313e-16 0 1 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 116/340/85 119/339/85 117/338/85 114/337/85 +f 115/344/86 116/343/86 114/342/86 113/341/86 +f 120/348/87 115/347/87 113/346/87 118/345/87 +f 119/352/88 120/351/88 118/350/88 117/349/88 +f 118/356/89 113/355/89 114/354/89 117/353/89 +f 119/360/90 116/359/90 115/358/90 120/357/90 +o Bag2 +v -0.5 1.3125 0.625 +v -0.3125 1.3125 0.625 +v -0.5 0.8125 0.625 +v -0.3125 0.8125 0.625 +v -0.3125000000000001 1.3125 0.12499999999999989 +v -0.5000000000000001 1.3125 0.125 +v -0.3125000000000001 0.8125 0.12499999999999989 +v -0.5000000000000001 0.8125 0.125 +vt 0.578125 0.625 +vt 0.453125 0.625 +vt 0.453125 0.5 +vt 0.578125 0.5 +vt 0.625 0.625 +vt 0.578125 0.625 +vt 0.578125 0.5 +vt 0.625 0.5 +vt 0.75 0.625 +vt 0.625 0.625 +vt 0.625 0.5 +vt 0.75 0.5 +vt 0.453125 0.625 +vt 0.40625 0.625 +vt 0.40625 0.5 +vt 0.453125 0.5 +vt 0.453125 0.625 +vt 0.578125 0.625 +vt 0.578125 0.671875 +vt 0.453125 0.671875 +vt 0.578125 0.671875 +vt 0.703125 0.671875 +vt 0.703125 0.625 +vt 0.578125 0.625 +vn 1 0 -2.220446049250313e-16 +vn 2.220446049250313e-16 0 1 +vn -1 0 2.220446049250313e-16 +vn -2.220446049250313e-16 0 -1 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 124/364/91 127/363/91 125/362/91 122/361/91 +f 123/368/92 124/367/92 122/366/92 121/365/92 +f 128/372/93 123/371/93 121/370/93 126/369/93 +f 127/376/94 128/375/94 126/374/94 125/373/94 +f 126/380/95 121/379/95 122/378/95 125/377/95 +f 127/384/96 124/383/96 123/382/96 128/381/96 +o Saddle +v 0.34375 1.34375 0.375 +v 0.34375 1.34375 -0.25 +v 0.34375 0.71875 0.375 +v 0.34375 0.71875 -0.25 +v -0.34375 1.34375 -0.25 +v -0.34375 1.34375 0.375 +v -0.34375 0.71875 -0.25 +v -0.34375 0.71875 0.375 +vt 0.546875 0.859375 +vt 0.703125 0.859375 +vt 0.703125 0.71875 +vt 0.546875 0.71875 +vt 0.40625 0.859375 +vt 0.546875 0.859375 +vt 0.546875 0.71875 +vt 0.40625 0.71875 +vt 0.84375 0.859375 +vt 1 0.859375 +vt 1 0.71875 +vt 0.84375 0.71875 +vt 0.703125 0.859375 +vt 0.84375 0.859375 +vt 0.84375 0.71875 +vt 0.703125 0.71875 +vt 0.703125 0.859375 +vt 0.546875 0.859375 +vt 0.546875 1 +vt 0.703125 1 +vt 0.859375 1 +vt 0.703125 1 +vt 0.703125 0.859375 +vt 0.859375 0.859375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 132/388/97 135/387/97 133/386/97 130/385/97 +f 131/392/98 132/391/98 130/390/98 129/389/98 +f 136/396/99 131/395/99 129/394/99 134/393/99 +f 135/400/100 136/399/100 134/398/100 133/397/100 +f 134/404/101 129/403/101 130/402/101 133/401/101 +f 135/408/102 132/407/102 131/406/102 136/405/102 +o SaddleMouthL +v -0.125 1.6952722283113841 -1.1540063509461098 +v -0.125 1.6327722283113841 -1.2622595264191645 +v -0.125 1.587019052838329 -1.0915063509461098 +v -0.125 1.524519052838329 -1.1997595264191645 +v -0.1875 1.6327722283113841 -1.2622595264191645 +v -0.1875 1.6952722283113841 -1.1540063509461098 +v -0.1875 1.524519052838329 -1.1997595264191645 +v -0.1875 1.587019052838329 -1.0915063509461098 +vt 0.484375 0.890625 +vt 0.5 0.890625 +vt 0.5 0.859375 +vt 0.484375 0.859375 +vt 0.453125 0.890625 +vt 0.484375 0.890625 +vt 0.484375 0.859375 +vt 0.453125 0.859375 +vt 0.53125 0.890625 +vt 0.546875 0.890625 +vt 0.546875 0.859375 +vt 0.53125 0.859375 +vt 0.5 0.890625 +vt 0.53125 0.890625 +vt 0.53125 0.859375 +vt 0.5 0.859375 +vt 0.5 0.890625 +vt 0.484375 0.890625 +vt 0.484375 0.921875 +vt 0.5 0.921875 +vt 0.515625 0.921875 +vt 0.5 0.921875 +vt 0.5 0.890625 +vt 0.515625 0.890625 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 140/412/103 143/411/103 141/410/103 138/409/103 +f 139/416/104 140/415/104 138/414/104 137/413/104 +f 144/420/105 139/419/105 137/418/105 142/417/105 +f 143/424/106 144/423/106 142/422/106 141/421/106 +f 142/428/107 137/427/107 138/426/107 141/425/107 +f 143/432/108 140/431/108 139/430/108 144/429/108 +o SaddleMouthR +v 0.1875 1.6952722283113841 -1.1540063509461098 +v 0.1875 1.6327722283113841 -1.2622595264191645 +v 0.1875 1.587019052838329 -1.0915063509461098 +v 0.1875 1.524519052838329 -1.1997595264191645 +v 0.125 1.6327722283113841 -1.2622595264191645 +v 0.125 1.6952722283113841 -1.1540063509461098 +v 0.125 1.524519052838329 -1.1997595264191645 +v 0.125 1.587019052838329 -1.0915063509461098 +vt 0.484375 0.890625 +vt 0.5 0.890625 +vt 0.5 0.859375 +vt 0.484375 0.859375 +vt 0.453125 0.890625 +vt 0.484375 0.890625 +vt 0.484375 0.859375 +vt 0.453125 0.859375 +vt 0.53125 0.890625 +vt 0.546875 0.890625 +vt 0.546875 0.859375 +vt 0.53125 0.859375 +vt 0.5 0.890625 +vt 0.53125 0.890625 +vt 0.53125 0.859375 +vt 0.5 0.859375 +vt 0.5 0.890625 +vt 0.484375 0.890625 +vt 0.484375 0.921875 +vt 0.5 0.921875 +vt 0.515625 0.921875 +vt 0.5 0.921875 +vt 0.5 0.890625 +vt 0.515625 0.890625 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 148/436/109 151/435/109 149/434/109 146/433/109 +f 147/440/110 148/439/110 146/438/110 145/437/110 +f 152/444/111 147/443/111 145/442/111 150/441/111 +f 151/448/112 152/447/112 150/446/112 149/445/112 +f 150/452/113 145/451/113 146/450/113 149/449/113 +f 151/456/114 148/455/114 147/454/114 152/453/114 +o SaddleMouthLine +v -0.19374999999999998 1.6875 -0.21875 +v -0.19374999999999998 1.6875 -1.21875 +v -0.19374999999999998 1.5 -0.21875 +v -0.19374999999999998 1.5 -1.21875 +v -0.19374999999999998 1.6875 -1.21875 +v -0.19374999999999998 1.6875 -0.21875 +v -0.19374999999999998 1.5 -1.21875 +v -0.19374999999999998 1.5 -0.21875 +vt 0.75 0.71875 +vt 0.75 0.71875 +vt 0.75 0.671875 +vt 0.75 0.671875 +vt 0.5 0.71875 +vt 0.75 0.71875 +vt 0.75 0.671875 +vt 0.5 0.671875 +vt 1 0.71875 +vt 1 0.71875 +vt 1 0.671875 +vt 1 0.671875 +vt 0.75 0.71875 +vt 1 0.71875 +vt 1 0.671875 +vt 0.75 0.671875 +vt 0.75 0.71875 +vt 0.75 0.71875 +vt 0.75 0.96875 +vt 0.75 0.96875 +vt 0.75 0.96875 +vt 0.75 0.96875 +vt 0.75 0.71875 +vt 0.75 0.71875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 156/460/115 159/459/115 157/458/115 154/457/115 +f 155/464/116 156/463/116 154/462/116 153/461/116 +f 160/468/117 155/467/117 153/466/117 158/465/117 +f 159/472/118 160/471/118 158/470/118 157/469/118 +f 158/476/119 153/475/119 154/474/119 157/473/119 +f 159/480/120 156/479/120 155/478/120 160/477/120 +o SaddleMouthLineR +v 0.19374999999999998 1.6875 -0.21875 +v 0.19374999999999998 1.6875 -1.21875 +v 0.19374999999999998 1.5 -0.21875 +v 0.19374999999999998 1.5 -1.21875 +v 0.19374999999999998 1.6875 -1.21875 +v 0.19374999999999998 1.6875 -0.21875 +v 0.19374999999999998 1.5 -1.21875 +v 0.19374999999999998 1.5 -0.21875 +vt 0.75 0.71875 +vt 0.75 0.71875 +vt 0.75 0.671875 +vt 0.75 0.671875 +vt 0.5 0.71875 +vt 0.75 0.71875 +vt 0.75 0.671875 +vt 0.5 0.671875 +vt 1 0.71875 +vt 1 0.71875 +vt 1 0.671875 +vt 1 0.671875 +vt 0.75 0.71875 +vt 1 0.71875 +vt 1 0.671875 +vt 0.75 0.671875 +vt 0.75 0.71875 +vt 0.75 0.71875 +vt 0.75 0.96875 +vt 0.75 0.96875 +vt 0.75 0.96875 +vt 0.75 0.96875 +vt 0.75 0.71875 +vt 0.75 0.71875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 164/484/121 167/483/121 165/482/121 162/481/121 +f 163/488/122 164/487/122 162/486/122 161/485/122 +f 168/492/123 163/491/123 161/490/123 166/489/123 +f 167/496/124 168/495/124 166/494/124 165/493/124 +f 166/500/125 161/499/125 162/498/125 165/497/125 +f 167/504/126 164/503/126 163/502/126 168/501/126 +o HeadSaddle +v 0.140625 1.8561195507185708 -1.1566606162754502 +v 0.140625 1.7779945507185708 -1.291977085616769 +v 0.140625 1.5584233181676694 -0.9847856162754505 +v 0.140625 1.4802983181676697 -1.120102085616769 +v -0.140625 1.7779945507185708 -1.291977085616769 +v -0.140625 1.8561195507185708 -1.1566606162754502 +v -0.140625 1.4802983181676697 -1.120102085616769 +v -0.140625 1.5584233181676694 -0.9847856162754505 +vt 0.328125 0.96875 +vt 0.390625 0.96875 +vt 0.390625 0.890625 +vt 0.328125 0.890625 +vt 0.296875 0.96875 +vt 0.328125 0.96875 +vt 0.328125 0.890625 +vt 0.296875 0.890625 +vt 0.421875 0.96875 +vt 0.484375 0.96875 +vt 0.484375 0.890625 +vt 0.421875 0.890625 +vt 0.390625 0.96875 +vt 0.421875 0.96875 +vt 0.421875 0.890625 +vt 0.390625 0.890625 +vt 0.390625 0.96875 +vt 0.328125 0.96875 +vt 0.328125 1 +vt 0.390625 1 +vt 0.453125 1 +vt 0.390625 1 +vt 0.390625 0.96875 +vt 0.453125 0.96875 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 172/508/127 175/507/127 173/506/127 170/505/127 +f 171/512/128 172/511/128 170/510/128 169/509/128 +f 176/516/129 171/515/129 169/514/129 174/513/129 +f 175/520/130 176/519/130 174/518/130 173/517/130 +f 174/524/131 169/523/131 170/522/131 173/521/131 +f 175/528/132 172/527/132 171/526/132 176/525/132 +o HeadSaddle +v 0.203125 2.074869550718571 -0.7777745021197584 +v 0.203125 1.8404945507185708 -1.183723910143714 +v 0.203125 1.7771733181676694 -0.6058995021197586 +v 0.203125 1.5427983181676694 -1.0118489101437143 +v -0.203125 1.8404945507185708 -1.183723910143714 +v -0.203125 2.074869550718571 -0.7777745021197584 +v -0.203125 1.5427983181676694 -1.0118489101437143 +v -0.203125 1.7771733181676694 -0.6058995021197586 +vt 0.109375 0.890625 +vt 0.203125 0.890625 +vt 0.203125 0.8125 +vt 0.109375 0.8125 +vt 0 0.890625 +vt 0.109375 0.890625 +vt 0.109375 0.8125 +vt 0 0.8125 +vt 0.3125 0.890625 +vt 0.40625 0.890625 +vt 0.40625 0.8125 +vt 0.3125 0.8125 +vt 0.203125 0.890625 +vt 0.3125 0.890625 +vt 0.3125 0.8125 +vt 0.203125 0.8125 +vt 0.203125 0.890625 +vt 0.109375 0.890625 +vt 0.109375 1 +vt 0.203125 1 +vt 0.296875 1 +vt 0.203125 1 +vt 0.203125 0.890625 +vt 0.296875 0.890625 +vn 0 -0.49999999999999994 -0.8660254037844387 +vn 1 0 0 +vn 0 0.49999999999999994 0.8660254037844387 +vn -1 0 0 +vn 0 0.8660254037844387 -0.49999999999999994 +vn 0 -0.8660254037844387 0.49999999999999994 +usemtl m_1e01f934-e3cf-9457-589b-e2903555a409 +f 180/532/133 183/531/133 181/530/133 178/529/133 +f 179/536/134 180/535/134 178/534/134 177/533/134 +f 184/540/135 179/539/135 177/538/135 182/537/135 +f 183/544/136 184/543/136 182/542/136 181/541/136 +f 182/548/137 177/547/137 178/546/137 181/545/137 +f 183/552/138 180/551/138 179/550/138 184/549/138 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/llama.obj b/prismarine-viewer/viewer/lib/entity/models/llama.obj new file mode 100644 index 00000000..1ef48ac5 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/llama.obj @@ -0,0 +1,509 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o head +v 0.125 1.9375 -0.4375 +v 0.125 1.9375 -1 +v 0.125 1.6875 -0.4375 +v 0.125 1.6875 -1 +v -0.125 1.9375 -1 +v -0.125 1.9375 -0.4375 +v -0.125 1.6875 -1 +v -0.125 1.6875 -0.4375 +vt 0.0703125 0.859375 +vt 0.1015625 0.859375 +vt 0.1015625 0.796875 +vt 0.0703125 0.796875 +vt 0 0.859375 +vt 0.0703125 0.859375 +vt 0.0703125 0.796875 +vt 0 0.796875 +vt 0.171875 0.859375 +vt 0.203125 0.859375 +vt 0.203125 0.796875 +vt 0.171875 0.796875 +vt 0.1015625 0.859375 +vt 0.171875 0.859375 +vt 0.171875 0.796875 +vt 0.1015625 0.796875 +vt 0.1015625 0.859375 +vt 0.0703125 0.859375 +vt 0.0703125 1 +vt 0.1015625 1 +vt 0.1328125 1 +vt 0.1015625 1 +vt 0.1015625 0.859375 +vt 0.1328125 0.859375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o head +v 0.25 2.0625 -0.375 +v 0.25 2.0625 -0.75 +v 0.25 0.9375 -0.375 +v 0.25 0.9375 -0.75 +v -0.25 2.0625 -0.75 +v -0.25 2.0625 -0.375 +v -0.25 0.9375 -0.75 +v -0.25 0.9375 -0.375 +vt 0.046875 0.6875 +vt 0.109375 0.6875 +vt 0.109375 0.40625 +vt 0.046875 0.40625 +vt 0 0.6875 +vt 0.046875 0.6875 +vt 0.046875 0.40625 +vt 0 0.40625 +vt 0.15625 0.6875 +vt 0.21875 0.6875 +vt 0.21875 0.40625 +vt 0.15625 0.40625 +vt 0.109375 0.6875 +vt 0.15625 0.6875 +vt 0.15625 0.40625 +vt 0.109375 0.40625 +vt 0.109375 0.6875 +vt 0.046875 0.6875 +vt 0.046875 0.78125 +vt 0.109375 0.78125 +vt 0.171875 0.78125 +vt 0.109375 0.78125 +vt 0.109375 0.6875 +vt 0.171875 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.25 2.25 -0.5 +v 0.25 2.25 -0.625 +v 0.25 2.0625 -0.5 +v 0.25 2.0625 -0.625 +v 0.0625 2.25 -0.625 +v 0.0625 2.25 -0.5 +v 0.0625 2.0625 -0.625 +v 0.0625 2.0625 -0.5 +vt 0.1484375 0.96875 +vt 0.171875 0.96875 +vt 0.171875 0.921875 +vt 0.1484375 0.921875 +vt 0.1328125 0.96875 +vt 0.1484375 0.96875 +vt 0.1484375 0.921875 +vt 0.1328125 0.921875 +vt 0.1875 0.96875 +vt 0.2109375 0.96875 +vt 0.2109375 0.921875 +vt 0.1875 0.921875 +vt 0.171875 0.96875 +vt 0.1875 0.96875 +vt 0.1875 0.921875 +vt 0.171875 0.921875 +vt 0.171875 0.96875 +vt 0.1484375 0.96875 +vt 0.1484375 1 +vt 0.171875 1 +vt 0.1953125 1 +vt 0.171875 1 +vt 0.171875 0.96875 +vt 0.1953125 0.96875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v -0.0625 2.25 -0.5 +v -0.0625 2.25 -0.625 +v -0.0625 2.0625 -0.5 +v -0.0625 2.0625 -0.625 +v -0.25 2.25 -0.625 +v -0.25 2.25 -0.5 +v -0.25 2.0625 -0.625 +v -0.25 2.0625 -0.5 +vt 0.1484375 0.96875 +vt 0.171875 0.96875 +vt 0.171875 0.921875 +vt 0.1484375 0.921875 +vt 0.1328125 0.96875 +vt 0.1484375 0.96875 +vt 0.1484375 0.921875 +vt 0.1328125 0.921875 +vt 0.1875 0.96875 +vt 0.2109375 0.96875 +vt 0.2109375 0.921875 +vt 0.1875 0.921875 +vt 0.171875 0.96875 +vt 0.1875 0.96875 +vt 0.1875 0.921875 +vt 0.171875 0.921875 +vt 0.171875 0.96875 +vt 0.1484375 0.96875 +vt 0.1484375 1 +vt 0.171875 1 +vt 0.1953125 1 +vt 0.171875 1 +vt 0.171875 0.96875 +vt 0.1953125 0.96875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o chest1 +v 0.34375 1.3125 0.3750000000000001 +v 0.53125 1.3125 0.375 +v 0.34375 0.8125 0.3750000000000001 +v 0.53125 0.8125 0.375 +v 0.53125 1.3125 -0.12499999999999994 +v 0.34375 1.3125 -0.12499999999999989 +v 0.53125 0.8125 -0.12499999999999994 +v 0.34375 0.8125 -0.12499999999999989 +vt 0.375 0.515625 +vt 0.4375 0.515625 +vt 0.4375 0.390625 +vt 0.375 0.390625 +vt 0.3515625 0.515625 +vt 0.375 0.515625 +vt 0.375 0.390625 +vt 0.3515625 0.390625 +vt 0.4609375 0.515625 +vt 0.5234375 0.515625 +vt 0.5234375 0.390625 +vt 0.4609375 0.390625 +vt 0.4375 0.515625 +vt 0.4609375 0.515625 +vt 0.4609375 0.390625 +vt 0.4375 0.390625 +vt 0.4375 0.515625 +vt 0.375 0.515625 +vt 0.375 0.5625 +vt 0.4375 0.5625 +vt 0.5 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.515625 +vt 0.5 0.515625 +vn 1 0 -2.220446049250313e-16 +vn 2.220446049250313e-16 0 1 +vn -1 0 2.220446049250313e-16 +vn -2.220446049250313e-16 0 -1 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o chest2 +v -0.53125 1.3125 0.3750000000000001 +v -0.34374999999999994 1.3125 0.375 +v -0.53125 0.8125 0.3750000000000001 +v -0.34374999999999994 0.8125 0.375 +v -0.34375000000000006 1.3125 -0.125 +v -0.5312500000000001 1.3125 -0.12499999999999989 +v -0.34375000000000006 0.8125 -0.125 +v -0.5312500000000001 0.8125 -0.12499999999999989 +vt 0.375 0.3125 +vt 0.4375 0.3125 +vt 0.4375 0.1875 +vt 0.375 0.1875 +vt 0.3515625 0.3125 +vt 0.375 0.3125 +vt 0.375 0.1875 +vt 0.3515625 0.1875 +vt 0.4609375 0.3125 +vt 0.5234375 0.3125 +vt 0.5234375 0.1875 +vt 0.4609375 0.1875 +vt 0.4375 0.3125 +vt 0.4609375 0.3125 +vt 0.4609375 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0.3125 +vt 0.375 0.3125 +vt 0.375 0.359375 +vt 0.4375 0.359375 +vt 0.5 0.359375 +vt 0.4375 0.359375 +vt 0.4375 0.3125 +vt 0.5 0.3125 +vn 1 0 -2.220446049250313e-16 +vn 2.220446049250313e-16 0 1 +vn -1 0 2.220446049250313e-16 +vn -2.220446049250313e-16 0 -1 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o body +v 0.375 1.3750000000000002 -0.5 +v 0.375 0.7500000000000002 -0.5 +v 0.375 1.375 0.625 +v 0.375 0.75 0.625 +v -0.375 0.7500000000000002 -0.5 +v -0.375 1.3750000000000002 -0.5 +v -0.375 0.75 0.625 +v -0.375 1.375 0.625 +vt 0.3046875 0.84375 +vt 0.3984375 0.84375 +vt 0.3984375 0.5625 +vt 0.3046875 0.5625 +vt 0.2265625 0.84375 +vt 0.3046875 0.84375 +vt 0.3046875 0.5625 +vt 0.2265625 0.5625 +vt 0.4765625 0.84375 +vt 0.5703125 0.84375 +vt 0.5703125 0.5625 +vt 0.4765625 0.5625 +vt 0.3984375 0.84375 +vt 0.4765625 0.84375 +vt 0.4765625 0.5625 +vt 0.3984375 0.5625 +vt 0.3984375 0.84375 +vt 0.3046875 0.84375 +vt 0.3046875 1 +vt 0.3984375 1 +vt 0.4921875 1 +vt 0.3984375 1 +vt 0.3984375 0.84375 +vt 0.4921875 0.84375 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o leg0 +v 0.34375 0.875 0.5 +v 0.34375 0.875 0.25 +v 0.34375 0 0.5 +v 0.34375 0 0.25 +v 0.09375 0.875 0.25 +v 0.09375 0.875 0.5 +v 0.09375 0 0.25 +v 0.09375 0 0.5 +vt 0.2578125 0.484375 +vt 0.2890625 0.484375 +vt 0.2890625 0.265625 +vt 0.2578125 0.265625 +vt 0.2265625 0.484375 +vt 0.2578125 0.484375 +vt 0.2578125 0.265625 +vt 0.2265625 0.265625 +vt 0.3203125 0.484375 +vt 0.3515625 0.484375 +vt 0.3515625 0.265625 +vt 0.3203125 0.265625 +vt 0.2890625 0.484375 +vt 0.3203125 0.484375 +vt 0.3203125 0.265625 +vt 0.2890625 0.265625 +vt 0.2890625 0.484375 +vt 0.2578125 0.484375 +vt 0.2578125 0.546875 +vt 0.2890625 0.546875 +vt 0.3203125 0.546875 +vt 0.2890625 0.546875 +vt 0.2890625 0.484375 +vt 0.3203125 0.484375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o leg1 +v -0.09375 0.875 0.5 +v -0.09375 0.875 0.25 +v -0.09375 0 0.5 +v -0.09375 0 0.25 +v -0.34375 0.875 0.25 +v -0.34375 0.875 0.5 +v -0.34375 0 0.25 +v -0.34375 0 0.5 +vt 0.2578125 0.484375 +vt 0.2890625 0.484375 +vt 0.2890625 0.265625 +vt 0.2578125 0.265625 +vt 0.2265625 0.484375 +vt 0.2578125 0.484375 +vt 0.2578125 0.265625 +vt 0.2265625 0.265625 +vt 0.3203125 0.484375 +vt 0.3515625 0.484375 +vt 0.3515625 0.265625 +vt 0.3203125 0.265625 +vt 0.2890625 0.484375 +vt 0.3203125 0.484375 +vt 0.3203125 0.265625 +vt 0.2890625 0.265625 +vt 0.2890625 0.484375 +vt 0.2578125 0.484375 +vt 0.2578125 0.546875 +vt 0.2890625 0.546875 +vt 0.3203125 0.546875 +vt 0.2890625 0.546875 +vt 0.2890625 0.484375 +vt 0.3203125 0.484375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o leg2 +v 0.34375 0.875 -0.1875 +v 0.34375 0.875 -0.4375 +v 0.34375 0 -0.1875 +v 0.34375 0 -0.4375 +v 0.09375 0.875 -0.4375 +v 0.09375 0.875 -0.1875 +v 0.09375 0 -0.4375 +v 0.09375 0 -0.1875 +vt 0.2578125 0.484375 +vt 0.2890625 0.484375 +vt 0.2890625 0.265625 +vt 0.2578125 0.265625 +vt 0.2265625 0.484375 +vt 0.2578125 0.484375 +vt 0.2578125 0.265625 +vt 0.2265625 0.265625 +vt 0.3203125 0.484375 +vt 0.3515625 0.484375 +vt 0.3515625 0.265625 +vt 0.3203125 0.265625 +vt 0.2890625 0.484375 +vt 0.3203125 0.484375 +vt 0.3203125 0.265625 +vt 0.2890625 0.265625 +vt 0.2890625 0.484375 +vt 0.2578125 0.484375 +vt 0.2578125 0.546875 +vt 0.2890625 0.546875 +vt 0.3203125 0.546875 +vt 0.2890625 0.546875 +vt 0.2890625 0.484375 +vt 0.3203125 0.484375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o leg3 +v -0.09375 0.875 -0.1875 +v -0.09375 0.875 -0.4375 +v -0.09375 0 -0.1875 +v -0.09375 0 -0.4375 +v -0.34375 0.875 -0.4375 +v -0.34375 0.875 -0.1875 +v -0.34375 0 -0.4375 +v -0.34375 0 -0.1875 +vt 0.2578125 0.484375 +vt 0.2890625 0.484375 +vt 0.2890625 0.265625 +vt 0.2578125 0.265625 +vt 0.2265625 0.484375 +vt 0.2578125 0.484375 +vt 0.2578125 0.265625 +vt 0.2265625 0.265625 +vt 0.3203125 0.484375 +vt 0.3515625 0.484375 +vt 0.3515625 0.265625 +vt 0.3203125 0.265625 +vt 0.2890625 0.484375 +vt 0.3203125 0.484375 +vt 0.3203125 0.265625 +vt 0.2890625 0.265625 +vt 0.2890625 0.484375 +vt 0.2578125 0.484375 +vt 0.2578125 0.546875 +vt 0.2890625 0.546875 +vt 0.3203125 0.546875 +vt 0.2890625 0.546875 +vt 0.2890625 0.484375 +vt 0.3203125 0.484375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c2c1ddb5-5693-7a64-a950-f7fec476ea98 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/minecart.obj b/prismarine-viewer/viewer/lib/entity/models/minecart.obj new file mode 100644 index 00000000..0dd2f4c8 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/minecart.obj @@ -0,0 +1,233 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o bottom +v 0.625 0.12500000000000022 -0.5000000000000002 +v 0.625 2.220446049250313e-16 -0.5000000000000002 +v 0.625 0.125 0.4999999999999998 +v 0.625 0 0.4999999999999998 +v -0.625 2.220446049250313e-16 -0.5000000000000002 +v -0.625 0.12500000000000022 -0.5000000000000002 +v -0.625 0 0.4999999999999998 +v -0.625 0.125 0.4999999999999998 +vt 0.34375 0.625 +vt 0.03125 0.625 +vt 0.03125 0.125 +vt 0.34375 0.125 +vt 0.375 0.625 +vt 0.34375 0.625 +vt 0.34375 0.125 +vt 0.375 0.125 +vt 0.6875 0.625 +vt 0.375 0.625 +vt 0.375 0.125 +vt 0.6875 0.125 +vt 0.03125 0.625 +vt 0 0.625 +vt 0 0.125 +vt 0.03125 0.125 +vt 0.03125 0.625 +vt 0.34375 0.625 +vt 0.34375 0.6875 +vt 0.03125 0.6875 +vt 0.34375 0.6875 +vt 0.65625 0.6875 +vt 0.65625 0.625 +vt 0.34375 0.625 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_51fd1571-03b7-0fcd-9442-72fc6c7ce0a3 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o front +v 0.625 0.625 -0.5 +v 0.5 0.625 -0.5 +v 0.625 0.125 -0.5 +v 0.5 0.125 -0.5 +v 0.4999999999999999 0.625 0.5 +v 0.625 0.625 0.5 +v 0.4999999999999999 0.125 0.5 +v 0.625 0.125 0.5 +vt 0.28125 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.6875 +vt 0.28125 0.6875 +vt 0.3125 0.9375 +vt 0.28125 0.9375 +vt 0.28125 0.6875 +vt 0.3125 0.6875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.6875 +vt 0.5625 0.6875 +vt 0.03125 0.9375 +vt 0 0.9375 +vt 0 0.6875 +vt 0.03125 0.6875 +vt 0.03125 0.9375 +vt 0.28125 0.9375 +vt 0.28125 1 +vt 0.03125 1 +vt 0.28125 1 +vt 0.53125 1 +vt 0.53125 0.9375 +vt 0.28125 0.9375 +vn -1 0 -2.220446049250313e-16 +vn 2.220446049250313e-16 0 -1 +vn 1 0 2.220446049250313e-16 +vn -2.220446049250313e-16 0 1 +vn 0 1 0 +vn 0 -1 0 +usemtl m_51fd1571-03b7-0fcd-9442-72fc6c7ce0a3 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o back +v -0.6249999999999999 0.625 0.5 +v -0.4999999999999999 0.625 0.5 +v -0.6249999999999999 0.125 0.5 +v -0.4999999999999999 0.125 0.5 +v -0.5000000000000001 0.625 -0.5 +v -0.6250000000000001 0.625 -0.5 +v -0.5000000000000001 0.125 -0.5 +v -0.6250000000000001 0.125 -0.5 +vt 0.28125 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.6875 +vt 0.28125 0.6875 +vt 0.3125 0.9375 +vt 0.28125 0.9375 +vt 0.28125 0.6875 +vt 0.3125 0.6875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.6875 +vt 0.5625 0.6875 +vt 0.03125 0.9375 +vt 0 0.9375 +vt 0 0.6875 +vt 0.03125 0.6875 +vt 0.03125 0.9375 +vt 0.28125 0.9375 +vt 0.28125 1 +vt 0.03125 1 +vt 0.28125 1 +vt 0.53125 1 +vt 0.53125 0.9375 +vt 0.28125 0.9375 +vn 1 0 -2.220446049250313e-16 +vn 2.220446049250313e-16 0 1 +vn -1 0 2.220446049250313e-16 +vn -2.220446049250313e-16 0 -1 +vn 0 1 0 +vn 0 -1 0 +usemtl m_51fd1571-03b7-0fcd-9442-72fc6c7ce0a3 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o right +v -0.49999999999999994 0.625 -0.5 +v -0.5000000000000001 0.625 -0.37500000000000006 +v -0.49999999999999994 0.125 -0.5 +v -0.5000000000000001 0.125 -0.37500000000000006 +v 0.5 0.625 -0.3749999999999999 +v 0.5 0.625 -0.49999999999999994 +v 0.5 0.125 -0.3749999999999999 +v 0.5 0.125 -0.49999999999999994 +vt 0.28125 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.6875 +vt 0.28125 0.6875 +vt 0.3125 0.9375 +vt 0.28125 0.9375 +vt 0.28125 0.6875 +vt 0.3125 0.6875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.6875 +vt 0.5625 0.6875 +vt 0.03125 0.9375 +vt 0 0.9375 +vt 0 0.6875 +vt 0.03125 0.6875 +vt 0.03125 0.9375 +vt 0.28125 0.9375 +vt 0.28125 1 +vt 0.03125 1 +vt 0.28125 1 +vt 0.53125 1 +vt 0.53125 0.9375 +vt 0.28125 0.9375 +vn -1.2246467991473532e-16 0 1 +vn -1 0 -1.2246467991473532e-16 +vn 1.2246467991473532e-16 0 -1 +vn 1 0 1.2246467991473532e-16 +vn 0 1 0 +vn 0 -1 0 +usemtl m_51fd1571-03b7-0fcd-9442-72fc6c7ce0a3 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o left +v 0.5 0.625 0.5 +v 0.5 0.625 0.375 +v 0.5 0.125 0.5 +v 0.5 0.125 0.375 +v -0.5 0.625 0.375 +v -0.5 0.625 0.5 +v -0.5 0.125 0.375 +v -0.5 0.125 0.5 +vt 0.28125 0.9375 +vt 0.03125 0.9375 +vt 0.03125 0.6875 +vt 0.28125 0.6875 +vt 0.3125 0.9375 +vt 0.28125 0.9375 +vt 0.28125 0.6875 +vt 0.3125 0.6875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.6875 +vt 0.5625 0.6875 +vt 0.03125 0.9375 +vt 0 0.9375 +vt 0 0.6875 +vt 0.03125 0.6875 +vt 0.03125 0.9375 +vt 0.28125 0.9375 +vt 0.28125 1 +vt 0.03125 1 +vt 0.28125 1 +vt 0.53125 1 +vt 0.53125 0.9375 +vt 0.28125 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_51fd1571-03b7-0fcd-9442-72fc6c7ce0a3 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/parrot.obj b/prismarine-viewer/viewer/lib/entity/models/parrot.obj new file mode 100644 index 00000000..35d14a5d --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/parrot.obj @@ -0,0 +1,509 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.09375 0.5083704620381906 -0.10253364496531403 +v 0.09375 0.4291295379618094 -0.2724663550346859 +v 0.09375 0.16850504189944682 0.05594820318744831 +v 0.09375 0.08926411782306565 -0.11398450688192363 +v -0.09375 0.4291295379618094 -0.2724663550346859 +v -0.09375 0.5083704620381906 -0.10253364496531403 +v -0.09375 0.08926411782306565 -0.11398450688192363 +v -0.09375 0.16850504189944682 0.05594820318744831 +vt 0.15625 0.65625 +vt 0.25 0.65625 +vt 0.25 0.46875 +vt 0.15625 0.46875 +vt 0.0625 0.65625 +vt 0.15625 0.65625 +vt 0.15625 0.46875 +vt 0.0625 0.46875 +vt 0.34375 0.65625 +vt 0.4375 0.65625 +vt 0.4375 0.46875 +vt 0.34375 0.46875 +vt 0.25 0.65625 +vt 0.34375 0.65625 +vt 0.34375 0.46875 +vt 0.25 0.46875 +vt 0.25 0.65625 +vt 0.15625 0.65625 +vt 0.15625 0.75 +vt 0.25 0.75 +vt 0.34375 0.75 +vt 0.25 0.75 +vt 0.25 0.65625 +vt 0.34375 0.65625 +vn 0 -0.42261826174069944 -0.9063077870366499 +vn 1 0 0 +vn 0 0.42261826174069944 0.9063077870366499 +vn -1 0 0 +vn 0 0.9063077870366499 -0.42261826174069944 +vn 0 -0.9063077870366499 0.42261826174069944 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o wing0 +v -0.0625 0.5051478245037531 -0.08881019196643142 +v -0.0625 0.3976022426879319 -0.24240120027061735 +v -0.0625 0.24916281066344315 0.09043244439327047 +v -0.0625 0.14161722884762196 -0.06315856391091551 +v -0.125 0.3976022426879319 -0.24240120027061735 +v -0.125 0.5051478245037531 -0.08881019196643142 +v -0.125 0.14161722884762196 -0.06315856391091551 +v -0.125 0.24916281066344315 0.09043244439327047 +vt 0.6875 0.65625 +vt 0.71875 0.65625 +vt 0.71875 0.5 +vt 0.6875 0.5 +vt 0.59375 0.65625 +vt 0.6875 0.65625 +vt 0.6875 0.5 +vt 0.59375 0.5 +vt 0.8125 0.65625 +vt 0.84375 0.65625 +vt 0.84375 0.5 +vt 0.8125 0.5 +vt 0.71875 0.65625 +vt 0.8125 0.65625 +vt 0.8125 0.5 +vt 0.71875 0.5 +vt 0.71875 0.65625 +vt 0.6875 0.65625 +vt 0.6875 0.75 +vt 0.71875 0.75 +vt 0.75 0.75 +vt 0.71875 0.75 +vt 0.71875 0.65625 +vt 0.75 0.65625 +vn 0 -0.5735764363510462 -0.8191520442889919 +vn 1 0 0 +vn 0 0.5735764363510462 0.8191520442889919 +vn -1 0 0 +vn 0 0.8191520442889919 -0.5735764363510462 +vn 0 -0.8191520442889919 0.5735764363510462 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o wing1 +v 0.125 0.5051478245037531 -0.08881019196643142 +v 0.125 0.3976022426879319 -0.24240120027061735 +v 0.125 0.24916281066344315 0.09043244439327047 +v 0.125 0.14161722884762196 -0.06315856391091551 +v 0.0625 0.3976022426879319 -0.24240120027061735 +v 0.0625 0.5051478245037531 -0.08881019196643142 +v 0.0625 0.14161722884762196 -0.06315856391091551 +v 0.0625 0.24916281066344315 0.09043244439327047 +vt 0.6875 0.65625 +vt 0.71875 0.65625 +vt 0.71875 0.5 +vt 0.6875 0.5 +vt 0.59375 0.65625 +vt 0.6875 0.65625 +vt 0.6875 0.5 +vt 0.59375 0.5 +vt 0.8125 0.65625 +vt 0.84375 0.65625 +vt 0.84375 0.5 +vt 0.8125 0.5 +vt 0.71875 0.65625 +vt 0.8125 0.65625 +vt 0.8125 0.5 +vt 0.71875 0.5 +vt 0.71875 0.65625 +vt 0.6875 0.65625 +vt 0.6875 0.75 +vt 0.71875 0.75 +vt 0.75 0.75 +vt 0.71875 0.75 +vt 0.71875 0.65625 +vt 0.75 0.65625 +vn 0 -0.5735764363510462 -0.8191520442889919 +vn 1 0 0 +vn 0 0.5735764363510462 0.8191520442889919 +vn -1 0 0 +vn 0 0.8191520442889919 -0.5735764363510462 +vn 0 -0.8191520442889919 0.5735764363510462 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.0625 0.6125 -0.11249999999999999 +v 0.0625 0.6125 -0.2375 +v 0.0625 0.42500000000000004 -0.11249999999999999 +v 0.0625 0.42500000000000004 -0.2375 +v -0.0625 0.6125 -0.2375 +v -0.0625 0.6125 -0.11249999999999999 +v -0.0625 0.42500000000000004 -0.2375 +v -0.0625 0.42500000000000004 -0.11249999999999999 +vt 0.125 0.875 +vt 0.1875 0.875 +vt 0.1875 0.78125 +vt 0.125 0.78125 +vt 0.0625 0.875 +vt 0.125 0.875 +vt 0.125 0.78125 +vt 0.0625 0.78125 +vt 0.25 0.875 +vt 0.3125 0.875 +vt 0.3125 0.78125 +vt 0.25 0.78125 +vt 0.1875 0.875 +vt 0.25 0.875 +vt 0.25 0.78125 +vt 0.1875 0.78125 +vt 0.1875 0.875 +vt 0.125 0.875 +vt 0.125 0.9375 +vt 0.1875 0.9375 +vt 0.25 0.9375 +vt 0.1875 0.9375 +vt 0.1875 0.875 +vt 0.25 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o head2 +v 0.0625 0.675 -0.11249999999999999 +v 0.0625 0.675 -0.3625 +v 0.0625 0.6125 -0.11249999999999999 +v 0.0625 0.6125 -0.3625 +v -0.0625 0.675 -0.3625 +v -0.0625 0.675 -0.11249999999999999 +v -0.0625 0.6125 -0.3625 +v -0.0625 0.6125 -0.11249999999999999 +vt 0.4375 0.875 +vt 0.5 0.875 +vt 0.5 0.84375 +vt 0.4375 0.84375 +vt 0.3125 0.875 +vt 0.4375 0.875 +vt 0.4375 0.84375 +vt 0.3125 0.84375 +vt 0.625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.84375 +vt 0.625 0.84375 +vt 0.5 0.875 +vt 0.625 0.875 +vt 0.625 0.84375 +vt 0.5 0.84375 +vt 0.5 0.875 +vt 0.4375 0.875 +vt 0.4375 1 +vt 0.5 1 +vt 0.5625 1 +vt 0.5 1 +vt 0.5 0.875 +vt 0.5625 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o beak1 +v 0.03125 0.6125 -0.23125 +v 0.03125 0.6125 -0.29375 +v 0.03125 0.48750000000000004 -0.23125 +v 0.03125 0.48750000000000004 -0.29375 +v -0.03125 0.6125 -0.29375 +v -0.03125 0.6125 -0.23125 +v -0.03125 0.48750000000000004 -0.29375 +v -0.03125 0.48750000000000004 -0.23125 +vt 0.375 0.75 +vt 0.40625 0.75 +vt 0.40625 0.6875 +vt 0.375 0.6875 +vt 0.34375 0.75 +vt 0.375 0.75 +vt 0.375 0.6875 +vt 0.34375 0.6875 +vt 0.4375 0.75 +vt 0.46875 0.75 +vt 0.46875 0.6875 +vt 0.4375 0.6875 +vt 0.40625 0.75 +vt 0.4375 0.75 +vt 0.4375 0.6875 +vt 0.40625 0.6875 +vt 0.40625 0.75 +vt 0.375 0.75 +vt 0.375 0.78125 +vt 0.40625 0.78125 +vt 0.4375 0.78125 +vt 0.40625 0.78125 +vt 0.40625 0.75 +vt 0.4375 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o beak2 +v 0.03125 0.6124999999999998 -0.29375 +v 0.03125 0.6124999999999998 -0.35625 +v 0.03125 0.5062500000000001 -0.29375 +v 0.03125 0.5062500000000001 -0.35625 +v -0.03125 0.6124999999999998 -0.35625 +v -0.03125 0.6124999999999998 -0.29375 +v -0.03125 0.5062500000000001 -0.35625 +v -0.03125 0.5062500000000001 -0.29375 +vt 0.53125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.71875 +vt 0.53125 0.71875 +vt 0.5 0.75 +vt 0.53125 0.75 +vt 0.53125 0.71875 +vt 0.5 0.71875 +vt 0.59375 0.75 +vt 0.625 0.75 +vt 0.625 0.71875 +vt 0.59375 0.71875 +vt 0.5625 0.75 +vt 0.59375 0.75 +vt 0.59375 0.71875 +vt 0.5625 0.71875 +vt 0.5625 0.75 +vt 0.53125 0.75 +vt 0.53125 0.78125 +vt 0.5625 0.78125 +vt 0.59375 0.78125 +vt 0.5625 0.78125 +vt 0.5625 0.75 +vt 0.59375 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o feather +v 0 0.8812500000000001 -0.05625000000000002 +v 0 0.8812500000000001 -0.30625 +v 0 0.5687500000000001 -0.05625000000000002 +v 0 0.5687500000000001 -0.30625 +v 0 0.8812500000000001 -0.30625 +v 0 0.8812500000000001 -0.05625000000000002 +v 0 0.5687500000000001 -0.30625 +v 0 0.5687500000000001 -0.05625000000000002 +vt 0.1875 0.3125 +vt 0.1875 0.3125 +vt 0.1875 0.15625 +vt 0.1875 0.15625 +vt 0.0625 0.3125 +vt 0.1875 0.3125 +vt 0.1875 0.15625 +vt 0.0625 0.15625 +vt 0.3125 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.15625 +vt 0.3125 0.15625 +vt 0.1875 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.15625 +vt 0.1875 0.15625 +vt 0.1875 0.3125 +vt 0.1875 0.3125 +vt 0.1875 0.4375 +vt 0.1875 0.4375 +vt 0.1875 0.4375 +vt 0.1875 0.4375 +vt 0.1875 0.3125 +vt 0.1875 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o tail +v 0.09375 0.22142422560540864 0.027122222305063892 +v 0.09375 0.17354644791047258 -0.013052003300344839 +v 0.09375 0.06072732318377394 0.21863333308480837 +v 0.09375 0.012849545488837766 0.17845910747939964 +v -0.09375 0.17354644791047258 -0.013052003300344839 +v -0.09375 0.22142422560540864 0.027122222305063892 +v -0.09375 0.012849545488837766 0.17845910747939964 +v -0.09375 0.06072732318377394 0.21863333308480837 +vt 0.71875 0.9375 +vt 0.8125 0.9375 +vt 0.8125 0.8125 +vt 0.71875 0.8125 +vt 0.6875 0.9375 +vt 0.71875 0.9375 +vt 0.71875 0.8125 +vt 0.6875 0.8125 +vt 0.84375 0.9375 +vt 0.9375 0.9375 +vt 0.9375 0.8125 +vt 0.84375 0.8125 +vt 0.8125 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.8125 +vt 0.8125 0.8125 +vt 0.8125 0.9375 +vt 0.71875 0.9375 +vt 0.71875 0.96875 +vt 0.8125 0.96875 +vt 0.90625 0.96875 +vt 0.8125 0.96875 +vt 0.8125 0.9375 +vt 0.90625 0.9375 +vn 0 -0.766044443118978 -0.6427876096865393 +vn 1 0 0 +vn 0 0.766044443118978 0.6427876096865393 +vn -1 0 0 +vn 0 0.6427876096865393 -0.766044443118978 +vn 0 -0.6427876096865393 0.766044443118978 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o leg0 +v -0.03125 0.09375 -0.03125 +v -0.03125 0.09375 -0.09375 +v -0.03125 -0.03125 -0.03125 +v -0.03125 -0.03125 -0.09375 +v -0.09375 0.09375 -0.09375 +v -0.09375 0.09375 -0.03125 +v -0.09375 -0.03125 -0.09375 +v -0.09375 -0.03125 -0.03125 +vt 0.46875 0.40625 +vt 0.5 0.40625 +vt 0.5 0.34375 +vt 0.46875 0.34375 +vt 0.4375 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.34375 +vt 0.4375 0.34375 +vt 0.53125 0.40625 +vt 0.5625 0.40625 +vt 0.5625 0.34375 +vt 0.53125 0.34375 +vt 0.5 0.40625 +vt 0.53125 0.40625 +vt 0.53125 0.34375 +vt 0.5 0.34375 +vt 0.5 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.4375 +vt 0.5 0.4375 +vt 0.53125 0.4375 +vt 0.5 0.4375 +vt 0.5 0.40625 +vt 0.53125 0.40625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o leg1 +v 0.09375 0.09375 -0.03125 +v 0.09375 0.09375 -0.09375 +v 0.09375 -0.03125 -0.03125 +v 0.09375 -0.03125 -0.09375 +v 0.03125 0.09375 -0.09375 +v 0.03125 0.09375 -0.03125 +v 0.03125 -0.03125 -0.09375 +v 0.03125 -0.03125 -0.03125 +vt 0.46875 0.40625 +vt 0.5 0.40625 +vt 0.5 0.34375 +vt 0.46875 0.34375 +vt 0.4375 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.34375 +vt 0.4375 0.34375 +vt 0.53125 0.40625 +vt 0.5625 0.40625 +vt 0.5625 0.34375 +vt 0.53125 0.34375 +vt 0.5 0.40625 +vt 0.53125 0.40625 +vt 0.53125 0.34375 +vt 0.5 0.34375 +vt 0.5 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.4375 +vt 0.5 0.4375 +vt 0.53125 0.4375 +vt 0.5 0.4375 +vt 0.5 0.40625 +vt 0.53125 0.40625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_c341d2fe-028b-bd76-6b34-40c8c9b3653b +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/piglin.obj b/prismarine-viewer/viewer/lib/entity/models/piglin.obj new file mode 100644 index 00000000..2f68f4c1 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/piglin.obj @@ -0,0 +1,739 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o Body +v 0.25 1.5 0.125 +v 0.25 1.5 -0.125 +v 0.25 0.75 0.125 +v 0.25 0.75 -0.125 +v -0.25 1.5 -0.125 +v -0.25 1.5 0.125 +v -0.25 0.75 -0.125 +v -0.25 0.75 0.125 +vt 0.3125 0.6875 +vt 0.4375 0.6875 +vt 0.4375 0.5 +vt 0.3125 0.5 +vt 0.25 0.6875 +vt 0.3125 0.6875 +vt 0.3125 0.5 +vt 0.25 0.5 +vt 0.5 0.6875 +vt 0.625 0.6875 +vt 0.625 0.5 +vt 0.5 0.5 +vt 0.4375 0.6875 +vt 0.5 0.6875 +vt 0.5 0.5 +vt 0.4375 0.5 +vt 0.4375 0.6875 +vt 0.3125 0.6875 +vt 0.3125 0.75 +vt 0.4375 0.75 +vt 0.5625 0.75 +vt 0.4375 0.75 +vt 0.4375 0.6875 +vt 0.5625 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o Body +v 0.265625 1.515625 0.140625 +v 0.265625 1.515625 -0.140625 +v 0.265625 0.734375 0.140625 +v 0.265625 0.734375 -0.140625 +v -0.265625 1.515625 -0.140625 +v -0.265625 1.515625 0.140625 +v -0.265625 0.734375 -0.140625 +v -0.265625 0.734375 0.140625 +vt 0.3125 0.4375 +vt 0.4375 0.4375 +vt 0.4375 0.25 +vt 0.3125 0.25 +vt 0.25 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.25 +vt 0.25 0.25 +vt 0.5 0.4375 +vt 0.625 0.4375 +vt 0.625 0.25 +vt 0.5 0.25 +vt 0.4375 0.4375 +vt 0.5 0.4375 +vt 0.5 0.25 +vt 0.4375 0.25 +vt 0.4375 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.5 +vt 0.4375 0.5 +vt 0.5625 0.5 +vt 0.4375 0.5 +vt 0.4375 0.4375 +vt 0.5625 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.31125 1.9987500000000002 0.24875000000000003 +v 0.31125 1.9987500000000002 -0.24875000000000003 +v 0.31125 1.5012499999999998 0.24875000000000003 +v 0.31125 1.5012499999999998 -0.24875000000000003 +v -0.31125 1.9987500000000002 -0.24875000000000003 +v -0.31125 1.9987500000000002 0.24875000000000003 +v -0.31125 1.5012499999999998 -0.24875000000000003 +v -0.31125 1.5012499999999998 0.24875000000000003 +vt 0.125 0.875 +vt 0.28125 0.875 +vt 0.28125 0.75 +vt 0.125 0.75 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 0.75 +vt 0 0.75 +vt 0.40625 0.875 +vt 0.5625 0.875 +vt 0.5625 0.75 +vt 0.40625 0.75 +vt 0.28125 0.875 +vt 0.40625 0.875 +vt 0.40625 0.75 +vt 0.28125 0.75 +vt 0.28125 0.875 +vt 0.125 0.875 +vt 0.125 1 +vt 0.28125 1 +vt 0.4375 1 +vt 0.28125 1 +vt 0.28125 0.875 +vt 0.4375 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.125 1.75 -0.25 +v 0.125 1.75 -0.3125 +v 0.125 1.5 -0.25 +v 0.125 1.5 -0.3125 +v -0.125 1.75 -0.3125 +v -0.125 1.75 -0.25 +v -0.125 1.5 -0.3125 +v -0.125 1.5 -0.25 +vt 0.5 0.96875 +vt 0.5625 0.96875 +vt 0.5625 0.90625 +vt 0.5 0.90625 +vt 0.484375 0.96875 +vt 0.5 0.96875 +vt 0.5 0.90625 +vt 0.484375 0.90625 +vt 0.578125 0.96875 +vt 0.640625 0.96875 +vt 0.640625 0.90625 +vt 0.578125 0.90625 +vt 0.5625 0.96875 +vt 0.578125 0.96875 +vt 0.578125 0.90625 +vt 0.5625 0.90625 +vt 0.5625 0.96875 +vt 0.5 0.96875 +vt 0.5 0.984375 +vt 0.5625 0.984375 +vt 0.625 0.984375 +vt 0.5625 0.984375 +vt 0.5625 0.96875 +vt 0.625 0.96875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o head +v -0.125 1.625 -0.25 +v -0.125 1.625 -0.3125 +v -0.125 1.5 -0.25 +v -0.125 1.5 -0.3125 +v -0.1875 1.625 -0.3125 +v -0.1875 1.625 -0.25 +v -0.1875 1.5 -0.3125 +v -0.1875 1.5 -0.25 +vt 0.046875 0.921875 +vt 0.0625 0.921875 +vt 0.0625 0.890625 +vt 0.046875 0.890625 +vt 0.03125 0.921875 +vt 0.046875 0.921875 +vt 0.046875 0.890625 +vt 0.03125 0.890625 +vt 0.078125 0.921875 +vt 0.09375 0.921875 +vt 0.09375 0.890625 +vt 0.078125 0.890625 +vt 0.0625 0.921875 +vt 0.078125 0.921875 +vt 0.078125 0.890625 +vt 0.0625 0.890625 +vt 0.0625 0.921875 +vt 0.046875 0.921875 +vt 0.046875 0.9375 +vt 0.0625 0.9375 +vt 0.078125 0.9375 +vt 0.0625 0.9375 +vt 0.0625 0.921875 +vt 0.078125 0.921875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o head +v 0.1875 1.625 -0.25 +v 0.1875 1.625 -0.3125 +v 0.1875 1.5 -0.25 +v 0.1875 1.5 -0.3125 +v 0.125 1.625 -0.3125 +v 0.125 1.625 -0.25 +v 0.125 1.5 -0.3125 +v 0.125 1.5 -0.25 +vt 0.046875 0.984375 +vt 0.0625 0.984375 +vt 0.0625 0.953125 +vt 0.046875 0.953125 +vt 0.03125 0.984375 +vt 0.046875 0.984375 +vt 0.046875 0.953125 +vt 0.03125 0.953125 +vt 0.078125 0.984375 +vt 0.09375 0.984375 +vt 0.09375 0.953125 +vt 0.078125 0.953125 +vt 0.0625 0.984375 +vt 0.078125 0.984375 +vt 0.078125 0.953125 +vt 0.0625 0.953125 +vt 0.0625 0.984375 +vt 0.046875 0.984375 +vt 0.046875 1 +vt 0.0625 1 +vt 0.078125 1 +vt 0.0625 1 +vt 0.0625 0.984375 +vt 0.078125 0.984375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o leftear +v -0.25837341226347266 1.84375 0.125 +v -0.25837341226347266 1.84375 -0.125 +v -0.41462341226347266 1.573117061317363 0.125 +v -0.41462341226347266 1.573117061317363 -0.125 +v -0.3125 1.875 -0.125 +v -0.3125 1.875 0.125 +v -0.46875 1.604367061317363 -0.125 +v -0.46875 1.604367061317363 0.125 +vt 0.859375 0.84375 +vt 0.875 0.84375 +vt 0.875 0.765625 +vt 0.859375 0.765625 +vt 0.796875 0.84375 +vt 0.859375 0.84375 +vt 0.859375 0.765625 +vt 0.796875 0.765625 +vt 0.9375 0.84375 +vt 0.953125 0.84375 +vt 0.953125 0.765625 +vt 0.9375 0.765625 +vt 0.875 0.84375 +vt 0.9375 0.84375 +vt 0.9375 0.765625 +vt 0.875 0.765625 +vt 0.875 0.84375 +vt 0.859375 0.84375 +vt 0.859375 0.90625 +vt 0.875 0.90625 +vt 0.890625 0.90625 +vt 0.875 0.90625 +vt 0.875 0.84375 +vt 0.890625 0.84375 +vn 0 0 -1 +vn 0.8660254037844387 -0.49999999999999994 0 +vn 0 0 1 +vn -0.8660254037844387 0.49999999999999994 0 +vn 0.49999999999999994 0.8660254037844387 0 +vn -0.49999999999999994 -0.8660254037844387 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o rightear +v 0.3125 1.875 0.125 +v 0.3125 1.875 -0.125 +v 0.46875 1.604367061317363 0.125 +v 0.46875 1.604367061317363 -0.125 +v 0.25837341226347266 1.84375 -0.125 +v 0.25837341226347266 1.84375 0.125 +v 0.41462341226347266 1.573117061317363 -0.125 +v 0.41462341226347266 1.573117061317363 0.125 +vt 0.671875 0.84375 +vt 0.6875 0.84375 +vt 0.6875 0.765625 +vt 0.671875 0.765625 +vt 0.609375 0.84375 +vt 0.671875 0.84375 +vt 0.671875 0.765625 +vt 0.609375 0.765625 +vt 0.75 0.84375 +vt 0.765625 0.84375 +vt 0.765625 0.765625 +vt 0.75 0.765625 +vt 0.6875 0.84375 +vt 0.75 0.84375 +vt 0.75 0.765625 +vt 0.6875 0.765625 +vt 0.6875 0.84375 +vt 0.671875 0.84375 +vt 0.671875 0.90625 +vt 0.6875 0.90625 +vt 0.703125 0.90625 +vt 0.6875 0.90625 +vt 0.6875 0.84375 +vt 0.703125 0.84375 +vn 0 0 -1 +vn 0.8660254037844387 0.49999999999999994 0 +vn 0 0 1 +vn -0.8660254037844387 -0.49999999999999994 0 +vn -0.49999999999999994 0.8660254037844387 0 +vn 0.49999999999999994 -0.8660254037844387 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o RightArm +v 0.5 1.5 0.125 +v 0.5 1.5 -0.125 +v 0.5 0.75 0.125 +v 0.5 0.75 -0.125 +v 0.25 1.5 -0.125 +v 0.25 1.5 0.125 +v 0.25 0.75 -0.125 +v 0.25 0.75 0.125 +vt 0.6875 0.6875 +vt 0.75 0.6875 +vt 0.75 0.5 +vt 0.6875 0.5 +vt 0.625 0.6875 +vt 0.6875 0.6875 +vt 0.6875 0.5 +vt 0.625 0.5 +vt 0.8125 0.6875 +vt 0.875 0.6875 +vt 0.875 0.5 +vt 0.8125 0.5 +vt 0.75 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.5 +vt 0.75 0.5 +vt 0.75 0.6875 +vt 0.6875 0.6875 +vt 0.6875 0.75 +vt 0.75 0.75 +vt 0.8125 0.75 +vt 0.75 0.75 +vt 0.75 0.6875 +vt 0.8125 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o RightArm +v 0.515625 1.515625 0.140625 +v 0.515625 1.515625 -0.140625 +v 0.515625 0.734375 0.140625 +v 0.515625 0.734375 -0.140625 +v 0.234375 1.515625 -0.140625 +v 0.234375 1.515625 0.140625 +v 0.234375 0.734375 -0.140625 +v 0.234375 0.734375 0.140625 +vt 0.6875 0.4375 +vt 0.75 0.4375 +vt 0.75 0.25 +vt 0.6875 0.25 +vt 0.625 0.4375 +vt 0.6875 0.4375 +vt 0.6875 0.25 +vt 0.625 0.25 +vt 0.8125 0.4375 +vt 0.875 0.4375 +vt 0.875 0.25 +vt 0.8125 0.25 +vt 0.75 0.4375 +vt 0.8125 0.4375 +vt 0.8125 0.25 +vt 0.75 0.25 +vt 0.75 0.4375 +vt 0.6875 0.4375 +vt 0.6875 0.5 +vt 0.75 0.5 +vt 0.8125 0.5 +vt 0.75 0.5 +vt 0.75 0.4375 +vt 0.8125 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o LeftArm +v -0.25 1.5 0.125 +v -0.25 1.5 -0.125 +v -0.25 0.75 0.125 +v -0.25 0.75 -0.125 +v -0.5 1.5 -0.125 +v -0.5 1.5 0.125 +v -0.5 0.75 -0.125 +v -0.5 0.75 0.125 +vt 0.5625 0.1875 +vt 0.625 0.1875 +vt 0.625 0 +vt 0.5625 0 +vt 0.5 0.1875 +vt 0.5625 0.1875 +vt 0.5625 0 +vt 0.5 0 +vt 0.6875 0.1875 +vt 0.75 0.1875 +vt 0.75 0 +vt 0.6875 0 +vt 0.625 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0 +vt 0.625 0 +vt 0.625 0.1875 +vt 0.5625 0.1875 +vt 0.5625 0.25 +vt 0.625 0.25 +vt 0.6875 0.25 +vt 0.625 0.25 +vt 0.625 0.1875 +vt 0.6875 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o LeftArm +v -0.234375 1.515625 0.140625 +v -0.234375 1.515625 -0.140625 +v -0.234375 0.734375 0.140625 +v -0.234375 0.734375 -0.140625 +v -0.515625 1.515625 -0.140625 +v -0.515625 1.515625 0.140625 +v -0.515625 0.734375 -0.140625 +v -0.515625 0.734375 0.140625 +vt 0.8125 0.1875 +vt 0.875 0.1875 +vt 0.875 0 +vt 0.8125 0 +vt 0.75 0.1875 +vt 0.8125 0.1875 +vt 0.8125 0 +vt 0.75 0 +vt 0.9375 0.1875 +vt 1 0.1875 +vt 1 0 +vt 0.9375 0 +vt 0.875 0.1875 +vt 0.9375 0.1875 +vt 0.9375 0 +vt 0.875 0 +vt 0.875 0.1875 +vt 0.8125 0.1875 +vt 0.8125 0.25 +vt 0.875 0.25 +vt 0.9375 0.25 +vt 0.875 0.25 +vt 0.875 0.1875 +vt 0.9375 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o RightLeg +v 0.25 0.75 0.125 +v 0.25 0.75 -0.125 +v 0.25 0 0.125 +v 0.25 0 -0.125 +v 0 0.75 -0.125 +v 0 0.75 0.125 +v 0 0 -0.125 +v 0 0 0.125 +vt 0.0625 0.6875 +vt 0.125 0.6875 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.5 +vt 0 0.5 +vt 0.1875 0.6875 +vt 0.25 0.6875 +vt 0.25 0.5 +vt 0.1875 0.5 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.125 0.75 +vt 0.1875 0.75 +vt 0.125 0.75 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 +o RightLeg +v 0.265625 0.765625 0.140625 +v 0.265625 0.765625 -0.140625 +v 0.265625 -0.015625 0.140625 +v 0.265625 -0.015625 -0.140625 +v -0.015625 0.765625 -0.140625 +v -0.015625 0.765625 0.140625 +v -0.015625 -0.015625 -0.140625 +v -0.015625 -0.015625 0.140625 +vt 0.0625 0.4375 +vt 0.125 0.4375 +vt 0.125 0.25 +vt 0.0625 0.25 +vt 0 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.25 +vt 0 0.25 +vt 0.1875 0.4375 +vt 0.25 0.4375 +vt 0.25 0.25 +vt 0.1875 0.25 +vt 0.125 0.4375 +vt 0.1875 0.4375 +vt 0.1875 0.25 +vt 0.125 0.25 +vt 0.125 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.5 +vt 0.125 0.5 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.4375 +vt 0.1875 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 108/316/79 111/315/79 109/314/79 106/313/79 +f 107/320/80 108/319/80 106/318/80 105/317/80 +f 112/324/81 107/323/81 105/322/81 110/321/81 +f 111/328/82 112/327/82 110/326/82 109/325/82 +f 110/332/83 105/331/83 106/330/83 109/329/83 +f 111/336/84 108/335/84 107/334/84 112/333/84 +o LeftLeg +v 0 0.75 0.125 +v 0 0.75 -0.125 +v 0 0 0.125 +v 0 0 -0.125 +v -0.25 0.75 -0.125 +v -0.25 0.75 0.125 +v -0.25 0 -0.125 +v -0.25 0 0.125 +vt 0.3125 0.1875 +vt 0.375 0.1875 +vt 0.375 0 +vt 0.3125 0 +vt 0.25 0.1875 +vt 0.3125 0.1875 +vt 0.3125 0 +vt 0.25 0 +vt 0.4375 0.1875 +vt 0.5 0.1875 +vt 0.5 0 +vt 0.4375 0 +vt 0.375 0.1875 +vt 0.4375 0.1875 +vt 0.4375 0 +vt 0.375 0 +vt 0.375 0.1875 +vt 0.3125 0.1875 +vt 0.3125 0.25 +vt 0.375 0.25 +vt 0.4375 0.25 +vt 0.375 0.25 +vt 0.375 0.1875 +vt 0.4375 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 116/340/85 119/339/85 117/338/85 114/337/85 +f 115/344/86 116/343/86 114/342/86 113/341/86 +f 120/348/87 115/347/87 113/346/87 118/345/87 +f 119/352/88 120/351/88 118/350/88 117/349/88 +f 118/356/89 113/355/89 114/354/89 117/353/89 +f 119/360/90 116/359/90 115/358/90 120/357/90 +o LeftLeg +v 0.015625 0.765625 0.140625 +v 0.015625 0.765625 -0.140625 +v 0.015625 -0.015625 0.140625 +v 0.015625 -0.015625 -0.140625 +v -0.265625 0.765625 -0.140625 +v -0.265625 0.765625 0.140625 +v -0.265625 -0.015625 -0.140625 +v -0.265625 -0.015625 0.140625 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0 +vt 0.0625 0 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0 +vt 0 0 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0 +vt 0.1875 0 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0 +vt 0.125 0 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.25 +vt 0.125 0.25 +vt 0.1875 0.25 +vt 0.125 0.25 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_bd9b2175-46cc-d3be-0d85-ed94b50a7825 +f 124/364/91 127/363/91 125/362/91 122/361/91 +f 123/368/92 124/367/92 122/366/92 121/365/92 +f 128/372/93 123/371/93 121/370/93 126/369/93 +f 127/376/94 128/375/94 126/374/94 125/373/94 +f 126/380/95 121/379/95 122/378/95 125/377/95 +f 127/384/96 124/383/96 123/382/96 128/381/96 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/pillager.obj b/prismarine-viewer/viewer/lib/entity/models/pillager.obj new file mode 100644 index 00000000..213a3b94 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/pillager.obj @@ -0,0 +1,371 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o Body +v 0.25 1.5 0.1875 +v 0.25 1.5 -0.1875 +v 0.25 0.75 0.1875 +v 0.25 0.75 -0.1875 +v -0.25 1.5 -0.1875 +v -0.25 1.5 0.1875 +v -0.25 0.75 -0.1875 +v -0.25 0.75 0.1875 +vt 0.34375 0.59375 +vt 0.46875 0.59375 +vt 0.46875 0.40625 +vt 0.34375 0.40625 +vt 0.25 0.59375 +vt 0.34375 0.59375 +vt 0.34375 0.40625 +vt 0.25 0.40625 +vt 0.5625 0.59375 +vt 0.6875 0.59375 +vt 0.6875 0.40625 +vt 0.5625 0.40625 +vt 0.46875 0.59375 +vt 0.5625 0.59375 +vt 0.5625 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.59375 +vt 0.34375 0.59375 +vt 0.34375 0.6875 +vt 0.46875 0.6875 +vt 0.59375 0.6875 +vt 0.46875 0.6875 +vt 0.46875 0.59375 +vt 0.59375 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0e7f3cc8-7af8-21a7-d2f3-04bee5fb4aae +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o Body +v 0.28125 1.53125 0.21875 +v 0.28125 1.53125 -0.21875 +v 0.28125 0.34375 0.21875 +v 0.28125 0.34375 -0.21875 +v -0.28125 1.53125 -0.21875 +v -0.28125 1.53125 0.21875 +v -0.28125 0.34375 -0.21875 +v -0.28125 0.34375 0.21875 +vt 0.09375 0.3125 +vt 0.21875 0.3125 +vt 0.21875 0.03125 +vt 0.09375 0.03125 +vt 0 0.3125 +vt 0.09375 0.3125 +vt 0.09375 0.03125 +vt 0 0.03125 +vt 0.3125 0.3125 +vt 0.4375 0.3125 +vt 0.4375 0.03125 +vt 0.3125 0.03125 +vt 0.21875 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.03125 +vt 0.21875 0.03125 +vt 0.21875 0.3125 +vt 0.09375 0.3125 +vt 0.09375 0.40625 +vt 0.21875 0.40625 +vt 0.34375 0.40625 +vt 0.21875 0.40625 +vt 0.21875 0.3125 +vt 0.34375 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0e7f3cc8-7af8-21a7-d2f3-04bee5fb4aae +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.25 2.125 0.25 +v 0.25 2.125 -0.25 +v 0.25 1.5 0.25 +v 0.25 1.5 -0.25 +v -0.25 2.125 -0.25 +v -0.25 2.125 0.25 +v -0.25 1.5 -0.25 +v -0.25 1.5 0.25 +vt 0.125 0.875 +vt 0.25 0.875 +vt 0.25 0.71875 +vt 0.125 0.71875 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 0.71875 +vt 0 0.71875 +vt 0.375 0.875 +vt 0.5 0.875 +vt 0.5 0.71875 +vt 0.375 0.71875 +vt 0.25 0.875 +vt 0.375 0.875 +vt 0.375 0.71875 +vt 0.25 0.71875 +vt 0.25 0.875 +vt 0.125 0.875 +vt 0.125 1 +vt 0.25 1 +vt 0.375 1 +vt 0.25 1 +vt 0.25 0.875 +vt 0.375 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0e7f3cc8-7af8-21a7-d2f3-04bee5fb4aae +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o nose +v 0.0625 1.6875 -0.25 +v 0.0625 1.6875 -0.375 +v 0.0625 1.4375 -0.25 +v 0.0625 1.4375 -0.375 +v -0.0625 1.6875 -0.375 +v -0.0625 1.6875 -0.25 +v -0.0625 1.4375 -0.375 +v -0.0625 1.4375 -0.25 +vt 0.40625 0.96875 +vt 0.4375 0.96875 +vt 0.4375 0.90625 +vt 0.40625 0.90625 +vt 0.375 0.96875 +vt 0.40625 0.96875 +vt 0.40625 0.90625 +vt 0.375 0.90625 +vt 0.46875 0.96875 +vt 0.5 0.96875 +vt 0.5 0.90625 +vt 0.46875 0.90625 +vt 0.4375 0.96875 +vt 0.46875 0.96875 +vt 0.46875 0.90625 +vt 0.4375 0.90625 +vt 0.4375 0.96875 +vt 0.40625 0.96875 +vt 0.40625 1 +vt 0.4375 1 +vt 0.46875 1 +vt 0.4375 1 +vt 0.4375 0.96875 +vt 0.46875 0.96875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0e7f3cc8-7af8-21a7-d2f3-04bee5fb4aae +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o LeftLeg +v 0 0.75 0.125 +v 0 0.75 -0.125 +v 0 0 0.125 +v 0 0 -0.125 +v -0.25 0.75 -0.125 +v -0.25 0.75 0.125 +v -0.25 0 -0.125 +v -0.25 0 0.125 +vt 0.0625 0.59375 +vt 0.125 0.59375 +vt 0.125 0.40625 +vt 0.0625 0.40625 +vt 0 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.40625 +vt 0 0.40625 +vt 0.1875 0.59375 +vt 0.25 0.59375 +vt 0.25 0.40625 +vt 0.1875 0.40625 +vt 0.125 0.59375 +vt 0.1875 0.59375 +vt 0.1875 0.40625 +vt 0.125 0.40625 +vt 0.125 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.65625 +vt 0.125 0.65625 +vt 0.1875 0.65625 +vt 0.125 0.65625 +vt 0.125 0.59375 +vt 0.1875 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0e7f3cc8-7af8-21a7-d2f3-04bee5fb4aae +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o RightLeg +v 0.25 0.75 0.125 +v 0.25 0.75 -0.125 +v 0.25 0 0.125 +v 0.25 0 -0.125 +v 0 0.75 -0.125 +v 0 0.75 0.125 +v 0 0 -0.125 +v 0 0 0.125 +vt 0.125 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.40625 +vt 0.125 0.40625 +vt 0.1875 0.59375 +vt 0.125 0.59375 +vt 0.125 0.40625 +vt 0.1875 0.40625 +vt 0.25 0.59375 +vt 0.1875 0.59375 +vt 0.1875 0.40625 +vt 0.25 0.40625 +vt 0.0625 0.59375 +vt 0 0.59375 +vt 0 0.40625 +vt 0.0625 0.40625 +vt 0.0625 0.59375 +vt 0.125 0.59375 +vt 0.125 0.65625 +vt 0.0625 0.65625 +vt 0.125 0.65625 +vt 0.1875 0.65625 +vt 0.1875 0.59375 +vt 0.125 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0e7f3cc8-7af8-21a7-d2f3-04bee5fb4aae +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o RightArm +v 0.5 1.5 0.125 +v 0.5 1.5 -0.125 +v 0.5 0.75 0.125 +v 0.5 0.75 -0.125 +v 0.25 1.5 -0.125 +v 0.25 1.5 0.125 +v 0.25 0.75 -0.125 +v 0.25 0.75 0.125 +vt 0.6875 0.21875 +vt 0.75 0.21875 +vt 0.75 0.03125 +vt 0.6875 0.03125 +vt 0.625 0.21875 +vt 0.6875 0.21875 +vt 0.6875 0.03125 +vt 0.625 0.03125 +vt 0.8125 0.21875 +vt 0.875 0.21875 +vt 0.875 0.03125 +vt 0.8125 0.03125 +vt 0.75 0.21875 +vt 0.8125 0.21875 +vt 0.8125 0.03125 +vt 0.75 0.03125 +vt 0.75 0.21875 +vt 0.6875 0.21875 +vt 0.6875 0.28125 +vt 0.75 0.28125 +vt 0.8125 0.28125 +vt 0.75 0.28125 +vt 0.75 0.21875 +vt 0.8125 0.21875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0e7f3cc8-7af8-21a7-d2f3-04bee5fb4aae +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o LeftArm +v -0.25 1.5 0.125 +v -0.25 1.5 -0.125 +v -0.25 0.75 0.125 +v -0.25 0.75 -0.125 +v -0.5 1.5 -0.125 +v -0.5 1.5 0.125 +v -0.5 0.75 -0.125 +v -0.5 0.75 0.125 +vt 0.75 0.21875 +vt 0.6875 0.21875 +vt 0.6875 0.03125 +vt 0.75 0.03125 +vt 0.8125 0.21875 +vt 0.75 0.21875 +vt 0.75 0.03125 +vt 0.8125 0.03125 +vt 0.875 0.21875 +vt 0.8125 0.21875 +vt 0.8125 0.03125 +vt 0.875 0.03125 +vt 0.6875 0.21875 +vt 0.625 0.21875 +vt 0.625 0.03125 +vt 0.6875 0.03125 +vt 0.6875 0.21875 +vt 0.75 0.21875 +vt 0.75 0.28125 +vt 0.6875 0.28125 +vt 0.75 0.28125 +vt 0.8125 0.28125 +vt 0.8125 0.21875 +vt 0.75 0.21875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_0e7f3cc8-7af8-21a7-d2f3-04bee5fb4aae +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/rabbit.obj b/prismarine-viewer/viewer/lib/entity/models/rabbit.obj new file mode 100644 index 00000000..545c4b5d --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/rabbit.obj @@ -0,0 +1,555 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o rearFootLeft +v -0.125 0.0625 0.4375 +v -0.125 0.0625 0 +v -0.125 0 0.4375 +v -0.125 0 0 +v -0.25 0.0625 0 +v -0.25 0.0625 0.4375 +v -0.25 0 0 +v -0.25 0 0.4375 +vt 0.265625 0.03125 +vt 0.234375 0.03125 +vt 0.234375 0 +vt 0.265625 0 +vt 0.375 0.03125 +vt 0.265625 0.03125 +vt 0.265625 0 +vt 0.375 0 +vt 0.40625 0.03125 +vt 0.375 0.03125 +vt 0.375 0 +vt 0.40625 0 +vt 0.234375 0.03125 +vt 0.125 0.03125 +vt 0.125 0 +vt 0.234375 0 +vt 0.234375 0.03125 +vt 0.265625 0.03125 +vt 0.265625 0.25 +vt 0.234375 0.25 +vt 0.265625 0.25 +vt 0.296875 0.25 +vt 0.296875 0.03125 +vt 0.265625 0.03125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o rearFootRight +v 0.25 0.0625 0.4375 +v 0.25 0.0625 0 +v 0.25 0 0.4375 +v 0.25 0 0 +v 0.125 0.0625 0 +v 0.125 0.0625 0.4375 +v 0.125 0 0 +v 0.125 0 0.4375 +vt 0.546875 0.03125 +vt 0.515625 0.03125 +vt 0.515625 0 +vt 0.546875 0 +vt 0.65625 0.03125 +vt 0.546875 0.03125 +vt 0.546875 0 +vt 0.65625 0 +vt 0.6875 0.03125 +vt 0.65625 0.03125 +vt 0.65625 0 +vt 0.6875 0 +vt 0.515625 0.03125 +vt 0.40625 0.03125 +vt 0.40625 0 +vt 0.515625 0 +vt 0.515625 0.03125 +vt 0.546875 0.03125 +vt 0.546875 0.25 +vt 0.515625 0.25 +vt 0.546875 0.25 +vt 0.578125 0.25 +vt 0.578125 0.03125 +vt 0.546875 0.03125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o haunchLeft +v -0.125 0.29936870521072856 0.5249039439955965 +v -0.125 0.40625 0.23124999999999996 +v -0.125 0.06444555001425145 0.43939890816417915 +v -0.125 0.1713268448035229 0.14574496416858285 +v -0.25 0.40625 0.23124999999999996 +v -0.25 0.29936870521072856 0.5249039439955965 +v -0.25 0.1713268448035229 0.14574496416858285 +v -0.25 0.06444555001425145 0.43939890816417915 +vt 0.359375 0.375 +vt 0.328125 0.375 +vt 0.328125 0.25 +vt 0.359375 0.25 +vt 0.4375 0.375 +vt 0.359375 0.375 +vt 0.359375 0.25 +vt 0.4375 0.25 +vt 0.46875 0.375 +vt 0.4375 0.375 +vt 0.4375 0.25 +vt 0.46875 0.25 +vt 0.328125 0.375 +vt 0.25 0.375 +vt 0.25 0.25 +vt 0.328125 0.25 +vt 0.328125 0.375 +vt 0.359375 0.375 +vt 0.359375 0.53125 +vt 0.328125 0.53125 +vt 0.359375 0.53125 +vt 0.390625 0.53125 +vt 0.390625 0.375 +vt 0.359375 0.375 +vn 0 0.34202014332566866 -0.9396926207859084 +vn 1 0 0 +vn 0 -0.34202014332566866 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 0.34202014332566866 +vn 0 -0.9396926207859084 -0.34202014332566866 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o haunchRight +v 0.25 0.29936870521072856 0.5249039439955965 +v 0.25 0.40625 0.23124999999999996 +v 0.25 0.06444555001425145 0.43939890816417915 +v 0.25 0.1713268448035229 0.14574496416858285 +v 0.125 0.40625 0.23124999999999996 +v 0.125 0.29936870521072856 0.5249039439955965 +v 0.125 0.1713268448035229 0.14574496416858285 +v 0.125 0.06444555001425145 0.43939890816417915 +vt 0.578125 0.375 +vt 0.546875 0.375 +vt 0.546875 0.25 +vt 0.578125 0.25 +vt 0.65625 0.375 +vt 0.578125 0.375 +vt 0.578125 0.25 +vt 0.65625 0.25 +vt 0.6875 0.375 +vt 0.65625 0.375 +vt 0.65625 0.25 +vt 0.6875 0.25 +vt 0.546875 0.375 +vt 0.46875 0.375 +vt 0.46875 0.25 +vt 0.546875 0.25 +vt 0.546875 0.375 +vt 0.578125 0.375 +vt 0.578125 0.53125 +vt 0.546875 0.53125 +vt 0.578125 0.53125 +vt 0.609375 0.53125 +vt 0.609375 0.375 +vt 0.578125 0.375 +vn 0 0.34202014332566866 -0.9396926207859084 +vn 1 0 0 +vn 0 -0.34202014332566866 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 0.34202014332566866 +vn 0 -0.9396926207859084 -0.34202014332566866 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o body +v 0.1875 0.4299615775982385 0.5427525179157087 +v 0.1875 0.6437241671767815 -0.04455537007548416 +v 0.1875 0.1363076336026421 0.4358712231264371 +v 0.1875 0.3500702231811851 -0.1514366648647556 +v -0.1875 0.6437241671767815 -0.04455537007548416 +v -0.1875 0.4299615775982385 0.5427525179157087 +v -0.1875 0.3500702231811851 -0.1514366648647556 +v -0.1875 0.1363076336026421 0.4358712231264371 +vt 0.25 0.6875 +vt 0.15625 0.6875 +vt 0.15625 0.53125 +vt 0.25 0.53125 +vt 0.40625 0.6875 +vt 0.25 0.6875 +vt 0.25 0.53125 +vt 0.40625 0.53125 +vt 0.5 0.6875 +vt 0.40625 0.6875 +vt 0.40625 0.53125 +vt 0.5 0.53125 +vt 0.15625 0.6875 +vt 0 0.6875 +vt 0 0.53125 +vt 0.15625 0.53125 +vt 0.15625 0.6875 +vt 0.25 0.6875 +vt 0.25 1 +vt 0.15625 1 +vt 0.25 1 +vt 0.34375 1 +vt 0.34375 0.6875 +vt 0.25 0.6875 +vn 0 0.34202014332566866 -0.9396926207859084 +vn 1 0 0 +vn 0 -0.34202014332566866 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 0.34202014332566866 +vn 0 -0.9396926207859084 -0.34202014332566866 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o frontLegLeft +v -0.125 0.42664698889581687 -0.0009495154367369918 +v -0.125 0.44835301110418313 -0.12405048456326301 +v -0.125 -0.004206403047024132 -0.07692059316601901 +v -0.125 0.017499619161342128 -0.20002156229254503 +v -0.25 0.44835301110418313 -0.12405048456326301 +v -0.25 0.42664698889581687 -0.0009495154367369918 +v -0.25 0.017499619161342128 -0.20002156229254503 +v -0.25 -0.004206403047024132 -0.07692059316601901 +vt 0.1875 0.46875 +vt 0.15625 0.46875 +vt 0.15625 0.25 +vt 0.1875 0.25 +vt 0.21875 0.46875 +vt 0.1875 0.46875 +vt 0.1875 0.25 +vt 0.21875 0.25 +vt 0.25 0.46875 +vt 0.21875 0.46875 +vt 0.21875 0.25 +vt 0.25 0.25 +vt 0.15625 0.46875 +vt 0.125 0.46875 +vt 0.125 0.25 +vt 0.15625 0.25 +vt 0.15625 0.46875 +vt 0.1875 0.46875 +vt 0.1875 0.53125 +vt 0.15625 0.53125 +vt 0.1875 0.53125 +vt 0.21875 0.53125 +vt 0.21875 0.46875 +vt 0.1875 0.46875 +vn 0 0.17364817766693033 -0.984807753012208 +vn 1 0 0 +vn 0 -0.17364817766693033 0.984807753012208 +vn -1 0 0 +vn 0 0.984807753012208 0.17364817766693033 +vn 0 -0.984807753012208 -0.17364817766693033 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o frontLegRight +v 0.25 0.42664698889581687 -0.0009495154367369918 +v 0.25 0.44835301110418313 -0.12405048456326301 +v 0.25 -0.004206403047024132 -0.07692059316601901 +v 0.25 0.017499619161342128 -0.20002156229254503 +v 0.125 0.44835301110418313 -0.12405048456326301 +v 0.125 0.42664698889581687 -0.0009495154367369918 +v 0.125 0.017499619161342128 -0.20002156229254503 +v 0.125 -0.004206403047024132 -0.07692059316601901 +vt 0.0625 0.46875 +vt 0.03125 0.46875 +vt 0.03125 0.25 +vt 0.0625 0.25 +vt 0.09375 0.46875 +vt 0.0625 0.46875 +vt 0.0625 0.25 +vt 0.09375 0.25 +vt 0.125 0.46875 +vt 0.09375 0.46875 +vt 0.09375 0.25 +vt 0.125 0.25 +vt 0.03125 0.46875 +vt 0 0.46875 +vt 0 0.25 +vt 0.03125 0.25 +vt 0.03125 0.46875 +vt 0.0625 0.46875 +vt 0.0625 0.53125 +vt 0.03125 0.53125 +vt 0.0625 0.53125 +vt 0.09375 0.53125 +vt 0.09375 0.46875 +vt 0.0625 0.46875 +vn 0 0.17364817766693033 -0.984807753012208 +vn 1 0 0 +vn 0 -0.17364817766693033 0.984807753012208 +vn -1 0 0 +vn 0 0.984807753012208 0.17364817766693033 +vn 0 -0.984807753012208 -0.17364817766693033 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o head +v 0.15625 0.75 -0.0625 +v 0.15625 0.75 -0.375 +v 0.15625 0.5 -0.0625 +v 0.15625 0.5 -0.375 +v -0.15625 0.75 -0.375 +v -0.15625 0.75 -0.0625 +v -0.15625 0.5 -0.375 +v -0.15625 0.5 -0.0625 +vt 0.65625 0.84375 +vt 0.578125 0.84375 +vt 0.578125 0.71875 +vt 0.65625 0.71875 +vt 0.734375 0.84375 +vt 0.65625 0.84375 +vt 0.65625 0.71875 +vt 0.734375 0.71875 +vt 0.8125 0.84375 +vt 0.734375 0.84375 +vt 0.734375 0.71875 +vt 0.8125 0.71875 +vt 0.578125 0.84375 +vt 0.5 0.84375 +vt 0.5 0.71875 +vt 0.578125 0.71875 +vt 0.578125 0.84375 +vt 0.65625 0.84375 +vt 0.65625 1 +vt 0.578125 1 +vt 0.65625 1 +vt 0.734375 1 +vt 0.734375 0.84375 +vt 0.65625 0.84375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o earRight +v 0.1509259103576669 1.0625 -0.10294047579726884 +v 0.1347497200387594 1.0625 -0.16331083994033568 +v 0.1509259103576669 0.75 -0.10294047579726884 +v 0.1347497200387594 0.75 -0.16331083994033568 +v 0.014008991752625821 1.0625 -0.1309584593025206 +v 0.030185182071533423 1.0625 -0.07058809515945375 +v 0.014008991752625821 0.75 -0.1309584593025206 +v 0.030185182071533423 0.75 -0.07058809515945375 +vt 0.953125 0.96875 +vt 0.921875 0.96875 +vt 0.921875 0.8125 +vt 0.953125 0.8125 +vt 0.96875 0.96875 +vt 0.953125 0.96875 +vt 0.953125 0.8125 +vt 0.96875 0.8125 +vt 1 0.96875 +vt 0.96875 0.96875 +vt 0.96875 0.8125 +vt 1 0.8125 +vt 0.921875 0.96875 +vt 0.90625 0.96875 +vt 0.90625 0.8125 +vt 0.921875 0.8125 +vt 0.921875 0.96875 +vt 0.953125 0.96875 +vt 0.953125 1 +vt 0.921875 1 +vt 0.953125 1 +vt 0.984375 1 +vt 0.984375 0.96875 +vt 0.953125 0.96875 +vn -0.25881904510252074 0 -0.9659258262890683 +vn 0.9659258262890683 0 -0.25881904510252074 +vn 0.25881904510252074 0 0.9659258262890683 +vn -0.9659258262890683 0 0.25881904510252074 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o earLeft +v -0.030185182071533367 1.0625 -0.07058809515945375 +v -0.014008991752625821 1.0625 -0.1309584593025206 +v -0.030185182071533367 0.75 -0.07058809515945375 +v -0.014008991752625821 0.75 -0.1309584593025206 +v -0.1347497200387594 1.0625 -0.16331083994033568 +v -0.1509259103576669 1.0625 -0.10294047579726884 +v -0.1347497200387594 0.75 -0.16331083994033568 +v -0.1509259103576669 0.75 -0.10294047579726884 +vt 0.859375 0.96875 +vt 0.828125 0.96875 +vt 0.828125 0.8125 +vt 0.859375 0.8125 +vt 0.875 0.96875 +vt 0.859375 0.96875 +vt 0.859375 0.8125 +vt 0.875 0.8125 +vt 0.90625 0.96875 +vt 0.875 0.96875 +vt 0.875 0.8125 +vt 0.90625 0.8125 +vt 0.828125 0.96875 +vt 0.8125 0.96875 +vt 0.8125 0.8125 +vt 0.828125 0.8125 +vt 0.828125 0.96875 +vt 0.859375 0.96875 +vt 0.859375 1 +vt 0.828125 1 +vt 0.859375 1 +vt 0.890625 1 +vt 0.890625 0.96875 +vt 0.859375 0.96875 +vn 0.25881904510252074 0 -0.9659258262890683 +vn 0.9659258262890683 0 0.25881904510252074 +vn -0.25881904510252074 0 0.9659258262890683 +vn -0.9659258262890683 0 -0.25881904510252074 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o tail +v 0.09375 0.2953436652829704 0.5870259660350201 +v 0.09375 0.33809618319867885 0.4695643884367815 +v 0.09375 0.11915129888561249 0.5228971891614571 +v 0.09375 0.16190381680132115 0.4054356115632185 +v -0.09375 0.33809618319867885 0.4695643884367815 +v -0.09375 0.2953436652829704 0.5870259660350201 +v -0.09375 0.16190381680132115 0.4054356115632185 +v -0.09375 0.11915129888561249 0.5228971891614571 +vt 0.890625 0.75 +vt 0.84375 0.75 +vt 0.84375 0.65625 +vt 0.890625 0.65625 +vt 0.921875 0.75 +vt 0.890625 0.75 +vt 0.890625 0.65625 +vt 0.921875 0.65625 +vt 0.96875 0.75 +vt 0.921875 0.75 +vt 0.921875 0.65625 +vt 0.96875 0.65625 +vt 0.84375 0.75 +vt 0.8125 0.75 +vt 0.8125 0.65625 +vt 0.84375 0.65625 +vt 0.84375 0.75 +vt 0.890625 0.75 +vt 0.890625 0.8125 +vt 0.84375 0.8125 +vt 0.890625 0.8125 +vt 0.9375 0.8125 +vt 0.9375 0.75 +vt 0.890625 0.75 +vn 0 0.34202014332566866 -0.9396926207859084 +vn 1 0 0 +vn 0 -0.34202014332566866 0.9396926207859084 +vn -1 0 0 +vn 0 0.9396926207859084 0.34202014332566866 +vn 0 -0.9396926207859084 -0.34202014332566866 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o nose +v 0.03125 0.65625 -0.34375 +v 0.03125 0.65625 -0.40625 +v 0.03125 0.59375 -0.34375 +v 0.03125 0.59375 -0.40625 +v -0.03125 0.65625 -0.40625 +v -0.03125 0.65625 -0.34375 +v -0.03125 0.59375 -0.40625 +v -0.03125 0.59375 -0.34375 +vt 0.53125 0.6875 +vt 0.515625 0.6875 +vt 0.515625 0.65625 +vt 0.53125 0.65625 +vt 0.546875 0.6875 +vt 0.53125 0.6875 +vt 0.53125 0.65625 +vt 0.546875 0.65625 +vt 0.5625 0.6875 +vt 0.546875 0.6875 +vt 0.546875 0.65625 +vt 0.5625 0.65625 +vt 0.515625 0.6875 +vt 0.5 0.6875 +vt 0.5 0.65625 +vt 0.515625 0.65625 +vt 0.515625 0.6875 +vt 0.53125 0.6875 +vt 0.53125 0.71875 +vt 0.515625 0.71875 +vt 0.53125 0.71875 +vt 0.546875 0.71875 +vt 0.546875 0.6875 +vt 0.53125 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_a200089f-c989-c3f8-c313-2c45240e78d7 +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/sheep.obj b/prismarine-viewer/viewer/lib/entity/models/sheep.obj new file mode 100644 index 00000000..66a2175f --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/sheep.obj @@ -0,0 +1,555 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.25 1.1250000000000002 -0.5 +v 0.25 0.7500000000000002 -0.5 +v 0.25 1.125 0.5 +v 0.25 0.75 0.4999999999999999 +v -0.25 0.7500000000000002 -0.5 +v -0.25 1.1250000000000002 -0.5 +v -0.25 0.75 0.4999999999999999 +v -0.25 1.125 0.5 +vt 0.53125 0.78125 +vt 0.65625 0.78125 +vt 0.65625 0.53125 +vt 0.53125 0.53125 +vt 0.4375 0.78125 +vt 0.53125 0.78125 +vt 0.53125 0.53125 +vt 0.4375 0.53125 +vt 0.75 0.78125 +vt 0.875 0.78125 +vt 0.875 0.53125 +vt 0.75 0.53125 +vt 0.65625 0.78125 +vt 0.75 0.78125 +vt 0.75 0.53125 +vt 0.65625 0.53125 +vt 0.65625 0.78125 +vt 0.53125 0.78125 +vt 0.53125 0.875 +vt 0.65625 0.875 +vt 0.78125 0.875 +vt 0.65625 0.875 +vt 0.65625 0.78125 +vt 0.78125 0.78125 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0.359375 1.2343750000000002 -0.609375 +v 0.359375 0.6406250000000002 -0.609375 +v 0.359375 1.234375 0.609375 +v 0.359375 0.640625 0.609375 +v -0.359375 0.6406250000000002 -0.609375 +v -0.359375 1.2343750000000002 -0.609375 +v -0.359375 0.640625 0.609375 +v -0.359375 1.234375 0.609375 +vt 0.53125 0.28125 +vt 0.65625 0.28125 +vt 0.65625 0.03125 +vt 0.53125 0.03125 +vt 0.4375 0.28125 +vt 0.53125 0.28125 +vt 0.53125 0.03125 +vt 0.4375 0.03125 +vt 0.75 0.28125 +vt 0.875 0.28125 +vt 0.875 0.03125 +vt 0.75 0.03125 +vt 0.65625 0.28125 +vt 0.75 0.28125 +vt 0.75 0.03125 +vt 0.65625 0.03125 +vt 0.65625 0.28125 +vt 0.53125 0.28125 +vt 0.53125 0.375 +vt 0.65625 0.375 +vt 0.78125 0.375 +vt 0.65625 0.375 +vt 0.65625 0.28125 +vt 0.78125 0.28125 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.1875 1.375 -0.375 +v 0.1875 1.375 -0.875 +v 0.1875 1 -0.375 +v 0.1875 1 -0.875 +v -0.1875 1.375 -0.875 +v -0.1875 1.375 -0.375 +v -0.1875 1 -0.875 +v -0.1875 1 -0.375 +vt 0.125 0.875 +vt 0.21875 0.875 +vt 0.21875 0.78125 +vt 0.125 0.78125 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 0.78125 +vt 0 0.78125 +vt 0.34375 0.875 +vt 0.4375 0.875 +vt 0.4375 0.78125 +vt 0.34375 0.78125 +vt 0.21875 0.875 +vt 0.34375 0.875 +vt 0.34375 0.78125 +vt 0.21875 0.78125 +vt 0.21875 0.875 +vt 0.125 0.875 +vt 0.125 1 +vt 0.21875 1 +vt 0.3125 1 +vt 0.21875 1 +vt 0.21875 0.875 +vt 0.3125 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.22499999999999998 1.4125 -0.3375 +v 0.22499999999999998 1.4125 -0.7875 +v 0.22499999999999998 0.9624999999999999 -0.3375 +v 0.22499999999999998 0.9624999999999999 -0.7875 +v -0.22499999999999998 1.4125 -0.7875 +v -0.22499999999999998 1.4125 -0.3375 +v -0.22499999999999998 0.9624999999999999 -0.7875 +v -0.22499999999999998 0.9624999999999999 -0.3375 +vt 0.09375 0.40625 +vt 0.1875 0.40625 +vt 0.1875 0.3125 +vt 0.09375 0.3125 +vt 0 0.40625 +vt 0.09375 0.40625 +vt 0.09375 0.3125 +vt 0 0.3125 +vt 0.28125 0.40625 +vt 0.375 0.40625 +vt 0.375 0.3125 +vt 0.28125 0.3125 +vt 0.1875 0.40625 +vt 0.28125 0.40625 +vt 0.28125 0.3125 +vt 0.1875 0.3125 +vt 0.1875 0.40625 +vt 0.09375 0.40625 +vt 0.09375 0.5 +vt 0.1875 0.5 +vt 0.28125 0.5 +vt 0.1875 0.5 +vt 0.1875 0.40625 +vt 0.28125 0.40625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o leg0 +v 0.3125 0.75 0.5625 +v 0.3125 0.75 0.3125 +v 0.3125 0 0.5625 +v 0.3125 0 0.3125 +v 0.0625 0.75 0.3125 +v 0.0625 0.75 0.5625 +v 0.0625 0 0.3125 +v 0.0625 0 0.5625 +vt 0.0625 0.6875 +vt 0.125 0.6875 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.5 +vt 0 0.5 +vt 0.1875 0.6875 +vt 0.25 0.6875 +vt 0.25 0.5 +vt 0.1875 0.5 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.125 0.75 +vt 0.1875 0.75 +vt 0.125 0.75 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o leg0 +v 0.34375 0.78125 0.59375 +v 0.34375 0.78125 0.28125 +v 0.34375 0.34375 0.59375 +v 0.34375 0.34375 0.28125 +v 0.03125 0.78125 0.28125 +v 0.03125 0.78125 0.59375 +v 0.03125 0.34375 0.28125 +v 0.03125 0.34375 0.59375 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0.09375 +vt 0.0625 0.09375 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.09375 +vt 0 0.09375 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0.09375 +vt 0.1875 0.09375 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.09375 +vt 0.125 0.09375 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.25 +vt 0.125 0.25 +vt 0.1875 0.25 +vt 0.125 0.25 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o leg1 +v -0.0625 0.75 0.5625 +v -0.0625 0.75 0.3125 +v -0.0625 0 0.5625 +v -0.0625 0 0.3125 +v -0.3125 0.75 0.3125 +v -0.3125 0.75 0.5625 +v -0.3125 0 0.3125 +v -0.3125 0 0.5625 +vt 0.0625 0.6875 +vt 0.125 0.6875 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.5 +vt 0 0.5 +vt 0.1875 0.6875 +vt 0.25 0.6875 +vt 0.25 0.5 +vt 0.1875 0.5 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.125 0.75 +vt 0.1875 0.75 +vt 0.125 0.75 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o leg1 +v -0.03125 0.78125 0.59375 +v -0.03125 0.78125 0.28125 +v -0.03125 0.34375 0.59375 +v -0.03125 0.34375 0.28125 +v -0.34375 0.78125 0.28125 +v -0.34375 0.78125 0.59375 +v -0.34375 0.34375 0.28125 +v -0.34375 0.34375 0.59375 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0.09375 +vt 0.0625 0.09375 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.09375 +vt 0 0.09375 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0.09375 +vt 0.1875 0.09375 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.09375 +vt 0.125 0.09375 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.25 +vt 0.125 0.25 +vt 0.1875 0.25 +vt 0.125 0.25 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o leg2 +v 0.3125 0.75 -0.1875 +v 0.3125 0.75 -0.4375 +v 0.3125 0 -0.1875 +v 0.3125 0 -0.4375 +v 0.0625 0.75 -0.4375 +v 0.0625 0.75 -0.1875 +v 0.0625 0 -0.4375 +v 0.0625 0 -0.1875 +vt 0.0625 0.6875 +vt 0.125 0.6875 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.5 +vt 0 0.5 +vt 0.1875 0.6875 +vt 0.25 0.6875 +vt 0.25 0.5 +vt 0.1875 0.5 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.125 0.75 +vt 0.1875 0.75 +vt 0.125 0.75 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o leg2 +v 0.34375 0.78125 -0.15625 +v 0.34375 0.78125 -0.46875 +v 0.34375 0.34375 -0.15625 +v 0.34375 0.34375 -0.46875 +v 0.03125 0.78125 -0.46875 +v 0.03125 0.78125 -0.15625 +v 0.03125 0.34375 -0.46875 +v 0.03125 0.34375 -0.15625 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0.09375 +vt 0.0625 0.09375 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.09375 +vt 0 0.09375 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0.09375 +vt 0.1875 0.09375 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.09375 +vt 0.125 0.09375 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.25 +vt 0.125 0.25 +vt 0.1875 0.25 +vt 0.125 0.25 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o leg3 +v -0.0625 0.75 -0.1875 +v -0.0625 0.75 -0.4375 +v -0.0625 0 -0.1875 +v -0.0625 0 -0.4375 +v -0.3125 0.75 -0.4375 +v -0.3125 0.75 -0.1875 +v -0.3125 0 -0.4375 +v -0.3125 0 -0.1875 +vt 0.0625 0.6875 +vt 0.125 0.6875 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.5 +vt 0 0.5 +vt 0.1875 0.6875 +vt 0.25 0.6875 +vt 0.25 0.5 +vt 0.1875 0.5 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.125 0.75 +vt 0.1875 0.75 +vt 0.125 0.75 +vt 0.125 0.6875 +vt 0.1875 0.6875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o leg3 +v -0.03125 0.78125 -0.15625 +v -0.03125 0.78125 -0.46875 +v -0.03125 0.34375 -0.15625 +v -0.03125 0.34375 -0.46875 +v -0.34375 0.78125 -0.46875 +v -0.34375 0.78125 -0.15625 +v -0.34375 0.34375 -0.46875 +v -0.34375 0.34375 -0.15625 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0.09375 +vt 0.0625 0.09375 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.09375 +vt 0 0.09375 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0.09375 +vt 0.1875 0.09375 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.09375 +vt 0.125 0.09375 +vt 0.125 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.25 +vt 0.125 0.25 +vt 0.1875 0.25 +vt 0.125 0.25 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/shulker.obj b/prismarine-viewer/viewer/lib/entity/models/shulker.obj new file mode 100644 index 00000000..0287fddb --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/shulker.obj @@ -0,0 +1,141 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o base +v 0.5 0.5 0.5 +v 0.5 0.5 -0.5 +v 0.5 0 0.5 +v 0.5 0 -0.5 +v -0.5 0.5 -0.5 +v -0.5 0.5 0.5 +v -0.5 0 -0.5 +v -0.5 0 0.5 +vt 0.25 0.3125 +vt 0.5 0.3125 +vt 0.5 0.1875 +vt 0.25 0.1875 +vt 0 0.3125 +vt 0.25 0.3125 +vt 0.25 0.1875 +vt 0 0.1875 +vt 0.75 0.3125 +vt 1 0.3125 +vt 1 0.1875 +vt 0.75 0.1875 +vt 0.5 0.3125 +vt 0.75 0.3125 +vt 0.75 0.1875 +vt 0.5 0.1875 +vt 0.5 0.3125 +vt 0.25 0.3125 +vt 0.25 0.5625 +vt 0.5 0.5625 +vt 0.75 0.5625 +vt 0.5 0.5625 +vt 0.5 0.3125 +vt 0.75 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1c25eeea-87e5-6114-747e-b8cdb1a56a09 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o lid +v 0.5 1.5625 0.5 +v 0.5 1.5625 -0.5 +v 0.5 0.8125 0.5 +v 0.5 0.8125 -0.5 +v -0.5 1.5625 -0.5 +v -0.5 1.5625 0.5 +v -0.5 0.8125 -0.5 +v -0.5 0.8125 0.5 +vt 0.25 0.75 +vt 0.5 0.75 +vt 0.5 0.5625 +vt 0.25 0.5625 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 0.5625 +vt 0 0.5625 +vt 0.75 0.75 +vt 1 0.75 +vt 1 0.5625 +vt 0.75 0.5625 +vt 0.5 0.75 +vt 0.75 0.75 +vt 0.75 0.5625 +vt 0.5 0.5625 +vt 0.5 0.75 +vt 0.25 0.75 +vt 0.25 1 +vt 0.5 1 +vt 0.75 1 +vt 0.5 1 +vt 0.5 0.75 +vt 0.75 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1c25eeea-87e5-6114-747e-b8cdb1a56a09 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.1875 0.75 0.1875 +v 0.1875 0.75 -0.1875 +v 0.1875 0.375 0.1875 +v 0.1875 0.375 -0.1875 +v -0.1875 0.75 -0.1875 +v -0.1875 0.75 0.1875 +v -0.1875 0.375 -0.1875 +v -0.1875 0.375 0.1875 +vt 0.09375 0.09375 +vt 0.1875 0.09375 +vt 0.1875 0 +vt 0.09375 0 +vt 0 0.09375 +vt 0.09375 0.09375 +vt 0.09375 0 +vt 0 0 +vt 0.28125 0.09375 +vt 0.375 0.09375 +vt 0.375 0 +vt 0.28125 0 +vt 0.1875 0.09375 +vt 0.28125 0.09375 +vt 0.28125 0 +vt 0.1875 0 +vt 0.1875 0.09375 +vt 0.09375 0.09375 +vt 0.09375 0.1875 +vt 0.1875 0.1875 +vt 0.28125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.09375 +vt 0.28125 0.09375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_1c25eeea-87e5-6114-747e-b8cdb1a56a09 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/sniffer.obj b/prismarine-viewer/viewer/lib/entity/models/sniffer.obj new file mode 100644 index 00000000..6fe8ed15 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/sniffer.obj @@ -0,0 +1,693 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.8125 2.09375 1.28125 +v 0.8125 2.09375 -1.28125 +v 0.8125 0.53125 1.28125 +v 0.8125 0.53125 -1.28125 +v -0.8125 2.09375 -1.28125 +v -0.8125 2.09375 1.28125 +v -0.8125 0.53125 -1.28125 +v -0.8125 0.53125 1.28125 +vt 0.53125 0.7916666666666666 +vt 0.6614583333333334 0.7916666666666666 +vt 0.6614583333333334 0.6666666666666667 +vt 0.53125 0.6666666666666667 +vt 0.3229166666666667 0.7916666666666666 +vt 0.53125 0.7916666666666666 +vt 0.53125 0.6666666666666667 +vt 0.3229166666666667 0.6666666666666667 +vt 0.8697916666666666 0.7916666666666666 +vt 1 0.7916666666666666 +vt 1 0.6666666666666667 +vt 0.8697916666666666 0.6666666666666667 +vt 0.6614583333333334 0.7916666666666666 +vt 0.8697916666666666 0.7916666666666666 +vt 0.8697916666666666 0.6666666666666667 +vt 0.6614583333333334 0.6666666666666667 +vt 0.6614583333333334 0.7916666666666666 +vt 0.53125 0.7916666666666666 +vt 0.53125 1 +vt 0.6614583333333334 1 +vt 0.7916666666666666 1 +vt 0.6614583333333334 1 +vt 0.6614583333333334 0.7916666666666666 +vt 0.7916666666666666 0.7916666666666666 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0.78125 2.0625 1.25 +v 0.78125 2.0625 -1.25 +v 0.78125 0.25 1.25 +v 0.78125 0.25 -1.25 +v -0.78125 2.0625 -1.25 +v -0.78125 2.0625 1.25 +v -0.78125 0.25 -1.25 +v -0.78125 0.25 1.25 +vt 0.53125 0.4375 +vt 0.6614583333333334 0.4375 +vt 0.6614583333333334 0.28645833333333337 +vt 0.53125 0.28645833333333337 +vt 0.3229166666666667 0.4375 +vt 0.53125 0.4375 +vt 0.53125 0.28645833333333337 +vt 0.3229166666666667 0.28645833333333337 +vt 0.8697916666666666 0.4375 +vt 1 0.4375 +vt 1 0.28645833333333337 +vt 0.8697916666666666 0.28645833333333337 +vt 0.6614583333333334 0.4375 +vt 0.8697916666666666 0.4375 +vt 0.8697916666666666 0.28645833333333337 +vt 0.6614583333333334 0.28645833333333337 +vt 0.6614583333333334 0.4375 +vt 0.53125 0.4375 +vt 0.53125 0.6458333333333333 +vt 0.6614583333333334 0.6458333333333333 +vt 0.7916666666666666 0.6458333333333333 +vt 0.6614583333333334 0.6458333333333333 +vt 0.6614583333333334 0.4375 +vt 0.7916666666666666 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o body +v 0.78125 0.5 1.25 +v 0.78125 0.5 -1.25 +v 0.78125 0.5 1.25 +v 0.78125 0.5 -1.25 +v -0.78125 0.5 -1.25 +v -0.78125 0.5 1.25 +v -0.78125 0.5 -1.25 +v -0.78125 0.5 1.25 +vt 0.6614583333333334 0.4375 +vt 0.7916666666666666 0.4375 +vt 0.7916666666666666 0.4375 +vt 0.6614583333333334 0.4375 +vt 0.453125 0.4375 +vt 0.6614583333333334 0.4375 +vt 0.6614583333333334 0.4375 +vt 0.453125 0.4375 +vt 1 0.4375 +vt 1.1302083333333333 0.4375 +vt 1.1302083333333333 0.4375 +vt 1 0.4375 +vt 0.7916666666666666 0.4375 +vt 1 0.4375 +vt 1 0.4375 +vt 0.7916666666666666 0.4375 +vt 0.7916666666666666 0.4375 +vt 0.6614583333333334 0.4375 +vt 0.6614583333333334 0.6458333333333333 +vt 0.7916666666666666 0.6458333333333333 +vt 0.921875 0.6458333333333333 +vt 0.7916666666666666 0.6458333333333333 +vt 0.7916666666666666 0.4375 +vt 0.921875 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.40625 1.3125 -1.24375 +v 0.40625 1.3125 -1.93125 +v 0.40625 0.1875 -1.24375 +v 0.40625 0.1875 -1.93125 +v -0.40625 1.3125 -1.93125 +v -0.40625 1.3125 -1.24375 +v -0.40625 0.1875 -1.93125 +v -0.40625 0.1875 -1.24375 +vt 0.09895833333333333 0.8645833333333334 +vt 0.16666666666666666 0.8645833333333334 +vt 0.16666666666666666 0.7708333333333334 +vt 0.09895833333333333 0.7708333333333334 +vt 0.041666666666666664 0.8645833333333334 +vt 0.09895833333333333 0.8645833333333334 +vt 0.09895833333333333 0.7708333333333334 +vt 0.041666666666666664 0.7708333333333334 +vt 0.22395833333333334 0.8645833333333334 +vt 0.2916666666666667 0.8645833333333334 +vt 0.2916666666666667 0.7708333333333334 +vt 0.22395833333333334 0.7708333333333334 +vt 0.16666666666666666 0.8645833333333334 +vt 0.22395833333333334 0.8645833333333334 +vt 0.22395833333333334 0.7708333333333334 +vt 0.16666666666666666 0.7708333333333334 +vt 0.16666666666666666 0.8645833333333334 +vt 0.09895833333333333 0.8645833333333334 +vt 0.09895833333333333 0.921875 +vt 0.16666666666666666 0.921875 +vt 0.234375 0.921875 +vt 0.16666666666666666 0.921875 +vt 0.16666666666666666 0.8645833333333334 +vt 0.234375 0.8645833333333334 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o head +v 0.40625 0.375 -1.24375 +v 0.40625 0.375 -1.93125 +v 0.40625 0.375 -1.24375 +v 0.40625 0.375 -1.93125 +v -0.40625 0.375 -1.93125 +v -0.40625 0.375 -1.24375 +v -0.40625 0.375 -1.93125 +v -0.40625 0.375 -1.24375 +vt 0.09895833333333333 0.921875 +vt 0.16666666666666666 0.921875 +vt 0.16666666666666666 0.921875 +vt 0.09895833333333333 0.921875 +vt 0.041666666666666664 0.921875 +vt 0.09895833333333333 0.921875 +vt 0.09895833333333333 0.921875 +vt 0.041666666666666664 0.921875 +vt 0.22395833333333334 0.921875 +vt 0.2916666666666667 0.921875 +vt 0.2916666666666667 0.921875 +vt 0.22395833333333334 0.921875 +vt 0.16666666666666666 0.921875 +vt 0.22395833333333334 0.921875 +vt 0.22395833333333334 0.921875 +vt 0.16666666666666666 0.921875 +vt 0.16666666666666666 0.921875 +vt 0.09895833333333333 0.921875 +vt 0.09895833333333333 0.9791666666666666 +vt 0.16666666666666666 0.9791666666666666 +vt 0.234375 0.9791666666666666 +vt 0.16666666666666666 0.9791666666666666 +vt 0.16666666666666666 0.921875 +vt 0.234375 0.921875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o left_ear +v -0.4 1.3125 -1.24375 +v -0.4 1.3125 -1.68125 +v -0.4 0.125 -1.24375 +v -0.4 0.125 -1.68125 +v -0.4625 1.3125 -1.68125 +v -0.4625 1.3125 -1.24375 +v -0.4625 0.125 -1.68125 +v -0.4625 0.125 -1.24375 +vt 0.046875 0.9635416666666666 +vt 0.052083333333333336 0.9635416666666666 +vt 0.052083333333333336 0.8645833333333334 +vt 0.046875 0.8645833333333334 +vt 0.010416666666666666 0.9635416666666666 +vt 0.046875 0.9635416666666666 +vt 0.046875 0.8645833333333334 +vt 0.010416666666666666 0.8645833333333334 +vt 0.08854166666666667 0.9635416666666666 +vt 0.09375 0.9635416666666666 +vt 0.09375 0.8645833333333334 +vt 0.08854166666666667 0.8645833333333334 +vt 0.052083333333333336 0.9635416666666666 +vt 0.08854166666666667 0.9635416666666666 +vt 0.08854166666666667 0.8645833333333334 +vt 0.052083333333333336 0.8645833333333334 +vt 0.052083333333333336 0.9635416666666666 +vt 0.046875 0.9635416666666666 +vt 0.046875 1 +vt 0.052083333333333336 1 +vt 0.057291666666666664 1 +vt 0.052083333333333336 1 +vt 0.052083333333333336 0.9635416666666666 +vt 0.057291666666666664 0.9635416666666666 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o right_ear +v 0.4625 1.3125 -1.24375 +v 0.4625 1.3125 -1.68125 +v 0.4625 0.125 -1.24375 +v 0.4625 0.125 -1.68125 +v 0.4 1.3125 -1.68125 +v 0.4 1.3125 -1.24375 +v 0.4 0.125 -1.68125 +v 0.4 0.125 -1.24375 +vt 0.2864583333333333 0.9635416666666666 +vt 0.2916666666666667 0.9635416666666666 +vt 0.2916666666666667 0.8645833333333334 +vt 0.2864583333333333 0.8645833333333334 +vt 0.25 0.9635416666666666 +vt 0.2864583333333333 0.9635416666666666 +vt 0.2864583333333333 0.8645833333333334 +vt 0.25 0.8645833333333334 +vt 0.328125 0.9635416666666666 +vt 0.3333333333333333 0.9635416666666666 +vt 0.3333333333333333 0.8645833333333334 +vt 0.328125 0.8645833333333334 +vt 0.2916666666666667 0.9635416666666666 +vt 0.328125 0.9635416666666666 +vt 0.328125 0.8645833333333334 +vt 0.2916666666666667 0.8645833333333334 +vt 0.2916666666666667 0.9635416666666666 +vt 0.2864583333333333 0.9635416666666666 +vt 0.2864583333333333 1 +vt 0.2916666666666667 1 +vt 0.296875 1 +vt 0.2916666666666667 1 +vt 0.2916666666666667 0.9635416666666666 +vt 0.296875 0.9635416666666666 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o nose +v 0.40625 1.25 -1.93125 +v 0.40625 1.25 -2.49375 +v 0.40625 1.125 -1.93125 +v 0.40625 1.125 -2.49375 +v -0.40625 1.25 -2.49375 +v -0.40625 1.25 -1.93125 +v -0.40625 1.125 -2.49375 +v -0.40625 1.125 -1.93125 +vt 0.09895833333333333 0.71875 +vt 0.16666666666666666 0.71875 +vt 0.16666666666666666 0.7083333333333333 +vt 0.09895833333333333 0.7083333333333333 +vt 0.052083333333333336 0.71875 +vt 0.09895833333333333 0.71875 +vt 0.09895833333333333 0.7083333333333333 +vt 0.052083333333333336 0.7083333333333333 +vt 0.21354166666666666 0.71875 +vt 0.28125 0.71875 +vt 0.28125 0.7083333333333333 +vt 0.21354166666666666 0.7083333333333333 +vt 0.16666666666666666 0.71875 +vt 0.21354166666666666 0.71875 +vt 0.21354166666666666 0.7083333333333333 +vt 0.16666666666666666 0.7083333333333333 +vt 0.16666666666666666 0.71875 +vt 0.09895833333333333 0.71875 +vt 0.09895833333333333 0.765625 +vt 0.16666666666666666 0.765625 +vt 0.234375 0.765625 +vt 0.16666666666666666 0.765625 +vt 0.16666666666666666 0.71875 +vt 0.234375 0.71875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o lower_beak +v 0.40625 1.125 -1.93125 +v 0.40625 1.125 -2.49375 +v 0.40625 0.375 -1.93125 +v 0.40625 0.375 -2.49375 +v -0.40625 1.125 -2.49375 +v -0.40625 1.125 -1.93125 +v -0.40625 0.375 -2.49375 +v -0.40625 0.375 -1.93125 +vt 0.09895833333333333 0.65625 +vt 0.16666666666666666 0.65625 +vt 0.16666666666666666 0.59375 +vt 0.09895833333333333 0.59375 +vt 0.052083333333333336 0.65625 +vt 0.09895833333333333 0.65625 +vt 0.09895833333333333 0.59375 +vt 0.052083333333333336 0.59375 +vt 0.21354166666666666 0.65625 +vt 0.28125 0.65625 +vt 0.28125 0.59375 +vt 0.21354166666666666 0.59375 +vt 0.16666666666666666 0.65625 +vt 0.21354166666666666 0.65625 +vt 0.21354166666666666 0.59375 +vt 0.16666666666666666 0.59375 +vt 0.16666666666666666 0.65625 +vt 0.09895833333333333 0.65625 +vt 0.09895833333333333 0.703125 +vt 0.16666666666666666 0.703125 +vt 0.234375 0.703125 +vt 0.16666666666666666 0.703125 +vt 0.16666666666666666 0.65625 +vt 0.234375 0.65625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o right_front_leg +v 0.6875 0.625 -0.6875 +v 0.6875 0.625 -1.1875 +v 0.6875 0 -0.6875 +v 0.6875 0 -1.1875 +v 0.25 0.625 -1.1875 +v 0.25 0.625 -0.6875 +v 0.25 0 -1.1875 +v 0.25 0 -0.6875 +vt 0.20833333333333334 0.5052083333333333 +vt 0.24479166666666666 0.5052083333333333 +vt 0.24479166666666666 0.453125 +vt 0.20833333333333334 0.453125 +vt 0.16666666666666666 0.5052083333333333 +vt 0.20833333333333334 0.5052083333333333 +vt 0.20833333333333334 0.453125 +vt 0.16666666666666666 0.453125 +vt 0.2864583333333333 0.5052083333333333 +vt 0.3229166666666667 0.5052083333333333 +vt 0.3229166666666667 0.453125 +vt 0.2864583333333333 0.453125 +vt 0.24479166666666666 0.5052083333333333 +vt 0.2864583333333333 0.5052083333333333 +vt 0.2864583333333333 0.453125 +vt 0.24479166666666666 0.453125 +vt 0.24479166666666666 0.5052083333333333 +vt 0.20833333333333334 0.5052083333333333 +vt 0.20833333333333334 0.546875 +vt 0.24479166666666666 0.546875 +vt 0.28125 0.546875 +vt 0.24479166666666666 0.546875 +vt 0.24479166666666666 0.5052083333333333 +vt 0.28125 0.5052083333333333 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o right_mid_leg +v 0.6875 0.625 0.25 +v 0.6875 0.625 -0.25 +v 0.6875 0 0.25 +v 0.6875 0 -0.25 +v 0.25 0.625 -0.25 +v 0.25 0.625 0.25 +v 0.25 0 -0.25 +v 0.25 0 0.25 +vt 0.20833333333333334 0.41145833333333337 +vt 0.24479166666666666 0.41145833333333337 +vt 0.24479166666666666 0.359375 +vt 0.20833333333333334 0.359375 +vt 0.16666666666666666 0.41145833333333337 +vt 0.20833333333333334 0.41145833333333337 +vt 0.20833333333333334 0.359375 +vt 0.16666666666666666 0.359375 +vt 0.2864583333333333 0.41145833333333337 +vt 0.3229166666666667 0.41145833333333337 +vt 0.3229166666666667 0.359375 +vt 0.2864583333333333 0.359375 +vt 0.24479166666666666 0.41145833333333337 +vt 0.2864583333333333 0.41145833333333337 +vt 0.2864583333333333 0.359375 +vt 0.24479166666666666 0.359375 +vt 0.24479166666666666 0.41145833333333337 +vt 0.20833333333333334 0.41145833333333337 +vt 0.20833333333333334 0.453125 +vt 0.24479166666666666 0.453125 +vt 0.28125 0.453125 +vt 0.24479166666666666 0.453125 +vt 0.24479166666666666 0.41145833333333337 +vt 0.28125 0.41145833333333337 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o right_hind_leg +v 0.6875 0.625 1.1875 +v 0.6875 0.625 0.6875 +v 0.6875 0 1.1875 +v 0.6875 0 0.6875 +v 0.25 0.625 0.6875 +v 0.25 0.625 1.1875 +v 0.25 0 0.6875 +v 0.25 0 1.1875 +vt 0.20833333333333334 0.31770833333333337 +vt 0.24479166666666666 0.31770833333333337 +vt 0.24479166666666666 0.265625 +vt 0.20833333333333334 0.265625 +vt 0.16666666666666666 0.31770833333333337 +vt 0.20833333333333334 0.31770833333333337 +vt 0.20833333333333334 0.265625 +vt 0.16666666666666666 0.265625 +vt 0.2864583333333333 0.31770833333333337 +vt 0.3229166666666667 0.31770833333333337 +vt 0.3229166666666667 0.265625 +vt 0.2864583333333333 0.265625 +vt 0.24479166666666666 0.31770833333333337 +vt 0.2864583333333333 0.31770833333333337 +vt 0.2864583333333333 0.265625 +vt 0.24479166666666666 0.265625 +vt 0.24479166666666666 0.31770833333333337 +vt 0.20833333333333334 0.31770833333333337 +vt 0.20833333333333334 0.359375 +vt 0.24479166666666666 0.359375 +vt 0.28125 0.359375 +vt 0.24479166666666666 0.359375 +vt 0.24479166666666666 0.31770833333333337 +vt 0.28125 0.31770833333333337 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o left_front_leg +v -0.25 0.625 -0.6875 +v -0.25 0.625 -1.1875 +v -0.25 0 -0.6875 +v -0.25 0 -1.1875 +v -0.6875 0.625 -1.1875 +v -0.6875 0.625 -0.6875 +v -0.6875 0 -1.1875 +v -0.6875 0 -0.6875 +vt 0.041666666666666664 0.5052083333333333 +vt 0.078125 0.5052083333333333 +vt 0.078125 0.453125 +vt 0.041666666666666664 0.453125 +vt 0 0.5052083333333333 +vt 0.041666666666666664 0.5052083333333333 +vt 0.041666666666666664 0.453125 +vt 0 0.453125 +vt 0.11979166666666667 0.5052083333333333 +vt 0.15625 0.5052083333333333 +vt 0.15625 0.453125 +vt 0.11979166666666667 0.453125 +vt 0.078125 0.5052083333333333 +vt 0.11979166666666667 0.5052083333333333 +vt 0.11979166666666667 0.453125 +vt 0.078125 0.453125 +vt 0.078125 0.5052083333333333 +vt 0.041666666666666664 0.5052083333333333 +vt 0.041666666666666664 0.546875 +vt 0.078125 0.546875 +vt 0.11458333333333333 0.546875 +vt 0.078125 0.546875 +vt 0.078125 0.5052083333333333 +vt 0.11458333333333333 0.5052083333333333 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 +o left_mid_leg +v -0.25 0.625 0.25 +v -0.25 0.625 -0.25 +v -0.25 0 0.25 +v -0.25 0 -0.25 +v -0.6875 0.625 -0.25 +v -0.6875 0.625 0.25 +v -0.6875 0 -0.25 +v -0.6875 0 0.25 +vt 0.041666666666666664 0.41145833333333337 +vt 0.078125 0.41145833333333337 +vt 0.078125 0.359375 +vt 0.041666666666666664 0.359375 +vt 0 0.41145833333333337 +vt 0.041666666666666664 0.41145833333333337 +vt 0.041666666666666664 0.359375 +vt 0 0.359375 +vt 0.11979166666666667 0.41145833333333337 +vt 0.15625 0.41145833333333337 +vt 0.15625 0.359375 +vt 0.11979166666666667 0.359375 +vt 0.078125 0.41145833333333337 +vt 0.11979166666666667 0.41145833333333337 +vt 0.11979166666666667 0.359375 +vt 0.078125 0.359375 +vt 0.078125 0.41145833333333337 +vt 0.041666666666666664 0.41145833333333337 +vt 0.041666666666666664 0.453125 +vt 0.078125 0.453125 +vt 0.11458333333333333 0.453125 +vt 0.078125 0.453125 +vt 0.078125 0.41145833333333337 +vt 0.11458333333333333 0.41145833333333337 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 108/316/79 111/315/79 109/314/79 106/313/79 +f 107/320/80 108/319/80 106/318/80 105/317/80 +f 112/324/81 107/323/81 105/322/81 110/321/81 +f 111/328/82 112/327/82 110/326/82 109/325/82 +f 110/332/83 105/331/83 106/330/83 109/329/83 +f 111/336/84 108/335/84 107/334/84 112/333/84 +o left_hind_leg +v -0.25 0.625 1.1875 +v -0.25 0.625 0.6875 +v -0.25 0 1.1875 +v -0.25 0 0.6875 +v -0.6875 0.625 0.6875 +v -0.6875 0.625 1.1875 +v -0.6875 0 0.6875 +v -0.6875 0 1.1875 +vt 0.041666666666666664 0.31770833333333337 +vt 0.078125 0.31770833333333337 +vt 0.078125 0.265625 +vt 0.041666666666666664 0.265625 +vt 0 0.31770833333333337 +vt 0.041666666666666664 0.31770833333333337 +vt 0.041666666666666664 0.265625 +vt 0 0.265625 +vt 0.11979166666666667 0.31770833333333337 +vt 0.15625 0.31770833333333337 +vt 0.15625 0.265625 +vt 0.11979166666666667 0.265625 +vt 0.078125 0.31770833333333337 +vt 0.11979166666666667 0.31770833333333337 +vt 0.11979166666666667 0.265625 +vt 0.078125 0.265625 +vt 0.078125 0.31770833333333337 +vt 0.041666666666666664 0.31770833333333337 +vt 0.041666666666666664 0.359375 +vt 0.078125 0.359375 +vt 0.11458333333333333 0.359375 +vt 0.078125 0.359375 +vt 0.078125 0.31770833333333337 +vt 0.11458333333333333 0.31770833333333337 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_583c9f26-fb84-68dc-a891-67c1661cee33 +f 116/340/85 119/339/85 117/338/85 114/337/85 +f 115/344/86 116/343/86 114/342/86 113/341/86 +f 120/348/87 115/347/87 113/346/87 118/345/87 +f 119/352/88 120/351/88 118/350/88 117/349/88 +f 118/356/89 113/355/89 114/354/89 117/353/89 +f 119/360/90 116/359/90 115/358/90 120/357/90 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/spider.obj b/prismarine-viewer/viewer/lib/entity/models/spider.obj new file mode 100644 index 00000000..eb636839 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/spider.obj @@ -0,0 +1,509 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o head +v 0.25 0.8125 -0.1875 +v 0.25 0.8125 -0.6875 +v 0.25 0.3125 -0.1875 +v 0.25 0.3125 -0.6875 +v -0.25 0.8125 -0.6875 +v -0.25 0.8125 -0.1875 +v -0.25 0.3125 -0.6875 +v -0.25 0.3125 -0.1875 +vt 0.625 0.625 +vt 0.75 0.625 +vt 0.75 0.375 +vt 0.625 0.375 +vt 0.5 0.625 +vt 0.625 0.625 +vt 0.625 0.375 +vt 0.5 0.375 +vt 0.875 0.625 +vt 1 0.625 +vt 1 0.375 +vt 0.875 0.375 +vt 0.75 0.625 +vt 0.875 0.625 +vt 0.875 0.375 +vt 0.75 0.375 +vt 0.75 0.625 +vt 0.625 0.625 +vt 0.625 0.875 +vt 0.75 0.875 +vt 0.875 0.875 +vt 0.75 0.875 +vt 0.75 0.625 +vt 0.875 0.625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body0 +v 0.1875 0.75 0.1875 +v 0.1875 0.75 -0.1875 +v 0.1875 0.375 0.1875 +v 0.1875 0.375 -0.1875 +v -0.1875 0.75 -0.1875 +v -0.1875 0.75 0.1875 +v -0.1875 0.375 -0.1875 +v -0.1875 0.375 0.1875 +vt 0.09375 0.8125 +vt 0.1875 0.8125 +vt 0.1875 0.625 +vt 0.09375 0.625 +vt 0 0.8125 +vt 0.09375 0.8125 +vt 0.09375 0.625 +vt 0 0.625 +vt 0.28125 0.8125 +vt 0.375 0.8125 +vt 0.375 0.625 +vt 0.28125 0.625 +vt 0.1875 0.8125 +vt 0.28125 0.8125 +vt 0.28125 0.625 +vt 0.1875 0.625 +vt 0.1875 0.8125 +vt 0.09375 0.8125 +vt 0.09375 1 +vt 0.1875 1 +vt 0.28125 1 +vt 0.1875 1 +vt 0.1875 0.8125 +vt 0.28125 0.8125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o body1 +v 0.3125 0.8125 0.9375 +v 0.3125 0.8125 0.1875 +v 0.3125 0.3125 0.9375 +v 0.3125 0.3125 0.1875 +v -0.3125 0.8125 0.1875 +v -0.3125 0.8125 0.9375 +v -0.3125 0.3125 0.1875 +v -0.3125 0.3125 0.9375 +vt 0.1875 0.25 +vt 0.34375 0.25 +vt 0.34375 0 +vt 0.1875 0 +vt 0 0.25 +vt 0.1875 0.25 +vt 0.1875 0 +vt 0 0 +vt 0.53125 0.25 +vt 0.6875 0.25 +vt 0.6875 0 +vt 0.53125 0 +vt 0.34375 0.25 +vt 0.53125 0.25 +vt 0.53125 0 +vt 0.34375 0 +vt 0.34375 0.25 +vt 0.1875 0.25 +vt 0.1875 0.625 +vt 0.34375 0.625 +vt 0.5 0.625 +vt 0.34375 0.625 +vt 0.34375 0.25 +vt 0.5 0.25 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o leg0 +v 0.7316941738241591 0.16919417382415936 0.8321067811865475 +v 0.7941941738241591 0.10669417382415936 0.743718433538229 +v 0.6433058261758406 0.08080582617584087 0.8321067811865475 +v 0.7058058261758406 0.018305826175840867 0.743718433538229 +v 0.29419417382415913 0.6066941738241591 0.03661165235168151 +v 0.23169417382415913 0.6691941738241591 0.125 +v 0.20580582617584076 0.5183058261758409 0.03661165235168151 +v 0.14330582617584076 0.5808058261758409 0.125 +vt 0.3125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.875 +vt 0.3125 0.875 +vt 0.28125 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.59375 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.875 +vt 0.59375 0.875 +vt 0.5625 0.9375 +vt 0.59375 0.9375 +vt 0.59375 0.875 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 1 +vt 0.5625 1 +vt 0.8125 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.8125 0.9375 +vn 0.5 -0.5 -0.7071067811865476 +vn 0.5 -0.5 0.7071067811865477 +vn -0.5 0.5 0.7071067811865476 +vn -0.5 0.5 -0.7071067811865477 +vn 0.7071067811865477 0.7071067811865476 0 +vn -0.7071067811865477 -0.7071067811865476 0 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o leg1 +v -0.23169417382415913 0.6691941738241591 0.125 +v -0.29419417382415913 0.6066941738241591 0.03661165235168151 +v -0.14330582617584076 0.5808058261758409 0.125 +v -0.20580582617584076 0.5183058261758409 0.03661165235168151 +v -0.794194173824159 0.10669417382415936 0.743718433538229 +v -0.731694173824159 0.16919417382415936 0.8321067811865475 +v -0.7058058261758406 0.018305826175840867 0.743718433538229 +v -0.6433058261758406 0.08080582617584087 0.8321067811865475 +vt 0.3125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.875 +vt 0.3125 0.875 +vt 0.28125 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.59375 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.875 +vt 0.59375 0.875 +vt 0.5625 0.9375 +vt 0.59375 0.9375 +vt 0.59375 0.875 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 1 +vt 0.5625 1 +vt 0.8125 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.8125 0.9375 +vn -0.5 -0.5 -0.7071067811865476 +vn 0.5 0.5 -0.7071067811865477 +vn 0.5 0.5 0.7071067811865476 +vn -0.5 -0.5 0.7071067811865477 +vn -0.7071067811865477 0.7071067811865476 0 +vn 0.7071067811865477 -0.7071067811865476 0 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o leg2 +v 1.0143853759373593 0.10357000946898909 0.36551321892668 +v 1.0408868946744412 0.08501344627527851 0.2447724906405464 +v 0.9426883213934785 0.0011760039328650995 0.36551321892668 +v 0.9691898401305603 -0.017380559260845474 0.2447724906405464 +v 0.24964677943821734 0.6390457394976019 -0.014046554461974337 +v 0.2231452607011355 0.6576023026913125 0.10669417382415924 +v 0.17794972489433658 0.5366517339614778 -0.014046554461974337 +v 0.15144820615725474 0.5552082971551884 0.10669417382415924 +vt 0.3125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.875 +vt 0.3125 0.875 +vt 0.28125 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.59375 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.875 +vt 0.59375 0.875 +vt 0.5625 0.9375 +vt 0.59375 0.9375 +vt 0.59375 0.875 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 1 +vt 0.5625 1 +vt 0.8125 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.8125 0.9375 +vn 0.21201214989665462 -0.1484525055496845 -0.9659258262890683 +vn 0.7912401152362238 -0.5540322932223234 0.25881904510252074 +vn -0.21201214989665462 0.1484525055496845 0.9659258262890683 +vn -0.7912401152362238 0.5540322932223234 -0.25881904510252074 +vn 0.5735764363510462 0.8191520442889919 1.387778780781446e-17 +vn -0.5735764363510462 -0.8191520442889919 -1.387778780781446e-17 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o leg3 +v -0.2231452607011355 0.6576023026913125 0.10669417382415924 +v -0.24964677943821734 0.6390457394976019 -0.014046554461974337 +v -0.15144820615725474 0.5552082971551884 0.10669417382415924 +v -0.17794972489433658 0.5366517339614778 -0.014046554461974337 +v -1.0408868946744412 0.08501344627527851 0.2447724906405464 +v -1.0143853759373593 0.10357000946898909 0.36551321892668 +v -0.9691898401305603 -0.017380559260845474 0.2447724906405464 +v -0.9426883213934785 0.0011760039328650995 0.36551321892668 +vt 0.3125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.875 +vt 0.3125 0.875 +vt 0.28125 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.59375 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.875 +vt 0.59375 0.875 +vt 0.5625 0.9375 +vt 0.59375 0.9375 +vt 0.59375 0.875 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 1 +vt 0.5625 1 +vt 0.8125 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.8125 0.9375 +vn -0.21201214989665462 -0.1484525055496845 -0.9659258262890683 +vn 0.7912401152362238 0.5540322932223234 -0.25881904510252074 +vn 0.21201214989665462 0.1484525055496845 0.9659258262890683 +vn -0.7912401152362238 -0.5540322932223234 0.25881904510252074 +vn -0.5735764363510462 0.8191520442889919 1.387778780781446e-17 +vn 0.5735764363510462 -0.8191520442889919 -1.387778780781446e-17 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o leg4 +v 1.0408868946744412 0.08501344627527851 -0.1822724906405464 +v 1.0143853759373593 0.10357000946898909 -0.30301321892668 +v 0.9691898401305603 -0.017380559260845474 -0.1822724906405464 +v 0.9426883213934785 0.0011760039328650995 -0.30301321892668 +v 0.2231452607011355 0.6576023026913125 -0.044194173824159244 +v 0.24964677943821734 0.6390457394976019 0.07654655446197434 +v 0.15144820615725474 0.5552082971551884 -0.044194173824159244 +v 0.17794972489433658 0.5366517339614778 0.07654655446197434 +vt 0.3125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.875 +vt 0.3125 0.875 +vt 0.28125 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.59375 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.875 +vt 0.59375 0.875 +vt 0.5625 0.9375 +vt 0.59375 0.9375 +vt 0.59375 0.875 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 1 +vt 0.5625 1 +vt 0.8125 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.8125 0.9375 +vn -0.21201214989665462 0.1484525055496845 -0.9659258262890683 +vn 0.7912401152362238 -0.5540322932223234 -0.25881904510252074 +vn 0.21201214989665462 -0.1484525055496845 0.9659258262890683 +vn -0.7912401152362238 0.5540322932223234 0.25881904510252074 +vn 0.5735764363510462 0.8191520442889919 -1.387778780781446e-17 +vn -0.5735764363510462 -0.8191520442889919 1.387778780781446e-17 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o leg5 +v -0.24964677943821734 0.6390457394976019 0.07654655446197434 +v -0.2231452607011355 0.6576023026913125 -0.044194173824159244 +v -0.17794972489433658 0.5366517339614778 0.07654655446197434 +v -0.15144820615725474 0.5552082971551884 -0.044194173824159244 +v -1.0143853759373593 0.10357000946898909 -0.30301321892668 +v -1.0408868946744412 0.08501344627527851 -0.1822724906405464 +v -0.9426883213934785 0.0011760039328650995 -0.30301321892668 +v -0.9691898401305603 -0.017380559260845474 -0.1822724906405464 +vt 0.3125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.875 +vt 0.3125 0.875 +vt 0.28125 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.59375 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.875 +vt 0.59375 0.875 +vt 0.5625 0.9375 +vt 0.59375 0.9375 +vt 0.59375 0.875 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 1 +vt 0.5625 1 +vt 0.8125 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.8125 0.9375 +vn 0.21201214989665462 0.1484525055496845 -0.9659258262890683 +vn 0.7912401152362238 0.5540322932223234 0.25881904510252074 +vn -0.21201214989665462 -0.1484525055496845 0.9659258262890683 +vn -0.7912401152362238 -0.5540322932223234 -0.25881904510252074 +vn -0.5735764363510462 0.8191520442889919 -1.387778780781446e-17 +vn 0.5735764363510462 -0.8191520442889919 1.387778780781446e-17 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o leg6 +v 0.7941941738241591 0.10669417382415936 -0.681218433538229 +v 0.7316941738241591 0.16919417382415936 -0.7696067811865475 +v 0.7058058261758406 0.018305826175840867 -0.681218433538229 +v 0.6433058261758406 0.08080582617584087 -0.7696067811865475 +v 0.23169417382415913 0.6691941738241591 -0.0625 +v 0.29419417382415913 0.6066941738241591 0.025888347648318488 +v 0.14330582617584076 0.5808058261758409 -0.0625 +v 0.20580582617584076 0.5183058261758409 0.025888347648318488 +vt 0.3125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.875 +vt 0.3125 0.875 +vt 0.28125 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.59375 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.875 +vt 0.59375 0.875 +vt 0.5625 0.9375 +vt 0.59375 0.9375 +vt 0.59375 0.875 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 1 +vt 0.5625 1 +vt 0.8125 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.8125 0.9375 +vn -0.5 0.5 -0.7071067811865476 +vn 0.5 -0.5 -0.7071067811865477 +vn 0.5 -0.5 0.7071067811865476 +vn -0.5 0.5 0.7071067811865477 +vn 0.7071067811865477 0.7071067811865476 0 +vn -0.7071067811865477 -0.7071067811865476 0 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o leg7 +v -0.29419417382415913 0.6066941738241591 0.025888347648318488 +v -0.23169417382415913 0.6691941738241591 -0.0625 +v -0.20580582617584076 0.5183058261758409 0.025888347648318488 +v -0.14330582617584076 0.5808058261758409 -0.0625 +v -0.731694173824159 0.16919417382415936 -0.7696067811865475 +v -0.794194173824159 0.10669417382415936 -0.681218433538229 +v -0.6433058261758406 0.08080582617584087 -0.7696067811865475 +v -0.7058058261758406 0.018305826175840867 -0.681218433538229 +vt 0.3125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.875 +vt 0.3125 0.875 +vt 0.28125 0.9375 +vt 0.3125 0.9375 +vt 0.3125 0.875 +vt 0.28125 0.875 +vt 0.59375 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.875 +vt 0.59375 0.875 +vt 0.5625 0.9375 +vt 0.59375 0.9375 +vt 0.59375 0.875 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.3125 0.9375 +vt 0.3125 1 +vt 0.5625 1 +vt 0.8125 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.8125 0.9375 +vn 0.5 0.5 -0.7071067811865476 +vn 0.5 0.5 0.7071067811865477 +vn -0.5 -0.5 0.7071067811865476 +vn -0.5 -0.5 -0.7071067811865477 +vn -0.7071067811865477 0.7071067811865476 0 +vn 0.7071067811865477 -0.7071067811865476 0 +usemtl m_9855f90d-c537-3611-ecbb-abc7e6cc7b17 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/tadpole.obj b/prismarine-viewer/viewer/lib/entity/models/tadpole.obj new file mode 100644 index 00000000..b38c8a26 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/tadpole.obj @@ -0,0 +1,95 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.09375 0.1875 0.03125 +v 0.09375 0.1875 -0.15625 +v 0.09375 0.0625 0.03125 +v 0.09375 0.0625 -0.15625 +v -0.09375 0.1875 -0.15625 +v -0.09375 0.1875 0.03125 +v -0.09375 0.0625 -0.15625 +v -0.09375 0.0625 0.03125 +vt 0.1875 0.8125 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.1875 0.6875 +vt 0 0.8125 +vt 0.1875 0.8125 +vt 0.1875 0.6875 +vt 0 0.6875 +vt 0.5625 0.8125 +vt 0.75 0.8125 +vt 0.75 0.6875 +vt 0.5625 0.6875 +vt 0.375 0.8125 +vt 0.5625 0.8125 +vt 0.5625 0.6875 +vt 0.375 0.6875 +vt 0.375 0.8125 +vt 0.1875 0.8125 +vt 0.1875 1 +vt 0.375 1 +vt 0.5625 1 +vt 0.375 1 +vt 0.375 0.8125 +vt 0.5625 0.8125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_71a3df64-a731-05a3-e848-ff24e21209ec +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o tail +v 0 0.1875 0.40625 +v 0 0.1875 -0.03125 +v 0 0.0625 0.40625 +v 0 0.0625 -0.03125 +v 0 0.1875 -0.03125 +v 0 0.1875 0.40625 +v 0 0.0625 -0.03125 +v 0 0.0625 0.40625 +vt 0.4375 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.4375 +vt 0.4375 0.4375 +vt 0 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.4375 +vt 0 0.4375 +vt 0.875 0.5625 +vt 0.875 0.5625 +vt 0.875 0.4375 +vt 0.875 0.4375 +vt 0.4375 0.5625 +vt 0.875 0.5625 +vt 0.875 0.4375 +vt 0.4375 0.4375 +vt 0.4375 0.5625 +vt 0.4375 0.5625 +vt 0.4375 1 +vt 0.4375 1 +vt 0.4375 1 +vt 0.4375 1 +vt 0.4375 0.5625 +vt 0.4375 0.5625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_71a3df64-a731-05a3-e848-ff24e21209ec +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/turtle.obj b/prismarine-viewer/viewer/lib/entity/models/turtle.obj new file mode 100644 index 00000000..ac0d41b9 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/turtle.obj @@ -0,0 +1,371 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.59375 0.5625 -0.4375000000000001 +v 0.59375 0.1875 -0.4375000000000001 +v 0.59375 0.5624999999999996 0.8125 +v 0.59375 0.18749999999999956 0.8125 +v -0.59375 0.1875 -0.4375000000000001 +v -0.59375 0.5625 -0.4375000000000001 +v -0.59375 0.18749999999999956 0.8125 +v -0.59375 0.5624999999999996 0.8125 +vt 0.1015625 0.328125 +vt 0.25 0.328125 +vt 0.25 0.015625 +vt 0.1015625 0.015625 +vt 0.0546875 0.328125 +vt 0.1015625 0.328125 +vt 0.1015625 0.015625 +vt 0.0546875 0.015625 +vt 0.296875 0.328125 +vt 0.4453125 0.328125 +vt 0.4453125 0.015625 +vt 0.296875 0.015625 +vt 0.25 0.328125 +vt 0.296875 0.328125 +vt 0.296875 0.015625 +vt 0.25 0.015625 +vt 0.25 0.328125 +vt 0.1015625 0.328125 +vt 0.1015625 0.421875 +vt 0.25 0.421875 +vt 0.3984375 0.421875 +vt 0.25 0.421875 +vt 0.25 0.328125 +vt 0.3984375 0.328125 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_d5e023f1-fe9e-4631-8a6b-282685c9cca4 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0.34375 0.1875 -0.4375000000000001 +v 0.34375 0 -0.4375000000000002 +v 0.34375 0.18749999999999978 0.6874999999999998 +v 0.34375 -2.220446049250313e-16 0.6874999999999998 +v -0.34375 0 -0.4375000000000002 +v -0.34375 0.1875 -0.4375000000000001 +v -0.34375 -2.220446049250313e-16 0.6874999999999998 +v -0.34375 0.18749999999999978 0.6874999999999998 +vt 0.265625 0.9375 +vt 0.3515625 0.9375 +vt 0.3515625 0.65625 +vt 0.265625 0.65625 +vt 0.2421875 0.9375 +vt 0.265625 0.9375 +vt 0.265625 0.65625 +vt 0.2421875 0.65625 +vt 0.375 0.9375 +vt 0.4609375 0.9375 +vt 0.4609375 0.65625 +vt 0.375 0.65625 +vt 0.3515625 0.9375 +vt 0.375 0.9375 +vt 0.375 0.65625 +vt 0.3515625 0.65625 +vt 0.3515625 0.9375 +vt 0.265625 0.9375 +vt 0.265625 0.984375 +vt 0.3515625 0.984375 +vt 0.4375 0.984375 +vt 0.3515625 0.984375 +vt 0.3515625 0.9375 +vt 0.4375 0.9375 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_d5e023f1-fe9e-4631-8a6b-282685c9cca4 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o eggbelly +v 0.28125 0 -0.4375000000000002 +v 0.28125 -0.0625 -0.4375000000000002 +v 0.28125 -2.220446049250313e-16 0.6874999999999998 +v 0.28125 -0.06250000000000022 0.6874999999999998 +v -0.28125 -0.0625 -0.4375000000000002 +v -0.28125 0 -0.4375000000000002 +v -0.28125 -0.06250000000000022 0.6874999999999998 +v -0.28125 -2.220446049250313e-16 0.6874999999999998 +vt 0.5546875 0.46875 +vt 0.625 0.46875 +vt 0.625 0.1875 +vt 0.5546875 0.1875 +vt 0.546875 0.46875 +vt 0.5546875 0.46875 +vt 0.5546875 0.1875 +vt 0.546875 0.1875 +vt 0.6328125 0.46875 +vt 0.703125 0.46875 +vt 0.703125 0.1875 +vt 0.6328125 0.1875 +vt 0.625 0.46875 +vt 0.6328125 0.46875 +vt 0.6328125 0.1875 +vt 0.625 0.1875 +vt 0.625 0.46875 +vt 0.5546875 0.46875 +vt 0.5546875 0.484375 +vt 0.625 0.484375 +vt 0.6953125 0.484375 +vt 0.625 0.484375 +vt 0.625 0.46875 +vt 0.6953125 0.46875 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_d5e023f1-fe9e-4631-8a6b-282685c9cca4 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.1875 0.375 -0.4375 +v 0.1875 0.375 -0.8125 +v 0.1875 0.0625 -0.4375 +v 0.1875 0.0625 -0.8125 +v -0.1875 0.375 -0.8125 +v -0.1875 0.375 -0.4375 +v -0.1875 0.0625 -0.8125 +v -0.1875 0.0625 -0.4375 +vt 0.0703125 0.90625 +vt 0.1171875 0.90625 +vt 0.1171875 0.828125 +vt 0.0703125 0.828125 +vt 0.0234375 0.90625 +vt 0.0703125 0.90625 +vt 0.0703125 0.828125 +vt 0.0234375 0.828125 +vt 0.1640625 0.90625 +vt 0.2109375 0.90625 +vt 0.2109375 0.828125 +vt 0.1640625 0.828125 +vt 0.1171875 0.90625 +vt 0.1640625 0.90625 +vt 0.1640625 0.828125 +vt 0.1171875 0.828125 +vt 0.1171875 0.90625 +vt 0.0703125 0.90625 +vt 0.0703125 1 +vt 0.1171875 1 +vt 0.1640625 1 +vt 0.1171875 1 +vt 0.1171875 0.90625 +vt 0.1640625 0.90625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_d5e023f1-fe9e-4631-8a6b-282685c9cca4 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o leg0 +v 0.34375 0.125 1.3125 +v 0.34375 0.125 0.6875 +v 0.34375 0.0625 1.3125 +v 0.34375 0.0625 0.6875 +v 0.09375 0.125 0.6875 +v 0.09375 0.125 1.3125 +v 0.09375 0.0625 0.6875 +v 0.09375 0.0625 1.3125 +vt 0.0859375 0.484375 +vt 0.1171875 0.484375 +vt 0.1171875 0.46875 +vt 0.0859375 0.46875 +vt 0.0078125 0.484375 +vt 0.0859375 0.484375 +vt 0.0859375 0.46875 +vt 0.0078125 0.46875 +vt 0.1953125 0.484375 +vt 0.2265625 0.484375 +vt 0.2265625 0.46875 +vt 0.1953125 0.46875 +vt 0.1171875 0.484375 +vt 0.1953125 0.484375 +vt 0.1953125 0.46875 +vt 0.1171875 0.46875 +vt 0.1171875 0.484375 +vt 0.0859375 0.484375 +vt 0.0859375 0.640625 +vt 0.1171875 0.640625 +vt 0.1484375 0.640625 +vt 0.1171875 0.640625 +vt 0.1171875 0.484375 +vt 0.1484375 0.484375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_d5e023f1-fe9e-4631-8a6b-282685c9cca4 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o leg1 +v -0.09375 0.125 1.3125 +v -0.09375 0.125 0.6875 +v -0.09375 0.0625 1.3125 +v -0.09375 0.0625 0.6875 +v -0.34375 0.125 0.6875 +v -0.34375 0.125 1.3125 +v -0.34375 0.0625 0.6875 +v -0.34375 0.0625 1.3125 +vt 0.0859375 0.65625 +vt 0.1171875 0.65625 +vt 0.1171875 0.640625 +vt 0.0859375 0.640625 +vt 0.0078125 0.65625 +vt 0.0859375 0.65625 +vt 0.0859375 0.640625 +vt 0.0078125 0.640625 +vt 0.1953125 0.65625 +vt 0.2265625 0.65625 +vt 0.2265625 0.640625 +vt 0.1953125 0.640625 +vt 0.1171875 0.65625 +vt 0.1953125 0.65625 +vt 0.1953125 0.640625 +vt 0.1171875 0.640625 +vt 0.1171875 0.65625 +vt 0.0859375 0.65625 +vt 0.0859375 0.8125 +vt 0.1171875 0.8125 +vt 0.1484375 0.8125 +vt 0.1171875 0.8125 +vt 0.1171875 0.65625 +vt 0.1484375 0.65625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_d5e023f1-fe9e-4631-8a6b-282685c9cca4 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o leg2 +v 1.0800972660098695 0.1875 0.07574059804416988 +v 1.1343623215307852 0.1875 -0.2320118247721451 +v 1.0800972660098695 0.125 0.07574059804416988 +v 1.1343623215307852 0.125 -0.2320118247721451 +v 0.33420602220836626 0.1875 -0.373100969126526 +v 0.2799409666874506 0.1875 -0.06534854631021103 +v 0.33420602220836626 0.125 -0.373100969126526 +v 0.2799409666874506 0.125 -0.06534854631021103 +vt 0.25 0.453125 +vt 0.3515625 0.453125 +vt 0.3515625 0.4375 +vt 0.25 0.4375 +vt 0.2109375 0.453125 +vt 0.25 0.453125 +vt 0.25 0.4375 +vt 0.2109375 0.4375 +vt 0.390625 0.453125 +vt 0.4921875 0.453125 +vt 0.4921875 0.4375 +vt 0.390625 0.4375 +vt 0.3515625 0.453125 +vt 0.390625 0.453125 +vt 0.390625 0.4375 +vt 0.3515625 0.4375 +vt 0.3515625 0.453125 +vt 0.25 0.453125 +vt 0.25 0.53125 +vt 0.3515625 0.53125 +vt 0.453125 0.53125 +vt 0.3515625 0.53125 +vt 0.3515625 0.453125 +vt 0.453125 0.453125 +vn 0.17364817766693033 0 -0.984807753012208 +vn 0.984807753012208 0 0.17364817766693033 +vn -0.17364817766693033 0 0.984807753012208 +vn -0.984807753012208 0 -0.17364817766693033 +vn 0 1 0 +vn 0 -1 0 +usemtl m_d5e023f1-fe9e-4631-8a6b-282685c9cca4 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o leg3 +v -0.27994096668745055 0.1875 -0.06534854631021103 +v -0.3342060222083663 0.1875 -0.373100969126526 +v -0.27994096668745055 0.125 -0.06534854631021103 +v -0.3342060222083663 0.125 -0.373100969126526 +v -1.1343623215307852 0.1875 -0.2320118247721451 +v -1.0800972660098695 0.1875 0.07574059804416988 +v -1.1343623215307852 0.125 -0.2320118247721451 +v -1.0800972660098695 0.125 0.07574059804416988 +vt 0.25 0.546875 +vt 0.3515625 0.546875 +vt 0.3515625 0.53125 +vt 0.25 0.53125 +vt 0.2109375 0.546875 +vt 0.25 0.546875 +vt 0.25 0.53125 +vt 0.2109375 0.53125 +vt 0.390625 0.546875 +vt 0.4921875 0.546875 +vt 0.4921875 0.53125 +vt 0.390625 0.53125 +vt 0.3515625 0.546875 +vt 0.390625 0.546875 +vt 0.390625 0.53125 +vt 0.3515625 0.53125 +vt 0.3515625 0.546875 +vt 0.25 0.546875 +vt 0.25 0.625 +vt 0.3515625 0.625 +vt 0.453125 0.625 +vt 0.3515625 0.625 +vt 0.3515625 0.546875 +vt 0.453125 0.546875 +vn -0.17364817766693033 0 -0.984807753012208 +vn 0.984807753012208 0 -0.17364817766693033 +vn 0.17364817766693033 0 0.984807753012208 +vn -0.984807753012208 0 0.17364817766693033 +vn 0 1 0 +vn 0 -1 0 +usemtl m_d5e023f1-fe9e-4631-8a6b-282685c9cca4 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/vex.obj b/prismarine-viewer/viewer/lib/entity/models/vex.obj new file mode 100644 index 00000000..63d99f88 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/vex.obj @@ -0,0 +1,325 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.09375 0.25 0.0625 +v 0.09375 0.25 -0.0625 +v 0.09375 0 0.0625 +v 0.09375 0 -0.0625 +v -0.09375 0.25 -0.0625 +v -0.09375 0.25 0.0625 +v -0.09375 0 -0.0625 +v -0.09375 0 0.0625 +vt 0.0625 0.625 +vt 0.15625 0.625 +vt 0.15625 0.5 +vt 0.0625 0.5 +vt 0 0.625 +vt 0.0625 0.625 +vt 0.0625 0.5 +vt 0 0.5 +vt 0.21875 0.625 +vt 0.3125 0.625 +vt 0.3125 0.5 +vt 0.21875 0.5 +vt 0.15625 0.625 +vt 0.21875 0.625 +vt 0.21875 0.5 +vt 0.15625 0.5 +vt 0.15625 0.625 +vt 0.0625 0.625 +vt 0.0625 0.6875 +vt 0.15625 0.6875 +vt 0.25 0.6875 +vt 0.15625 0.6875 +vt 0.15625 0.625 +vt 0.25 0.625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_f88b8145-cdbb-8011-03d2-81deb45b4e43 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0.08125000000000004 0.17500000000000004 0.050000000000000044 +v 0.08125000000000004 0.17500000000000004 -0.04999999999999999 +v 0.08125000000000004 -0.11249999999999999 0.050000000000000044 +v 0.08125000000000004 -0.11249999999999999 -0.04999999999999999 +v -0.08124999999999999 0.17500000000000004 -0.04999999999999999 +v -0.08124999999999999 0.17500000000000004 0.050000000000000044 +v -0.08124999999999999 -0.11249999999999999 -0.04999999999999999 +v -0.08124999999999999 -0.11249999999999999 0.050000000000000044 +vt 0.0625 0.4375 +vt 0.15625 0.4375 +vt 0.15625 0.28125 +vt 0.0625 0.28125 +vt 0 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.28125 +vt 0 0.28125 +vt 0.21875 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.28125 +vt 0.21875 0.28125 +vt 0.15625 0.4375 +vt 0.21875 0.4375 +vt 0.21875 0.28125 +vt 0.15625 0.28125 +vt 0.15625 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.5 +vt 0.15625 0.5 +vt 0.25 0.5 +vt 0.15625 0.5 +vt 0.15625 0.4375 +vt 0.25 0.4375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_f88b8145-cdbb-8011-03d2-81deb45b4e43 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.15625 0.5625 0.15625 +v 0.15625 0.5625 -0.15625 +v 0.15625 0.25 0.15625 +v 0.15625 0.25 -0.15625 +v -0.15625 0.5625 -0.15625 +v -0.15625 0.5625 0.15625 +v -0.15625 0.25 -0.15625 +v -0.15625 0.25 0.15625 +vt 0.15625 0.84375 +vt 0.3125 0.84375 +vt 0.3125 0.6875 +vt 0.15625 0.6875 +vt 0 0.84375 +vt 0.15625 0.84375 +vt 0.15625 0.6875 +vt 0 0.6875 +vt 0.46875 0.84375 +vt 0.625 0.84375 +vt 0.625 0.6875 +vt 0.46875 0.6875 +vt 0.3125 0.84375 +vt 0.46875 0.84375 +vt 0.46875 0.6875 +vt 0.3125 0.6875 +vt 0.3125 0.84375 +vt 0.15625 0.84375 +vt 0.15625 1 +vt 0.3125 1 +vt 0.46875 1 +vt 0.3125 1 +vt 0.3125 0.84375 +vt 0.46875 0.84375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_f88b8145-cdbb-8011-03d2-81deb45b4e43 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o rightArm +v 0.18125000000000002 0.259375 0.05625000000000002 +v 0.18125000000000002 0.259375 -0.05625000000000002 +v 0.18125000000000002 0.021874999999999978 0.05625000000000002 +v 0.18125000000000002 0.021874999999999978 -0.05625000000000002 +v 0.06874999999999998 0.259375 -0.05625000000000002 +v 0.06874999999999998 0.259375 0.05625000000000002 +v 0.06874999999999998 0.021874999999999978 -0.05625000000000002 +v 0.06874999999999998 0.021874999999999978 0.05625000000000002 +vt 0.78125 0.9375 +vt 0.84375 0.9375 +vt 0.84375 0.8125 +vt 0.78125 0.8125 +vt 0.71875 0.9375 +vt 0.78125 0.9375 +vt 0.78125 0.8125 +vt 0.71875 0.8125 +vt 0.90625 0.9375 +vt 0.96875 0.9375 +vt 0.96875 0.8125 +vt 0.90625 0.8125 +vt 0.84375 0.9375 +vt 0.90625 0.9375 +vt 0.90625 0.8125 +vt 0.84375 0.8125 +vt 0.84375 0.9375 +vt 0.78125 0.9375 +vt 0.78125 1 +vt 0.84375 1 +vt 0.90625 1 +vt 0.84375 1 +vt 0.84375 0.9375 +vt 0.90625 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_f88b8145-cdbb-8011-03d2-81deb45b4e43 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o leftArm +v -0.06874999999999998 0.259375 0.05625000000000002 +v -0.06874999999999998 0.259375 -0.05625000000000002 +v -0.06874999999999998 0.021874999999999978 0.05625000000000002 +v -0.06874999999999998 0.021874999999999978 -0.05625000000000002 +v -0.18125000000000002 0.259375 -0.05625000000000002 +v -0.18125000000000002 0.259375 0.05625000000000002 +v -0.18125000000000002 0.021874999999999978 -0.05625000000000002 +v -0.18125000000000002 0.021874999999999978 0.05625000000000002 +vt 0.78125 0.75 +vt 0.84375 0.75 +vt 0.84375 0.625 +vt 0.78125 0.625 +vt 0.71875 0.75 +vt 0.78125 0.75 +vt 0.78125 0.625 +vt 0.71875 0.625 +vt 0.90625 0.75 +vt 0.96875 0.75 +vt 0.96875 0.625 +vt 0.90625 0.625 +vt 0.84375 0.75 +vt 0.90625 0.75 +vt 0.90625 0.625 +vt 0.84375 0.625 +vt 0.84375 0.75 +vt 0.78125 0.75 +vt 0.78125 0.8125 +vt 0.84375 0.8125 +vt 0.90625 0.8125 +vt 0.84375 0.8125 +vt 0.84375 0.75 +vt 0.90625 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_f88b8145-cdbb-8011-03d2-81deb45b4e43 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o leftWing +v -0.03125 0.1875 0.0625 +v -0.03125 0.1875 0.0625 +v -0.03125 -0.125 0.0625 +v -0.03125 -0.125 0.0625 +v -0.53125 0.1875 0.0625 +v -0.53125 0.1875 0.0625 +v -0.53125 -0.125 0.0625 +v -0.53125 -0.125 0.0625 +vt 0.75 0.3125 +vt 0.5 0.3125 +vt 0.5 0.15625 +vt 0.75 0.15625 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 0.75 0.15625 +vt 0.75 0.15625 +vt 1 0.3125 +vt 0.75 0.3125 +vt 0.75 0.15625 +vt 1 0.15625 +vt 0.5 0.3125 +vt 0.5 0.3125 +vt 0.5 0.15625 +vt 0.5 0.15625 +vt 0.5 0.3125 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 0.5 0.3125 +vt 0.75 0.3125 +vt 1 0.3125 +vt 1 0.3125 +vt 0.75 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_f88b8145-cdbb-8011-03d2-81deb45b4e43 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o rightWing +v 0.53125 0.1875 0.0625 +v 0.53125 0.1875 0.0625 +v 0.53125 -0.125 0.0625 +v 0.53125 -0.125 0.0625 +v 0.03125 0.1875 0.0625 +v 0.03125 0.1875 0.0625 +v 0.03125 -0.125 0.0625 +v 0.03125 -0.125 0.0625 +vt 0.5 0.3125 +vt 0.75 0.3125 +vt 0.75 0.15625 +vt 0.5 0.15625 +vt 0.5 0.3125 +vt 0.5 0.3125 +vt 0.5 0.15625 +vt 0.5 0.15625 +vt 0.75 0.3125 +vt 1 0.3125 +vt 1 0.15625 +vt 0.75 0.15625 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 0.75 0.15625 +vt 0.75 0.15625 +vt 0.75 0.3125 +vt 0.5 0.3125 +vt 0.5 0.3125 +vt 0.75 0.3125 +vt 1 0.3125 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 1 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_f88b8145-cdbb-8011-03d2-81deb45b4e43 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/villager.obj b/prismarine-viewer/viewer/lib/entity/models/villager.obj new file mode 100644 index 00000000..73462472 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/villager.obj @@ -0,0 +1,509 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.25 1.5 0.1875 +v 0.25 1.5 -0.1875 +v 0.25 0.75 0.1875 +v 0.25 0.75 -0.1875 +v -0.25 1.5 -0.1875 +v -0.25 1.5 0.1875 +v -0.25 0.75 -0.1875 +v -0.25 0.75 0.1875 +vt 0.34375 0.59375 +vt 0.46875 0.59375 +vt 0.46875 0.40625 +vt 0.34375 0.40625 +vt 0.25 0.59375 +vt 0.34375 0.59375 +vt 0.34375 0.40625 +vt 0.25 0.40625 +vt 0.5625 0.59375 +vt 0.6875 0.59375 +vt 0.6875 0.40625 +vt 0.5625 0.40625 +vt 0.46875 0.59375 +vt 0.5625 0.59375 +vt 0.5625 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.59375 +vt 0.34375 0.59375 +vt 0.34375 0.6875 +vt 0.46875 0.6875 +vt 0.59375 0.6875 +vt 0.46875 0.6875 +vt 0.46875 0.59375 +vt 0.59375 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o body +v 0.28125 1.53125 0.21875 +v 0.28125 1.53125 -0.21875 +v 0.28125 0.34375 0.21875 +v 0.28125 0.34375 -0.21875 +v -0.28125 1.53125 -0.21875 +v -0.28125 1.53125 0.21875 +v -0.28125 0.34375 -0.21875 +v -0.28125 0.34375 0.21875 +vt 0.09375 0.3125 +vt 0.21875 0.3125 +vt 0.21875 0.03125 +vt 0.09375 0.03125 +vt 0 0.3125 +vt 0.09375 0.3125 +vt 0.09375 0.03125 +vt 0 0.03125 +vt 0.3125 0.3125 +vt 0.4375 0.3125 +vt 0.4375 0.03125 +vt 0.3125 0.03125 +vt 0.21875 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.03125 +vt 0.21875 0.03125 +vt 0.21875 0.3125 +vt 0.09375 0.3125 +vt 0.09375 0.40625 +vt 0.21875 0.40625 +vt 0.34375 0.40625 +vt 0.21875 0.40625 +vt 0.21875 0.3125 +vt 0.34375 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0.25 2.125 0.25 +v 0.25 2.125 -0.25 +v 0.25 1.5 0.25 +v 0.25 1.5 -0.25 +v -0.25 2.125 -0.25 +v -0.25 2.125 0.25 +v -0.25 1.5 -0.25 +v -0.25 1.5 0.25 +vt 0.125 0.875 +vt 0.25 0.875 +vt 0.25 0.71875 +vt 0.125 0.71875 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 0.71875 +vt 0 0.71875 +vt 0.375 0.875 +vt 0.5 0.875 +vt 0.5 0.71875 +vt 0.375 0.71875 +vt 0.25 0.875 +vt 0.375 0.875 +vt 0.375 0.71875 +vt 0.25 0.71875 +vt 0.25 0.875 +vt 0.125 0.875 +vt 0.125 1 +vt 0.25 1 +vt 0.375 1 +vt 0.25 1 +vt 0.25 0.875 +vt 0.375 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o helmet +v 0.28125 2.15625 0.28125 +v 0.28125 2.15625 -0.28125 +v 0.28125 1.46875 0.28125 +v 0.28125 1.46875 -0.28125 +v -0.28125 2.15625 -0.28125 +v -0.28125 2.15625 0.28125 +v -0.28125 1.46875 -0.28125 +v -0.28125 1.46875 0.28125 +vt 0.625 0.875 +vt 0.75 0.875 +vt 0.75 0.71875 +vt 0.625 0.71875 +vt 0.5 0.875 +vt 0.625 0.875 +vt 0.625 0.71875 +vt 0.5 0.71875 +vt 0.875 0.875 +vt 1 0.875 +vt 1 0.71875 +vt 0.875 0.71875 +vt 0.75 0.875 +vt 0.875 0.875 +vt 0.875 0.71875 +vt 0.75 0.71875 +vt 0.75 0.875 +vt 0.625 0.875 +vt 0.625 1 +vt 0.75 1 +vt 0.875 1 +vt 0.75 1 +vt 0.75 0.875 +vt 0.875 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o brim +v 0.5062500000000001 1.80625 0.5062500000000001 +v 0.5062500000000001 1.88125 0.5062500000000001 +v 0.5062500000000001 1.80625 -0.5062500000000001 +v 0.5062500000000001 1.8812499999999996 -0.5062500000000001 +v -0.50625 1.88125 0.5062500000000001 +v -0.50625 1.80625 0.5062500000000001 +v -0.50625 1.8812499999999996 -0.5062500000000001 +v -0.50625 1.80625 -0.5062500000000001 +vt 0.484375 0.25 +vt 0.734375 0.25 +vt 0.734375 0 +vt 0.484375 0 +vt 0.46875 0.25 +vt 0.484375 0.25 +vt 0.484375 0 +vt 0.46875 0 +vt 0.75 0.25 +vt 1 0.25 +vt 1 0 +vt 0.75 0 +vt 0.734375 0.25 +vt 0.75 0.25 +vt 0.75 0 +vt 0.734375 0 +vt 0.734375 0.25 +vt 0.484375 0.25 +vt 0.484375 0.265625 +vt 0.734375 0.265625 +vt 0.984375 0.265625 +vt 0.734375 0.265625 +vt 0.734375 0.25 +vt 0.984375 0.25 +vn 0 1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 -1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 1 +vn 0 -2.220446049250313e-16 -1 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o nose +v 0.0625 1.6875 -0.25 +v 0.0625 1.6875 -0.375 +v 0.0625 1.4375 -0.25 +v 0.0625 1.4375 -0.375 +v -0.0625 1.6875 -0.375 +v -0.0625 1.6875 -0.25 +v -0.0625 1.4375 -0.375 +v -0.0625 1.4375 -0.25 +vt 0.40625 0.96875 +vt 0.4375 0.96875 +vt 0.4375 0.90625 +vt 0.40625 0.90625 +vt 0.375 0.96875 +vt 0.40625 0.96875 +vt 0.40625 0.90625 +vt 0.375 0.90625 +vt 0.46875 0.96875 +vt 0.5 0.96875 +vt 0.5 0.90625 +vt 0.46875 0.90625 +vt 0.4375 0.96875 +vt 0.46875 0.96875 +vt 0.46875 0.90625 +vt 0.4375 0.90625 +vt 0.4375 0.96875 +vt 0.40625 0.96875 +vt 0.40625 1 +vt 0.4375 1 +vt 0.46875 1 +vt 0.4375 1 +vt 0.4375 0.96875 +vt 0.46875 0.96875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o arms +v 0.25 1.198223304703363 0 +v 0.25 1.375 -0.17677669529663698 +v 0.25 1.0214466094067263 -0.17677669529663698 +v 0.25 1.1982233047033632 -0.35355339059327373 +v -0.25 1.375 -0.17677669529663698 +v -0.25 1.198223304703363 0 +v -0.25 1.1982233047033632 -0.35355339059327373 +v -0.25 1.0214466094067263 -0.17677669529663698 +vt 0.6875 0.34375 +vt 0.8125 0.34375 +vt 0.8125 0.28125 +vt 0.6875 0.28125 +vt 0.625 0.34375 +vt 0.6875 0.34375 +vt 0.6875 0.28125 +vt 0.625 0.28125 +vt 0.875 0.34375 +vt 1 0.34375 +vt 1 0.28125 +vt 0.875 0.28125 +vt 0.8125 0.34375 +vt 0.875 0.34375 +vt 0.875 0.28125 +vt 0.8125 0.28125 +vt 0.8125 0.34375 +vt 0.6875 0.34375 +vt 0.6875 0.40625 +vt 0.8125 0.40625 +vt 0.9375 0.40625 +vt 0.8125 0.40625 +vt 0.8125 0.34375 +vt 0.9375 0.34375 +vn 0 0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 -0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 0.7071067811865476 +vn 0 -0.7071067811865475 -0.7071067811865476 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o arms +v 0.5 1.375 0.17677669529663698 +v 0.5 1.551776695296637 0 +v 0.5 1.0214466094067263 -0.17677669529663698 +v 0.5 1.1982233047033632 -0.35355339059327373 +v 0.25 1.551776695296637 0 +v 0.25 1.375 0.17677669529663698 +v 0.25 1.1982233047033632 -0.35355339059327373 +v 0.25 1.0214466094067263 -0.17677669529663698 +vt 0.75 0.59375 +vt 0.8125 0.59375 +vt 0.8125 0.46875 +vt 0.75 0.46875 +vt 0.6875 0.59375 +vt 0.75 0.59375 +vt 0.75 0.46875 +vt 0.6875 0.46875 +vt 0.875 0.59375 +vt 0.9375 0.59375 +vt 0.9375 0.46875 +vt 0.875 0.46875 +vt 0.8125 0.59375 +vt 0.875 0.59375 +vt 0.875 0.46875 +vt 0.8125 0.46875 +vt 0.8125 0.59375 +vt 0.75 0.59375 +vt 0.75 0.65625 +vt 0.8125 0.65625 +vt 0.875 0.65625 +vt 0.8125 0.65625 +vt 0.8125 0.59375 +vt 0.875 0.59375 +vn 0 0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 -0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 0.7071067811865476 +vn 0 -0.7071067811865475 -0.7071067811865476 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o arms +v -0.25 1.375 0.17677669529663698 +v -0.25 1.551776695296637 0 +v -0.25 1.0214466094067263 -0.17677669529663698 +v -0.25 1.1982233047033632 -0.35355339059327373 +v -0.5 1.551776695296637 0 +v -0.5 1.375 0.17677669529663698 +v -0.5 1.1982233047033632 -0.35355339059327373 +v -0.5 1.0214466094067263 -0.17677669529663698 +vt 0.8125 0.59375 +vt 0.75 0.59375 +vt 0.75 0.46875 +vt 0.8125 0.46875 +vt 0.875 0.59375 +vt 0.8125 0.59375 +vt 0.8125 0.46875 +vt 0.875 0.46875 +vt 0.9375 0.59375 +vt 0.875 0.59375 +vt 0.875 0.46875 +vt 0.9375 0.46875 +vt 0.75 0.59375 +vt 0.6875 0.59375 +vt 0.6875 0.46875 +vt 0.75 0.46875 +vt 0.75 0.59375 +vt 0.8125 0.59375 +vt 0.8125 0.65625 +vt 0.75 0.65625 +vt 0.8125 0.65625 +vt 0.875 0.65625 +vt 0.875 0.59375 +vt 0.8125 0.59375 +vn 0 0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 -0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 0.7071067811865476 +vn 0 -0.7071067811865475 -0.7071067811865476 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o leg0 +v 0.25 0.75 0.125 +v 0.25 0.75 -0.125 +v 0.25 0 0.125 +v 0.25 0 -0.125 +v 0 0.75 -0.125 +v 0 0.75 0.125 +v 0 0 -0.125 +v 0 0 0.125 +vt 0.0625 0.59375 +vt 0.125 0.59375 +vt 0.125 0.40625 +vt 0.0625 0.40625 +vt 0 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.40625 +vt 0 0.40625 +vt 0.1875 0.59375 +vt 0.25 0.59375 +vt 0.25 0.40625 +vt 0.1875 0.40625 +vt 0.125 0.59375 +vt 0.1875 0.59375 +vt 0.1875 0.40625 +vt 0.125 0.40625 +vt 0.125 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.65625 +vt 0.125 0.65625 +vt 0.1875 0.65625 +vt 0.125 0.65625 +vt 0.125 0.59375 +vt 0.1875 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o leg1 +v 0 0.75 0.125 +v 0 0.75 -0.125 +v 0 0 0.125 +v 0 0 -0.125 +v -0.25 0.75 -0.125 +v -0.25 0.75 0.125 +v -0.25 0 -0.125 +v -0.25 0 0.125 +vt 0.125 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.40625 +vt 0.125 0.40625 +vt 0.1875 0.59375 +vt 0.125 0.59375 +vt 0.125 0.40625 +vt 0.1875 0.40625 +vt 0.25 0.59375 +vt 0.1875 0.59375 +vt 0.1875 0.40625 +vt 0.25 0.40625 +vt 0.0625 0.59375 +vt 0 0.59375 +vt 0 0.40625 +vt 0.0625 0.40625 +vt 0.0625 0.59375 +vt 0.125 0.59375 +vt 0.125 0.65625 +vt 0.0625 0.65625 +vt 0.125 0.65625 +vt 0.1875 0.65625 +vt 0.1875 0.59375 +vt 0.125 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b4465c9b-59e0-9882-a652-f0428980cb6e +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/warden.obj b/prismarine-viewer/viewer/lib/entity/models/warden.obj new file mode 100644 index 00000000..da0b2656 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/warden.obj @@ -0,0 +1,463 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o body +v 0.5625 2.125 0.4375 +v 0.5625 2.125 -0.25 +v 0.5625 0.8125 0.4375 +v 0.5625 0.8125 -0.25 +v -0.5625 2.125 -0.25 +v -0.5625 2.125 0.4375 +v -0.5625 0.8125 -0.25 +v -0.5625 0.8125 0.4375 +vt 0.0859375 0.9140625 +vt 0.2265625 0.9140625 +vt 0.2265625 0.75 +vt 0.0859375 0.75 +vt 0 0.9140625 +vt 0.0859375 0.9140625 +vt 0.0859375 0.75 +vt 0 0.75 +vt 0.3125 0.9140625 +vt 0.453125 0.9140625 +vt 0.453125 0.75 +vt 0.3125 0.75 +vt 0.2265625 0.9140625 +vt 0.3125 0.9140625 +vt 0.3125 0.75 +vt 0.2265625 0.75 +vt 0.2265625 0.9140625 +vt 0.0859375 0.9140625 +vt 0.0859375 1 +vt 0.2265625 1 +vt 0.3671875 1 +vt 0.2265625 1 +vt 0.2265625 0.9140625 +vt 0.3671875 0.9140625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o right_ribcage +v 0.5625 2.125 -0.25625 +v 0.5625 2.125 -0.25625 +v 0.5625 0.8125 -0.25625 +v 0.5625 0.8125 -0.25625 +v 0 2.125 -0.25625 +v 0 2.125 -0.25625 +v 0 0.8125 -0.25625 +v 0 0.8125 -0.25625 +vt 0.703125 0.9140625 +vt 0.7734375 0.9140625 +vt 0.7734375 0.75 +vt 0.703125 0.75 +vt 0.703125 0.9140625 +vt 0.703125 0.9140625 +vt 0.703125 0.75 +vt 0.703125 0.75 +vt 0.7734375 0.9140625 +vt 0.84375 0.9140625 +vt 0.84375 0.75 +vt 0.7734375 0.75 +vt 0.7734375 0.9140625 +vt 0.7734375 0.9140625 +vt 0.7734375 0.75 +vt 0.7734375 0.75 +vt 0.7734375 0.9140625 +vt 0.703125 0.9140625 +vt 0.703125 0.9140625 +vt 0.7734375 0.9140625 +vt 0.84375 0.9140625 +vt 0.7734375 0.9140625 +vt 0.7734375 0.9140625 +vt 0.84375 0.9140625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o left_ribcage +v 0 2.125 -0.25625 +v 0 2.125 -0.25625 +v 0 0.8125 -0.25625 +v 0 0.8125 -0.25625 +v -0.5625 2.125 -0.25625 +v -0.5625 2.125 -0.25625 +v -0.5625 0.8125 -0.25625 +v -0.5625 0.8125 -0.25625 +vt 0.7734375 0.9140625 +vt 0.703125 0.9140625 +vt 0.703125 0.75 +vt 0.7734375 0.75 +vt 0.7734375 0.9140625 +vt 0.7734375 0.9140625 +vt 0.7734375 0.75 +vt 0.7734375 0.75 +vt 0.84375 0.9140625 +vt 0.7734375 0.9140625 +vt 0.7734375 0.75 +vt 0.84375 0.75 +vt 0.703125 0.9140625 +vt 0.703125 0.9140625 +vt 0.703125 0.75 +vt 0.703125 0.75 +vt 0.703125 0.9140625 +vt 0.7734375 0.9140625 +vt 0.7734375 0.9140625 +vt 0.703125 0.9140625 +vt 0.7734375 0.9140625 +vt 0.84375 0.9140625 +vt 0.84375 0.9140625 +vt 0.7734375 0.9140625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.5 3.125 0.3125 +v 0.5 3.125 -0.3125 +v 0.5 2.125 0.3125 +v 0.5 2.125 -0.3125 +v -0.5 3.125 -0.3125 +v -0.5 3.125 0.3125 +v -0.5 2.125 -0.3125 +v -0.5 2.125 0.3125 +vt 0.078125 0.671875 +vt 0.203125 0.671875 +vt 0.203125 0.546875 +vt 0.078125 0.546875 +vt 0 0.671875 +vt 0.078125 0.671875 +vt 0.078125 0.546875 +vt 0 0.546875 +vt 0.28125 0.671875 +vt 0.40625 0.671875 +vt 0.40625 0.546875 +vt 0.28125 0.546875 +vt 0.203125 0.671875 +vt 0.28125 0.671875 +vt 0.28125 0.546875 +vt 0.203125 0.546875 +vt 0.203125 0.671875 +vt 0.078125 0.671875 +vt 0.078125 0.75 +vt 0.203125 0.75 +vt 0.328125 0.75 +vt 0.203125 0.75 +vt 0.203125 0.671875 +vt 0.328125 0.671875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o right_tendril +v 1.5 3.6875 0 +v 1.5 3.6875 0 +v 1.5 2.6875 0 +v 1.5 2.6875 0 +v 0.5 3.6875 0 +v 0.5 3.6875 0 +v 0.5 2.6875 0 +v 0.5 2.6875 0 +vt 0.40625 0.75 +vt 0.53125 0.75 +vt 0.53125 0.625 +vt 0.40625 0.625 +vt 0.40625 0.75 +vt 0.40625 0.75 +vt 0.40625 0.625 +vt 0.40625 0.625 +vt 0.53125 0.75 +vt 0.65625 0.75 +vt 0.65625 0.625 +vt 0.53125 0.625 +vt 0.53125 0.75 +vt 0.53125 0.75 +vt 0.53125 0.625 +vt 0.53125 0.625 +vt 0.53125 0.75 +vt 0.40625 0.75 +vt 0.40625 0.75 +vt 0.53125 0.75 +vt 0.65625 0.75 +vt 0.53125 0.75 +vt 0.53125 0.75 +vt 0.65625 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o left_tendril +v -0.5 3.6875 0 +v -0.5 3.6875 0 +v -0.5 2.6875 0 +v -0.5 2.6875 0 +v -1.5 3.6875 0 +v -1.5 3.6875 0 +v -1.5 2.6875 0 +v -1.5 2.6875 0 +vt 0.453125 1 +vt 0.578125 1 +vt 0.578125 0.875 +vt 0.453125 0.875 +vt 0.453125 1 +vt 0.453125 1 +vt 0.453125 0.875 +vt 0.453125 0.875 +vt 0.578125 1 +vt 0.703125 1 +vt 0.703125 0.875 +vt 0.578125 0.875 +vt 0.578125 1 +vt 0.578125 1 +vt 0.578125 0.875 +vt 0.578125 0.875 +vt 0.578125 1 +vt 0.453125 1 +vt 0.453125 1 +vt 0.578125 1 +vt 0.703125 1 +vt 0.578125 1 +vt 0.578125 1 +vt 0.703125 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o right_arm +v 1.0625 2.125 0.3125 +v 1.0625 2.125 -0.1875 +v 1.0625 0.375 0.3125 +v 1.0625 0.375 -0.1875 +v 0.5625 2.125 -0.1875 +v 0.5625 2.125 0.3125 +v 0.5625 0.375 -0.1875 +v 0.5625 0.375 0.3125 +vt 0.40625 0.546875 +vt 0.46875 0.546875 +vt 0.46875 0.328125 +vt 0.40625 0.328125 +vt 0.34375 0.546875 +vt 0.40625 0.546875 +vt 0.40625 0.328125 +vt 0.34375 0.328125 +vt 0.53125 0.546875 +vt 0.59375 0.546875 +vt 0.59375 0.328125 +vt 0.53125 0.328125 +vt 0.46875 0.546875 +vt 0.53125 0.546875 +vt 0.53125 0.328125 +vt 0.46875 0.328125 +vt 0.46875 0.546875 +vt 0.40625 0.546875 +vt 0.40625 0.609375 +vt 0.46875 0.609375 +vt 0.53125 0.609375 +vt 0.46875 0.609375 +vt 0.46875 0.546875 +vt 0.53125 0.546875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o left_arm +v -0.5625 2.125 0.3125 +v -0.5625 2.125 -0.1875 +v -0.5625 0.375 0.3125 +v -0.5625 0.375 -0.1875 +v -1.0625 2.125 -0.1875 +v -1.0625 2.125 0.3125 +v -1.0625 0.375 -0.1875 +v -1.0625 0.375 0.3125 +vt 0.0625 0.484375 +vt 0.125 0.484375 +vt 0.125 0.265625 +vt 0.0625 0.265625 +vt 0 0.484375 +vt 0.0625 0.484375 +vt 0.0625 0.265625 +vt 0 0.265625 +vt 0.1875 0.484375 +vt 0.25 0.484375 +vt 0.25 0.265625 +vt 0.1875 0.265625 +vt 0.125 0.484375 +vt 0.1875 0.484375 +vt 0.1875 0.265625 +vt 0.125 0.265625 +vt 0.125 0.484375 +vt 0.0625 0.484375 +vt 0.0625 0.546875 +vt 0.125 0.546875 +vt 0.1875 0.546875 +vt 0.125 0.546875 +vt 0.125 0.484375 +vt 0.1875 0.484375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o right_leg +v 0.5625 0.8125 0.1875 +v 0.5625 0.8125 -0.1875 +v 0.5625 0 0.1875 +v 0.5625 0 -0.1875 +v 0.1875 0.8125 -0.1875 +v 0.1875 0.8125 0.1875 +v 0.1875 0 -0.1875 +v 0.1875 0 0.1875 +vt 0.640625 0.578125 +vt 0.6875 0.578125 +vt 0.6875 0.4765625 +vt 0.640625 0.4765625 +vt 0.59375 0.578125 +vt 0.640625 0.578125 +vt 0.640625 0.4765625 +vt 0.59375 0.4765625 +vt 0.734375 0.578125 +vt 0.78125 0.578125 +vt 0.78125 0.4765625 +vt 0.734375 0.4765625 +vt 0.6875 0.578125 +vt 0.734375 0.578125 +vt 0.734375 0.4765625 +vt 0.6875 0.4765625 +vt 0.6875 0.578125 +vt 0.640625 0.578125 +vt 0.640625 0.625 +vt 0.6875 0.625 +vt 0.734375 0.625 +vt 0.6875 0.625 +vt 0.6875 0.578125 +vt 0.734375 0.578125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o left_leg +v -0.1875 0.8125 0.1875 +v -0.1875 0.8125 -0.1875 +v -0.1875 0 0.1875 +v -0.1875 0 -0.1875 +v -0.5625 0.8125 -0.1875 +v -0.5625 0.8125 0.1875 +v -0.5625 0 -0.1875 +v -0.5625 0 0.1875 +vt 0.640625 0.359375 +vt 0.6875 0.359375 +vt 0.6875 0.2578125 +vt 0.640625 0.2578125 +vt 0.59375 0.359375 +vt 0.640625 0.359375 +vt 0.640625 0.2578125 +vt 0.59375 0.2578125 +vt 0.734375 0.359375 +vt 0.78125 0.359375 +vt 0.78125 0.2578125 +vt 0.734375 0.2578125 +vt 0.6875 0.359375 +vt 0.734375 0.359375 +vt 0.734375 0.2578125 +vt 0.6875 0.2578125 +vt 0.6875 0.359375 +vt 0.640625 0.359375 +vt 0.640625 0.40625 +vt 0.6875 0.40625 +vt 0.734375 0.40625 +vt 0.6875 0.40625 +vt 0.6875 0.359375 +vt 0.734375 0.359375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_b8aa60f9-5a7d-baf1-aee9-852f731e91b8 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/witch.obj b/prismarine-viewer/viewer/lib/entity/models/witch.obj new file mode 100644 index 00000000..275da643 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/witch.obj @@ -0,0 +1,647 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o head +v 0.25 2.125 0.25 +v 0.25 2.125 -0.25 +v 0.25 1.5 0.25 +v 0.25 1.5 -0.25 +v -0.25 2.125 -0.25 +v -0.25 2.125 0.25 +v -0.25 1.5 -0.25 +v -0.25 1.5 0.25 +vt 0.125 0.9375 +vt 0.25 0.9375 +vt 0.25 0.859375 +vt 0.125 0.859375 +vt 0 0.9375 +vt 0.125 0.9375 +vt 0.125 0.859375 +vt 0 0.859375 +vt 0.375 0.9375 +vt 0.5 0.9375 +vt 0.5 0.859375 +vt 0.375 0.859375 +vt 0.25 0.9375 +vt 0.375 0.9375 +vt 0.375 0.859375 +vt 0.25 0.859375 +vt 0.25 0.9375 +vt 0.125 0.9375 +vt 0.125 1 +vt 0.25 1 +vt 0.375 1 +vt 0.25 1 +vt 0.25 0.9375 +vt 0.375 0.9375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o nose +v 0.0625 1.6875 -0.25 +v 0.0625 1.6875 -0.375 +v 0.0625 1.4375 -0.25 +v 0.0625 1.4375 -0.375 +v -0.0625 1.6875 -0.375 +v -0.0625 1.6875 -0.25 +v -0.0625 1.4375 -0.375 +v -0.0625 1.4375 -0.25 +vt 0.40625 0.984375 +vt 0.4375 0.984375 +vt 0.4375 0.953125 +vt 0.40625 0.953125 +vt 0.375 0.984375 +vt 0.40625 0.984375 +vt 0.40625 0.953125 +vt 0.375 0.953125 +vt 0.46875 0.984375 +vt 0.5 0.984375 +vt 0.5 0.953125 +vt 0.46875 0.953125 +vt 0.4375 0.984375 +vt 0.46875 0.984375 +vt 0.46875 0.953125 +vt 0.4375 0.953125 +vt 0.4375 0.984375 +vt 0.40625 0.984375 +vt 0.40625 1 +vt 0.4375 1 +vt 0.46875 1 +vt 0.4375 1 +vt 0.4375 0.984375 +vt 0.46875 0.984375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o nose +v -0.015625 1.609375 -0.375 +v -0.015625 1.609375 -0.40625 +v -0.015625 1.578125 -0.375 +v -0.015625 1.578125 -0.40625 +v -0.046875 1.609375 -0.40625 +v -0.046875 1.609375 -0.375 +v -0.046875 1.578125 -0.40625 +v -0.046875 1.578125 -0.375 +vt 0.015625 0.9921875 +vt 0.03125 0.9921875 +vt 0.03125 0.984375 +vt 0.015625 0.984375 +vt 0 0.9921875 +vt 0.015625 0.9921875 +vt 0.015625 0.984375 +vt 0 0.984375 +vt 0.046875 0.9921875 +vt 0.0625 0.9921875 +vt 0.0625 0.984375 +vt 0.046875 0.984375 +vt 0.03125 0.9921875 +vt 0.046875 0.9921875 +vt 0.046875 0.984375 +vt 0.03125 0.984375 +vt 0.03125 0.9921875 +vt 0.015625 0.9921875 +vt 0.015625 1 +vt 0.03125 1 +vt 0.046875 1 +vt 0.03125 1 +vt 0.03125 0.9921875 +vt 0.046875 0.9921875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o hat +v 0.3125 2.128125 0.3125 +v 0.3125 2.128125 -0.3125 +v 0.3125 2.003125 0.3125 +v 0.3125 2.003125 -0.3125 +v -0.3125 2.128125 -0.3125 +v -0.3125 2.128125 0.3125 +v -0.3125 2.003125 -0.3125 +v -0.3125 2.003125 0.3125 +vt 0.15625 0.421875 +vt 0.3125 0.421875 +vt 0.3125 0.40625 +vt 0.15625 0.40625 +vt 0 0.421875 +vt 0.15625 0.421875 +vt 0.15625 0.40625 +vt 0 0.40625 +vt 0.46875 0.421875 +vt 0.625 0.421875 +vt 0.625 0.40625 +vt 0.46875 0.40625 +vt 0.3125 0.421875 +vt 0.46875 0.421875 +vt 0.46875 0.40625 +vt 0.3125 0.40625 +vt 0.3125 0.421875 +vt 0.15625 0.421875 +vt 0.15625 0.5 +vt 0.3125 0.5 +vt 0.46875 0.5 +vt 0.3125 0.5 +vt 0.3125 0.421875 +vt 0.46875 0.421875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o hat2 +v 0.19420316941970583 2.3448018130595334 0.26781917680283374 +v 0.19360379633542446 2.367690947692347 -0.16908124465229235 +v 0.20073843784720224 2.0952299807209473 0.2547351877420978 +v 0.20013906476292087 2.118119115353761 -0.18216523371302834 +v -0.24374628334138193 2.3562385328076525 -0.16908124465229235 +v -0.24314691025710045 2.333349398174839 0.26781917680283374 +v -0.2372110149138854 2.1066667004690665 -0.18216523371302834 +v -0.23661164182960404 2.083777565836253 0.2547351877420978 +vt 0.109375 0.3515625 +vt 0.21875 0.3515625 +vt 0.21875 0.3203125 +vt 0.109375 0.3203125 +vt 0 0.3515625 +vt 0.109375 0.3515625 +vt 0.109375 0.3203125 +vt 0 0.3203125 +vt 0.328125 0.3515625 +vt 0.4375 0.3515625 +vt 0.4375 0.3203125 +vt 0.328125 0.3203125 +vt 0.21875 0.3515625 +vt 0.328125 0.3515625 +vt 0.328125 0.3203125 +vt 0.21875 0.3203125 +vt 0.21875 0.3515625 +vt 0.109375 0.3515625 +vt 0.109375 0.40625 +vt 0.21875 0.40625 +vt 0.328125 0.40625 +vt 0.21875 0.40625 +vt 0.21875 0.3515625 +vt 0.328125 0.3515625 +vn -0.0013699956212146517 0.052318022017859046 -0.998629534754574 +vn 0.9996573249755573 0.026176948307873146 -2.168404344971009e-19 +vn 0.0013699956212146517 -0.052318022017859046 0.998629534754574 +vn -0.9996573249755573 -0.026176948307873146 2.168404344971009e-19 +vn -0.02614107370998589 0.9982873293543426 0.05233595624294382 +vn 0.02614107370998589 -0.9982873293543426 -0.05233595624294382 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o hat3 +v 0.06205916642018039 2.5318108508382715 0.25085017875105275 +v 0.059669177777630145 2.5708345128476795 0.003926219286475963 +v 0.08152178038959057 2.2856541582304613 0.21175939541454591 +v 0.07913179174704033 2.3246778202398692 -0.03516456405003088 +v -0.1895606250384982 2.5512376639234398 0.0032414562075101516 +v -0.187170636395948 2.5122140019140318 0.25016541567208694 +v -0.17009801106908795 2.3050809713156295 -0.03584932712899669 +v -0.1677080224265377 2.2660573093062215 0.2110746323355801 +vt 0.0625 0.2890625 +vt 0.125 0.2890625 +vt 0.125 0.2578125 +vt 0.0625 0.2578125 +vt 0 0.2890625 +vt 0.0625 0.2890625 +vt 0.0625 0.2578125 +vt 0 0.2578125 +vt 0.1875 0.2890625 +vt 0.25 0.2890625 +vt 0.25 0.2578125 +vt 0.1875 0.2578125 +vt 0.125 0.2890625 +vt 0.1875 0.2890625 +vt 0.1875 0.2578125 +vt 0.125 0.2578125 +vt 0.125 0.2890625 +vt 0.0625 0.2890625 +vt 0.0625 0.3203125 +vt 0.125 0.3203125 +vt 0.1875 0.3203125 +vt 0.125 0.3203125 +vt 0.125 0.2890625 +vt 0.1875 0.2890625 +vn -0.009559954570200835 0.156094648037632 -0.9876958378583074 +vn 0.9969192112645133 0.07838739569696003 0.002739052315863333 +vn 0.009559954570200835 -0.156094648037632 0.9876958378583074 +vn -0.9969192112645133 -0.07838739569696003 -0.002739052315863333 +vn -0.07785045587764094 0.9846267704312412 0.1563631333460272 +vn 0.07785045587764094 -0.9846267704312412 -0.1563631333460272 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o hat4 +v -0.06724991963009147 2.6297151428282426 0.2756843667494786 +v -0.07166686964939262 2.6629564553960905 0.18813684713130974 +v -0.03980089941132947 2.486376747492985 0.21987470619018534 +v -0.04421784943063062 2.519618060060833 0.1323271865720166 +v -0.16385315668047867 2.645999001844819 0.18634918036183534 +v -0.15943620666117758 2.6127576892769713 0.2738966999800041 +v -0.13640413646171662 2.502660606509562 0.1305395198025422 +v -0.13198718644241553 2.469419293941714 0.21808703942071106 +vt 0.015625 0.25 +vt 0.03125 0.25 +vt 0.03125 0.234375 +vt 0.015625 0.234375 +vt 0 0.25 +vt 0.015625 0.25 +vt 0.015625 0.234375 +vt 0 0.234375 +vt 0.046875 0.25 +vt 0.0625 0.25 +vt 0.0625 0.234375 +vt 0.046875 0.234375 +vt 0.03125 0.25 +vt 0.046875 0.25 +vt 0.046875 0.234375 +vt 0.03125 0.234375 +vt 0.03125 0.25 +vt 0.015625 0.25 +vt 0.015625 0.2578125 +vt 0.03125 0.2578125 +vt 0.046875 0.2578125 +vt 0.03125 0.2578125 +vt 0.03125 0.25 +vt 0.046875 0.25 +vn -0.04711413353921201 0.3545740007237079 -0.9338402092604674 +vn 0.9833203949982517 0.18087950454689375 0.019068445541060658 +vn 0.04711413353921201 -0.3545740007237079 0.9338402092604674 +vn -0.9833203949982517 -0.18087950454689375 -0.019068445541060658 +vn -0.17567372940007692 0.9173657301456462 0.3571818275794757 +vn 0.17567372940007692 -0.9173657301456462 -0.3571818275794757 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o body +v 0.25 1.5 0.1875 +v 0.25 1.5 -0.1875 +v 0.25 0.75 0.1875 +v 0.25 0.75 -0.1875 +v -0.25 1.5 -0.1875 +v -0.25 1.5 0.1875 +v -0.25 0.75 -0.1875 +v -0.25 0.75 0.1875 +vt 0.34375 0.796875 +vt 0.46875 0.796875 +vt 0.46875 0.703125 +vt 0.34375 0.703125 +vt 0.25 0.796875 +vt 0.34375 0.796875 +vt 0.34375 0.703125 +vt 0.25 0.703125 +vt 0.5625 0.796875 +vt 0.6875 0.796875 +vt 0.6875 0.703125 +vt 0.5625 0.703125 +vt 0.46875 0.796875 +vt 0.5625 0.796875 +vt 0.5625 0.703125 +vt 0.46875 0.703125 +vt 0.46875 0.796875 +vt 0.34375 0.796875 +vt 0.34375 0.84375 +vt 0.46875 0.84375 +vt 0.59375 0.84375 +vt 0.46875 0.84375 +vt 0.46875 0.796875 +vt 0.59375 0.796875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o body +v 0.28125 1.53125 0.21875 +v 0.28125 1.53125 -0.21875 +v 0.28125 0.34375 0.21875 +v 0.28125 0.34375 -0.21875 +v -0.28125 1.53125 -0.21875 +v -0.28125 1.53125 0.21875 +v -0.28125 0.34375 -0.21875 +v -0.28125 0.34375 0.21875 +vt 0.09375 0.65625 +vt 0.21875 0.65625 +vt 0.21875 0.515625 +vt 0.09375 0.515625 +vt 0 0.65625 +vt 0.09375 0.65625 +vt 0.09375 0.515625 +vt 0 0.515625 +vt 0.3125 0.65625 +vt 0.4375 0.65625 +vt 0.4375 0.515625 +vt 0.3125 0.515625 +vt 0.21875 0.65625 +vt 0.3125 0.65625 +vt 0.3125 0.515625 +vt 0.21875 0.515625 +vt 0.21875 0.65625 +vt 0.09375 0.65625 +vt 0.09375 0.703125 +vt 0.21875 0.703125 +vt 0.34375 0.703125 +vt 0.21875 0.703125 +vt 0.21875 0.65625 +vt 0.34375 0.65625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o arms +v 0.25 1.198223304703363 0 +v 0.25 1.375 -0.17677669529663698 +v 0.25 1.0214466094067263 -0.17677669529663698 +v 0.25 1.1982233047033632 -0.35355339059327373 +v -0.25 1.375 -0.17677669529663698 +v -0.25 1.198223304703363 0 +v -0.25 1.1982233047033632 -0.35355339059327373 +v -0.25 1.0214466094067263 -0.17677669529663698 +vt 0.6875 0.671875 +vt 0.8125 0.671875 +vt 0.8125 0.640625 +vt 0.6875 0.640625 +vt 0.625 0.671875 +vt 0.6875 0.671875 +vt 0.6875 0.640625 +vt 0.625 0.640625 +vt 0.875 0.671875 +vt 1 0.671875 +vt 1 0.640625 +vt 0.875 0.640625 +vt 0.8125 0.671875 +vt 0.875 0.671875 +vt 0.875 0.640625 +vt 0.8125 0.640625 +vt 0.8125 0.671875 +vt 0.6875 0.671875 +vt 0.6875 0.703125 +vt 0.8125 0.703125 +vt 0.9375 0.703125 +vt 0.8125 0.703125 +vt 0.8125 0.671875 +vt 0.9375 0.671875 +vn 0 0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 -0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 0.7071067811865476 +vn 0 -0.7071067811865475 -0.7071067811865476 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o arms +v 0.5 1.375 0.17677669529663698 +v 0.5 1.551776695296637 0 +v 0.5 1.0214466094067263 -0.17677669529663698 +v 0.5 1.1982233047033632 -0.35355339059327373 +v 0.25 1.551776695296637 0 +v 0.25 1.375 0.17677669529663698 +v 0.25 1.1982233047033632 -0.35355339059327373 +v 0.25 1.0214466094067263 -0.17677669529663698 +vt 0.75 0.796875 +vt 0.8125 0.796875 +vt 0.8125 0.734375 +vt 0.75 0.734375 +vt 0.6875 0.796875 +vt 0.75 0.796875 +vt 0.75 0.734375 +vt 0.6875 0.734375 +vt 0.875 0.796875 +vt 0.9375 0.796875 +vt 0.9375 0.734375 +vt 0.875 0.734375 +vt 0.8125 0.796875 +vt 0.875 0.796875 +vt 0.875 0.734375 +vt 0.8125 0.734375 +vt 0.8125 0.796875 +vt 0.75 0.796875 +vt 0.75 0.828125 +vt 0.8125 0.828125 +vt 0.875 0.828125 +vt 0.8125 0.828125 +vt 0.8125 0.796875 +vt 0.875 0.796875 +vn 0 0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 -0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 0.7071067811865476 +vn 0 -0.7071067811865475 -0.7071067811865476 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 +o arms +v -0.25 1.375 0.17677669529663698 +v -0.25 1.551776695296637 0 +v -0.25 1.0214466094067263 -0.17677669529663698 +v -0.25 1.1982233047033632 -0.35355339059327373 +v -0.5 1.551776695296637 0 +v -0.5 1.375 0.17677669529663698 +v -0.5 1.1982233047033632 -0.35355339059327373 +v -0.5 1.0214466094067263 -0.17677669529663698 +vt 0.75 0.796875 +vt 0.8125 0.796875 +vt 0.8125 0.734375 +vt 0.75 0.734375 +vt 0.6875 0.796875 +vt 0.75 0.796875 +vt 0.75 0.734375 +vt 0.6875 0.734375 +vt 0.875 0.796875 +vt 0.9375 0.796875 +vt 0.9375 0.734375 +vt 0.875 0.734375 +vt 0.8125 0.796875 +vt 0.875 0.796875 +vt 0.875 0.734375 +vt 0.8125 0.734375 +vt 0.8125 0.796875 +vt 0.75 0.796875 +vt 0.75 0.828125 +vt 0.8125 0.828125 +vt 0.875 0.828125 +vt 0.8125 0.828125 +vt 0.8125 0.796875 +vt 0.875 0.796875 +vn 0 0.7071067811865476 -0.7071067811865475 +vn 1 0 0 +vn 0 -0.7071067811865476 0.7071067811865475 +vn -1 0 0 +vn 0 0.7071067811865475 0.7071067811865476 +vn 0 -0.7071067811865475 -0.7071067811865476 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 92/268/67 95/267/67 93/266/67 90/265/67 +f 91/272/68 92/271/68 90/270/68 89/269/68 +f 96/276/69 91/275/69 89/274/69 94/273/69 +f 95/280/70 96/279/70 94/278/70 93/277/70 +f 94/284/71 89/283/71 90/282/71 93/281/71 +f 95/288/72 92/287/72 91/286/72 96/285/72 +o leg0 +v 0.25 0.75 0.125 +v 0.25 0.75 -0.125 +v 0.25 0 0.125 +v 0.25 0 -0.125 +v 0 0.75 -0.125 +v 0 0.75 0.125 +v 0 0 -0.125 +v 0 0 0.125 +vt 0.0625 0.796875 +vt 0.125 0.796875 +vt 0.125 0.703125 +vt 0.0625 0.703125 +vt 0 0.796875 +vt 0.0625 0.796875 +vt 0.0625 0.703125 +vt 0 0.703125 +vt 0.1875 0.796875 +vt 0.25 0.796875 +vt 0.25 0.703125 +vt 0.1875 0.703125 +vt 0.125 0.796875 +vt 0.1875 0.796875 +vt 0.1875 0.703125 +vt 0.125 0.703125 +vt 0.125 0.796875 +vt 0.0625 0.796875 +vt 0.0625 0.828125 +vt 0.125 0.828125 +vt 0.1875 0.828125 +vt 0.125 0.828125 +vt 0.125 0.796875 +vt 0.1875 0.796875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 100/292/73 103/291/73 101/290/73 98/289/73 +f 99/296/74 100/295/74 98/294/74 97/293/74 +f 104/300/75 99/299/75 97/298/75 102/297/75 +f 103/304/76 104/303/76 102/302/76 101/301/76 +f 102/308/77 97/307/77 98/306/77 101/305/77 +f 103/312/78 100/311/78 99/310/78 104/309/78 +o leg1 +v 0 0.75 0.125 +v 0 0.75 -0.125 +v 0 0 0.125 +v 0 0 -0.125 +v -0.25 0.75 -0.125 +v -0.25 0.75 0.125 +v -0.25 0 -0.125 +v -0.25 0 0.125 +vt 0.0625 0.796875 +vt 0.125 0.796875 +vt 0.125 0.703125 +vt 0.0625 0.703125 +vt 0 0.796875 +vt 0.0625 0.796875 +vt 0.0625 0.703125 +vt 0 0.703125 +vt 0.1875 0.796875 +vt 0.25 0.796875 +vt 0.25 0.703125 +vt 0.1875 0.703125 +vt 0.125 0.796875 +vt 0.1875 0.796875 +vt 0.1875 0.703125 +vt 0.125 0.703125 +vt 0.125 0.796875 +vt 0.0625 0.796875 +vt 0.0625 0.828125 +vt 0.125 0.828125 +vt 0.1875 0.828125 +vt 0.125 0.828125 +vt 0.125 0.796875 +vt 0.1875 0.796875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_5cc249a3-cb80-69af-8be3-aeafeadc66a1 +f 108/316/79 111/315/79 109/314/79 106/313/79 +f 107/320/80 108/319/80 106/318/80 105/317/80 +f 112/324/81 107/323/81 105/322/81 110/321/81 +f 111/328/82 112/327/82 110/326/82 109/325/82 +f 110/332/83 105/331/83 106/330/83 109/329/83 +f 111/336/84 108/335/84 107/334/84 112/333/84 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/wolf.obj b/prismarine-viewer/viewer/lib/entity/models/wolf.obj new file mode 100644 index 00000000..086cda39 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/wolf.obj @@ -0,0 +1,509 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o head +v 0.25 0.84375 -0.3125 +v 0.25 0.84375 -0.5625 +v 0.25 0.46875 -0.3125 +v 0.25 0.46875 -0.5625 +v -0.125 0.84375 -0.5625 +v -0.125 0.84375 -0.3125 +v -0.125 0.46875 -0.5625 +v -0.125 0.46875 -0.3125 +vt 0.0625 0.875 +vt 0.15625 0.875 +vt 0.15625 0.6875 +vt 0.0625 0.6875 +vt 0 0.875 +vt 0.0625 0.875 +vt 0.0625 0.6875 +vt 0 0.6875 +vt 0.21875 0.875 +vt 0.3125 0.875 +vt 0.3125 0.6875 +vt 0.21875 0.6875 +vt 0.15625 0.875 +vt 0.21875 0.875 +vt 0.21875 0.6875 +vt 0.15625 0.6875 +vt 0.15625 0.875 +vt 0.0625 0.875 +vt 0.0625 1 +vt 0.15625 1 +vt 0.25 1 +vt 0.15625 1 +vt 0.15625 0.875 +vt 0.25 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o head +v 0.25 0.96875 -0.375 +v 0.25 0.96875 -0.4375 +v 0.25 0.84375 -0.375 +v 0.25 0.84375 -0.4375 +v 0.125 0.96875 -0.4375 +v 0.125 0.96875 -0.375 +v 0.125 0.84375 -0.4375 +v 0.125 0.84375 -0.375 +vt 0.265625 0.53125 +vt 0.296875 0.53125 +vt 0.296875 0.46875 +vt 0.265625 0.46875 +vt 0.25 0.53125 +vt 0.265625 0.53125 +vt 0.265625 0.46875 +vt 0.25 0.46875 +vt 0.3125 0.53125 +vt 0.34375 0.53125 +vt 0.34375 0.46875 +vt 0.3125 0.46875 +vt 0.296875 0.53125 +vt 0.3125 0.53125 +vt 0.3125 0.46875 +vt 0.296875 0.46875 +vt 0.296875 0.53125 +vt 0.265625 0.53125 +vt 0.265625 0.5625 +vt 0.296875 0.5625 +vt 0.328125 0.5625 +vt 0.296875 0.5625 +vt 0.296875 0.53125 +vt 0.328125 0.53125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o head +v 0 0.96875 -0.375 +v 0 0.96875 -0.4375 +v 0 0.84375 -0.375 +v 0 0.84375 -0.4375 +v -0.125 0.96875 -0.4375 +v -0.125 0.96875 -0.375 +v -0.125 0.84375 -0.4375 +v -0.125 0.84375 -0.375 +vt 0.265625 0.53125 +vt 0.296875 0.53125 +vt 0.296875 0.46875 +vt 0.265625 0.46875 +vt 0.25 0.53125 +vt 0.265625 0.53125 +vt 0.265625 0.46875 +vt 0.25 0.46875 +vt 0.3125 0.53125 +vt 0.34375 0.53125 +vt 0.34375 0.46875 +vt 0.3125 0.46875 +vt 0.296875 0.53125 +vt 0.3125 0.53125 +vt 0.3125 0.46875 +vt 0.296875 0.46875 +vt 0.296875 0.53125 +vt 0.265625 0.53125 +vt 0.265625 0.5625 +vt 0.296875 0.5625 +vt 0.328125 0.5625 +vt 0.296875 0.5625 +vt 0.296875 0.53125 +vt 0.328125 0.53125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o head +v 0.15625 0.6572268750000001 -0.5 +v 0.15625 0.6572268750000001 -0.75 +v 0.15625 0.469726875 -0.5 +v 0.15625 0.469726875 -0.75 +v -0.03125 0.6572268750000001 -0.75 +v -0.03125 0.6572268750000001 -0.5 +v -0.03125 0.469726875 -0.75 +v -0.03125 0.469726875 -0.5 +vt 0.0625 0.5625 +vt 0.109375 0.5625 +vt 0.109375 0.46875 +vt 0.0625 0.46875 +vt 0 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.46875 +vt 0 0.46875 +vt 0.171875 0.5625 +vt 0.21875 0.5625 +vt 0.21875 0.46875 +vt 0.171875 0.46875 +vt 0.109375 0.5625 +vt 0.171875 0.5625 +vt 0.171875 0.46875 +vt 0.109375 0.46875 +vt 0.109375 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.6875 +vt 0.109375 0.6875 +vt 0.15625 0.6875 +vt 0.109375 0.6875 +vt 0.109375 0.5625 +vt 0.15625 0.5625 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o body +v 0.25 0.8125 1.1102230246251565e-16 +v 0.25 0.4375 0 +v 0.25 0.8125 0.5625 +v 0.25 0.4375 0.5625 +v -0.125 0.4375 0 +v -0.125 0.8125 1.1102230246251565e-16 +v -0.125 0.4375 0.5625 +v -0.125 0.8125 0.5625 +vt 0.375 0.375 +vt 0.46875 0.375 +vt 0.46875 0.09375 +vt 0.375 0.09375 +vt 0.28125 0.375 +vt 0.375 0.375 +vt 0.375 0.09375 +vt 0.28125 0.09375 +vt 0.5625 0.375 +vt 0.65625 0.375 +vt 0.65625 0.09375 +vt 0.5625 0.09375 +vt 0.46875 0.375 +vt 0.5625 0.375 +vt 0.5625 0.09375 +vt 0.46875 0.09375 +vt 0.46875 0.375 +vt 0.375 0.375 +vt 0.375 0.5625 +vt 0.46875 0.5625 +vt 0.5625 0.5625 +vt 0.46875 0.5625 +vt 0.46875 0.375 +vt 0.5625 0.375 +vn 0 -1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 -1 +vn 0 -2.220446049250313e-16 1 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o upperBody +v 0.3125 0.4375 1.1102230246251565e-16 +v 0.3125 0.875 0 +v 0.3125 0.4374999999999999 -0.37499999999999994 +v 0.3125 0.875 -0.375 +v -0.1875 0.875 0 +v -0.1875 0.4375 1.1102230246251565e-16 +v -0.1875 0.875 -0.375 +v -0.1875 0.4374999999999999 -0.37499999999999994 +vt 0.4375 0.78125 +vt 0.5625 0.78125 +vt 0.5625 0.59375 +vt 0.4375 0.59375 +vt 0.328125 0.78125 +vt 0.4375 0.78125 +vt 0.4375 0.59375 +vt 0.328125 0.59375 +vt 0.671875 0.78125 +vt 0.796875 0.78125 +vt 0.796875 0.59375 +vt 0.671875 0.59375 +vt 0.5625 0.78125 +vt 0.671875 0.78125 +vt 0.671875 0.59375 +vt 0.5625 0.59375 +vt 0.5625 0.78125 +vt 0.4375 0.78125 +vt 0.4375 1 +vt 0.5625 1 +vt 0.6875 1 +vt 0.5625 1 +vt 0.5625 0.78125 +vt 0.6875 0.78125 +vn 0 1 -2.220446049250313e-16 +vn 1 0 0 +vn 0 -1 2.220446049250313e-16 +vn -1 0 0 +vn 0 2.220446049250313e-16 1 +vn 0 -2.220446049250313e-16 -1 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o leg0 +v 0.21875 0.5 0.5 +v 0.21875 0.5 0.375 +v 0.21875 0 0.5 +v 0.21875 0 0.375 +v 0.09375 0.5 0.375 +v 0.09375 0.5 0.5 +v 0.09375 0 0.375 +v 0.09375 0 0.5 +vt 0.03125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.125 +vt 0.03125 0.125 +vt 0 0.375 +vt 0.03125 0.375 +vt 0.03125 0.125 +vt 0 0.125 +vt 0.09375 0.375 +vt 0.125 0.375 +vt 0.125 0.125 +vt 0.09375 0.125 +vt 0.0625 0.375 +vt 0.09375 0.375 +vt 0.09375 0.125 +vt 0.0625 0.125 +vt 0.0625 0.375 +vt 0.03125 0.375 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.375 +vt 0.09375 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o leg1 +v 0.03125 0.5 0.5 +v 0.03125 0.5 0.375 +v 0.03125 0 0.5 +v 0.03125 0 0.375 +v -0.09375 0.5 0.375 +v -0.09375 0.5 0.5 +v -0.09375 0 0.375 +v -0.09375 0 0.5 +vt 0.03125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.125 +vt 0.03125 0.125 +vt 0 0.375 +vt 0.03125 0.375 +vt 0.03125 0.125 +vt 0 0.125 +vt 0.09375 0.375 +vt 0.125 0.375 +vt 0.125 0.125 +vt 0.09375 0.125 +vt 0.0625 0.375 +vt 0.09375 0.375 +vt 0.09375 0.125 +vt 0.0625 0.125 +vt 0.0625 0.375 +vt 0.03125 0.375 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.375 +vt 0.09375 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o leg2 +v 0.21875 0.5 -0.1875 +v 0.21875 0.5 -0.3125 +v 0.21875 0 -0.1875 +v 0.21875 0 -0.3125 +v 0.09375 0.5 -0.3125 +v 0.09375 0.5 -0.1875 +v 0.09375 0 -0.3125 +v 0.09375 0 -0.1875 +vt 0.03125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.125 +vt 0.03125 0.125 +vt 0 0.375 +vt 0.03125 0.375 +vt 0.03125 0.125 +vt 0 0.125 +vt 0.09375 0.375 +vt 0.125 0.375 +vt 0.125 0.125 +vt 0.09375 0.125 +vt 0.0625 0.375 +vt 0.09375 0.375 +vt 0.09375 0.125 +vt 0.0625 0.125 +vt 0.0625 0.375 +vt 0.03125 0.375 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.375 +vt 0.09375 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o leg3 +v 0.03125 0.5 -0.1875 +v 0.03125 0.5 -0.3125 +v 0.03125 0 -0.1875 +v 0.03125 0 -0.3125 +v -0.09375 0.5 -0.3125 +v -0.09375 0.5 -0.1875 +v -0.09375 0 -0.3125 +v -0.09375 0 -0.1875 +vt 0.03125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.125 +vt 0.03125 0.125 +vt 0 0.375 +vt 0.03125 0.375 +vt 0.03125 0.125 +vt 0 0.125 +vt 0.09375 0.375 +vt 0.125 0.375 +vt 0.125 0.125 +vt 0.09375 0.125 +vt 0.0625 0.375 +vt 0.09375 0.375 +vt 0.09375 0.125 +vt 0.0625 0.125 +vt 0.0625 0.375 +vt 0.03125 0.375 +vt 0.03125 0.4375 +vt 0.0625 0.4375 +vt 0.09375 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.375 +vt 0.09375 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 +o tail +v 0.125 0.8011970027680619 0.5358485272719404 +v 0.125 0.6988029972319381 0.46415147272805957 +v 0.125 0.5144087845925389 0.9454245494164362 +v 0.125 0.4120147790564149 0.8737274948725555 +v 0 0.6988029972319381 0.46415147272805957 +v 0 0.8011970027680619 0.5358485272719404 +v 0 0.4120147790564149 0.8737274948725555 +v 0 0.5144087845925389 0.9454245494164362 +vt 0.171875 0.375 +vt 0.203125 0.375 +vt 0.203125 0.125 +vt 0.171875 0.125 +vt 0.140625 0.375 +vt 0.171875 0.375 +vt 0.171875 0.125 +vt 0.140625 0.125 +vt 0.234375 0.375 +vt 0.265625 0.375 +vt 0.265625 0.125 +vt 0.234375 0.125 +vt 0.203125 0.375 +vt 0.234375 0.375 +vt 0.234375 0.125 +vt 0.203125 0.125 +vt 0.203125 0.375 +vt 0.171875 0.375 +vt 0.171875 0.4375 +vt 0.203125 0.4375 +vt 0.234375 0.4375 +vt 0.203125 0.4375 +vt 0.203125 0.375 +vt 0.234375 0.375 +vn 0 -0.8191520442889917 -0.5735764363510463 +vn 1 0 0 +vn 0 0.8191520442889917 0.5735764363510463 +vn -1 0 0 +vn 0 0.5735764363510463 -0.8191520442889917 +vn 0 -0.5735764363510463 0.8191520442889917 +usemtl m_94c40dbc-0261-544f-e827-6e5c4aaaa4dd +f 84/244/61 87/243/61 85/242/61 82/241/61 +f 83/248/62 84/247/62 82/246/62 81/245/62 +f 88/252/63 83/251/63 81/250/63 86/249/63 +f 87/256/64 88/255/64 86/254/64 85/253/64 +f 86/260/65 81/259/65 82/258/65 85/257/65 +f 87/264/66 84/263/66 83/262/66 88/261/66 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/zombie.obj b/prismarine-viewer/viewer/lib/entity/models/zombie.obj new file mode 100644 index 00000000..bcd7444c --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/zombie.obj @@ -0,0 +1,325 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o Body +v 0.25 1.5 0.125 +v 0.25 1.5 -0.125 +v 0.25 0.75 0.125 +v 0.25 0.75 -0.125 +v -0.25 1.5 -0.125 +v -0.25 1.5 0.125 +v -0.25 0.75 -0.125 +v -0.25 0.75 0.125 +vt 0.3125 0.375 +vt 0.4375 0.375 +vt 0.4375 0 +vt 0.3125 0 +vt 0.25 0.375 +vt 0.3125 0.375 +vt 0.3125 0 +vt 0.25 0 +vt 0.5 0.375 +vt 0.625 0.375 +vt 0.625 0 +vt 0.5 0 +vt 0.4375 0.375 +vt 0.5 0.375 +vt 0.5 0 +vt 0.4375 0 +vt 0.4375 0.375 +vt 0.3125 0.375 +vt 0.3125 0.5 +vt 0.4375 0.5 +vt 0.5625 0.5 +vt 0.4375 0.5 +vt 0.4375 0.375 +vt 0.5625 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9eb5cf2e-0212-52a4-6070-8cb3b67f2e24 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o Head +v 0.25 2 0.25 +v 0.25 2 -0.25 +v 0.25 1.5 0.25 +v 0.25 1.5 -0.25 +v -0.25 2 -0.25 +v -0.25 2 0.25 +v -0.25 1.5 -0.25 +v -0.25 1.5 0.25 +vt 0.125 0.75 +vt 0.25 0.75 +vt 0.25 0.5 +vt 0.125 0.5 +vt 0 0.75 +vt 0.125 0.75 +vt 0.125 0.5 +vt 0 0.5 +vt 0.375 0.75 +vt 0.5 0.75 +vt 0.5 0.5 +vt 0.375 0.5 +vt 0.25 0.75 +vt 0.375 0.75 +vt 0.375 0.5 +vt 0.25 0.5 +vt 0.25 0.75 +vt 0.125 0.75 +vt 0.125 1 +vt 0.25 1 +vt 0.375 1 +vt 0.25 1 +vt 0.25 0.75 +vt 0.375 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9eb5cf2e-0212-52a4-6070-8cb3b67f2e24 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o Hat Layer +v 0.28125 2.03125 0.28125 +v 0.28125 2.03125 -0.28125 +v 0.28125 1.46875 0.28125 +v 0.28125 1.46875 -0.28125 +v -0.28125 2.03125 -0.28125 +v -0.28125 2.03125 0.28125 +v -0.28125 1.46875 -0.28125 +v -0.28125 1.46875 0.28125 +vt 0.625 0.75 +vt 0.75 0.75 +vt 0.75 0.5 +vt 0.625 0.5 +vt 0.5 0.75 +vt 0.625 0.75 +vt 0.625 0.5 +vt 0.5 0.5 +vt 0.875 0.75 +vt 1 0.75 +vt 1 0.5 +vt 0.875 0.5 +vt 0.75 0.75 +vt 0.875 0.75 +vt 0.875 0.5 +vt 0.75 0.5 +vt 0.75 0.75 +vt 0.625 0.75 +vt 0.625 1 +vt 0.75 1 +vt 0.875 1 +vt 0.75 1 +vt 0.75 0.75 +vt 0.875 0.75 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9eb5cf2e-0212-52a4-6070-8cb3b67f2e24 +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o RightArm +v 0.5 1.5 0.125 +v 0.5 1.5 -0.125 +v 0.5 0.75 0.125 +v 0.5 0.75 -0.125 +v 0.25 1.5 -0.125 +v 0.25 1.5 0.125 +v 0.25 0.75 -0.125 +v 0.25 0.75 0.125 +vt 0.6875 0.375 +vt 0.75 0.375 +vt 0.75 0 +vt 0.6875 0 +vt 0.625 0.375 +vt 0.6875 0.375 +vt 0.6875 0 +vt 0.625 0 +vt 0.8125 0.375 +vt 0.875 0.375 +vt 0.875 0 +vt 0.8125 0 +vt 0.75 0.375 +vt 0.8125 0.375 +vt 0.8125 0 +vt 0.75 0 +vt 0.75 0.375 +vt 0.6875 0.375 +vt 0.6875 0.5 +vt 0.75 0.5 +vt 0.8125 0.5 +vt 0.75 0.5 +vt 0.75 0.375 +vt 0.8125 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9eb5cf2e-0212-52a4-6070-8cb3b67f2e24 +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o LeftArm +v -0.25 1.5 0.125 +v -0.25 1.5 -0.125 +v -0.25 0.75 0.125 +v -0.25 0.75 -0.125 +v -0.5 1.5 -0.125 +v -0.5 1.5 0.125 +v -0.5 0.75 -0.125 +v -0.5 0.75 0.125 +vt 0.75 0.375 +vt 0.6875 0.375 +vt 0.6875 0 +vt 0.75 0 +vt 0.8125 0.375 +vt 0.75 0.375 +vt 0.75 0 +vt 0.8125 0 +vt 0.875 0.375 +vt 0.8125 0.375 +vt 0.8125 0 +vt 0.875 0 +vt 0.6875 0.375 +vt 0.625 0.375 +vt 0.625 0 +vt 0.6875 0 +vt 0.6875 0.375 +vt 0.75 0.375 +vt 0.75 0.5 +vt 0.6875 0.5 +vt 0.75 0.5 +vt 0.8125 0.5 +vt 0.8125 0.375 +vt 0.75 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9eb5cf2e-0212-52a4-6070-8cb3b67f2e24 +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o RightLeg +v 0.24375000000000002 0.75 0.125 +v 0.24375000000000002 0.75 -0.125 +v 0.24375000000000002 0 0.125 +v 0.24375000000000002 0 -0.125 +v -0.006249999999999978 0.75 -0.125 +v -0.006249999999999978 0.75 0.125 +v -0.006249999999999978 0 -0.125 +v -0.006249999999999978 0 0.125 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0 +vt 0.0625 0 +vt 0 0.375 +vt 0.0625 0.375 +vt 0.0625 0 +vt 0 0 +vt 0.1875 0.375 +vt 0.25 0.375 +vt 0.25 0 +vt 0.1875 0 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0 +vt 0.125 0 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0.0625 0.5 +vt 0.125 0.5 +vt 0.1875 0.5 +vt 0.125 0.5 +vt 0.125 0.375 +vt 0.1875 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9eb5cf2e-0212-52a4-6070-8cb3b67f2e24 +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o LeftLeg +v 0.006249999999999978 0.75 0.125 +v 0.006249999999999978 0.75 -0.125 +v 0.006249999999999978 0 0.125 +v 0.006249999999999978 0 -0.125 +v -0.24375000000000002 0.75 -0.125 +v -0.24375000000000002 0.75 0.125 +v -0.24375000000000002 0 -0.125 +v -0.24375000000000002 0 0.125 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0.0625 0 +vt 0.125 0 +vt 0.1875 0.375 +vt 0.125 0.375 +vt 0.125 0 +vt 0.1875 0 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.1875 0 +vt 0.25 0 +vt 0.0625 0.375 +vt 0 0.375 +vt 0 0 +vt 0.0625 0 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0.125 0.5 +vt 0.1875 0.5 +vt 0.1875 0.375 +vt 0.125 0.375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_9eb5cf2e-0212-52a4-6070-8cb3b67f2e24 +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/zombie_villager.obj b/prismarine-viewer/viewer/lib/entity/models/zombie_villager.obj new file mode 100644 index 00000000..22282802 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/zombie_villager.obj @@ -0,0 +1,463 @@ +# Made in Blockbench 4.9.4 +mtllib materials.mtl + +o Body +v 0.25 1.5 0.1875 +v 0.25 1.5 -0.1875 +v 0.25 0.75 0.1875 +v 0.25 0.75 -0.1875 +v -0.25 1.5 -0.1875 +v -0.25 1.5 0.1875 +v -0.25 0.75 -0.1875 +v -0.25 0.75 0.1875 +vt 0.34375 0.59375 +vt 0.46875 0.59375 +vt 0.46875 0.40625 +vt 0.34375 0.40625 +vt 0.25 0.59375 +vt 0.34375 0.59375 +vt 0.34375 0.40625 +vt 0.25 0.40625 +vt 0.5625 0.59375 +vt 0.6875 0.59375 +vt 0.6875 0.40625 +vt 0.5625 0.40625 +vt 0.46875 0.59375 +vt 0.5625 0.59375 +vt 0.5625 0.40625 +vt 0.46875 0.40625 +vt 0.46875 0.59375 +vt 0.34375 0.59375 +vt 0.34375 0.6875 +vt 0.46875 0.6875 +vt 0.59375 0.6875 +vt 0.46875 0.6875 +vt 0.46875 0.59375 +vt 0.59375 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o Body +v 0.28125 1.53125 0.21875 +v 0.28125 1.53125 -0.21875 +v 0.28125 0.34375 0.21875 +v 0.28125 0.34375 -0.21875 +v -0.28125 1.53125 -0.21875 +v -0.28125 1.53125 0.21875 +v -0.28125 0.34375 -0.21875 +v -0.28125 0.34375 0.21875 +vt 0.09375 0.3125 +vt 0.21875 0.3125 +vt 0.21875 0.03125 +vt 0.09375 0.03125 +vt 0 0.3125 +vt 0.09375 0.3125 +vt 0.09375 0.03125 +vt 0 0.03125 +vt 0.3125 0.3125 +vt 0.4375 0.3125 +vt 0.4375 0.03125 +vt 0.3125 0.03125 +vt 0.21875 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.03125 +vt 0.21875 0.03125 +vt 0.21875 0.3125 +vt 0.09375 0.3125 +vt 0.09375 0.40625 +vt 0.21875 0.40625 +vt 0.34375 0.40625 +vt 0.21875 0.40625 +vt 0.21875 0.3125 +vt 0.34375 0.3125 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 +o Head +v 0.265625 2.140625 0.265625 +v 0.265625 2.140625 -0.265625 +v 0.265625 1.484375 0.265625 +v 0.265625 1.484375 -0.265625 +v -0.265625 2.140625 -0.265625 +v -0.265625 2.140625 0.265625 +v -0.265625 1.484375 -0.265625 +v -0.265625 1.484375 0.265625 +vt 0.125 0.875 +vt 0.25 0.875 +vt 0.25 0.71875 +vt 0.125 0.71875 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 0.71875 +vt 0 0.71875 +vt 0.375 0.875 +vt 0.5 0.875 +vt 0.5 0.71875 +vt 0.375 0.71875 +vt 0.25 0.875 +vt 0.375 0.875 +vt 0.375 0.71875 +vt 0.25 0.71875 +vt 0.25 0.875 +vt 0.125 0.875 +vt 0.125 1 +vt 0.25 1 +vt 0.375 1 +vt 0.25 1 +vt 0.25 0.875 +vt 0.375 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 20/52/13 23/51/13 21/50/13 18/49/13 +f 19/56/14 20/55/14 18/54/14 17/53/14 +f 24/60/15 19/59/15 17/58/15 22/57/15 +f 23/64/16 24/63/16 22/62/16 21/61/16 +f 22/68/17 17/67/17 18/66/17 21/65/17 +f 23/72/18 20/71/18 19/70/18 24/69/18 +o Head +v 0.078125 1.703125 -0.234375 +v 0.078125 1.703125 -0.390625 +v 0.078125 1.421875 -0.234375 +v 0.078125 1.421875 -0.390625 +v -0.078125 1.703125 -0.390625 +v -0.078125 1.703125 -0.234375 +v -0.078125 1.421875 -0.390625 +v -0.078125 1.421875 -0.234375 +vt 0.40625 0.96875 +vt 0.4375 0.96875 +vt 0.4375 0.90625 +vt 0.40625 0.90625 +vt 0.375 0.96875 +vt 0.40625 0.96875 +vt 0.40625 0.90625 +vt 0.375 0.90625 +vt 0.46875 0.96875 +vt 0.5 0.96875 +vt 0.5 0.90625 +vt 0.46875 0.90625 +vt 0.4375 0.96875 +vt 0.46875 0.96875 +vt 0.46875 0.90625 +vt 0.4375 0.90625 +vt 0.4375 0.96875 +vt 0.40625 0.96875 +vt 0.40625 1 +vt 0.4375 1 +vt 0.46875 1 +vt 0.4375 1 +vt 0.4375 0.96875 +vt 0.46875 0.96875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 28/76/19 31/75/19 29/74/19 26/73/19 +f 27/80/20 28/79/20 26/78/20 25/77/20 +f 32/84/21 27/83/21 25/82/21 30/81/21 +f 31/88/22 32/87/22 30/86/22 29/85/22 +f 30/92/23 25/91/23 26/90/23 29/89/23 +f 31/96/24 28/95/24 27/94/24 32/93/24 +o Head Layer +v 0.28125 2.15625 0.28125 +v 0.28125 2.15625 -0.28125 +v 0.28125 1.46875 0.28125 +v 0.28125 1.46875 -0.28125 +v -0.28125 2.15625 -0.28125 +v -0.28125 2.15625 0.28125 +v -0.28125 1.46875 -0.28125 +v -0.28125 1.46875 0.28125 +vt 0.625 0.875 +vt 0.75 0.875 +vt 0.75 0.71875 +vt 0.625 0.71875 +vt 0.5 0.875 +vt 0.625 0.875 +vt 0.625 0.71875 +vt 0.5 0.71875 +vt 0.875 0.875 +vt 1 0.875 +vt 1 0.71875 +vt 0.875 0.71875 +vt 0.75 0.875 +vt 0.875 0.875 +vt 0.875 0.71875 +vt 0.75 0.71875 +vt 0.75 0.875 +vt 0.625 0.875 +vt 0.625 1 +vt 0.75 1 +vt 0.875 1 +vt 0.75 1 +vt 0.75 0.875 +vt 0.875 0.875 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 36/100/25 39/99/25 37/98/25 34/97/25 +f 35/104/26 36/103/26 34/102/26 33/101/26 +f 40/108/27 35/107/27 33/106/27 38/105/27 +f 39/112/28 40/111/28 38/110/28 37/109/28 +f 38/116/29 33/115/29 34/114/29 37/113/29 +f 39/120/30 36/119/30 35/118/30 40/117/30 +o brim +v 0.5062500000000001 2.00625 -0.30625 +v 0.5062500000000001 2.00625 -0.38125 +v 0.5062500000000001 0.9937499999999999 -0.30625 +v 0.5062500000000001 0.9937499999999999 -0.38125 +v -0.50625 2.00625 -0.38125 +v -0.50625 2.00625 -0.30625 +v -0.50625 0.9937499999999999 -0.38125 +v -0.50625 0.9937499999999999 -0.30625 +vt 0.484375 0.25 +vt 0.734375 0.25 +vt 0.734375 0 +vt 0.484375 0 +vt 0.46875 0.25 +vt 0.484375 0.25 +vt 0.484375 0 +vt 0.46875 0 +vt 0.75 0.25 +vt 1 0.25 +vt 1 0 +vt 0.75 0 +vt 0.734375 0.25 +vt 0.75 0.25 +vt 0.75 0 +vt 0.734375 0 +vt 0.734375 0.25 +vt 0.484375 0.25 +vt 0.484375 0.265625 +vt 0.734375 0.265625 +vt 0.984375 0.265625 +vt 0.734375 0.265625 +vt 0.734375 0.25 +vt 0.984375 0.25 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 44/124/31 47/123/31 45/122/31 42/121/31 +f 43/128/32 44/127/32 42/126/32 41/125/32 +f 48/132/33 43/131/33 41/130/33 46/129/33 +f 47/136/34 48/135/34 46/134/34 45/133/34 +f 46/140/35 41/139/35 42/138/35 45/137/35 +f 47/144/36 44/143/36 43/142/36 48/141/36 +o RightArm +v 0.5 1.5 0.125 +v 0.5 1.5 -0.125 +v 0.5 0.75 0.125 +v 0.5 0.75 -0.125 +v 0.25 1.5 -0.125 +v 0.25 1.5 0.125 +v 0.25 0.75 -0.125 +v 0.25 0.75 0.125 +vt 0.75 0.59375 +vt 0.8125 0.59375 +vt 0.8125 0.40625 +vt 0.75 0.40625 +vt 0.6875 0.59375 +vt 0.75 0.59375 +vt 0.75 0.40625 +vt 0.6875 0.40625 +vt 0.875 0.59375 +vt 0.9375 0.59375 +vt 0.9375 0.40625 +vt 0.875 0.40625 +vt 0.8125 0.59375 +vt 0.875 0.59375 +vt 0.875 0.40625 +vt 0.8125 0.40625 +vt 0.8125 0.59375 +vt 0.75 0.59375 +vt 0.75 0.65625 +vt 0.8125 0.65625 +vt 0.875 0.65625 +vt 0.8125 0.65625 +vt 0.8125 0.59375 +vt 0.875 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 52/148/37 55/147/37 53/146/37 50/145/37 +f 51/152/38 52/151/38 50/150/38 49/149/38 +f 56/156/39 51/155/39 49/154/39 54/153/39 +f 55/160/40 56/159/40 54/158/40 53/157/40 +f 54/164/41 49/163/41 50/162/41 53/161/41 +f 55/168/42 52/167/42 51/166/42 56/165/42 +o LeftArm +v -0.25 1.5 0.125 +v -0.25 1.5 -0.125 +v -0.25 0.75 0.125 +v -0.25 0.75 -0.125 +v -0.5 1.5 -0.125 +v -0.5 1.5 0.125 +v -0.5 0.75 -0.125 +v -0.5 0.75 0.125 +vt 0.8125 0.59375 +vt 0.75 0.59375 +vt 0.75 0.40625 +vt 0.8125 0.40625 +vt 0.875 0.59375 +vt 0.8125 0.59375 +vt 0.8125 0.40625 +vt 0.875 0.40625 +vt 0.9375 0.59375 +vt 0.875 0.59375 +vt 0.875 0.40625 +vt 0.9375 0.40625 +vt 0.75 0.59375 +vt 0.6875 0.59375 +vt 0.6875 0.40625 +vt 0.75 0.40625 +vt 0.75 0.59375 +vt 0.8125 0.59375 +vt 0.8125 0.65625 +vt 0.75 0.65625 +vt 0.8125 0.65625 +vt 0.875 0.65625 +vt 0.875 0.59375 +vt 0.8125 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 60/172/43 63/171/43 61/170/43 58/169/43 +f 59/176/44 60/175/44 58/174/44 57/173/44 +f 64/180/45 59/179/45 57/178/45 62/177/45 +f 63/184/46 64/183/46 62/182/46 61/181/46 +f 62/188/47 57/187/47 58/186/47 61/185/47 +f 63/192/48 60/191/48 59/190/48 64/189/48 +o RightLeg +v 0.25 0.75 0.125 +v 0.25 0.75 -0.125 +v 0.25 0 0.125 +v 0.25 0 -0.125 +v 0 0.75 -0.125 +v 0 0.75 0.125 +v 0 0 -0.125 +v 0 0 0.125 +vt 0.0625 0.59375 +vt 0.125 0.59375 +vt 0.125 0.40625 +vt 0.0625 0.40625 +vt 0 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.40625 +vt 0 0.40625 +vt 0.1875 0.59375 +vt 0.25 0.59375 +vt 0.25 0.40625 +vt 0.1875 0.40625 +vt 0.125 0.59375 +vt 0.1875 0.59375 +vt 0.1875 0.40625 +vt 0.125 0.40625 +vt 0.125 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.65625 +vt 0.125 0.65625 +vt 0.1875 0.65625 +vt 0.125 0.65625 +vt 0.125 0.59375 +vt 0.1875 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 68/196/49 71/195/49 69/194/49 66/193/49 +f 67/200/50 68/199/50 66/198/50 65/197/50 +f 72/204/51 67/203/51 65/202/51 70/201/51 +f 71/208/52 72/207/52 70/206/52 69/205/52 +f 70/212/53 65/211/53 66/210/53 69/209/53 +f 71/216/54 68/215/54 67/214/54 72/213/54 +o LeftLeg +v 0 0.75 0.125 +v 0 0.75 -0.125 +v 0 0 0.125 +v 0 0 -0.125 +v -0.25 0.75 -0.125 +v -0.25 0.75 0.125 +v -0.25 0 -0.125 +v -0.25 0 0.125 +vt 0.125 0.59375 +vt 0.0625 0.59375 +vt 0.0625 0.40625 +vt 0.125 0.40625 +vt 0.1875 0.59375 +vt 0.125 0.59375 +vt 0.125 0.40625 +vt 0.1875 0.40625 +vt 0.25 0.59375 +vt 0.1875 0.59375 +vt 0.1875 0.40625 +vt 0.25 0.40625 +vt 0.0625 0.59375 +vt 0 0.59375 +vt 0 0.40625 +vt 0.0625 0.40625 +vt 0.0625 0.59375 +vt 0.125 0.59375 +vt 0.125 0.65625 +vt 0.0625 0.65625 +vt 0.125 0.65625 +vt 0.1875 0.65625 +vt 0.1875 0.59375 +vt 0.125 0.59375 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_dabf2b9e-3dd1-eda4-ab17-56ae6660288d +f 76/220/55 79/219/55 77/218/55 74/217/55 +f 75/224/56 76/223/56 74/222/56 73/221/56 +f 80/228/57 75/227/57 73/226/57 78/225/57 +f 79/232/58 80/231/58 78/230/58 77/229/58 +f 78/236/59 73/235/59 74/234/59 77/233/59 +f 79/240/60 76/239/60 75/238/60 80/237/60 \ No newline at end of file diff --git a/src/panorama.ts b/src/panorama.ts index 3d7aec32..59df54e4 100644 --- a/src/panorama.ts +++ b/src/panorama.ts @@ -3,7 +3,7 @@ import { join } from 'path' import fs from 'fs' import { subscribeKey } from 'valtio/utils' -import Entity from 'prismarine-viewer/viewer/lib/entity/Entity' +import { EntityMesh } from 'prismarine-viewer/viewer/lib/entity/EntityMesh' import { fromTexturePackPath, resourcePackState } from './texturePack' import { options, watchValue } from './optionsStorage' import { miscUiState } from './globalState' @@ -102,7 +102,7 @@ export async function addPanoramaCubeMap () { // should be rewritten entirely for (let i = 0; i < 20; i++) { - const m = new Entity('1.16.4', 'squid').mesh + const m = new EntityMesh('1.16.4', 'squid').mesh! m.position.set(Math.random() * 30 - 15, Math.random() * 20 - 10, Math.random() * 10 - 17) m.rotation.set(0, Math.PI + Math.random(), -Math.PI / 4, 'ZYX') const v = Math.random() * 0.01 From 18b6661b94f6c2ecce621c492239bedc9192e7bf Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 18 Apr 2024 09:59:13 +0300 Subject: [PATCH 0008/1074] fix some items rendering --- prismarine-viewer/viewer/lib/entities.js | 3 ++- src/index.ts | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/prismarine-viewer/viewer/lib/entities.js b/prismarine-viewer/viewer/lib/entities.js index d97784d4..350dc53e 100644 --- a/prismarine-viewer/viewer/lib/entities.js +++ b/prismarine-viewer/viewer/lib/entities.js @@ -86,7 +86,7 @@ function getEntityMesh (entity, scene, options, overrides) { } export class Entities extends EventEmitter { - constructor (scene) { + constructor(scene) { super() this.scene = scene this.entities = {} @@ -279,6 +279,7 @@ export class Entities extends EventEmitter { if (item) { const textureUv = this.getItemUv?.(item.itemId ?? item.blockId) if (textureUv) { + // todo use geometry buffer uv instead! const { u, v, size, su, sv, texture } = textureUv const itemsTexture = texture.clone() itemsTexture.flipY = true diff --git a/src/index.ts b/src/index.ts index c6981fd3..e68ca4f5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -144,7 +144,9 @@ new THREE.TextureLoader().load(itemsPng, (texture) => { const name = loadedData.items[id]?.name const uv = itemsAtlases.latest.textures[name] if (!uv) { - const uvBlock = viewer.world.downloadedBlockStatesData[name]?.variants?.['']?.[0].model?.elements?.[0]?.faces?.north.texture + const variant = viewer.world.downloadedBlockStatesData[name]?.variants?.[''] + if (!variant) return + const uvBlock = (Array.isArray(variant) ? variant[0] : variant).model?.elements?.[0]?.faces?.north.texture if (!uvBlock) return return { ...uvBlock, From b121cc36070724082ad1a08c11f5bd0e6d1bf396 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 18 Apr 2024 11:00:14 +0300 Subject: [PATCH 0009/1074] fix regression for some sides rendering when connected to unsupported block --- prismarine-viewer/viewer/lib/mesher/models.ts | 9 ++++++++- prismarine-viewer/viewer/lib/mesher/world.ts | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index c9e2bd3b..e9327621 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -119,11 +119,18 @@ function getLiquidRenderHeight (world, block, type, pos) { return ((block.metadata >= 8 ? 8 : 7 - block.metadata) + 1) / 9 } +const everyArray = (array, callback) => { + if (!array?.length) return false + return array.every(callback) +} + + const isCube = (block) => { if (!block || block.transparent) return false if (block.isCube) return true if (!block.variant) block.variant = getModelVariants(block) - return block.variant.every(v => v?.model?.elements.every(e => { + if (!block.variant.length) return false + return block.variant.every(v => everyArray(v?.model?.elements, e => { return e.from[0] === 0 && e.from[1] === 0 && e.from[2] === 0 && e.to[0] === 16 && e.to[1] === 16 && e.to[2] === 16 })) } diff --git a/prismarine-viewer/viewer/lib/mesher/world.ts b/prismarine-viewer/viewer/lib/mesher/world.ts index c27d2b8d..af9d3d9f 100644 --- a/prismarine-viewer/viewer/lib/mesher/world.ts +++ b/prismarine-viewer/viewer/lib/mesher/world.ts @@ -74,6 +74,7 @@ export class World { } setBlockStateId (pos: Vec3, stateId) { + if (stateId === undefined) throw new Error('stateId is undefined') const key = columnKey(Math.floor(pos.x / 16) * 16, Math.floor(pos.z / 16) * 16) const column = this.columns[key] From eba9fc283959bb07819979a0a4db6be62d807a8e Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 18 Apr 2024 11:36:55 +0300 Subject: [PATCH 0010/1074] fix: fix all known digging issues including fastdigging detection --- src/worldInteractions.ts | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index 9353670c..b2602cc5 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -36,11 +36,13 @@ class WorldInteraction { buttons = [false, false, false] lastButtons = [false, false, false] breakStartTime: number | undefined = 0 + lastDugBlock: Vec3 | null = null cursorBlock: import('prismarine-block').Block | null = null blockBreakMesh: THREE.Mesh breakTextures: THREE.Texture[] lastDigged: number lineMaterial: LineMaterial + debugStatus: string oneTimeInit () { const loader = new THREE.TextureLoader() @@ -89,6 +91,9 @@ class WorldInteraction { bot.attack(entity) } }) + document.addEventListener('blur', (e) => { + this.buttons = [false, false, false] + }) beforeRenderFrame.push(() => { if (this.lineMaterial) { @@ -106,11 +111,25 @@ class WorldInteraction { } assertDefined(viewer) bot.on('physicsTick', () => { if (this.lastBlockPlaced < 4) this.lastBlockPlaced++ }) - bot.on('diggingCompleted', () => { + bot.on('diggingCompleted', (block) => { this.breakStartTime = undefined + this.lastDugBlock = block.position + // TODO: If the tool and enchantments immediately exceed the hardness times 30, the block breaks with no delay; SO WE NEED TO CHECK THAT + // TODO: Any blocks with a breaking time of 0.05 + this.lastDigged = Date.now() + this.debugStatus = 'done' }) - bot.on('diggingAborted', () => { + bot.on('diggingAborted', (block) => { + if (!this.cursorBlock?.position.equals(block.position)) return + this.debugStatus = 'aborted' + // if (this.lastDugBlock) this.breakStartTime = undefined + if (this.buttons[0]) { + this.buttons[0] = false + this.update() + this.buttons[0] = true // trigger again + } + this.lastDugBlock = null }) const upLineMaterial = () => { @@ -210,6 +229,11 @@ class WorldInteraction { bot.stopDigging() // this shouldnt throw anything... } catch (e) { } // to be reworked in mineflayer, then remove the try here } + // We stopped breaking + if ((!this.buttons[0] && this.lastButtons[0])) { + this.lastDugBlock = null + this.debugStatus = 'cancelled' + } const onGround = bot.entity.onGround || bot.game.gameMode === 'creative' this.prevOnGround ??= onGround // todo this should be fixed in mineflayer to involve correct calculations when this changes as this is very important when mining straight down // todo this should be fixed in mineflayer to involve correct calculations when this changes as this is very important when mining straight down // todo this should be fixed in mineflayer to involve correct calculations when this changes as this is very important when mining straight down @@ -219,8 +243,10 @@ class WorldInteraction { this.buttons[0] ) { if (cursorBlockDiggable - && (!this.lastButtons[0] || (cursorChanged && Date.now() - (this.lastDigged ?? 0) > 100) || onGround !== this.prevOnGround) + && (!this.lastButtons[0] || ((cursorChanged || (this.lastDugBlock && !this.lastDugBlock.equals(cursorBlock!.position))) && Date.now() - (this.lastDigged ?? 0) > 300) || onGround !== this.prevOnGround) && onGround) { + this.lastDugBlock = null + this.debugStatus = 'breaking' this.currentDigTime = bot.digTime(cursorBlockDiggable) this.breakStartTime = performance.now() const vecArray = [new Vec3(0, -1, 0), new Vec3(0, 1, 0), new Vec3(0, 0, -1), new Vec3(0, 0, 1), new Vec3(-1, 0, 0), new Vec3(1, 0, 0)] @@ -331,4 +357,6 @@ export const getEntityCursor = () => { return entity } -export default new WorldInteraction() +const worldInteraction = new WorldInteraction() +globalThis.worldInteraction = worldInteraction +export default worldInteraction From 1c78fd1d51ce383e918cceb7c7064efa78572493 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 18 Apr 2024 11:52:36 +0300 Subject: [PATCH 0011/1074] do the check earlier for message --- src/index.ts | 5 +++-- src/soundSystem.ts | 20 +++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index e68ca4f5..8f55f8c9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -27,7 +27,7 @@ import 'core-js/features/array/at' import 'core-js/features/promise/with-resolvers' import itemsPng from 'prismarine-viewer/public/textures/items.png' -import { initWithRenderer, statsEnd, statsStart } from './topRightStats' +import { initWithRenderer } from './topRightStats' import PrismarineBlock from 'prismarine-block' import { options, watchValue } from './optionsStorage' @@ -90,7 +90,7 @@ import { watchFov } from './rendererUtils' import { loadInMemorySave } from './react/SingleplayerProvider' // side effects -import { downloadSoundsIfNeeded } from './soundSystem' +import { downloadSoundsIfNeeded, earlyCheck as earlySoundsMapCheck } from './soundSystem' import { ua } from './react/utils' import { handleMovementStickDelta, joystickPointer } from './react/TouchAreasControls' import { possiblyHandleStateVariable } from './googledrive' @@ -379,6 +379,7 @@ async function connect (connectOptions: { } } viewer.setVersion(version) + earlySoundsMapCheck() } const downloadVersion = connectOptions.botVersion || (singleplayer ? serverOptions.version : undefined) diff --git a/src/soundSystem.ts b/src/soundSystem.ts index e48f8e60..254b5f5d 100644 --- a/src/soundSystem.ts +++ b/src/soundSystem.ts @@ -20,13 +20,7 @@ subscribeKey(miscUiState, 'gameLoaded', async () => { // todo also use major versioned hardcoded sounds const soundsMap = allSoundsMap[bot.version] - if (!soundsMap) { - console.warn('No sounds map for version', bot.version, 'supported versions are', Object.keys(allSoundsMap).join(', ')) - showNotification('Warning', 'No sounds map for version ' + bot.version) - return - } - - if (!miscUiState.gameLoaded || !soundsMap) { + if (!soundsMap || !miscUiState.gameLoaded || !soundsMap) { return } @@ -221,6 +215,18 @@ subscribeKey(miscUiState, 'gameLoaded', async () => { // }) }) +export const earlyCheck = () => { + const allSoundsMap = window.allSoundsMap as Record> + + // todo also use major versioned hardcoded sounds + const soundsMap = allSoundsMap[bot.version] + + if (!soundsMap) { + console.warn('No sounds map for version', bot.version, 'supported versions are', Object.keys(allSoundsMap).join(', ')) + showNotification('Warning', 'No sounds map for version ' + bot.version) + } +} + const getVersionedSound = (version: string, item: string, itemsMapSortedEntries: Array<[string, string[]]>) => { const verNumber = versionToNumber(version) for (const [itemsVer, items] of itemsMapSortedEntries) { From 4fb2de503be7c62e9a58428f87a1ee80847189d3 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 19 Apr 2024 23:46:55 +0300 Subject: [PATCH 0012/1074] fix entities render & crash --- prismarine-viewer/viewer/lib/entity/EntityMesh.js | 4 +++- src/index.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/prismarine-viewer/viewer/lib/entity/EntityMesh.js b/prismarine-viewer/viewer/lib/entity/EntityMesh.js index 6acb665a..8f8812d0 100644 --- a/prismarine-viewer/viewer/lib/entity/EntityMesh.js +++ b/prismarine-viewer/viewer/lib/entity/EntityMesh.js @@ -324,9 +324,10 @@ export class EntityMesh { const material = new THREE.MeshBasicMaterial({ map: texture, transparent: true, + alphaTest: 0.1 }) const obj = objLoader.parse(externalModels[type]) - this.mesh = obj + if (type === 'boat') obj.position.y = -1 // todo, should not be hardcoded obj.traverse((child) => { if (child instanceof THREE.Mesh) { child.material = material @@ -339,6 +340,7 @@ export class EntityMesh { } } }) + this.mesh = obj return } diff --git a/src/index.ts b/src/index.ts index 8f55f8c9..10090dc7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -379,7 +379,6 @@ async function connect (connectOptions: { } } viewer.setVersion(version) - earlySoundsMapCheck() } const downloadVersion = connectOptions.botVersion || (singleplayer ? serverOptions.version : undefined) @@ -457,6 +456,7 @@ async function connect (connectOptions: { } }) as unknown as typeof __type_bot window.bot = bot + earlySoundsMapCheck() if (singleplayer || p2pMultiplayer) { // in case of p2pMultiplayer there is still flying-squid on the host side const _supportFeature = bot.supportFeature From 0acaa652a3187704096726b60bfc0ff0fbac6b33 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 13:16:36 +0300 Subject: [PATCH 0013/1074] big worlds refactor with more scalable api, which allows hmr workers fix: better free up ram after world unload & create meshers only when needed feat: add low ram setting, which makes chunks load performance ~4x worse --- README.MD | 7 ++ prismarine-viewer/tsconfig.json | 15 ++-- prismarine-viewer/viewer/lib/mesher/mesher.ts | 21 +++-- prismarine-viewer/viewer/lib/mesher/models.ts | 4 +- .../viewer/lib/mesher/test/mesherTester.ts | 4 +- prismarine-viewer/viewer/lib/mesher/world.ts | 12 +-- prismarine-viewer/viewer/lib/viewer.ts | 18 ++-- .../viewer/lib/worldDataEmitter.ts | 8 +- .../viewer/lib/worldrendererCommon.ts | 83 ++++++++++++++----- .../viewer/lib/worldrendererThree.ts | 15 ++-- src/index.ts | 2 +- src/optionsGuiScheme.tsx | 37 ++++++--- src/optionsStorage.ts | 1 + src/react/OptionsItems.tsx | 23 ++++- src/soundSystem.ts | 26 +++++- src/texturePack.ts | 2 +- src/watchOptions.ts | 16 ++-- tsconfig.json | 1 + 18 files changed, 203 insertions(+), 92 deletions(-) diff --git a/README.MD b/README.MD index 4431fe03..7a93ce7e 100644 --- a/README.MD +++ b/README.MD @@ -19,6 +19,13 @@ You can try this out at [mcraft.fun](https://mcraft.fun/), [pcm.gg](https://pcm. - Resource pack support - even even more! +### Recommended Settings + +- Controls -> **Raw Input** -> **On** - This will make the controls more precise +- Controls -> **Touch Controls Type** -> **Joystick** +- Controls -> **Auto Full Screen** -> **On** - To avoid ctrl+w issue +- Interface -> **Chat Select** -> **On** - To select chat messages + ### World Loading Zip files and folders are supported. Just drag and drop them into the browser window. You can open folders in readonly and read-write mode. New chunks may be generated incorrectly for now. diff --git a/prismarine-viewer/tsconfig.json b/prismarine-viewer/tsconfig.json index 1cf48c6e..b6e39df3 100644 --- a/prismarine-viewer/tsconfig.json +++ b/prismarine-viewer/tsconfig.json @@ -1,9 +1,10 @@ { - "compilerOptions": { - "module": "commonjs", - "strictNullChecks": true - }, - "files": [ - "index.d.ts" - ] + "compilerOptions": { + "module": "commonjs", + "strictNullChecks": true, + "experimentalDecorators": true + }, + "files": [ + "index.d.ts" + ] } diff --git a/prismarine-viewer/viewer/lib/mesher/mesher.ts b/prismarine-viewer/viewer/lib/mesher/mesher.ts index 28859a3e..0bcf7250 100644 --- a/prismarine-viewer/viewer/lib/mesher/mesher.ts +++ b/prismarine-viewer/viewer/lib/mesher/mesher.ts @@ -1,6 +1,6 @@ import { World } from './world' import { Vec3 } from 'vec3' -import { getSectionGeometry, setRendererData } from './models' +import { getSectionGeometry, setBlockStatesData } from './models' if (module.require) { // If we are in a node environement, we need to fake some env variables @@ -39,7 +39,8 @@ function setSectionDirty (pos, value = true) { } const softCleanup = () => { - world.blockCache = {} + // clean block cache and loaded chunks + world = new World(world.config.version) } self.onmessage = ({ data }) => { @@ -47,16 +48,18 @@ self.onmessage = ({ data }) => { if (data.type === 'mcData') { globalVar.mcData = data.mcData - world = new World(data.version) - } else if (data.type === 'rendererData') { - setRendererData(data.json/* , data.textureSize */) - world.outputFormat = data.outputFormat ?? world.outputFormat + } + + if (data.config) { + world ??= new World(data.config.version) + world.config = {...world.config, ...data.config} + } + + if (data.type === 'mesherData') { + setBlockStatesData(data.json) blockStatesReady = true } else if (data.type === 'dirty') { const loc = new Vec3(data.x, data.y, data.z) - world.skyLight = data.skyLight - world.smoothLighting = data.smoothLighting - world.enableLighting = data.enableLighting setSectionDirty(loc, data.value) } else if (data.type === 'chunk') { world.addColumn(data.x, data.z, data.chunk) diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index e9327621..29b4edb5 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -386,7 +386,7 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr const corner = world.getBlock(cursor.offset(...cornerDir)) let cornerLightResult = 15 - if (world.smoothLighting) { + if (world.config.smoothLighting) { const side1Light = world.getLight(cursor.plus(new Vec3(...side1Dir)), true) const side2Light = world.getLight(cursor.plus(new Vec3(...side2Dir)), true) const cornerLight = world.getLight(cursor.plus(new Vec3(...cornerDir)), true) @@ -605,7 +605,7 @@ function getModelVariants (block: import('prismarine-block').Block) { return [] } -export const setRendererData = (_blockStates: BlockStatesOutput | null, _needTiles = false) => { +export const setBlockStatesData = (_blockStates: BlockStatesOutput | null, _needTiles = false) => { blockStates = _blockStates! needTiles = _needTiles } diff --git a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts index 15ec165b..21c5d129 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts @@ -1,4 +1,4 @@ -import { setRendererData, getSectionGeometry } from '../models' +import { setBlockStatesData, getSectionGeometry } from '../models' import { World as MesherWorld } from '../world' import ChunkLoader from 'prismarine-chunk' import { Vec3 } from 'vec3' @@ -30,7 +30,7 @@ export const setup = (version, initialBlocks: [number[], string][]) => { } } - setRendererData(blockStates, true) + setBlockStatesData(blockStates, true) mesherWorld.addColumn(0, 0, chunk1.toJson()) return { diff --git a/prismarine-viewer/viewer/lib/mesher/world.ts b/prismarine-viewer/viewer/lib/mesher/world.ts index af9d3d9f..50616f82 100644 --- a/prismarine-viewer/viewer/lib/mesher/world.ts +++ b/prismarine-viewer/viewer/lib/mesher/world.ts @@ -3,6 +3,7 @@ import mcData from 'minecraft-data' import { Block } from "prismarine-block" import { Vec3 } from 'vec3' import moreBlockDataGeneratedJson from '../moreBlockDataGenerated.json' +import { defaultMesherConfig } from './shared' const ignoreAoBlocks = Object.keys(moreBlockDataGeneratedJson.noOcclusions) @@ -24,10 +25,7 @@ export type WorldBlock = Block & { export class World { - enableLighting = true - skyLight = 15 - smoothLighting = true - outputFormat = 'threeJs' as 'threeJs' | 'webgl' + config = defaultMesherConfig Chunk: typeof import('prismarine-chunk/types/index').PCChunk columns = {} as { [key: string]: import('prismarine-chunk/types/index').PCChunk } blockCache = {} @@ -36,10 +34,12 @@ export class World { constructor(version) { this.Chunk = Chunks(version) as any this.biomeCache = mcData(version).biomes + this.config.version = version } getLight (pos: Vec3, isNeighbor = false) { - if (!this.enableLighting) return 15 + const { enableLighting, skyLight } = this.config + if (!enableLighting) return 15 // const key = `${pos.x},${pos.y},${pos.z}` // if (lightsCache.has(key)) return lightsCache.get(key) const column = this.getColumnByPos(pos) @@ -48,7 +48,7 @@ export class World { 15, Math.max( column.getBlockLight(posInChunk(pos)), - Math.min(this.skyLight, column.getSkyLight(posInChunk(pos))) + Math.min(skyLight, column.getSkyLight(posInChunk(pos))) ) + 2 ) // lightsCache.set(key, result) diff --git a/prismarine-viewer/viewer/lib/viewer.ts b/prismarine-viewer/viewer/lib/viewer.ts index 85c15719..9097c7ec 100644 --- a/prismarine-viewer/viewer/lib/viewer.ts +++ b/prismarine-viewer/viewer/lib/viewer.ts @@ -6,7 +6,7 @@ import { getVersion } from './version' import EventEmitter from 'events' import { WorldRendererThree } from './worldrendererThree' import { generateSpiralMatrix } from 'flying-squid/dist/utils' -import { WorldRendererCommon } from './worldrendererCommon' +import { WorldRendererCommon, WorldRendererConfig, defaultWorldRendererConfig } from './worldrendererCommon' export class Viewer { scene: THREE.Scene @@ -19,13 +19,13 @@ export class Viewer { domElement: HTMLCanvasElement playerHeight = 1.62 isSneaking = false - version: string + threeJsWorld: WorldRendererThree cameraObjectOverride?: THREE.Object3D // for xr audioListener: THREE.AudioListener renderingUntilNoUpdates = false processEntityOverrides = (e, overrides) => overrides - constructor(public renderer: THREE.WebGLRenderer, numWorkers?: number) { + constructor(public renderer: THREE.WebGLRenderer, worldConfig = defaultWorldRendererConfig) { // https://discourse.threejs.org/t/updates-to-color-management-in-three-js-r152/50791 THREE.ColorManagement.enabled = false renderer.outputColorSpace = THREE.LinearSRGBColorSpace @@ -33,13 +33,18 @@ export class Viewer { this.scene = new THREE.Scene() this.scene.matrixAutoUpdate = false // for perf this.resetScene() - this.world = new WorldRendererThree(this.scene, this.renderer, this.camera, numWorkers) + this.threeJsWorld = new WorldRendererThree(this.scene, this.renderer, this.camera, worldConfig) + this.setWorld() this.entities = new Entities(this.scene) // this.primitives = new Primitives(this.scene, this.camera) this.domElement = renderer.domElement } + setWorld () { + this.world = this.threeJsWorld + } + resetScene () { this.scene.background = new THREE.Color('lightblue') @@ -67,7 +72,6 @@ export class Viewer { setVersion (userVersion: string) { const texturesVersion = getVersion(userVersion) console.log('[viewer] Using version:', userVersion, 'textures:', texturesVersion) - this.version = userVersion this.world.setVersion(userVersion, texturesVersion) this.entities.clear() // this.primitives.clear() @@ -187,8 +191,8 @@ export class Viewer { skyLight = ((timeOfDay - 12000) / 6000) * 15 } - if (this.world.skyLight === skyLight) return - this.world.skyLight = skyLight + if (this.world.mesherConfig.skyLight === skyLight) return + this.world.mesherConfig.skyLight = skyLight ; (this.world as WorldRendererThree).rerenderAllChunks?.() }) diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index cfcee0e4..ed53847d 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -151,6 +151,13 @@ export class WorldDataEmitter extends EventEmitter { } } + unloadAllChunks () { + for (const coords of Object.keys(this.loadedChunks)) { + const [x, z] = coords.split(',').map(Number) + this.unloadChunk({ x, z }) + } + } + unloadChunk (pos: ChunkPos) { this.emitter.emit('unloadChunk', { x: pos.x, z: pos.z }) delete this.loadedChunks[`${pos.x},${pos.z}`] @@ -172,7 +179,6 @@ export class WorldDataEmitter extends EventEmitter { chunksToUnload.push(p) } } - // todo @sa2urami console.log('unloading', chunksToUnload.length, 'total now', Object.keys(this.loadedChunks).length) for (const p of chunksToUnload) { this.unloadChunk(p) diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index 427bc446..151b2679 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -7,21 +7,35 @@ import mcDataRaw from 'minecraft-data/data.js' // handled correctly in esbuild p import { dynamicMcDataFiles } from '../../buildMesherConfig.mjs' import { toMajor } from './version.js' import { chunkPos } from './simpleUtils' +import { defaultMesherConfig } from './mesher/shared' +import { buildCleanupDecorator } from './cleanupDecorator' function mod (x, n) { return ((x % n) + n) % n } +export const worldCleanup = buildCleanupDecorator('resetWorld') + +export const defaultWorldRendererConfig = { + showChunkBorders: false, + numWorkers: 4 +} + +export type WorldRendererConfig = typeof defaultWorldRendererConfig + export abstract class WorldRendererCommon { worldConfig = { minY: 0, worldHeight: 256 } // todo @sa2urami set alphaTest back to 0.1 and instead properly sort transparent and solid objects (needs to be done in worker too) material = new THREE.MeshLambertMaterial({ vertexColors: true, transparent: true, alphaTest: 0.5 }) - showChunkBorders = false + @worldCleanup() active = false version = undefined as string | undefined + @worldCleanup() loadedChunks = {} as Record + @worldCleanup() finishedChunks = {} as Record + @worldCleanup() sectionsOutstanding = new Map() renderUpdateEmitter = new EventEmitter() customBlockStatesData = undefined as any @@ -37,15 +51,21 @@ export abstract class WorldRendererCommon texturesVersion?: string viewDistance = -1 chunksLength = 0 - skyLight = 15 - smoothLighting = true - enableLighting = true + @worldCleanup() allChunksFinished = false handleResize = () => { } + mesherConfig = defaultMesherConfig abstract outputFormat: 'threeJs' | 'webgl' - constructor(numWorkers: number) { + constructor (public config: WorldRendererConfig) { + // this.initWorkers(1) // preload script on page load + this.snapshotInitialValues() + } + + snapshotInitialValues() {} + + initWorkers(numWorkers = this.config.numWorkers) { // init workers for (let i = 0; i < numWorkers; i++) { // Node environment needs an absolute path, but browser needs the url of the file @@ -127,32 +147,38 @@ export abstract class WorldRendererCommon abstract updateShowChunksBorder (value: boolean): void resetWorld () { - this.active = false - this.loadedChunks = {} - this.sectionsOutstanding = new Map() - this.finishedChunks = {} - this.allChunksFinished = false + // destroy workers for (const worker of this.workers) { - worker.postMessage({ type: 'reset' }) + worker.terminate() } + this.workers = [] } + + // new game load happens here setVersion (version, texturesVersion = version) { this.version = version this.texturesVersion = texturesVersion this.resetWorld() + this.initWorkers() this.active = true + this.mesherConfig.outputFormat = this.outputFormat + this.mesherConfig.version = this.version! - const allMcData = mcDataRaw.pc[this.version] ?? mcDataRaw.pc[toMajor(this.version)] - for (const worker of this.workers) { - const mcData = Object.fromEntries(Object.entries(allMcData).filter(([key]) => dynamicMcDataFiles.includes(key))) - mcData.version = JSON.parse(JSON.stringify(mcData.version)) - worker.postMessage({ type: 'mcData', mcData, version: this.version }) - } - + this.sendMesherMcData() this.updateTexturesData() } + sendMesherMcData () { + const allMcData = mcDataRaw.pc[this.version] ?? mcDataRaw.pc[toMajor(this.version)] + const mcData = Object.fromEntries(Object.entries(allMcData).filter(([key]) => dynamicMcDataFiles.includes(key))) + mcData.version = JSON.parse(JSON.stringify(mcData.version)) + + for (const worker of this.workers) { + worker.postMessage({ type: 'mcData', mcData, config: this.mesherConfig }) + } + } + updateTexturesData () { loadTexture(this.customTexturesDataUrl || `textures/${this.texturesVersion}.png`, (texture: import('three').Texture) => { texture.magFilter = THREE.NearestFilter @@ -166,15 +192,20 @@ export abstract class WorldRendererCommon if (this.customBlockStatesData) return resolve(this.customBlockStatesData) return loadJSON(`/blocksStates/${this.texturesVersion}.json`, (data) => { this.downloadedBlockStatesData = data - // todo this.renderUpdateEmitter.emit('blockStatesDownloaded') resolve(data) }) }) } loadBlockStates().then((blockStates) => { + this.mesherConfig.textureSize = this.material.map!.image.width + for (const worker of this.workers) { - worker.postMessage({ type: 'rendererData', json: blockStates, textureSize: this.material.map!.image.width, outputFormat: this.outputFormat }) + worker.postMessage({ + type: 'mesherData', + json: blockStates, + config: this.mesherConfig, + }) } }) }) @@ -182,6 +213,7 @@ export abstract class WorldRendererCommon } addColumn (x, z, chunk) { + if (this.workers.length === 0) throw new Error('workers not initialized yet') this.initialChunksLoad = false this.loadedChunks[`${x},${z}`] = true for (const worker of this.workers) { @@ -224,7 +256,7 @@ export abstract class WorldRendererCommon if (this.viewDistance === -1) throw new Error('viewDistance not set') this.allChunksFinished = false const distance = this.getDistance(pos) - if (distance[0] > this.viewDistance || distance[1] > this.viewDistance) return + if (!this.workers.length || distance[0] > this.viewDistance || distance[1] > this.viewDistance) return const key = `${Math.floor(pos.x / 16) * 16},${Math.floor(pos.y / 16) * 16},${Math.floor(pos.z / 16) * 16}` // if (this.sectionsOutstanding.has(key)) return this.renderUpdateEmitter.emit('dirty', pos, value) @@ -233,7 +265,14 @@ export abstract class WorldRendererCommon // is always dispatched to the same worker const hash = mod(Math.floor(pos.x / 16) + Math.floor(pos.y / 16) + Math.floor(pos.z / 16), this.workers.length) this.sectionsOutstanding.set(key, (this.sectionsOutstanding.get(key) ?? 0) + 1) - this.workers[hash].postMessage({ type: 'dirty', x: pos.x, y: pos.y, z: pos.z, value, skyLight: this.skyLight, smoothLighting: this.smoothLighting, enableLighting: this.enableLighting }) + this.workers[hash].postMessage({ + type: 'dirty', + x: pos.x, + y: pos.y, + z: pos.z, + value, + config: this.mesherConfig, + }) } // Listen for chunk rendering updates emitted if a worker finished a render and resolve if the number diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 05d9a76f..364df12a 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -5,19 +5,14 @@ import { dispose3 } from './dispose' import PrismarineChatLoader from 'prismarine-chat' import { renderSign } from '../sign-renderer/' import { chunkPos, sectionPos } from './simpleUtils' -import { WorldRendererCommon } from './worldrendererCommon' +import { WorldRendererCommon, WorldRendererConfig } from './worldrendererCommon' import * as tweenJs from '@tweenjs/tween.js' import { BloomPass, RenderPass, UnrealBloomPass, EffectComposer, WaterPass, GlitchPass } from 'three-stdlib' -function mod (x, n) { - return ((x % n) + n) % n -} - export class WorldRendererThree extends WorldRendererCommon { outputFormat = 'threeJs' as const blockEntities = {} sectionObjects: Record = {} - showChunkBorders = false chunkTextures = new Map() signsCache = new Map() @@ -25,8 +20,8 @@ export class WorldRendererThree extends WorldRendererCommon { return Object.values(this.sectionObjects).reduce((acc, obj) => acc + (obj as any).tilesCount, 0) } - constructor(public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public camera: THREE.PerspectiveCamera, numWorkers = 4) { - super(numWorkers) + constructor(public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public camera: THREE.PerspectiveCamera, public config: WorldRendererConfig) { + super(config) } /** @@ -94,7 +89,7 @@ export class WorldRendererThree extends WorldRendererCommon { object.name = 'chunk' //@ts-ignore object.tilesCount = data.geometry.positions.length / 3 / 4 - if (!this.showChunkBorders) { + if (!this.config.showChunkBorders) { boxHelper.visible = false } // should not compute it once @@ -198,7 +193,7 @@ export class WorldRendererThree extends WorldRendererCommon { } updateShowChunksBorder (value: boolean) { - this.showChunkBorders = value + this.config.showChunkBorders = value for (const object of Object.values(this.sectionObjects)) { for (const child of object.children) { if (child.name === 'helper') { diff --git a/src/index.ts b/src/index.ts index 10090dc7..88eda6a1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -135,7 +135,7 @@ if (isFirefox) { } // Create viewer -const viewer: import('prismarine-viewer/viewer/lib/viewer').Viewer = new Viewer(renderer, options.numWorkers) +const viewer: import('prismarine-viewer/viewer/lib/viewer').Viewer = new Viewer(renderer) window.viewer = viewer new THREE.TextureLoader().load(itemsPng, (texture) => { viewer.entities.itemsTexture = texture diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index f1ac35ca..d80a9ebe 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -53,7 +53,11 @@ export const guiOptionsScheme: { smoothLighting: {}, newVersionsLighting: { text: 'Lighting in newer versions', - } + }, + lowMemoryMode: { + text: 'Low Memory Mode', + enableWarning: 'Enabling it will make chunks load ~4x slower' + }, }, ], main: [ @@ -175,6 +179,9 @@ export const guiOptionsScheme: { ], controls: [ { + custom () { + return Keyboard & Mouse + }, // keybindings mouseSensX: {}, mouseSensY: { @@ -188,9 +195,6 @@ export const guiOptionsScheme: { // eslint-disable-next-line no-extra-boolean-cast disabledReason: Boolean(document.documentElement.requestPointerLock) ? undefined : 'Your browser does not support pointer lock.', }, - alwaysShowMobileControls: { - text: 'Always Mobile Controls', - }, autoFullScreen: { tooltip: 'Auto Fullscreen allows you to use Ctrl+W and Escape having to wait/click on screen again.', disabledReason: navigator['keyboard'] ? undefined : 'Your browser doesn\'t support keyboard lock API' @@ -198,6 +202,14 @@ export const guiOptionsScheme: { autoExitFullscreen: { tooltip: 'Exit fullscreen on escape (pause menu open). But note you can always do it with F11.', }, + }, + { + custom () { + return Touch Controls + }, + alwaysShowMobileControls: { + text: 'Always Mobile Controls', + }, touchButtonsSize: { min: 40 }, @@ -211,13 +223,6 @@ export const guiOptionsScheme: { touchControlsType: { values: [['classic', 'Classic'], ['joystick-buttons', 'New']], }, - autoJump: { - values: [ - 'always', - 'auto', - 'never' - ], - }, }, { custom () { @@ -226,6 +231,16 @@ export const guiOptionsScheme: { }, }, { + custom () { + return Auto Jump + }, + autoJump: { + values: [ + 'always', + 'auto', + 'never' + ], + }, autoParkour: {}, } ], diff --git a/src/optionsStorage.ts b/src/optionsStorage.ts index af284b62..559740b6 100644 --- a/src/optionsStorage.ts +++ b/src/optionsStorage.ts @@ -57,6 +57,7 @@ const defaultOptions = { unimplementedContainers: false, dayCycleAndLighting: true, loadPlayerSkins: true, + lowMemoryMode: false, // antiAliasing: false, showChunkBorders: false, // todo rename option diff --git a/src/react/OptionsItems.tsx b/src/react/OptionsItems.tsx index 9351d66b..5dd31923 100644 --- a/src/react/OptionsItems.tsx +++ b/src/react/OptionsItems.tsx @@ -6,12 +6,15 @@ import { options, qsOptions } from '../optionsStorage' import Button from './Button' import Slider from './Slider' import Screen from './Screen' +import { showOptionsModal } from './SelectOption' type GeneralItem = { id?: string text?: string, disabledReason?: string, tooltip?: string + // description?: string + enableWarning?: string willHaveNoEffect?: boolean values?: Array } @@ -56,7 +59,11 @@ export const OptionButton = ({ item }: { item: Extract { + onClick={async () => { + if (item.enableWarning && !options[item.id!]) { + const result = await showOptionsModal(item.enableWarning, ['Enable']) + if (!result) return + } const { values } = item if (values) { const getOptionValue = (arrItem) => { @@ -108,9 +115,17 @@ const RenderOption = ({ item }: { item: OptionMeta }) => { item.text ??= titleCase(noCase(item.id)) } - if (item.type === 'toggle') return - if (item.type === 'slider') return - if (item.type === 'element') return + let baseElement = null as React.ReactNode | null + if (item.type === 'toggle') baseElement = + if (item.type === 'slider') baseElement = + if (item.type === 'element') baseElement = + return baseElement + // if (!item.description && item.type === 'element') return baseElement + + // return
+ // {baseElement} + // {item.description &&
{item.description}
} + //
} interface Props { diff --git a/src/soundSystem.ts b/src/soundSystem.ts index 254b5f5d..a2cc1f70 100644 --- a/src/soundSystem.ts +++ b/src/soundSystem.ts @@ -8,10 +8,15 @@ import { options } from './optionsStorage' import { loadOrPlaySound } from './basicSounds' import { showNotification } from './react/NotificationProvider' +const globalObject = window as { + allSoundsMap?: Record>, + allSoundsVersionedMap?: Record, +} + subscribeKey(miscUiState, 'gameLoaded', async () => { if (!miscUiState.gameLoaded) return const soundsLegacyMap = window.allSoundsVersionedMap as Record - const allSoundsMap = window.allSoundsMap as Record> + const { allSoundsMap } = globalObject const allSoundsMeta = window.allSoundsMeta as { format: string, baseUrl: string } if (!allSoundsMap) { return @@ -115,7 +120,7 @@ subscribeKey(miscUiState, 'gameLoaded', async () => { } const getStepSound = (blockUnder: Block) => { - // const soundsMap = window.allSoundsMap?.[bot.version] + // const soundsMap = globalObject.allSoundsMap?.[bot.version] // if (!soundsMap) return // let soundResult = 'block.stone.step' // for (const x of Object.keys(soundsMap).map(n => n.split(';')[1])) { @@ -215,8 +220,21 @@ subscribeKey(miscUiState, 'gameLoaded', async () => { // }) }) +// todo +// const music = { +// activated: false, +// playing: '', +// activate () { +// const gameMusic = Object.entries(globalObject.allSoundsMap?.[bot.version] ?? {}).find(([id, sound]) => sound.includes('music.game')) +// if (!gameMusic) return +// const soundPath = gameMusic[0].split(';')[1] +// const next = () => {} +// } +// } + export const earlyCheck = () => { - const allSoundsMap = window.allSoundsMap as Record> + const { allSoundsMap } = globalObject + if (!allSoundsMap) return // todo also use major versioned hardcoded sounds const soundsMap = allSoundsMap[bot.version] @@ -239,7 +257,7 @@ const getVersionedSound = (version: string, item: string, itemsMapSortedEntries: } export const downloadSoundsIfNeeded = async () => { - if (!window.allSoundsMap) { + if (!globalObject.allSoundsMap) { try { await loadScript('./sounds.js') } catch (err) { diff --git a/src/texturePack.ts b/src/texturePack.ts index 6ace186b..8c251b49 100644 --- a/src/texturePack.ts +++ b/src/texturePack.ts @@ -93,7 +93,7 @@ export const completeTexturePackInstall = async (name?: string) => { await fs.promises.writeFile(join(texturePackBasePath, 'name.txt'), name ?? '??', 'utf8') if (viewer?.world.active) { - await genTexturePackTextures(viewer.version) + await genTexturePackTextures(viewer.world.version!) } setLoadingScreenStatus(undefined) showNotification('Texturepack installed') diff --git a/src/watchOptions.ts b/src/watchOptions.ts index cfed6afa..4380c6f3 100644 --- a/src/watchOptions.ts +++ b/src/watchOptions.ts @@ -30,24 +30,30 @@ export const watchOptionsAfterViewerInit = () => { watchValue(options, o => { if (!viewer) return - viewer.world.showChunkBorders = o.showChunkBorders + viewer.world.config.showChunkBorders = o.showChunkBorders viewer.entities.setDebugMode(o.showChunkBorders ? 'basic' : 'none') }) + watchValue(options, o => { + if (!viewer) return + // todo ideally there shouldnt be this setting and we don't need to send all same chunks to all workers + viewer.world.config.numWorkers = o.lowMemoryMode ? 1 : o.numWorkers + }) + watchValue(options, o => { viewer.entities.setVisible(o.renderEntities) }) - viewer.world.smoothLighting = options.smoothLighting + viewer.world.mesherConfig.smoothLighting = options.smoothLighting subscribeKey(options, 'smoothLighting', () => { - viewer.world.smoothLighting = options.smoothLighting; + viewer.world.mesherConfig.smoothLighting = options.smoothLighting; (viewer.world as WorldRendererThree).rerenderAllChunks() }) subscribeKey(options, 'newVersionsLighting', () => { - viewer.world.enableLighting = !bot.supportFeature('blockStateId') || options.newVersionsLighting; + viewer.world.mesherConfig.enableLighting = !bot.supportFeature('blockStateId') || options.newVersionsLighting; (viewer.world as WorldRendererThree).rerenderAllChunks() }) customEvents.on('gameLoaded', () => { - viewer.world.enableLighting = !bot.supportFeature('blockStateId') || options.newVersionsLighting + viewer.world.mesherConfig.enableLighting = !bot.supportFeature('blockStateId') || options.newVersionsLighting }) } diff --git a/tsconfig.json b/tsconfig.json index 47a363c3..5d018a46 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,7 @@ "forceConsistentCasingInFileNames": true, "useUnknownInCatchVariables": false, "skipLibCheck": true, + "experimentalDecorators": true, // this the only options that allows smooth transition from js to ts (by not dropping types from js files) // however might need to consider includeing *only needed libraries* instead of using this "maxNodeModuleJsDepth": 1, From d17e1b2acbbc565d7707597be9161f1dc5f5c575 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 13:22:26 +0300 Subject: [PATCH 0014/1074] make bundle smaller and debugger run faster --- .gitignore | 1 + esbuild.mjs | 2 +- package.json | 9 +++++---- pnpm-lock.yaml | 28 +++++----------------------- scripts/esbuildPlugins.mjs | 30 ++++++++++++++++++++++++++---- src/eruda.js | 3 ++- src/index.ts | 6 +++--- 7 files changed, 43 insertions(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index 665722ec..c4434877 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ dist .DS_Store .idea/ world +data*.json out *.iml .vercel diff --git a/esbuild.mjs b/esbuild.mjs index fad9047d..2e360e5d 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -39,7 +39,7 @@ const buildOptions = { // logLevel: 'debug', logLevel: 'info', platform: 'browser', - sourcemap: prod ? true : 'inline', + sourcemap: prod ? true : 'linked', outdir: 'dist', mainFields: [ 'browser', 'module', 'main' diff --git a/package.json b/package.json index 4f7a9dbb..084fbe2b 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ "build-storybook": "storybook build && node scripts/build.js moveStorybookFiles", "start-experiments": "vite --config experiments/vite.config.ts", "watch-other-workers": "echo NOT IMPLEMENTED", - "watch-worker": "node prismarine-viewer/buildMesherWorker.mjs -w", - "run-playground": "run-p watch-worker watch-other-workers playground-server watch-playground", + "watch-mesher": "node prismarine-viewer/buildMesherWorker.mjs -w", + "run-playground": "run-p watch-mesher watch-other-workers playground-server watch-playground", "run-all": "run-p start run-playground", "playground-server": "live-server --port=9090 prismarine-viewer/public", "watch-playground": "node prismarine-viewer/esbuild.mjs -w" @@ -55,7 +55,7 @@ "esbuild": "^0.19.3", "esbuild-plugin-polyfill-node": "^0.3.0", "express": "^4.18.2", - "flying-squid": "npm:@zardoy/flying-squid@^0.0.15", + "flying-squid": "npm:@zardoy/flying-squid@^0.0.17", "fs-extra": "^11.1.1", "google-drive-browserfs": "github:zardoy/browserfs#google-drive", "iconify-icon": "^1.0.8", @@ -157,5 +157,6 @@ "updateConfig": { "ignoreDependencies": [] } - } + }, + "packageManager": "pnpm@9.0.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68d89fb2..276083b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,8 +90,8 @@ importers: specifier: ^4.18.2 version: 4.18.2 flying-squid: - specifier: npm:@zardoy/flying-squid@^0.0.15 - version: /@zardoy/flying-squid@0.0.15 + specifier: npm:@zardoy/flying-squid@^0.0.17 + version: /@zardoy/flying-squid@0.0.17 fs-extra: specifier: ^11.1.1 version: 11.1.1 @@ -5629,8 +5629,8 @@ packages: tslib: 1.14.1 dev: true - /@zardoy/flying-squid@0.0.15: - resolution: {integrity: sha512-VooP9XuzNQVL3y0zlaU5wStRm1vfQIXAzVNHuvMoMgyIyOiD7A59QzVZT93GAoTyUBHTwqweXMPQftjywUy62A==} + /@zardoy/flying-squid@0.0.17: + resolution: {integrity: sha512-qGCS7aRmMflDdIN7IGLpDc0W2gUYc5OQ45KEn3XtcxwOP0Q7zyvo3mnsD5KSV3n2lyhQ4783Ov8V6J86xea0lw==} engines: {node: '>=8'} hasBin: true dependencies: @@ -5645,11 +5645,9 @@ packages: minecraft-data: 3.62.0 minecraft-protocol: github.com/zardoy/minecraft-protocol/2c14a686bfe7cbd9a5c87b629b402295ee86219f mkdirp: 2.1.6 - moment: 2.30.1 - needle: 2.9.1 node-gzip: 1.1.2 node-rsa: 1.1.1 - prismarine-chunk: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) + prismarine-chunk: github.com/zardoy/prismarine-chunk/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -11492,10 +11490,6 @@ packages: dependencies: nearley: 2.20.1 - /moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - dev: false - /moo@0.5.2: resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} @@ -11576,18 +11570,6 @@ packages: railroad-diagrams: 1.0.0 randexp: 0.4.6 - /needle@2.9.1: - resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==} - engines: {node: '>= 4.4.x'} - hasBin: true - dependencies: - debug: 3.2.7(supports-color@8.1.1) - iconv-lite: 0.4.24 - sax: 1.3.0 - transitivePeerDependencies: - - supports-color - dev: false - /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} diff --git a/scripts/esbuildPlugins.mjs b/scripts/esbuildPlugins.mjs index e5af5ec8..ddc34c18 100644 --- a/scripts/esbuildPlugins.mjs +++ b/scripts/esbuildPlugins.mjs @@ -13,8 +13,8 @@ const prod = process.argv.includes('--prod') let connectedClients = [] const watchExternal = [ - 'dist/mesher.js', - 'dist/webglRendererWorker.js' + // 'dist/mesher.js', + // 'dist/webglRendererWorker.js' ] /** @type {import('esbuild').Plugin[]} */ @@ -55,6 +55,13 @@ const plugins = [ }, () => { throw new Error('hit banned package') }) + build.onLoad({ + filter: /^prismarine-auth/, + }, () => { + return { + contents: 'module.exports = {}', + } + }) build.onResolve({ filter: /^three$/, @@ -80,11 +87,26 @@ const plugins = [ } }) + const removeNodeModulesSourcemaps = (map) => { + const doNotRemove = ['prismarine', 'mineflayer', 'flying-squid', '@jspm/core', 'minecraft'] + map.sourcesContent.forEach((_, i) => { + if (map.sources[i].includes('node_modules') && !doNotRemove.some(x => map.sources[i].includes(x))) { + map.sourcesContent[i] = null + } + }) + } + build.onEnd(async ({ metafile, outputFiles }) => { // write outputFiles //@ts-ignore for (const file of outputFiles) { - await fs.promises.writeFile(file.path, file.contents) + let contents = file.text + if (file.path.endsWith('.map') && file.text) { + const map = JSON.parse(file.text) + removeNodeModulesSourcemaps(map) + contents = JSON.stringify(map) + } + await fs.promises.writeFile(file.path, contents) } if (!prod) return // const deps = Object.entries(metafile.inputs).sort(([, a], [, b]) => b.bytes - a.bytes).map(([x, { bytes }]) => [x, filesize(bytes)]).slice(0, 5) @@ -167,7 +189,7 @@ const plugins = [ } // write metafile to disk if needed to analyze - // fs.writeFileSync('dist/meta.json', JSON.stringify(metafile, null, 2)) + fs.writeFileSync('dist/meta.json', JSON.stringify(metafile, null, 2)) /** @type {import('esbuild').OutputFile} */ //@ts-ignore diff --git a/src/eruda.js b/src/eruda.js index 61de5964..9cb11381 100644 --- a/src/eruda.js +++ b/src/eruda.js @@ -1,6 +1,7 @@ import { isMobile } from './menus/components/common' if (process.env.NODE_ENV === 'development' && isMobile()) { - require('eruda').default.init() + // can be changed to require('eruda') + import('https://cdn.skypack.dev/eruda').default.init() console.log('JS Loaded in', Date.now() - window.startLoad) } diff --git a/src/index.ts b/src/index.ts index 88eda6a1..8ee16320 100644 --- a/src/index.ts +++ b/src/index.ts @@ -51,7 +51,7 @@ import worldInteractions from './worldInteractions' import * as THREE from 'three' import MinecraftData, { versionsByMinecraftVersion } from 'minecraft-data' import debug from 'debug' -import _ from 'lodash-es' +import { defaultsDeep } from 'lodash-es' import { initVR } from './vr' import { @@ -89,7 +89,6 @@ import { fsState } from './loadSave' import { watchFov } from './rendererUtils' import { loadInMemorySave } from './react/SingleplayerProvider' -// side effects import { downloadSoundsIfNeeded, earlyCheck as earlySoundsMapCheck } from './soundSystem' import { ua } from './react/utils' import { handleMovementStickDelta, joystickPointer } from './react/TouchAreasControls' @@ -97,6 +96,7 @@ import { possiblyHandleStateVariable } from './googledrive' import flyingSquidEvents from './flyingSquidEvents' import { hideNotification, notificationProxy } from './react/NotificationProvider' import { ViewerWrapper } from 'prismarine-viewer/viewer/lib/viewerWrapper' +import './hotReload' window.debug = debug window.THREE = THREE @@ -352,7 +352,7 @@ async function connect (connectOptions: { const renderDistance = singleplayer ? renderDistanceSingleplayer : multiplayerRenderDistance let localServer try { - const serverOptions = _.defaultsDeep({}, connectOptions.serverOverrides ?? {}, options.localServerOptions, defaultServerOptions) + const serverOptions = defaultsDeep({}, connectOptions.serverOverrides ?? {}, options.localServerOptions, defaultServerOptions) Object.assign(serverOptions, connectOptions.serverOverridesFlat ?? {}) const downloadMcData = async (version: string) => { // todo expose cache From 23037705f5c50fb19fa5f23a0e3ff6cca31d4b80 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 13:22:32 +0300 Subject: [PATCH 0015/1074] up pnpm lockfile --- pnpm-lock.yaml | 19063 +++++++++++++++++++++++++++-------------------- 1 file changed, 10803 insertions(+), 8260 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 276083b7..5eb5111a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -22,10 +22,10 @@ importers: dependencies: '@dimaka/interface': specifier: 0.0.3-alpha.0 - version: 0.0.3-alpha.0(@babel/core@7.22.11)(@popperjs/core@2.11.8)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 0.0.3-alpha.0(@babel/core@7.22.11)(@popperjs/core@2.11.8)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@floating-ui/react': specifier: ^0.26.1 - version: 0.26.1(react-dom@18.2.0)(react@18.2.0) + version: 0.26.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@nxg-org/mineflayer-auto-jump': specifier: ^0.7.7 version: 0.7.7 @@ -34,7 +34,7 @@ importers: version: 1.2.1 '@react-oauth/google': specifier: ^0.12.1 - version: 0.12.1(react-dom@18.2.0)(react@18.2.0) + version: 0.12.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/gapi': specifier: ^0.0.47 version: 0.0.47 @@ -52,7 +52,7 @@ importers: version: 2.1.3 '@zardoy/react-util': specifier: ^0.2.0 - version: 0.2.0(react-dom@18.2.0)(react@18.2.0) + version: 0.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@zardoy/utils': specifier: ^0.0.11 version: 0.0.11 @@ -61,7 +61,7 @@ importers: version: 0.5.12 browserfs: specifier: github:zardoy/browserfs#build - version: github.com/zardoy/browserfs/e60ca69e74888e057a96a468afe1d62347d3f56f + version: https://codeload.github.com/zardoy/browserfs/tar.gz/e60ca69e74888e057a96a468afe1d62347d3f56f change-case: specifier: ^5.1.2 version: 5.1.2 @@ -91,13 +91,13 @@ importers: version: 4.18.2 flying-squid: specifier: npm:@zardoy/flying-squid@^0.0.17 - version: /@zardoy/flying-squid@0.0.17 + version: '@zardoy/flying-squid@0.0.17(encoding@0.1.13)' fs-extra: specifier: ^11.1.1 version: 11.1.1 google-drive-browserfs: specifier: github:zardoy/browserfs#google-drive - version: github.com/zardoy/browserfs/ab58ae8ef00e3a31db01909e365e6cb5188436e0 + version: browserfs@https://codeload.github.com/zardoy/browserfs/tar.gz/ab58ae8ef00e3a31db01909e365e6cb5188436e0 iconify-icon: specifier: ^1.0.8 version: 1.0.8 @@ -118,7 +118,7 @@ importers: version: 3.62.0 net-browserify: specifier: github:zardoy/prismarinejs-net-browserify - version: github.com/zardoy/prismarinejs-net-browserify/7d827dba61bd2f9ac9a6086fe2079a0fccadd070 + version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070 node-gzip: specifier: ^1.1.2 version: 1.1.2 @@ -130,7 +130,7 @@ importers: version: 6.1.1 prismarine-provider-anvil: specifier: github:zardoy/prismarine-provider-anvil#everything - version: github.com/zardoy/prismarine-provider-anvil/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0) + version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0) prosemirror-example-setup: specifier: ^1.2.2 version: 1.2.2 @@ -154,7 +154,7 @@ importers: version: 18.2.0(react@18.2.0) react-transition-group: specifier: ^4.4.5 - version: 4.4.5(react-dom@18.2.0)(react@18.2.0) + version: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) remark: specifier: ^15.0.1 version: 15.0.1 @@ -190,7 +190,7 @@ importers: version: 0.1.8 workbox-build: specifier: ^7.0.0 - version: 7.0.0 + version: 7.0.0(@types/babel__core@7.20.2) optionalDependencies: systeminformation: specifier: ^5.21.22 @@ -198,25 +198,25 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: ^7.4.6 - version: 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-links': specifier: ^7.4.6 - version: 7.4.6(react-dom@18.2.0)(react@18.2.0) + version: 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/blocks': specifier: ^7.4.6 - version: 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/react': specifier: ^7.4.6 - version: 7.4.6(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) '@storybook/react-vite': specifier: ^7.4.6 - version: 7.4.6(react-dom@18.2.0)(react@18.2.0)(rollup@2.79.1)(typescript@5.2.2)(vite@4.5.3) + version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) '@storybook/web-components': specifier: ^7.4.6 - version: 7.4.6(lit@2.8.0)(react-dom@18.2.0)(react@18.2.0) + version: 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/web-components-vite': specifier: ^7.4.6 - version: 7.4.6(lit@2.8.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.5.3) + version: 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) '@types/lodash-es': specifier: ^4.17.9 version: 4.17.9 @@ -264,7 +264,7 @@ importers: version: 8.50.0 eslint-config-zardoy: specifier: ^0.2.17 - version: 0.2.17(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.50.0)(typescript@5.2.2) + version: 0.2.17(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0)(typescript@5.2.2) events: specifier: ^3.3.0 version: 3.3.0 @@ -282,10 +282,10 @@ importers: version: 1.0.0 minecraft-inventory-gui: specifier: github:zardoy/minecraft-inventory-gui#next - version: github.com/zardoy/minecraft-inventory-gui/6685fa4a10590a5decef90a454ba0b9e045e7737(@types/react@18.2.20)(react@18.2.0) + version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5554c7ab0a74bce52aa5f5f04a48eb8d3b9ac65c(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:PrismarineJS/mineflayer - version: github.com/PrismarineJS/mineflayer/195b3cbd70a110080af9b77a4659991c5d9e484a + version: https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f(encoding@0.1.13) mineflayer-pathfinder: specifier: ^2.4.4 version: 2.4.4 @@ -306,13 +306,13 @@ importers: version: link:prismarine-viewer process: specifier: github:PrismarineJS/node-process - version: github.com/PrismarineJS/node-process/380d0b4f4c86f1b65b216c311bf00431f314e88e + version: https://codeload.github.com/PrismarineJS/node-process/tar.gz/380d0b4f4c86f1b65b216c311bf00431f314e88e rimraf: specifier: ^5.0.1 version: 5.0.1 storybook: specifier: ^7.4.6 - version: 7.4.6 + version: 7.4.6(encoding@0.1.13) stream-browserify: specifier: ^3.0.0 version: 3.0.0 @@ -330,7 +330,7 @@ importers: version: 4.0.2(react@18.2.0)(typescript@5.2.2) vitest: specifier: ^0.34.6 - version: 0.34.6 + version: 0.34.6(terser@5.19.2) yaml: specifier: ^2.3.2 version: 2.3.2 @@ -348,7 +348,7 @@ importers: version: 6.0.3 canvas: specifier: ^2.11.2 - version: 2.11.2 + version: 2.11.2(encoding@0.1.13) filesize: specifier: ^10.0.12 version: 10.0.12 @@ -363,16 +363,16 @@ importers: version: 8.2.3 minecraft-wrap: specifier: ^1.3.0 - version: 1.5.1 + version: 1.5.1(encoding@0.1.13) minecrafthawkeye: specifier: ^1.3.6 version: 1.3.6 prismarine-block: specifier: github:zardoy/prismarine-block#next-era - version: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chunk: specifier: github:zardoy/prismarine-chunk - version: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) + version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) prismarine-schematic: specifier: ^1.2.0 version: 1.2.3 @@ -403,73 +403,8274 @@ importers: optionalDependencies: node-canvas-webgl: specifier: ^0.3.0 - version: 0.3.0 + version: 0.3.0(encoding@0.1.13) prismarine-viewer/viewer/sign-renderer: dependencies: vite: specifier: ^4.4.9 - version: 4.4.10(@types/node@20.8.0) + version: 4.4.10(@types/node@20.12.7)(terser@5.19.2) packages: - /@aashutoshrathi/word-wrap@1.2.6: + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true - /@ampproject/remapping@2.2.1: + '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): + '@apideck/better-ajv-errors@0.3.6': resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' + + '@aw-web-design/x-default-browser@1.4.126': + resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} + hasBin: true + + '@azure/msal-common@14.9.0': + resolution: {integrity: sha512-yzBPRlWPnTBeixxLNI3BBIgF5/bHpbhoRVuuDBnYjCyWRavaPUsKAHUDYLqpGkBLDciA6TCc6GOxN4/S3WiSxg==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@2.7.0': + resolution: {integrity: sha512-wXD8LkUvHICeSWZydqg6o8Yvv+grlBEcmLGu+QEI4FcwFendbTEZrlSygnAXXSOCVaGAirWLchca35qrgpO6Jw==} + engines: {node: '>=16'} + + '@babel/code-frame@7.22.13': + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.22.9': + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.22.11': + resolution: {integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.22.10': + resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.22.5': + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.10': + resolution: {integrity: sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.22.10': + resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.22.11': + resolution: {integrity: sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-class-features-plugin@7.22.15': + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.22.9': + resolution: {integrity: sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.4.2': + resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-environment-visitor@7.22.20': + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-environment-visitor@7.22.5': + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.22.5': + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.22.5': + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.22.5': + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.23.0': + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.15': + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.5': + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.22.9': + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-module-transforms@7.23.0': + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.22.5': + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.22.5': + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.22.9': + resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.22.9': + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.22.6': + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.22.5': + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.20': + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.5': + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.22.15': + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.22.5': + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.22.10': + resolution: {integrity: sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.22.11': + resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.22.13': + resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.22.13': + resolution: {integrity: sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5': + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5': + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-proposal-class-properties@7.18.6': + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-optional-chaining@7.21.0': + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-export-namespace-from@7.8.3': + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-flow@7.22.5': + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.22.5': + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.22.5': + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.22.5': + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.22.5': + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.22.5': + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.22.11': + resolution: {integrity: sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.22.5': + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.22.5': + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.22.10': + resolution: {integrity: sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.22.5': + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.22.11': + resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.22.6': + resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.22.5': + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.22.10': + resolution: {integrity: sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.22.5': + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.22.5': + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dynamic-import@7.22.11': + resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.22.5': + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.22.11': + resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-flow-strip-types@7.22.5': + resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.22.5': + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.22.5': + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.22.11': + resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.22.5': + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.22.11': + resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.22.5': + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.22.5': + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.22.11': + resolution: {integrity: sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.23.0': + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.22.11': + resolution: {integrity: sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.22.5': + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.22.5': + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.22.11': + resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.22.11': + resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.22.11': + resolution: {integrity: sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.22.5': + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.22.11': + resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.22.12': + resolution: {integrity: sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.22.5': + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.22.5': + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.22.11': + resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.22.5': + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.22.5': + resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.22.5': + resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.22.10': + resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-reserved-words@7.22.5': + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.22.5': + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.22.5': + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.22.5': + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.22.5': + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.22.5': + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.22.15': + resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.22.10': + resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.22.5': + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.22.5': + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.22.5': + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.22.10': + resolution: {integrity: sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-flow@7.22.15': + resolution: {integrity: sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-typescript@7.23.0': + resolution: {integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/register@7.22.15': + resolution: {integrity: sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/regjsgen@0.8.0': + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + + '@babel/runtime@7.22.11': + resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.22.5': + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.22.11': + resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.22.11': + resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.23.0': + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + + '@base2/pretty-print-object@1.0.1': + resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': + resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==} + cpu: [arm64] + os: [darwin] + + '@cbor-extract/cbor-extract-darwin-x64@2.2.0': + resolution: {integrity: sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==} + cpu: [x64] + os: [darwin] + + '@cbor-extract/cbor-extract-linux-arm64@2.2.0': + resolution: {integrity: sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==} + cpu: [arm64] + os: [linux] + + '@cbor-extract/cbor-extract-linux-arm@2.2.0': + resolution: {integrity: sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==} + cpu: [arm] + os: [linux] + + '@cbor-extract/cbor-extract-linux-x64@2.2.0': + resolution: {integrity: sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==} + cpu: [x64] + os: [linux] + + '@cbor-extract/cbor-extract-win32-x64@2.2.0': + resolution: {integrity: sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==} + cpu: [x64] + os: [win32] + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@cypress/request@2.88.12': + resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==} + engines: {node: '>= 6'} + + '@cypress/xvfb@1.2.4': + resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + + '@dimaka/interface@0.0.3-alpha.0': + resolution: {integrity: sha512-BzRUaLk+jhC1uvcix4SXRGhw7k39pldlvwtRT0NGFsuQt1uMV9vOhGMzm3rLorVXQ7vAmqcZk3Hy8oYlXKQoDw==} + peerDependencies: + react: ^18.2.0 + + '@discoveryjs/json-ext@0.5.7': + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + + '@emotion/babel-plugin@11.11.0': + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + + '@emotion/cache@11.11.0': + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + + '@emotion/css@11.5.0': + resolution: {integrity: sha512-mqjz/3aqR9rp40M+pvwdKYWxlQK4Nj3cnNjo3Tx6SM14dSsEn7q/4W2/I7PlgG+mb27iITHugXuBIHH/QwUBVQ==} + peerDependencies: + '@babel/core': ^7.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@emotion/hash@0.9.1': + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + + '@emotion/memoize@0.8.1': + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + + '@emotion/serialize@1.1.2': + resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} + + '@emotion/sheet@1.2.2': + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + + '@emotion/unitless@0.8.1': + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + + '@emotion/use-insertion-effect-with-fallbacks@1.0.1': + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: ^18.2.0 + + '@emotion/utils@1.2.1': + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + + '@emotion/weak-memoize@0.3.1': + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + + '@esbuild/aix-ppc64@0.19.11': + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.19.11': + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.19.3': + resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.19.11': + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.19.3': + resolution: {integrity: sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.19.11': + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.19.3': + resolution: {integrity: sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.19.11': + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.19.3': + resolution: {integrity: sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.11': + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.3': + resolution: {integrity: sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.19.11': + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.19.3': + resolution: {integrity: sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.11': + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.3': + resolution: {integrity: sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.19.11': + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.19.3': + resolution: {integrity: sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.19.11': + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.19.3': + resolution: {integrity: sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.19.11': + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.19.3': + resolution: {integrity: sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.19.11': + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.19.3': + resolution: {integrity: sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.19.11': + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.19.3': + resolution: {integrity: sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.19.11': + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.19.3': + resolution: {integrity: sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.11': + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.3': + resolution: {integrity: sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.19.11': + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.19.3': + resolution: {integrity: sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.19.11': + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.19.3': + resolution: {integrity: sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.19.11': + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.19.3': + resolution: {integrity: sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.19.11': + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.19.3': + resolution: {integrity: sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.19.11': + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.19.3': + resolution: {integrity: sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.19.11': + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.19.3': + resolution: {integrity: sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.19.11': + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.19.3': + resolution: {integrity: sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.19.11': + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.19.3': + resolution: {integrity: sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.8.0': + resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.2': + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.50.0': + resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@fal-works/esbuild-plugin-global-externals@2.1.2': + resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} + + '@fastify/busboy@2.0.0': + resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} + engines: {node: '>=14'} + + '@floating-ui/core@1.5.0': + resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} + + '@floating-ui/dom@1.5.3': + resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + + '@floating-ui/react-dom@2.0.2': + resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} + peerDependencies: + react: ^18.2.0 + react-dom: '>=16.8.0' + + '@floating-ui/react@0.26.1': + resolution: {integrity: sha512-5gyJIJ2tZOPMgmZ/vEcVhdmQiy75b7LPO71sYIiDsxGcZ4hxLuygQWCuT0YXHqppt//Eese+L6t5KnX/gZ3tVA==} + peerDependencies: + react: ^18.2.0 + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.1.6': + resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@humanwhocodes/config-array@0.11.11': + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@1.2.1': + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jimp/bmp@0.10.3': + resolution: {integrity: sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/core@0.10.3': + resolution: {integrity: sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==} + + '@jimp/custom@0.10.3': + resolution: {integrity: sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==} + + '@jimp/gif@0.10.3': + resolution: {integrity: sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/jpeg@0.10.3': + resolution: {integrity: sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-blit@0.10.3': + resolution: {integrity: sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-blur@0.10.3': + resolution: {integrity: sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-circle@0.10.3': + resolution: {integrity: sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-color@0.10.3': + resolution: {integrity: sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-contain@0.10.3': + resolution: {integrity: sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + + '@jimp/plugin-cover@0.10.3': + resolution: {integrity: sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + + '@jimp/plugin-crop@0.10.3': + resolution: {integrity: sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-displace@0.10.3': + resolution: {integrity: sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-dither@0.10.3': + resolution: {integrity: sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-fisheye@0.10.3': + resolution: {integrity: sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-flip@0.10.3': + resolution: {integrity: sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-rotate': '>=0.3.5' + + '@jimp/plugin-gaussian@0.10.3': + resolution: {integrity: sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-invert@0.10.3': + resolution: {integrity: sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-mask@0.10.3': + resolution: {integrity: sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-normalize@0.10.3': + resolution: {integrity: sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-print@0.10.3': + resolution: {integrity: sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + + '@jimp/plugin-resize@0.10.3': + resolution: {integrity: sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-rotate@0.10.3': + resolution: {integrity: sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-scale@0.10.3': + resolution: {integrity: sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-shadow@0.10.3': + resolution: {integrity: sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-threshold@0.10.3': + resolution: {integrity: sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color': '>=0.8.0' + '@jimp/plugin-resize': '>=0.8.0' + + '@jimp/plugins@0.10.3': + resolution: {integrity: sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/png@0.10.3': + resolution: {integrity: sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/tiff@0.10.3': + resolution: {integrity: sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/types@0.10.3': + resolution: {integrity: sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/utils@0.10.3': + resolution: {integrity: sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==} + + '@joshwooding/vite-plugin-react-docgen-typescript@0.2.1': + resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==} + peerDependencies: + typescript: '>= 4.3.x' + vite: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@jridgewell/gen-mapping@0.3.3': + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.1': + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.1.2': + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.5': + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.19': + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + + '@jspm/core@2.0.1': + resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} + + '@juggle/resize-observer@3.3.1': + resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==} + + '@lit-labs/ssr-dom-shim@1.1.1': + resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==} + + '@lit/reactive-element@1.6.3': + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + + '@mapbox/node-pre-gyp@1.0.11': + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + + '@mdx-js/react@2.3.0': + resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} + peerDependencies: + react: ^18.2.0 + + '@msgpack/msgpack@2.8.0': + resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==} + engines: {node: '>= 10'} + + '@ndelangen/get-tarball@3.0.9': + resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + + '@nxg-org/mineflayer-auto-jump@0.7.7': + resolution: {integrity: sha512-50FYsz5rxBuLzOh7wqmg9iN9zdVGD+QjuaPcw/mD7q8Bq6Bq+o1/DfXfpoNGIHaDag80q6FJSpc73MI3Scid8g==} + + '@nxg-org/mineflayer-physics-util@1.5.8': + resolution: {integrity: sha512-KmCkAqpUo8BbuRdIBs6+V2hWHehz++PRz3lRwIsb47CuG0u4sgLYh37RY3ifAznC6uWvmPK+q3B4ZXwJzPy1MQ==} + + '@nxg-org/mineflayer-tracker@1.2.1': + resolution: {integrity: sha512-SI1ffF8zvg3/ZNE021Ja2W0FZPN+WbQDZf8yFqOcXtPRXAtM9W6HvoACdzXep8BZid7WYgYLIgjKpB+9RqvCNQ==} + + '@nxg-org/mineflayer-trajectories@1.1.1': + resolution: {integrity: sha512-X103KXlX8+L3uMeK4jQxMUdTizv01sQRSfBizAF/iOAdfQZehRLXr3CYKeJzfwPYGLN0X0JCl++cMEcZVn4vbg==} + + '@nxg-org/mineflayer-util-plugin@1.8.3': + resolution: {integrity: sha512-YlIbzCDs9822xuvmYlD0vXZz0iye9buqp9NK4nNn15gYybdqBtC/YxK6BLqXtwNohZCKoZdKgei7Xd5Bt2/rUg==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@radix-ui/number@1.0.1': + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + + '@radix-ui/primitive@1.0.1': + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + + '@radix-ui/react-arrow@1.0.3': + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.0.3': + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.0.1': + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.0.1': + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-direction@1.0.1': + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.0.4': + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.0.1': + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.0.3': + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.0.1': + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-popper@1.1.2': + resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.0.3': + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@1.0.3': + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.0.4': + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@1.2.2': + resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-separator@1.0.3': + resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.0.2': + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-toggle-group@1.0.4': + resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle@1.0.3': + resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toolbar@1.0.4': + resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.0.1': + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.0.1': + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.0.3': + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.0.1': + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.0.1': + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.0.1': + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.0.1': + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.0.3': + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.0.1': + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + + '@react-oauth/google@0.12.1': + resolution: {integrity: sha512-qagsy22t+7UdkYAiT5ZhfM4StXi9PPNvw0zuwNmabrWyMKddczMtBIOARflbaIj+wHiQjnMAsZmzsUYuXeyoSg==} + peerDependencies: + react: ^18.2.0 + react-dom: '>=16.8.0' + + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-node-resolve@11.2.1': + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@5.0.5': + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rushstack/eslint-patch@1.4.0': + resolution: {integrity: sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@socket.io/component-emitter@3.1.0': + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + + '@storybook/addon-actions@7.4.6': + resolution: {integrity: sha512-SsqZr3js5NinKPnC8AeNI7Ij+Q6fIl9tRdRmSulEgjksjOg7E5S1/Wsn5Bb2CCgj7MaX6VxGyC7s3XskQtDiIQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-backgrounds@7.4.6': + resolution: {integrity: sha512-+LHTZB/ZYMAzkyD5ZxSriBsqmsrvIaW/Nnd/BeuXGbkrVKKqM0qAKiFZAfjc2WchA1piVNy0/1Rsf+kuYCEiJw==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-controls@7.4.6': + resolution: {integrity: sha512-4lq3sycEUIsK8SUWDYc60QgF4vV9FZZ3lDr6M7j2W9bOnvGw49d2fbdlnq+bX1ZprZZ9VgglQpBAorQB3BXZRw==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-docs@7.4.6': + resolution: {integrity: sha512-dLaub+XWFq4hChw+xfuF9yYg0Txp77FUawKoAigccfjWXx+OOhRV3XTuAcknpXkYq94GWynHgUFXosXT9kbDNA==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/addon-essentials@7.4.6': + resolution: {integrity: sha512-dWodufrt71TK7ELkeIvVae/x4PzECUlbOm57Iqqt4yQCyR291CgvI4PjeB8un2HbpcXCGZ+N/Oj3YkytvzBi4A==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/addon-highlight@7.4.6': + resolution: {integrity: sha512-zCufxxD2KS5VwczxfkcBxe1oR/juTTn2H1Qm8kYvWCJQx3UxzX0+G9cwafbpV7eivqaufLweEwROkH+0KjAtkQ==} + + '@storybook/addon-links@7.4.6': + resolution: {integrity: sha512-BPygElZKX+CPI9Se6GJNk1dYc5oxuhA+vHigO1tBqhiM6VkHyFP3cvezJNQvpNYhkUnu3cxnZXb3UJnlRbPY3g==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-measure@7.4.6': + resolution: {integrity: sha512-nCymMLaHnxv8TE3yEM1A9Tulb1NuRXRNmtsdHTkjv7P1aWCxZo8A/GZaottKe/GLT8jSRjZ+dnpYWrbAhw6wTQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-outline@7.4.6': + resolution: {integrity: sha512-errNUblRVDLpuEaHQPr/nsrnsUkD2ARmXawkRvizgDWLIDMDJYjTON3MUCaVx3x+hlZ3I6X//G5TVcma8tCc8A==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-toolbars@7.4.6': + resolution: {integrity: sha512-L9m2FBcKeteGq7qIYsMJr0LEfiH7Wdrv5IDcldZTn68eZUJTh1p4GdJZcOmzX1P5IFRr76hpu03iWsNlWQjpbQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-viewport@7.4.6': + resolution: {integrity: sha512-INDtk54j7bi7NgxMfd2ATmbA0J7nAd6X8itMkLIyPuPJtx8bYHPDORyemDOd0AojgmAdTOAyUtDYdI/PFeo4Cw==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/blocks@7.4.6': + resolution: {integrity: sha512-HxBSAeOiTZW2jbHQlo1upRWFgoMsaAyKijUFf5MwwMNIesXCuuTGZDJ3xTABwAVLK2qC9Ektfbo0CZCiPVuDRQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/builder-manager@7.4.6': + resolution: {integrity: sha512-zylZCD2rmyLOOFBFmUgtJg6UNUKmRNgXiig1XApzS2TkIbTZP827DsVEUl0ey/lskCe0uArkrEBR6ICba8p/Rw==} + + '@storybook/builder-vite@7.4.6': + resolution: {integrity: sha512-xV9STYK+TkqWWTf2ydm6jx+7P70fjD2UPd1XTUw08uKszIjhuuxk+bG/OF5R1E25mPunAKXm6kBFh351AKejBg==} + peerDependencies: + '@preact/preset-vite': '*' + typescript: '>= 4.3.x' + vite: ^3.0.0 || ^4.0.0 + vite-plugin-glimmerx: '*' + peerDependenciesMeta: + '@preact/preset-vite': + optional: true + typescript: + optional: true + vite-plugin-glimmerx: + optional: true + + '@storybook/channels@7.4.6': + resolution: {integrity: sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==} + + '@storybook/cli@7.4.6': + resolution: {integrity: sha512-rRwaH8pOL+FHz/pJMEkNpMH2xvZvWsrl7obBYw26NQiHmiVSAkfHJicndSN1mwc+p5w+9iXthrgzbLtSAOSvkA==} + hasBin: true + + '@storybook/client-logger@7.4.6': + resolution: {integrity: sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==} + + '@storybook/codemod@7.4.6': + resolution: {integrity: sha512-lxmwEpwksCaAq96APN2YlooSDfKjJ1vKzN5Ni2EqQzf2TEXl7XQjLacHd7OOaII1kfsy+D5gNG4N5wBo7Ub30g==} + + '@storybook/components@7.4.6': + resolution: {integrity: sha512-nIRBhewAgrJJVafyCzuaLx1l+YOfvvD5dOZ0JxZsxJsefOdw1jFpUqUZ5fIpQ2moyvrR0mAUFw378rBfMdHz5Q==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/core-client@7.4.6': + resolution: {integrity: sha512-tfgxAHeCvMcs6DsVgtb4hQSDaCHeAPJOsoyhb47eDQfk4OmxzriM0qWucJV5DePSMi+KutX/rN2u0JxfOuN68g==} + + '@storybook/core-common@7.4.6': + resolution: {integrity: sha512-05MJFmOM86qvTLtgDskokIFz9txe0Lbhq4L3by1FtF0GwgH+p+W6I94KI7c6ANER+kVZkXQZhiRzwBFnVTW+Cg==} + + '@storybook/core-events@7.4.6': + resolution: {integrity: sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==} + + '@storybook/core-server@7.4.6': + resolution: {integrity: sha512-jqmRTGCJ1W0WReImivkisPVaLFT5sjtLnFoAk0feHp6QS5j7EYOPN7CYzliyQmARWTLUEXOVaFf3VD6nJZQhJQ==} + + '@storybook/csf-plugin@7.4.6': + resolution: {integrity: sha512-yi7Qa4NSqKOyiJTWCxlB0ih2ijXq6oY5qZKW6MuMMBP14xJNRGLbH5KabpfXgN2T7YECcOWG1uWaGj2veJb1KA==} + + '@storybook/csf-tools@7.4.6': + resolution: {integrity: sha512-ocKpcIUtTBy6hlLY34RUFQyX403cWpB2gGfqvkHbpGe2BQj7EyV0zpWnjsfVxvw+M9OWlCdxHWDOPUgXM33ELw==} + + '@storybook/csf@0.1.1': + resolution: {integrity: sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==} + + '@storybook/docs-mdx@0.1.0': + resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} + + '@storybook/docs-tools@7.4.6': + resolution: {integrity: sha512-nZj1L/8WwKWWJ41FW4MaKGajZUtrhnr9UwflRCkQJaWhAKmDfOb5M5TqI93uCOULpFPOm5wpoMBz2IHInQ2Lrg==} + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/manager-api@7.4.6': + resolution: {integrity: sha512-inrm3DIbCp8wjXSN/wK6e6i2ysQ/IEmtC7IN0OJ7vdrp+USCooPT448SQTUmVctUGCFmOU3fxXByq8g77oIi7w==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/manager@7.4.6': + resolution: {integrity: sha512-kA1hUDxpn1i2SO9OinvLvVXDeL4xgJkModp+pbE8IXv4NJWReNq1ecMeQCzPLS3Sil2gnrullQ9uYXsnZ9bxxA==} + + '@storybook/mdx2-csf@1.1.0': + resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} + + '@storybook/node-logger@7.4.6': + resolution: {integrity: sha512-djZb310Q27GviDug1XBv0jOEDLCiwr4hhDE0aifCEKZpfNCi/EaP31nbWimFzZwxu4hE/YAPWExzScruR1zw9Q==} + + '@storybook/postinstall@7.4.6': + resolution: {integrity: sha512-TqI5BucPAGRWrkh55BYiG2/gHLFtC0In4cuu0GsUzB/1jc4i51npLRorCwhmT7r7YliGl5F7JaP0Bni/qHN3Lg==} + + '@storybook/preview-api@7.4.6': + resolution: {integrity: sha512-byUS/Opt3ytWD4cWz3sNEKw5Yks8MkQgRN+GDSyIomaEAQkLAM0rchPC0MYjwCeUSecV7IIQweNX5RbV4a34BA==} + + '@storybook/preview@7.4.6': + resolution: {integrity: sha512-2RPXusJ4CTDrIipIKKvbotD7fP0+8VzoFjImunflIrzN9rni+2rq5eMjqlXAaB+77w064zIR4uDUzI9fxsMDeQ==} + + '@storybook/react-dom-shim@7.4.6': + resolution: {integrity: sha512-DSq8l9FDocUF1ooVI+TF83pddj1LynE/Hv0/y8XZhc3IgJ/HkuOQuUmfz29ezgfAi9gFYUR8raTIBi3/xdoRmw==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/react-vite@7.4.6': + resolution: {integrity: sha512-jkjnrf3FxzR5wcmebXRPflrsM4WIDjWyW/NVFJwxi5PeIOk7fE7/QAPrm4NFRUu2Q7DeuH3oLKsw8bigvUI9RA==} + engines: {node: '>=16'} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + vite: ^3.0.0 || ^4.0.0 + + '@storybook/react@7.4.6': + resolution: {integrity: sha512-w0dVo64baFFPTGpUOWFqkKsu6pQincoymegSNgqaBd5DxEyMDRiRoTWSJHMKE9BwgE8SyWhRkP1ak1mkccSOhQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@storybook/router@7.4.6': + resolution: {integrity: sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/telemetry@7.4.6': + resolution: {integrity: sha512-c8p/C1NIH8EMBviZkBCx8MMDk6rrITJ+b29DEp5MaWSRlklIVyhGiC4RPIRv6sxJwlD41PnqWVFtfu2j2eXLdQ==} + + '@storybook/theming@7.4.6': + resolution: {integrity: sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/types@7.4.6': + resolution: {integrity: sha512-6QLXtMVsFZFpzPkdGWsu/iuc8na9dnS67AMOBKm5qCLPwtUJOYkwhMdFRSSeJthLRpzV7JLAL8Kwvl7MFP3QSw==} + + '@storybook/web-components-vite@7.4.6': + resolution: {integrity: sha512-L/y6MTLbqfHaM0faK9Yl8n5PIyW4daZrtk7NfaOT6UjgNFjOx3o4CctYew6oj90cNk5HdZQX2OZny043GxDLZw==} + engines: {node: ^14.18 || >=16} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/web-components@7.4.6': + resolution: {integrity: sha512-HWqkZtdkmNimkzMmE0mGRys2ee9qgEeDVCruiffySVquBRMQ6n1xgvHZYaO6OLlMeH0YHPg083ZqUasS5GsYVg==} + engines: {node: '>=16.0.0'} + peerDependencies: + lit: ^2.0.0 + + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tweenjs/tween.js@18.6.4': + resolution: {integrity: sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==} + + '@tweenjs/tween.js@20.0.3': + resolution: {integrity: sha512-SYUe1UgY5HM05EB4+0B4arq2IPjvyzKXoklXKxSYrc2IFxGm1cBrqg5XbiB5uwbs0xY5j+rj986NAJMM0KZaUw==} + + '@types/babel__core@7.20.2': + resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} + + '@types/babel__generator@7.6.5': + resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} + + '@types/babel__template@7.4.2': + resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} + + '@types/babel__traverse@7.20.2': + resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} + + '@types/body-parser@1.19.3': + resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==} + + '@types/chai-subset@1.3.3': + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + + '@types/chai@4.3.6': + resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} + + '@types/connect@3.4.36': + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + + '@types/cookie@0.4.1': + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + + '@types/cors@2.8.15': + resolution: {integrity: sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==} + + '@types/cross-spawn@6.0.3': + resolution: {integrity: sha512-BDAkU7WHHRHnvBf5z89lcvACsvkz/n7Tv+HyD/uW76O29HoH1Tk/W6iQrepaZVbisvlEek4ygwT8IW7ow9XLAA==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/detect-port@1.3.3': + resolution: {integrity: sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==} + + '@types/doctrine@0.0.3': + resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} + + '@types/draco3d@1.4.7': + resolution: {integrity: sha512-sjx6hQ8UArRZf+2ZhpPkjJW8iCkyxar69/IElc9NHuGE40n0U9SuvxX59CHvF4xUH7qfJDQ2lIbANZ0HHJg+BQ==} + + '@types/ejs@3.1.3': + resolution: {integrity: sha512-mv5T/JI/bu+pbfz1o+TLl1NF0NIBbjS0Vl6Ppz1YY9DkXfzZT0lelXpfS5i3ZS3U/p90it7uERQpBvLYoK8e4A==} + + '@types/emscripten@1.39.8': + resolution: {integrity: sha512-Rk0HKcMXFUuqT32k1kXHZWgxiMvsyYsmlnjp0rLKa0MMoqXLE3T9dogDBTRfuc3SAsXu97KD3k4SKR1lHqd57w==} + + '@types/escodegen@0.0.6': + resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@0.0.51': + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + + '@types/estree@1.0.2': + resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} + + '@types/express-serve-static-core@4.17.37': + resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==} + + '@types/express@4.17.18': + resolution: {integrity: sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==} + + '@types/find-cache-dir@3.2.1': + resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} + + '@types/gapi@0.0.47': + resolution: {integrity: sha512-/ZsLuq6BffMgbKMtZyDZ8vwQvTyKhKQ1G2K6VyWCgtHHhfSSXbk4+4JwImZiTjWNXfI2q1ZStAwFFHSkNoTkHA==} + + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + + '@types/graceful-fs@4.1.7': + resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} + + '@types/http-cache-semantics@4.0.2': + resolution: {integrity: sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==} + + '@types/http-errors@2.0.2': + resolution: {integrity: sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==} + + '@types/istanbul-lib-coverage@2.0.4': + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + + '@types/istanbul-lib-report@3.0.1': + resolution: {integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==} + + '@types/istanbul-reports@3.0.2': + resolution: {integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==} + + '@types/js-cookie@2.2.7': + resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} + + '@types/json-schema@7.0.12': + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/lodash-es@4.17.9': + resolution: {integrity: sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==} + + '@types/lodash@4.14.199': + resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} + + '@types/mdast@4.0.3': + resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + + '@types/mdx@2.0.8': + resolution: {integrity: sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==} + + '@types/mime-types@2.1.2': + resolution: {integrity: sha512-q9QGHMGCiBJCHEvd4ZLdasdqXv570agPsUW0CeIm/B8DzhxsYMerD0l3IlI+EQ1A2RWHY2mmM9x1YIuuWxisCg==} + + '@types/mime@1.3.3': + resolution: {integrity: sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==} + + '@types/mime@3.0.2': + resolution: {integrity: sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/minimist@1.2.3': + resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} + + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + + '@types/node-fetch@2.6.6': + resolution: {integrity: sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==} + + '@types/node@14.18.56': + resolution: {integrity: sha512-+k+57NVS9opgrEn5l9c0gvD1r6C+PtyhVE4BTnMMRwiEA8ZO8uFcs6Yy2sXIy0eC95ZurBtRSvhZiHXBysbl6w==} + + '@types/node@16.18.58': + resolution: {integrity: sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==} + + '@types/node@20.11.19': + resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} + + '@types/node@20.12.7': + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + + '@types/node@20.8.0': + resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} + + '@types/node@20.8.10': + resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==} + + '@types/normalize-package-data@2.4.2': + resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} + + '@types/offscreencanvas@2019.7.2': + resolution: {integrity: sha512-ujCjOxeA07IbEBQYAkoOI+XFw5sT3nhWJ/xZfPR6reJppDG7iPQPZacQiLTtWH1b3a2NYXWlxvYqa40y/LAixQ==} + + '@types/parse-json@4.0.0': + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + + '@types/pretty-hrtime@1.0.1': + resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==} + + '@types/prop-types@15.7.5': + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + + '@types/qs@6.9.8': + resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} + + '@types/range-parser@1.2.5': + resolution: {integrity: sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==} + + '@types/rbush@3.0.1': + resolution: {integrity: sha512-0LecKcQjuJ/PclmThftzePIKXaKt7OMjoZZ3Xf17Ebd28ZU6OFUu1mObbvV74YXS1W3APdZO5GRHyD/ezGK4Vg==} + + '@types/react-dom@18.2.7': + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + + '@types/react-transition-group@4.4.7': + resolution: {integrity: sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==} + + '@types/react@18.2.20': + resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==} + + '@types/readable-stream@4.0.11': + resolution: {integrity: sha512-R3eUMUTTKoIoaz7UpYLxvZCrOmCRPRbAmoDDHKcimTEySltaJhF8hLzj4+EzyDifiX5eK6oDQGSfmNnXjxZzYQ==} + + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + + '@types/sat@0.0.31': + resolution: {integrity: sha512-P4SVw79XheP1p92useDVpLYYOUQ6lpw2L7IdQz4dD23DZ8DiC1STgPOh72hjR5IZJBPQbzlICAbmjCKbwyYuxg==} + + '@types/scheduler@0.16.3': + resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + + '@types/semver@7.5.3': + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + + '@types/send@0.17.2': + resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==} + + '@types/serve-static@1.15.3': + resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==} + + '@types/sinonjs__fake-timers@8.1.1': + resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} + + '@types/sizzle@2.3.3': + resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} + + '@types/stats.js@0.17.1': + resolution: {integrity: sha512-OgfYE1x2w1jRUXzzKABX+kOdwz2y9PE0uSwnZabkWfJTWOzm7Pvfm4JI2xqRE0q2nwUe2jZLWcrcnhd9lQU63w==} + + '@types/three@0.154.0': + resolution: {integrity: sha512-IioqpGhch6FdLDh4zazRn3rXHj6Vn2nVOziJdXVbJFi9CaI65LtP9qqUtpzbsHK2Ezlox8NtsLNHSw3AQzucjA==} + + '@types/three@0.156.0': + resolution: {integrity: sha512-733bXDSRdlrxqOmQuOmfC1UBRuJ2pREPk8sWnx9MtIJEVDQMx8U0NQO5MVVaOrjzDPyLI+cFPim2X/ss9v0+LQ==} + + '@types/trusted-types@2.0.3': + resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} + + '@types/ua-parser-js@0.7.39': + resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} + + '@types/unist@2.0.8': + resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} + + '@types/unist@3.0.2': + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + + '@types/webxr@0.5.7': + resolution: {integrity: sha512-Rcgs5c2eNFnHp53YOjgtKfl/zWX1Y+uFGUwlSXrWcZWu3yhANRezmph4MninmqybUYT6g9ZE0aQ9QIdPkLR3Kg==} + + '@types/wicg-file-system-access@2023.10.2': + resolution: {integrity: sha512-nSiK8qt0O7sQmDcW3HYfvya7GDoD6ipgdcUFzk3QN+UBIqXeNg38Nh6VnKv7EIPfkVETRiquyMskCbpxUzgX1Q==} + + '@types/yargs-parser@21.0.1': + resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} + + '@types/yargs@17.0.28': + resolution: {integrity: sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==} + + '@types/yauzl@2.10.1': + resolution: {integrity: sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@6.1.0': + resolution: {integrity: sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.7.3': + resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.1.0': + resolution: {integrity: sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@6.7.3': + resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.1.0': + resolution: {integrity: sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.1.0': + resolution: {integrity: sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@6.7.3': + resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.1.0': + resolution: {integrity: sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@6.7.3': + resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.1.0': + resolution: {integrity: sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.1.0': + resolution: {integrity: sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@6.7.3': + resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@vitejs/plugin-react@3.1.0': + resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.1.0-beta.0 + + '@vitest/expect@0.34.6': + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + + '@vitest/runner@0.34.6': + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + + '@vitest/snapshot@0.34.6': + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + + '@vitest/spy@0.34.6': + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + + '@vitest/utils@0.34.6': + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + + '@xboxreplay/errors@0.1.0': + resolution: {integrity: sha512-Tgz1d/OIPDWPeyOvuL5+aai5VCcqObhPnlI3skQuf80GVF3k1I0lPCnGC+8Cm5PV9aLBT5m8qPcJoIUQ2U4y9g==} + + '@xboxreplay/xboxlive-auth@3.3.3': + resolution: {integrity: sha512-j0AU8pW10LM8O68CTZ5QHnvOjSsnPICy0oQcP7zyM7eWkDQ/InkiQiirQKsPn1XRYDl4ccNu0WM582s3UKwcBg==} + + '@xmcl/asm@1.0.1': + resolution: {integrity: sha512-7vCVgm1E1IZ2cujiitFk9550Vgu2XAOn1ff90di638fMmTK0XkFMXKsSR/nGZmYKt+XiTMI/0B3TvreqbVjOug==} + engines: {node: '>=16'} + + '@xmcl/core@2.12.0': + resolution: {integrity: sha512-rcxy29i2fjGFpe6sEvaJxYHFGlfYMcJwElbk6TIUCrKNOiMhyLZeBtCJSk38hvaYF0kiROA3c4EJeWNGHf2zVw==} + engines: {node: '>=16.0'} + + '@xmcl/file-transfer@1.0.3': + resolution: {integrity: sha512-p5JsUQpNShqW4VpqaKXcQzYSO9o/9UGjXZfb5aNt/24Ty+j9qepQyPo4P1CFwfzgFuf9GGhH5cPUi6nShlKS+g==} + engines: {node: '>=16.0'} + + '@xmcl/forge-site-parser@2.0.9': + resolution: {integrity: sha512-OHKG2KYE+F6TSeOQmymuGoqEifxbJb3w3X/hmxMNeqtewiYukJldPmKO559ZFnZnOuMQEnr+X0dMbTQwWs5dFg==} + engines: {node: '>=16'} + + '@xmcl/installer@5.1.0': + resolution: {integrity: sha512-KpoxpfYdUWH4U4Yat7RifS1JZajArOdfgsJ/LdU90y6Fc3hKhHSJsiRudk1VxASTyMXKCM0lWVxH5JzywRHBDw==} + engines: {node: '>=16.0'} + + '@xmcl/task@4.0.6': + resolution: {integrity: sha512-h0AR7DQm6xxBgROPnRi0EY8DlaDQwuGzPA5lFRMD4EsnpHJ/3fPdzwbMLb81ZxKJlLSCn3hVR2yI0mSKIm5Heg==} + + '@xmcl/text-component@2.1.3': + resolution: {integrity: sha512-LdUZgC5+8F23J2ZkZi7aZb87QBNfxwJqhUyts8YBQYwxQPwei20TOBm2hr69euoAeDo7NDfbLXssD4mUvsAS0Q==} + engines: {node: '>=16'} + + '@xmcl/unzip@2.1.2': + resolution: {integrity: sha512-Lm/eg/e0/p+sfj/RT2QDpsBAf39DZqQ3+XvX1JXZPb64wnjwOf8CGU1WPv6BseEcJ5CMOpm0s2NyrEQD04y0UQ==} + engines: {node: '>=16'} + peerDependencies: + yauzl: ^2.10.0 + + '@xobotyi/scrollbar-width@1.9.5': + resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} + + '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15': + resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} + engines: {node: '>=14.15.0'} + peerDependencies: + esbuild: '>=0.10.0' + + '@yarnpkg/fslib@2.10.3': + resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==} + engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + + '@yarnpkg/libzip@2.3.0': + resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} + engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + + '@zardoy/flying-squid@0.0.17': + resolution: {integrity: sha512-qGCS7aRmMflDdIN7IGLpDc0W2gUYc5OQ45KEn3XtcxwOP0Q7zyvo3mnsD5KSV3n2lyhQ4783Ov8V6J86xea0lw==} + engines: {node: '>=8'} + hasBin: true + + '@zardoy/react-util@0.2.0': + resolution: {integrity: sha512-glABtx54mh4XSaK6BNALWE3mlshPjcPwPsRj/GnOXEA7WJY/6n43iJoukbaYF3758mGZRU5Fq6gklyFjBg0yHQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.0.0 + + '@zardoy/utils@0.0.11': + resolution: {integrity: sha512-d6xBnSFCOa98HcL52xSBflJKjKpxfRhtr1eVexy89YujeCHSQhUMmSz9h07xyrulfW60k9tSeYH5reuqoh4l4w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + Base64@0.2.1: + resolution: {integrity: sha512-reGEWshDmTDQDsCec/HduOO9Wyj6yMOupMfhIf3ugN1TDlK2NQW4DDJSqNNtp380SNcvRfXtO8HSCQot0d0SMw==} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + + acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + + address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + + adm-zip@0.5.12: + resolution: {integrity: sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==} + engines: {node: '>=6.0'} + + aes-js@3.1.2: + resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} + + after@0.8.2: + resolution: {integrity: sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==} + + agent-base@5.1.1: + resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} + engines: {node: '>= 6.0.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + animejs@3.2.1: + resolution: {integrity: sha512-sWno3ugFryK5nhiDm/2BKeFCpZv7vzerWUcUPyAZLDhMek3+S/p418ldZJbJXo5ZUOpfm2kP2XRO4NJcULMy9A==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-base@1.1.0: + resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + app-root-dir@1.0.2: + resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} + + array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + + array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + + arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + arraybuffer.slice@0.0.7: + resolution: {integrity: sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + asap@1.0.0: + resolution: {integrity: sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==} + + asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + + asn1@0.2.3: + resolution: {integrity: sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w==} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + assert@2.0.0: + resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + ast-types@0.14.2: + resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} + engines: {node: '>=4'} + + ast-types@0.15.2: + resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} + engines: {node: '>=4'} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + + babel-core@7.0.0-bridge.0: + resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + babel-plugin-polyfill-corejs2@0.4.5: + resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.8.3: + resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.5.2: + resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + backo2@1.0.2: + resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-arraybuffer@0.1.4: + resolution: {integrity: sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==} + engines: {node: '>= 0.6.0'} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + + big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bit-twiddle@1.0.2: + resolution: {integrity: sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + blob-util@2.0.2: + resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} + + blob@0.0.5: + resolution: {integrity: sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + bmp-js@0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-assert@1.2.1: + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + + browserfs@https://codeload.github.com/zardoy/browserfs/tar.gz/ab58ae8ef00e3a31db01909e365e6cb5188436e0: + resolution: {tarball: https://codeload.github.com/zardoy/browserfs/tar.gz/ab58ae8ef00e3a31db01909e365e6cb5188436e0} + version: 2.0.0 + engines: {node: '>= 18'} + + browserfs@https://codeload.github.com/zardoy/browserfs/tar.gz/e60ca69e74888e057a96a468afe1d62347d3f56f: + resolution: {tarball: https://codeload.github.com/zardoy/browserfs/tar.gz/e60ca69e74888e057a96a468afe1d62347d3f56f} + version: 2.0.0-zardoy + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + + browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + + browserify-rsa@4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + + browserify-sign@4.2.1: + resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + + browserify-zlib@0.1.4: + resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + + browserify-zlib@0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + + browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-equal@0.0.1: + resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} + engines: {node: '>=0.4.0'} + + buffer-equal@1.0.1: + resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} + engines: {node: '>=0.4'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + c8@7.14.0: + resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==} + engines: {node: '>=10.12.0'} + hasBin: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + cachedir@2.4.0: + resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} + engines: {node: '>=6'} + + call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase-keys@7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001524: + resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} + + canvas@2.11.2: + resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} + engines: {node: '>=6'} + + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + cbor-extract@2.2.0: + resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==} + hasBin: true + + cbor-x@1.5.4: + resolution: {integrity: sha512-PVKILDn+Rf6MRhhcyzGXi5eizn1i0i3F8Fe6UMMxXBnWkalq9+C5+VTmlIjAYM4iF2IYF2N+zToqAfYOp+3rfw==} + + chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + + change-case@5.1.2: + resolution: {integrity: sha512-CAtbGEDulyjzs05RXy3uKcwqeztz/dMEuAc1Xu9NQBsbrhuGMneL0u9Dj5SoutLKBFYun8txxYIwhjtLNfUmCA==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + check-more-types@2.24.0: + resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} + engines: {node: '>= 0.8.0'} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + + cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + + classnames@2.3.2: + resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + engines: {node: '>=6'} + + cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@1.1.1: + resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + engines: {node: '>=6'} + + color-convert@0.5.3: + resolution: {integrity: sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-diff@1.4.0: + resolution: {integrity: sha512-4oDB/o78lNdppbaqrg0HjOp7pHmUc+dfCxWKWFnQg6AB/1dkjtBDop3RZht5386cq9xBUDRvDvSCA7WUlM9Jqw==} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + component-bind@1.0.0: + resolution: {integrity: sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==} + + component-emitter@1.2.1: + resolution: {integrity: sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==} + + component-emitter@1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + + component-inherit@0.0.3: + resolution: {integrity: sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + + constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + contro-max@0.1.2: + resolution: {integrity: sha512-mY9aRQ9on/iyzvyhb4OD/10WRRKulVd92F7cxMFVn3rq5EwI+gZitGpHN2mp9+IzwRgBJrOKr1C051b3YlEktQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + core-js-compat@3.32.1: + resolution: {integrity: sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==} + + core-js@3.32.1: + resolution: {integrity: sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + corser@2.0.1: + resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} + engines: {node: '>= 0.4.0'} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + + cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypto-browserify@3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + css-in-js-utils@3.1.0: + resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + cypress-esbuild-preprocessor@1.0.2: + resolution: {integrity: sha512-JsFnm6fBQt/OEzstknJ1KLMTuUERUaG0ZB9fk0KdNUlZqxaVEoQ9/pFvKmqRfzUe2y00cWD++ptccQA4tNAAlQ==} + + cypress-plugin-snapshots@1.4.4: + resolution: {integrity: sha512-rijq3RTEZNtxQA4KCUwjXinmE1Ww+z6cQW0B14iodFM/HlX5LN16XT/2QS3X1nUXRKt0QdTrAC5MQfMUrjBkSQ==} + engines: {node: '>=8.2.1'} + peerDependencies: + cypress: ^4.5.0 + + cypress@10.11.0: + resolution: {integrity: sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==} + engines: {node: '>=12.0.0'} + hasBin: true + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + dayjs@1.11.9: + resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.1.1: + resolution: {integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==} + deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decamelize@5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + + decompress-response@4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.0: + resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} + engines: {node: '>= 0.4'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defu@6.1.2: + resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} + + del@6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@1.0.0: + resolution: {integrity: sha512-/Nd1EQbQbI9UbSHrMiKZjFLrXSnU328iQdZKPQf78XQI6C+gutkFUeoHpG5J08Ioa6HeRbRNFpSIclh1xyG0mw==} + engines: {node: '>=6'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-collisions@7.0.5: + resolution: {integrity: sha512-RiebSYJ9Vok1uVm57bxpI69EO2ySK1rdcHpRv28IDBh/wgaF8wxjoZJV7mmqz8MOKioLwMHvcMyP1R0CLZ+RbA==} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + detect-package-manager@2.0.1: + resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} + engines: {node: '>=12'} + + detect-port@1.5.1: + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} + hasBin: true + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687: + resolution: {tarball: https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687} + version: 1.3.0 + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff2html@2.12.2: + resolution: {integrity: sha512-G/Zn1KyG/OeC+67N/P26WHsQpjrjUiRyWGvg29ypy3MxSsBmF0bzsU/Irq70i2UAg+f/MzmLx4v/Nkt01TOU3g==} + engines: {node: '>=4'} + + diff@2.2.3: + resolution: {integrity: sha512-9wfm3RLzMp/PyTFWuw9liEzdlxsdGixCW0ZTU1XDmtlAkvpVXTPGF8KnfSs0hm3BPbg19OrUPPsRkHXoREpP1g==} + engines: {node: '>=0.3.1'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + discontinuous-range@1.0.0: + resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + + draco3d@1.5.6: + resolution: {integrity: sha512-+3NaRjWktb5r61ZFoDejlykPEFKT5N/LkbXsaddlw6xNSXBanUYpFc2AXXpbJDilPHazcSreU/DpQIaxfX0NfQ==} + + duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.4.504: + resolution: {integrity: sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==} + + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + + emit-then@2.0.0: + resolution: {integrity: sha512-y5JHnrygHnCndtqVHHDhCr0ZzzWHK5RBTczWRlGSIR5UnGHBXuxpoaE0UB5E82qym8ma2dI799wDSSJN2e4VSg==} + engines: {node: '>=5'} + + emittery@0.10.2: + resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + endian-toggle@0.0.0: + resolution: {integrity: sha512-ShfqhXeHRE4TmggSlHXG8CMGIcsOsqDw/GcoPcosToE59Rm9e4aXaMhEQf2kPBsBRrKem1bbOAv5gOKnkliMFQ==} + + engine.io-client@3.5.3: + resolution: {integrity: sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw==} + + engine.io-client@6.5.2: + resolution: {integrity: sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==} + + engine.io-parser@2.2.1: + resolution: {integrity: sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==} + + engine.io-parser@5.2.1: + resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} + engines: {node: '>=10.0.0'} + + engine.io@3.6.1: + resolution: {integrity: sha512-dfs8EVg/i7QjFsXxn7cCRQ+Wai1G1TlEvHhdYEi80fxn5R1vZ2K661O6v/rezj1FP234SZ14r9CmJke99iYDGg==} + engines: {node: '>=8.0.0'} + + engine.io@6.5.3: + resolution: {integrity: sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==} + engines: {node: '>=10.2.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + envinfo@7.10.0: + resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} + engines: {node: '>=4'} + hasBin: true + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + + eruda@3.0.1: + resolution: {integrity: sha512-6q1Xdwga4JTr1mKSW4mzuWSSbmXgqpm/8Wa1QGFGfCWRjC0bCQjbS4u06M1te1moucIS3hBLlbSTPWYH2W0qbQ==} + + es-abstract@1.22.2: + resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + engines: {node: '>= 0.4'} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + engines: {node: '>= 0.4'} + + es-module-lexer@0.9.3: + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + es6-object-assign@1.1.0: + resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + esbuild-plugin-alias@0.2.1: + resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} + + esbuild-plugin-polyfill-node@0.3.0: + resolution: {integrity: sha512-SHG6CKUfWfYyYXGpW143NEZtcVVn8S/WHcEOxk62LuDXnY4Zpmc+WmxJKN6GMTgTClXJXhEM5KQlxKY6YjbucQ==} + peerDependencies: + esbuild: '*' + + esbuild-register@3.5.0: + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.19.11: + resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.19.3: + resolution: {integrity: sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-prettier@8.10.0: + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-config-xo-react@0.27.0: + resolution: {integrity: sha512-wiV215xQIn71XZyyVfaOXHaFpR1B14IJttwOjMi/eqUK1s+ojJdHr7eHqTLaGUfh6FKgWha1QNwePlIXx7mBUg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=8.6.0' + eslint-plugin-react: '>=7.29.0' + eslint-plugin-react-hooks: '>=4.3.0' + + eslint-config-xo-typescript@1.0.1: + resolution: {integrity: sha512-vPQssnRSUgBFOEfB/KY12CXwltwFSn4RSCfa+w7gjBC2PFQ7Yfgmyei+1XUZ3K+8LRGef2NMJUcxts7PldhDjg==} + engines: {node: '>=16'} + peerDependencies: + '@typescript-eslint/eslint-plugin': '>=6.0.0' + '@typescript-eslint/parser': '>=6.0.0' + eslint: '>=8.0.0' + typescript: '>=4.7' + + eslint-config-xo@0.43.1: + resolution: {integrity: sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=8.27.0' + + eslint-config-zardoy@0.2.17: + resolution: {integrity: sha512-d31WsjyVSQqHbzTpBSmH96+nw5gwY2yhDbZatU89gr+U8ou1FRUkJSApYJUgmcINt8AQocj1RDDAVYmVSILZgQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + eslint: ^8.5.0 + eslint-plugin-vue: ^8.4.1 + typescript: ^4.5.2 + vue-eslint-parser: ^8.2.0 + peerDependenciesMeta: + eslint-plugin-vue: + optional: true + vue-eslint-parser: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.8.0: + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-es@3.0.1: + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + + eslint-plugin-eslint-comments@3.2.0: + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + + eslint-plugin-import@2.27.5: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-node@11.1.0: + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + + eslint-plugin-react-hooks@4.6.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.34.1: + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-sonarjs@0.19.0: + resolution: {integrity: sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==} + engines: {node: '>=14'} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + eslint-plugin-unicorn@48.0.0: + resolution: {integrity: sha512-8fk/v3p1ro34JSVDBEmtOq6EEQRpMR0iTir79q69KnXFZ6DJyPkT3RAi+ZoTqhQMdDSpGh8BGR68ne1sP5cnAA==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + + eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.50.0: + resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-to-babel@3.2.1: + resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} + engines: {node: '>=8.3.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-promise@0.0.1: + resolution: {integrity: sha512-ouEmk2N0BalybPM0zmj3RHE93AX4p9hAIHZfbbqxolLChqCB6pcLDbYH6zZ8TaiFWImPHfs5kFnNpA0u9RdEaQ==} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter2@6.4.7: + resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + executable@4.1.1: + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} + + exif-parser@0.1.12: + resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} + + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + express-ws@4.0.0: + resolution: {integrity: sha512-KEyUw8AwRET2iFjFsI1EJQrJ/fHeGiJtgpYgEWG3yDv4l/To/m3a2GaYfeGyB3lsWdvbesjF5XCMx+SVBgAAYw==} + engines: {node: '>=4.5.0'} + peerDependencies: + express: ^4.0.0 || ^5.0.0-alpha.1 + + express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extract-zip@1.7.0: + resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} + hasBin: true + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-loops@1.1.3: + resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==} + + fast-shallow-equal@1.0.0: + resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} + + fastest-stable-stringify@2.0.2: + resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fetch-retry@5.0.6: + resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} + + fflate@0.6.10: + resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + + file-type@9.0.0: + resolution: {integrity: sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==} + engines: {node: '>=6'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + filesize@10.0.12: + resolution: {integrity: sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==} + engines: {node: '>= 10.4.0'} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.1.0: + resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} + engines: {node: '>=12.0.0'} + + flatmap@0.0.3: + resolution: {integrity: sha512-OuR+o7kHVe+x9RtIujPay7Uw3bvDZBZFSBXClEphZuSDLmZTqMdclasf4vFSsogC8baDz0eaC2NdO/2dlXHBKQ==} + + flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + + flow-parser@0.218.0: + resolution: {integrity: sha512-mk4e7UK4P/W3tjrJyto6oxPuCjwvRMyzBh72hTl8T0dOcTzkP0M2JJHpncgyhKphMFi9pnjwHfc8e0oe4Uk3LA==} + engines: {node: '>=0.4.0'} + + follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-npm-tarball-url@2.0.3: + resolution: {integrity: sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==} + engines: {node: '>=12.17'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + + getos@3.2.1: + resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + giget@1.1.3: + resolution: {integrity: sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==} + hasBin: true + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + + github-slugger@1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + + gl@6.0.2: + resolution: {integrity: sha512-yBbfpChOtFvg5D+KtMaBFvj6yt3vUnheNAH+UrQH2TfDB8kr0tERdL0Tjhe0W7xJ6jR6ftQBluTZR9jXUnKe8g==} + engines: {node: '>=14.0.0'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-promise@4.2.2: + resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==} + engines: {node: '>=12'} + peerDependencies: + glob: ^7.1.6 + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.3.3: + resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.21.0: + resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + engines: {node: '>=8'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + glsl-tokenizer@2.1.5: + resolution: {integrity: sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + gunzip-maybe@1.4.2: + resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-binary2@1.0.3: + resolution: {integrity: sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==} + + has-cors@1.1.0: + resolution: {integrity: sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + hogan.js@3.0.2: + resolution: {integrity: sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==} + hasBin: true + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + http-browserify@1.7.0: + resolution: {integrity: sha512-Irf/LJXmE3cBzU1eaR4+NEX6bmVLqt1wkmDiA7kBwH7zmb0D8kBAXsDmQ88hhj/qv9iEZKlyGx/hrMcFi8sOHw==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-server@14.1.1: + resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==} + engines: {node: '>=12'} + hasBin: true + + http-signature@1.3.6: + resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} + engines: {node: '>=0.10'} + + https-browserify@1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + + https-proxy-agent@4.0.0: + resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} + engines: {node: '>= 6.0.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + + human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + hyphenate-style-name@1.0.4: + resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} + + iconify-icon@1.0.8: + resolution: {integrity: sha512-jvbUKHXf8EnGGArmhlP2IG8VqQLFFyTvTqb9LVL2TKTh7/eCCD1o2HHE9thpbJJb6B8hzhcFb6rOKhvo7reNKA==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + image-size@0.7.5: + resolution: {integrity: sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==} + engines: {node: '>=6.9.0'} + hasBin: true + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-meta-resolve@3.0.0: + resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + indexof@0.0.1: + resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==} + + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + inline-style-prefixer@6.0.4: + resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==} + + internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + ip@2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-absolute-url@3.0.3: + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + + is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-deflate@1.0.0: + resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-gzip@1.0.0: + resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} + engines: {node: '>=0.10.0'} + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.1: + resolution: {integrity: sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@2.3.0: + resolution: {integrity: sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==} + engines: {node: '>=14'} + + jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jimp@0.10.3: + resolution: {integrity: sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==} + + jose@4.15.5: + resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} + + jpeg-js@0.3.7: + resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==} + + js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + + js-cookie@2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + + js-graph-algorithms@1.0.18: + resolution: {integrity: sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jscodeshift@0.14.0: + resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jsprim@2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + keyv@4.5.3: + resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + lazy-ass@1.6.0: + resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} + engines: {node: '> 0.8'} + + lazy-universal-dotenv@4.0.0: + resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} + engines: {node: '>=14.0.0'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lil-gui@0.17.0: + resolution: {integrity: sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ==} + + lil-gui@0.18.2: + resolution: {integrity: sha512-DgdrLy3/KGC0PiQLKgOcJMPItP4xY4iWgJ9+91Zaxfr8GCTmMps05QS9w9jW7yspILlbscbquwjOwxmWnSx5Uw==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + listr2@3.14.0: + resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} + engines: {node: '>=10.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + lit-element@3.3.3: + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + + lit-html@2.8.0: + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + + lit@2.8.0: + resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + + load-bmfont@1.4.1: + resolution: {integrity: sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==} + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.compact@3.0.1: + resolution: {integrity: sha512-2ozeiPi+5eBXW1CLtzjk8XQFhQOEMwwfxblqeq6EGyTxZJ1bPATqilY0e6g2SLQpP4KuMeuioBhEnWz5Pr7ICQ==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.reduce@4.6.0: + resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + looks-same@8.2.3: + resolution: {integrity: sha512-0LK5r4+9t2D56XPVNH3hhG4o0yBYUdeu9FEd8z0ZCs/2fR9zJQj+6ob6ued8iHk3yddrSAdUA+9YGVK2FBMGUw==} + engines: {node: '>= 12.0.0'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + macaddress@0.5.3: + resolution: {integrity: sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + + magic-string@0.30.4: + resolution: {integrity: sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==} + engines: {node: '>=12'} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + + markdown-it@14.0.0: + resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==} + hasBin: true + + markdown-to-jsx@7.3.2: + resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} + engines: {node: '>= 10'} + peerDependencies: + react: ^18.2.0 + + md5-file@4.0.0: + resolution: {integrity: sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==} + engines: {node: '>=6.0'} + hasBin: true + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + mdast-util-definitions@4.0.0: + resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + + mdast-util-from-markdown@2.0.0: + resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + + mdast-util-to-string@1.1.0: + resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + meow@10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + merge@1.2.1: + resolution: {integrity: sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==} + + meshoptimizer@0.18.1: + resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromark-core-commonmark@2.0.0: + resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + + micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + + micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + + micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + + micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + + micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + + micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + + micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + + micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + + micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + + micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + + micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + + micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + + micromark-util-subtokenize@2.0.0: + resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + + micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-response@2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minecraft-assets@1.12.2: + resolution: {integrity: sha512-/eMxh3LNjCXOnU6KnQMjBM8dRnoJNpWIg7mD2m2RthraYiQK2FNzPWIKxWm2j3Ufcf5nzFXupgABledE86r4fQ==} + + minecraft-data@3.62.0: + resolution: {integrity: sha512-jJXZ/WgyX79tIHlqvfyqG+sJDUekHiA3e9NRUCMGUno4NDrZMcpRI065DnkrI720RHTMb8iadf0NmnBP4Rla5A==} + + minecraft-folder-path@1.2.0: + resolution: {integrity: sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==} + + minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5554c7ab0a74bce52aa5f5f04a48eb8d3b9ac65c: + resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5554c7ab0a74bce52aa5f5f04a48eb8d3b9ac65c} + version: 1.0.1 + + minecraft-protocol@https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f: + resolution: {tarball: https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f} + version: 1.45.0 + engines: {node: '>=14'} + + minecraft-wrap@1.5.1: + resolution: {integrity: sha512-7DZ2WhrcRD3fUMau84l9Va0KWzV92SHNdB7mnNdNhgXID2aW6pjWuYPZi8MepEBemA4XKKdnDx7HmhTbkoiR8A==} + hasBin: true + + minecrafthawkeye@1.3.6: + resolution: {integrity: sha512-SlRlorxQs6nNzMiiIQ5z47wzbAI27UaCdbRB82CE8jqj4C8m3Gqk5TlgN+PSThxx8EDPXySzd8Vk+/wNigAd5A==} + + mineflayer-pathfinder@2.4.4: + resolution: {integrity: sha512-HAXakZrJRb1UC+5dv8EaDrqjW3ZnBnBk3nkb6x/YWyhHCUKn/E7VU0FO+UN9whuqPlkSaVumEdXJdydE6lSYxQ==} + + mineflayer@https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f: + resolution: {tarball: https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f} + version: 4.20.1 + engines: {node: '>=18'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.0.3: + resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mkdirp@0.3.0: + resolution: {integrity: sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==} + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@2.1.6: + resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + + mojangson@2.0.4: + resolution: {integrity: sha512-HYmhgDjr1gzF7trGgvcC/huIg2L8FsVbi/KacRe6r1AswbboGVZDS47SOZlomPuMWvZLas8m9vuHHucdZMwTmQ==} + + moo@0.5.2: + resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + + nano-css@5.3.5: + resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==} + peerDependencies: + react: ^18.2.0 + react-dom: '*' + + nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + nearley@2.20.1: + resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nested-error-stacks@2.1.1: + resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} + + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070: + resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070} + version: 0.2.4 + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-abi@3.47.0: + resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==} + engines: {node: '>=10'} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-canvas-webgl@0.3.0: + resolution: {integrity: sha512-wDRCTEE2TCqKDeSef5cNgtLv8kgjRlnFN3aYgB9yni0kHRNnKBSSP93lT8VIV5GuMWiy5KNXBU0ilyWL5wTvFg==} + + node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + + node-fetch-native@1.4.0: + resolution: {integrity: sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build-optional-packages@5.1.1: + resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} + hasBin: true + + node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + + node-gzip@1.1.2: + resolution: {integrity: sha512-ZB6zWpfZHGtxZnPMrJSKHVPrRjURoUzaDbLFj3VO70mpLTW5np96vXyHwft4Id0o+PYIzgDkBUjIzaNHhQ8srw==} + + node-html-parser@6.1.10: + resolution: {integrity: sha512-6/uWdWxjQWQ7tMcFK2wWlrflsQUzh1HsEzlIf2j5+TtzfhT2yUvg3DwZYAmjEHeR3uX74ko7exjHW69J0tOzIg==} + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + + node-rsa@0.4.2: + resolution: {integrity: sha512-Bvso6Zi9LY4otIZefYrscsUpo2mUpiAVIEmSZV2q41sP8tHZoert3Yu6zv4f/RXJqMNZQKCtnhDugIuCma23YA==} + + node-rsa@1.1.1: + resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} + + nopt@1.0.10: + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + hasBin: true + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} + + object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + omggif@1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + + os-browserify@0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + + ospath@1.2.2: + resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-asn1@5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + + parse-bmfont-ascii@1.0.6: + resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} + + parse-bmfont-binary@1.0.6: + resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} + + parse-bmfont-xml@1.1.4: + resolution: {integrity: sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==} + + parse-color@1.0.0: + resolution: {integrity: sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw==} + + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseqs@0.0.6: + resolution: {integrity: sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==} + + parseuri@0.0.6: + resolution: {integrity: sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + + path-exists-cli@2.0.0: + resolution: {integrity: sha512-qGr0A87KYCznmvabblxyxnzA/MtPZ28wH+4SCMP4tjTFAbzqwvs5xpUZExAYzq5OgHe5vIswzdH5iosCb8YF/Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + peek-stream@1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + + peerjs-js-binarypack@2.0.0: + resolution: {integrity: sha512-wu+L0Qeg4IH2DXm3B6xKP5ODeCIovwEEO/Fu3MVqApPQeVLzSdZpFzQzPobh+sdhUWMQGEO7YxHeiwpPngLjqQ==} + engines: {node: '>= 14.0.0'} + + peerjs@1.5.0: + resolution: {integrity: sha512-NLZ73jRNE4aLq2pmVTiSkWmwf6cvt9cH72qJHnzaLH+I2CtoWVvY42U9/O0/tYE6UYwRYJ1ktKRs2DdZ1Jrgcg==} + engines: {node: '>= 14'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + phin@2.9.3: + resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pixelmatch@4.0.2: + resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} + hasBin: true + + pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-dir@5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + + pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + pngjs@3.4.0: + resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} + engines: {node: '>=4.0.0'} + + polished@4.2.2: + resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} + engines: {node: '>=10'} + + poly-decomp@0.3.0: + resolution: {integrity: sha512-hWeBxGzPYiybmI4548Fca7Up/0k1qS5+79cVHI9+H33dKya5YNb9hxl0ZnDaDgvrZSuYFBhkCK/HOnqN7gefkQ==} + + portfinder@1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + + potpack@1.0.2: + resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} + + prebuild-install@7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@1.19.1: + resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} + engines: {node: '>=4'} + hasBin: true + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + + prismarine-auth@2.4.2: + resolution: {integrity: sha512-Cq4woGobnFYYfMBDh1WITW+Vs98toN91qAFBvBitwV7IwJaiSAh2Nl+WPUEGeg5eLBoSPpSyCVT8P2oi7Cav8g==} + + prismarine-biome@1.3.0: + resolution: {integrity: sha512-GY6nZxq93mTErT7jD7jt8YS1aPrOakbJHh39seYsJFXvueIOdHAmW16kYQVrTVMW5MlWLQVxV/EquRwOgr4MnQ==} + peerDependencies: + minecraft-data: 3.62.0 + prismarine-registry: ^1.1.0 + + prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0} + version: 1.17.1 + + prismarine-chat@1.9.1: + resolution: {integrity: sha512-x7WWa5MNhiLZSO6tw+YyKpzquFZ+DNISVgiV6K3SU0GsishMXe+nto02WhF/4AuFerKdugm9u1d/r4C4zSkJOg==} + + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f} + version: 1.35.0 + engines: {node: '>=14'} + + prismarine-entity@2.3.1: + resolution: {integrity: sha512-HOv8l7IetHNf4hwZ7V/W4vM3GNl+e6VCtKDkH9h02TRq7jWngsggKtJV+VanCce/sNwtJUhJDjORGs728ep4MA==} + + prismarine-item@1.14.0: + resolution: {integrity: sha512-udQHYGJ05klFe8Kkc0TOmwoXj5Xl1ZPgHVoMbGUAFB9exN4TFxEa1A39vkSYhxP5Et9PNufQQvFBFVom0nXikA==} + + prismarine-nbt@2.2.1: + resolution: {integrity: sha512-Mb50c58CPnuZ+qvM31DBa08tf9UumlTq1LkvpMoUpKfCuN05GZHTqCUwER3lxTSHLL0GZKghIPbYR/JQkINijQ==} + + prismarine-nbt@2.5.0: + resolution: {integrity: sha512-F0/8UAa9SDDnAGrBYqZc4nG8h2zj5cE2eAJU5xlDR/IsQQ3moVxkOjE3h3nMv6SbvZrvAcgX7waA/nd9LLHYdA==} + + prismarine-physics@1.8.0: + resolution: {integrity: sha512-gbM+S+bmVtOKVv+Z0WGaHMeEeBHISIDsRDRlv8sr0dex3ZJRhuq8djA02CBreguXtI18ZKh6q3TSj2qDr45NHA==} + + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f} + version: 2.7.0 + + prismarine-realms@1.3.2: + resolution: {integrity: sha512-5apl9Ru8veTj5q2OozRc4GZOuSIcs3yY4UEtALiLKHstBe8bRw8vNlaz4Zla3jsQ8yP/ul1b1IJINTRbocuA6g==} + + prismarine-recipe@1.3.1: + resolution: {integrity: sha512-xfa9E9ACoaDi+YzNQ+nk8kWSIqt5vSZOOCHIT+dTXscf/dng2HaJ/59uwe1D/jvOkAd2OvM6RRJM6fFe0q/LDA==} + peerDependencies: + prismarine-registry: ^1.4.0 + + prismarine-registry@1.7.0: + resolution: {integrity: sha512-yyva0FpWI078nNeMhx8ekVza5uUTYhEv+C+ADu3wUQXiG8qhXkvrf0uzsnhTgZL8BLdsi2axgCEiKw9qSKIuxQ==} + + prismarine-schematic@1.2.3: + resolution: {integrity: sha512-Mwpn43vEHhm3aw3cPhJjWqztkW+nX+QLajDHlTask8lEOTGl1WmpvFja4iwiws4GIvaC8x0Foptf4uvDsnjrAg==} + + prismarine-windows@2.9.0: + resolution: {integrity: sha512-fm4kOLjGFPov7TEJRmXHoiPabxIQrG36r2mDjlNxfkcLfMHFb3/1ML6mp4iRQa7wL0GK4DIAyiBqCWoeWDxARg==} + + prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465} + version: 3.6.2 + engines: {node: '>=8.0.0'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + process@https://codeload.github.com/PrismarineJS/node-process/tar.gz/380d0b4f4c86f1b65b216c311bf00431f314e88e: + resolution: {tarball: https://codeload.github.com/PrismarineJS/node-process/tar.gz/380d0b4f4c86f1b65b216c311bf00431f314e88e} + version: 0.11.10 + engines: {node: '>= 0.6.0'} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-queue@2.2.5: + resolution: {integrity: sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ==} + engines: {node: '>= 0.8.0'} + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + promise@5.0.0: + resolution: {integrity: sha512-N2BfLz0Sigf7rsm5NnItRwTNqEDUF2ephwEXTcOAf2cO9NwZ9TnIjOmnQNtC0r70CV0S1+uc9mSMmFH7gxk87Q==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + prosemirror-commands@1.5.2: + resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} + + prosemirror-dropcursor@1.8.1: + resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==} + + prosemirror-example-setup@1.2.2: + resolution: {integrity: sha512-pHJc656IgYm249RNp0eQaWNmnyWGk6OrzysWfYI4+NwE14HQ7YNYOlRBLErUS6uCAHIYJLNXf0/XCmf1OCtNbQ==} + + prosemirror-gapcursor@1.3.2: + resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} + + prosemirror-history@1.3.2: + resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==} + + prosemirror-inputrules@1.4.0: + resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} + + prosemirror-keymap@1.2.2: + resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} + + prosemirror-markdown@1.12.0: + resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==} + + prosemirror-menu@1.2.4: + resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} + + prosemirror-model@1.19.4: + resolution: {integrity: sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==} + + prosemirror-schema-list@1.3.0: + resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} + + prosemirror-state@1.4.3: + resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} + + prosemirror-transform@1.8.0: + resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==} + + prosemirror-view@1.33.1: + resolution: {integrity: sha512-62qkYgSJIkwIMMCpuGuPzc52DiK1Iod6TWoIMxP4ja6BTD4yO8kCUL64PZ/WhH/dJ9fW0CDO39FhH1EMyhUFEg==} + + protodef-validator@1.3.1: + resolution: {integrity: sha512-lZ5FWKZYR9xOjpMw1+EfZRfCjzNRQWPq+Dk+jki47Sikl2EeWEPnTfnJERwnU/EwFq6us+0zqHHzSsmLeYX+Lg==} + hasBin: true + + protodef@1.15.0: + resolution: {integrity: sha512-bZ2Omw8dT+DACjJHLrBWZlqN4MlT9g9oSpJDdkUAJOStUzgJp+Zn42FJfPUdwutUxjaxA0PftN0PDlNa2XbneA==} + engines: {node: '>=14'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-compare@2.5.1: + resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + + proxy-from-env@1.0.0: + resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + + pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + puppeteer-core@2.1.1: + resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} + engines: {node: '>=8.16.0'} + + qrcode.react@3.1.0: + resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} + peerDependencies: + react: ^18.2.0 + + qs@6.10.4: + resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} + engines: {node: '>=0.6'} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + quickselect@2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + + railroad-diagrams@1.0.0: + resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==} + + rambda@6.9.0: + resolution: {integrity: sha512-yosVdGg1hNGkXPzqGiOYNEpXKjEOxzUCg2rB0l+NKdyCaSf4z+i5ojbN0IqDSezMMf71YEglI+ZUTgTffn5afw==} + + ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + + randexp@0.4.6: + resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} + engines: {node: '>=0.12'} + + random-seed@0.3.0: + resolution: {integrity: sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==} + engines: {node: '>= 0.6.0'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + range@0.0.3: + resolution: {integrity: sha512-OxK2nY2bmeEB4NxoBraQIBOOeOIxoBvm6yt8MA1kLappgkG3SyLf173iOtT5woWycrtESDD2g0Nl2yt8YPoUnw==} + engines: {node: '>=0.8'} + + raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + rbush@3.0.1: + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-colorful@5.6.1: + resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} + peerDependencies: + react: ^18.2.0 + react-dom: '>=16.8.0' + + react-docgen-typescript@2.2.2: + resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} + peerDependencies: + typescript: '>= 4.3.x' + + react-docgen@6.0.0-alpha.3: + resolution: {integrity: sha512-DDLvB5EV9As1/zoUsct6Iz2Cupw9FObEGD3DMcIs3EDFIoSKyz8FZtoWj3Wj+oodrU4/NfidN0BL5yrapIcTSA==} + engines: {node: '>=12.0.0'} + hasBin: true + + react-dom@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + + react-element-to-jsx-string@15.0.0: + resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-inspector@6.0.2: + resolution: {integrity: sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==} + peerDependencies: + react: ^18.2.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.1.0: + resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + react-popper@2.3.0: + resolution: {integrity: sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==} + peerDependencies: + '@popperjs/core': ^2.0.0 + react: ^18.2.0 + react-dom: ^16.8.0 || ^17 || ^18 + + react-portal@4.2.1: + resolution: {integrity: sha512-fE9kOBagwmTXZ3YGRYb4gcMy+kSA+yLO0xnPankjRlfBv4uCpFXqKPfkpsGQQR15wkZ9EssnvTOl1yMzbkxhPQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0 + + react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + + react-remove-scroll-bar@2.3.4: + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.5.5: + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.1: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: ^18.2.0 + react-dom: '>=16.6.0' + + react-universal-interface@0.6.2: + resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} + peerDependencies: + react: ^18.2.0 + tslib: '*' + + react-use-measure@2.1.1: + resolution: {integrity: sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==} + peerDependencies: + react: ^18.2.0 + react-dom: '>=16.13' + + react-use@17.3.1: + resolution: {integrity: sha512-hs7+tS4rRm1QLHPfanLCqXIi632tP4V7Sai1ENUP2WTufU6am++tU9uSw9YrNCFqbABiEv0ndKU1XCUcfu2tXA==} + peerDependencies: + react: ^18.2.0 + react-dom: ^16.8.0 || ^17.0.0 + + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg-up@8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + read-pkg@6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + + readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readline@1.3.0: + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} + + recast@0.21.5: + resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} + engines: {node: '>= 4'} + + recast@0.23.4: + resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} + engines: {node: '>= 4'} + + redent@4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + + regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + remark-external-links@8.0.0: + resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-slug@6.1.0: + resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + + request-progress@3.0.0: + resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + hasBin: true + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rimraf@5.0.1: + resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==} + engines: {node: '>=14'} + hasBin: true + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rollup-plugin-terser@7.0.2: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + + rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + + rtl-css-js@1.16.1: + resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + + sat@0.9.0: + resolution: {integrity: sha512-mxdv5RZJO4tdMnUURGU3gAMcnDUEwcNJwE+lPO0/V+rBeDvFLH3wEZEOR0fH7cTN0zQaNxBEbHnyQL9DzupwQQ==} + + sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + + scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + + screenfull@5.2.0: + resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} + engines: {node: '>=0.10.0'} + + sdp@3.2.0: + resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==} + + secure-compare@3.0.1: + resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + + serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-harmonic-interval@1.0.1: + resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} + engines: {node: '>=6.9'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + sharp@0.30.7: + resolution: {integrity: sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==} + engines: {node: '>=12.13.0'} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + side-channel@1.0.5: + resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + engines: {node: '>= 0.4'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@3.1.1: + resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + skinview-utils@0.7.1: + resolution: {integrity: sha512-4eLrMqR526ehlZbsd8SuZ/CHpS9GiH0xUMoV+PYlJVi95ZFz5HJu7Spt5XYa72DRS7wgt5qquvHZf0XZJgmu9Q==} + + skinview3d@3.0.1: + resolution: {integrity: sha512-2LUSkzGxlZrTQelGT10jcW4TLiFTg5aZqXMEuqAFoWtk3qtaNu0qRFtwK5dN8zEXyKUJ3xlxah5eGtKY/NifQg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + socket.io-adapter@1.1.2: + resolution: {integrity: sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==} + + socket.io-adapter@2.5.2: + resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} + + socket.io-client@2.5.0: + resolution: {integrity: sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==} + + socket.io-client@4.7.2: + resolution: {integrity: sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==} + engines: {node: '>=10.0.0'} + + socket.io-parser@3.3.3: + resolution: {integrity: sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==} + + socket.io-parser@3.4.3: + resolution: {integrity: sha512-1rE4dZN3kCI/E5wixd393hmbqa78vVpkKmnEJhLeWoS/C5hbFYAbcSfnWoaVH43u9ToUVtzKjguxEZq+1XZfCQ==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@2.5.0: + resolution: {integrity: sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==} + + socket.io@4.7.2: + resolution: {integrity: sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==} + engines: {node: '>=10.2.0'} + + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + + socks@2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + + source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + space-separated-tokens@1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sshpk@1.17.0: + resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + stack-generator@2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + stacktrace-gps@3.1.2: + resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + + stacktrace-js@2.0.2: + resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + + stats-gl@1.0.5: + resolution: {integrity: sha512-XimMxvwnf1Qf5KwebhcoA34kcX+fWEkIl0QjNkCbu4IpoyDMMsOajExn7FIq5w569k45+LhmsuRlGSrsvmGdNw==} + + stats.js@0.17.0: + resolution: {integrity: sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.4.3: + resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} + + store2@2.14.2: + resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} + + storybook@7.4.6: + resolution: {integrity: sha512-YkFSpnR47j5zz7yElA+2axLjXN7K7TxDGJRHHlqXmG5iQ0PXzmjrj2RxMDKFz4Ybp/QjEUoJ4rx//ESEY0Nb5A==} + hasBin: true + + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + + stream-shift@1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + + strict-event-emitter-types@2.0.0: + resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.padend@3.1.4: + resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synchronous-promise@2.0.17: + resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} + + systeminformation@5.22.7: + resolution: {integrity: sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==} + engines: {node: '>=8.0.0'} + os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] + hasBin: true + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + + telejson@7.2.0: + resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + temp@0.8.4: + resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} + engines: {node: '>=6.0.0'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + + tempy@1.0.1: + resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} + engines: {node: '>=10'} + + terser@5.19.2: + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + three-stdlib@2.28.5: + resolution: {integrity: sha512-JdLMhkpT+1ZWeQPyKQNW1zqUwISI2hsUljS6u3vB9lp5EvwsayaAzGnbVeR35895udOF+zxcTiQY3psk+qqlxg==} + peerDependencies: + three: 0.154.0 + + three.meshline@1.4.0: + resolution: {integrity: sha512-A8IsiMrWP8zmHisGDAJ76ZD7t/dOF/oCe/FUKNE6Bu01ZYEx8N6IlU/1Plb2aOZtAuWM2A8s8qS3hvY0OFuvOw==} + + three@0.154.0: + resolution: {integrity: sha512-Uzz8C/5GesJzv8i+Y2prEMYUwodwZySPcNhuJUdsVMH2Yn4Nm8qlbQe6qRN5fOhg55XB0WiLfTPBxVHxpE60ug==} + + throttle-debounce@3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} + engines: {node: '>=10'} + + throttleit@1.0.0: + resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} + + through2@0.6.5: + resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timers-browserify@2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + + timm@1.7.1: + resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + + tiny-invariant@1.3.1: + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + + tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + + title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + + tmp@0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-array@0.1.4: + resolution: {integrity: sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tocbot@4.21.2: + resolution: {integrity: sha512-R5Muhi/TUu4i4snWVrMgNoXyJm2f8sJfdgIkQvqb+cuIXQEIMAiWGWgCgYXHqX4+XiS/Bnm7IYZ9Zy6NVe6lhw==} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + trim-newlines@4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} + engines: {node: '>=12'} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + + ts-api-utils@1.0.3: + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + + ts-easing@0.2.0: + resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} + + tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tsx@4.7.0: + resolution: {integrity: sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==} + engines: {node: '>=18.0.0'} + hasBin: true + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typed-emitter@1.4.0: + resolution: {integrity: sha512-weBmoo3HhpKGgLBOYwe8EB31CzDFuaK7CCL+axXhUYhn4jo6DSkHnbefboCF5i4DQ2aMFe0C/FdTWcPdObgHyg==} + + typed-emitter@2.1.0: + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@1.0.37: + resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + ufo@1.3.1: + resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} + + uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + + uint4@0.1.2: + resolution: {integrity: sha512-lhEx78gdTwFWG+mt6cWAZD/R6qrIj0TTBeH5xwyuDJyswLNlGe+KVlUPQ6+mx5Ld332pS0AMUTo9hIly7YsWxQ==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici@5.25.4: + resolution: {integrity: sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw==} + engines: {node: '>=14.0'} + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unidiff@1.0.2: + resolution: {integrity: sha512-2sbEzki5fBmjgAqoafwxRenfMcumMlmVAoJDwYJa3CI4ZVugkdR6qjTw5sVsl29/4JfBBXhWEAd5ars8nRdqXg==} + + unified@11.0.4: + resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + + union@0.5.0: + resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} + engines: {node: '>= 0.8.0'} + + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + unist-util-is@4.1.0: + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@3.1.1: + resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@2.0.3: + resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unplugin@1.5.0: + resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + + update-browserslist-db@1.0.11: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use-callback-ref@1.3.0: + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-deep-compare@1.1.0: + resolution: {integrity: sha512-6yY3zmKNCJ1jjIivfZMZMReZjr8e6iC6Uqtp701jvWJ6ejC/usXD+JjmslZDPJQgX8P4B1Oi5XSLHkOLeYSJsA==} + peerDependencies: + react: ^18.2.0 + + use-resize-observer@9.1.0: + resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} + peerDependencies: + react: ^18.2.0 + react-dom: 16.8.0 - 18 + + use-sidecar@1.1.2: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^18.2.0 + + use-typed-event-listener@4.0.2: + resolution: {integrity: sha512-AhjRw+qg5t7OWg7en2Q4XDCdi2iyhALFl71tITL3FeZqt/jD1Qa6KnbH/UolARtID1Gd0IElizbCgolv3ZbUFA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + peerDependencies: + react: ^18.2.0 + typescript: '>=4.1.2' + peerDependenciesMeta: + typescript: + optional: true + + utf8-byte-length@1.0.4: + resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} + + utif@2.0.1: + resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid-1345@1.0.2: + resolution: {integrity: sha512-bA5zYZui+3nwAc0s3VdGQGBfbVsJLVX7Np7ch2aqcEWFi5lsAEcmO3+lx3djM1npgpZI8KY2FITZ2uYTnYUYyw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-to-istanbul@9.1.3: + resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + valtio@1.11.2: + resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=16.8' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vec3@0.1.8: + resolution: {integrity: sha512-LfKrP625Bsg/Tj52YdYPsHmpsJuo+tc6fLxZxXjEo9k2xSspKlPvoYTHehykKhp1FvV9nm+XU3Ehej5/9tpDCg==} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + + vite-node@0.34.6: + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} + hasBin: true + + vite@4.4.10: + resolution: {integrity: sha512-TzIjiqx9BEXF8yzYdF2NTf1kFFbjMjUSV0LFZ3HyHoI3SGSPLnnFUKiIQtL3gl2AjHvMrprOvQ3amzaHgQlAxw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vite@4.5.3: + resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@0.34.6: + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + warning@4.0.3: + resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} + + watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + + webrtc-adapter@8.2.3: + resolution: {integrity: sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ==} + engines: {node: '>=6.0.0', npm: '>=3.10.0'} + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-fetch@3.6.18: + resolution: {integrity: sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workbox-background-sync@7.0.0: + resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} + + workbox-broadcast-update@7.0.0: + resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} + + workbox-build@7.0.0: + resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} + engines: {node: '>=16.0.0'} + + workbox-cacheable-response@7.0.0: + resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} + + workbox-core@7.0.0: + resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} + + workbox-expiration@7.0.0: + resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} + + workbox-google-analytics@7.0.0: + resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} + + workbox-navigation-preload@7.0.0: + resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} + + workbox-precaching@7.0.0: + resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} + + workbox-range-requests@7.0.0: + resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} + + workbox-recipes@7.0.0: + resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} + + workbox-routing@7.0.0: + resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} + + workbox-strategies@7.0.0: + resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} + + workbox-streams@7.0.0: + resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} + + workbox-sw@7.0.0: + resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} + + workbox-window@7.0.0: + resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@5.2.3: + resolution: {integrity: sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@6.2.2: + resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xml-parse-from-string@1.0.1: + resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} + + xml2js@0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlhttprequest-ssl@1.6.3: + resolution: {integrity: sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==} + engines: {node: '>=0.4.0'} + + xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + xxhash-wasm@0.4.2: + resolution: {integrity: sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.3.2: + resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} + engines: {node: '>= 14'} + + yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yeast@0.1.2: + resolution: {integrity: sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==} + + yggdrasil@1.7.0: + resolution: {integrity: sha512-QBIo5fiNd7688G3FqXXYGr36uyrYzczlNuzpWFy2zL3+R+3KT2lF+wFxm51synfA3l3z6IBiGOc1/EVXWCYY1Q==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + + zustand@3.6.5: + resolution: {integrity: sha512-/WfLJuXiEJimt61KGMHebrFBwckkCHGhAgVXTgPQHl6IMzjqm6MREb1OnDSnCRiSmRdhgdFCctceg6tSm79hiw==} + engines: {node: '>=12.7.0'} + peerDependencies: + react: ^18.2.0 + peerDependenciesMeta: + react: + optional: true + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@ampproject/remapping@2.2.1': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + + '@apideck/better-ajv-errors@0.3.6(ajv@8.12.0)': dependencies: ajv: 8.12.0 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 - dev: false - /@aw-web-design/x-default-browser@1.4.126: - resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} - hasBin: true + '@aw-web-design/x-default-browser@1.4.126': dependencies: default-browser-id: 3.0.0 - dev: true - /@azure/msal-common@14.9.0: - resolution: {integrity: sha512-yzBPRlWPnTBeixxLNI3BBIgF5/bHpbhoRVuuDBnYjCyWRavaPUsKAHUDYLqpGkBLDciA6TCc6GOxN4/S3WiSxg==} - engines: {node: '>=0.8.0'} + '@azure/msal-common@14.9.0': {} - /@azure/msal-node@2.7.0: - resolution: {integrity: sha512-wXD8LkUvHICeSWZydqg6o8Yvv+grlBEcmLGu+QEI4FcwFendbTEZrlSygnAXXSOCVaGAirWLchca35qrgpO6Jw==} - engines: {node: '>=16'} + '@azure/msal-node@2.7.0': dependencies: '@azure/msal-common': 14.9.0 jsonwebtoken: 9.0.2 uuid: 8.3.2 - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} + '@babel/code-frame@7.22.13': dependencies: '@babel/highlight': 7.22.13 chalk: 2.4.2 - /@babel/compat-data@7.22.9: - resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} - engines: {node: '>=6.9.0'} + '@babel/compat-data@7.22.9': {} - /@babel/core@7.22.11: - resolution: {integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==} - engines: {node: '>=6.9.0'} + '@babel/core@7.22.11': dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.13 @@ -489,30 +8690,22 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.22.10: - resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} - engines: {node: '>=6.9.0'} + '@babel/generator@7.22.10': dependencies: '@babel/types': 7.22.11 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.22.11 - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.10: - resolution: {integrity: sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.10': dependencies: '@babel/types': 7.22.11 - /@babel/helper-compilation-targets@7.22.10: - resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} - engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.22.10': dependencies: '@babel/compat-data': 7.22.9 '@babel/helper-validator-option': 7.22.5 @@ -520,11 +8713,7 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 @@ -537,11 +8726,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.11): - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 @@ -553,23 +8738,15 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - dev: true - /@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.22.11): - resolution: {integrity: sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 - /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.11): - resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-compilation-targets': 7.22.10 @@ -580,59 +8757,36 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-environment-visitor@7.22.20': {} - /@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} - engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.22.5': {} - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.22.5': dependencies: '@babel/template': 7.22.5 '@babel/types': 7.22.11 - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.22.11 - /@babel/helper-member-expression-to-functions@7.22.5: - resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.22.5': dependencies: '@babel/types': 7.22.11 - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.23.0': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.22.15': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/helper-module-imports@7.22.5: - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.22.5': dependencies: '@babel/types': 7.22.11 - /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11): - resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-environment-visitor': 7.22.5 @@ -641,11 +8795,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.5 - /@babel/helper-module-transforms@7.23.0(@babel/core@7.22.11): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.23.0(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-environment-visitor': 7.22.20 @@ -653,91 +8803,56 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.22.5': dependencies: '@babel/types': 7.22.11 - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.22.5': {} - /@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.22.11): - resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.22.10 - /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.11): - resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.22.9(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-member-expression-to-functions': 7.22.5 '@babel/helper-optimise-call-expression': 7.22.5 - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.22.11 - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: '@babel/types': 7.22.11 - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.22.6': dependencies: '@babel/types': 7.22.11 - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.22.5': {} - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-identifier@7.22.20': {} - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.5': {} - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-option@7.22.15': {} - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} - engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.22.5': {} - /@babel/helper-wrap-function@7.22.10: - resolution: {integrity: sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.22.10': dependencies: '@babel/helper-function-name': 7.22.5 '@babel/template': 7.22.5 '@babel/types': 7.22.11 - /@babel/helpers@7.22.11: - resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==} - engines: {node: '>=6.9.0'} + '@babel/helpers@7.22.11': dependencies: '@babel/template': 7.22.5 '@babel/traverse': 7.22.11 @@ -745,281 +8860,163 @@ packages: transitivePeerDependencies: - supports-color - /@babel/highlight@7.22.13: - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} - engines: {node: '>=6.9.0'} + '@babel/highlight@7.22.13': dependencies: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.22.13: - resolution: {integrity: sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/parser@7.22.13': dependencies: '@babel/types': 7.22.11 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.22.12(@babel/core@7.22.11) - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.11): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.11): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.11) - dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.11): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.11) - dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.11): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.11): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.11): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.11): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.11): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.11): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.11 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.11): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.11): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.11 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.11): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.11): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.11): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.11): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.11): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.11): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.11): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.11): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.11): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-async-generator-functions@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-generator-functions@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-environment-visitor': 7.22.5 @@ -1027,61 +9024,37 @@ packages: '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.11) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.11) - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.11) - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-block-scoping@7.22.10(@babel/core@7.22.11): - resolution: {integrity: sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoping@7.22.10(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 + '@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.11) - /@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.11): - resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 @@ -1094,181 +9067,107 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.5 - /@babel/plugin-transform-destructuring@7.22.10(@babel/core@7.22.11): - resolution: {integrity: sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.22.10(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.11) - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.11) - /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.11) - dev: true - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-compilation-targets': 7.22.10 '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.11) - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.11) - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-modules-commonjs@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 - /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.11): - resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 - dev: true - /@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-hoist-variables': 7.22.5 @@ -1276,60 +9175,36 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.11) - /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.11) - /@babel/plugin-transform-object-rest-spread@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-rest-spread@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/compat-data': 7.22.9 '@babel/core': 7.22.11 @@ -1338,61 +9213,37 @@ packages: '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.11) '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.11) - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.11) - /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.11) - /@babel/plugin-transform-optional-chaining@7.22.12(@babel/core@7.22.11): - resolution: {integrity: sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-chaining@7.22.12(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.11) - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.11): - resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 @@ -1400,157 +9251,90 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.11) - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.22.11): - resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.11): - resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.11) - dev: true - /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.22.11): - resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - /@babel/preset-env@7.22.10(@babel/core@7.22.11): - resolution: {integrity: sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/preset-env@7.22.10(@babel/core@7.22.11)': dependencies: '@babel/compat-data': 7.22.9 '@babel/core': 7.22.11 @@ -1636,33 +9420,21 @@ packages: transitivePeerDependencies: - supports-color - /@babel/preset-flow@7.22.15(@babel/core@7.22.11): - resolution: {integrity: sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/preset-flow@7.22.15(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.15 '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.11) - dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.11): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/types': 7.22.11 esutils: 2.0.3 - /@babel/preset-typescript@7.23.0(@babel/core@7.22.11): - resolution: {integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.23.0(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 @@ -1670,13 +9442,8 @@ packages: '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.11) '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.22.11) '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.11) - dev: true - /@babel/register@7.22.15(@babel/core@7.22.11): - resolution: {integrity: sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/register@7.22.15(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 clone-deep: 4.0.1 @@ -1684,28 +9451,20 @@ packages: make-dir: 2.1.0 pirates: 4.0.6 source-map-support: 0.5.21 - dev: true - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + '@babel/regjsgen@0.8.0': {} - /@babel/runtime@7.22.11: - resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==} - engines: {node: '>=6.9.0'} + '@babel/runtime@7.22.11': dependencies: regenerator-runtime: 0.14.0 - /@babel/template@7.22.5: - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} - engines: {node: '>=6.9.0'} + '@babel/template@7.22.5': dependencies: '@babel/code-frame': 7.22.13 '@babel/parser': 7.22.13 '@babel/types': 7.22.11 - /@babel/traverse@7.22.11: - resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==} - engines: {node: '>=6.9.0'} + '@babel/traverse@7.22.11': dependencies: '@babel/code-frame': 7.22.13 '@babel/generator': 7.22.10 @@ -1720,88 +9479,44 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types@7.22.11: - resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} - engines: {node: '>=6.9.0'} + '@babel/types@7.22.11': dependencies: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} - engines: {node: '>=6.9.0'} + '@babel/types@7.23.0': dependencies: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: true - /@base2/pretty-print-object@1.0.1: - resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} - dev: true + '@base2/pretty-print-object@1.0.1': {} - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + '@bcoe/v8-coverage@0.2.3': {} - /@cbor-extract/cbor-extract-darwin-arm64@2.2.0: - resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': optional: true - /@cbor-extract/cbor-extract-darwin-x64@2.2.0: - resolution: {integrity: sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false + '@cbor-extract/cbor-extract-darwin-x64@2.2.0': optional: true - /@cbor-extract/cbor-extract-linux-arm64@2.2.0: - resolution: {integrity: sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false + '@cbor-extract/cbor-extract-linux-arm64@2.2.0': optional: true - /@cbor-extract/cbor-extract-linux-arm@2.2.0: - resolution: {integrity: sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false + '@cbor-extract/cbor-extract-linux-arm@2.2.0': optional: true - /@cbor-extract/cbor-extract-linux-x64@2.2.0: - resolution: {integrity: sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false + '@cbor-extract/cbor-extract-linux-x64@2.2.0': optional: true - /@cbor-extract/cbor-extract-win32-x64@2.2.0: - resolution: {integrity: sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false + '@cbor-extract/cbor-extract-win32-x64@2.2.0': optional: true - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - requiresBuild: true + '@colors/colors@1.5.0': optional: true - /@cypress/request@2.88.12: - resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==} - engines: {node: '>= 6'} + '@cypress/request@2.88.12': dependencies: aws-sign2: 0.7.0 aws4: 1.12.0 @@ -1822,28 +9537,24 @@ packages: tunnel-agent: 0.6.0 uuid: 8.3.2 - /@cypress/xvfb@1.2.4(supports-color@8.1.1): - resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + '@cypress/xvfb@1.2.4(supports-color@8.1.1)': dependencies: debug: 3.2.7(supports-color@8.1.1) lodash.once: 4.1.1 transitivePeerDependencies: - supports-color - /@dimaka/interface@0.0.3-alpha.0(@babel/core@7.22.11)(@popperjs/core@2.11.8)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BzRUaLk+jhC1uvcix4SXRGhw7k39pldlvwtRT0NGFsuQt1uMV9vOhGMzm3rLorVXQ7vAmqcZk3Hy8oYlXKQoDw==} - peerDependencies: - react: ^18.2.0 + '@dimaka/interface@0.0.3-alpha.0(@babel/core@7.22.11)(@popperjs/core@2.11.8)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@emotion/css': 11.5.0(@babel/core@7.22.11) '@juggle/resize-observer': 3.3.1 animejs: 3.2.1 clsx: 1.1.1 react: 18.2.0 - react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react@18.2.0) - react-portal: 4.2.1(react-dom@18.2.0)(react@18.2.0) - react-use: 17.3.1(react-dom@18.2.0)(react@18.2.0) - react-use-measure: 2.1.1(react-dom@18.2.0)(react@18.2.0) + react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-portal: 4.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-use: 17.3.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-use-measure: 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) valtio: 1.11.2(@types/react@18.2.20)(react@18.2.0) zustand: 3.6.5(react@18.2.0) transitivePeerDependencies: @@ -1851,15 +9562,10 @@ packages: - '@popperjs/core' - '@types/react' - react-dom - dev: false - /@discoveryjs/json-ext@0.5.7: - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - dev: true + '@discoveryjs/json-ext@0.5.7': {} - /@emotion/babel-plugin@11.11.0: - resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + '@emotion/babel-plugin@11.11.0': dependencies: '@babel/helper-module-imports': 7.22.5 '@babel/runtime': 7.22.11 @@ -1872,675 +9578,258 @@ packages: find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 - dev: false - /@emotion/cache@11.11.0: - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + '@emotion/cache@11.11.0': dependencies: '@emotion/memoize': 0.8.1 '@emotion/sheet': 1.2.2 '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 stylis: 4.2.0 - dev: false - /@emotion/css@11.5.0(@babel/core@7.22.11): - resolution: {integrity: sha512-mqjz/3aqR9rp40M+pvwdKYWxlQK4Nj3cnNjo3Tx6SM14dSsEn7q/4W2/I7PlgG+mb27iITHugXuBIHH/QwUBVQ==} - peerDependencies: - '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true + '@emotion/css@11.5.0(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.22.11 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.2 '@emotion/sheet': 1.2.2 '@emotion/utils': 1.2.1 - dev: false + optionalDependencies: + '@babel/core': 7.22.11 - /@emotion/hash@0.9.1: - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - dev: false + '@emotion/hash@0.9.1': {} - /@emotion/memoize@0.8.1: - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - dev: false + '@emotion/memoize@0.8.1': {} - /@emotion/serialize@1.1.2: - resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} + '@emotion/serialize@1.1.2': dependencies: '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/unitless': 0.8.1 '@emotion/utils': 1.2.1 csstype: 3.1.2 - dev: false - /@emotion/sheet@1.2.2: - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - dev: false + '@emotion/sheet@1.2.2': {} - /@emotion/unitless@0.8.1: - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - dev: false + '@emotion/unitless@0.8.1': {} - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: ^18.2.0 + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0)': dependencies: react: 18.2.0 - dev: true - - /@emotion/utils@1.2.1: - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - dev: false - - /@emotion/weak-memoize@0.3.1: - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - dev: false - - /@esbuild/aix-ppc64@0.19.11: - resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - optional: true - - /@esbuild/android-arm64@0.19.11: - resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-arm64@0.19.3: - resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - optional: true - - /@esbuild/android-arm@0.19.11: - resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-arm@0.19.3: - resolution: {integrity: sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - optional: true - - /@esbuild/android-x64@0.19.11: - resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/android-x64@0.19.3: - resolution: {integrity: sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - optional: true - - /@esbuild/darwin-arm64@0.19.11: - resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@esbuild/darwin-arm64@0.19.3: - resolution: {integrity: sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - optional: true - - /@esbuild/darwin-x64@0.19.11: - resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@esbuild/darwin-x64@0.19.3: - resolution: {integrity: sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - optional: true - - /@esbuild/freebsd-arm64@0.19.11: - resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/freebsd-arm64@0.19.3: - resolution: {integrity: sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - optional: true - - /@esbuild/freebsd-x64@0.19.11: - resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/freebsd-x64@0.19.3: - resolution: {integrity: sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-arm64@0.19.11: - resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-arm64@0.19.3: - resolution: {integrity: sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-arm@0.19.11: - resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-arm@0.19.3: - resolution: {integrity: sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-ia32@0.19.11: - resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-ia32@0.19.3: - resolution: {integrity: sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-loong64@0.19.11: - resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-loong64@0.19.3: - resolution: {integrity: sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-mips64el@0.19.11: - resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-mips64el@0.19.3: - resolution: {integrity: sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-ppc64@0.19.11: - resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-ppc64@0.19.3: - resolution: {integrity: sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-riscv64@0.19.11: - resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-riscv64@0.19.3: - resolution: {integrity: sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-s390x@0.19.11: - resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-s390x@0.19.3: - resolution: {integrity: sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - optional: true - - /@esbuild/linux-x64@0.19.11: - resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/linux-x64@0.19.3: - resolution: {integrity: sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - optional: true - - /@esbuild/netbsd-x64@0.19.11: - resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/netbsd-x64@0.19.3: - resolution: {integrity: sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - optional: true - - /@esbuild/openbsd-x64@0.19.11: - resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/openbsd-x64@0.19.3: - resolution: {integrity: sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - optional: true - - /@esbuild/sunos-x64@0.19.11: - resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false - optional: true - - /@esbuild/sunos-x64@0.19.3: - resolution: {integrity: sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - optional: true - - /@esbuild/win32-arm64@0.19.11: - resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-arm64@0.19.3: - resolution: {integrity: sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - optional: true - - /@esbuild/win32-ia32@0.19.11: - resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-ia32@0.19.3: - resolution: {integrity: sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - optional: true - - /@esbuild/win32-x64@0.19.11: - resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@esbuild/win32-x64@0.19.3: - resolution: {integrity: sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@emotion/utils@1.2.1': {} + + '@emotion/weak-memoize@0.3.1': {} + + '@esbuild/aix-ppc64@0.19.11': + optional: true + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.19.11': + optional: true + + '@esbuild/android-arm64@0.19.3': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.19.11': + optional: true + + '@esbuild/android-arm@0.19.3': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.19.11': + optional: true + + '@esbuild/android-x64@0.19.3': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.19.11': + optional: true + + '@esbuild/darwin-arm64@0.19.3': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.19.11': + optional: true + + '@esbuild/darwin-x64@0.19.3': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.19.11': + optional: true + + '@esbuild/freebsd-arm64@0.19.3': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.19.11': + optional: true + + '@esbuild/freebsd-x64@0.19.3': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.19.11': + optional: true + + '@esbuild/linux-arm64@0.19.3': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.19.11': + optional: true + + '@esbuild/linux-arm@0.19.3': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.19.11': + optional: true + + '@esbuild/linux-ia32@0.19.3': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.19.11': + optional: true + + '@esbuild/linux-loong64@0.19.3': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.19.11': + optional: true + + '@esbuild/linux-mips64el@0.19.3': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.19.11': + optional: true + + '@esbuild/linux-ppc64@0.19.3': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.19.11': + optional: true + + '@esbuild/linux-riscv64@0.19.3': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.19.11': + optional: true + + '@esbuild/linux-s390x@0.19.3': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.19.11': + optional: true + + '@esbuild/linux-x64@0.19.3': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.19.11': + optional: true + + '@esbuild/netbsd-x64@0.19.3': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.19.11': + optional: true + + '@esbuild/openbsd-x64@0.19.3': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.19.11': + optional: true + + '@esbuild/sunos-x64@0.19.3': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.19.11': + optional: true + + '@esbuild/win32-arm64@0.19.3': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.19.11': + optional: true + + '@esbuild/win32-ia32@0.19.3': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@esbuild/win32-x64@0.19.11': + optional: true + + '@esbuild/win32-x64@0.19.3': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.50.0)': dependencies: eslint: 8.50.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.8.0: - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.8.0': {} - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.1.2': dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) @@ -2553,127 +9842,79 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.50.0: - resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.50.0': {} - /@fal-works/esbuild-plugin-global-externals@2.1.2: - resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} - dev: true + '@fal-works/esbuild-plugin-global-externals@2.1.2': {} - /@fastify/busboy@2.0.0: - resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} - engines: {node: '>=14'} - dev: true + '@fastify/busboy@2.0.0': {} - /@floating-ui/core@1.5.0: - resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} + '@floating-ui/core@1.5.0': dependencies: '@floating-ui/utils': 0.1.6 - /@floating-ui/dom@1.5.3: - resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + '@floating-ui/dom@1.5.3': dependencies: '@floating-ui/core': 1.5.0 '@floating-ui/utils': 0.1.6 - /@floating-ui/react-dom@2.0.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} - peerDependencies: - react: ^18.2.0 - react-dom: '>=16.8.0' + '@floating-ui/react-dom@2.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/dom': 1.5.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@floating-ui/react@0.26.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5gyJIJ2tZOPMgmZ/vEcVhdmQiy75b7LPO71sYIiDsxGcZ4hxLuygQWCuT0YXHqppt//Eese+L6t5KnX/gZ3tVA==} - peerDependencies: - react: ^18.2.0 - react-dom: '>=16.8.0' + '@floating-ui/react@0.26.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@floating-ui/utils': 0.1.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tabbable: 6.2.0 - dev: false - /@floating-ui/utils@0.1.6: - resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + '@floating-ui/utils@0.1.6': {} - /@gar/promisify@1.1.3: - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - requiresBuild: true - dev: false + '@gar/promisify@1.1.3': optional: true - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} - engines: {node: '>=10.10.0'} + '@humanwhocodes/config-array@0.11.11': dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true + '@humanwhocodes/object-schema@1.2.1': {} - /@iconify/types@2.0.0: - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - dev: false + '@iconify/types@2.0.0': {} - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 + string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 + strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true + wrap-ansi-cjs: wrap-ansi@7.0.0 - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 - dev: true - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + '@istanbuljs/schema@0.1.3': {} - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 - dev: true - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@29.7.0': dependencies: '@babel/core': 7.22.11 '@jest/types': 29.6.3 @@ -2692,11 +9933,8 @@ packages: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color - dev: true - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 @@ -2704,22 +9942,16 @@ packages: '@types/node': 20.8.0 '@types/yargs': 17.0.28 chalk: 4.1.2 - dev: true - /@jimp/bmp@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/bmp@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 bmp-js: 0.1.0 core-js: 3.32.1 - dev: false - /@jimp/core@0.10.3: - resolution: {integrity: sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==} + '@jimp/core@0.10.3': dependencies: '@babel/runtime': 7.22.11 '@jimp/utils': 0.10.3 @@ -2733,225 +9965,143 @@ packages: phin: 2.9.3 pixelmatch: 4.0.2 tinycolor2: 1.6.0 - dev: false - /@jimp/custom@0.10.3: - resolution: {integrity: sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==} + '@jimp/custom@0.10.3': dependencies: '@babel/runtime': 7.22.11 '@jimp/core': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/gif@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/gif@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 omggif: 1.0.10 - dev: false - /@jimp/jpeg@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/jpeg@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 jpeg-js: 0.3.7 - dev: false - /@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-blur@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-circle@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-circle@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-color@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 tinycolor2: 1.6.0 - dev: false - /@jimp/plugin-contain@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3)(@jimp/plugin-resize@0.10.3)(@jimp/plugin-scale@0.10.3): - resolution: {integrity: sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blit': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' - '@jimp/plugin-scale': '>=0.3.5' + '@jimp/plugin-contain@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-scale@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)))': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/plugin-blit': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-resize': 0.10.3(@jimp/custom@0.10.3) - '@jimp/plugin-scale': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3) + '@jimp/plugin-scale': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)) '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-cover@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-crop@0.10.3)(@jimp/plugin-resize@0.10.3)(@jimp/plugin-scale@0.10.3): - resolution: {integrity: sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-crop': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' - '@jimp/plugin-scale': '>=0.3.5' + '@jimp/plugin-cover@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-scale@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)))': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/plugin-crop': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-resize': 0.10.3(@jimp/custom@0.10.3) - '@jimp/plugin-scale': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3) + '@jimp/plugin-scale': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)) '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-displace@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-displace@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-dither@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-dither@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-fisheye@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-fisheye@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-flip@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-rotate@0.10.3): - resolution: {integrity: sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-rotate': '>=0.3.5' + '@jimp/plugin-flip@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-rotate@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)))': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 - '@jimp/plugin-rotate': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3)(@jimp/plugin-crop@0.10.3)(@jimp/plugin-resize@0.10.3) + '@jimp/plugin-rotate': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)) '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-gaussian@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-gaussian@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-invert@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-invert@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-mask@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-mask@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-normalize@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-normalize@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-print@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3): - resolution: {integrity: sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-print@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3))': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 @@ -2959,26 +10109,15 @@ packages: '@jimp/utils': 0.10.3 core-js: 3.32.1 load-bmfont: 1.4.1 - dev: false - /@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-rotate@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3)(@jimp/plugin-crop@0.10.3)(@jimp/plugin-resize@0.10.3): - resolution: {integrity: sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blit': '>=0.3.5' - '@jimp/plugin-crop': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-rotate@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 @@ -2987,27 +10126,16 @@ packages: '@jimp/plugin-resize': 0.10.3(@jimp/custom@0.10.3) '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-scale@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3): - resolution: {integrity: sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/plugin-resize': 0.10.3(@jimp/custom@0.10.3) '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-shadow@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blur@0.10.3)(@jimp/plugin-resize@0.10.3): - resolution: {integrity: sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-blur': '>=0.3.5' - '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-shadow@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blur@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 @@ -3015,14 +10143,8 @@ packages: '@jimp/plugin-resize': 0.10.3(@jimp/custom@0.10.3) '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugin-threshold@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-color@0.10.3)(@jimp/plugin-resize@0.10.3): - resolution: {integrity: sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==} - peerDependencies: - '@jimp/custom': '>=0.3.5' - '@jimp/plugin-color': '>=0.8.0' - '@jimp/plugin-resize': '>=0.8.0' + '@jimp/plugin-threshold@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-color@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 @@ -3030,12 +10152,8 @@ packages: '@jimp/plugin-resize': 0.10.3(@jimp/custom@0.10.3) '@jimp/utils': 0.10.3 core-js: 3.32.1 - dev: false - /@jimp/plugins@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/plugins@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 @@ -3043,54 +10161,42 @@ packages: '@jimp/plugin-blur': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-circle': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-color': 0.10.3(@jimp/custom@0.10.3) - '@jimp/plugin-contain': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3)(@jimp/plugin-resize@0.10.3)(@jimp/plugin-scale@0.10.3) - '@jimp/plugin-cover': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-crop@0.10.3)(@jimp/plugin-resize@0.10.3)(@jimp/plugin-scale@0.10.3) + '@jimp/plugin-contain': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-scale@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))) + '@jimp/plugin-cover': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-scale@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))) '@jimp/plugin-crop': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-displace': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-dither': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-fisheye': 0.10.3(@jimp/custom@0.10.3) - '@jimp/plugin-flip': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-rotate@0.10.3) + '@jimp/plugin-flip': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-rotate@0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3))) '@jimp/plugin-gaussian': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-invert': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-mask': 0.10.3(@jimp/custom@0.10.3) '@jimp/plugin-normalize': 0.10.3(@jimp/custom@0.10.3) - '@jimp/plugin-print': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3) + '@jimp/plugin-print': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3)) '@jimp/plugin-resize': 0.10.3(@jimp/custom@0.10.3) - '@jimp/plugin-rotate': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3)(@jimp/plugin-crop@0.10.3)(@jimp/plugin-resize@0.10.3) - '@jimp/plugin-scale': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3) - '@jimp/plugin-shadow': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blur@0.10.3)(@jimp/plugin-resize@0.10.3) - '@jimp/plugin-threshold': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-color@0.10.3)(@jimp/plugin-resize@0.10.3) + '@jimp/plugin-rotate': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blit@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-crop@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)) + '@jimp/plugin-scale': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)) + '@jimp/plugin-shadow': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-blur@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)) + '@jimp/plugin-threshold': 0.10.3(@jimp/custom@0.10.3)(@jimp/plugin-color@0.10.3(@jimp/custom@0.10.3))(@jimp/plugin-resize@0.10.3(@jimp/custom@0.10.3)) core-js: 3.32.1 timm: 1.7.1 - dev: false - /@jimp/png@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/png@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 '@jimp/utils': 0.10.3 core-js: 3.32.1 pngjs: 3.4.0 - dev: false - /@jimp/tiff@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/tiff@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 core-js: 3.32.1 utif: 2.0.1 - dev: false - /@jimp/types@0.10.3(@jimp/custom@0.10.3): - resolution: {integrity: sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==} - peerDependencies: - '@jimp/custom': '>=0.3.5' + '@jimp/types@0.10.3(@jimp/custom@0.10.3)': dependencies: '@babel/runtime': 7.22.11 '@jimp/bmp': 0.10.3(@jimp/custom@0.10.3) @@ -3101,88 +10207,61 @@ packages: '@jimp/tiff': 0.10.3(@jimp/custom@0.10.3) core-js: 3.32.1 timm: 1.7.1 - dev: false - /@jimp/utils@0.10.3: - resolution: {integrity: sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==} + '@jimp/utils@0.10.3': dependencies: '@babel/runtime': 7.22.11 core-js: 3.32.1 regenerator-runtime: 0.13.11 - dev: false - /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.2.2)(vite@4.5.3): - resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==} - peerDependencies: - typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 - peerDependenciesMeta: - typescript: - optional: true + '@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.2.2) + vite: 4.5.3(@types/node@20.8.0)(terser@5.19.2) + optionalDependencies: typescript: 5.2.2 - vite: 4.5.3 - dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.3': dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.19 - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.1': {} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.1.2': {} - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + '@jridgewell/source-map@0.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 - dev: false - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.4.15': {} - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + '@jridgewell/trace-mapping@0.3.19': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - /@jspm/core@2.0.1: - resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} - dev: false + '@jspm/core@2.0.1': {} - /@juggle/resize-observer@3.3.1: - resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==} + '@juggle/resize-observer@3.3.1': {} - /@lit-labs/ssr-dom-shim@1.1.1: - resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==} + '@lit-labs/ssr-dom-shim@1.1.1': {} - /@lit/reactive-element@1.6.3: - resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + '@lit/reactive-element@1.6.3': dependencies: '@lit-labs/ssr-dom-shim': 1.1.1 - /@mapbox/node-pre-gyp@1.0.11: - resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} - hasBin: true + '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': dependencies: detect-libc: 2.0.2 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 @@ -3191,706 +10270,394 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: false - /@mdx-js/react@2.3.0(react@18.2.0): - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} - peerDependencies: - react: ^18.2.0 + '@mdx-js/react@2.3.0(react@18.2.0)': dependencies: '@types/mdx': 2.0.8 '@types/react': 18.2.20 react: 18.2.0 - dev: true - /@msgpack/msgpack@2.8.0: - resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==} - engines: {node: '>= 10'} - dev: false + '@msgpack/msgpack@2.8.0': {} - /@ndelangen/get-tarball@3.0.9: - resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} + '@ndelangen/get-tarball@3.0.9': dependencies: gunzip-maybe: 1.4.2 pump: 3.0.0 tar-fs: 2.1.1 - dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true - /@npmcli/fs@2.1.2: - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 semver: 7.6.0 - dev: false optional: true - /@npmcli/move-file@2.0.1: - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs - requiresBuild: true + '@npmcli/move-file@2.0.1': dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 - dev: false optional: true - /@nxg-org/mineflayer-auto-jump@0.7.7: - resolution: {integrity: sha512-50FYsz5rxBuLzOh7wqmg9iN9zdVGD+QjuaPcw/mD7q8Bq6Bq+o1/DfXfpoNGIHaDag80q6FJSpc73MI3Scid8g==} + '@nxg-org/mineflayer-auto-jump@0.7.7': dependencies: '@nxg-org/mineflayer-physics-util': 1.5.8 strict-event-emitter-types: 2.0.0 - dev: false - /@nxg-org/mineflayer-physics-util@1.5.8: - resolution: {integrity: sha512-KmCkAqpUo8BbuRdIBs6+V2hWHehz++PRz3lRwIsb47CuG0u4sgLYh37RY3ifAznC6uWvmPK+q3B4ZXwJzPy1MQ==} + '@nxg-org/mineflayer-physics-util@1.5.8': dependencies: '@nxg-org/mineflayer-util-plugin': 1.8.3 - dev: false - /@nxg-org/mineflayer-tracker@1.2.1: - resolution: {integrity: sha512-SI1ffF8zvg3/ZNE021Ja2W0FZPN+WbQDZf8yFqOcXtPRXAtM9W6HvoACdzXep8BZid7WYgYLIgjKpB+9RqvCNQ==} + '@nxg-org/mineflayer-tracker@1.2.1': dependencies: '@nxg-org/mineflayer-trajectories': 1.1.1 '@nxg-org/mineflayer-util-plugin': 1.8.3 - dev: false - /@nxg-org/mineflayer-trajectories@1.1.1: - resolution: {integrity: sha512-X103KXlX8+L3uMeK4jQxMUdTizv01sQRSfBizAF/iOAdfQZehRLXr3CYKeJzfwPYGLN0X0JCl++cMEcZVn4vbg==} + '@nxg-org/mineflayer-trajectories@1.1.1': dependencies: '@nxg-org/mineflayer-util-plugin': 1.8.3 - dev: false - /@nxg-org/mineflayer-util-plugin@1.8.3: - resolution: {integrity: sha512-YlIbzCDs9822xuvmYlD0vXZz0iye9buqp9NK4nNn15gYybdqBtC/YxK6BLqXtwNohZCKoZdKgei7Xd5Bt2/rUg==} - dev: false + '@nxg-org/mineflayer-util-plugin@1.8.3': {} - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true + '@pkgjs/parseargs@0.11.0': optional: true - /@popperjs/core@2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false + '@popperjs/core@2.11.8': {} - /@radix-ui/number@1.0.1: - resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + '@radix-ui/number@1.0.1': dependencies: '@babel/runtime': 7.22.11 - dev: true - /@radix-ui/primitive@1.0.1: - resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + '@radix-ui/primitive@1.0.1': dependencies: '@babel/runtime': 7.22.11 - dev: true - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-context@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-context@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-direction@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-direction@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-id@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-id@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-select@1.2.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-select@1.2.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.2.20)(react@18.2.0) - dev: true - - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.22.11 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + optionalDependencies: '@types/react': 18.2.20 '@types/react-dom': 18.2.7 + + '@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.22.11 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-slot@1.0.2(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-slot@1.0.2(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true + optionalDependencies: + '@types/react': 18.2.20 + '@types/react-dom': 18.2.7 - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-previous@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-rect@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} - peerDependencies: - '@types/react': '*' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-size@1.0.1(@types/react@18.2.20)(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.20)(react@18.2.0) - '@types/react': 18.2.20 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^18.2.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.22.11 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: '@types/react': 18.2.20 '@types/react-dom': 18.2.7 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/rect@1.0.1: - resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + '@radix-ui/rect@1.0.1': dependencies: '@babel/runtime': 7.22.11 - dev: true - /@react-oauth/google@0.12.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qagsy22t+7UdkYAiT5ZhfM4StXi9PPNvw0zuwNmabrWyMKddczMtBIOARflbaIj+wHiQjnMAsZmzsUYuXeyoSg==} - peerDependencies: - react: ^18.2.0 - react-dom: '>=16.8.0' + '@react-oauth/google@0.12.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /@rollup/plugin-babel@5.3.1(@babel/core@7.22.11)(rollup@2.79.1): - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true + '@rollup/plugin-babel@5.3.1(@babel/core@7.22.11)(@types/babel__core@7.20.2)(rollup@2.79.1)': dependencies: '@babel/core': 7.22.11 '@babel/helper-module-imports': 7.22.5 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 - dev: false + optionalDependencies: + '@types/babel__core': 7.20.2 - /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 + '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1)': dependencies: '@rollup/pluginutils': 3.1.0(rollup@2.79.1) '@types/resolve': 1.17.1 @@ -3899,162 +10666,108 @@ packages: is-module: 1.0.0 resolve: 1.22.4 rollup: 2.79.1 - dev: false - /@rollup/plugin-replace@2.4.2(rollup@2.79.1): - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 + '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': dependencies: '@rollup/pluginutils': 3.1.0(rollup@2.79.1) magic-string: 0.25.9 rollup: 2.79.1 - dev: false - /@rollup/pluginutils@3.1.0(rollup@2.79.1): - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 + '@rollup/pluginutils@3.1.0(rollup@2.79.1)': dependencies: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 rollup: 2.79.1 - dev: false - /@rollup/pluginutils@5.0.5(rollup@2.79.1): - resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rollup/pluginutils@5.0.5(rollup@2.79.1)': dependencies: '@types/estree': 1.0.2 estree-walker: 2.0.2 picomatch: 2.3.1 + optionalDependencies: rollup: 2.79.1 - dev: true - /@rushstack/eslint-patch@1.4.0: - resolution: {integrity: sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==} - dev: true + '@rushstack/eslint-patch@1.4.0': {} - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + '@sinclair/typebox@0.27.8': {} - /@socket.io/component-emitter@3.1.0: - resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} - dev: false + '@socket.io/component-emitter@3.1.0': {} - /@storybook/addon-actions@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-SsqZr3js5NinKPnC8AeNI7Ij+Q6fIl9tRdRmSulEgjksjOg7E5S1/Wsn5Bb2CCgj7MaX6VxGyC7s3XskQtDiIQ==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@storybook/addon-actions@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 7.4.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 dequal: 2.0.3 lodash: 4.17.21 polished: 4.2.2 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) react-inspector: 6.0.2(react@18.2.0) telejson: 7.2.0 ts-dedent: 2.2.0 uuid: 9.0.1 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: true - /@storybook/addon-backgrounds@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-+LHTZB/ZYMAzkyD5ZxSriBsqmsrvIaW/Nnd/BeuXGbkrVKKqM0qAKiFZAfjc2WchA1piVNy0/1Rsf+kuYCEiJw==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@storybook/addon-backgrounds@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 7.4.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 memoizerific: 1.11.3 + ts-dedent: 2.2.0 + optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: true - /@storybook/addon-controls@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4lq3sycEUIsK8SUWDYc60QgF4vV9FZZ3lDr6M7j2W9bOnvGw49d2fbdlnq+bX1ZprZZ9VgglQpBAorQB3BXZRw==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@storybook/addon-controls@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/blocks': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/blocks': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 7.4.6(encoding@0.1.13) '@storybook/core-events': 7.4.6 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 7.4.6 '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 lodash: 4.17.21 + ts-dedent: 2.2.0 + optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@types/react-dom' - encoding - supports-color - dev: true - /@storybook/addon-docs@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-dLaub+XWFq4hChw+xfuF9yYg0Txp77FUawKoAigccfjWXx+OOhRV3XTuAcknpXkYq94GWynHgUFXosXT9kbDNA==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/addon-docs@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@jest/transform': 29.7.0 '@mdx-js/react': 2.3.0(react@18.2.0) - '@storybook/blocks': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/blocks': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/csf-plugin': 7.4.6 '@storybook/csf-tools': 7.4.6 '@storybook/global': 5.0.0 @@ -4062,8 +10775,8 @@ packages: '@storybook/node-logger': 7.4.6 '@storybook/postinstall': 7.4.6 '@storybook/preview-api': 7.4.6 - '@storybook/react-dom-shim': 7.4.6(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/react-dom-shim': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 fs-extra: 11.1.1 react: 18.2.0 @@ -4076,25 +10789,20 @@ packages: - '@types/react-dom' - encoding - supports-color - dev: true - /@storybook/addon-essentials@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-dWodufrt71TK7ELkeIvVae/x4PzECUlbOm57Iqqt4yQCyR291CgvI4PjeB8un2HbpcXCGZ+N/Oj3YkytvzBi4A==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/addon-essentials@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/addon-actions': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-backgrounds': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-controls': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-docs': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-actions': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-backgrounds': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-controls': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-docs': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-highlight': 7.4.6 - '@storybook/addon-measure': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-outline': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-toolbars': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-viewport': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.4.6 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-measure': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-outline': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-toolbars': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-viewport': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 7.4.6(encoding@0.1.13) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 7.4.6 '@storybook/preview-api': 7.4.6 react: 18.2.0 @@ -4105,159 +10813,107 @@ packages: - '@types/react-dom' - encoding - supports-color - dev: true - /@storybook/addon-highlight@7.4.6: - resolution: {integrity: sha512-zCufxxD2KS5VwczxfkcBxe1oR/juTTn2H1Qm8kYvWCJQx3UxzX0+G9cwafbpV7eivqaufLweEwROkH+0KjAtkQ==} + '@storybook/addon-highlight@7.4.6': dependencies: '@storybook/core-events': 7.4.6 '@storybook/global': 5.0.0 '@storybook/preview-api': 7.4.6 - dev: true - /@storybook/addon-links@7.4.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BPygElZKX+CPI9Se6GJNk1dYc5oxuhA+vHigO1tBqhiM6VkHyFP3cvezJNQvpNYhkUnu3cxnZXb3UJnlRbPY3g==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@storybook/addon-links@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 7.4.6 '@storybook/core-events': 7.4.6 '@storybook/csf': 0.1.1 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.4.6 - '@storybook/router': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/router': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 prop-types: 15.8.1 + ts-dedent: 2.2.0 + optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - ts-dedent: 2.2.0 - dev: true - /@storybook/addon-measure@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nCymMLaHnxv8TE3yEM1A9Tulb1NuRXRNmtsdHTkjv7P1aWCxZo8A/GZaottKe/GLT8jSRjZ+dnpYWrbAhw6wTQ==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@storybook/addon-measure@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 7.4.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.4.6 '@storybook/types': 7.4.6 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) tiny-invariant: 1.3.1 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: true - /@storybook/addon-outline@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-errNUblRVDLpuEaHQPr/nsrnsUkD2ARmXawkRvizgDWLIDMDJYjTON3MUCaVx3x+hlZ3I6X//G5TVcma8tCc8A==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@storybook/addon-outline@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 7.4.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.4.6 '@storybook/types': 7.4.6 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - dev: true - - /@storybook/addon-toolbars@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-L9m2FBcKeteGq7qIYsMJr0LEfiH7Wdrv5IDcldZTn68eZUJTh1p4GdJZcOmzX1P5IFRr76hpu03iWsNlWQjpbQ==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: true - /@storybook/addon-viewport@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-INDtk54j7bi7NgxMfd2ATmbA0J7nAd6X8itMkLIyPuPJtx8bYHPDORyemDOd0AojgmAdTOAyUtDYdI/PFeo4Cw==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@storybook/addon-toolbars@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + + '@storybook/addon-viewport@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 7.4.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) memoizerific: 1.11.3 prop-types: 15.8.1 + optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: true - /@storybook/blocks@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HxBSAeOiTZW2jbHQlo1upRWFgoMsaAyKijUFf5MwwMNIesXCuuTGZDJ3xTABwAVLK2qC9Ektfbo0CZCiPVuDRQ==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/blocks@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/channels': 7.4.6 '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 7.4.6 '@storybook/csf': 0.1.1 - '@storybook/docs-tools': 7.4.6 + '@storybook/docs-tools': 7.4.6(encoding@0.1.13) '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 '@types/lodash': 4.14.199 color-convert: 2.0.1 @@ -4267,7 +10923,7 @@ packages: memoizerific: 1.11.3 polished: 4.2.2 react: 18.2.0 - react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0) + react-colorful: 5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-dom: 18.2.0(react@18.2.0) telejson: 7.2.0 tocbot: 4.21.2 @@ -4278,13 +10934,11 @@ packages: - '@types/react-dom' - encoding - supports-color - dev: true - /@storybook/builder-manager@7.4.6: - resolution: {integrity: sha512-zylZCD2rmyLOOFBFmUgtJg6UNUKmRNgXiig1XApzS2TkIbTZP827DsVEUl0ey/lskCe0uArkrEBR6ICba8p/Rw==} + '@storybook/builder-manager@7.4.6(encoding@0.1.13)': dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.4.6 + '@storybook/core-common': 7.4.6(encoding@0.1.13) '@storybook/manager': 7.4.6 '@storybook/node-logger': 7.4.6 '@types/ejs': 3.1.3 @@ -4302,26 +10956,12 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/builder-vite@7.4.6(typescript@5.2.2)(vite@4.5.3): - resolution: {integrity: sha512-xV9STYK+TkqWWTf2ydm6jx+7P70fjD2UPd1XTUw08uKszIjhuuxk+bG/OF5R1E25mPunAKXm6kBFh351AKejBg==} - peerDependencies: - '@preact/preset-vite': '*' - typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 - vite-plugin-glimmerx: '*' - peerDependenciesMeta: - '@preact/preset-vite': - optional: true - typescript: - optional: true - vite-plugin-glimmerx: - optional: true + '@storybook/builder-vite@7.4.6(encoding@0.1.13)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: '@storybook/channels': 7.4.6 '@storybook/client-logger': 7.4.6 - '@storybook/core-common': 7.4.6 + '@storybook/core-common': 7.4.6(encoding@0.1.13) '@storybook/csf-plugin': 7.4.6 '@storybook/mdx2-csf': 1.1.0 '@storybook/node-logger': 7.4.6 @@ -4338,15 +10978,14 @@ packages: remark-external-links: 8.0.0 remark-slug: 6.1.0 rollup: 3.29.4 + vite: 4.5.3(@types/node@20.8.0)(terser@5.19.2) + optionalDependencies: typescript: 5.2.2 - vite: 4.5.3 transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/channels@7.4.6: - resolution: {integrity: sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==} + '@storybook/channels@7.4.6': dependencies: '@storybook/client-logger': 7.4.6 '@storybook/core-events': 7.4.6 @@ -4354,23 +10993,20 @@ packages: qs: 6.11.2 telejson: 7.2.0 tiny-invariant: 1.3.1 - dev: true - /@storybook/cli@7.4.6: - resolution: {integrity: sha512-rRwaH8pOL+FHz/pJMEkNpMH2xvZvWsrl7obBYw26NQiHmiVSAkfHJicndSN1mwc+p5w+9iXthrgzbLtSAOSvkA==} - hasBin: true + '@storybook/cli@7.4.6(encoding@0.1.13)': dependencies: '@babel/core': 7.22.11 '@babel/preset-env': 7.22.10(@babel/core@7.22.11) '@babel/types': 7.22.11 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 7.4.6 - '@storybook/core-common': 7.4.6 + '@storybook/core-common': 7.4.6(encoding@0.1.13) '@storybook/core-events': 7.4.6 - '@storybook/core-server': 7.4.6 + '@storybook/core-server': 7.4.6(encoding@0.1.13) '@storybook/csf-tools': 7.4.6 '@storybook/node-logger': 7.4.6 - '@storybook/telemetry': 7.4.6 + '@storybook/telemetry': 7.4.6(encoding@0.1.13) '@storybook/types': 7.4.6 '@types/semver': 7.5.3 '@yarnpkg/fslib': 2.10.3 @@ -4388,7 +11024,7 @@ packages: get-port: 5.1.1 giget: 1.1.3 globby: 11.1.0 - jscodeshift: 0.14.0(@babel/preset-env@7.22.10) + jscodeshift: 0.14.0(@babel/preset-env@7.22.10(@babel/core@7.22.11)) leven: 3.1.0 ora: 5.4.1 prettier: 2.8.8 @@ -4406,16 +11042,12 @@ packages: - encoding - supports-color - utf-8-validate - dev: true - /@storybook/client-logger@7.4.6: - resolution: {integrity: sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==} + '@storybook/client-logger@7.4.6': dependencies: '@storybook/global': 5.0.0 - dev: true - /@storybook/codemod@7.4.6: - resolution: {integrity: sha512-lxmwEpwksCaAq96APN2YlooSDfKjJ1vKzN5Ni2EqQzf2TEXl7XQjLacHd7OOaII1kfsy+D5gNG4N5wBo7Ub30g==} + '@storybook/codemod@7.4.6': dependencies: '@babel/core': 7.22.11 '@babel/preset-env': 7.22.10(@babel/core@7.22.11) @@ -4427,46 +11059,37 @@ packages: '@types/cross-spawn': 6.0.3 cross-spawn: 7.0.3 globby: 11.1.0 - jscodeshift: 0.14.0(@babel/preset-env@7.22.10) + jscodeshift: 0.14.0(@babel/preset-env@7.22.10(@babel/core@7.22.11)) lodash: 4.17.21 prettier: 2.8.8 recast: 0.23.4 transitivePeerDependencies: - supports-color - dev: true - /@storybook/components@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nIRBhewAgrJJVafyCzuaLx1l+YOfvvD5dOZ0JxZsxJsefOdw1jFpUqUZ5fIpQ2moyvrR0mAUFw378rBfMdHz5Q==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/components@7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 7.4.6 '@storybook/csf': 0.1.1 '@storybook/global': 5.0.0 - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) + use-resize-observer: 9.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) util-deprecate: 1.0.2 transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: true - /@storybook/core-client@7.4.6: - resolution: {integrity: sha512-tfgxAHeCvMcs6DsVgtb4hQSDaCHeAPJOsoyhb47eDQfk4OmxzriM0qWucJV5DePSMi+KutX/rN2u0JxfOuN68g==} + '@storybook/core-client@7.4.6': dependencies: '@storybook/client-logger': 7.4.6 '@storybook/preview-api': 7.4.6 - dev: true - /@storybook/core-common@7.4.6: - resolution: {integrity: sha512-05MJFmOM86qvTLtgDskokIFz9txe0Lbhq4L3by1FtF0GwgH+p+W6I94KI7c6ANER+kVZkXQZhiRzwBFnVTW+Cg==} + '@storybook/core-common@7.4.6(encoding@0.1.13)': dependencies: '@storybook/core-events': 7.4.6 '@storybook/node-logger': 7.4.6 @@ -4485,7 +11108,7 @@ packages: glob: 10.3.3 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 @@ -4494,22 +11117,18 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/core-events@7.4.6: - resolution: {integrity: sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==} + '@storybook/core-events@7.4.6': dependencies: ts-dedent: 2.2.0 - dev: true - /@storybook/core-server@7.4.6: - resolution: {integrity: sha512-jqmRTGCJ1W0WReImivkisPVaLFT5sjtLnFoAk0feHp6QS5j7EYOPN7CYzliyQmARWTLUEXOVaFf3VD6nJZQhJQ==} + '@storybook/core-server@7.4.6(encoding@0.1.13)': dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.4.6 + '@storybook/builder-manager': 7.4.6(encoding@0.1.13) '@storybook/channels': 7.4.6 - '@storybook/core-common': 7.4.6 + '@storybook/core-common': 7.4.6(encoding@0.1.13) '@storybook/core-events': 7.4.6 '@storybook/csf': 0.1.1 '@storybook/csf-tools': 7.4.6 @@ -4518,7 +11137,7 @@ packages: '@storybook/manager': 7.4.6 '@storybook/node-logger': 7.4.6 '@storybook/preview-api': 7.4.6 - '@storybook/telemetry': 7.4.6 + '@storybook/telemetry': 7.4.6(encoding@0.1.13) '@storybook/types': 7.4.6 '@types/detect-port': 1.3.3 '@types/node': 16.18.58 @@ -4551,19 +11170,15 @@ packages: - encoding - supports-color - utf-8-validate - dev: true - /@storybook/csf-plugin@7.4.6: - resolution: {integrity: sha512-yi7Qa4NSqKOyiJTWCxlB0ih2ijXq6oY5qZKW6MuMMBP14xJNRGLbH5KabpfXgN2T7YECcOWG1uWaGj2veJb1KA==} + '@storybook/csf-plugin@7.4.6': dependencies: '@storybook/csf-tools': 7.4.6 unplugin: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /@storybook/csf-tools@7.4.6: - resolution: {integrity: sha512-ocKpcIUtTBy6hlLY34RUFQyX403cWpB2gGfqvkHbpGe2BQj7EyV0zpWnjsfVxvw+M9OWlCdxHWDOPUgXM33ELw==} + '@storybook/csf-tools@7.4.6': dependencies: '@babel/generator': 7.22.10 '@babel/parser': 7.22.13 @@ -4576,22 +11191,16 @@ packages: ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - /@storybook/csf@0.1.1: - resolution: {integrity: sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==} + '@storybook/csf@0.1.1': dependencies: type-fest: 2.19.0 - dev: true - /@storybook/docs-mdx@0.1.0: - resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} - dev: true + '@storybook/docs-mdx@0.1.0': {} - /@storybook/docs-tools@7.4.6: - resolution: {integrity: sha512-nZj1L/8WwKWWJ41FW4MaKGajZUtrhnr9UwflRCkQJaWhAKmDfOb5M5TqI93uCOULpFPOm5wpoMBz2IHInQ2Lrg==} + '@storybook/docs-tools@7.4.6(encoding@0.1.13)': dependencies: - '@storybook/core-common': 7.4.6 + '@storybook/core-common': 7.4.6(encoding@0.1.13) '@storybook/preview-api': 7.4.6 '@storybook/types': 7.4.6 '@types/doctrine': 0.0.3 @@ -4600,25 +11209,18 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/global@5.0.0: - resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - dev: true + '@storybook/global@5.0.0': {} - /@storybook/manager-api@7.4.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-inrm3DIbCp8wjXSN/wK6e6i2ysQ/IEmtC7IN0OJ7vdrp+USCooPT448SQTUmVctUGCFmOU3fxXByq8g77oIi7w==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/manager-api@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/channels': 7.4.6 '@storybook/client-logger': 7.4.6 '@storybook/core-events': 7.4.6 '@storybook/csf': 0.1.1 '@storybook/global': 5.0.0 - '@storybook/router': 7.4.6(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/router': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 dequal: 2.0.3 lodash: 4.17.21 @@ -4629,26 +11231,16 @@ packages: store2: 2.14.2 telejson: 7.2.0 ts-dedent: 2.2.0 - dev: true - /@storybook/manager@7.4.6: - resolution: {integrity: sha512-kA1hUDxpn1i2SO9OinvLvVXDeL4xgJkModp+pbE8IXv4NJWReNq1ecMeQCzPLS3Sil2gnrullQ9uYXsnZ9bxxA==} - dev: true + '@storybook/manager@7.4.6': {} - /@storybook/mdx2-csf@1.1.0: - resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} - dev: true + '@storybook/mdx2-csf@1.1.0': {} - /@storybook/node-logger@7.4.6: - resolution: {integrity: sha512-djZb310Q27GviDug1XBv0jOEDLCiwr4hhDE0aifCEKZpfNCi/EaP31nbWimFzZwxu4hE/YAPWExzScruR1zw9Q==} - dev: true + '@storybook/node-logger@7.4.6': {} - /@storybook/postinstall@7.4.6: - resolution: {integrity: sha512-TqI5BucPAGRWrkh55BYiG2/gHLFtC0In4cuu0GsUzB/1jc4i51npLRorCwhmT7r7YliGl5F7JaP0Bni/qHN3Lg==} - dev: true + '@storybook/postinstall@7.4.6': {} - /@storybook/preview-api@7.4.6: - resolution: {integrity: sha512-byUS/Opt3ytWD4cWz3sNEKw5Yks8MkQgRN+GDSyIomaEAQkLAM0rchPC0MYjwCeUSecV7IIQweNX5RbV4a34BA==} + '@storybook/preview-api@7.4.6': dependencies: '@storybook/channels': 7.4.6 '@storybook/client-logger': 7.4.6 @@ -4664,41 +11256,27 @@ packages: synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - dev: true - /@storybook/preview@7.4.6: - resolution: {integrity: sha512-2RPXusJ4CTDrIipIKKvbotD7fP0+8VzoFjImunflIrzN9rni+2rq5eMjqlXAaB+77w064zIR4uDUzI9fxsMDeQ==} - dev: true + '@storybook/preview@7.4.6': {} - /@storybook/react-dom-shim@7.4.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-DSq8l9FDocUF1ooVI+TF83pddj1LynE/Hv0/y8XZhc3IgJ/HkuOQuUmfz29ezgfAi9gFYUR8raTIBi3/xdoRmw==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/react-dom-shim@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@storybook/react-vite@7.4.6(react-dom@18.2.0)(react@18.2.0)(rollup@2.79.1)(typescript@5.2.2)(vite@4.5.3): - resolution: {integrity: sha512-jkjnrf3FxzR5wcmebXRPflrsM4WIDjWyW/NVFJwxi5PeIOk7fE7/QAPrm4NFRUu2Q7DeuH3oLKsw8bigvUI9RA==} - engines: {node: '>=16'} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - vite: ^3.0.0 || ^4.0.0 + '@storybook/react-vite@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.2.2)(vite@4.5.3) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) '@rollup/pluginutils': 5.0.5(rollup@2.79.1) - '@storybook/builder-vite': 7.4.6(typescript@5.2.2)(vite@4.5.3) - '@storybook/react': 7.4.6(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) - '@vitejs/plugin-react': 3.1.0(vite@4.5.3) + '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) + '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) + '@vitejs/plugin-react': 3.1.0(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) ast-types: 0.14.2 magic-string: 0.30.4 react: 18.2.0 react-docgen: 6.0.0-alpha.3 react-dom: 18.2.0(react@18.2.0) - vite: 4.5.3 + vite: 4.5.3(@types/node@20.8.0)(terser@5.19.2) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -4706,25 +11284,15 @@ packages: - supports-color - typescript - vite-plugin-glimmerx - dev: true - /@storybook/react@7.4.6(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): - resolution: {integrity: sha512-w0dVo64baFFPTGpUOWFqkKsu6pQincoymegSNgqaBd5DxEyMDRiRoTWSJHMKE9BwgE8SyWhRkP1ak1mkccSOhQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@storybook/react@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': dependencies: '@storybook/client-logger': 7.4.6 '@storybook/core-client': 7.4.6 - '@storybook/docs-tools': 7.4.6 + '@storybook/docs-tools': 7.4.6(encoding@0.1.13) '@storybook/global': 5.0.0 '@storybook/preview-api': 7.4.6 - '@storybook/react-dom-shim': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/react-dom-shim': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.4.6 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 @@ -4738,34 +11306,28 @@ packages: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0) + react-element-to-jsx-string: 15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) ts-dedent: 2.2.0 type-fest: 2.19.0 - typescript: 5.2.2 util-deprecate: 1.0.2 + optionalDependencies: + typescript: 5.2.2 transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/router@7.4.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/router@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 7.4.6 memoizerific: 1.11.3 qs: 6.11.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@storybook/telemetry@7.4.6: - resolution: {integrity: sha512-c8p/C1NIH8EMBviZkBCx8MMDk6rrITJ+b29DEp5MaWSRlklIVyhGiC4RPIRv6sxJwlD41PnqWVFtfu2j2eXLdQ==} + '@storybook/telemetry@7.4.6(encoding@0.1.13)': dependencies: '@storybook/client-logger': 7.4.6 - '@storybook/core-common': 7.4.6 + '@storybook/core-common': 7.4.6(encoding@0.1.13) '@storybook/csf-tools': 7.4.6 chalk: 4.1.2 detect-package-manager: 2.0.1 @@ -4775,13 +11337,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/theming@7.4.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/theming@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@storybook/client-logger': 7.4.6 @@ -4789,28 +11346,20 @@ packages: memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@storybook/types@7.4.6: - resolution: {integrity: sha512-6QLXtMVsFZFpzPkdGWsu/iuc8na9dnS67AMOBKm5qCLPwtUJOYkwhMdFRSSeJthLRpzV7JLAL8Kwvl7MFP3QSw==} + '@storybook/types@7.4.6': dependencies: '@storybook/channels': 7.4.6 '@types/babel__core': 7.20.2 '@types/express': 4.17.18 file-system-cache: 2.3.0 - dev: true - /@storybook/web-components-vite@7.4.6(lit@2.8.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(vite@4.5.3): - resolution: {integrity: sha512-L/y6MTLbqfHaM0faK9Yl8n5PIyW4daZrtk7NfaOT6UjgNFjOx3o4CctYew6oj90cNk5HdZQX2OZny043GxDLZw==} - engines: {node: ^14.18 || >=16} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/web-components-vite@7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: - '@storybook/builder-vite': 7.4.6(typescript@5.2.2)(vite@4.5.3) - '@storybook/core-server': 7.4.6 + '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) + '@storybook/core-server': 7.4.6(encoding@0.1.13) '@storybook/node-logger': 7.4.6 - '@storybook/web-components': 7.4.6(lit@2.8.0)(react-dom@18.2.0)(react@18.2.0) + '@storybook/web-components': 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) magic-string: 0.30.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4824,19 +11373,14 @@ packages: - utf-8-validate - vite - vite-plugin-glimmerx - dev: true - /@storybook/web-components@7.4.6(lit@2.8.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HWqkZtdkmNimkzMmE0mGRys2ee9qgEeDVCruiffySVquBRMQ6n1xgvHZYaO6OLlMeH0YHPg083ZqUasS5GsYVg==} - engines: {node: '>=16.0.0'} - peerDependencies: - lit: ^2.0.0 + '@storybook/web-components@7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 7.4.6 '@storybook/core-client': 7.4.6 - '@storybook/docs-tools': 7.4.6 + '@storybook/docs-tools': 7.4.6(encoding@0.1.13) '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.4.6 '@storybook/types': 7.4.6 lit: 2.8.0 @@ -4847,393 +11391,247 @@ packages: - react - react-dom - supports-color - dev: true - /@surma/rollup-plugin-off-main-thread@2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + '@surma/rollup-plugin-off-main-thread@2.2.3': dependencies: ejs: 3.1.9 json5: 2.2.3 magic-string: 0.25.9 string.prototype.matchall: 4.0.10 - dev: false - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - requiresBuild: true - dev: false + '@tootallnate/once@2.0.0': optional: true - /@tweenjs/tween.js@18.6.4: - resolution: {integrity: sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==} - dev: true + '@tweenjs/tween.js@18.6.4': {} - /@tweenjs/tween.js@20.0.3: - resolution: {integrity: sha512-SYUe1UgY5HM05EB4+0B4arq2IPjvyzKXoklXKxSYrc2IFxGm1cBrqg5XbiB5uwbs0xY5j+rj986NAJMM0KZaUw==} - dev: false + '@tweenjs/tween.js@20.0.3': {} - /@types/babel__core@7.20.2: - resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} + '@types/babel__core@7.20.2': dependencies: '@babel/parser': 7.22.13 '@babel/types': 7.22.11 '@types/babel__generator': 7.6.5 '@types/babel__template': 7.4.2 '@types/babel__traverse': 7.20.2 - dev: true - /@types/babel__generator@7.6.5: - resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} + '@types/babel__generator@7.6.5': dependencies: '@babel/types': 7.22.11 - dev: true - /@types/babel__template@7.4.2: - resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} + '@types/babel__template@7.4.2': dependencies: '@babel/parser': 7.22.13 '@babel/types': 7.22.11 - dev: true - /@types/babel__traverse@7.20.2: - resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} + '@types/babel__traverse@7.20.2': dependencies: '@babel/types': 7.22.11 - dev: true - /@types/body-parser@1.19.3: - resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==} + '@types/body-parser@1.19.3': dependencies: '@types/connect': 3.4.36 '@types/node': 20.8.0 - dev: true - /@types/chai-subset@1.3.3: - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + '@types/chai-subset@1.3.3': dependencies: '@types/chai': 4.3.6 - dev: true - /@types/chai@4.3.6: - resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} - dev: true + '@types/chai@4.3.6': {} - /@types/connect@3.4.36: - resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + '@types/connect@3.4.36': dependencies: '@types/node': 20.8.10 - dev: true - /@types/cookie@0.4.1: - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - dev: false + '@types/cookie@0.4.1': {} - /@types/cors@2.8.15: - resolution: {integrity: sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==} + '@types/cors@2.8.15': dependencies: '@types/node': 20.8.0 - dev: false - /@types/cross-spawn@6.0.3: - resolution: {integrity: sha512-BDAkU7WHHRHnvBf5z89lcvACsvkz/n7Tv+HyD/uW76O29HoH1Tk/W6iQrepaZVbisvlEek4ygwT8IW7ow9XLAA==} + '@types/cross-spawn@6.0.3': dependencies: '@types/node': 20.8.10 - dev: true - /@types/debug@4.1.12: - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 - dev: false - /@types/detect-port@1.3.3: - resolution: {integrity: sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==} - dev: true + '@types/detect-port@1.3.3': {} - /@types/doctrine@0.0.3: - resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} - dev: true + '@types/doctrine@0.0.3': {} - /@types/draco3d@1.4.7: - resolution: {integrity: sha512-sjx6hQ8UArRZf+2ZhpPkjJW8iCkyxar69/IElc9NHuGE40n0U9SuvxX59CHvF4xUH7qfJDQ2lIbANZ0HHJg+BQ==} - dev: false + '@types/draco3d@1.4.7': {} - /@types/ejs@3.1.3: - resolution: {integrity: sha512-mv5T/JI/bu+pbfz1o+TLl1NF0NIBbjS0Vl6Ppz1YY9DkXfzZT0lelXpfS5i3ZS3U/p90it7uERQpBvLYoK8e4A==} - dev: true + '@types/ejs@3.1.3': {} - /@types/emscripten@1.39.8: - resolution: {integrity: sha512-Rk0HKcMXFUuqT32k1kXHZWgxiMvsyYsmlnjp0rLKa0MMoqXLE3T9dogDBTRfuc3SAsXu97KD3k4SKR1lHqd57w==} - dev: true + '@types/emscripten@1.39.8': {} - /@types/escodegen@0.0.6: - resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} - dev: true + '@types/escodegen@0.0.6': {} - /@types/estree@0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: false + '@types/estree@0.0.39': {} - /@types/estree@0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: true + '@types/estree@0.0.51': {} - /@types/estree@1.0.2: - resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} - dev: true + '@types/estree@1.0.2': {} - /@types/express-serve-static-core@4.17.37: - resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==} + '@types/express-serve-static-core@4.17.37': dependencies: '@types/node': 20.8.0 '@types/qs': 6.9.8 '@types/range-parser': 1.2.5 '@types/send': 0.17.2 - dev: true - /@types/express@4.17.18: - resolution: {integrity: sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==} + '@types/express@4.17.18': dependencies: '@types/body-parser': 1.19.3 '@types/express-serve-static-core': 4.17.37 '@types/qs': 6.9.8 '@types/serve-static': 1.15.3 - dev: true - /@types/find-cache-dir@3.2.1: - resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} - dev: true + '@types/find-cache-dir@3.2.1': {} - /@types/gapi@0.0.47: - resolution: {integrity: sha512-/ZsLuq6BffMgbKMtZyDZ8vwQvTyKhKQ1G2K6VyWCgtHHhfSSXbk4+4JwImZiTjWNXfI2q1ZStAwFFHSkNoTkHA==} - dev: false + '@types/gapi@0.0.47': {} - /@types/glob@7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 '@types/node': 20.8.0 - dev: true - /@types/graceful-fs@4.1.7: - resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} + '@types/graceful-fs@4.1.7': dependencies: '@types/node': 20.8.10 - dev: true - /@types/http-cache-semantics@4.0.2: - resolution: {integrity: sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==} - dev: true + '@types/http-cache-semantics@4.0.2': {} - /@types/http-errors@2.0.2: - resolution: {integrity: sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==} - dev: true + '@types/http-errors@2.0.2': {} - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: true + '@types/istanbul-lib-coverage@2.0.4': {} - /@types/istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==} + '@types/istanbul-lib-report@3.0.1': dependencies: '@types/istanbul-lib-coverage': 2.0.4 - dev: true - /@types/istanbul-reports@3.0.2: - resolution: {integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==} + '@types/istanbul-reports@3.0.2': dependencies: '@types/istanbul-lib-report': 3.0.1 - dev: true - /@types/js-cookie@2.2.7: - resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - dev: false + '@types/js-cookie@2.2.7': {} - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: true + '@types/json-schema@7.0.12': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/lodash-es@4.17.9: - resolution: {integrity: sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==} + '@types/lodash-es@4.17.9': dependencies: '@types/lodash': 4.14.199 - dev: true - /@types/lodash@4.14.199: - resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} - dev: true + '@types/lodash@4.14.199': {} - /@types/mdast@4.0.3: - resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + '@types/mdast@4.0.3': dependencies: '@types/unist': 2.0.8 - dev: false - /@types/mdx@2.0.8: - resolution: {integrity: sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==} - dev: true + '@types/mdx@2.0.8': {} - /@types/mime-types@2.1.2: - resolution: {integrity: sha512-q9QGHMGCiBJCHEvd4ZLdasdqXv570agPsUW0CeIm/B8DzhxsYMerD0l3IlI+EQ1A2RWHY2mmM9x1YIuuWxisCg==} - dev: true + '@types/mime-types@2.1.2': {} - /@types/mime@1.3.3: - resolution: {integrity: sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==} - dev: true + '@types/mime@1.3.3': {} - /@types/mime@3.0.2: - resolution: {integrity: sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ==} - dev: true + '@types/mime@3.0.2': {} - /@types/minimatch@5.1.2: - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: true + '@types/minimatch@5.1.2': {} - /@types/minimist@1.2.3: - resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} - dev: true + '@types/minimist@1.2.3': {} - /@types/ms@0.7.34: - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - dev: false + '@types/ms@0.7.34': {} - /@types/node-fetch@2.6.6: - resolution: {integrity: sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==} + '@types/node-fetch@2.6.6': dependencies: '@types/node': 20.8.0 form-data: 4.0.0 - dev: true - /@types/node@14.18.56: - resolution: {integrity: sha512-+k+57NVS9opgrEn5l9c0gvD1r6C+PtyhVE4BTnMMRwiEA8ZO8uFcs6Yy2sXIy0eC95ZurBtRSvhZiHXBysbl6w==} + '@types/node@14.18.56': {} - /@types/node@16.18.58: - resolution: {integrity: sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==} - dev: true + '@types/node@16.18.58': {} - /@types/node@20.11.19: - resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} - requiresBuild: true + '@types/node@20.11.19': dependencies: undici-types: 5.26.5 optional: true - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@20.12.7': dependencies: undici-types: 5.26.5 - /@types/node@20.8.0: - resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} + '@types/node@20.8.0': {} - /@types/node@20.8.10: - resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==} + '@types/node@20.8.10': dependencies: undici-types: 5.26.5 - /@types/normalize-package-data@2.4.2: - resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} - dev: true + '@types/normalize-package-data@2.4.2': {} - /@types/offscreencanvas@2019.7.2: - resolution: {integrity: sha512-ujCjOxeA07IbEBQYAkoOI+XFw5sT3nhWJ/xZfPR6reJppDG7iPQPZacQiLTtWH1b3a2NYXWlxvYqa40y/LAixQ==} - dev: false + '@types/offscreencanvas@2019.7.2': {} - /@types/parse-json@4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: false + '@types/parse-json@4.0.0': {} - /@types/pretty-hrtime@1.0.1: - resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==} - dev: true + '@types/pretty-hrtime@1.0.1': {} - /@types/prop-types@15.7.5: - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + '@types/prop-types@15.7.5': {} - /@types/qs@6.9.8: - resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} - dev: true + '@types/qs@6.9.8': {} - /@types/range-parser@1.2.5: - resolution: {integrity: sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==} - dev: true + '@types/range-parser@1.2.5': {} - /@types/rbush@3.0.1: - resolution: {integrity: sha512-0LecKcQjuJ/PclmThftzePIKXaKt7OMjoZZ3Xf17Ebd28ZU6OFUu1mObbvV74YXS1W3APdZO5GRHyD/ezGK4Vg==} - dev: false + '@types/rbush@3.0.1': {} - /@types/react-dom@18.2.7: - resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + '@types/react-dom@18.2.7': dependencies: '@types/react': 18.2.20 - /@types/react-transition-group@4.4.7: - resolution: {integrity: sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==} + '@types/react-transition-group@4.4.7': dependencies: '@types/react': 18.2.20 - dev: true - /@types/react@18.2.20: - resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==} + '@types/react@18.2.20': dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 csstype: 3.1.2 - /@types/readable-stream@4.0.11: - resolution: {integrity: sha512-R3eUMUTTKoIoaz7UpYLxvZCrOmCRPRbAmoDDHKcimTEySltaJhF8hLzj4+EzyDifiX5eK6oDQGSfmNnXjxZzYQ==} + '@types/readable-stream@4.0.11': dependencies: '@types/node': 20.12.7 safe-buffer: 5.1.2 - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + '@types/resolve@1.17.1': dependencies: '@types/node': 20.8.10 - dev: false - /@types/sat@0.0.31: - resolution: {integrity: sha512-P4SVw79XheP1p92useDVpLYYOUQ6lpw2L7IdQz4dD23DZ8DiC1STgPOh72hjR5IZJBPQbzlICAbmjCKbwyYuxg==} - dev: false + '@types/sat@0.0.31': {} - /@types/scheduler@0.16.3: - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + '@types/scheduler@0.16.3': {} - /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} - dev: true + '@types/semver@7.5.3': {} - /@types/send@0.17.2: - resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==} + '@types/send@0.17.2': dependencies: '@types/mime': 1.3.3 '@types/node': 20.8.10 - dev: true - /@types/serve-static@1.15.3: - resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==} + '@types/serve-static@1.15.3': dependencies: '@types/http-errors': 2.0.2 '@types/mime': 3.0.2 '@types/node': 20.8.0 - dev: true - /@types/sinonjs__fake-timers@8.1.1: - resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} + '@types/sinonjs__fake-timers@8.1.1': {} - /@types/sizzle@2.3.3: - resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} + '@types/sizzle@2.3.3': {} - /@types/stats.js@0.17.1: - resolution: {integrity: sha512-OgfYE1x2w1jRUXzzKABX+kOdwz2y9PE0uSwnZabkWfJTWOzm7Pvfm4JI2xqRE0q2nwUe2jZLWcrcnhd9lQU63w==} + '@types/stats.js@0.17.1': {} - /@types/three@0.154.0: - resolution: {integrity: sha512-IioqpGhch6FdLDh4zazRn3rXHj6Vn2nVOziJdXVbJFi9CaI65LtP9qqUtpzbsHK2Ezlox8NtsLNHSw3AQzucjA==} + '@types/three@0.154.0': dependencies: '@tweenjs/tween.js': 18.6.4 '@types/stats.js': 0.17.1 @@ -5241,72 +11639,42 @@ packages: fflate: 0.6.10 lil-gui: 0.17.0 meshoptimizer: 0.18.1 - dev: true - /@types/three@0.156.0: - resolution: {integrity: sha512-733bXDSRdlrxqOmQuOmfC1UBRuJ2pREPk8sWnx9MtIJEVDQMx8U0NQO5MVVaOrjzDPyLI+cFPim2X/ss9v0+LQ==} + '@types/three@0.156.0': dependencies: '@types/stats.js': 0.17.1 '@types/webxr': 0.5.7 fflate: 0.6.10 meshoptimizer: 0.18.1 - dev: false - /@types/trusted-types@2.0.3: - resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} + '@types/trusted-types@2.0.3': {} - /@types/ua-parser-js@0.7.39: - resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} - dev: true + '@types/ua-parser-js@0.7.39': {} - /@types/unist@2.0.8: - resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} + '@types/unist@2.0.8': {} - /@types/unist@3.0.2: - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - dev: false + '@types/unist@3.0.2': {} - /@types/webxr@0.5.7: - resolution: {integrity: sha512-Rcgs5c2eNFnHp53YOjgtKfl/zWX1Y+uFGUwlSXrWcZWu3yhANRezmph4MninmqybUYT6g9ZE0aQ9QIdPkLR3Kg==} + '@types/webxr@0.5.7': {} - /@types/wicg-file-system-access@2023.10.2: - resolution: {integrity: sha512-nSiK8qt0O7sQmDcW3HYfvya7GDoD6ipgdcUFzk3QN+UBIqXeNg38Nh6VnKv7EIPfkVETRiquyMskCbpxUzgX1Q==} - dev: false + '@types/wicg-file-system-access@2023.10.2': {} - /@types/yargs-parser@21.0.1: - resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} - dev: true + '@types/yargs-parser@21.0.1': {} - /@types/yargs@17.0.28: - resolution: {integrity: sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==} + '@types/yargs@17.0.28': dependencies: '@types/yargs-parser': 21.0.1 - dev: true - /@types/yauzl@2.10.1: - resolution: {integrity: sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==} - requiresBuild: true + '@types/yauzl@2.10.1': dependencies: '@types/node': 20.8.0 - dev: true - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - requiresBuild: true + '@types/yauzl@2.10.3': dependencies: '@types/node': 20.11.19 optional: true - /@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2)': dependencies: '@eslint-community/regexpp': 4.8.0 '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) @@ -5322,20 +11690,12 @@ packages: natural-compare-lite: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.2.2) + optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2)': dependencies: '@typescript-eslint/scope-manager': 6.7.3 '@typescript-eslint/types': 6.7.3 @@ -5343,65 +11703,38 @@ packages: '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4(supports-color@8.1.1) eslint: 8.50.0 + optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@6.1.0: - resolution: {integrity: sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.1.0': dependencies: '@typescript-eslint/types': 6.1.0 '@typescript-eslint/visitor-keys': 6.1.0 - dev: true - /@typescript-eslint/scope-manager@6.7.3: - resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.7.3': dependencies: '@typescript-eslint/types': 6.7.3 '@typescript-eslint/visitor-keys': 6.7.3 - dev: true - /@typescript-eslint/type-utils@6.1.0(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@6.1.0(eslint@8.50.0)(typescript@5.2.2)': dependencies: '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.2.2) '@typescript-eslint/utils': 6.1.0(eslint@8.50.0)(typescript@5.2.2) debug: 4.3.4(supports-color@8.1.1) eslint: 8.50.0 ts-api-utils: 1.0.3(typescript@5.2.2) + optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@6.1.0: - resolution: {integrity: sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@6.1.0': {} - /@typescript-eslint/types@6.7.3: - resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@6.7.3': {} - /@typescript-eslint/typescript-estree@6.1.0(typescript@5.2.2): - resolution: {integrity: sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@6.1.0(typescript@5.2.2)': dependencies: '@typescript-eslint/types': 6.1.0 '@typescript-eslint/visitor-keys': 6.1.0 @@ -5410,19 +11743,12 @@ packages: is-glob: 4.0.3 semver: 7.6.0 ts-api-utils: 1.0.3(typescript@5.2.2) + optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2): - resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2)': dependencies: '@typescript-eslint/types': 6.7.3 '@typescript-eslint/visitor-keys': 6.7.3 @@ -5431,16 +11757,12 @@ packages: is-glob: 4.0.3 semver: 7.6.0 ts-api-utils: 1.0.3(typescript@5.2.2) + optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@6.1.0(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@6.1.0(eslint@8.50.0)(typescript@5.2.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) '@types/json-schema': 7.0.12 @@ -5453,122 +11775,84 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@6.1.0: - resolution: {integrity: sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.1.0': dependencies: '@typescript-eslint/types': 6.1.0 eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@6.7.3: - resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.7.3': dependencies: '@typescript-eslint/types': 6.7.3 eslint-visitor-keys: 3.4.3 - dev: true - /@vitejs/plugin-react@3.1.0(vite@4.5.3): - resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.1.0-beta.0 + '@vitejs/plugin-react@3.1.0(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: '@babel/core': 7.22.11 '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.11) '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.11) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.5.3 + vite: 4.5.3(@types/node@20.8.0)(terser@5.19.2) transitivePeerDependencies: - supports-color - dev: true - /@vitest/expect@0.34.6: - resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + '@vitest/expect@0.34.6': dependencies: '@vitest/spy': 0.34.6 '@vitest/utils': 0.34.6 chai: 4.3.10 - dev: true - /@vitest/runner@0.34.6: - resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + '@vitest/runner@0.34.6': dependencies: '@vitest/utils': 0.34.6 p-limit: 4.0.0 pathe: 1.1.1 - dev: true - /@vitest/snapshot@0.34.6: - resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + '@vitest/snapshot@0.34.6': dependencies: magic-string: 0.30.4 pathe: 1.1.1 pretty-format: 29.7.0 - dev: true - /@vitest/spy@0.34.6: - resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + '@vitest/spy@0.34.6': dependencies: tinyspy: 2.2.0 - dev: true - /@vitest/utils@0.34.6: - resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + '@vitest/utils@0.34.6': dependencies: diff-sequences: 29.6.3 loupe: 2.3.6 pretty-format: 29.7.0 - dev: true - /@xboxreplay/errors@0.1.0: - resolution: {integrity: sha512-Tgz1d/OIPDWPeyOvuL5+aai5VCcqObhPnlI3skQuf80GVF3k1I0lPCnGC+8Cm5PV9aLBT5m8qPcJoIUQ2U4y9g==} + '@xboxreplay/errors@0.1.0': {} - /@xboxreplay/xboxlive-auth@3.3.3(debug@4.3.4): - resolution: {integrity: sha512-j0AU8pW10LM8O68CTZ5QHnvOjSsnPICy0oQcP7zyM7eWkDQ/InkiQiirQKsPn1XRYDl4ccNu0WM582s3UKwcBg==} + '@xboxreplay/xboxlive-auth@3.3.3(debug@4.3.4)': dependencies: '@xboxreplay/errors': 0.1.0 axios: 0.21.4(debug@4.3.4) transitivePeerDependencies: - debug - /@xmcl/asm@1.0.1: - resolution: {integrity: sha512-7vCVgm1E1IZ2cujiitFk9550Vgu2XAOn1ff90di638fMmTK0XkFMXKsSR/nGZmYKt+XiTMI/0B3TvreqbVjOug==} - engines: {node: '>=16'} - dev: true + '@xmcl/asm@1.0.1': {} - /@xmcl/core@2.12.0(yauzl@2.10.0): - resolution: {integrity: sha512-rcxy29i2fjGFpe6sEvaJxYHFGlfYMcJwElbk6TIUCrKNOiMhyLZeBtCJSk38hvaYF0kiROA3c4EJeWNGHf2zVw==} - engines: {node: '>=16.0'} + '@xmcl/core@2.12.0(yauzl@2.10.0)': dependencies: '@xmcl/unzip': 2.1.2(yauzl@2.10.0) transitivePeerDependencies: - yauzl - dev: true - /@xmcl/file-transfer@1.0.3: - resolution: {integrity: sha512-p5JsUQpNShqW4VpqaKXcQzYSO9o/9UGjXZfb5aNt/24Ty+j9qepQyPo4P1CFwfzgFuf9GGhH5cPUi6nShlKS+g==} - engines: {node: '>=16.0'} + '@xmcl/file-transfer@1.0.3': dependencies: '@types/http-cache-semantics': 4.0.2 http-cache-semantics: 4.1.1 undici: 5.25.4 - dev: true - /@xmcl/forge-site-parser@2.0.9: - resolution: {integrity: sha512-OHKG2KYE+F6TSeOQmymuGoqEifxbJb3w3X/hmxMNeqtewiYukJldPmKO559ZFnZnOuMQEnr+X0dMbTQwWs5dFg==} - engines: {node: '>=16'} + '@xmcl/forge-site-parser@2.0.9': dependencies: node-html-parser: 6.1.10 - dev: true - /@xmcl/installer@5.1.0: - resolution: {integrity: sha512-KpoxpfYdUWH4U4Yat7RifS1JZajArOdfgsJ/LdU90y6Fc3hKhHSJsiRudk1VxASTyMXKCM0lWVxH5JzywRHBDw==} - engines: {node: '>=16.0'} + '@xmcl/installer@5.1.0': dependencies: '@xmcl/asm': 1.0.1 '@xmcl/core': 2.12.0(yauzl@2.10.0) @@ -5578,82 +11862,55 @@ packages: '@xmcl/unzip': 2.1.2(yauzl@2.10.0) undici: 5.25.4 yauzl: 2.10.0 - dev: true - /@xmcl/task@4.0.6: - resolution: {integrity: sha512-h0AR7DQm6xxBgROPnRi0EY8DlaDQwuGzPA5lFRMD4EsnpHJ/3fPdzwbMLb81ZxKJlLSCn3hVR2yI0mSKIm5Heg==} - dev: true + '@xmcl/task@4.0.6': {} - /@xmcl/text-component@2.1.3: - resolution: {integrity: sha512-LdUZgC5+8F23J2ZkZi7aZb87QBNfxwJqhUyts8YBQYwxQPwei20TOBm2hr69euoAeDo7NDfbLXssD4mUvsAS0Q==} - engines: {node: '>=16'} - dev: false + '@xmcl/text-component@2.1.3': {} - /@xmcl/unzip@2.1.2(yauzl@2.10.0): - resolution: {integrity: sha512-Lm/eg/e0/p+sfj/RT2QDpsBAf39DZqQ3+XvX1JXZPb64wnjwOf8CGU1WPv6BseEcJ5CMOpm0s2NyrEQD04y0UQ==} - engines: {node: '>=16'} - peerDependencies: - yauzl: ^2.10.0 + '@xmcl/unzip@2.1.2(yauzl@2.10.0)': dependencies: '@types/yauzl': 2.10.1 yauzl: 2.10.0 - dev: true - /@xobotyi/scrollbar-width@1.9.5: - resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - dev: false + '@xobotyi/scrollbar-width@1.9.5': {} - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20): - resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} - engines: {node: '>=14.15.0'} - peerDependencies: - esbuild: '>=0.10.0' + '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20)': dependencies: esbuild: 0.18.20 tslib: 2.6.2 - dev: true - /@yarnpkg/fslib@2.10.3: - resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==} - engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + '@yarnpkg/fslib@2.10.3': dependencies: '@yarnpkg/libzip': 2.3.0 tslib: 1.14.1 - dev: true - /@yarnpkg/libzip@2.3.0: - resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} - engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + '@yarnpkg/libzip@2.3.0': dependencies: '@types/emscripten': 1.39.8 tslib: 1.14.1 - dev: true - /@zardoy/flying-squid@0.0.17: - resolution: {integrity: sha512-qGCS7aRmMflDdIN7IGLpDc0W2gUYc5OQ45KEn3XtcxwOP0Q7zyvo3mnsD5KSV3n2lyhQ4783Ov8V6J86xea0lw==} - engines: {node: '>=8'} - hasBin: true + '@zardoy/flying-squid@0.0.17(encoding@0.1.13)': dependencies: change-case: 4.1.2 colors: 1.4.0 - diamond-square: github.com/zardoy/diamond-square/915fce8e27fe8eb45464d89b9563956afa4f7687 + diamond-square: https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687 emit-then: 2.0.0 event-promise: 0.0.1 exit-hook: 2.2.1 flatmap: 0.0.3 long: 5.2.3 minecraft-data: 3.62.0 - minecraft-protocol: github.com/zardoy/minecraft-protocol/2c14a686bfe7cbd9a5c87b629b402295ee86219f + minecraft-protocol: https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f(encoding@0.1.13) mkdirp: 2.1.6 node-gzip: 1.1.2 node-rsa: 1.1.1 - prismarine-chunk: github.com/zardoy/prismarine-chunk/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 - prismarine-provider-anvil: github.com/zardoy/prismarine-provider-anvil/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0) + prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0) prismarine-windows: 2.9.0 - prismarine-world: github.com/zardoy/prismarine-world/6ae6f009d38460de284f8c226c665f04cbad9465 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 random-seed: 0.3.0 range: 0.0.3 readline: 1.3.0 @@ -5665,298 +11922,176 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: false - /@zardoy/react-util@0.2.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-glABtx54mh4XSaK6BNALWE3mlshPjcPwPsRj/GnOXEA7WJY/6n43iJoukbaYF3758mGZRU5Fq6gklyFjBg0yHQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - react: ^18.2.0 - react-dom: ^18.0.0 + '@zardoy/react-util@0.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: classnames: 2.3.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /@zardoy/utils@0.0.11: - resolution: {integrity: sha512-d6xBnSFCOa98HcL52xSBflJKjKpxfRhtr1eVexy89YujeCHSQhUMmSz9h07xyrulfW60k9tSeYH5reuqoh4l4w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + '@zardoy/utils@0.0.11': dependencies: escape-string-regexp: 4.0.0 lodash.compact: 3.0.1 rambda: 6.9.0 type-fest: 2.19.0 - dev: false - /Base64@0.2.1: - resolution: {integrity: sha512-reGEWshDmTDQDsCec/HduOO9Wyj6yMOupMfhIf3ugN1TDlK2NQW4DDJSqNNtp380SNcvRfXtO8HSCQot0d0SMw==} - dev: true + Base64@0.2.1: {} - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: false + abbrev@1.1.1: {} - /abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - /acorn-jsx@5.3.2(acorn@7.4.1): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@7.4.1): dependencies: acorn: 7.4.1 - dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.10.0): dependencies: acorn: 8.10.0 - dev: true - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@7.2.0: {} - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@8.2.0: {} - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@7.4.1: {} - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true + acorn@8.10.0: {} - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: true + address@1.2.2: {} - /adm-zip@0.5.12: - resolution: {integrity: sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==} - engines: {node: '>=6.0'} - dev: false + adm-zip@0.5.12: {} - /aes-js@3.1.2: - resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} + aes-js@3.1.2: {} - /after@0.8.2: - resolution: {integrity: sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==} - dev: false + after@0.8.2: {} - /agent-base@5.1.1: - resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} - engines: {node: '>= 6.0.0'} - dev: true + agent-base@5.1.1: {} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@6.0.2: dependencies: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: false - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} + agent-base@7.1.0: dependencies: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} - requiresBuild: true + agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 - dev: false optional: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: false - /animejs@3.2.1: - resolution: {integrity: sha512-sWno3ugFryK5nhiDm/2BKeFCpZv7vzerWUcUPyAZLDhMek3+S/p418ldZJbJXo5ZUOpfm2kP2XRO4NJcULMy9A==} - dev: false + animejs@3.2.1: {} - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} + ansi-colors@4.1.3: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true + ansi-styles@5.2.0: {} - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /any-base@1.1.0: - resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} - dev: false + any-base@1.1.0: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false + any-promise@1.3.0: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /app-root-dir@1.0.2: - resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} - dev: true + app-root-dir@1.0.2: {} - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: false + aproba@2.0.0: {} - /arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + arch@2.2.0: {} - /are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} + are-we-there-yet@2.0.0: dependencies: delegates: 1.0.0 readable-stream: 3.6.2 - dev: false - /are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + are-we-there-yet@3.0.1: dependencies: delegates: 1.0.0 readable-stream: 3.6.2 - dev: false optional: true - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + argparse@2.0.1: {} - /aria-hidden@1.2.3: - resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} - engines: {node: '>=10'} + aria-hidden@1.2.3: dependencies: tslib: 2.6.2 - dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.0: dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - dev: true - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-flatten@1.1.1: {} - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 get-intrinsic: 1.2.1 is-string: 1.0.7 - dev: true - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -5964,16 +12099,10 @@ packages: es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -5981,50 +12110,37 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 es-shim-unscopables: 1.0.0 - dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 es-shim-unscopables: 1.0.0 - dev: true - /array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + array.prototype.toreversed@1.1.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + array.prototype.tosorted@1.1.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.2: dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 @@ -6034,9 +12150,7 @@ packages: is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -6046,132 +12160,84 @@ packages: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - dev: true - /arraybuffer.slice@0.0.7: - resolution: {integrity: sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==} - dev: false + arraybuffer.slice@0.0.7: {} - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /asap@1.0.0: - resolution: {integrity: sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==} - dev: false + asap@1.0.0: {} - /asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + asn1.js@5.4.1: dependencies: bn.js: 4.12.0 inherits: 2.0.4 minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 - dev: true - /asn1@0.2.3: - resolution: {integrity: sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w==} + asn1@0.2.3: {} - /asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + asn1@0.2.6: dependencies: safer-buffer: 2.1.2 - /assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} + assert-plus@1.0.0: {} - /assert@2.0.0: - resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} + assert@2.0.0: dependencies: es6-object-assign: 1.1.0 is-nan: 1.3.2 object-is: 1.1.5 util: 0.12.5 - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + assertion-error@1.1.0: {} - /ast-types@0.14.2: - resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} - engines: {node: '>=4'} + ast-types@0.14.2: dependencies: tslib: 2.6.2 - dev: true - /ast-types@0.15.2: - resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} - engines: {node: '>=4'} + ast-types@0.15.2: dependencies: tslib: 2.6.2 - dev: true - /ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} + ast-types@0.16.1: dependencies: tslib: 2.6.2 - dev: true - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} + astral-regex@2.0.0: {} - /async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + async-limiter@1.0.1: {} - /async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + async@2.6.4: dependencies: lodash: 4.17.21 - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + async@3.2.5: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + asynckit@0.4.0: {} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} + at-least-node@1.0.0: {} - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.5: {} - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - dev: true - /aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + aws-sign2@0.7.0: {} - /aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + aws4@1.12.0: {} - /axios@0.21.4(debug@4.3.4): - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + axios@0.21.4(debug@4.3.4): dependencies: follow-redirects: 1.15.6(debug@4.3.4) transitivePeerDependencies: - debug - /babel-core@7.0.0-bridge.0(@babel/core@7.22.11): - resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + babel-core@7.0.0-bridge.0(@babel/core@7.22.11): dependencies: '@babel/core': 7.22.11 - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@6.1.1: dependencies: '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 @@ -6180,21 +12246,14 @@ packages: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.22.11 cosmiconfig: 7.1.0 resolve: 1.22.4 - dev: false - /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.11): - resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.11): dependencies: '@babel/compat-data': 7.22.9 '@babel/core': 7.22.11 @@ -6203,10 +12262,7 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.11): - resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.11): dependencies: '@babel/core': 7.22.11 '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.11) @@ -6214,115 +12270,68 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.11): - resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.11): dependencies: '@babel/core': 7.22.11 '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.11) transitivePeerDependencies: - supports-color - /backo2@1.0.2: - resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==} - dev: false + backo2@1.0.2: {} - /bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - dev: false + bail@2.0.2: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /base64-arraybuffer@0.1.4: - resolution: {integrity: sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==} - engines: {node: '>= 0.6.0'} - dev: false + base64-arraybuffer@0.1.4: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + base64-js@1.5.1: {} - /base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - dev: false + base64id@2.0.0: {} - /basic-auth@2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} + basic-auth@2.0.1: dependencies: safe-buffer: 5.1.2 - dev: true - /bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 - /better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} + better-opn@3.0.2: dependencies: open: 8.4.2 - dev: true - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} - engines: {node: '>=0.6'} - dev: true + big-integer@1.6.51: {} - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.2.0: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - requiresBuild: true + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - dev: false optional: true - /bit-twiddle@1.0.2: - resolution: {integrity: sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==} - requiresBuild: true - dev: false + bit-twiddle@1.0.2: optional: true - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - /blob-util@2.0.2: - resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} + blob-util@2.0.2: {} - /blob@0.0.5: - resolution: {integrity: sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==} - dev: false + blob@0.0.5: {} - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + bluebird@3.7.2: {} - /bmp-js@0.1.0: - resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} - dev: false + bmp-js@0.1.0: {} - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: true + bn.js@4.12.0: {} - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: true + bn.js@5.2.1: {} - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.1: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -6339,9 +12348,7 @@ packages: transitivePeerDependencies: - supports-color - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -6357,47 +12364,37 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: false - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true + boolbase@1.0.0: {} - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} + bplist-parser@0.2.0: dependencies: big-integer: 1.6.51 - dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: true + brorand@1.1.0: {} - /browser-assert@1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - dev: true + browser-assert@1.2.1: {} - /browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + browserfs@https://codeload.github.com/zardoy/browserfs/tar.gz/ab58ae8ef00e3a31db01909e365e6cb5188436e0: {} + + browserfs@https://codeload.github.com/zardoy/browserfs/tar.gz/e60ca69e74888e057a96a468afe1d62347d3f56f: + dependencies: + async: 2.6.4 + + browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 cipher-base: 1.0.4 @@ -6405,34 +12402,26 @@ packages: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + browserify-cipher@1.0.1: dependencies: browserify-aes: 1.2.0 browserify-des: 1.0.2 evp_bytestokey: 1.0.3 - dev: true - /browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + browserify-des@1.0.2: dependencies: cipher-base: 1.0.4 des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /browserify-rsa@4.1.0: - resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + browserify-rsa@4.1.0: dependencies: bn.js: 5.2.1 randombytes: 2.1.0 - dev: true - /browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + browserify-sign@4.2.1: dependencies: bn.js: 5.2.1 browserify-rsa: 4.1.0 @@ -6443,86 +12432,55 @@ packages: parse-asn1: 5.1.6 readable-stream: 3.6.2 safe-buffer: 5.2.1 - dev: true - /browserify-zlib@0.1.4: - resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + browserify-zlib@0.1.4: dependencies: pako: 0.2.9 - dev: true - /browserify-zlib@0.2.0: - resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + browserify-zlib@0.2.0: dependencies: pako: 1.0.11 - dev: true - /browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.21.10: dependencies: caniuse-lite: 1.0.30001524 electron-to-chromium: 1.4.504 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bser@2.1.1: dependencies: node-int64: 0.4.0 - dev: true - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-crc32@0.2.13: {} - /buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-equal-constant-time@1.0.1: {} - /buffer-equal@0.0.1: - resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} - engines: {node: '>=0.4.0'} - dev: false + buffer-equal@0.0.1: {} - /buffer-equal@1.0.1: - resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} - engines: {node: '>=0.4'} + buffer-equal@1.0.1: {} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer-from@1.1.2: {} - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: true + buffer-xor@1.0.3: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} + builtin-modules@3.3.0: {} - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} + bytes@3.0.0: {} - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} + bytes@3.1.2: {} - /c8@7.14.0: - resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==} - engines: {node: '>=10.12.0'} - hasBin: true + c8@7.14.0: dependencies: '@bcoe/v8-coverage': 0.2.3 '@istanbuljs/schema': 0.1.3 @@ -6536,17 +12494,10 @@ packages: v8-to-istanbul: 9.1.3 yargs: 16.2.0 yargs-parser: 20.2.9 - dev: true - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true + cac@6.7.14: {} - /cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + cacache@16.1.3: dependencies: '@npmcli/fs': 2.1.2 '@npmcli/move-file': 2.0.1 @@ -6568,22 +12519,16 @@ packages: unique-filename: 2.0.1 transitivePeerDependencies: - bluebird - dev: false optional: true - /cachedir@2.4.0: - resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} - engines: {node: '>=6'} + cachedir@2.4.0: {} - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind@1.0.2: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 @@ -6591,68 +12536,44 @@ packages: get-intrinsic: 1.2.4 set-function-length: 1.2.1 - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + callsites@3.1.0: {} - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camel-case@4.1.2: dependencies: pascal-case: 3.1.2 tslib: 2.6.2 - dev: false - /camelcase-keys@7.0.2: - resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} - engines: {node: '>=12'} + camelcase-keys@7.0.2: dependencies: camelcase: 6.3.0 map-obj: 4.3.0 quick-lru: 5.1.1 type-fest: 1.4.0 - dev: true - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /caniuse-lite@1.0.30001524: - resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} + caniuse-lite@1.0.30001524: {} - /canvas@2.11.2: - resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} - engines: {node: '>=6'} - requiresBuild: true + canvas@2.11.2(encoding@0.1.13): dependencies: - '@mapbox/node-pre-gyp': 1.0.11 + '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) nan: 2.18.0 simple-get: 3.1.1 transitivePeerDependencies: - encoding - supports-color - dev: false - /capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + capital-case@1.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case-first: 2.0.2 - dev: false - /caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + caseless@0.12.0: {} - /cbor-extract@2.2.0: - resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==} - hasBin: true - requiresBuild: true + cbor-extract@2.2.0: dependencies: node-gyp-build-optional-packages: 5.1.1 optionalDependencies: @@ -6662,18 +12583,13 @@ packages: '@cbor-extract/cbor-extract-linux-arm64': 2.2.0 '@cbor-extract/cbor-extract-linux-x64': 2.2.0 '@cbor-extract/cbor-extract-win32-x64': 2.2.0 - dev: false optional: true - /cbor-x@1.5.4: - resolution: {integrity: sha512-PVKILDn+Rf6MRhhcyzGXi5eizn1i0i3F8Fe6UMMxXBnWkalq9+C5+VTmlIjAYM4iF2IYF2N+zToqAfYOp+3rfw==} + cbor-x@1.5.4: optionalDependencies: cbor-extract: 2.2.0 - dev: false - /chai@4.3.10: - resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} - engines: {node: '>=4'} + chai@4.3.10: dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -6682,25 +12598,19 @@ packages: loupe: 2.3.6 pathval: 1.1.1 type-detect: 4.0.8 - dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + change-case@4.1.2: dependencies: camel-case: 4.1.2 capital-case: 1.0.4 @@ -6714,29 +12624,18 @@ packages: sentence-case: 3.0.4 snake-case: 3.0.4 tslib: 2.6.2 - dev: false - /change-case@5.1.2: - resolution: {integrity: sha512-CAtbGEDulyjzs05RXy3uKcwqeztz/dMEuAc1Xu9NQBsbrhuGMneL0u9Dj5SoutLKBFYun8txxYIwhjtLNfUmCA==} - dev: false + change-case@5.1.2: {} - /character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - dev: false + character-entities@2.0.2: {} - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@1.0.3: dependencies: get-func-name: 2.0.2 - dev: true - /check-more-types@2.24.0: - resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} - engines: {node: '>= 0.8.0'} + check-more-types@2.24.0: {} - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -6747,207 +12646,124 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chownr@1.1.4: {} - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} + chownr@2.0.0: {} - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} + ci-info@3.8.0: {} - /cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + cipher-base@1.0.4: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /classnames@2.3.2: - resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} - dev: false + classnames@2.3.2: {} - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} + clean-stack@2.2.0: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - /cli-spinners@2.9.1: - resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.1: {} - /cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} - engines: {node: 10.* || >= 12.*} + cli-table3@0.6.3: dependencies: string-width: 4.2.3 optionalDependencies: '@colors/colors': 1.5.0 - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} + cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: false - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /clsx@1.1.1: - resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} - engines: {node: '>=6'} - dev: false + clsx@1.1.1: {} - /color-convert@0.5.3: - resolution: {integrity: sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==} - dev: false + color-convert@0.5.3: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-diff@1.4.0: - resolution: {integrity: sha512-4oDB/o78lNdppbaqrg0HjOp7pHmUc+dfCxWKWFnQg6AB/1dkjtBDop3RZht5386cq9xBUDRvDvSCA7WUlM9Jqw==} - dev: false + color-diff@1.4.0: {} - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-string@1.9.1: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: false - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - dev: false + color-support@1.1.3: {} - /color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + color@4.2.3: dependencies: color-convert: 2.0.1 color-string: 1.9.1 - dev: false - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + colorette@2.0.20: {} - /colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - dev: false + colors@1.4.0: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@2.20.3: {} - /commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} + commander@5.1.0: {} - /commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - dev: true + commander@6.2.1: {} - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} + common-tags@1.8.2: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + commondir@1.0.1: {} - /component-bind@1.0.0: - resolution: {integrity: sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==} - dev: false + component-bind@1.0.0: {} - /component-emitter@1.2.1: - resolution: {integrity: sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==} - dev: false + component-emitter@1.2.1: {} - /component-emitter@1.3.0: - resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} - dev: false + component-emitter@1.3.0: {} - /component-inherit@0.0.3: - resolution: {integrity: sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==} - dev: false + component-inherit@0.0.3: {} - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} + compressible@2.0.18: dependencies: mime-db: 1.52.0 - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} + compression@1.7.4: dependencies: accepts: 1.3.8 bytes: 3.0.0 @@ -6959,52 +12775,34 @@ packages: transitivePeerDependencies: - supports-color - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-map@0.0.1: {} - /concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} + concat-stream@1.6.2: dependencies: buffer-from: 1.1.2 inherits: 2.0.4 readable-stream: 2.3.8 typedarray: 0.0.6 - dev: true - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true + confusing-browser-globals@1.0.11: {} - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: false + console-control-strings@1.1.0: {} - /constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + constant-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case: 2.0.2 - dev: false - /constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - dev: true + constants-browserify@1.0.0: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} + content-type@1.0.5: {} - /contro-max@0.1.2(typescript@5.2.2): - resolution: {integrity: sha512-mY9aRQ9on/iyzvyhb4OD/10WRRKulVd92F7cxMFVn3rq5EwI+gZitGpHN2mp9+IzwRgBJrOKr1C051b3YlEktQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + contro-max@0.1.2(typescript@5.2.2): dependencies: emittery: 0.10.2 lodash-es: 4.17.21 @@ -7013,92 +12811,60 @@ packages: use-typed-event-listener: 4.0.2(react@18.2.0)(typescript@5.2.2) transitivePeerDependencies: - typescript - dev: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@1.9.0: {} - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.0.6: {} - /cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - dev: false + cookie@0.4.2: {} - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} + cookie@0.5.0: {} - /copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + copy-to-clipboard@3.3.3: dependencies: toggle-selection: 1.0.6 - dev: false - /core-js-compat@3.32.1: - resolution: {integrity: sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==} + core-js-compat@3.32.1: dependencies: browserslist: 4.21.10 - /core-js@3.32.1: - resolution: {integrity: sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==} - requiresBuild: true - dev: false + core-js@3.32.1: {} - /core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + core-util-is@1.0.2: {} - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + core-util-is@1.0.3: {} - /cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + cors@2.8.5: dependencies: object-assign: 4.1.1 vary: 1.1.2 - dev: false - /corser@2.0.1: - resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} - engines: {node: '>= 0.4.0'} - dev: true + corser@2.0.1: {} - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.0 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: false - /create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + create-ecdh@4.0.4: dependencies: bn.js: 4.12.0 elliptic: 6.5.4 - dev: true - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + create-hash@1.2.0: dependencies: cipher-base: 1.0.4 inherits: 2.0.4 md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 - dev: true - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-hmac@1.1.7: dependencies: cipher-base: 1.0.4 create-hash: 1.2.0 @@ -7106,33 +12872,24 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: true - /crelt@1.0.6: - resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} - dev: false + crelt@1.0.6: {} - /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} + cross-spawn@6.0.5: dependencies: nice-try: 1.0.5 path-key: 2.0.1 semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - /crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + crypto-browserify@3.12.0: dependencies: browserify-cipher: 1.0.1 browserify-sign: 4.2.1 @@ -7145,53 +12902,33 @@ packages: public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 - dev: true - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} + crypto-random-string@2.0.0: {} - /css-in-js-utils@3.1.0: - resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} + css-in-js-utils@3.1.0: dependencies: hyphenate-style-name: 1.0.4 - dev: false - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.1.0: dependencies: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 domutils: 3.1.0 nth-check: 2.1.1 - dev: true - /css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} + css-tree@1.1.3: dependencies: mdn-data: 2.0.14 source-map: 0.6.1 - dev: false - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true + css-what@6.1.0: {} - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + csstype@3.1.2: {} - /cypress-esbuild-preprocessor@1.0.2: - resolution: {integrity: sha512-JsFnm6fBQt/OEzstknJ1KLMTuUERUaG0ZB9fk0KdNUlZqxaVEoQ9/pFvKmqRfzUe2y00cWD++ptccQA4tNAAlQ==} - dev: true + cypress-esbuild-preprocessor@1.0.2: {} - /cypress-plugin-snapshots@1.4.4(cypress@10.11.0): - resolution: {integrity: sha512-rijq3RTEZNtxQA4KCUwjXinmE1Ww+z6cQW0B14iodFM/HlX5LN16XT/2QS3X1nUXRKt0QdTrAC5MQfMUrjBkSQ==} - engines: {node: '>=8.2.1'} - peerDependencies: - cypress: ^4.5.0 + cypress-plugin-snapshots@1.4.4(cypress@10.11.0): dependencies: cypress: 10.11.0 diff2html: 2.12.2 @@ -7213,13 +12950,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /cypress@10.11.0: - resolution: {integrity: sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==} - engines: {node: '>=12.0.0'} - hasBin: true - requiresBuild: true + cypress@10.11.0: dependencies: '@cypress/request': 2.88.12 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) @@ -7264,212 +12996,119 @@ packages: untildify: 4.0.0 yauzl: 2.10.0 - /dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} + dashdash@1.14.1: dependencies: assert-plus: 1.0.0 - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.0: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /dayjs@1.11.9: - resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} + dayjs@1.11.9: {} - /debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - dev: false + debounce@1.2.1: {} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: dependencies: ms: 2.0.0 - /debug@3.1.0: - resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.1.0: dependencies: ms: 2.0.0 - dev: false - /debug@3.2.7(supports-color@8.1.1): - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: supports-color: 8.1.1 - /debug@4.1.1: - resolution: {integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==} - deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.1.1: dependencies: ms: 2.1.3 - dev: false - /debug@4.3.4(supports-color@8.1.1): - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decamelize@1.2.0: {} - /decamelize@5.0.1: - resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} - engines: {node: '>=10'} - dev: true + decamelize@5.0.1: {} - /decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 - dev: false - /decompress-response@4.2.1: - resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} - engines: {node: '>=8'} + decompress-response@4.2.1: dependencies: mimic-response: 2.1.0 - dev: false - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - dev: false - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} + deep-eql@4.1.3: dependencies: type-detect: 4.0.8 - dev: true - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - requiresBuild: true - dev: false + deep-extend@0.6.0: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: false + deepmerge@4.3.1: {} - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} + default-browser-id@3.0.0: dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 - dev: true - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-data-property@1.1.0: - resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} - engines: {node: '>= 0.4'} + define-data-property@1.1.0: dependencies: get-intrinsic: 1.2.1 gopd: 1.0.1 has-property-descriptors: 1.0.0 - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true + define-lazy-prop@2.0.0: {} - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.0 has-property-descriptors: 1.0.0 object-keys: 1.1.1 - /defu@6.1.2: - resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} - dev: true + defu@6.1.2: {} - /del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} + del@6.1.1: dependencies: globby: 11.1.0 graceful-fs: 4.2.11 @@ -7479,243 +13118,156 @@ packages: p-map: 4.0.0 rimraf: 3.0.2 slash: 3.0.0 - dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + delayed-stream@1.0.0: {} - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: false + delegates@1.0.0: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + depd@2.0.0: {} - /dequal@1.0.0: - resolution: {integrity: sha512-/Nd1EQbQbI9UbSHrMiKZjFLrXSnU328iQdZKPQf78XQI6C+gutkFUeoHpG5J08Ioa6HeRbRNFpSIclh1xyG0mw==} - engines: {node: '>=6'} - dev: true + dequal@1.0.0: {} - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} + dequal@2.0.3: {} - /des.js@1.1.0: - resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + des.js@1.1.0: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: true - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + destroy@1.2.0: {} - /detect-collisions@7.0.5: - resolution: {integrity: sha512-RiebSYJ9Vok1uVm57bxpI69EO2ySK1rdcHpRv28IDBh/wgaF8wxjoZJV7mmqz8MOKioLwMHvcMyP1R0CLZ+RbA==} + detect-collisions@7.0.5: dependencies: '@types/rbush': 3.0.1 '@types/sat': 0.0.31 poly-decomp: 0.3.0 rbush: 3.0.1 sat: 0.9.0 - dev: false - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - requiresBuild: true - dev: false + detect-libc@2.0.2: {} - /detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: true + detect-node-es@1.1.0: {} - /detect-package-manager@2.0.1: - resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} - engines: {node: '>=12'} + detect-package-manager@2.0.1: dependencies: execa: 5.1.1 - dev: true - /detect-port@1.5.1: - resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true + detect-port@1.5.1: dependencies: address: 1.2.2 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + devlop@1.1.0: dependencies: dequal: 2.0.3 - dev: false - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687: + dependencies: + minecraft-data: 3.62.0 + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + random-seed: 0.3.0 + vec3: 0.1.8 - /diff2html@2.12.2: - resolution: {integrity: sha512-G/Zn1KyG/OeC+67N/P26WHsQpjrjUiRyWGvg29ypy3MxSsBmF0bzsU/Irq70i2UAg+f/MzmLx4v/Nkt01TOU3g==} - engines: {node: '>=4'} + diff-sequences@29.6.3: {} + + diff2html@2.12.2: dependencies: diff: 4.0.2 hogan.js: 3.0.2 merge: 1.2.1 whatwg-fetch: 3.6.18 - dev: false - /diff@2.2.3: - resolution: {integrity: sha512-9wfm3RLzMp/PyTFWuw9liEzdlxsdGixCW0ZTU1XDmtlAkvpVXTPGF8KnfSs0hm3BPbg19OrUPPsRkHXoREpP1g==} - engines: {node: '>=0.3.1'} - dev: false + diff@2.2.3: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: false + diff@4.0.2: {} - /diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + diffie-hellman@5.0.3: dependencies: bn.js: 4.12.0 miller-rabin: 4.0.1 randombytes: 2.1.0 - dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /discontinuous-range@1.0.0: - resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==} + discontinuous-range@1.0.0: {} - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.22.11 csstype: 3.1.2 - dev: false - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true - /dom-walk@0.1.2: - resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} - dev: false + dom-walk@0.1.2: {} - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true + domelementtype@2.3.0: {} - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 - dev: true - /domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.1.0: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 - dev: false - /dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} - engines: {node: '>=12'} - dev: true + dotenv-expand@10.0.0: {} - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: true + dotenv@16.3.1: {} - /draco3d@1.5.6: - resolution: {integrity: sha512-+3NaRjWktb5r61ZFoDejlykPEFKT5N/LkbXsaddlw6xNSXBanUYpFc2AXXpbJDilPHazcSreU/DpQIaxfX0NfQ==} - dev: false + draco3d@1.5.6: {} - /duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + duplexify@3.7.1: dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 2.3.8 stream-shift: 1.0.1 - dev: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + ecc-jsbn@0.1.2: dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 - /ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + ee-first@1.1.1: {} - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true + ejs@3.1.9: dependencies: jake: 10.8.7 - /electron-to-chromium@1.4.504: - resolution: {integrity: sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==} + electron-to-chromium@1.4.504: {} - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + elliptic@6.5.4: dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -7724,47 +13276,29 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: true - /emit-then@2.0.0: - resolution: {integrity: sha512-y5JHnrygHnCndtqVHHDhCr0ZzzWHK5RBTczWRlGSIR5UnGHBXuxpoaE0UB5E82qym8ma2dI799wDSSJN2e4VSg==} - engines: {node: '>=5'} - dev: false + emit-then@2.0.0: {} - /emittery@0.10.2: - resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} - engines: {node: '>=12'} - dev: true + emittery@0.10.2: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} + encodeurl@1.0.2: {} - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - requiresBuild: true + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 - dev: false optional: true - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - /endian-toggle@0.0.0: - resolution: {integrity: sha512-ShfqhXeHRE4TmggSlHXG8CMGIcsOsqDw/GcoPcosToE59Rm9e4aXaMhEQf2kPBsBRrKem1bbOAv5gOKnkliMFQ==} + endian-toggle@0.0.0: {} - /engine.io-client@3.5.3: - resolution: {integrity: sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw==} + engine.io-client@3.5.3: dependencies: component-emitter: 1.3.0 component-inherit: 0.0.3 @@ -7781,10 +13315,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /engine.io-client@6.5.2: - resolution: {integrity: sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==} + engine.io-client@6.5.2: dependencies: '@socket.io/component-emitter': 3.1.0 debug: 4.3.4(supports-color@8.1.1) @@ -7795,26 +13327,18 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /engine.io-parser@2.2.1: - resolution: {integrity: sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==} + engine.io-parser@2.2.1: dependencies: after: 0.8.2 arraybuffer.slice: 0.0.7 base64-arraybuffer: 0.1.4 blob: 0.0.5 has-binary2: 1.0.3 - dev: false - /engine.io-parser@5.2.1: - resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} - engines: {node: '>=10.0.0'} - dev: false + engine.io-parser@5.2.1: {} - /engine.io@3.6.1: - resolution: {integrity: sha512-dfs8EVg/i7QjFsXxn7cCRQ+Wai1G1TlEvHhdYEi80fxn5R1vZ2K661O6v/rezj1FP234SZ14r9CmJke99iYDGg==} - engines: {node: '>=8.0.0'} + engine.io@3.6.1: dependencies: accepts: 1.3.8 base64id: 2.0.0 @@ -7826,11 +13350,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /engine.io@6.5.3: - resolution: {integrity: sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==} - engines: {node: '>=10.2.0'} + engine.io@6.5.3: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.15 @@ -7846,56 +13367,33 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + entities@4.5.0: {} - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - requiresBuild: true - dev: false + env-paths@2.2.1: optional: true - /envinfo@7.10.0: - resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} - engines: {node: '>=4'} - hasBin: true - dev: true + envinfo@7.10.0: {} - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - requiresBuild: true - dev: false + err-code@2.0.3: optional: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - /error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 - dev: false - /eruda@3.0.1: - resolution: {integrity: sha512-6q1Xdwga4JTr1mKSW4mzuWSSbmXgqpm/8Wa1QGFGfCWRjC0bCQjbS4u06M1te1moucIS3hBLlbSTPWYH2W0qbQ==} - dev: false + eruda@3.0.1: {} - /es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} - engines: {node: '>= 0.4'} + es-abstract@1.22.2: dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 @@ -7937,9 +13435,7 @@ packages: unbox-primitive: 1.0.2 which-typed-array: 1.1.11 - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} + es-abstract@1.23.3: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -7987,21 +13483,14 @@ packages: typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 - dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + es-errors@1.3.0: {} - /es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} - engines: {node: '>= 0.4'} + es-iterator-helpers@1.0.18: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -8017,99 +13506,63 @@ packages: internal-slot: 1.0.7 iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - dev: true - /es-module-lexer@0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} - dev: true + es-module-lexer@0.9.3: {} - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.1: dependencies: get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + es-shim-unscopables@1.0.0: dependencies: has: 1.0.3 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - /es6-object-assign@1.1.0: - resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} + es6-object-assign@1.1.0: {} - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: false + es6-promise@4.2.8: {} - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - dev: false - /esbuild-plugin-alias@0.2.1: - resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} - dev: true + esbuild-plugin-alias@0.2.1: {} - /esbuild-plugin-polyfill-node@0.3.0(esbuild@0.19.3): - resolution: {integrity: sha512-SHG6CKUfWfYyYXGpW143NEZtcVVn8S/WHcEOxk62LuDXnY4Zpmc+WmxJKN6GMTgTClXJXhEM5KQlxKY6YjbucQ==} - peerDependencies: - esbuild: '*' + esbuild-plugin-polyfill-node@0.3.0(esbuild@0.19.3): dependencies: '@jspm/core': 2.0.1 esbuild: 0.19.3 import-meta-resolve: 3.0.0 - dev: false - /esbuild-register@3.5.0(esbuild@0.18.20): - resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} - peerDependencies: - esbuild: '>=0.12 <1' + esbuild-register@3.5.0(esbuild@0.18.20): dependencies: debug: 4.3.4(supports-color@8.1.1) esbuild: 0.18.20 transitivePeerDependencies: - supports-color - dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 '@esbuild/android-arm64': 0.18.20 @@ -8134,11 +13587,7 @@ packages: '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - /esbuild@0.19.11: - resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.19.11: optionalDependencies: '@esbuild/aix-ppc64': 0.19.11 '@esbuild/android-arm': 0.19.11 @@ -8163,13 +13612,8 @@ packages: '@esbuild/win32-arm64': 0.19.11 '@esbuild/win32-ia32': 0.19.11 '@esbuild/win32-x64': 0.19.11 - dev: false - /esbuild@0.19.3: - resolution: {integrity: sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.19.3: optionalDependencies: '@esbuild/android-arm': 0.19.3 '@esbuild/android-arm64': 0.19.3 @@ -8193,106 +13637,57 @@ packages: '@esbuild/win32-arm64': 0.19.3 '@esbuild/win32-ia32': 0.19.3 '@esbuild/win32-x64': 0.19.3 - dev: false - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} + escalade@3.1.1: {} - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-html@1.0.3: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escape-string-regexp@1.0.5: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + escape-string-regexp@4.0.0: {} - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 - dev: true - /eslint-config-prettier@8.10.0(eslint@8.50.0): - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@8.10.0(eslint@8.50.0): dependencies: eslint: 8.50.0 - dev: true - /eslint-config-xo-react@0.27.0(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.50.0): - resolution: {integrity: sha512-wiV215xQIn71XZyyVfaOXHaFpR1B14IJttwOjMi/eqUK1s+ojJdHr7eHqTLaGUfh6FKgWha1QNwePlIXx7mBUg==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=8.6.0' - eslint-plugin-react: '>=7.29.0' - eslint-plugin-react-hooks: '>=4.3.0' + eslint-config-xo-react@0.27.0(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0): dependencies: eslint: 8.50.0 eslint-plugin-react: 7.34.1(eslint@8.50.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) - dev: true - /eslint-config-xo-typescript@1.0.1(@typescript-eslint/eslint-plugin@6.1.0)(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-vPQssnRSUgBFOEfB/KY12CXwltwFSn4RSCfa+w7gjBC2PFQ7Yfgmyei+1XUZ3K+8LRGef2NMJUcxts7PldhDjg==} - engines: {node: '>=16'} - peerDependencies: - '@typescript-eslint/eslint-plugin': '>=6.0.0' - '@typescript-eslint/parser': '>=6.0.0' - eslint: '>=8.0.0' - typescript: '>=4.7' + eslint-config-xo-typescript@1.0.1(@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2))(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2): dependencies: - '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2) '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) eslint: 8.50.0 typescript: 5.2.2 - dev: true - /eslint-config-xo@0.43.1(eslint@8.50.0): - resolution: {integrity: sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=8.27.0' + eslint-config-xo@0.43.1(eslint@8.50.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.50.0 - dev: true - /eslint-config-zardoy@0.2.17(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-d31WsjyVSQqHbzTpBSmH96+nw5gwY2yhDbZatU89gr+U8ou1FRUkJSApYJUgmcINt8AQocj1RDDAVYmVSILZgQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - eslint: ^8.5.0 - eslint-plugin-vue: ^8.4.1 - typescript: ^4.5.2 - vue-eslint-parser: ^8.2.0 - peerDependenciesMeta: - eslint-plugin-vue: - optional: true - vue-eslint-parser: - optional: true + eslint-config-zardoy@0.2.17(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0)(typescript@5.2.2): dependencies: '@rushstack/eslint-patch': 1.4.0 - '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2) '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) eslint: 8.50.0 eslint-config-prettier: 8.10.0(eslint@8.50.0) eslint-config-xo: 0.43.1(eslint@8.50.0) - eslint-config-xo-react: 0.27.0(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.50.0) - eslint-config-xo-typescript: 1.0.1(@typescript-eslint/eslint-plugin@6.1.0)(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) + eslint-config-xo-react: 0.27.0(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0) + eslint-config-xo-typescript: 1.0.1(@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2))(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2) eslint-plugin-eslint-comments: 3.2.0(eslint@8.50.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.7.3)(eslint@8.50.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0) eslint-plugin-node: 11.1.0(eslint@8.50.0) eslint-plugin-sonarjs: 0.19.0(eslint@8.50.0) eslint-plugin-unicorn: 48.0.0(eslint@8.50.0) @@ -8303,80 +13698,39 @@ packages: - eslint-plugin-react - eslint-plugin-react-hooks - supports-color - dev: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7(supports-color@8.1.1) is-core-module: 2.13.0 resolve: 1.22.4 transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint@8.50.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@8.50.0): dependencies: - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) debug: 3.2.7(supports-color@8.1.1) + optionalDependencies: + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) eslint: 8.50.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-es@3.0.1(eslint@8.50.0): - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' + eslint-plugin-es@3.0.1(eslint@8.50.0): dependencies: eslint: 8.50.0 eslint-utils: 2.1.0 regexpp: 3.2.0 - dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.50.0): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' + eslint-plugin-eslint-comments@3.2.0(eslint@8.50.0): dependencies: escape-string-regexp: 1.0.5 eslint: 8.50.0 ignore: 5.2.4 - dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@6.7.3)(eslint@8.50.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.27.5(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0): dependencies: - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 @@ -8384,7 +13738,7 @@ packages: doctrine: 2.1.0 eslint: 8.50.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint@8.50.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@8.50.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -8393,17 +13747,14 @@ packages: resolve: 1.22.4 semver: 6.3.1 tsconfig-paths: 3.14.2 + optionalDependencies: + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-node@11.1.0(eslint@8.50.0): - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' + eslint-plugin-node@11.1.0(eslint@8.50.0): dependencies: eslint: 8.50.0 eslint-plugin-es: 3.0.1(eslint@8.50.0) @@ -8412,22 +13763,12 @@ packages: minimatch: 3.1.2 resolve: 1.22.4 semver: 6.3.1 - dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.50.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@4.6.0(eslint@8.50.0): dependencies: eslint: 8.50.0 - dev: true - /eslint-plugin-react@7.34.1(eslint@8.50.0): - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-react@7.34.1(eslint@8.50.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -8448,22 +13789,12 @@ packages: resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.11 - dev: true - /eslint-plugin-sonarjs@0.19.0(eslint@8.50.0): - resolution: {integrity: sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==} - engines: {node: '>=14'} - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint-plugin-sonarjs@0.19.0(eslint@8.50.0): dependencies: eslint: 8.50.0 - dev: true - /eslint-plugin-unicorn@48.0.0(eslint@8.50.0): - resolution: {integrity: sha512-8fk/v3p1ro34JSVDBEmtOq6EEQRpMR0iTir79q69KnXFZ6DJyPkT3RAi+ZoTqhQMdDSpGh8BGR68ne1sP5cnAA==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' + eslint-plugin-unicorn@48.0.0(eslint@8.50.0): dependencies: '@babel/helper-validator-identifier': 7.22.5 '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) @@ -8481,37 +13812,21 @@ packages: regjsparser: 0.10.0 semver: 7.5.4 strip-indent: 3.0.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} + eslint-utils@2.1.0: dependencies: eslint-visitor-keys: 1.3.0 - dev: true - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true + eslint-visitor-keys@1.3.0: {} - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.50.0: - resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.50.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) '@eslint-community/regexpp': 4.8.0 @@ -8552,99 +13867,59 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-to-babel@3.2.1: - resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} - engines: {node: '>=8.3.0'} + estree-to-babel@3.2.1: dependencies: '@babel/traverse': 7.22.11 '@babel/types': 7.23.0 c8: 7.14.0 transitivePeerDependencies: - supports-color - dev: true - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: false + estree-walker@1.0.1: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + estree-walker@2.0.2: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + esutils@2.0.3: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} + etag@1.8.1: {} - /event-promise@0.0.1: - resolution: {integrity: sha512-ouEmk2N0BalybPM0zmj3RHE93AX4p9hAIHZfbbqxolLChqCB6pcLDbYH6zZ8TaiFWImPHfs5kFnNpA0u9RdEaQ==} + event-promise@0.0.1: dependencies: promise: 5.0.0 - dev: false - /event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} + event-target-shim@5.0.1: {} - /eventemitter2@6.4.7: - resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} + eventemitter2@6.4.7: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@4.0.7: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} + events@3.3.0: {} - /evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 - dev: true - /execa@4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} + execa@4.1.0: dependencies: cross-spawn: 7.0.3 get-stream: 5.2.0 @@ -8656,9 +13931,7 @@ packages: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -8669,51 +13942,29 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /executable@4.1.1: - resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} - engines: {node: '>=4'} + executable@4.1.1: dependencies: pify: 2.3.0 - /exif-parser@0.1.12: - resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} - dev: false + exif-parser@0.1.12: {} - /exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - dev: false + exit-hook@2.2.1: {} - /expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - requiresBuild: true - dev: false + expand-template@2.0.3: {} - /exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - requiresBuild: true - dev: false + exponential-backoff@3.1.1: optional: true - /express-ws@4.0.0(express@4.18.2): - resolution: {integrity: sha512-KEyUw8AwRET2iFjFsI1EJQrJ/fHeGiJtgpYgEWG3yDv4l/To/m3a2GaYfeGyB3lsWdvbesjF5XCMx+SVBgAAYw==} - engines: {node: '>=4.5.0'} - peerDependencies: - express: ^4.0.0 || ^5.0.0-alpha.1 + express-ws@4.0.0(express@4.18.2): dependencies: express: 4.18.2 ws: 5.2.3 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: false - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} + express@4.18.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -8749,12 +14000,9 @@ packages: transitivePeerDependencies: - supports-color - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extend@3.0.2: {} - /extract-zip@1.7.0: - resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} - hasBin: true + extract-zip@1.7.0: dependencies: concat-stream: 1.6.2 debug: 2.6.9 @@ -8762,12 +14010,8 @@ packages: yauzl: 2.10.0 transitivePeerDependencies: - supports-color - dev: true - /extract-zip@2.0.1(supports-color@8.1.1): - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true + extract-zip@2.0.1(supports-color@8.1.1): dependencies: debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 @@ -8777,117 +14021,73 @@ packages: transitivePeerDependencies: - supports-color - /extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} + extsprintf@1.3.0: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fast-loops@1.1.3: - resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==} - dev: false + fast-loops@1.1.3: {} - /fast-shallow-equal@1.0.0: - resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} - dev: false + fast-shallow-equal@1.0.0: {} - /fastest-stable-stringify@2.0.2: - resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} - dev: false + fastest-stable-stringify@2.0.2: {} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.15.0: dependencies: reusify: 1.0.4 - dev: true - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fd-slicer@1.1.0: dependencies: pend: 1.2.0 - /fetch-retry@5.0.6: - resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} - dev: true + fetch-retry@5.0.6: {} - /fflate@0.6.10: - resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==} + fflate@0.6.10: {} - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.1.0 - dev: true - /file-system-cache@2.3.0: - resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + file-system-cache@2.3.0: dependencies: fs-extra: 11.1.1 ramda: 0.29.0 - dev: true - /file-type@9.0.0: - resolution: {integrity: sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==} - engines: {node: '>=6'} - dev: false + file-type@9.0.0: {} - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - requiresBuild: true - dev: false + file-uri-to-path@1.0.0: optional: true - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filelist@1.0.4: dependencies: minimatch: 5.1.6 - /filesize@10.0.12: - resolution: {integrity: sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==} - engines: {node: '>= 10.4.0'} + filesize@10.0.12: {} - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + finalhandler@1.2.0: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -8899,220 +14099,136 @@ packages: transitivePeerDependencies: - supports-color - /find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} + find-cache-dir@2.1.0: dependencies: commondir: 1.0.1 make-dir: 2.1.0 pkg-dir: 3.0.0 - dev: true - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} + find-cache-dir@3.3.2: dependencies: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 - dev: true - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false + find-root@1.1.0: {} - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} + find-up@3.0.0: dependencies: locate-path: 3.0.0 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} - engines: {node: '>=12.0.0'} + flat-cache@3.1.0: dependencies: flatted: 3.2.7 keyv: 4.5.3 rimraf: 3.0.2 - dev: true - /flatmap@0.0.3: - resolution: {integrity: sha512-OuR+o7kHVe+x9RtIujPay7Uw3bvDZBZFSBXClEphZuSDLmZTqMdclasf4vFSsogC8baDz0eaC2NdO/2dlXHBKQ==} - dev: false + flatmap@0.0.3: {} - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + flatted@3.2.7: {} - /flow-parser@0.218.0: - resolution: {integrity: sha512-mk4e7UK4P/W3tjrJyto6oxPuCjwvRMyzBh72hTl8T0dOcTzkP0M2JJHpncgyhKphMFi9pnjwHfc8e0oe4Uk3LA==} - engines: {node: '>=0.4.0'} - dev: true + flow-parser@0.218.0: {} - /follow-redirects@1.15.3(debug@4.3.4): - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dependencies: - debug: 4.3.4(supports-color@8.1.1) - dev: true - - /follow-redirects@1.15.6(debug@4.3.4): - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dependencies: + follow-redirects@1.15.3(debug@4.3.4): + optionalDependencies: debug: 4.3.4(supports-color@8.1.1) - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + follow-redirects@1.15.6(debug@4.3.4): + optionalDependencies: + debug: 4.3.4(supports-color@8.1.1) + + for-each@0.3.3: dependencies: is-callable: 1.2.7 - /foreground-child@2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} + foreground-child@2.0.0: dependencies: cross-spawn: 7.0.3 signal-exit: 3.0.7 - dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true - /forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + forever-agent@0.6.1: {} - /form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} + form-data@2.3.3: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} + forwarded@0.2.0: {} - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} + fresh@0.5.2: {} - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-constants@1.0.0: {} - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} + fs-extra@11.1.1: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: false - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: false - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true + fsevents@2.3.3: optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + function-bind@1.1.1: {} - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 functions-have-names: 1.2.3 - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + functions-have-names@1.2.3: {} - /gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} + gauge@3.0.2: dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -9123,12 +14239,8 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 - dev: false - /gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + gauge@4.0.4: dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -9138,32 +14250,22 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 - dev: false optional: true - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + get-caller-file@2.0.5: {} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true + get-func-name@2.0.2: {} - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + get-intrinsic@1.2.1: dependencies: function-bind: 1.1.1 has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 @@ -9171,76 +14273,46 @@ packages: has-symbols: 1.0.3 hasown: 2.0.1 - /get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - dev: true + get-nonce@1.0.1: {} - /get-npm-tarball-url@2.0.3: - resolution: {integrity: sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==} - engines: {node: '>=12.17'} - dev: true + get-npm-tarball-url@2.0.3: {} - /get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: false + get-own-enumerable-property-symbols@3.0.2: {} - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true + get-package-type@0.1.0: {} - /get-port@5.1.1: - resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} - engines: {node: '>=8'} - dev: true + get-port@5.1.1: {} - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.0 - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - dev: true - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + get-tsconfig@4.7.2: dependencies: resolve-pkg-maps: 1.0.0 - dev: false - /getos@3.2.1: - resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} + getos@3.2.1: dependencies: async: 3.2.5 - /getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + getpass@0.1.7: dependencies: assert-plus: 1.0.0 - /giget@1.1.3: - resolution: {integrity: sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==} - hasBin: true + giget@1.1.3: dependencies: colorette: 2.0.20 defu: 6.1.2 @@ -9251,21 +14323,12 @@ packages: tar: 6.2.0 transitivePeerDependencies: - supports-color - dev: true - /github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - requiresBuild: true - dev: false + github-from-package@0.0.0: {} - /github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - dev: true + github-slugger@1.5.0: {} - /gl@6.0.2: - resolution: {integrity: sha512-yBbfpChOtFvg5D+KtMaBFvj6yt3vUnheNAH+UrQH2TfDB8kr0tERdL0Tjhe0W7xJ6jR6ftQBluTZR9jXUnKe8g==} - engines: {node: '>=14.0.0'} - requiresBuild: true + gl@6.0.2: dependencies: bindings: 1.5.0 bit-twiddle: 1.0.2 @@ -9277,51 +14340,32 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: false optional: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-promise@4.2.2(glob@7.2.3): - resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==} - engines: {node: '>=12'} - peerDependencies: - glob: ^7.1.6 + glob-promise@4.2.2(glob@7.2.3): dependencies: '@types/glob': 7.2.0 glob: 7.2.3 - dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + glob-to-regexp@0.4.1: {} - /glob@10.3.3: - resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.3: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.0 minimatch: 9.0.3 minipass: 7.0.3 path-scurry: 1.10.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -9330,52 +14374,35 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - requiresBuild: true + glob@8.1.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 5.1.6 once: 1.4.0 - dev: false optional: true - /global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} + global-dirs@3.0.1: dependencies: ini: 2.0.0 - /global@4.4.0: - resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + global@4.4.0: dependencies: min-document: 2.19.0 process: 0.11.10 - dev: false - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + globals@11.12.0: {} - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} - engines: {node: '>=8'} + globals@13.21.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: define-properties: 1.2.1 - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -9383,31 +14410,21 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 - dev: true - /glsl-tokenizer@2.1.5: - resolution: {integrity: sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==} - requiresBuild: true + glsl-tokenizer@2.1.5: dependencies: through2: 0.6.5 - dev: false optional: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.1 - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /gunzip-maybe@1.4.2: - resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} - hasBin: true + gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 is-deflate: 1.0.0 @@ -9415,12 +14432,8 @@ packages: peek-stream: 1.1.3 pumpify: 1.5.1 through2: 2.0.5 - dev: true - /handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true + handlebars@4.7.8: dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -9428,177 +14441,108 @@ packages: wordwrap: 1.0.0 optionalDependencies: uglify-js: 3.17.4 - dev: true - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + hard-rejection@2.1.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-bigints@1.0.2: {} - /has-binary2@1.0.3: - resolution: {integrity: sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==} + has-binary2@1.0.3: dependencies: isarray: 2.0.1 - dev: false - /has-cors@1.1.0: - resolution: {integrity: sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==} - dev: false + has-cors@1.1.0: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + has-property-descriptors@1.0.0: dependencies: get-intrinsic: 1.2.1 - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} + has-proto@1.0.1: {} - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + has-symbols@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.0: dependencies: has-symbols: 1.0.3 - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: false + has-unicode@2.0.1: {} - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + has@1.0.3: dependencies: function-bind: 1.1.1 - /hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} + hash-base@3.1.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 safe-buffer: 5.2.1 - dev: true - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hash.js@1.1.7: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: true - /hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} - engines: {node: '>= 0.4'} + hasown@2.0.1: dependencies: function-bind: 1.1.2 - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true + he@1.2.0: {} - /header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + header-case@2.0.4: dependencies: capital-case: 1.0.4 tslib: 2.6.2 - dev: false - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: true - /hogan.js@3.0.2: - resolution: {integrity: sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==} - hasBin: true + hogan.js@3.0.2: dependencies: mkdirp: 0.3.0 nopt: 1.0.10 - dev: false - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 - dev: true - /html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} + html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 - dev: true - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - dev: true + html-tags@3.3.1: {} - /http-browserify@1.7.0: - resolution: {integrity: sha512-Irf/LJXmE3cBzU1eaR4+NEX6bmVLqt1wkmDiA7kBwH7zmb0D8kBAXsDmQ88hhj/qv9iEZKlyGx/hrMcFi8sOHw==} + http-browserify@1.7.0: dependencies: Base64: 0.2.1 inherits: 2.0.4 - dev: true - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.1.1: {} - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 @@ -9606,34 +14550,24 @@ packages: statuses: 2.0.1 toidentifier: 1.0.1 - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - requiresBuild: true + http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: false optional: true - /http-proxy@1.18.1(debug@4.3.4): - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} + http-proxy@1.18.1(debug@4.3.4): dependencies: eventemitter3: 4.0.7 follow-redirects: 1.15.3(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug - dev: true - /http-server@14.1.1(debug@4.3.4): - resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==} - engines: {node: '>=12'} - hasBin: true + http-server@14.1.1(debug@4.3.4): dependencies: basic-auth: 2.0.1 chalk: 4.1.2 @@ -9651,563 +14585,329 @@ packages: transitivePeerDependencies: - debug - supports-color - dev: true - /http-signature@1.3.6: - resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} - engines: {node: '>=0.10'} + http-signature@1.3.6: dependencies: assert-plus: 1.0.0 jsprim: 2.0.2 sshpk: 1.17.0 - /https-browserify@1.0.0: - resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} - dev: true + https-browserify@1.0.0: {} - /https-proxy-agent@4.0.0: - resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} - engines: {node: '>= 6.0.0'} + https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: false - /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.2: dependencies: agent-base: 7.1.0 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} + human-signals@1.1.1: {} - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - requiresBuild: true + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - dev: false optional: true - /hyphenate-style-name@1.0.4: - resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} - dev: false + hyphenate-style-name@1.0.4: {} - /iconify-icon@1.0.8: - resolution: {integrity: sha512-jvbUKHXf8EnGGArmhlP2IG8VqQLFFyTvTqb9LVL2TKTh7/eCCD1o2HHE9thpbJJb6B8hzhcFb6rOKhvo7reNKA==} + iconify-icon@1.0.8: dependencies: '@iconify/types': 2.0.0 - dev: false - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - /idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: false + idb@7.1.1: {} - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ieee754@1.2.1: {} - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true + ignore@5.2.4: {} - /image-size@0.7.5: - resolution: {integrity: sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==} - engines: {node: '>=6.9.0'} - hasBin: true - dev: false + image-size@0.7.5: {} - /immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: false + immediate@3.0.6: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - /import-meta-resolve@3.0.0: - resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==} - dev: false + import-meta-resolve@3.0.0: {} - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} + indent-string@4.0.0: {} - /indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - dev: true + indent-string@5.0.0: {} - /indexof@0.0.1: - resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==} - dev: false + indexof@0.0.1: {} - /infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - requiresBuild: true - dev: false + infer-owner@1.0.4: optional: true - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - requiresBuild: true - dev: false + ini@1.3.8: {} - /ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} + ini@2.0.0: {} - /inline-style-prefixer@6.0.4: - resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==} + inline-style-prefixer@6.0.4: dependencies: css-in-js-utils: 3.1.0 fast-loops: 1.1.3 - dev: false - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} + internal-slot@1.0.5: dependencies: get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 - dev: true - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 - dev: true - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + ip@2.0.0: {} - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} + ipaddr.js@1.9.1: {} - /is-absolute-url@3.0.3: - resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} - engines: {node: '>=8'} - dev: true + is-absolute-url@3.0.3: {} - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-arguments@1.1.1: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.2: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.2.1: {} - /is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: false + is-arrayish@0.3.2: {} - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + is-callable@1.2.7: {} - /is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true + is-ci@3.0.1: dependencies: ci-info: 3.8.0 - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + is-core-module@2.13.0: dependencies: has: 1.0.3 - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.13.1: dependencies: hasown: 2.0.2 - dev: true - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.0 - /is-deflate@1.0.0: - resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - dev: true + is-deflate@1.0.0: {} - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@2.2.1: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-fullwidth-code-point@3.0.0: {} - /is-function@1.0.2: - resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} - dev: false + is-function@1.0.2: {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.0 - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-gzip@1.0.0: - resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} - engines: {node: '>=0.10.0'} - dev: true + is-gzip@1.0.0: {} - /is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 is-path-inside: 3.0.3 - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - requiresBuild: true - dev: false + is-lambda@1.0.1: optional: true - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true + is-map@2.0.3: {} - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: false + is-module@1.0.0: {} - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} + is-nan@1.3.2: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} + is-negative-zero@2.0.2: {} - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.3: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.0 - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: false + is-obj@1.0.1: {} - /is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - dev: true + is-path-cwd@2.2.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + is-path-inside@3.0.3: {} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-obj@1.1.0: {} - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: false + is-plain-obj@4.1.0: {} - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} + is-plain-object@2.0.4: dependencies: isobject: 3.0.1 - dev: true - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-object@5.0.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - /is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - dev: false + is-regexp@1.0.0: {} - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true + is-set@2.0.3: {} - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.2: dependencies: call-bind: 1.0.2 - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 - dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + is-stream@2.0.1: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.0 - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.12: dependencies: which-typed-array: 1.1.11 - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 - dev: true - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-typedarray@1.0.0: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + is-unicode-supported@0.1.0: {} - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true + is-weakmap@2.0.2: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.2 - /is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} + is-weakset@2.0.3: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - requiresBuild: true - dev: false + isarray@0.0.1: optional: true - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@1.0.0: {} - /isarray@2.0.1: - resolution: {integrity: sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==} - dev: false + isarray@2.0.1: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@2.0.0: {} - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true + isobject@3.0.1: {} - /isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + isstream@0.1.2: {} - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.0: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.22.11 '@babel/parser': 7.22.13 @@ -10216,57 +14916,40 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 4.0.0 supports-color: 7.2.0 - dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} + istanbul-reports@3.1.6: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - dev: true - /jackspeak@2.3.0: - resolution: {integrity: sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==} - engines: {node: '>=14'} + jackspeak@2.3.0: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true + jake@10.8.7: dependencies: async: 3.2.5 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.7 @@ -10281,16 +14964,10 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - dev: true - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-regex-util@29.6.3: {} - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/node': 20.8.0 @@ -10298,29 +14975,21 @@ packages: ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - dev: true - /jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} + jest-worker@26.6.2: dependencies: '@types/node': 20.8.10 merge-stream: 2.0.0 supports-color: 7.2.0 - dev: false - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@29.7.0: dependencies: '@types/node': 20.8.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jimp@0.10.3: - resolution: {integrity: sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==} + jimp@0.10.3: dependencies: '@babel/runtime': 7.22.11 '@jimp/custom': 0.10.3 @@ -10328,54 +14997,31 @@ packages: '@jimp/types': 0.10.3(@jimp/custom@0.10.3) core-js: 3.32.1 regenerator-runtime: 0.13.11 - dev: false - /jose@4.15.5: - resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} + jose@4.15.5: {} - /jpeg-js@0.3.7: - resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==} - dev: false + jpeg-js@0.3.7: {} - /js-base64@2.6.4: - resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} - dev: false + js-base64@2.6.4: {} - /js-cookie@2.2.1: - resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} - dev: false + js-cookie@2.2.1: {} - /js-graph-algorithms@1.0.18: - resolution: {integrity: sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==} - hasBin: true - dev: false + js-graph-algorithms@1.0.18: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + jsbn@0.1.1: {} - /jscodeshift@0.14.0(@babel/preset-env@7.22.10): - resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 + jscodeshift@0.14.0(@babel/preset-env@7.22.10(@babel/core@7.22.11)): dependencies: '@babel/core': 7.22.11 '@babel/parser': 7.22.13 @@ -10399,88 +15045,50 @@ packages: write-file-atomic: 2.4.3 transitivePeerDependencies: - supports-color - dev: true - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true + jsesc@0.5.0: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true + jsesc@2.5.2: {} - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@3.0.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: true + json-parse-better-errors@1.0.2: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false + json-schema-traverse@1.0.0: {} - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + json-schema@0.4.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json-stringify-safe@5.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + json5@2.2.3: {} - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true + jsonc-parser@3.2.0: {} - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - dev: false - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.11 - /jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - dev: false + jsonpointer@5.0.1: {} - /jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -10493,151 +15101,105 @@ packages: ms: 2.1.3 semver: 7.6.0 - /jsprim@2.0.2: - resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} - engines: {'0': node >=0.6.0} + jsprim@2.0.2: dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 array.prototype.flat: 1.3.2 object.assign: 4.1.5 object.values: 1.2.0 - dev: true - /jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + jszip@3.10.1: dependencies: lie: 3.3.0 pako: 1.0.11 readable-stream: 2.3.8 setimmediate: 1.0.5 - dev: false - /jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + jwa@1.4.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - /jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.2: dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + keyv@4.5.3: dependencies: json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + kind-of@6.0.3: {} - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true + kleur@3.0.3: {} - /lazy-ass@1.6.0: - resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} - engines: {node: '> 0.8'} + lazy-ass@1.6.0: {} - /lazy-universal-dotenv@4.0.0: - resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} - engines: {node: '>=14.0.0'} + lazy-universal-dotenv@4.0.0: dependencies: app-root-dir: 1.0.2 dotenv: 16.3.1 dotenv-expand: 10.0.0 - dev: true - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} + leven@3.1.0: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lie@3.3.0: dependencies: immediate: 3.0.6 - dev: false - /lil-gui@0.17.0: - resolution: {integrity: sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ==} - dev: true + lil-gui@0.17.0: {} - /lil-gui@0.18.2: - resolution: {integrity: sha512-DgdrLy3/KGC0PiQLKgOcJMPItP4xY4iWgJ9+91Zaxfr8GCTmMps05QS9w9jW7yspILlbscbquwjOwxmWnSx5Uw==} - dev: false + lil-gui@0.18.2: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lines-and-columns@1.2.4: {} - /linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 - dev: false - /listr2@3.14.0(enquirer@2.4.1): - resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} - engines: {node: '>=10.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + listr2@3.14.0(enquirer@2.4.1): dependencies: cli-truncate: 2.1.0 colorette: 2.0.20 - enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 + optionalDependencies: + enquirer: 2.4.1 - /lit-element@3.3.3: - resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + lit-element@3.3.3: dependencies: '@lit-labs/ssr-dom-shim': 1.1.1 '@lit/reactive-element': 1.6.3 lit-html: 2.8.0 - /lit-html@2.8.0: - resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + lit-html@2.8.0: dependencies: '@types/trusted-types': 2.0.3 - /lit@2.8.0: - resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + lit@2.8.0: dependencies: '@lit/reactive-element': 1.6.3 lit-element: 3.3.3 lit-html: 2.8.0 - /load-bmfont@1.4.1: - resolution: {integrity: sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==} + load-bmfont@1.4.1: dependencies: buffer-equal: 0.0.1 mime: 1.6.0 @@ -10647,119 +15209,76 @@ packages: phin: 2.9.3 xhr: 2.6.0 xtend: 4.0.2 - dev: false - /load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} + load-json-file@4.0.0: dependencies: graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 - dev: true - /local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} - dev: true + local-pkg@0.4.3: {} - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + locate-path@3.0.0: dependencies: p-locate: 3.0.0 path-exists: 3.0.0 - dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash-es@4.17.21: {} - /lodash.compact@3.0.1: - resolution: {integrity: sha512-2ozeiPi+5eBXW1CLtzjk8XQFhQOEMwwfxblqeq6EGyTxZJ1bPATqilY0e6g2SLQpP4KuMeuioBhEnWz5Pr7ICQ==} - dev: false + lodash.compact@3.0.1: {} - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.debounce@4.0.8: {} - /lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + lodash.get@4.4.2: {} - /lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + lodash.includes@4.3.0: {} - /lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + lodash.isboolean@3.0.3: {} - /lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + lodash.isinteger@4.0.4: {} - /lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + lodash.isnumber@3.0.3: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + lodash.isplainobject@4.0.6: {} - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.isstring@4.0.1: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.merge@4.6.2: {} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.once@4.1.1: {} - /lodash.reduce@4.6.0: - resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==} + lodash.reduce@4.6.0: {} - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: false + lodash.sortby@4.7.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + log-update@4.0.0: dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 slice-ansi: 4.0.0 wrap-ansi: 6.2.0 - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - dev: false + long@5.2.3: {} - /longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - dev: false + longest-streak@3.1.0: {} - /looks-same@8.2.3: - resolution: {integrity: sha512-0LK5r4+9t2D56XPVNH3hhG4o0yBYUdeu9FEd8z0ZCs/2fR9zJQj+6ob6ued8iHk3yddrSAdUA+9YGVK2FBMGUw==} - engines: {node: '>= 12.0.0'} + looks-same@8.2.3: dependencies: color-diff: 1.4.0 fs-extra: 8.1.0 @@ -10768,97 +15287,60 @@ packages: nested-error-stacks: 2.1.1 parse-color: 1.0.0 sharp: 0.30.7 - dev: false - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /loupe@2.3.6: - resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + loupe@2.3.6: dependencies: get-func-name: 2.0.2 - dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lower-case@2.0.2: dependencies: tslib: 2.6.2 - dev: false - /lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} - engines: {node: 14 || >=16.14} - dev: true + lru-cache@10.0.1: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - requiresBuild: true - dev: false + lru-cache@7.18.3: optional: true - /macaddress@0.5.3: - resolution: {integrity: sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==} + macaddress@0.5.3: {} - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 - dev: false - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} + magic-string@0.27.0: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /magic-string@0.30.4: - resolution: {integrity: sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==} - engines: {node: '>=12'} + magic-string@0.30.4: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} + make-dir@2.1.0: dependencies: pify: 4.0.1 semver: 5.7.2 - dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + make-dir@3.1.0: dependencies: semver: 6.3.1 - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + make-dir@4.0.0: dependencies: semver: 7.6.0 - dev: true - /make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + make-fetch-happen@10.2.1: dependencies: agentkeepalive: 4.5.0 cacache: 16.1.3 @@ -10879,32 +15361,19 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: false optional: true - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + makeerror@1.0.12: dependencies: tmpl: 1.0.5 - dev: true - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + map-obj@1.0.1: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + map-obj@4.3.0: {} - /map-or-similar@1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} - dev: true + map-or-similar@1.5.0: {} - /markdown-it@14.0.0: - resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==} - hasBin: true + markdown-it@14.0.0: dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -10912,39 +15381,24 @@ packages: mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 - dev: false - /markdown-to-jsx@7.3.2(react@18.2.0): - resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} - engines: {node: '>= 10'} - peerDependencies: - react: ^18.2.0 + markdown-to-jsx@7.3.2(react@18.2.0): dependencies: react: 18.2.0 - dev: true - /md5-file@4.0.0: - resolution: {integrity: sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==} - engines: {node: '>=6.0'} - hasBin: true - dev: false + md5-file@4.0.0: {} - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + md5.js@1.3.5: dependencies: hash-base: 3.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /mdast-util-definitions@4.0.0: - resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + mdast-util-definitions@4.0.0: dependencies: unist-util-visit: 2.0.3 - dev: true - /mdast-util-from-markdown@2.0.0: - resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + mdast-util-from-markdown@2.0.0: dependencies: '@types/mdast': 4.0.3 '@types/unist': 3.0.2 @@ -10960,17 +15414,13 @@ packages: unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.3 unist-util-is: 6.0.0 - dev: false - /mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + mdast-util-to-markdown@2.1.0: dependencies: '@types/mdast': 4.0.3 '@types/unist': 3.0.2 @@ -10980,44 +15430,26 @@ packages: micromark-util-decode-string: 2.0.0 unist-util-visit: 5.0.0 zwitch: 2.0.4 - dev: false - /mdast-util-to-string@1.1.0: - resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} - dev: true + mdast-util-to-string@1.1.0: {} - /mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdast-util-to-string@4.0.0: dependencies: '@types/mdast': 4.0.3 - dev: false - /mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: false + mdn-data@2.0.14: {} - /mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - dev: false + mdurl@2.0.0: {} - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} + media-typer@0.3.0: {} - /memoizerific@1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + memoizerific@1.11.3: dependencies: map-or-similar: 1.5.0 - dev: true - /memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - dev: true + memorystream@0.3.1: {} - /meow@10.1.5: - resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + meow@10.1.5: dependencies: '@types/minimist': 1.2.3 camelcase-keys: 7.0.2 @@ -11031,32 +15463,20 @@ packages: trim-newlines: 4.1.1 type-fest: 1.4.0 yargs-parser: 20.2.9 - dev: true - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + merge-descriptors@1.0.1: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /merge@1.2.1: - resolution: {integrity: sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==} - dev: false + merge@1.2.1: {} - /meshoptimizer@0.18.1: - resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} + meshoptimizer@0.18.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} + methods@1.1.2: {} - /micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + micromark-core-commonmark@2.0.0: dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 @@ -11074,140 +15494,100 @@ packages: micromark-util-subtokenize: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + micromark-factory-destination@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + micromark-factory-label@2.0.0: dependencies: devlop: 1.1.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + micromark-factory-space@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + micromark-factory-title@2.0.0: dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + micromark-factory-whitespace@2.0.0: dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + micromark-util-character@2.1.0: dependencies: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + micromark-util-chunked@2.0.0: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + micromark-util-classify-character@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + micromark-util-combine-extensions@2.0.0: dependencies: micromark-util-chunked: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + micromark-util-decode-numeric-character-reference@2.0.1: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + micromark-util-decode-string@2.0.0: dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 2.1.0 micromark-util-decode-numeric-character-reference: 2.0.1 micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} - dev: false + micromark-util-encode@2.0.0: {} - /micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} - dev: false + micromark-util-html-tag-name@2.0.0: {} - /micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + micromark-util-normalize-identifier@2.0.0: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + micromark-util-resolve-all@2.0.0: dependencies: micromark-util-types: 2.0.0 - dev: false - /micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + micromark-util-sanitize-uri@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-encode: 2.0.0 micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-subtokenize@2.0.0: - resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + micromark-util-subtokenize@2.0.0: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - dev: false + micromark-util-symbol@2.0.0: {} - /micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} - dev: false + micromark-util-types@2.0.0: {} - /micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromark@4.0.0: dependencies: '@types/debug': 4.1.12 debug: 4.3.4(supports-color@8.1.1) @@ -11228,83 +15608,77 @@ packages: micromark-util-types: 2.0.0 transitivePeerDependencies: - supports-color - dev: false - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true + miller-rabin@4.0.1: dependencies: bn.js: 4.12.0 brorand: 1.1.0 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true + mime@1.6.0: {} - /mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true + mime@2.6.0: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + mimic-fn@2.1.0: {} - /mimic-response@2.1.0: - resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} - engines: {node: '>=8'} - dev: false + mimic-response@2.1.0: {} - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: false + mimic-response@3.1.0: {} - /min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + min-document@2.19.0: dependencies: dom-walk: 0.1.2 - dev: false - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + min-indent@1.0.1: {} - /minecraft-assets@1.12.2: - resolution: {integrity: sha512-/eMxh3LNjCXOnU6KnQMjBM8dRnoJNpWIg7mD2m2RthraYiQK2FNzPWIKxWm2j3Ufcf5nzFXupgABledE86r4fQ==} - dev: false + minecraft-assets@1.12.2: {} - /minecraft-data@3.62.0: - resolution: {integrity: sha512-jJXZ/WgyX79tIHlqvfyqG+sJDUekHiA3e9NRUCMGUno4NDrZMcpRI065DnkrI720RHTMb8iadf0NmnBP4Rla5A==} + minecraft-data@3.62.0: {} - /minecraft-folder-path@1.2.0: - resolution: {integrity: sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==} + minecraft-folder-path@1.2.0: {} - /minecraft-wrap@1.5.1: - resolution: {integrity: sha512-7DZ2WhrcRD3fUMau84l9Va0KWzV92SHNdB7mnNdNhgXID2aW6pjWuYPZi8MepEBemA4XKKdnDx7HmhTbkoiR8A==} - hasBin: true + minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5554c7ab0a74bce52aa5f5f04a48eb8d3b9ac65c(@types/react@18.2.20)(react@18.2.0): + dependencies: + valtio: 1.11.2(@types/react@18.2.20)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + + minecraft-protocol@https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f(encoding@0.1.13): + dependencies: + '@types/readable-stream': 4.0.11 + aes-js: 3.1.2 + buffer-equal: 1.0.1 + debug: 4.3.4(supports-color@8.1.1) + endian-toggle: 0.0.0 + lodash.get: 4.4.2 + lodash.merge: 4.6.2 + minecraft-data: 3.62.0 + minecraft-folder-path: 1.2.0 + node-fetch: 2.7.0(encoding@0.1.13) + node-rsa: 0.4.2 + prismarine-auth: 2.4.2(encoding@0.1.13) + prismarine-nbt: 2.5.0 + prismarine-realms: 1.3.2(encoding@0.1.13) + protodef: 1.15.0 + readable-stream: 4.5.2 + uuid-1345: 1.0.2 + yggdrasil: 1.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + minecraft-wrap@1.5.1(encoding@0.1.13): dependencies: debug: 4.3.4(supports-color@8.1.1) es6-promisify: 5.0.0 @@ -11314,216 +15688,160 @@ packages: minecraft-folder-path: 1.2.0 mkdirp: 0.5.6 mz: 2.7.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) promise-queue: 2.2.5 rimraf: 3.0.2 - yggdrasil: 1.7.0 + yggdrasil: 1.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color - dev: false - /minecrafthawkeye@1.3.6: - resolution: {integrity: sha512-SlRlorxQs6nNzMiiIQ5z47wzbAI27UaCdbRB82CE8jqj4C8m3Gqk5TlgN+PSThxx8EDPXySzd8Vk+/wNigAd5A==} + minecrafthawkeye@1.3.6: dependencies: detect-collisions: 7.0.5 vec3: 0.1.8 - dev: false - /mineflayer-pathfinder@2.4.4: - resolution: {integrity: sha512-HAXakZrJRb1UC+5dv8EaDrqjW3ZnBnBk3nkb6x/YWyhHCUKn/E7VU0FO+UN9whuqPlkSaVumEdXJdydE6lSYxQ==} + mineflayer-pathfinder@2.4.4: dependencies: minecraft-data: 3.62.0 - prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.2.1 prismarine-physics: 1.8.0 vec3: 0.1.8 - dev: true - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true + mineflayer@https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f(encoding@0.1.13): + dependencies: + minecraft-data: 3.62.0 + minecraft-protocol: https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f(encoding@0.1.13) + prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-chat: 1.9.1 + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + prismarine-entity: 2.3.1 + prismarine-item: 1.14.0 + prismarine-nbt: 2.5.0 + prismarine-physics: 1.8.0 + prismarine-recipe: 1.3.1(prismarine-registry@1.7.0) + prismarine-registry: 1.7.0 + prismarine-windows: 2.9.0 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 + protodef: 1.15.0 + typed-emitter: 1.4.0 + vec3: 0.1.8 + transitivePeerDependencies: + - encoding + - supports-color - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: true + minimalistic-assert@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + minimist-options@4.1.0: dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minimist@1.2.8: {} - /minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - requiresBuild: true + minipass-collect@1.0.2: dependencies: minipass: 3.3.6 - dev: false optional: true - /minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + minipass-fetch@2.1.2: dependencies: minipass: 3.3.6 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: encoding: 0.1.13 - dev: false optional: true - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - requiresBuild: true + minipass-flush@1.0.5: dependencies: minipass: 3.3.6 - dev: false optional: true - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - requiresBuild: true + minipass-pipeline@1.2.4: dependencies: minipass: 3.3.6 - dev: false optional: true - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - requiresBuild: true + minipass-sized@1.0.3: dependencies: minipass: 3.3.6 - dev: false optional: true - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + minipass@3.3.6: dependencies: yallist: 4.0.0 - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} + minipass@5.0.0: {} - /minipass@7.0.3: - resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.0.3: {} - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp-classic@0.5.3: {} - /mkdirp@0.3.0: - resolution: {integrity: sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==} - deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) - dev: false + mkdirp@0.3.0: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true + mkdirp@1.0.4: {} - /mkdirp@2.1.6: - resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} - engines: {node: '>=10'} - hasBin: true - dev: false + mkdirp@2.1.6: {} - /mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + mlly@1.4.2: dependencies: acorn: 8.10.0 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.3.1 - dev: true - /mojangson@2.0.4: - resolution: {integrity: sha512-HYmhgDjr1gzF7trGgvcC/huIg2L8FsVbi/KacRe6r1AswbboGVZDS47SOZlomPuMWvZLas8m9vuHHucdZMwTmQ==} + mojangson@2.0.4: dependencies: nearley: 2.20.1 - /moo@0.5.2: - resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + moo@0.5.2: {} - /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - dev: true + mri@1.2.0: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.0.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.3: {} - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: false - /nan@2.18.0: - resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} - dev: false + nan@2.18.0: {} - /nano-css@5.3.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==} - peerDependencies: - react: ^18.2.0 - react-dom: '*' + nano-css@5.3.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: css-tree: 1.1.3 csstype: 3.1.2 @@ -11535,125 +15853,81 @@ packages: sourcemap-codec: 1.4.8 stacktrace-js: 2.0.2 stylis: 4.2.0 - dev: false - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + nanoid@3.3.6: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.7: {} - /napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} - requiresBuild: true - dev: false + napi-build-utils@1.0.2: {} - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true + natural-compare-lite@1.4.0: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /nearley@2.20.1: - resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} - hasBin: true + nearley@2.20.1: dependencies: commander: 2.20.3 moo: 0.5.2 railroad-diagrams: 1.0.0 randexp: 0.4.6 - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + negotiator@0.6.3: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + neo-async@2.6.2: {} - /nested-error-stacks@2.1.1: - resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - dev: false + nested-error-stacks@2.1.1: {} - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070: + dependencies: + body-parser: 1.20.2 + express: 4.18.2 + express-ws: 4.0.0(express@4.18.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + nice-try@1.0.5: {} + + no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.6.2 - dev: false - /node-abi@3.47.0: - resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==} - engines: {node: '>=10'} - requiresBuild: true + node-abi@3.47.0: dependencies: semver: 7.6.0 - dev: false - /node-addon-api@5.1.0: - resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} - dev: false + node-addon-api@5.1.0: {} - /node-canvas-webgl@0.3.0: - resolution: {integrity: sha512-wDRCTEE2TCqKDeSef5cNgtLv8kgjRlnFN3aYgB9yni0kHRNnKBSSP93lT8VIV5GuMWiy5KNXBU0ilyWL5wTvFg==} - requiresBuild: true + node-canvas-webgl@0.3.0(encoding@0.1.13): dependencies: - canvas: 2.11.2 + canvas: 2.11.2(encoding@0.1.13) gl: 6.0.2 transitivePeerDependencies: - bluebird - encoding - supports-color - dev: false optional: true - /node-dir@0.1.17: - resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} - engines: {node: '>= 0.10.5'} + node-dir@0.1.17: dependencies: minimatch: 3.1.2 - dev: true - /node-fetch-native@1.4.0: - resolution: {integrity: sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==} - dev: true + node-fetch-native@1.4.0: {} - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 - /node-gyp-build-optional-packages@5.1.1: - resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} - hasBin: true - requiresBuild: true + node-gyp-build-optional-packages@5.1.1: dependencies: detect-libc: 2.0.2 - dev: false optional: true - /node-gyp@9.4.1: - resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} - engines: {node: ^12.13 || ^14.13 || >=16} - hasBin: true - requiresBuild: true + node-gyp@9.4.1: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.1 @@ -11669,91 +15943,57 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: false optional: true - /node-gzip@1.1.2: - resolution: {integrity: sha512-ZB6zWpfZHGtxZnPMrJSKHVPrRjURoUzaDbLFj3VO70mpLTW5np96vXyHwft4Id0o+PYIzgDkBUjIzaNHhQ8srw==} - dev: false + node-gzip@1.1.2: {} - /node-html-parser@6.1.10: - resolution: {integrity: sha512-6/uWdWxjQWQ7tMcFK2wWlrflsQUzh1HsEzlIf2j5+TtzfhT2yUvg3DwZYAmjEHeR3uX74ko7exjHW69J0tOzIg==} + node-html-parser@6.1.10: dependencies: css-select: 5.1.0 he: 1.2.0 - dev: true - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true + node-int64@0.4.0: {} - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + node-releases@2.0.13: {} - /node-rsa@0.4.2: - resolution: {integrity: sha512-Bvso6Zi9LY4otIZefYrscsUpo2mUpiAVIEmSZV2q41sP8tHZoert3Yu6zv4f/RXJqMNZQKCtnhDugIuCma23YA==} + node-rsa@0.4.2: dependencies: asn1: 0.2.3 - /node-rsa@1.1.1: - resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} + node-rsa@1.1.1: dependencies: asn1: 0.2.6 - dev: false - /nopt@1.0.10: - resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} - hasBin: true + nopt@1.0.10: dependencies: abbrev: 1.1.1 - dev: false - /nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true + nopt@5.0.0: dependencies: abbrev: 1.1.1 - dev: false - /nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true - requiresBuild: true + nopt@6.0.0: dependencies: abbrev: 1.1.1 - dev: false optional: true - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.4 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} + normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.0 semver: 7.6.0 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true + npm-run-all@4.1.5: dependencies: ansi-styles: 3.2.1 chalk: 2.4.2 @@ -11764,169 +16004,113 @@ packages: read-pkg: 3.0.0 shell-quote: 1.8.1 string.prototype.padend: 3.1.4 - dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - /npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + npmlog@5.0.1: dependencies: are-we-there-yet: 2.0.0 console-control-strings: 1.1.0 gauge: 3.0.2 set-blocking: 2.0.0 - dev: false - /npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + npmlog@6.0.2: dependencies: are-we-there-yet: 3.0.1 console-control-strings: 1.1.0 gauge: 4.0.4 set-blocking: 2.0.0 - dev: false optional: true - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + object-assign@4.1.1: {} - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + object-inspect@1.12.3: {} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.1: {} - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} + object-is@1.1.5: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + object-keys@1.1.1: {} - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.4: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + object.entries@1.1.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} + object.hasown@1.1.4: dependencies: define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} + object.values@1.1.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - dev: true - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + object.values@1.2.0: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /omggif@1.0.10: - resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} - dev: false + omggif@1.0.10: {} - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} + on-headers@1.0.2: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - dev: true + opener@1.5.2: {} - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -11934,11 +16118,8 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -11949,419 +16130,246 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /orderedmap@2.1.1: - resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} - dev: false + orderedmap@2.1.1: {} - /os-browserify@0.3.0: - resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - dev: true + os-browserify@0.3.0: {} - /ospath@1.2.2: - resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} + ospath@1.2.2: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@4.0.0: dependencies: yocto-queue: 1.0.0 - dev: true - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + p-locate@3.0.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /pako@0.2.9: - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - dev: true + pako@0.2.9: {} - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + pako@1.0.11: {} - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + param-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - dev: false - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - /parse-asn1@5.1.6: - resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + parse-asn1@5.1.6: dependencies: asn1.js: 5.4.1 browserify-aes: 1.2.0 evp_bytestokey: 1.0.3 pbkdf2: 3.1.2 safe-buffer: 5.2.1 - dev: true - /parse-bmfont-ascii@1.0.6: - resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} - dev: false + parse-bmfont-ascii@1.0.6: {} - /parse-bmfont-binary@1.0.6: - resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} - dev: false + parse-bmfont-binary@1.0.6: {} - /parse-bmfont-xml@1.1.4: - resolution: {integrity: sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==} + parse-bmfont-xml@1.1.4: dependencies: xml-parse-from-string: 1.0.1 xml2js: 0.4.23 - dev: false - /parse-color@1.0.0: - resolution: {integrity: sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw==} + parse-color@1.0.0: dependencies: color-convert: 0.5.3 - dev: false - /parse-headers@2.0.5: - resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} - dev: false + parse-headers@2.0.5: {} - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + parse-json@4.0.0: dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - /parseqs@0.0.6: - resolution: {integrity: sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==} - dev: false + parseqs@0.0.6: {} - /parseuri@0.0.6: - resolution: {integrity: sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==} - dev: false + parseuri@0.0.6: {} - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + parseurl@1.3.3: {} - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + pascal-case@3.1.2: dependencies: no-case: 3.0.4 tslib: 2.6.2 - dev: false - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true + path-browserify@1.0.1: {} - /path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + path-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - dev: false - /path-exists-cli@2.0.0: - resolution: {integrity: sha512-qGr0A87KYCznmvabblxyxnzA/MtPZ28wH+4SCMP4tjTFAbzqwvs5xpUZExAYzq5OgHe5vIswzdH5iosCb8YF/Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true + path-exists-cli@2.0.0: dependencies: meow: 10.1.5 path-exists: 5.0.0 - dev: true - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true + path-exists@3.0.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + path-exists@5.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + path-is-absolute@1.0.1: {} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: true + path-key@2.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-parse@1.0.7: {} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.10.1: dependencies: lru-cache: 10.0.1 minipass: 7.0.3 - dev: true - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + path-to-regexp@0.1.7: {} - /path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + path-type@3.0.0: dependencies: pify: 3.0.0 - dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + path-type@4.0.0: {} - /pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} - dev: true + pathe@1.1.1: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathval@1.1.1: {} - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} + pbkdf2@3.1.2: dependencies: create-hash: 1.2.0 create-hmac: 1.1.7 ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: true - /peek-stream@1.1.3: - resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 duplexify: 3.7.1 through2: 2.0.5 - dev: true - /peerjs-js-binarypack@2.0.0: - resolution: {integrity: sha512-wu+L0Qeg4IH2DXm3B6xKP5ODeCIovwEEO/Fu3MVqApPQeVLzSdZpFzQzPobh+sdhUWMQGEO7YxHeiwpPngLjqQ==} - engines: {node: '>= 14.0.0'} - dev: false + peerjs-js-binarypack@2.0.0: {} - /peerjs@1.5.0: - resolution: {integrity: sha512-NLZ73jRNE4aLq2pmVTiSkWmwf6cvt9cH72qJHnzaLH+I2CtoWVvY42U9/O0/tYE6UYwRYJ1ktKRs2DdZ1Jrgcg==} - engines: {node: '>= 14'} + peerjs@1.5.0: dependencies: '@msgpack/msgpack': 2.8.0 cbor-x: 1.5.4 eventemitter3: 4.0.7 peerjs-js-binarypack: 2.0.0 webrtc-adapter: 8.2.3 - dev: false - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + pend@1.2.0: {} - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + performance-now@2.1.0: {} - /phin@2.9.3: - resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==} - dev: false + phin@2.9.3: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + picomatch@2.3.1: {} - /pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + pidtree@0.3.1: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + pify@2.3.0: {} - /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - dev: true + pify@3.0.0: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pify@4.0.1: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.6: {} - /pixelmatch@4.0.2: - resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} - hasBin: true + pixelmatch@4.0.2: dependencies: pngjs: 3.4.0 - dev: false - /pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 - dev: true - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /pkg-dir@5.0.0: - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} - engines: {node: '>=10'} + pkg-dir@5.0.0: dependencies: find-up: 5.0.0 - dev: true - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + pkg-types@1.0.3: dependencies: jsonc-parser: 3.2.0 mlly: 1.4.2 pathe: 1.1.1 - dev: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true + pluralize@8.0.0: {} - /pngjs@3.4.0: - resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} - engines: {node: '>=4.0.0'} - dev: false + pngjs@3.4.0: {} - /polished@4.2.2: - resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} - engines: {node: '>=10'} + polished@4.2.2: dependencies: '@babel/runtime': 7.22.11 - dev: true - /poly-decomp@0.3.0: - resolution: {integrity: sha512-hWeBxGzPYiybmI4548Fca7Up/0k1qS5+79cVHI9+H33dKya5YNb9hxl0ZnDaDgvrZSuYFBhkCK/HOnqN7gefkQ==} - dev: false + poly-decomp@0.3.0: {} - /portfinder@1.0.32: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} + portfinder@1.0.32: dependencies: async: 2.6.4 debug: 3.2.7(supports-color@8.1.1) mkdirp: 0.5.6 transitivePeerDependencies: - supports-color - dev: true - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.0.0: {} - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.31: dependencies: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.38: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.2.0 - dev: true - /potpack@1.0.2: - resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} - dev: false + potpack@1.0.2: {} - /prebuild-install@7.1.1: - resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} - engines: {node: '>=10'} - hasBin: true + prebuild-install@7.1.1: dependencies: detect-libc: 2.0.2 expand-template: 2.0.3 @@ -12375,228 +16383,189 @@ packages: simple-get: 4.0.1 tar-fs: 2.1.1 tunnel-agent: 0.6.0 - dev: false - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier@1.19.1: - resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} - engines: {node: '>=4'} - hasBin: true - dev: false + prettier@1.19.1: {} - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier@2.8.8: {} - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} + pretty-bytes@5.6.0: {} - /pretty-bytes@6.1.1: - resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} - engines: {node: ^14.13.1 || >=16.0.0} - dev: false + pretty-bytes@6.1.1: {} - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true - /pretty-hrtime@1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - dev: true + pretty-hrtime@1.0.3: {} - /prismarine-auth@2.4.2: - resolution: {integrity: sha512-Cq4woGobnFYYfMBDh1WITW+Vs98toN91qAFBvBitwV7IwJaiSAh2Nl+WPUEGeg5eLBoSPpSyCVT8P2oi7Cav8g==} + prismarine-auth@2.4.2(encoding@0.1.13): dependencies: '@azure/msal-node': 2.7.0 '@xboxreplay/xboxlive-auth': 3.3.3(debug@4.3.4) debug: 4.3.4(supports-color@8.1.1) jose: 4.15.5 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) smart-buffer: 4.2.0 uuid-1345: 1.0.2 transitivePeerDependencies: - encoding - supports-color - /prismarine-biome@1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0): - resolution: {integrity: sha512-GY6nZxq93mTErT7jD7jt8YS1aPrOakbJHh39seYsJFXvueIOdHAmW16kYQVrTVMW5MlWLQVxV/EquRwOgr4MnQ==} - peerDependencies: - minecraft-data: 3.62.0 - prismarine-registry: ^1.1.0 + prismarine-biome@1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0): dependencies: minecraft-data: 3.62.0 prismarine-registry: 1.7.0 - /prismarine-chat@1.9.1: - resolution: {integrity: sha512-x7WWa5MNhiLZSO6tw+YyKpzquFZ+DNISVgiV6K3SU0GsishMXe+nto02WhF/4AuFerKdugm9u1d/r4C4zSkJOg==} + prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0: + dependencies: + minecraft-data: 3.62.0 + prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) + prismarine-chat: 1.9.1 + prismarine-item: 1.14.0 + prismarine-nbt: 2.5.0 + prismarine-registry: 1.7.0 + + prismarine-chat@1.9.1: dependencies: mojangson: 2.0.4 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 - /prismarine-entity@2.3.1: - resolution: {integrity: sha512-HOv8l7IetHNf4hwZ7V/W4vM3GNl+e6VCtKDkH9h02TRq7jWngsggKtJV+VanCce/sNwtJUhJDjORGs728ep4MA==} + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0): + dependencies: + prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-nbt: 2.5.0 + prismarine-registry: 1.7.0 + smart-buffer: 4.2.0 + uint4: 0.1.2 + vec3: 0.1.8 + xxhash-wasm: 0.4.2 + transitivePeerDependencies: + - minecraft-data + + prismarine-entity@2.3.1: dependencies: prismarine-chat: 1.9.1 prismarine-item: 1.14.0 prismarine-registry: 1.7.0 vec3: 0.1.8 - /prismarine-item@1.14.0: - resolution: {integrity: sha512-udQHYGJ05klFe8Kkc0TOmwoXj5Xl1ZPgHVoMbGUAFB9exN4TFxEa1A39vkSYhxP5Et9PNufQQvFBFVom0nXikA==} + prismarine-item@1.14.0: dependencies: prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 - /prismarine-nbt@2.2.1: - resolution: {integrity: sha512-Mb50c58CPnuZ+qvM31DBa08tf9UumlTq1LkvpMoUpKfCuN05GZHTqCUwER3lxTSHLL0GZKghIPbYR/JQkINijQ==} + prismarine-nbt@2.2.1: dependencies: protodef: 1.15.0 - /prismarine-nbt@2.5.0: - resolution: {integrity: sha512-F0/8UAa9SDDnAGrBYqZc4nG8h2zj5cE2eAJU5xlDR/IsQQ3moVxkOjE3h3nMv6SbvZrvAcgX7waA/nd9LLHYdA==} + prismarine-nbt@2.5.0: dependencies: protodef: 1.15.0 - /prismarine-physics@1.8.0: - resolution: {integrity: sha512-gbM+S+bmVtOKVv+Z0WGaHMeEeBHISIDsRDRlv8sr0dex3ZJRhuq8djA02CBreguXtI18ZKh6q3TSj2qDr45NHA==} + prismarine-physics@1.8.0: dependencies: minecraft-data: 3.62.0 prismarine-nbt: 2.5.0 vec3: 0.1.8 - dev: true - /prismarine-realms@1.3.2: - resolution: {integrity: sha512-5apl9Ru8veTj5q2OozRc4GZOuSIcs3yY4UEtALiLKHstBe8bRw8vNlaz4Zla3jsQ8yP/ul1b1IJINTRbocuA6g==} + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0): + dependencies: + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + prismarine-nbt: 2.5.0 + uint4: 0.1.2 + vec3: 0.1.8 + transitivePeerDependencies: + - minecraft-data + + prismarine-realms@1.3.2(encoding@0.1.13): dependencies: debug: 4.3.4(supports-color@8.1.1) - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color - /prismarine-recipe@1.3.1(prismarine-registry@1.7.0): - resolution: {integrity: sha512-xfa9E9ACoaDi+YzNQ+nk8kWSIqt5vSZOOCHIT+dTXscf/dng2HaJ/59uwe1D/jvOkAd2OvM6RRJM6fFe0q/LDA==} - peerDependencies: - prismarine-registry: ^1.4.0 + prismarine-recipe@1.3.1(prismarine-registry@1.7.0): dependencies: prismarine-registry: 1.7.0 - dev: true - /prismarine-registry@1.7.0: - resolution: {integrity: sha512-yyva0FpWI078nNeMhx8ekVza5uUTYhEv+C+ADu3wUQXiG8qhXkvrf0uzsnhTgZL8BLdsi2axgCEiKw9qSKIuxQ==} + prismarine-registry@1.7.0: dependencies: minecraft-data: 3.62.0 prismarine-nbt: 2.5.0 - /prismarine-schematic@1.2.3: - resolution: {integrity: sha512-Mwpn43vEHhm3aw3cPhJjWqztkW+nX+QLajDHlTask8lEOTGl1WmpvFja4iwiws4GIvaC8x0Foptf4uvDsnjrAg==} + prismarine-schematic@1.2.3: dependencies: minecraft-data: 3.62.0 - prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-nbt: 2.2.1 - prismarine-world: github.com/zardoy/prismarine-world/6ae6f009d38460de284f8c226c665f04cbad9465 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 vec3: 0.1.8 - dev: false - /prismarine-windows@2.9.0: - resolution: {integrity: sha512-fm4kOLjGFPov7TEJRmXHoiPabxIQrG36r2mDjlNxfkcLfMHFb3/1ML6mp4iRQa7wL0GK4DIAyiBqCWoeWDxARg==} + prismarine-windows@2.9.0: dependencies: prismarine-item: 1.14.0 prismarine-registry: 1.7.0 typed-emitter: 2.1.0 - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465: + dependencies: + vec3: 0.1.8 - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} + process-nextick-args@2.0.1: {} - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: true + process@0.11.10: {} - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - requiresBuild: true - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: false + process@https://codeload.github.com/PrismarineJS/node-process/tar.gz/380d0b4f4c86f1b65b216c311bf00431f314e88e: {} + + progress@2.0.3: {} + + promise-inflight@1.0.1: optional: true - /promise-queue@2.2.5: - resolution: {integrity: sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ==} - engines: {node: '>= 0.8.0'} - dev: false + promise-queue@2.2.5: {} - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - requiresBuild: true + promise-retry@2.0.1: dependencies: err-code: 2.0.3 retry: 0.12.0 - dev: false optional: true - /promise@5.0.0: - resolution: {integrity: sha512-N2BfLz0Sigf7rsm5NnItRwTNqEDUF2ephwEXTcOAf2cO9NwZ9TnIjOmnQNtC0r70CV0S1+uc9mSMmFH7gxk87Q==} + promise@5.0.0: dependencies: asap: 1.0.0 - dev: false - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: true - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - /prosemirror-commands@1.5.2: - resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} + prosemirror-commands@1.5.2: dependencies: prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - dev: false - /prosemirror-dropcursor@1.8.1: - resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==} + prosemirror-dropcursor@1.8.1: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 prosemirror-view: 1.33.1 - dev: false - /prosemirror-example-setup@1.2.2: - resolution: {integrity: sha512-pHJc656IgYm249RNp0eQaWNmnyWGk6OrzysWfYI4+NwE14HQ7YNYOlRBLErUS6uCAHIYJLNXf0/XCmf1OCtNbQ==} + prosemirror-example-setup@1.2.2: dependencies: prosemirror-commands: 1.5.2 prosemirror-dropcursor: 1.8.1 @@ -12607,125 +16576,92 @@ packages: prosemirror-menu: 1.2.4 prosemirror-schema-list: 1.3.0 prosemirror-state: 1.4.3 - dev: false - /prosemirror-gapcursor@1.3.2: - resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} + prosemirror-gapcursor@1.3.2: dependencies: prosemirror-keymap: 1.2.2 prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 prosemirror-view: 1.33.1 - dev: false - /prosemirror-history@1.3.2: - resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==} + prosemirror-history@1.3.2: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 prosemirror-view: 1.33.1 rope-sequence: 1.3.4 - dev: false - /prosemirror-inputrules@1.4.0: - resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} + prosemirror-inputrules@1.4.0: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - dev: false - /prosemirror-keymap@1.2.2: - resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} + prosemirror-keymap@1.2.2: dependencies: prosemirror-state: 1.4.3 w3c-keyname: 2.2.8 - dev: false - /prosemirror-markdown@1.12.0: - resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==} + prosemirror-markdown@1.12.0: dependencies: markdown-it: 14.0.0 prosemirror-model: 1.19.4 - dev: false - /prosemirror-menu@1.2.4: - resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} + prosemirror-menu@1.2.4: dependencies: crelt: 1.0.6 prosemirror-commands: 1.5.2 prosemirror-history: 1.3.2 prosemirror-state: 1.4.3 - dev: false - /prosemirror-model@1.19.4: - resolution: {integrity: sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==} + prosemirror-model@1.19.4: dependencies: orderedmap: 2.1.1 - dev: false - /prosemirror-schema-list@1.3.0: - resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} + prosemirror-schema-list@1.3.0: dependencies: prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - dev: false - /prosemirror-state@1.4.3: - resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} + prosemirror-state@1.4.3: dependencies: prosemirror-model: 1.19.4 prosemirror-transform: 1.8.0 prosemirror-view: 1.33.1 - dev: false - /prosemirror-transform@1.8.0: - resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==} + prosemirror-transform@1.8.0: dependencies: prosemirror-model: 1.19.4 - dev: false - /prosemirror-view@1.33.1: - resolution: {integrity: sha512-62qkYgSJIkwIMMCpuGuPzc52DiK1Iod6TWoIMxP4ja6BTD4yO8kCUL64PZ/WhH/dJ9fW0CDO39FhH1EMyhUFEg==} + prosemirror-view@1.33.1: dependencies: prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - dev: false - /protodef-validator@1.3.1: - resolution: {integrity: sha512-lZ5FWKZYR9xOjpMw1+EfZRfCjzNRQWPq+Dk+jki47Sikl2EeWEPnTfnJERwnU/EwFq6us+0zqHHzSsmLeYX+Lg==} - hasBin: true + protodef-validator@1.3.1: dependencies: ajv: 6.12.6 - /protodef@1.15.0: - resolution: {integrity: sha512-bZ2Omw8dT+DACjJHLrBWZlqN4MlT9g9oSpJDdkUAJOStUzgJp+Zn42FJfPUdwutUxjaxA0PftN0PDlNa2XbneA==} - engines: {node: '>=14'} + protodef@1.15.0: dependencies: lodash.get: 4.4.2 lodash.reduce: 4.6.0 protodef-validator: 1.3.1 readable-stream: 3.6.2 - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - /proxy-compare@2.5.1: - resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + proxy-compare@2.5.1: {} - /proxy-from-env@1.0.0: - resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} + proxy-from-env@1.0.0: {} - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + psl@1.9.0: {} - /public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + public-encrypt@4.0.3: dependencies: bn.js: 4.12.0 browserify-rsa: 4.1.0 @@ -12733,45 +16669,30 @@ packages: parse-asn1: 5.1.6 randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: true - /pump@2.0.1: - resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@2.0.1: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - /pumpify@1.5.1: - resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + pumpify@1.5.1: dependencies: duplexify: 3.7.1 inherits: 2.0.4 pump: 2.0.1 - dev: true - /punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - dev: false + punycode.js@2.3.1: {} - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} + punycode@2.3.0: {} - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + punycode@2.3.1: {} - /puppeteer-core@2.1.1: - resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} - engines: {node: '>=8.16.0'} + puppeteer-core@2.1.1: dependencies: '@types/mime-types': 2.1.2 debug: 4.3.4(supports-color@8.1.1) @@ -12787,155 +16708,94 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /qrcode.react@3.1.0(react@18.2.0): - resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} - peerDependencies: - react: ^18.2.0 + qrcode.react@3.1.0(react@18.2.0): dependencies: react: 18.2.0 - dev: false - /qs@6.10.4: - resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} - engines: {node: '>=0.6'} + qs@6.10.4: dependencies: side-channel: 1.0.5 - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} + qs@6.11.0: dependencies: side-channel: 1.0.4 - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} - engines: {node: '>=0.6'} + qs@6.11.2: dependencies: side-channel: 1.0.4 - dev: true - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + querystringify@2.2.0: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true + quick-lru@5.1.1: {} - /quickselect@2.0.0: - resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} - dev: false + quickselect@2.0.0: {} - /railroad-diagrams@1.0.0: - resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==} + railroad-diagrams@1.0.0: {} - /rambda@6.9.0: - resolution: {integrity: sha512-yosVdGg1hNGkXPzqGiOYNEpXKjEOxzUCg2rB0l+NKdyCaSf4z+i5ojbN0IqDSezMMf71YEglI+ZUTgTffn5afw==} - dev: false + rambda@6.9.0: {} - /ramda@0.29.0: - resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} - dev: true + ramda@0.29.0: {} - /randexp@0.4.6: - resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} - engines: {node: '>=0.12'} + randexp@0.4.6: dependencies: discontinuous-range: 1.0.0 ret: 0.1.15 - /random-seed@0.3.0: - resolution: {integrity: sha512-y13xtn3kcTlLub3HKWXxJNeC2qK4mB59evwZ5EkeRlolx+Bp2ztF7LbcZmyCnOqlHQrLnfuNbi1sVmm9lPDlDA==} - engines: {node: '>= 0.6.0'} + random-seed@0.3.0: dependencies: json-stringify-safe: 5.0.1 - dev: false - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - /randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + randomfill@1.0.4: dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: true - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} + range-parser@1.2.1: {} - /range@0.0.3: - resolution: {integrity: sha512-OxK2nY2bmeEB4NxoBraQIBOOeOIxoBvm6yt8MA1kLappgkG3SyLf173iOtT5woWycrtESDD2g0Nl2yt8YPoUnw==} - engines: {node: '>=0.8'} - dev: false + range@0.0.3: {} - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} + raw-body@2.5.1: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: false - /rbush@3.0.1: - resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} + rbush@3.0.1: dependencies: quickselect: 2.0.0 - dev: false - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - requiresBuild: true + rc@1.2.8: dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 - dev: false - /react-colorful@5.6.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} - peerDependencies: - react: ^18.2.0 - react-dom: '>=16.8.0' + react-colorful@5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /react-docgen-typescript@2.2.2(typescript@5.2.2): - resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} - peerDependencies: - typescript: '>= 4.3.x' + react-docgen-typescript@2.2.2(typescript@5.2.2): dependencies: typescript: 5.2.2 - dev: true - /react-docgen@6.0.0-alpha.3: - resolution: {integrity: sha512-DDLvB5EV9As1/zoUsct6Iz2Cupw9FObEGD3DMcIs3EDFIoSKyz8FZtoWj3Wj+oodrU4/NfidN0BL5yrapIcTSA==} - engines: {node: '>=12.0.0'} - hasBin: true + react-docgen@6.0.0-alpha.3: dependencies: '@babel/core': 7.22.11 '@babel/generator': 7.22.10 @@ -12949,140 +16809,78 @@ packages: strip-indent: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 + react-dom@18.2.0(react@18.2.0): dependencies: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 - /react-element-to-jsx-string@15.0.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} - peerDependencies: - react: ^18.2.0 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + react-element-to-jsx-string@15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@base2/pretty-print-object': 1.0.1 is-plain-object: 5.0.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 18.1.0 - dev: true - /react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - dev: false + react-fast-compare@3.2.2: {} - /react-inspector@6.0.2(react@18.2.0): - resolution: {integrity: sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==} - peerDependencies: - react: ^18.2.0 + react-inspector@6.0.2(react@18.2.0): dependencies: react: 18.2.0 - dev: true - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@16.13.1: {} - /react-is@18.1.0: - resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} - dev: true + react-is@18.1.0: {} - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true + react-is@18.2.0: {} - /react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==} - peerDependencies: - '@popperjs/core': ^2.0.0 - react: ^18.2.0 - react-dom: ^16.8.0 || ^17 || ^18 + react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@popperjs/core': 2.11.8 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-fast-compare: 3.2.2 warning: 4.0.3 - dev: false - /react-portal@4.2.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-fE9kOBagwmTXZ3YGRYb4gcMy+kSA+yLO0xnPankjRlfBv4uCpFXqKPfkpsGQQR15wkZ9EssnvTOl1yMzbkxhPQ==} - peerDependencies: - react: ^18.2.0 - react-dom: ^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0 + react-portal@4.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - dev: true + react-refresh@0.14.0: {} - /react-remove-scroll-bar@2.3.4(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + react-remove-scroll-bar@2.3.4(@types/react@18.2.20)(react@18.2.0): dependencies: - '@types/react': 18.2.20 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.20)(react@18.2.0) tslib: 2.6.2 - dev: true - - /react-remove-scroll@2.5.5(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: + optionalDependencies: '@types/react': 18.2.20 + + react-remove-scroll@2.5.5(@types/react@18.2.20)(react@18.2.0): + dependencies: react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.2.20)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.20)(react@18.2.0) tslib: 2.6.2 use-callback-ref: 1.3.0(@types/react@18.2.20)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.20)(react@18.2.0) - dev: true - - /react-style-singleton@2.2.1(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: + optionalDependencies: '@types/react': 18.2.20 + + react-style-singleton@2.2.1(@types/react@18.2.20)(react@18.2.0): + dependencies: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 tslib: 2.6.2 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: ^18.2.0 - react-dom: '>=16.6.0' + react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.22.11 dom-helpers: 5.2.1 @@ -13090,34 +16888,19 @@ packages: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /react-universal-interface@0.6.2(react@18.2.0)(tslib@2.6.2): - resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} - peerDependencies: - react: ^18.2.0 - tslib: '*' + react-universal-interface@0.6.2(react@18.2.0)(tslib@2.6.2): dependencies: react: 18.2.0 tslib: 2.6.2 - dev: false - /react-use-measure@2.1.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==} - peerDependencies: - react: ^18.2.0 - react-dom: '>=16.13' + react-use-measure@2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: debounce: 1.2.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /react-use@17.3.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-hs7+tS4rRm1QLHPfanLCqXIi632tP4V7Sai1ENUP2WTufU6am++tU9uSw9YrNCFqbABiEv0ndKU1XCUcfu2tXA==} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 + react-use@17.3.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -13125,7 +16908,7 @@ packages: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.3.5(react-dom@18.2.0)(react@18.2.0) + nano-css: 5.3.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.6.2) @@ -13135,74 +16918,52 @@ packages: throttle-debounce: 3.0.1 ts-easing: 0.2.0 tslib: 2.6.2 - dev: false - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} + react@18.2.0: dependencies: loose-envify: 1.4.0 - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: true - /read-pkg-up@8.0.0: - resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} - engines: {node: '>=12'} + read-pkg-up@8.0.0: dependencies: find-up: 5.0.0 read-pkg: 6.0.0 type-fest: 1.4.0 - dev: true - /read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} + read-pkg@3.0.0: dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 - dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.2 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: true - /read-pkg@6.0.0: - resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} - engines: {node: '>=12'} + read-pkg@6.0.0: dependencies: '@types/normalize-package-data': 2.4.2 normalize-package-data: 3.0.3 parse-json: 5.2.0 type-fest: 1.4.0 - dev: true - /readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - requiresBuild: true + readable-stream@1.0.34: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 isarray: 0.0.1 string_decoder: 0.10.31 - dev: false optional: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -13212,17 +16973,13 @@ packages: string_decoder: 1.1.1 util-deprecate: 1.0.2 - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readable-stream@4.5.2: - resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-stream@4.5.2: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 @@ -13230,49 +16987,33 @@ packages: process: 0.11.10 string_decoder: 1.3.0 - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /readline@1.3.0: - resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} - dev: false + readline@1.3.0: {} - /recast@0.21.5: - resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} - engines: {node: '>= 4'} + recast@0.21.5: dependencies: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 tslib: 2.6.2 - dev: true - /recast@0.23.4: - resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} - engines: {node: '>= 4'} + recast@0.23.4: dependencies: assert: 2.0.0 ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 tslib: 2.6.2 - dev: true - /redent@4.0.0: - resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} - engines: {node: '>=12'} + redent@4.0.0: dependencies: indent-string: 5.0.0 strip-indent: 4.0.0 - dev: true - /reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -13281,60 +17022,39 @@ packages: get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 - dev: true - /regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} - engines: {node: '>=4'} + regenerate-unicode-properties@10.1.0: dependencies: regenerate: 1.4.2 - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + regenerate@1.4.2: {} - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: false + regenerator-runtime@0.13.11: {} - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + regenerator-runtime@0.14.0: {} - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + regenerator-transform@0.15.2: dependencies: '@babel/runtime': 7.22.11 - /regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - dev: true + regexp-tree@0.1.27: {} - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.1: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 set-function-name: 2.0.1 - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - dev: true - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true + regexpp@3.2.0: {} - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} + regexpu-core@5.3.2: dependencies: '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 @@ -13343,31 +17063,23 @@ packages: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 - /regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: true - - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true + regjsparser@0.10.0: dependencies: jsesc: 0.5.0 - /remark-external-links@8.0.0: - resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} + regjsparser@0.9.1: + dependencies: + jsesc: 0.5.0 + + remark-external-links@8.0.0: dependencies: extend: 3.0.2 is-absolute-url: 3.0.3 mdast-util-definitions: 4.0.0 space-separated-tokens: 1.1.5 unist-util-visit: 2.0.3 - dev: true - /remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.3 mdast-util-from-markdown: 2.0.0 @@ -13375,26 +17087,20 @@ packages: unified: 11.0.4 transitivePeerDependencies: - supports-color - dev: false - /remark-slug@6.1.0: - resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + remark-slug@6.1.0: dependencies: github-slugger: 1.5.0 mdast-util-to-string: 1.1.0 unist-util-visit: 2.0.3 - dev: true - /remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.3 mdast-util-to-markdown: 2.1.0 unified: 11.0.4 - dev: false - /remark@15.0.1: - resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + remark@15.0.1: dependencies: '@types/mdast': 4.0.3 remark-parse: 11.0.0 @@ -13402,270 +17108,165 @@ packages: unified: 11.0.4 transitivePeerDependencies: - supports-color - dev: false - /request-progress@3.0.0: - resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} + request-progress@3.0.0: dependencies: throttleit: 1.0.0 - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: false + require-from-string@2.0.2: {} - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + requires-port@1.0.0: {} - /resize-observer-polyfill@1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} - dev: false + resize-observer-polyfill@1.5.1: {} - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: false + resolve-pkg-maps@1.0.0: {} - /resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} - hasBin: true + resolve@1.22.4: dependencies: is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + resolve@2.0.0-next.5: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - /ret@0.1.15: - resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} - engines: {node: '>=0.12'} + ret@0.1.15: {} - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - requiresBuild: true - dev: false + retry@0.12.0: optional: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + rfdc@1.3.0: {} - /rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true + rimraf@2.6.3: dependencies: glob: 7.2.3 - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@2.7.1: dependencies: glob: 7.2.3 - /rimraf@5.0.1: - resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==} - engines: {node: '>=14'} - hasBin: true + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@5.0.1: dependencies: glob: 10.3.3 - dev: true - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + ripemd160@2.0.2: dependencies: hash-base: 3.1.0 inherits: 2.0.4 - dev: true - /rollup-plugin-terser@7.0.2(rollup@2.79.1): - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^2.0.0 + rollup-plugin-terser@7.0.2(rollup@2.79.1): dependencies: '@babel/code-frame': 7.22.13 jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 terser: 5.19.2 - dev: false - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true + rollup@2.79.1: optionalDependencies: fsevents: 2.3.3 - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true + rollup@3.29.4: optionalDependencies: fsevents: 2.3.3 - /rope-sequence@1.3.4: - resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - dev: false + rope-sequence@1.3.4: {} - /rtl-css-js@1.16.1: - resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + rtl-css-js@1.16.1: dependencies: '@babel/runtime': 7.22.11 - dev: false - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - requiresBuild: true + rxjs@7.8.1: dependencies: tslib: 2.6.2 - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.0.1: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 has-symbols: 1.0.3 isarray: 2.0.5 - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-regex-test@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-regex: 1.1.4 - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + safer-buffer@2.1.2: {} - /sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + sanitize-filename@1.6.3: dependencies: truncate-utf8-bytes: 1.0.2 - dev: false - /sat@0.9.0: - resolution: {integrity: sha512-mxdv5RZJO4tdMnUURGU3gAMcnDUEwcNJwE+lPO0/V+rBeDvFLH3wEZEOR0fH7cTN0zQaNxBEbHnyQL9DzupwQQ==} - dev: false + sat@0.9.0: {} - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - dev: false + sax@1.3.0: {} - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + scheduler@0.23.0: dependencies: loose-envify: 1.4.0 - /screenfull@5.2.0: - resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} - engines: {node: '>=0.10.0'} - dev: false + screenfull@5.2.0: {} - /sdp@3.2.0: - resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==} - dev: false + sdp@3.2.0: {} - /secure-compare@3.0.1: - resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} - dev: true + secure-compare@3.0.1: {} - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + semver@6.3.1: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + semver@7.5.4: dependencies: lru-cache: 6.0.0 - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true + semver@7.6.0: dependencies: lru-cache: 6.0.0 - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + send@0.18.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -13683,23 +17284,17 @@ packages: transitivePeerDependencies: - supports-color - /sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + sentence-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case-first: 2.0.2 - dev: false - /serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + serialize-javascript@4.0.0: dependencies: randombytes: 2.1.0 - dev: false - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} + serve-static@1.15.0: dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 @@ -13708,13 +17303,9 @@ packages: transitivePeerDependencies: - supports-color - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: false + set-blocking@2.0.0: {} - /set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} - engines: {node: '>= 0.4'} + set-function-length@1.2.1: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -13723,54 +17314,35 @@ packages: gopd: 1.0.1 has-property-descriptors: 1.0.2 - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + set-function-name@2.0.1: dependencies: define-data-property: 1.1.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.0 - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /set-harmonic-interval@1.0.1: - resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} - engines: {node: '>=6.9'} - dev: false + set-harmonic-interval@1.0.1: {} - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setimmediate@1.0.5: {} - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + setprototypeof@1.2.0: {} - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true + sha.js@2.4.11: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} + shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 - dev: true - /sharp@0.30.7: - resolution: {integrity: sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==} - engines: {node: '>=12.13.0'} - requiresBuild: true + sharp@0.30.7: dependencies: color: 4.2.3 detect-libc: 2.0.2 @@ -13780,168 +17352,110 @@ packages: simple-get: 4.0.1 tar-fs: 2.1.1 tunnel-agent: 0.6.0 - dev: false - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.1: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.4: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 object-inspect: 1.12.3 - /side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} - engines: {node: '>= 0.4'} + side-channel@1.0.5: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - dev: true - /siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - dev: true + siginfo@2.0.0: {} - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - dev: false + simple-concat@1.0.1: {} - /simple-get@3.1.1: - resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} + simple-get@3.1.1: dependencies: decompress-response: 4.2.1 once: 1.4.0 simple-concat: 1.0.1 - dev: false - /simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 - dev: false - /simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 - dev: false - /simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} + simple-update-notifier@2.0.0: dependencies: semver: 7.6.0 - dev: true - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + sisteransi@1.0.5: {} - /skinview-utils@0.7.1: - resolution: {integrity: sha512-4eLrMqR526ehlZbsd8SuZ/CHpS9GiH0xUMoV+PYlJVi95ZFz5HJu7Spt5XYa72DRS7wgt5qquvHZf0XZJgmu9Q==} - dev: false + skinview-utils@0.7.1: {} - /skinview3d@3.0.1: - resolution: {integrity: sha512-2LUSkzGxlZrTQelGT10jcW4TLiFTg5aZqXMEuqAFoWtk3qtaNu0qRFtwK5dN8zEXyKUJ3xlxah5eGtKY/NifQg==} + skinview3d@3.0.1: dependencies: '@types/three': 0.156.0 skinview-utils: 0.7.1 three: 0.154.0 - dev: false - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} + slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + smart-buffer@4.2.0: {} - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - dev: false - /socket.io-adapter@1.1.2: - resolution: {integrity: sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==} - dev: false + socket.io-adapter@1.1.2: {} - /socket.io-adapter@2.5.2: - resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} + socket.io-adapter@2.5.2: dependencies: ws: 8.11.0 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: false - /socket.io-client@2.5.0: - resolution: {integrity: sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==} + socket.io-client@2.5.0: dependencies: backo2: 1.0.2 component-bind: 1.0.0 @@ -13958,11 +17472,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /socket.io-client@4.7.2: - resolution: {integrity: sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==} - engines: {node: '>=10.0.0'} + socket.io-client@4.7.2: dependencies: '@socket.io/component-emitter': 3.1.0 debug: 4.3.4(supports-color@8.1.1) @@ -13972,41 +17483,31 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /socket.io-parser@3.3.3: - resolution: {integrity: sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==} + socket.io-parser@3.3.3: dependencies: component-emitter: 1.3.0 debug: 3.1.0 isarray: 2.0.1 transitivePeerDependencies: - supports-color - dev: false - /socket.io-parser@3.4.3: - resolution: {integrity: sha512-1rE4dZN3kCI/E5wixd393hmbqa78vVpkKmnEJhLeWoS/C5hbFYAbcSfnWoaVH43u9ToUVtzKjguxEZq+1XZfCQ==} - engines: {node: '>=10.0.0'} + socket.io-parser@3.4.3: dependencies: component-emitter: 1.2.1 debug: 4.1.1 isarray: 2.0.1 transitivePeerDependencies: - supports-color - dev: false - /socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} - engines: {node: '>=10.0.0'} + socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.0 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: false - /socket.io@2.5.0: - resolution: {integrity: sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==} + socket.io@2.5.0: dependencies: debug: 4.1.1 engine.io: 3.6.1 @@ -14018,11 +17519,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /socket.io@4.7.2: - resolution: {integrity: sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==} - engines: {node: '>=10.2.0'} + socket.io@4.7.2: dependencies: accepts: 1.3.8 base64id: 2.0.0 @@ -14035,106 +17533,62 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} - requiresBuild: true + socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color - dev: false optional: true - /socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - requiresBuild: true + socks@2.7.1: dependencies: ip: 2.0.0 smart-buffer: 4.2.0 - dev: false optional: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} + source-map-js@1.0.2: {} - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.0: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - /source-map@0.5.6: - resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} - engines: {node: '>=0.10.0'} - dev: false + source-map@0.5.6: {} - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: false + source-map@0.5.7: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + source-map@0.6.1: {} - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} + source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 - dev: false - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: false + sourcemap-codec@1.4.8: {} - /space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - dev: true + space-separated-tokens@1.1.5: {} - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.13 - dev: true - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + spdx-exceptions@2.3.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 - dev: true - /spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} - dev: true + spdx-license-ids@3.0.13: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /sshpk@1.17.0: - resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} - engines: {node: '>=0.10.0'} - hasBin: true + sshpk@1.17.0: dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -14146,110 +17600,71 @@ packages: safer-buffer: 2.1.2 tweetnacl: 0.14.5 - /ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + ssri@9.0.1: dependencies: minipass: 3.3.6 - dev: false optional: true - /stack-generator@2.0.10: - resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + stack-generator@2.0.10: dependencies: stackframe: 1.3.4 - dev: false - /stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - dev: true + stackback@0.0.2: {} - /stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: false + stackframe@1.3.4: {} - /stacktrace-gps@3.1.2: - resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + stacktrace-gps@3.1.2: dependencies: source-map: 0.5.6 stackframe: 1.3.4 - dev: false - /stacktrace-js@2.0.2: - resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + stacktrace-js@2.0.2: dependencies: error-stack-parser: 2.1.4 stack-generator: 2.0.10 stacktrace-gps: 3.1.2 - dev: false - /stats-gl@1.0.5: - resolution: {integrity: sha512-XimMxvwnf1Qf5KwebhcoA34kcX+fWEkIl0QjNkCbu4IpoyDMMsOajExn7FIq5w569k45+LhmsuRlGSrsvmGdNw==} - dev: false + stats-gl@1.0.5: {} - /stats.js@0.17.0: - resolution: {integrity: sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==} - dev: false + stats.js@0.17.0: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} + statuses@2.0.1: {} - /std-env@3.4.3: - resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} - dev: true + std-env@3.4.3: {} - /store2@2.14.2: - resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} - dev: true + store2@2.14.2: {} - /storybook@7.4.6: - resolution: {integrity: sha512-YkFSpnR47j5zz7yElA+2axLjXN7K7TxDGJRHHlqXmG5iQ0PXzmjrj2RxMDKFz4Ybp/QjEUoJ4rx//ESEY0Nb5A==} - hasBin: true + storybook@7.4.6(encoding@0.1.13): dependencies: - '@storybook/cli': 7.4.6 + '@storybook/cli': 7.4.6(encoding@0.1.13) transitivePeerDependencies: - bufferutil - encoding - supports-color - utf-8-validate - dev: true - /stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + stream-browserify@3.0.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /stream-shift@1.0.1: - resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} - dev: true + stream-shift@1.0.1: {} - /strict-event-emitter-types@2.0.0: - resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==} - dev: false + strict-event-emitter-types@2.0.0: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + string.prototype.matchall@4.0.10: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 @@ -14260,11 +17675,8 @@ packages: regexp.prototype.flags: 1.5.1 set-function-name: 2.0.1 side-channel: 1.0.4 - dev: false - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -14278,203 +17690,128 @@ packages: regexp.prototype.flags: 1.5.2 set-function-name: 2.0.2 side-channel: 1.0.6 - dev: true - /string.prototype.padend@3.1.4: - resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + string.prototype.padend@3.1.4: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.8: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + + string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - requiresBuild: true - dev: false + string_decoder@0.10.31: optional: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - /stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} + stringify-object@3.3.0: dependencies: get-own-enumerable-property-symbols: 3.0.2 is-obj: 1.0.1 is-regexp: 1.0.0 - dev: false - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-comments@2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - dev: false + strip-comments@2.0.1: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + strip-final-newline@2.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} - engines: {node: '>=12'} + strip-indent@4.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dev: false + strip-json-comments@2.0.1: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + strip-literal@1.3.0: dependencies: acorn: 8.10.0 - dev: true - /stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false + stylis@4.2.0: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + supports-preserve-symlinks-flag@1.0.0: {} - /synchronous-promise@2.0.17: - resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} - dev: true + synchronous-promise@2.0.17: {} - /systeminformation@5.22.7: - resolution: {integrity: sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==} - engines: {node: '>=8.0.0'} - os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] - hasBin: true - requiresBuild: true - dev: false + systeminformation@5.22.7: optional: true - /tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - dev: false + tabbable@6.2.0: {} - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + tar-fs@2.1.1: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 pump: 3.0.0 tar-stream: 2.2.0 - /tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + tar-stream@2.2.0: dependencies: bl: 4.1.0 end-of-stream: 1.4.4 @@ -14482,9 +17819,7 @@ packages: inherits: 2.0.4 readable-stream: 3.6.2 - /tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} - engines: {node: '>=10'} + tar@6.2.0: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -14493,85 +17828,55 @@ packages: mkdirp: 1.0.4 yallist: 4.0.0 - /telejson@7.2.0: - resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + telejson@7.2.0: dependencies: memoizerific: 1.11.3 - dev: true - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} + temp-dir@2.0.0: {} - /temp@0.8.4: - resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} - engines: {node: '>=6.0.0'} + temp@0.8.4: dependencies: rimraf: 2.6.3 - dev: true - /tempy@0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} + tempy@0.6.0: dependencies: is-stream: 2.0.1 temp-dir: 2.0.0 type-fest: 0.16.0 unique-string: 2.0.0 - dev: false - /tempy@1.0.1: - resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} - engines: {node: '>=10'} + tempy@1.0.1: dependencies: del: 6.1.1 is-stream: 2.0.1 temp-dir: 2.0.0 type-fest: 0.16.0 unique-string: 2.0.0 - dev: true - /terser@5.19.2: - resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} - engines: {node: '>=10'} - hasBin: true + terser@5.19.2: dependencies: '@jridgewell/source-map': 0.3.5 acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 - dev: false - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - dev: false - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - dev: false - /three-stdlib@2.28.5(three@0.154.0): - resolution: {integrity: sha512-JdLMhkpT+1ZWeQPyKQNW1zqUwISI2hsUljS6u3vB9lp5EvwsayaAzGnbVeR35895udOF+zxcTiQY3psk+qqlxg==} - peerDependencies: - three: 0.154.0 + three-stdlib@2.28.5(three@0.154.0): dependencies: '@types/draco3d': 1.4.7 '@types/offscreencanvas': 2019.7.2 @@ -14580,295 +17885,174 @@ packages: fflate: 0.6.10 potpack: 1.0.2 three: 0.154.0 - dev: false - /three.meshline@1.4.0: - resolution: {integrity: sha512-A8IsiMrWP8zmHisGDAJ76ZD7t/dOF/oCe/FUKNE6Bu01ZYEx8N6IlU/1Plb2aOZtAuWM2A8s8qS3hvY0OFuvOw==} - dev: false + three.meshline@1.4.0: {} - /three@0.154.0: - resolution: {integrity: sha512-Uzz8C/5GesJzv8i+Y2prEMYUwodwZySPcNhuJUdsVMH2Yn4Nm8qlbQe6qRN5fOhg55XB0WiLfTPBxVHxpE60ug==} + three@0.154.0: {} - /throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} - dev: false + throttle-debounce@3.0.1: {} - /throttleit@1.0.0: - resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} + throttleit@1.0.0: {} - /through2@0.6.5: - resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} - requiresBuild: true + through2@0.6.5: dependencies: readable-stream: 1.0.34 xtend: 4.0.2 - dev: false optional: true - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through2@2.0.5: dependencies: readable-stream: 2.3.8 xtend: 4.0.2 - dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + through@2.3.8: {} - /timers-browserify@2.0.12: - resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} - engines: {node: '>=0.6.0'} + timers-browserify@2.0.12: dependencies: setimmediate: 1.0.5 - dev: true - /timm@1.7.1: - resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} - dev: false + timm@1.7.1: {} - /tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} - dev: true + tiny-invariant@1.3.1: {} - /tinybench@2.5.1: - resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} - dev: true + tinybench@2.5.1: {} - /tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - dev: false + tinycolor2@1.6.0: {} - /tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} - engines: {node: '>=14.0.0'} - dev: true + tinypool@0.7.0: {} - /tinyspy@2.2.0: - resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} - engines: {node: '>=14.0.0'} - dev: true + tinyspy@2.2.0: {} - /title-case@3.0.3: - resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + title-case@3.0.3: dependencies: tslib: 2.6.2 - dev: false - /tmp@0.2.1: - resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} - engines: {node: '>=8.17.0'} + tmp@0.2.1: dependencies: rimraf: 3.0.2 - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tmpl@1.0.5: {} - /to-array@0.1.4: - resolution: {integrity: sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==} - dev: false + to-array@0.1.4: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /tocbot@4.21.2: - resolution: {integrity: sha512-R5Muhi/TUu4i4snWVrMgNoXyJm2f8sJfdgIkQvqb+cuIXQEIMAiWGWgCgYXHqX4+XiS/Bnm7IYZ9Zy6NVe6lhw==} - dev: true + tocbot@4.21.2: {} - /toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - dev: false + toggle-selection@1.0.6: {} - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} + toidentifier@1.0.1: {} - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} + tough-cookie@4.1.3: dependencies: psl: 1.9.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@0.0.3: {} - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@1.0.1: dependencies: punycode: 2.3.1 - dev: false - /trim-newlines@4.1.1: - resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} - engines: {node: '>=12'} - dev: true + trim-newlines@4.1.1: {} - /trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - dev: false + trough@2.2.0: {} - /truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + truncate-utf8-bytes@1.0.2: dependencies: utf8-byte-length: 1.0.4 - dev: false - /ts-api-utils@1.0.3(typescript@5.2.2): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.0.3(typescript@5.2.2): dependencies: typescript: 5.2.2 - dev: true - /ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - dev: true + ts-dedent@2.2.0: {} - /ts-easing@0.2.0: - resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} - dev: false + ts-easing@0.2.0: {} - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + tsconfig-paths@3.14.2: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.2: {} - /tsx@4.7.0: - resolution: {integrity: sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==} - engines: {node: '>=18.0.0'} - hasBin: true + tsx@4.7.0: dependencies: esbuild: 0.19.11 get-tsconfig: 4.7.2 optionalDependencies: fsevents: 2.3.3 - dev: false - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 - /tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + tweetnacl@0.14.5: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} + type-fest@0.16.0: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + type-fest@0.21.3: {} - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + type-fest@0.6.0: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + type-fest@0.8.1: {} - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: true + type-fest@1.4.0: {} - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} + type-fest@2.19.0: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.0: dependencies: call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: dependencies: call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.0: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 @@ -14876,9 +18060,7 @@ packages: has-proto: 1.0.1 is-typed-array: 1.1.12 - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 @@ -14886,18 +18068,14 @@ packages: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.4: dependencies: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.12 - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.6: dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -14905,95 +18083,57 @@ packages: has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - dev: true - /typed-emitter@1.4.0: - resolution: {integrity: sha512-weBmoo3HhpKGgLBOYwe8EB31CzDFuaK7CCL+axXhUYhn4jo6DSkHnbefboCF5i4DQ2aMFe0C/FdTWcPdObgHyg==} + typed-emitter@1.4.0: {} - /typed-emitter@2.1.0: - resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + typed-emitter@2.1.0: optionalDependencies: rxjs: 7.8.1 - /typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - dev: true + typedarray@0.0.6: {} - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.2.2: {} - /ua-parser-js@1.0.37: - resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} - dev: false + ua-parser-js@1.0.37: {} - /uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - dev: false + uc.micro@2.1.0: {} - /ufo@1.3.1: - resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} - dev: true + ufo@1.3.1: {} - /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true + uglify-js@3.17.4: optional: true - /uint4@0.1.2: - resolution: {integrity: sha512-lhEx78gdTwFWG+mt6cWAZD/R6qrIj0TTBeH5xwyuDJyswLNlGe+KVlUPQ6+mx5Ld332pS0AMUTo9hIly7YsWxQ==} + uint4@0.1.2: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.2 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - requiresBuild: true + undici-types@5.26.5: {} - /undici@5.25.4: - resolution: {integrity: sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw==} - engines: {node: '>=14.0'} + undici@5.25.4: dependencies: '@fastify/busboy': 2.0.0 - dev: true - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} + unicode-canonical-property-names-ecmascript@2.0.0: {} - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} + unicode-match-property-value-ecmascript@2.1.0: {} - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} + unicode-property-aliases-ecmascript@2.1.0: {} - /unidiff@1.0.2: - resolution: {integrity: sha512-2sbEzki5fBmjgAqoafwxRenfMcumMlmVAoJDwYJa3CI4ZVugkdR6qjTw5sVsl29/4JfBBXhWEAd5ars8nRdqXg==} + unidiff@1.0.2: dependencies: diff: 2.2.3 - dev: false - /unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + unified@11.0.4: dependencies: '@types/unist': 3.0.2 bail: 2.0.2 @@ -15002,246 +18142,148 @@ packages: is-plain-obj: 4.1.0 trough: 2.2.0 vfile: 6.0.1 - dev: false - /union@0.5.0: - resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} - engines: {node: '>= 0.8.0'} + union@0.5.0: dependencies: qs: 6.11.2 - dev: true - /unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + unique-filename@2.0.1: dependencies: unique-slug: 3.0.0 - dev: false optional: true - /unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - requiresBuild: true + unique-slug@3.0.0: dependencies: imurmurhash: 0.1.4 - dev: false optional: true - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} + unique-string@2.0.0: dependencies: crypto-random-string: 2.0.0 - /unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - dev: true + unist-util-is@4.1.0: {} - /unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.2 - dev: false - /unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.2 - dev: false - /unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + unist-util-visit-parents@3.1.1: dependencies: '@types/unist': 2.0.8 unist-util-is: 4.1.0 - dev: true - /unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.1: dependencies: '@types/unist': 3.0.2 unist-util-is: 6.0.0 - dev: false - /unist-util-visit@2.0.3: - resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + unist-util-visit@2.0.3: dependencies: '@types/unist': 2.0.8 unist-util-is: 4.1.0 unist-util-visit-parents: 3.1.1 - dev: true - /unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.2 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - dev: false - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: false + universalify@0.1.2: {} - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} + universalify@0.2.0: {} - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} + universalify@2.0.0: {} - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + unpipe@1.0.0: {} - /unplugin@1.5.0: - resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==} + unplugin@1.5.0: dependencies: acorn: 8.10.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 - dev: true - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} + untildify@4.0.0: {} - /upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - dev: false + upath@1.2.0: {} - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.0.11(browserslist@4.21.10): dependencies: browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 - /upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + upper-case-first@2.0.2: dependencies: tslib: 2.6.2 - dev: false - /upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + upper-case@2.0.2: dependencies: tslib: 2.6.2 - dev: false - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.0 - /url-join@4.0.1: - resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - dev: true + url-join@4.0.1: {} - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - /use-callback-ref@1.3.0(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + use-callback-ref@1.3.0(@types/react@18.2.20)(react@18.2.0): dependencies: - '@types/react': 18.2.20 react: 18.2.0 tslib: 2.6.2 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /use-deep-compare@1.1.0(react@18.2.0): - resolution: {integrity: sha512-6yY3zmKNCJ1jjIivfZMZMReZjr8e6iC6Uqtp701jvWJ6ejC/usXD+JjmslZDPJQgX8P4B1Oi5XSLHkOLeYSJsA==} - peerDependencies: - react: ^18.2.0 + use-deep-compare@1.1.0(react@18.2.0): dependencies: dequal: 1.0.0 react: 18.2.0 - dev: true - /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} - peerDependencies: - react: ^18.2.0 - react-dom: 16.8.0 - 18 + use-resize-observer@9.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@juggle/resize-observer': 3.3.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /use-sidecar@1.1.2(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true + use-sidecar@1.1.2(@types/react@18.2.20)(react@18.2.0): dependencies: - '@types/react': 18.2.20 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 - dev: true + optionalDependencies: + '@types/react': 18.2.20 - /use-sync-external-store@1.2.0(react@18.2.0): - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} - peerDependencies: - react: ^18.2.0 + use-sync-external-store@1.2.0(react@18.2.0): dependencies: react: 18.2.0 - /use-typed-event-listener@4.0.2(react@18.2.0)(typescript@5.2.2): - resolution: {integrity: sha512-AhjRw+qg5t7OWg7en2Q4XDCdi2iyhALFl71tITL3FeZqt/jD1Qa6KnbH/UolARtID1Gd0IElizbCgolv3ZbUFA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - peerDependencies: - react: ^18.2.0 - typescript: '>=4.1.2' - peerDependenciesMeta: - typescript: - optional: true + use-typed-event-listener@4.0.2(react@18.2.0)(typescript@5.2.2): dependencies: '@babel/runtime': 7.22.11 react: 18.2.0 - typescript: 5.2.2 use-deep-compare: 1.1.0(react@18.2.0) - dev: true + optionalDependencies: + typescript: 5.2.2 - /utf8-byte-length@1.0.4: - resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} - dev: false + utf8-byte-length@1.0.4: {} - /utif@2.0.1: - resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==} + utif@2.0.1: dependencies: pako: 1.0.11 - dev: false - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util-deprecate@1.0.2: {} - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + util@0.12.5: dependencies: inherits: 2.0.4 is-arguments: 1.1.1 @@ -15249,98 +18291,64 @@ packages: is-typed-array: 1.1.12 which-typed-array: 1.1.11 - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} + utils-merge@1.0.1: {} - /uuid-1345@1.0.2: - resolution: {integrity: sha512-bA5zYZui+3nwAc0s3VdGQGBfbVsJLVX7Np7ch2aqcEWFi5lsAEcmO3+lx3djM1npgpZI8KY2FITZ2uYTnYUYyw==} + uuid-1345@1.0.2: dependencies: macaddress: 0.5.3 - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true + uuid@8.3.2: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true + uuid@9.0.1: {} - /v8-to-istanbul@9.1.3: - resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} - engines: {node: '>=10.12.0'} + v8-to-istanbul@9.1.3: dependencies: '@jridgewell/trace-mapping': 0.3.19 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 2.0.0 - dev: true - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /valtio@1.11.2(@types/react@18.2.20)(react@18.2.0): - resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=16.8' - react: ^18.2.0 - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true + valtio@1.11.2(@types/react@18.2.20)(react@18.2.0): dependencies: - '@types/react': 18.2.20 proxy-compare: 2.5.1 - react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.20 + react: 18.2.0 - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + vary@1.1.2: {} - /vec3@0.1.8: - resolution: {integrity: sha512-LfKrP625Bsg/Tj52YdYPsHmpsJuo+tc6fLxZxXjEo9k2xSspKlPvoYTHehykKhp1FvV9nm+XU3Ehej5/9tpDCg==} + vec3@0.1.8: {} - /verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} + verror@1.10.0: dependencies: assert-plus: 1.0.0 core-util-is: 1.0.2 extsprintf: 1.3.0 - /vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 - dev: false - /vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vfile@6.0.1: dependencies: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - dev: false - /vite-node@0.34.6(@types/node@20.8.0): - resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} - engines: {node: '>=v14.18.0'} - hasBin: true + vite-node@0.34.6(@types/node@20.8.0)(terser@5.19.2): dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.10(@types/node@20.8.0) + vite: 4.4.10(@types/node@20.8.0)(terser@5.19.2) transitivePeerDependencies: - '@types/node' - less @@ -15350,108 +18358,38 @@ packages: - sugarss - supports-color - terser - dev: true - /vite@4.4.10(@types/node@20.8.0): - resolution: {integrity: sha512-TzIjiqx9BEXF8yzYdF2NTf1kFFbjMjUSV0LFZ3HyHoI3SGSPLnnFUKiIQtL3gl2AjHvMrprOvQ3amzaHgQlAxw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@4.4.10(@types/node@20.12.7)(terser@5.19.2): dependencies: - '@types/node': 20.8.0 esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 optionalDependencies: + '@types/node': 20.12.7 fsevents: 2.3.3 + terser: 5.19.2 - /vite@4.5.3: - resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@4.4.10(@types/node@20.8.0)(terser@5.19.2): + dependencies: + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + '@types/node': 20.8.0 + fsevents: 2.3.3 + terser: 5.19.2 + + vite@4.5.3(@types/node@20.8.0)(terser@5.19.2): dependencies: esbuild: 0.18.20 postcss: 8.4.38 rollup: 3.29.4 optionalDependencies: + '@types/node': 20.8.0 fsevents: 2.3.3 - dev: true + terser: 5.19.2 - /vitest@0.34.6: - resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} - engines: {node: '>=v14.18.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true + vitest@0.34.6(terser@5.19.2): dependencies: '@types/chai': 4.3.6 '@types/chai-subset': 1.3.3 @@ -15474,8 +18412,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.7.0 - vite: 4.4.10(@types/node@20.8.0) - vite-node: 0.34.6(@types/node@20.8.0) + vite: 4.4.10(@types/node@20.8.0)(terser@5.19.2) + vite-node: 0.34.6(@types/node@20.8.0)(terser@5.19.2) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -15485,88 +18423,56 @@ packages: - sugarss - supports-color - terser - dev: true - /w3c-keyname@2.2.8: - resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - dev: false + w3c-keyname@2.2.8: {} - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + walker@1.0.8: dependencies: makeerror: 1.0.12 - dev: true - /warning@4.0.3: - resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} + warning@4.0.3: dependencies: loose-envify: 1.4.0 - dev: false - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} + watchpack@2.4.0: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@3.0.1: {} - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: false + webidl-conversions@4.0.2: {} - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webpack-sources@3.2.3: {} - /webpack-virtual-modules@0.5.0: - resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} - dev: true + webpack-virtual-modules@0.5.0: {} - /webrtc-adapter@8.2.3: - resolution: {integrity: sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ==} - engines: {node: '>=6.0.0', npm: '>=3.10.0'} + webrtc-adapter@8.2.3: dependencies: sdp: 3.2.0 - dev: false - /whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 - dev: true - /whatwg-fetch@3.6.18: - resolution: {integrity: sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q==} - dev: false + whatwg-fetch@3.6.18: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 - dev: false - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -15574,9 +18480,7 @@ packages: is-string: 1.0.7 is-symbol: 1.0.4 - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} + which-builtin-type@1.1.3: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -15590,21 +18494,15 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.2 which-typed-array: 1.1.15 - dev: true - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.3 - dev: true - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.11: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 @@ -15612,72 +18510,49 @@ packages: gopd: 1.0.1 has-tostringtag: 1.0.0 - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - /why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.2.2: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - dev: true - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + wide-align@1.1.5: dependencies: string-width: 4.2.3 - dev: false - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true + wordwrap@1.0.0: {} - /workbox-background-sync@7.0.0: - resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} + workbox-background-sync@7.0.0: dependencies: idb: 7.1.1 workbox-core: 7.0.0 - dev: false - /workbox-broadcast-update@7.0.0: - resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} + workbox-broadcast-update@7.0.0: dependencies: workbox-core: 7.0.0 - dev: false - /workbox-build@7.0.0: - resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} - engines: {node: '>=16.0.0'} + workbox-build@7.0.0(@types/babel__core@7.20.2): dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) '@babel/core': 7.22.11 '@babel/preset-env': 7.22.10(@babel/core@7.22.11) '@babel/runtime': 7.22.11 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.11)(rollup@2.79.1) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.11)(@types/babel__core@7.20.2)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) '@surma/rollup-plugin-off-main-thread': 2.2.3 @@ -15713,56 +18588,40 @@ packages: transitivePeerDependencies: - '@types/babel__core' - supports-color - dev: false - /workbox-cacheable-response@7.0.0: - resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} + workbox-cacheable-response@7.0.0: dependencies: workbox-core: 7.0.0 - dev: false - /workbox-core@7.0.0: - resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} - dev: false + workbox-core@7.0.0: {} - /workbox-expiration@7.0.0: - resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} + workbox-expiration@7.0.0: dependencies: idb: 7.1.1 workbox-core: 7.0.0 - dev: false - /workbox-google-analytics@7.0.0: - resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} + workbox-google-analytics@7.0.0: dependencies: workbox-background-sync: 7.0.0 workbox-core: 7.0.0 workbox-routing: 7.0.0 workbox-strategies: 7.0.0 - dev: false - /workbox-navigation-preload@7.0.0: - resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} + workbox-navigation-preload@7.0.0: dependencies: workbox-core: 7.0.0 - dev: false - /workbox-precaching@7.0.0: - resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} + workbox-precaching@7.0.0: dependencies: workbox-core: 7.0.0 workbox-routing: 7.0.0 workbox-strategies: 7.0.0 - dev: false - /workbox-range-requests@7.0.0: - resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} + workbox-range-requests@7.0.0: dependencies: workbox-core: 7.0.0 - dev: false - /workbox-recipes@7.0.0: - resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} + workbox-recipes@7.0.0: dependencies: workbox-cacheable-response: 7.0.0 workbox-core: 7.0.0 @@ -15770,217 +18629,111 @@ packages: workbox-precaching: 7.0.0 workbox-routing: 7.0.0 workbox-strategies: 7.0.0 - dev: false - /workbox-routing@7.0.0: - resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} + workbox-routing@7.0.0: dependencies: workbox-core: 7.0.0 - dev: false - /workbox-strategies@7.0.0: - resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} + workbox-strategies@7.0.0: dependencies: workbox-core: 7.0.0 - dev: false - /workbox-streams@7.0.0: - resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} + workbox-streams@7.0.0: dependencies: workbox-core: 7.0.0 workbox-routing: 7.0.0 - dev: false - /workbox-sw@7.0.0: - resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} - dev: false + workbox-sw@7.0.0: {} - /workbox-window@7.0.0: - resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} + workbox-window@7.0.0: dependencies: '@types/trusted-types': 2.0.3 workbox-core: 7.0.0 - dev: false - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wrappy@1.0.2: {} - /write-file-atomic@2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + write-file-atomic@2.4.3: dependencies: graceful-fs: 4.2.11 imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /ws@5.2.3: - resolution: {integrity: sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@5.2.3: dependencies: async-limiter: 1.0.1 - dev: false - /ws@6.2.2: - resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@6.2.2: dependencies: async-limiter: 1.0.1 - dev: true - /ws@7.4.6: - resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false + ws@7.4.6: {} - /ws@8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@8.11.0: {} - /xhr@2.6.0: - resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + xhr@2.6.0: dependencies: global: 4.4.0 is-function: 1.0.2 parse-headers: 2.0.5 xtend: 4.0.2 - dev: false - /xml-parse-from-string@1.0.1: - resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} - dev: false + xml-parse-from-string@1.0.1: {} - /xml2js@0.4.23: - resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} - engines: {node: '>=4.0.0'} + xml2js@0.4.23: dependencies: sax: 1.3.0 xmlbuilder: 11.0.1 - dev: false - /xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: false + xmlbuilder@11.0.1: {} - /xmlhttprequest-ssl@1.6.3: - resolution: {integrity: sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==} - engines: {node: '>=0.4.0'} - dev: false + xmlhttprequest-ssl@1.6.3: {} - /xmlhttprequest-ssl@2.0.0: - resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} - engines: {node: '>=0.4.0'} - dev: false + xmlhttprequest-ssl@2.0.0: {} - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} + xtend@4.0.2: {} - /xxhash-wasm@0.4.2: - resolution: {integrity: sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==} + xxhash-wasm@0.4.2: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@4.0.0: {} - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false + yaml@1.10.2: {} - /yaml@2.3.2: - resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} - engines: {node: '>= 14'} - dev: true + yaml@2.3.2: {} - /yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} - engines: {node: '>= 14'} - hasBin: true - dev: false + yaml@2.4.1: {} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.9: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: false + yargs-parser@21.1.1: {} - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -15989,11 +18742,8 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - dev: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -16002,234 +18752,27 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: false - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - /yeast@0.1.2: - resolution: {integrity: sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==} - dev: false + yeast@0.1.2: {} - /yggdrasil@1.7.0: - resolution: {integrity: sha512-QBIo5fiNd7688G3FqXXYGr36uyrYzczlNuzpWFy2zL3+R+3KT2lF+wFxm51synfA3l3z6IBiGOc1/EVXWCYY1Q==} + yggdrasil@1.7.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) uuid: 8.3.2 transitivePeerDependencies: - encoding - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@1.0.0: {} - /zustand@3.6.5(react@18.2.0): - resolution: {integrity: sha512-/WfLJuXiEJimt61KGMHebrFBwckkCHGhAgVXTgPQHl6IMzjqm6MREb1OnDSnCRiSmRdhgdFCctceg6tSm79hiw==} - engines: {node: '>=12.7.0'} - peerDependencies: - react: ^18.2.0 - peerDependenciesMeta: - react: - optional: true - dependencies: + zustand@3.6.5(react@18.2.0): + optionalDependencies: react: 18.2.0 - dev: false - /zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - dev: false - - github.com/PrismarineJS/mineflayer/195b3cbd70a110080af9b77a4659991c5d9e484a: - resolution: {tarball: https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/195b3cbd70a110080af9b77a4659991c5d9e484a} - name: mineflayer - version: 4.20.0 - engines: {node: '>=18'} - dependencies: - minecraft-data: 3.62.0 - minecraft-protocol: github.com/zardoy/minecraft-protocol/2c14a686bfe7cbd9a5c87b629b402295ee86219f - prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) - prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 - prismarine-chat: 1.9.1 - prismarine-chunk: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) - prismarine-entity: 2.3.1 - prismarine-item: 1.14.0 - prismarine-nbt: 2.5.0 - prismarine-physics: 1.8.0 - prismarine-recipe: 1.3.1(prismarine-registry@1.7.0) - prismarine-registry: 1.7.0 - prismarine-windows: 2.9.0 - prismarine-world: github.com/zardoy/prismarine-world/6ae6f009d38460de284f8c226c665f04cbad9465 - protodef: 1.15.0 - typed-emitter: 1.4.0 - vec3: 0.1.8 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - github.com/PrismarineJS/node-process/380d0b4f4c86f1b65b216c311bf00431f314e88e: - resolution: {tarball: https://codeload.github.com/PrismarineJS/node-process/tar.gz/380d0b4f4c86f1b65b216c311bf00431f314e88e} - name: process - version: 0.11.10 - engines: {node: '>= 0.6.0'} - dev: true - - github.com/zardoy/browserfs/ab58ae8ef00e3a31db01909e365e6cb5188436e0: - resolution: {tarball: https://codeload.github.com/zardoy/browserfs/tar.gz/ab58ae8ef00e3a31db01909e365e6cb5188436e0} - name: browserfs - version: 2.0.0 - engines: {node: '>= 18'} - dev: false - - github.com/zardoy/browserfs/e60ca69e74888e057a96a468afe1d62347d3f56f: - resolution: {tarball: https://codeload.github.com/zardoy/browserfs/tar.gz/e60ca69e74888e057a96a468afe1d62347d3f56f} - name: browserfs - version: 2.0.0-zardoy - dependencies: - async: 2.6.4 - dev: false - - github.com/zardoy/diamond-square/915fce8e27fe8eb45464d89b9563956afa4f7687: - resolution: {tarball: https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687} - name: diamond-square - version: 1.3.0 - dependencies: - minecraft-data: 3.62.0 - prismarine-chunk: github.com/zardoy/prismarine-chunk/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) - random-seed: 0.3.0 - vec3: 0.1.8 - dev: false - - github.com/zardoy/minecraft-inventory-gui/6685fa4a10590a5decef90a454ba0b9e045e7737(@types/react@18.2.20)(react@18.2.0): - resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/6685fa4a10590a5decef90a454ba0b9e045e7737} - id: github.com/zardoy/minecraft-inventory-gui/6685fa4a10590a5decef90a454ba0b9e045e7737 - name: minecraft-inventory-gui - version: 1.0.1 - dependencies: - valtio: 1.11.2(@types/react@18.2.20)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - react - dev: true - - github.com/zardoy/minecraft-protocol/2c14a686bfe7cbd9a5c87b629b402295ee86219f: - resolution: {tarball: https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f} - name: minecraft-protocol - version: 1.45.0 - engines: {node: '>=14'} - dependencies: - '@types/readable-stream': 4.0.11 - aes-js: 3.1.2 - buffer-equal: 1.0.1 - debug: 4.3.4(supports-color@8.1.1) - endian-toggle: 0.0.0 - lodash.get: 4.4.2 - lodash.merge: 4.6.2 - minecraft-data: 3.62.0 - minecraft-folder-path: 1.2.0 - node-fetch: 2.7.0 - node-rsa: 0.4.2 - prismarine-auth: 2.4.2 - prismarine-nbt: 2.5.0 - prismarine-realms: 1.3.2 - protodef: 1.15.0 - readable-stream: 4.5.2 - uuid-1345: 1.0.2 - yggdrasil: 1.7.0 - transitivePeerDependencies: - - encoding - - supports-color - - github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0} - name: prismarine-block - version: 1.17.1 - dependencies: - minecraft-data: 3.62.0 - prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) - prismarine-chat: 1.9.1 - prismarine-item: 1.14.0 - prismarine-nbt: 2.2.1 - prismarine-registry: 1.7.0 - - github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0): - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b} - id: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b - name: prismarine-chunk - version: 1.35.0 - engines: {node: '>=14'} - dependencies: - prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) - prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 - prismarine-nbt: 2.5.0 - prismarine-registry: 1.7.0 - smart-buffer: 4.2.0 - uint4: 0.1.2 - vec3: 0.1.8 - xxhash-wasm: 0.4.2 - transitivePeerDependencies: - - minecraft-data - - github.com/zardoy/prismarine-chunk/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0): - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f} - id: github.com/zardoy/prismarine-chunk/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f - name: prismarine-chunk - version: 1.35.0 - engines: {node: '>=14'} - dependencies: - prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) - prismarine-block: github.com/zardoy/prismarine-block/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 - prismarine-nbt: 2.5.0 - prismarine-registry: 1.7.0 - smart-buffer: 4.2.0 - uint4: 0.1.2 - vec3: 0.1.8 - xxhash-wasm: 0.4.2 - transitivePeerDependencies: - - minecraft-data - dev: false - - github.com/zardoy/prismarine-provider-anvil/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0): - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f} - id: github.com/zardoy/prismarine-provider-anvil/0ddcd9d48574113308e1fbebef60816aced0846f - name: prismarine-provider-anvil - version: 2.7.0 - dependencies: - prismarine-chunk: github.com/zardoy/prismarine-chunk/3c7e679508cf8ebd1ac4df9a6c22d7cb6c45290b(minecraft-data@3.62.0) - prismarine-nbt: 2.5.0 - uint4: 0.1.2 - vec3: 0.1.8 - transitivePeerDependencies: - - minecraft-data - dev: false - - github.com/zardoy/prismarine-world/6ae6f009d38460de284f8c226c665f04cbad9465: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465} - name: prismarine-world - version: 3.6.2 - engines: {node: '>=8.0.0'} - dependencies: - vec3: 0.1.8 - - github.com/zardoy/prismarinejs-net-browserify/7d827dba61bd2f9ac9a6086fe2079a0fccadd070: - resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070} - name: net-browserify - version: 0.2.4 - dependencies: - body-parser: 1.20.2 - express: 4.18.2 - express-ws: 4.0.0(express@4.18.2) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false + zwitch@2.0.4: {} From d35eb040c77c7ebe155f8533b0b399ebec446bc9 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 13:26:17 +0300 Subject: [PATCH 0016/1074] The packageManager field must be joke... --- .github/workflows/ci.yml | 2 +- .github/workflows/next-deploy.yml | 2 +- .github/workflows/preview.yml | 2 +- .github/workflows/publish.yml | 2 +- CONTRIBUTING.md | 2 +- package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b2f04c43..b08045be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ jobs: - name: Checkout repository uses: actions/checkout@master - name: Install pnpm - run: npm i -g pnpm + run: npm i -g pnpm@9.0.4 - uses: actions/setup-node@v4 with: node-version: 18 diff --git a/.github/workflows/next-deploy.yml b/.github/workflows/next-deploy.yml index 7ee33ac0..e3919625 100644 --- a/.github/workflows/next-deploy.yml +++ b/.github/workflows/next-deploy.yml @@ -16,7 +16,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Install Global Dependencies - run: npm install --global vercel pnpm + run: npm install --global vercel pnpm@9.0.4 - name: Pull Vercel Environment Information run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} - name: Build Project Artifacts diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 03990d04..2f866235 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v2 with: ref: refs/pull/${{ github.event.issue.number }}/head - - run: npm i -g pnpm + - run: npm i -g pnpm@9.0.4 - uses: actions/setup-node@v4 with: node-version: 18 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 64fe5154..cbc09b43 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,7 +13,7 @@ jobs: - name: Checkout repository uses: actions/checkout@master - name: Install pnpm - run: npm i -g vercel pnpm + run: npm i -g vercel pnpm@9.0.4 # - run: pnpm install # - run: pnpm build - run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 98017f6b..429c7197 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ After forking the repository, run the following commands to get started: -0. Ensure you have [Node.js](https://nodejs.org) and `pnpm` installed. To install pnpm run `npm i -g pnpm`. +0. Ensure you have [Node.js](https://nodejs.org) and `pnpm` installed. To install pnpm run `npm i -g pnpm@9.0.4`. 1. Install dependencies: `pnpm i` 2. Start the project in development mode: `pnpm start` diff --git a/package.json b/package.json index 084fbe2b..e9981866 100644 --- a/package.json +++ b/package.json @@ -158,5 +158,5 @@ "ignoreDependencies": [] } }, - "packageManager": "pnpm@9.0.0" + "packageManager": "pnpm@9.0.4" } From 976f6cab2bd24ef5cbdd8b9a1b7dec96e9ba8c70 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 15:28:31 +0300 Subject: [PATCH 0017/1074] add mesher HMR! fix: fix all colored glass rendering! --- esbuild.mjs | 9 +-- .../viewer/lib/cleanupDecorator.ts | 28 +++++++++ prismarine-viewer/viewer/lib/mesher/models.ts | 22 ++++++- prismarine-viewer/viewer/lib/mesher/shared.ts | 10 ++++ prismarine-viewer/viewer/lib/viewer.ts | 2 + .../viewer/lib/worldDataEmitter.ts | 1 + .../viewer/lib/worldrendererCommon.ts | 10 ++-- .../viewer/lib/worldrendererThree.ts | 15 ++++- scripts/esbuildPlugins.mjs | 57 ++++++++----------- src/eruda.js | 7 --- src/index.ts | 3 +- 11 files changed, 106 insertions(+), 58 deletions(-) create mode 100644 prismarine-viewer/viewer/lib/cleanupDecorator.ts create mode 100644 prismarine-viewer/viewer/lib/mesher/shared.ts delete mode 100644 src/eruda.js diff --git a/esbuild.mjs b/esbuild.mjs index 2e360e5d..3c35f32d 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -3,7 +3,7 @@ import * as esbuild from 'esbuild' import fs from 'fs' // import htmlPlugin from '@chialab/esbuild-plugin-html' import server from './server.js' -import { clients, plugins } from './scripts/esbuildPlugins.mjs' +import { clients, plugins, startWatchingHmr } from './scripts/esbuildPlugins.mjs' import { generateSW } from 'workbox-build' import { getSwAdditionalEntries } from './scripts/build.js' import { build } from 'esbuild' @@ -21,11 +21,7 @@ const dev = !prod const banner = [ 'window.global = globalThis;', - // report reload time - dev && 'if (sessionStorage.lastReload) { const [rebuild, reloadStart] = sessionStorage.lastReload.split(","); const now = Date.now(); console.log(`rebuild + reload:`, +rebuild, "+", now - reloadStart, "=", ((+rebuild + (now - reloadStart)) / 1000).toFixed(1) + "s");sessionStorage.lastReload = ""; }', - // auto-reload - dev && 'window.noAutoReload ??= false;(() => new EventSource("/esbuild").onmessage = ({ data: _data }) => { if (!_data) return; const data = JSON.parse(_data); if (!data.update) return;console.log("[esbuild] Page is outdated");document.title = `[O] ${document.title}`;if (window.noAutoReload || localStorage.noAutoReload) return; if (localStorage.autoReloadVisible && document.visibilityState !== "visible") return; sessionStorage.lastReload = `${data.update.time},${Date.now()}`; location.reload() })();' -].filter(Boolean) +] const buildingVersion = new Date().toISOString().split(':')[0] @@ -91,6 +87,7 @@ const buildOptions = { if (watch) { const ctx = await esbuild.context(buildOptions) await ctx.watch() + startWatchingHmr() server.app.get('/esbuild', (req, res, next) => { res.writeHead(200, { 'Content-Type': 'text/event-stream', diff --git a/prismarine-viewer/viewer/lib/cleanupDecorator.ts b/prismarine-viewer/viewer/lib/cleanupDecorator.ts new file mode 100644 index 00000000..476546a6 --- /dev/null +++ b/prismarine-viewer/viewer/lib/cleanupDecorator.ts @@ -0,0 +1,28 @@ +export function buildCleanupDecorator (cleanupMethod: string) { + return function () { + return function (_target: {snapshotInitialValues}, propertyKey: string) { + const target = _target as any + // Store the initial value of the property + if (!target._snapshotMethodPatched) { + target.snapshotInitialValues = function () { + this._initialValues = {} + for (const key of target._toCleanup) { + this._initialValues[key] = this[key] + } + } + target._snapshotMethodPatched = true + } + (target._toCleanup ??= []).push(propertyKey) + if (!target._cleanupPatched) { + const originalMethod = target[cleanupMethod] + target[cleanupMethod] = function () { + for (const key of target._toCleanup) { + this[key] = this._initialValues[key] + } + originalMethod.apply(this, arguments) + } + } + target._cleanupPatched = true + } + } +} diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index 29b4edb5..fc86a671 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -158,6 +158,7 @@ function renderLiquid (world, cursor, texture, type, biome, water, attr) { const neighbor = world.getBlock(neighborPos) if (!neighbor) continue if (neighbor.type === type) continue + const isGlass = neighbor.name.includes('glass') if ((isCube(neighbor) && !isUp) || neighbor.material === 'plant' || neighbor.getProperties().waterlogged) continue let tint = [1, 1, 1] @@ -438,6 +439,8 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr } export function getSectionGeometry (sx, sy, sz, world: World) { + let delayedRender = [] as (() => void)[] + const attr = { sx: sx + 8, sy: sy + 8, @@ -488,7 +491,10 @@ export function getSectionGeometry (sx, sy, sz, world: World) { if (block.name === 'water' || isWaterlogged) { const waterBlock = block.name === 'water' ? block : { name: 'water', metadata: 0 } const variant = getModelVariants(waterBlock as any)[0] - renderLiquid(world, cursor, variant.model.textures.particle, block.type, biome, true, attr) + const pos = cursor.clone() + delayedRender.push(() => { + renderLiquid(world, pos, variant.model.textures.particle, block.type, biome, true, attr) + }) } else if (block.name === 'lava') { renderLiquid(world, cursor, variant.model.textures.particle, block.type, biome, false, attr) } @@ -509,7 +515,14 @@ export function getSectionGeometry (sx, sy, sz, world: World) { } for (const element of variant.model.elements) { - renderElement(world, cursor, element, variant.model.ao, attr, globalMatrix, globalShift, block, biome) + if (block.transparent) { + const pos = cursor.clone() + delayedRender.push(() => { + renderElement(world, pos, element, variant.model.ao, attr, globalMatrix, globalShift, block, biome) + }) + } else { + renderElement(world, cursor, element, variant.model.ao, attr, globalMatrix, globalShift, block, biome) + } } } } @@ -517,6 +530,11 @@ export function getSectionGeometry (sx, sy, sz, world: World) { } } + for (const render of delayedRender) { + render() + } + delayedRender = [] + let ndx = attr.positions.length / 3 for (let i = 0; i < attr.t_positions.length / 12; i++) { attr.indices.push( diff --git a/prismarine-viewer/viewer/lib/mesher/shared.ts b/prismarine-viewer/viewer/lib/mesher/shared.ts new file mode 100644 index 00000000..36c319b1 --- /dev/null +++ b/prismarine-viewer/viewer/lib/mesher/shared.ts @@ -0,0 +1,10 @@ +export const defaultMesherConfig = { + version: '', + enableLighting: true, + skyLight: 15, + smoothLighting: true, + outputFormat: 'threeJs' as 'threeJs' | 'webgl', + textureSize: 1024, // for testing +} + +export type MesherConfig = typeof defaultMesherConfig diff --git a/prismarine-viewer/viewer/lib/viewer.ts b/prismarine-viewer/viewer/lib/viewer.ts index 9097c7ec..1b11ac63 100644 --- a/prismarine-viewer/viewer/lib/viewer.ts +++ b/prismarine-viewer/viewer/lib/viewer.ts @@ -191,6 +191,8 @@ export class Viewer { skyLight = ((timeOfDay - 12000) / 6000) * 15 } + skyLight = Math.floor(skyLight) // todo: remove this after optimization + if (this.world.mesherConfig.skyLight === skyLight) return this.world.mesherConfig.skyLight = skyLight ; (this.world as WorldRendererThree).rerenderAllChunks?.() diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index ed53847d..fa916c51 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -191,6 +191,7 @@ export class WorldDataEmitter extends EventEmitter { this.lastPos.update(pos) await this._loadChunks(positions) } else { + this.emitter.emit('chunkPosUpdate', { pos }) // todo-low this.lastPos.update(pos) } } diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index 151b2679..b13443d1 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -25,8 +25,7 @@ export type WorldRendererConfig = typeof defaultWorldRendererConfig export abstract class WorldRendererCommon { worldConfig = { minY: 0, worldHeight: 256 } - // todo @sa2urami set alphaTest back to 0.1 and instead properly sort transparent and solid objects (needs to be done in worker too) - material = new THREE.MeshLambertMaterial({ vertexColors: true, transparent: true, alphaTest: 0.5 }) + material = new THREE.MeshLambertMaterial({ vertexColors: true, transparent: true, alphaTest: 0.1 }) @worldCleanup() active = false @@ -58,14 +57,14 @@ export abstract class WorldRendererCommon abstract outputFormat: 'threeJs' | 'webgl' - constructor (public config: WorldRendererConfig) { + constructor(public config: WorldRendererConfig) { // this.initWorkers(1) // preload script on page load this.snapshotInitialValues() } - snapshotInitialValues() {} + snapshotInitialValues () { } - initWorkers(numWorkers = this.config.numWorkers) { + initWorkers (numWorkers = this.config.numWorkers) { // init workers for (let i = 0; i < numWorkers; i++) { // Node environment needs an absolute path, but browser needs the url of the file @@ -154,7 +153,6 @@ export abstract class WorldRendererCommon this.workers = [] } - // new game load happens here setVersion (version, texturesVersion = version) { this.version = version diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 364df12a..1fff112f 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -28,9 +28,8 @@ export class WorldRendererThree extends WorldRendererCommon { * Optionally update data that are depedendent on the viewer position */ updatePosDataChunk (key: string) { - if (!this.viewerPosition) return const [x, y, z] = key.split(',').map(x => Math.floor(+x / 16)) - const [xPlayer, yPlayer, zPlayer] = this.viewerPosition.toArray().map(x => Math.floor(x / 16)) + const [xPlayer, yPlayer, zPlayer] = this.camera.position.toArray().map(x => Math.floor(x / 16)) // sum of distances: x + y + z const chunkDistance = Math.abs(x - xPlayer) + Math.abs(y - yPlayer) + Math.abs(z - zPlayer) const section = this.sectionObjects[key].children.find(child => child.name === 'mesh')! @@ -185,6 +184,18 @@ export class WorldRendererThree extends WorldRendererCommon { } } + async doHmr () { + const oldSections = { ...this.sectionObjects } + this.sectionObjects = {} // skip clearing + worldView!.unloadAllChunks() + this.setVersion(this.version, this.texturesVersion) + this.sectionObjects = oldSections + // this.rerenderAllChunks() + + // supply new data + await worldView!.updatePosition(bot.entity.position, true) + } + rerenderAllChunks () { // todo not clear what to do with loading chunks for (const key of Object.keys(this.sectionObjects)) { const [x, y, z] = key.split(',').map(Number) diff --git a/scripts/esbuildPlugins.mjs b/scripts/esbuildPlugins.mjs index ddc34c18..8e037707 100644 --- a/scripts/esbuildPlugins.mjs +++ b/scripts/esbuildPlugins.mjs @@ -6,16 +6,33 @@ import * as fs from 'fs' import { filesize } from 'filesize' import MCProtocol from 'minecraft-protocol' import MCData from 'minecraft-data' +import { throttle } from 'lodash-es' const { supportedVersions } = MCProtocol const prod = process.argv.includes('--prod') let connectedClients = [] -const watchExternal = [ - // 'dist/mesher.js', - // 'dist/webglRendererWorker.js' -] +const writeToClients = (data) => { + connectedClients.forEach((res) => { + res.write(`data: ${JSON.stringify(data)}\n\n`) + res.flush() + }) +} + +export const startWatchingHmr = () => { + const eventsPerFile = { + 'mesher.js': 'mesher', + // 'dist/webglRendererWorker.js': 'webglRendererWorker', + } + for (const name of Object.keys(eventsPerFile)) { + const file = join('dist', name); + if (!fs.existsSync(file)) console.warn(`[missing worker] File ${name} does not exist`) + fs.watchFile(file, () => { + writeToClients({ replace: { type: eventsPerFile[name] } }) + }) + } +} /** @type {import('esbuild').Plugin[]} */ const plugins = [ @@ -46,8 +63,6 @@ const plugins = [ return { contents: `window.mcData ??= ${JSON.stringify(defaultVersionsObj)};module.exports = { pc: window.mcData }`, loader: 'js', - // todo use external watchers - watchFiles: watchExternal, } }) build.onResolve({ @@ -153,25 +168,8 @@ const plugins = [ let time let prevHash - let prevWorkersMtime - const updateMtime = async () => { - const workersMtime = watchExternal.map(file => { - try { - return fs.statSync(file).mtimeMs - } catch (err) { - console.log('missing file', file) - return 0 - } - }) - if (workersMtime.some((mtime, i) => mtime !== prevWorkersMtime?.[i])) { - prevWorkersMtime = workersMtime - return true - } - return false - } build.onStart(() => { time = Date.now() - updateMtime() }) build.onEnd(({ errors, outputFiles: _outputFiles, metafile, warnings }) => { /** @type {import('esbuild').OutputFile[]} */ @@ -181,10 +179,7 @@ const plugins = [ outputFiles.find(outputFile => outputFile.path) if (errors.length) { - connectedClients.forEach((res) => { - res.write(`data: ${JSON.stringify({ errors: errors.map(error => error.text) })}\n\n`) - res.flush() - }) + writeToClients({ errors: errors.map(error => error.text) }) return } @@ -194,8 +189,7 @@ const plugins = [ /** @type {import('esbuild').OutputFile} */ //@ts-ignore const outputFile = outputFiles.find(x => x.path.endsWith('.js')) - const updateWorkers = updateMtime() - if (outputFile.hash === prevHash && !updateWorkers) { + if (outputFile.hash === prevHash) { // todo also check workers and css console.log('Ignoring reload as contents the same') return @@ -212,10 +206,7 @@ const plugins = [ return } - connectedClients.forEach((res) => { - res.write(`data: ${JSON.stringify({ update: { time: elapsed } })}\n\n`) - res.flush() - }) + writeToClients({ update: { time: elapsed } }) connectedClients.length = 0 }) } diff --git a/src/eruda.js b/src/eruda.js deleted file mode 100644 index 9cb11381..00000000 --- a/src/eruda.js +++ /dev/null @@ -1,7 +0,0 @@ -import { isMobile } from './menus/components/common' - -if (process.env.NODE_ENV === 'development' && isMobile()) { - // can be changed to require('eruda') - import('https://cdn.skypack.dev/eruda').default.init() - console.log('JS Loaded in', Date.now() - window.startLoad) -} diff --git a/src/index.ts b/src/index.ts index 8ee16320..f8aef541 100644 --- a/src/index.ts +++ b/src/index.ts @@ -35,7 +35,6 @@ import './reactUi.jsx' import { contro, onBotCreate } from './controls' import './dragndrop' import { possiblyCleanHandle, resetStateAfterDisconnect } from './browserfs' -import './eruda' import { watchOptionsAfterViewerInit } from './watchOptions' import downloadAndOpenFile from './downloadAndOpenFile' @@ -96,7 +95,7 @@ import { possiblyHandleStateVariable } from './googledrive' import flyingSquidEvents from './flyingSquidEvents' import { hideNotification, notificationProxy } from './react/NotificationProvider' import { ViewerWrapper } from 'prismarine-viewer/viewer/lib/viewerWrapper' -import './hotReload' +import './devReload' window.debug = debug window.THREE = THREE From 2ca66d696d32e620a2512b8deaa17c36780197dc Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 16:18:40 +0300 Subject: [PATCH 0018/1074] add devReload addition --- src/devReload.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/devReload.ts diff --git a/src/devReload.ts b/src/devReload.ts new file mode 100644 index 00000000..ab4cbaac --- /dev/null +++ b/src/devReload.ts @@ -0,0 +1,45 @@ +import { WorldRendererThree } from 'prismarine-viewer/viewer/lib/worldrendererThree' +import { isMobile } from './menus/components/common' + +if (process.env.NODE_ENV === 'development') { + if (sessionStorage.lastReload) { + const [rebuild, reloadStart] = sessionStorage.lastReload.split(',') + const now = Date.now() + console.log(`rebuild + reload:`, `${+rebuild} + ${now - reloadStart} = ${((+rebuild + (now - reloadStart)) / 1000).toFixed(1)}s`) + sessionStorage.lastReload = '' + } + + const autoRefresh = () => { + window.noAutoReload ??= false + new EventSource('/esbuild').onmessage = async ({ data: _data }) => { + if (!_data) return + const data = JSON.parse(_data) + if (data.update) { + console.log('[esbuild] Page is outdated') + document.title = `[O] ${document.title}` + if (window.noAutoReload || localStorage.noAutoReload) return + if (localStorage.autoReloadVisible && document.visibilityState !== 'visible') return + sessionStorage.lastReload = `${data.update.time},${Date.now()}` + location.reload() + } + if (data.replace) { + console.log('[esbuild hmr] Reloading', data.replace.type, data.replace.path) + switch (data.replace.type) { + case 'mesher': { + if (!worldView || !viewer.world.version || !(viewer.world instanceof WorldRendererThree)) return + viewer.world.doHmr() + } + } + } + } + } + autoRefresh() + + // mobile devtools + if (isMobile()) { + // can be changed to require('eruda') + //@ts-expect-error + import('https://cdn.skypack.dev/eruda').default.init() + console.log('JS Loaded in', Date.now() - window.startLoad) + } +} From bade1957be000445a245617cb82bf24c10b6dd35 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 16:22:40 +0300 Subject: [PATCH 0019/1074] fix eruda! --- src/devReload.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devReload.ts b/src/devReload.ts index ab4cbaac..32e601df 100644 --- a/src/devReload.ts +++ b/src/devReload.ts @@ -39,7 +39,7 @@ if (process.env.NODE_ENV === 'development') { if (isMobile()) { // can be changed to require('eruda') //@ts-expect-error - import('https://cdn.skypack.dev/eruda').default.init() + void import('https://cdn.skypack.dev/eruda').then(({ default: eruda }) => eruda.init()) console.log('JS Loaded in', Date.now() - window.startLoad) } } From 54b37c0e13e19c2193ca0478234d43bd7ced1400 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 16:44:41 +0300 Subject: [PATCH 0020/1074] update test --- .../viewer/lib/mesher/test/tests.test.ts | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts index 67439b1d..22e3a7b2 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts @@ -39,10 +39,58 @@ test('Known blocks are not rendered', () => { // Fully expected expect(invalidBlocks).toMatchInlineSnapshot(` { + "creeper_head": [ + 0, + 6, + ], + "creeper_wall_head": [ + 0, + 6, + ], + "dragon_head": [ + 0, + 6, + ], + "dragon_wall_head": [ + 0, + 6, + ], + "player_head": [ + 0, + 6, + ], + "player_wall_head": [ + 0, + 6, + ], "powder_snow": [ 0, 6, ], + "skeleton_skull": [ + 0, + 6, + ], + "skeleton_wall_skull": [ + 0, + 6, + ], + "wither_skeleton_skull": [ + 0, + 6, + ], + "wither_skeleton_wall_skull": [ + 0, + 6, + ], + "zombie_head": [ + 0, + 6, + ], + "zombie_wall_head": [ + 0, + 6, + ], } `) }) From 18aba6edb38a5ff4bbc20c497adda81c9b4902d5 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 17:37:48 +0300 Subject: [PATCH 0021/1074] feat: add in water blue fog --- src/dayCycle.ts | 3 ++- src/index.ts | 1 + src/water.ts | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/water.ts diff --git a/src/dayCycle.ts b/src/dayCycle.ts index 0d5043e7..2f59b530 100644 --- a/src/dayCycle.ts +++ b/src/dayCycle.ts @@ -1,5 +1,6 @@ import { options } from './optionsStorage' import { assertDefined } from './utils' +import { updateBackground } from './water' export default () => { bot.on('time', () => { @@ -34,7 +35,7 @@ export default () => { } // todo need to think wisely how to set these values & also move directional light around! const colorInt = Math.max(int, 0.1) - viewer.scene.background = new THREE.Color(dayColor.r * colorInt, dayColor.g * colorInt, dayColor.b * colorInt) + updateBackground({ r: dayColor.r * colorInt, g: dayColor.g * colorInt, b: dayColor.b * colorInt }) if (!options.newVersionsLighting && bot.supportFeature('blockStateId')) { viewer.ambientLight.intensity = Math.max(int, 0.25) viewer.directionalLight.intensity = Math.min(int, 0.5) diff --git a/src/index.ts b/src/index.ts index f8aef541..13c3c96c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -96,6 +96,7 @@ import flyingSquidEvents from './flyingSquidEvents' import { hideNotification, notificationProxy } from './react/NotificationProvider' import { ViewerWrapper } from 'prismarine-viewer/viewer/lib/viewerWrapper' import './devReload' +import './water' window.debug = debug window.THREE = THREE diff --git a/src/water.ts b/src/water.ts new file mode 100644 index 00000000..8bdb2698 --- /dev/null +++ b/src/water.ts @@ -0,0 +1,38 @@ +import { watchUnloadForCleanup } from './gameUnload' + +let inWater = false + +customEvents.on('gameLoaded', () => { + const cleanup = () => { + viewer.scene.fog = null + } + watchUnloadForCleanup(cleanup) + + const updateInWater = () => { + const waterBr = bot.entity.effects.find(effect => loadedData.effects[effect.id].name === 'water_breathing') + if (inWater && waterBr) { + viewer.scene.fog = new THREE.Fog(0x00_00_ff, 0.1, waterBr ? 100 : 20) // Set the fog color to blue if the bot is in water. + } else { + cleanup() + } + updateBackground() + } + bot.on('physicsTick', () => { + // todo + const _inWater = bot.world.getBlock(bot.entity.position.offset(0, 1, 0)).name === 'water' + if (_inWater !== inWater) { + inWater = _inWater + updateInWater() + } + }) +}) + +let sceneBg = { r: 0, g: 0, b: 0 } +export const updateBackground = (newSceneBg = sceneBg) => { + sceneBg = newSceneBg + if (inWater) { + viewer.scene.background = new THREE.Color(0x00_00_ff) + } else { + viewer.scene.background = new THREE.Color(sceneBg.r, sceneBg.g, sceneBg.b) + } +} From 0886af9b05b08898256f65924a8cc3e748e5759f Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 20 Apr 2024 17:38:23 +0300 Subject: [PATCH 0022/1074] feat: Migrate HUD to React, new hotbar and bars (#107) --- CONTRIBUTING.md | 13 +- index.html | 4 - prismarine-viewer/viewer/lib/simpleUtils.ts | 8 + .../viewer/lib/worldrendererCommon.ts | 1 + src/controls.ts | 2 +- src/devReload.ts | 2 +- src/globalState.ts | 1 + src/globals.d.ts | 1 + src/index.ts | 69 ++--- src/{playerWindows.ts => inventoryWindows.ts} | 58 +++- src/menus/components/bossbars_overlay.js | 150 ---------- src/menus/components/breath_bar.js | 89 ------ src/menus/components/debug_overlay.js | 274 ------------------ src/menus/components/food_bar.js | 122 -------- src/menus/components/health_bar.js | 163 ----------- src/menus/components/hotbar.js | 206 ------------- src/menus/components/playerlist_overlay.js | 185 ------------ src/menus/hud.js | 258 ----------------- src/menus/keybinds_screen.js | 173 ----------- src/menus/pause_screen.js | 152 ---------- src/optionsGuiScheme.tsx | 1 + src/react/ArmorBar.css | 30 ++ src/react/ArmorBar.stories.tsx | 18 ++ src/react/ArmorBar.tsx | 52 ++++ src/react/BossBarOverlay.css | 34 +++ src/react/BossBarOverlay.stories.tsx | 33 +++ src/react/BossBarOverlay.tsx | 62 ++++ src/react/BossBarOverlayProvider.tsx | 32 ++ src/react/BreathBar.css | 31 ++ src/react/BreathBar.stories.tsx | 16 + src/react/BreathBar.tsx | 55 ++++ src/react/Crosshair.css | 11 + src/react/Crosshair.tsx | 8 + src/react/DebugOverlay.module.css | 44 +++ src/react/DebugOverlay.tsx | 223 ++++++++++++++ src/react/FoodBar.css | 68 +++++ src/react/FoodBar.tsx | 76 +++++ src/react/HealthBar.css | 78 +++++ src/react/HealthBar.stories.tsx | 45 +++ src/react/HealthBar.tsx | 112 +++++++ src/react/HotbarRenderApp.tsx | 219 ++++++++++++++ src/react/HudBarsProvider.tsx | 136 +++++++++ src/react/IndicatorEffects.css | 2 +- src/react/KeybindingsScreen.tsx | 12 + src/react/KeybindingsScreenApp.tsx | 51 ++++ src/react/MessageFormatted.css | 5 + src/react/MessageFormatted.tsx | 7 +- src/react/MobileTopButtons.module.css | 37 +++ src/react/MobileTopButtons.tsx | 57 ++++ src/react/PauseScreen.module.css | 27 ++ src/react/PauseScreen.tsx | 144 +++++++++ src/react/PlayerListOverlay.css | 80 +++++ src/react/PlayerListOverlay.stories.tsx | 20 ++ src/react/PlayerListOverlay.tsx | 41 +++ src/react/PlayerListOverlayProvider.tsx | 91 ++++++ src/react/SharedHudVars.tsx | 27 ++ src/react/Singleplayer.tsx | 4 +- src/react/XPBar.module.css | 33 +++ src/react/XPBar.stories.tsx | 28 ++ src/react/XPBar.tsx | 16 + src/react/XPBarProvider.tsx | 26 ++ src/react/armorValues.ts | 52 ++++ src/react/simpleUtils.ts | 5 + src/react/singleplayer.module.css | 4 + src/react/useLongPress.ts | 64 ++++ src/reactUi.tsx | 53 ++++ src/scaleInterface.ts | 31 ++ src/texturePack.ts | 2 +- src/watchOptions.ts | 2 +- 69 files changed, 2389 insertions(+), 1847 deletions(-) rename src/{playerWindows.ts => inventoryWindows.ts} (91%) delete mode 100644 src/menus/components/bossbars_overlay.js delete mode 100644 src/menus/components/breath_bar.js delete mode 100644 src/menus/components/debug_overlay.js delete mode 100644 src/menus/components/food_bar.js delete mode 100644 src/menus/components/health_bar.js delete mode 100644 src/menus/components/hotbar.js delete mode 100644 src/menus/components/playerlist_overlay.js delete mode 100644 src/menus/hud.js delete mode 100644 src/menus/keybinds_screen.js delete mode 100644 src/menus/pause_screen.js create mode 100644 src/react/ArmorBar.css create mode 100644 src/react/ArmorBar.stories.tsx create mode 100644 src/react/ArmorBar.tsx create mode 100644 src/react/BossBarOverlay.css create mode 100644 src/react/BossBarOverlay.stories.tsx create mode 100644 src/react/BossBarOverlay.tsx create mode 100644 src/react/BossBarOverlayProvider.tsx create mode 100644 src/react/BreathBar.css create mode 100644 src/react/BreathBar.stories.tsx create mode 100644 src/react/BreathBar.tsx create mode 100644 src/react/Crosshair.css create mode 100644 src/react/Crosshair.tsx create mode 100644 src/react/DebugOverlay.module.css create mode 100644 src/react/DebugOverlay.tsx create mode 100644 src/react/FoodBar.css create mode 100644 src/react/FoodBar.tsx create mode 100644 src/react/HealthBar.css create mode 100644 src/react/HealthBar.stories.tsx create mode 100644 src/react/HealthBar.tsx create mode 100644 src/react/HotbarRenderApp.tsx create mode 100644 src/react/HudBarsProvider.tsx create mode 100644 src/react/KeybindingsScreen.tsx create mode 100644 src/react/KeybindingsScreenApp.tsx create mode 100644 src/react/MessageFormatted.css create mode 100644 src/react/MobileTopButtons.module.css create mode 100644 src/react/MobileTopButtons.tsx create mode 100644 src/react/PauseScreen.module.css create mode 100644 src/react/PauseScreen.tsx create mode 100644 src/react/PlayerListOverlay.css create mode 100644 src/react/PlayerListOverlay.stories.tsx create mode 100644 src/react/PlayerListOverlay.tsx create mode 100644 src/react/PlayerListOverlayProvider.tsx create mode 100644 src/react/SharedHudVars.tsx create mode 100644 src/react/XPBar.module.css create mode 100644 src/react/XPBar.stories.tsx create mode 100644 src/react/XPBar.tsx create mode 100644 src/react/XPBarProvider.tsx create mode 100644 src/react/armorValues.ts create mode 100644 src/react/simpleUtils.ts create mode 100644 src/react/useLongPress.ts create mode 100644 src/scaleInterface.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 429c7197..253b2a52 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,16 +27,17 @@ You can get a description of packets for the latest protocol version from repository. -### Would be useful to have +## A few other notes -- cleanup folder & modules structure, cleanup playground code - -A few other notes: - -- Use `next` branch for development and as base & target branch for pull requests if possible. - To link dependency locally e.g. flying-squid add this to `pnpm` > `overrides` of root package.json: `"flying-squid": "file:../space-squid",` (with some modules `pnpm link` also works) +- Press `Y` to reload application into the same world (server, local world or random singleplayer world) +- To start React profiling disable `REACT_APP_PROFILING` code first. - It's recommended to use debugger for debugging. VSCode has a great debugger built-in. If debugger is slow, you can use `--no-sources` flag that would allow browser to speedup .map file parsing. - Some data are cached between restarts. If you see something doesn't work after upgrading dependencies, try to clear the by simply removing the `dist` folder. - The same folder `dist` is used for both development and production builds, so be careful when deploying the project. - Use `start-prod` script to start the project in production mode after running the `build` script to build the project. + +### Would be useful to have + +- cleanup folder & modules structure, cleanup playground code diff --git a/index.html b/index.html index 362a83fe..3e921855 100644 --- a/index.html +++ b/index.html @@ -95,11 +95,7 @@
- - - -
diff --git a/prismarine-viewer/viewer/lib/simpleUtils.ts b/prismarine-viewer/viewer/lib/simpleUtils.ts index 4cf2ac0e..5c602f1c 100644 --- a/prismarine-viewer/viewer/lib/simpleUtils.ts +++ b/prismarine-viewer/viewer/lib/simpleUtils.ts @@ -11,6 +11,14 @@ export function getBufferFromStream (stream) { ) } +export function openURL (url, newTab = true) { + if (newTab) { + window.open(url, '_blank', 'noopener,noreferrer') + } else { + window.open(url, '_self') + } +} + export function chunkPos (pos: { x: number, z: number }) { const x = Math.floor(pos.x / 16) const z = Math.floor(pos.z / 16) diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index b13443d1..ae2a91d3 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -205,6 +205,7 @@ export abstract class WorldRendererCommon config: this.mesherConfig, }) } + this.renderUpdateEmitter.emit('textureDownloaded') }) }) diff --git a/src/controls.ts b/src/controls.ts index a50e0e03..734a2a6d 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -9,7 +9,7 @@ import { stringStartsWith } from 'contro-max/build/stringUtils' import { isGameActive, showModal, gameAdditionalState, activeModalStack, hideCurrentModal, miscUiState } from './globalState' import { goFullscreen, pointerLock, reloadChunks } from './utils' import { options } from './optionsStorage' -import { openPlayerInventory } from './playerWindows' +import { openPlayerInventory } from './inventoryWindows' import { chatInputValueGlobal } from './react/ChatContainer' import { fsState } from './loadSave' import { showOptionsModal } from './react/SelectOption' diff --git a/src/devReload.ts b/src/devReload.ts index 32e601df..a89551d3 100644 --- a/src/devReload.ts +++ b/src/devReload.ts @@ -27,7 +27,7 @@ if (process.env.NODE_ENV === 'development') { switch (data.replace.type) { case 'mesher': { if (!worldView || !viewer.world.version || !(viewer.world instanceof WorldRendererThree)) return - viewer.world.doHmr() + void viewer.world.doHmr() } } } diff --git a/src/globalState.ts b/src/globalState.ts index 392d5fd9..fa1c4cda 100644 --- a/src/globalState.ts +++ b/src/globalState.ts @@ -129,6 +129,7 @@ export type AppConfig = { export const miscUiState = proxy({ currentDisplayQr: null as string | null, currentTouch: null as boolean | null, + serverIp: null as string | null, hasErrors: false, singleplayer: false, flyingSquid: false, diff --git a/src/globals.d.ts b/src/globals.d.ts index 75c9d0a0..b0a8d6db 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -21,6 +21,7 @@ declare const customEvents: import('typed-emitter').default<{ singleplayer (): void digStart () gameLoaded (): void + mineflayerBotCreated (): void search (q: string): void }> declare const beforeRenderFrame: Array<() => void> diff --git a/src/index.ts b/src/index.ts index 13c3c96c..c4cff16a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,25 +7,16 @@ import './devtools' import './entities' import './globalDomListeners' import initCollisionShapes from './getCollisionShapes' -import { itemsAtlases, onGameLoad } from './playerWindows' +import { itemsAtlases, onGameLoad } from './inventoryWindows' import { supportedVersions } from 'minecraft-protocol' import './menus/components/button' import './menus/components/edit_box' -import './menus/components/hotbar' -import './menus/components/health_bar' -import './menus/components/food_bar' -import './menus/components/breath_bar' -import './menus/components/debug_overlay' -import './menus/components/playerlist_overlay' -import './menus/components/bossbars_overlay' -import './menus/hud' import './menus/play_screen' -import './menus/pause_screen' -import './menus/keybinds_screen' import 'core-js/features/array/at' import 'core-js/features/promise/with-resolvers' +import './scaleInterface' import itemsPng from 'prismarine-viewer/public/textures/items.png' import { initWithRenderer } from './topRightStats' import PrismarineBlock from 'prismarine-block' @@ -55,10 +46,11 @@ import { defaultsDeep } from 'lodash-es' import { initVR } from './vr' import { activeModalStack, - showModal, activeModalStacks, + activeModalStacks, insertActiveModalStack, isGameActive, miscUiState, + showModal } from './globalState' @@ -93,7 +85,8 @@ import { ua } from './react/utils' import { handleMovementStickDelta, joystickPointer } from './react/TouchAreasControls' import { possiblyHandleStateVariable } from './googledrive' import flyingSquidEvents from './flyingSquidEvents' -import { hideNotification, notificationProxy } from './react/NotificationProvider' +import { hideNotification, notificationProxy, showNotification } from './react/NotificationProvider' +import { saveToBrowserMemory } from './react/PauseScreen' import { ViewerWrapper } from 'prismarine-viewer/viewer/lib/viewerWrapper' import './devReload' import './water' @@ -167,16 +160,10 @@ viewer.entities.entitiesOptions = { watchOptionsAfterViewerInit() watchTexturepackInViewer(viewer) -const hud = document.getElementById('hud') -const pauseMenu = document.getElementById('pause-screen') - let mouseMovePostHandle = (e) => { } let lastMouseMove: number -let debugMenu const updateCursor = () => { worldInteractions.update() - debugMenu ??= hud.shadowRoot.querySelector('#debug-overlay') - debugMenu.cursorBlock = worldInteractions.cursorBlock } function onCameraMove (e) { if (e.type !== 'touchmove' && !pointerLock.hasPointerLock) return @@ -457,6 +444,7 @@ async function connect (connectOptions: { }) as unknown as typeof __type_bot window.bot = bot earlySoundsMapCheck() + customEvents.emit('mineflayerBotCreated') if (singleplayer || p2pMultiplayer) { // in case of p2pMultiplayer there is still flying-squid on the host side const _supportFeature = bot.supportFeature @@ -472,13 +460,13 @@ async function connect (connectOptions: { } else { const setupConnectHandlers = () => { bot._client.socket.on('connect', () => { - console.log('TCP connection established') + console.log('WebSocket connection established') //@ts-expect-error bot._client.socket._ws.addEventListener('close', () => { - console.log('TCP connection closed') + console.log('WebSocket connection closed') setTimeout(() => { if (bot) { - bot.emit('end', 'TCP connection closed with unknown reason') + bot.emit('end', 'WebSocket connection closed with unknown reason') } }) }) @@ -502,7 +490,6 @@ async function connect (connectOptions: { if (!bot) return const p2pConnectTimeout = p2pMultiplayer ? setTimeout(() => { throw new Error('Spawn timeout. There might be error on the other side, check console.') }, 20_000) : undefined - hud.preload(bot) // bot.on('inject_allowed', () => { // loadingScreen.maybeRecoverable = false @@ -574,9 +561,6 @@ async function connect (connectOptions: { bot.on('physicsTick', () => updateCursor()) - const debugMenu = hud.shadowRoot.querySelector('#debug-overlay') - - window.debugMenu = debugMenu void initVR() @@ -584,13 +568,6 @@ async function connect (connectOptions: { viewer.setFirstPersonCamera(null, bot.entity.yaw, bot.entity.pitch) } - try { - const gl = renderer.getContext() - debugMenu.rendererDevice = gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info')!.UNMASKED_RENDERER_WEBGL) - } catch (err) { - console.warn(err) - debugMenu.rendererDevice = '???' - } // Link WorldDataEmitter and Viewer viewer.listen(worldView) @@ -626,13 +603,13 @@ async function connect (connectOptions: { } if (renderer.xr.isPresenting) return // todo if (!pointerLock.hasPointerLock && activeModalStack.length === 0) { - showModal(pauseMenu) + showModal({ reactType: 'pause-screen' }) } } registerListener(document, 'pointerlockchange', changeCallback, false) - const cameraControlEl = hud + const cameraControlEl = document.querySelector('#ui-root') /** after what time of holding the finger start breaking the block */ const touchStartBreakingBlockMs = 500 @@ -749,18 +726,31 @@ async function connect (connectOptions: { console.log('Done!') - // todo cleanup these onGameLoad(async () => { if (!viewer.world.downloadedBlockStatesData && !viewer.world.customBlockStatesData) { await new Promise(resolve => { viewer.world.renderUpdateEmitter.once('blockStatesDownloaded', () => resolve()) }) } - hud.init(renderer, bot, server.host) - hud.style.display = 'block' + miscUiState.serverIp = server.host as string | null }) if (appStatusState.isError) return + setTimeout(() => { + // todo + const qs = new URLSearchParams(window.location.search) + if (qs.get('suggest_save')) { + showNotification('Suggestion', 'Save the world to keep your progress!', false, undefined, async () => { + const savePath = await saveToBrowserMemory() + if (!savePath) return + const saveName = savePath.split('/').pop() + bot.end() + // todo hot reload + location.search = `loadSave=${saveName}` + }) + } + }, 600) + setLoadingScreenStatus(undefined) const start = Date.now() let done = false @@ -852,7 +842,7 @@ void window.fetch('config.json').then(async res => res.json()).then(c => c, (err downloadAndOpenFile().then((downloadAction) => { if (downloadAction) return - window.addEventListener('hud-ready', (e) => { + void Promise.resolve().then(() => { // try to connect to peer const qs = new URLSearchParams(window.location.search) const peerId = qs.get('connectPeer') @@ -869,7 +859,6 @@ downloadAndOpenFile().then((downloadAction) => { }) } }) - if (document.getElementById('hud').isReady) window.dispatchEvent(new Event('hud-ready')) }, (err) => { console.error(err) alert(`Failed to download file: ${err}`) diff --git a/src/playerWindows.ts b/src/inventoryWindows.ts similarity index 91% rename from src/playerWindows.ts rename to src/inventoryWindows.ts index b94d0f02..3345b6cd 100644 --- a/src/playerWindows.ts +++ b/src/inventoryWindows.ts @@ -12,6 +12,7 @@ import VillagerGui from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/conta import EnchantingGui from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/container/enchanting_table.png' import AnvilGui from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/container/anvil.png' import BeaconGui from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/container/beacon.png' +import WidgetsGui from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/widgets.png' import Dirt from 'minecraft-assets/minecraft-assets/data/1.17.1/blocks/dirt.png' import { subscribeKey } from 'valtio/utils' @@ -32,7 +33,9 @@ import Generic95 from '../assets/generic_95.png' import { activeModalStack, hideCurrentModal, miscUiState, showModal } from './globalState' import invspriteJson from './invsprite.json' import { options } from './optionsStorage' -import { assertDefined } from './utils' +import { assertDefined, inGameError } from './utils' +import { MessageFormatPart } from './botUtils' +import { currentScaling } from './scaleInterface' export const itemsAtlases: ItemsAtlasesOutputJson = _itemsAtlases const loadedImagesCache = new Map() @@ -58,7 +61,7 @@ export type BlockStates = Record }> -let lastWindow +let lastWindow: ReturnType /** bot version */ let version: string let PrismarineBlock: typeof PrismarineBlockLoader.Block @@ -198,6 +201,7 @@ const getImageSrc = (path): string | HTMLImageElement => { case 'gui/container/enchanting_table': return EnchantingGui case 'gui/container/anvil': return AnvilGui case 'gui/container/beacon': return BeaconGui + case 'gui/widgets': return WidgetsGui } return Dirt } @@ -283,6 +287,13 @@ const renderSlot = (slot: RenderSlot, skipBlock = false): { texture: string, blo slice: invspriteSlice } } + console.warn(`No render data for ${itemName}`) + if (isItem) { + return { + texture: 'blocks', + slice: [0, 0, 16, 16] + } + } } type JsonString = string @@ -290,14 +301,24 @@ type PossibleItemProps = { Damage?: number display?: { Name?: JsonString } // {"text":"Knife","color":"white","italic":"true"} } -export const getItemName = (item: import('prismarine-item').Item | null) => { +export const getItemNameRaw = (item: Pick | null) => { if (!item?.nbt) return const itemNbt: PossibleItemProps = nbt.simplify(item.nbt) const customName = itemNbt.display?.Name if (!customName) return const parsed = mojangson.simplify(mojangson.parse(customName)) + if (parsed.extra) { + return parsed as Record + } else { + return parsed as MessageFormatPart + } +} + +const getItemName = (slot: Item | null) => { + const parsed = getItemNameRaw(slot) + if (!parsed || parsed['extra']) return // todo display full text renderer from sign renderer - const text = flat(parsed).map(x => x.text) + const text = flat(parsed as MessageFormatPart).map(x => x.text) return text } @@ -320,23 +341,24 @@ const mapSlots = (slots: Array) => { const slotCustomProps = renderSlot(slot) Object.assign(slot, { ...slotCustomProps, displayName: ('nbt' in slot ? getItemName(slot) : undefined) ?? slot.displayName }) } catch (err) { - console.error(err) + inGameError(err) } return slot }) } -const upInventory = (isInventory: boolean) => { +export const upInventoryItems = (isInventory: boolean, invWindow = lastWindow) => { // inv.pwindow.inv.slots[2].displayName = 'test' // inv.pwindow.inv.slots[2].blockData = getBlockData('dirt') const customSlots = mapSlots((isInventory ? bot.inventory : bot.currentWindow)!.slots) - lastWindow.pwindow.setSlots(customSlots) + invWindow.pwindow.setSlots(customSlots) } export const onModalClose = (callback: () => any) => { - const { length } = activeModalStack + const modal = activeModalStack.at(-1) const unsubscribe = subscribe(activeModalStack, () => { - if (activeModalStack.length < length) { + const newModal = activeModalStack.at(-1) + if (modal?.reactType !== newModal?.reactType) { callback() unsubscribe() } @@ -370,9 +392,15 @@ const upJei = (search: string) => { if (!x.displayName.toLowerCase().includes(search)) return null! return new PrismarineItem(x.id, 1) }).filter(Boolean) + lastWindow.pwindow.win.jeiSlotsPage = 0 lastWindow.pwindow.win.jeiSlots = mapSlots(matchedSlots) } +export const openItemsCanvas = (type, _bot = bot as typeof bot | null) => { + const inv = showInventory(type, getImage, {}, _bot) + return inv +} + const openWindow = (type: string | undefined) => { // if (activeModalStack.some(x => x.reactType?.includes?.('player_win:'))) { if (activeModalStack.length) { // game is not in foreground, don't close current modal @@ -386,17 +414,17 @@ const openWindow = (type: string | undefined) => { // might be already closed (event fired) if (type !== undefined && bot.currentWindow) bot.currentWindow['close']() lastWindow.destroy() - lastWindow = null + lastWindow = null as any miscUiState.displaySearchInput = false destroyFn() }) cleanLoadedImagesCache() - const inv = showInventory(type, getImage, {}, bot) + const inv = openItemsCanvas(type) + // todo + inv.canvasManager.setScale(currentScaling.scale === 1 ? 1.5 : currentScaling.scale) inv.canvas.style.zIndex = '10' inv.canvas.style.position = 'fixed' inv.canvas.style.inset = '0' - // todo scaling - inv.canvasManager.setScale(window.innerWidth < 470 ? 1.5 : window.innerHeight < 480 || window.innerWidth < 760 ? 2 : window.innerHeight < 700 ? 3 : 4) inv.canvasManager.onClose = () => { hideCurrentModal() @@ -405,7 +433,7 @@ const openWindow = (type: string | undefined) => { lastWindow = inv const upWindowItems = () => { - void Promise.resolve().then(() => upInventory(type === undefined)) + void Promise.resolve().then(() => upInventoryItems(type === undefined)) } upWindowItems() @@ -414,7 +442,7 @@ const openWindow = (type: string | undefined) => { // slotItem is the slot from mapSlots const itemId = loadedData.itemsByName[slotItem.name]?.id if (!itemId) { - console.error(`Item for block ${slotItem.name} not found`) + inGameError(`Item for block ${slotItem.name} not found`) return } const item = new PrismarineItem(itemId, isRightclick ? 64 : 1, slotItem.metadata) diff --git a/src/menus/components/bossbars_overlay.js b/src/menus/components/bossbars_overlay.js deleted file mode 100644 index 015dc6db..00000000 --- a/src/menus/components/bossbars_overlay.js +++ /dev/null @@ -1,150 +0,0 @@ -const { LitElement, html, css } = require('lit') -const { styleMap } = require('lit/directives/style-map.js') - -const colors = ['pink', 'blue', 'red', 'green', 'yellow', 'purple', 'white'] -const divs = [0, 6, 10, 12, 20] -const translations = { - 'entity.minecraft.ender_dragon': 'Ender Dragon', - 'entity.minecraft.wither': 'Wither' -} -class BossBar extends LitElement { - constructor (bar) { - super() - this.bar = bar - this.title = '' - this.progress = 0 - this.bossBarStyles = {} - this.fillStyles = {} - this.div1Styles = {} - this.div2Styles = {} - } - - static get styles () { - return css` - .container { - display: flex; - flex-direction: column; - align-items: center; - } - .title { - font-size: 7px; - color: #fff; - } - .bossbar { - background-image: url("textures/1.18.1/gui/bars.png"); - width: 182px; - height: 5px; - position: relative; - } - .bossbar .fill { - content: ""; - position: absolute; - top: 0; - left: 0; - height: 5px; - width: 0; - background-image: url("textures/1.18.1/gui/bars.png"); - }` - } - - static get properties () { - return { - bar: { type: Object } - } - } - - render () { - this.updateBar(this.bar) - - return html` -
-
${this.title}
-
-
-
-
-
-
- ` - } - - setTitle (bar) { - if (bar._title.text) this.title = bar.title.text - else this.title = translations[bar.title.translate] || 'Unknown Entity' - } - - setColor (bar) { - this.bossBarStyles.backgroundPositionY = `-${colors.indexOf(bar._color) * 10}px` - this.fillStyles.backgroundPositionY = `-${colors.indexOf(bar._color) * 10 + 5}px` - } - - setProgress (bar) { - this.fillStyles.width = `${bar._health * 100}%` - this.div2Styles.width = `${bar._health * 100}%` - } - - setDiv (bar) { - this.div1Styles.backgroundPositionY = `-${divs.indexOf(bar._dividers) * 10 + 70}px` - this.div2Styles.backgroundPositionY = `-${divs.indexOf(bar._dividers) * 10 + 75}px` - } - - updateBar (bar) { - this.setTitle(bar) - this.setColor(bar) - this.setDiv(bar) - this.setProgress(bar) - } -} - -class BossBars extends LitElement { - constructor () { - super() - this.bossBars = new Map() - } - - static get styles () { - return css` - .bossBars { - display: flex; - flex-direction: column; - gap: 5px; - position: absolute; - top: 9px; - left: 50%; - transform: translate(-50%); - }` - } - - static get properties () { - return { - bossBars: { type: Map } - } - } - - render () { - return html` -
- ${[...this.bossBars.values()]} -
- ` - } - - init () { - this.bot.on('bossBarCreated', async (bossBar) => { - this.bossBars.set(bossBar.entityUUID, new BossBar(bossBar)) - this.requestUpdate() - }) - this.bot.on('bossBarUpdated', (bossBar) => { - const bar = this.bossBars.get(bossBar.entityUUID) - bar.bar = bossBar - bar.requestUpdate() - }) - this.bot.on('bossBarDeleted', (bossBar) => { - this.bossBars.delete(bossBar.entityUUID) - this.requestUpdate() - }) - } -} - -window.customElements.define('pmui-bossbars-overlay', BossBars) -window.customElements.define('pmui-bossbar', BossBar) diff --git a/src/menus/components/breath_bar.js b/src/menus/components/breath_bar.js deleted file mode 100644 index b6fcfd9c..00000000 --- a/src/menus/components/breath_bar.js +++ /dev/null @@ -1,89 +0,0 @@ -const { LitElement, html, css, unsafeCSS } = require('lit') -const { guiIcons1_17_1 } = require('../hud') - -class BreathBar extends LitElement { - static get styles () { - return css` - .breathbar { - position: absolute; - display: flex; - flex-direction: row-reverse; - left: calc(50% + 91px); - transform: translate(-100%); - bottom: 40px; - --offset: calc(-1 * 16px); - --bg-x: calc(-1 * 16px); - --bg-y: calc(-1 * 18px); - } - - .breath { - width: 9px; - height: 9px; - margin-left: -1px; - } - - .breath.full { - background-image: url('${unsafeCSS(guiIcons1_17_1)}'); - background-size: 256px; - background-position: var(--offset) var(--bg-y); - } - - .breath.half { - background-image: url('${unsafeCSS(guiIcons1_17_1)}'); - background-size: 256px; - background-position: calc(var(--offset) - 9) var(--bg-y); - } - ` - } - - gameModeChanged () { - this.shadowRoot.querySelector('#breathbar').classList.toggle('creative', bot.game.gameMode === 'creative' || bot.game.gameMode === 'spectator') - } - - updateOxygen (hValue) { - const breathbar = this.shadowRoot.querySelector('#breathbar') - breathbar.style.display = 'block' - - const breaths = breathbar.children - - for (const breath of breaths) { - breath.classList.remove('full') - breath.classList.remove('half') - } - - for (let i = 0; i < Math.ceil(hValue / 2); i++) { - if (i >= breaths.length) break - - if (hValue % 2 !== 0 && Math.ceil(hValue / 2) === i + 1) { - breaths[i].classList.add('half') - } else { - breaths[i].classList.add('full') - } - } - - // if (hValue === 20) { - // setTimeout(() => { - // breathbar.style.display = 'none' - // }, 1000) - // } - } - - render () { - return html` -
-
-
-
-
-
-
-
-
-
-
-
- ` - } -} - -window.customElements.define('pmui-breathbar', BreathBar) diff --git a/src/menus/components/debug_overlay.js b/src/menus/components/debug_overlay.js deleted file mode 100644 index a79a940a..00000000 --- a/src/menus/components/debug_overlay.js +++ /dev/null @@ -1,274 +0,0 @@ -const { LitElement, html, css } = require('lit') -const { subscribeKey } = require('valtio/utils') -const { miscUiState } = require('../../globalState') -const { options } = require('../../optionsStorage') -const { getFixedFilesize } = require('../../downloadAndOpenFile') - -class DebugOverlay extends LitElement { - static get styles () { - return css` - .debug-left-side, - .debug-right-side { - padding-left: calc(env(safe-area-inset-left) / 2); - padding-right: calc(env(safe-area-inset-right) / 2); - position: absolute; - display: flex; - flex-direction: column; - z-index: 40; - pointer-events: none; - } - - .debug-left-side { - top: 1px; - left: 1px; - } - - .debug-right-side { - top: 5px; - right: 1px; - /* limit renderer long text width */ - width: 50%; - } - - p { - display: block; - color: white; - font-size: 10px; - width: fit-content; - line-height: 9px; - margin: 0; - padding: 0; - padding-bottom: 1px; - background: rgba(110, 110, 110, 0.5); - } - - .debug-right-side p { - margin-left: auto; - } - - .empty { - display: block; - height: 9px; - } - ` - } - - static get properties () { - return { - showOverlay: { type: Boolean }, - cursorBlock: { type: Object }, - rendererDevice: { type: String }, - bot: { type: Object }, - customEntries: { type: Object }, - packetsString: { type: String } - } - } - - constructor () { - super() - this.showOverlay = false - this.customEntries = {} - this.packetsString = '' - } - - firstUpdated () { - document.addEventListener('keydown', e => { - if (e.code === 'F3') { - this.showOverlay = !this.showOverlay - e.preventDefault() - } - }) - - let receivedTotal = 0 - let received = { - count: 0, - size: 0 - } - let sent = { - count: 0, - size: 0 - } - const packetsCountByNamePerSec = { - received: {}, - sent: {} - } - const hardcodedListOfDebugPacketsToIgnore = { - received: [ - 'entity_velocity', - 'sound_effect', - 'rel_entity_move', - 'entity_head_rotation', - 'entity_metadata', - 'entity_move_look', - 'teams', - 'entity_teleport', - 'entity_look', - 'ping', - 'entity_update_attributes', - 'player_info', - 'update_time', - 'animation', - 'entity_equipment', - 'entity_destroy', - 'named_entity_spawn', - 'update_light', - 'set_slot', - 'block_break_animation', - 'map_chunk', - 'spawn_entity', - 'world_particles', - 'keep_alive', - 'chat', - 'playerlist_header', - 'scoreboard_objective', - 'scoreboard_score' - ], - sent: [ - 'pong', - 'position', - 'look', - 'keep_alive', - 'position_look' - ] - } // todo cleanup? - const ignoredPackets = new Set('') - Object.defineProperty(window, 'debugTopPackets', { - get () { - return Object.fromEntries(Object.entries(packetsCountByName).map(([s, packets]) => [s, Object.fromEntries(Object.entries(packets).sort(([, n1], [, n2]) => { - return n2 - n1 - }))])) - } - }) - setInterval(() => { - this.packetsString = `↓ ${received.count} (${(received.size / 1024).toFixed(2)} KB/s, ${getFixedFilesize(receivedTotal)}) ↑ ${sent.count}` - received = { - count: 0, - size: 0 - } - sent = { - count: 0, - size: 0 - } - packetsCountByNamePerSec.received = {} - packetsCountByNamePerSec.sent = {} - }, 1000) - const packetsCountByName = { - received: {}, - sent: {} - } - - const managePackets = (type, name, data) => { - packetsCountByName[type][name] ??= 0 - packetsCountByName[type][name]++ - if (options.debugLogNotFrequentPackets && !ignoredPackets.has(name) && !hardcodedListOfDebugPacketsToIgnore[type].includes(name)) { - packetsCountByNamePerSec[type][name] ??= 0 - packetsCountByNamePerSec[type][name]++ - if (packetsCountByNamePerSec[type][name] > 5 || packetsCountByName[type][name] > 100) { // todo think of tracking the count within 10s - console.info(`[packet ${name} was ${type} too frequent] Ignoring...`) - ignoredPackets.add(name) - } else { - console.info(`[packet ${type}] ${name}`, /* ${JSON.stringify(data, null, 2)}` */ data) - } - } - } - - subscribeKey(miscUiState, 'gameLoaded', () => { - if (!miscUiState.gameLoaded) return - packetsCountByName.received = {} - packetsCountByName.sent = {} - const readPacket = (data, { name }, _buf, fullBuffer) => { - if (fullBuffer) { - const size = fullBuffer.byteLength - receivedTotal += size - received.size += size - } - received.count++ - managePackets('received', name, data) - } - bot._client.on('packet', readPacket) - bot._client.on('packet_name', (name, data) => readPacket(data, { name })) // custom client - bot._client.on('writePacket', (name, data) => { - sent.count++ - managePackets('sent', name, data) - }) - }) - } - - updated (changedProperties) { - if (changedProperties.has('bot')) { - this.bot.on('move', () => { - this.requestUpdate() - }) - this.bot.on('time', () => { - this.requestUpdate() - }) - this.bot.on('entitySpawn', () => { - this.requestUpdate() - }) - this.bot.on('entityGone', () => { - this.requestUpdate() - }) - } - } - - render () { - if (!this.showOverlay) { - return html`` - } - - const target = this.cursorBlock - - const pos = this.bot.entity.position - const rot = [this.bot.entity.yaw, this.bot.entity.pitch] - - const viewDegToMinecraft = (yaw) => yaw % 360 - 180 * (yaw < 0 ? -1 : 1) - - const quadsDescription = [ - 'north (towards negative Z)', - 'east (towards positive X)', - 'south (towards positive Z)', - 'west (towards negative X)' - ] - - const minecraftYaw = viewDegToMinecraft(rot[0] * -180 / Math.PI) - const minecraftQuad = Math.floor(((minecraftYaw + 180) / 90 + 0.5) % 4) - - const renderProp = (name, value) => { - return html`

${name}: ${typeof value === 'boolean' ? html`${value}` : value}

` - } - - const botBlock = bot.entity.position.floored() - const skyL = bot.world.getSkyLight(botBlock) - const blockL = bot.world.getBlockLight(botBlock) - const biomeId = bot.world.getBiome(botBlock) - - return html` -
-

Prismarine Web Client (${this.bot.version})

-

E: ${Object.values(this.bot.entities).length}

-

${this.bot.game.dimension}

-
-

XYZ: ${pos.x.toFixed(3)} / ${pos.y.toFixed(3)} / ${pos.z.toFixed(3)}

-

Chunk: ${Math.floor(pos.x % 16)} ~ ${Math.floor(pos.z % 16)} in ${Math.floor(pos.x / 16)} ~ ${Math.floor(pos.z / 16)}

-

Packets: ${this.packetsString}

-

Facing (viewer): ${rot[0].toFixed(3)} ${rot[1].toFixed(3)}

-

Facing (minecraft): ${quadsDescription[minecraftQuad]} (${minecraftYaw.toFixed(1)} ${(rot[1] * -180 / Math.PI).toFixed(1)})

-

Light: ${blockL} (${skyL} sky)

- -

Biome: minecraft:${window.loadedData.biomesArray[biomeId]?.name ?? 'unknown biome'}

-

Day: ${this.bot.time.day}

-
- ${Object.entries(this.customEntries).map(([name, value]) => html`

${name}: ${value}

`)} -
- -
-

Renderer: ${this.rendererDevice} powered by three.js r${global.THREE.REVISION}

-
- ${target ? html`

${target.name}

${Object.entries(target.getProperties()).map(([n, p], idx, arr) => renderProp(n, p, arr[idx + 1]))}` : ''} - ${target ? html`

Looking at: ${target.position.x} ${target.position.y} ${target.position.z}

` : ''} -
- ` - } -} - -window.customElements.define('pmui-debug-overlay', DebugOverlay) diff --git a/src/menus/components/food_bar.js b/src/menus/components/food_bar.js deleted file mode 100644 index 48f783fb..00000000 --- a/src/menus/components/food_bar.js +++ /dev/null @@ -1,122 +0,0 @@ -const { LitElement, html, css, unsafeCSS } = require('lit') -const { guiIcons1_17_1 } = require('../hud') - -class FoodBar extends LitElement { - static get styles () { - return css` - .foodbar { - position: fixed; - display: flex; - flex-direction: row-reverse; - left: calc(50% + 91px); - transform: translate(-100%); - bottom: 30px; - --lightened: 0; - --offset: calc(-1 * (52px)); - --bg-x: calc(-1 * (16px + 9px * var(--lightened))); - --bg-y: calc(-1 * 27px); - } - - .food { - width: 9px; - height: 9px; - background-image: url('${unsafeCSS(guiIcons1_17_1)}'), url('${unsafeCSS(guiIcons1_17_1)}'); - background-size: 256px, 256px; - background-position: var(--bg-x) var(--bg-y), var(--bg-x) var(--bg-y); - margin-left: -1px; - } - - .food.full { - background-position: var(--offset) var(--bg-y), var(--bg-x) var(--bg-y); - } - - .food.half { - background-position: calc(var(--offset) - 9px) var(--bg-y), var(--bg-x) var(--bg-y); - } - - .foodbar.low .food { - animation: lowHungerAnim 0.2s steps(2, end) infinite; - } - - .foodbar.low .food:nth-of-type(2n) { - animation-direction: reverse; - } - - .foodbar.low .food:nth-of-type(3n) { - animation-duration: 0.1s; - } - - .foodbar.updated { - animation: updatedAnim 0.3s steps(2, end) 2; - } - - .creative { - display: none; - } - - @keyframes lowHungerAnim { - to { transform: translateY(1px); } - } - - @keyframes updatedAnim { - to { --lightened: 1; } - } - ` - } - - gameModeChanged (gamemode) { - this.shadowRoot.querySelector('#foodbar').classList.toggle('creative', gamemode === 1) - } - - onHungerUpdate () { - this.shadowRoot.querySelector('#foodbar').classList.toggle('updated', true) - if (this.hungerTimeout) clearTimeout(this.hungerTimeout) - this.hungerTimeout = setTimeout(() => { - this.shadowRoot.querySelector('#foodbar').classList.toggle('updated', false) - this.hungerTimeout = null - }, 1000) - } - - updateHunger (hValue, d) { - const foodbar = this.shadowRoot.querySelector('#foodbar') - foodbar.classList.toggle('low', hValue <= 5) - - const foods = foodbar.children - - for (const food of foods) { - food.classList.remove('full') - food.classList.remove('half') - } - - // if (d) this.onHungerUpdate() - - for (let i = 0; i < Math.ceil(hValue / 2); i++) { - if (i >= foods.length) break - - if (hValue % 2 !== 0 && Math.ceil(hValue / 2) === i + 1) { - foods[i].classList.add('half') - } else { - foods[i].classList.add('full') - } - } - } - - render () { - return html` -
-
-
-
-
-
-
-
-
-
-
-
- ` - } -} - -window.customElements.define('pmui-foodbar', FoodBar) diff --git a/src/menus/components/health_bar.js b/src/menus/components/health_bar.js deleted file mode 100644 index c49c510b..00000000 --- a/src/menus/components/health_bar.js +++ /dev/null @@ -1,163 +0,0 @@ -const { LitElement, html, css, unsafeCSS } = require('lit') -const { guiIcons1_17_1 } = require('../hud') - -function getEffectClass (effect) { - switch (effect.id) { - case 19: return 'poisoned' - case 20: return 'withered' - case 22: return 'absorption' - default: return '' - } -} - -class HealthBar extends LitElement { - static get styles () { - return css` - .health { - position: fixed; - display: flex; - flex-direction: row; - left: calc(50% - 91px); - bottom: 30px; - --hardcore: 0; - --kind: 0; - --lightened: 0; - --offset: calc(-1 * (52px + (9px * (4 * var(--kind) + var(--lightened) * 2)) )); - --bg-x: calc(-1 * (16px + 9px * var(--lightened))); - --bg-y: calc(-1 * var(--hardcore) * 45px); - } - - .health.creative { - display: none; - } - - .health.hardcore { - --hardcore: 1; - } - - .health.poisoned { - --kind: 1; - } - - .health.withered { - --kind: 2; - } - - .health.absorption { - --kind: 3; - } - - .heart { - width: 9px; - height: 9px; - background-image: url('${unsafeCSS(guiIcons1_17_1)}'), url('${unsafeCSS(guiIcons1_17_1)}'); - background-size: 256px, 256px; - background-position: var(--bg-x) var(--bg-y), var(--bg-x) var(--bg-y); - margin-left: -1px; - } - - .heart.full { - background-position: var(--offset) var(--bg-y), var(--bg-x) var(--bg-y); - } - - .heart.half { - background-position: calc(var(--offset) - 9px) var(--bg-y), var(--bg-x) var(--bg-y); - } - - .health.low .heart { - animation: lowHealthAnim 0.2s steps(2, end) infinite; - } - - .health.low .heart:nth-of-type(2n) { - animation-direction: reverse; - } - - .health.low .heart:nth-of-type(3n) { - animation-duration: 0.1s; - } - - .health.damaged { - animation: damagedAnim 0.3s steps(2, end) 2; - } - - @keyframes lowHealthAnim { - to { - transform: translateY(1px); - } - } - - @keyframes damagedAnim { - to { --lightened: 1; } - } - ` - } - - effectAdded (effect) { - const effectClass = getEffectClass(effect) - if (!effectClass) return - this.shadowRoot.querySelector('#health').classList.add(effectClass) - } - - effectEnded (effect) { - const effectClass = getEffectClass(effect) - if (!effectClass) return - this.shadowRoot.querySelector('#health').classList.remove(effectClass) - } - - onDamage () { - this.shadowRoot.querySelector('#health').classList.toggle('damaged', true) - if (this.hurtTimeout) clearTimeout(this.hurtTimeout) - this.hurtTimeout = setTimeout(() => { - this.shadowRoot.querySelector('#health').classList.toggle('damaged', false) - this.hurtTimeout = null - }, 1000) - } - - gameModeChanged (gamemode, hardcore) { - this.shadowRoot.querySelector('#health').classList.toggle('creative', bot.game.gameMode === 'creative' || bot.game.gameMode === 'spectator') - this.shadowRoot.querySelector('#health').classList.toggle('hardcore', hardcore) - } - - updateHealth (hValue, d) { - const health = this.shadowRoot.querySelector('#health') - health.classList.toggle('low', hValue <= 4) - - const hearts = health.children - - for (const heart of hearts) { - heart.classList.remove('full') - heart.classList.remove('half') - } - - if (d) this.onDamage() - - for (let i = 0; i < Math.ceil(hValue / 2); i++) { - if (i >= hearts.length) break - - if (hValue % 2 !== 0 && Math.ceil(hValue / 2) === i + 1) { - hearts[i].classList.add('half') - } else { - hearts[i].classList.add('full') - } - } - } - - render () { - return html` -
-
-
-
-
-
-
-
-
-
-
-
- ` - } -} - -window.customElements.define('pmui-healthbar', HealthBar) diff --git a/src/menus/components/hotbar.js b/src/menus/components/hotbar.js deleted file mode 100644 index b4d14b5b..00000000 --- a/src/menus/components/hotbar.js +++ /dev/null @@ -1,206 +0,0 @@ -const { LitElement, html, css, unsafeCSS } = require('lit') -const widgetsTexture = require('minecraft-assets/minecraft-assets/data/1.16.4/gui/widgets.png') -const { subscribeKey } = require('valtio/utils') -const invsprite = require('../../invsprite.json') -const { isGameActive, miscUiState, showModal } = require('../../globalState') - -const { openPlayerInventory, renderSlotExternal } = require('../../playerWindows') -const { isProbablyIphone } = require('./common') - -class Hotbar extends LitElement { - static get styles () { - return css` - .hotbar { - position: fixed; - /* todo use env(safe-area-inset-bottom) instead */ - bottom: ${unsafeCSS(isProbablyIphone() ? '40px' : '0')}; - left: 50%; - transform: translate(-50%); - width: 182px; - height: 22px; - background: url("${unsafeCSS(widgetsTexture)}"); - background-size: 256px; - } - - #hotbar-selected { - position: absolute; - left: -1px; - top: -1px; - width: 24px; - height: 24px; - background: url("${unsafeCSS(widgetsTexture)}"); - background-size: 256px; - background-position-y: -22px; - } - - #hotbar-items-wrapper { - position: absolute; - top: 0; - left: 1px; - display: flex; - flex-direction: row; - height: 22px; - margin: 0; - padding: 0; - } - - .hotbar-item { - position: relative; - width: 20px; - height: 22px; - } - - .item-icon { - top: 3px; - left: 2px; - position: absolute; - width: 32px; - height: 32px; - transform-origin: top left; - transform: scale(0.5); - background-size: 1024px auto; - } - - .item-stack { - position: absolute; - color: white; - font-size: 10px; - text-shadow: 1px 1px 0 rgb(63, 63, 63); - right: 1px; - bottom: 1px; - } - - #hotbar-item-name { - color: white; - position: absolute; - bottom: 51px; - left: 50%; - transform: translate(-50%); - text-shadow: rgb(63, 63, 63) 1px 1px 0px; - font-family: mojangles, minecraft, monospace; - font-size: 10px; - text-align: center; - } - - .hotbar-item-name-fader { - opacity: 0; - transition: visibility 0s, opacity 1s linear; - transition-delay: 2s; - } - - .hotbar-more { - display:flex; - justify-content: center; - border: 1px solid white; - } - .hotbar-more::before { - content: '...'; - margin-top: -1px; - } - ` - } - - static get properties () { - return { - activeItemName: { type: String }, - } - } - - constructor () { - super() - subscribeKey(miscUiState, 'currentTouch', () => { - this.requestUpdate() - }) - this.activeItemName = '' - - document.addEventListener('wheel', (e) => { - if (!isGameActive(true)) return - e.preventDefault() - const newSlot = ((bot.quickBarSlot + Math.sign(e.deltaY)) % 9 + 9) % 9 - this.reloadHotbarSelected(newSlot) - }, { - passive: false, - }) - - document.addEventListener('keydown', (e) => { - if (!isGameActive(true)) return - const numPressed = +((/Digit(\d)/.exec(e.code))?.[1] ?? -1) - if (numPressed < 1 || numPressed > 9) return - this.reloadHotbarSelected(numPressed - 1) - }) - } - - init () { - this.reloadHotbar() - this.reloadHotbarSelected(0) - - bot.inventory.on('updateSlot', (slot, oldItem, newItem) => { - if (slot >= bot.inventory.hotbarStart + 9) return - if (slot < bot.inventory.hotbarStart) return - - this.reloadHotbar(slot - bot.inventory.hotbarStart) - }) - } - - reloadHotbar (onlySlot = undefined) { - for (let i = 0; i < 9; i++) { - if (onlySlot !== undefined && onlySlot !== i) continue - const item = bot.inventory.slots[bot.inventory.hotbarStart + i] - const slotEl = this.shadowRoot.getElementById('hotbar-' + i) - const slotIcon = slotEl.children[0] - const slotStack = slotEl.children[1] - const data = item ? renderSlotExternal(item) : { sprite: [invsprite.air.x, invsprite.air.y] } - if (item) item.displayName = data?.displayName ?? item.displayName - if (data?.imageDataUrl) { - slotIcon.style['background-image'] = `url('${data.imageDataUrl}')` - } else { - slotIcon.style['background-image'] = `url('invsprite.png')` - } - const [x, y] = data?.sprite ?? [0, 0] - slotIcon.style['background-position-x'] = `-${x}px` - slotIcon.style['background-position-y'] = `-${y}px` - slotStack.textContent = item?.count > 1 ? item.count : '' - } - } - - async reloadHotbarSelected (slot) { - const item = bot.inventory.slots[bot.inventory.hotbarStart + slot] - const newLeftPos = (-1 + 20 * slot) + 'px' - this.shadowRoot.getElementById('hotbar-selected').style.left = newLeftPos - bot.setQuickBarSlot(slot) - // todo highlight on item type change - this.activeItemName = item?.displayName ?? '' - const name = this.shadowRoot.getElementById('hotbar-item-name') - name.classList.remove('hotbar-item-name-fader') - setTimeout(() => name.classList.add('hotbar-item-name-fader'), 10) - } - - render () { - return html` -
-

${this.activeItemName}

-
-
{ - if (!e.target.id.startsWith('hotbar')) return - const slot = +e.target.id.split('-')[1] - this.reloadHotbarSelected(slot) - }}> - ${Array.from({ length: 9 }).map((_, i) => html` -
{ - this.reloadHotbarSelected(i) - }}> -
- -
- `)} - ${miscUiState.currentTouch ? html`
{ - openPlayerInventory() - }}>` : undefined} -
-
-
- ` - } -} - -window.customElements.define('pmui-hotbar', Hotbar) diff --git a/src/menus/components/playerlist_overlay.js b/src/menus/components/playerlist_overlay.js deleted file mode 100644 index b4dd0ba1..00000000 --- a/src/menus/components/playerlist_overlay.js +++ /dev/null @@ -1,185 +0,0 @@ -const { LitElement, html, css } = require('lit') -const { isGameActive } = require('../../globalState') - -const MAX_ROWS_PER_COL = 10 - -class PlayerListOverlay extends LitElement { - static get styles () { - return css` - .playerlist-container { - position: absolute; - background-color: rgba(0, 0, 0, 0.3); - top: 9px; - left: 50%; - transform: translate(-50%); - width: fit-content; - padding: 1px; - display: flex; - flex-direction: column; - gap: 1px 0; - place-items: center; - z-index: 30; - } - - .title { - color: white; - text-shadow: 1px 1px 0px #3f3f3f; - font-size: 10px; - margin: 0; - padding: 0; - } - - .playerlist-entry { - overflow: hidden; - color: white; - font-size: 10px; - margin: 0px; - line-height: calc(100% - 1px); - text-shadow: 1px 1px 0px #3f3f3f; - font-family: mojangles, minecraft, monospace; - background: rgba(255, 255, 255, 0.1); - width: 100%; - } - - .active-player { - color: rgb(42, 204, 237); - text-shadow: 1px 1px 0px rgb(4, 44, 67); - } - - .playerlist-ping { - text-align: right; - float: right; - padding-left: 10px; - } - - .playerlist-ping-value { - color: rgb(114, 255, 114); - text-shadow: 1px 1px 0px rgb(28, 105, 28); - float: left; - margin: 0; - margin-right: 1px; - } - - .playerlist-ping-label { - text-shadow: 1px 1px 0px #3f3f3f; - color: white; - float: right; - margin: 0px; - } - - .player-lists { - display: flex; - flex-direction: row; - place-items: center; - place-content: center; - gap: 0 4px; - } - - .player-list { - display: flex; - flex-direction: column; - gap: 1px 0; - min-width: 80px; - } - ` - } - - static get properties () { - return { - serverIP: { type: String }, - clientId: { type: String }, - players: { type: Object } - } - } - - constructor () { - super() - this.serverIP = '' - this.clientId = '' - this.players = {} - } - - init (ip) { - const playerList = this.shadowRoot.querySelector('#playerlist-container') - - this.isOpen = false - this.players = bot.players - if (bot.player) { - this.clientId = bot.player.uuid - } else { - bot._client.on('player_info', () => { - this.clientId = bot.player?.uuid - }) - } - this.serverIP = ip - - this.requestUpdate() - - const showList = (shouldShow = true) => { - playerList.style.display = shouldShow ? 'block' : 'none' - this.isOpen = shouldShow - } - - document.addEventListener('keydown', e => { - if (!isGameActive(true)) return - if (e.key === 'Tab') { - showList(true) - e.preventDefault() - } - }) - - document.addEventListener('keyup', e => { - if (!this.isOpen) return - if (e.key === 'Tab') { - showList(false) - e.preventDefault() - } - }) - - bot.on('playerUpdated', () => this.requestUpdate()) // LitElement seems to be batching requests, so it should be fine? - bot.on('playerJoined', () => this.requestUpdate()) - bot.on('playerLeft', () => this.requestUpdate()) - } - - render () { - const lists = [] - const players = Object.values(this.players).sort((a, b) => { - if (a.username > b.username) return 1 - if (a.username < b.username) return -1 - return 0 - }) - - let tempList = [] - for (let i = 0; i < players.length; i++) { - tempList.push(players[i]) - - if ((i + 1) / MAX_ROWS_PER_COL === 1 || i + 1 === players.length) { - lists.push([...tempList]) - tempList = [] - } - } - - return html` - - ` - } -} - -window.customElements.define('pmui-playerlist-overlay', PlayerListOverlay) diff --git a/src/menus/hud.js b/src/menus/hud.js deleted file mode 100644 index 17537e0e..00000000 --- a/src/menus/hud.js +++ /dev/null @@ -1,258 +0,0 @@ -import { f3Keybinds } from '../controls' -import { showOptionsModal } from '../react/SelectOption' - -const { LitElement, html, css, unsafeCSS } = require('lit') -const { showModal, miscUiState, activeModalStack, hideCurrentModal } = require('../globalState') -const { options, watchValue } = require('../optionsStorage') -const { getGamemodeNumber } = require('../utils') -const { isMobile } = require('./components/common') - -export const guiIcons1_17_1 = require('minecraft-assets/minecraft-assets/data/1.17.1/gui/icons.png') -export const guiIcons1_16_4 = require('minecraft-assets/minecraft-assets/data/1.16.4/gui/icons.png') - -class Hud extends LitElement { - static get styles () { - return css` - :host { - position: fixed; - top: 0; - left: 0; - z-index: -2; - width: 100%; - height: 100vh; - touch-action: none; - } - - .crosshair { - width: 16px; - height: 16px; - background: url('${unsafeCSS(guiIcons1_17_1)}'); - background-size: calc(256px * var(--crosshair-scale)); - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 2; - } - - #xp-label { - position: fixed; - top: -8px; - left: 50%; - transform: translate(-50%); - font-size: 10px; - font-family: minecraft, mojangles, monospace; - color: rgb(30, 250, 30); - text-shadow: 0px -1px #000, 0px 1px #000, 1px 0px #000, -1px 0px #000; - z-index: 10; - } - - #xp-bar-bg { - position: fixed; - left: 50%; - bottom: 24px; - transform: translate(-50%); - width: 182px; - height: 5px; - background-image: url('${unsafeCSS(guiIcons1_16_4)}'); - background-size: 256px; - background-position-y: -64px; - } - - .xp-bar { - width: 182px; - height: 5px; - background-image: url('${unsafeCSS(guiIcons1_17_1)}'); - background-size: 256px; - background-position-y: -69px; - } - - .mobile-top-btns { - display: none; - flex-direction: row; - position: fixed; - top: 0; - left: 50%; - transform: translate(-50%); - gap: 0 5px; - z-index: 20; - } - - .pause-btn, - .chat-btn { - --scale: 1.3; - border: none; - outline: 0.5px solid white; - width: calc(14px * var(--scale)); - height: calc(14px * var(--scale)); - background-image: url('extra-textures/gui.png'); - background-size: calc(256px * var(--scale)); - background-position-x: calc(var(--scale) * -202px); - background-position-y: calc(var(--scale) * -66px); - } - - .chat-btn { - background-position-y: calc(var(--scale) * -84px); - } - .debug-btn { - background: #9c8c86; - font-size: 8px; - /* todo make other buttons centered */ - /* margin-right: 5px; */ - color: white; - font-family: minecraft, mojangles, monospace; - padding: 4px 6px; - outline: 0.5px solid white; - } - ` - } - - static get properties () { - return { - bot: { type: Object } - } - } - - firstUpdated () { - this.isReady = true - window.dispatchEvent(new CustomEvent('hud-ready', { detail: this })) - - watchValue(miscUiState, o => { - this.showMobileControls(o.currentTouch) - //@ts-expect-error - this.shadowRoot.host.style.display = o.gameLoaded ? 'block' : 'none' - }) - } - - /** - * @param {import('mineflayer').Bot} bot - */ - preload (bot) { - const bossBars = this.shadowRoot.getElementById('bossbars-overlay') - bossBars.bot = bot - - bossBars.init() - } - - /** - * @param {globalThis.THREE.Renderer} renderer - * @param {import('mineflayer').Bot} bot - * @param {string} host - */ - init (renderer, bot, host) { - const debugMenu = this.shadowRoot.querySelector('#debug-overlay') - const playerList = this.shadowRoot.querySelector('#playerlist-overlay') - const healthbar = this.shadowRoot.querySelector('#health-bar') - const foodbar = this.shadowRoot.querySelector('#food-bar') - // const breathbar = this.shadowRoot.querySelector('#breath-bar') - const chat = this.shadowRoot.querySelector('#chat') - const hotbar = this.shadowRoot.querySelector('#hotbar') - const xpLabel = this.shadowRoot.querySelector('#xp-label') - - this.bot = bot - debugMenu.bot = bot - - hotbar.init() - playerList.init(host) - - bot.on('entityHurt', (entity) => { - if (entity !== bot.entity) return - healthbar.onDamage() - }) - - bot.on('entityEffect', (entity, effect) => { - if (entity !== bot.entity) return - healthbar.effectAdded(effect) - }) - - bot.on('entityEffectEnd', (entity, effect) => { - if (entity !== bot.entity) return - healthbar.effectEnded(effect) - }) - - const onGameModeChange = () => { - const gamemode = getGamemodeNumber(bot) - healthbar.gameModeChanged(gamemode, bot.game.hardcore) - foodbar.gameModeChanged(gamemode) - // breathbar.gameModeChanged(gamemode) - const creativeLike = gamemode === 1 || gamemode === 3 - this.shadowRoot.querySelector('#xp-bar-bg').style.display = creativeLike ? 'none' : 'block' - } - bot.on('game', onGameModeChange) - onGameModeChange() - - const onHealthUpdate = () => { - healthbar.updateHealth(bot.health, true) - foodbar.updateHunger(bot.food, true) - } - bot.on('health', onHealthUpdate) - onHealthUpdate() - - const onXpUpdate = () => { - // @ts-expect-error - this.shadowRoot.querySelector('#xp-bar-bg').firstElementChild.style.width = `${182 * bot.experience.progress}px` - xpLabel.innerHTML = String(bot.experience.level) - xpLabel.style.display = bot.experience.level > 0 ? 'block' : 'none' - } - bot.on('experience', onXpUpdate) - onXpUpdate() - - // bot.on('breath', () => { - // breathbar.updateOxygen(bot.oxygenLevel) - // }) - - // TODO - // breathbar.updateOxygen(bot.oxygenLevel ?? 20) - } - - /** @param {boolean} bl */ - showMobileControls (bl) { - this.shadowRoot.querySelector('#mobile-top').style.display = bl ? 'flex' : 'none' - } - - render () { - return html` - -
-
{ - window.dispatchEvent(new MouseEvent('mousedown', { button: 1 })) - }}>S
-
{ - const select = await showOptionsModal('', f3Keybinds.filter(f3Keybind => f3Keybind.mobileTitle).map(f3Keybind => f3Keybind.mobileTitle)) - if (!select) return - const f3Keybind = f3Keybinds.find(f3Keybind => f3Keybind.mobileTitle === select) - f3Keybind.action() - }} @pointerdown=${(e) => { - this.shadowRoot.getElementById('debug-overlay').showOverlay = !this.shadowRoot.getElementById('debug-overlay').showOverlay - }}>F3
-
{ - e.stopPropagation() - if (activeModalStack.at(-1)?.reactType === 'chat') { - hideCurrentModal() - } else { - showModal({ reactType: 'chat' }) - } - }}>
-
{ - e.stopPropagation() - showModal(document.getElementById('pause-screen')) - }}>
-
- - - - -
- - - -
-
- -
- - ` - } -} - -window.customElements.define('pmui-hud', Hud) diff --git a/src/menus/keybinds_screen.js b/src/menus/keybinds_screen.js deleted file mode 100644 index 739199d9..00000000 --- a/src/menus/keybinds_screen.js +++ /dev/null @@ -1,173 +0,0 @@ -const { LitElement, html, css } = require('lit') -const { hideCurrentModal } = require('../globalState') -const { commonCss } = require('./components/common') - -class KeyBindsScreen extends LitElement { - static get styles () { - return css` - ${commonCss} - .title { - top: 4px; - } - - main { - display: flex; - flex-direction: column; - position: absolute; - top: 30px; - left: 50%; - transform: translate(-50%); - width: 100%; - height: calc(100% - 64px); - place-items: center; - background: rgba(0, 0, 0, 0.5); - box-shadow: inset 0 3px 6px rgba(0, 0, 0, 0.7), inset 0 -3px 6px rgba(0, 0, 0, 0.7); - } - - .keymap-list { - width: 288px; - display: flex; - flex-direction: column; - padding: 4px 0; - overflow-y: auto; - } - - .keymap-list::-webkit-scrollbar { - width: 6px; - } - - .keymap-list::-webkit-scrollbar-track { - background: #000; - } - - .keymap-list::-webkit-scrollbar-thumb { - background: #ccc; - box-shadow: inset -1px -1px 0 #4f4f4f; - } - - .keymap-entry { - display: flex; - flex-direction: row; - width: 100%; - height: 20px; - place-content: center; - place-items: center; - justify-content: space-between; - } - - span { - color: white; - text-shadow: 1px 1px 0 rgb(63, 63, 63); - font-size: 10px; - } - - .keymap-entry-btns { - display: flex; - flex-direction: row; - gap: 4px; - } - - .bottom-btns { - display: flex; - flex-direction: row; - width: 310px; - height: 20px; - justify-content: space-between; - position: absolute; - bottom: 9px; - left: 50%; - transform: translate(-50%); - } - - ` - } - - static get properties () { - return { - keymaps: { type: Object }, - selected: { type: Number } - } - } - - constructor () { - super() - this.selected = -1 - this.keymaps = [ - { defaultKey: 'KeyW', key: 'KeyW', name: 'Walk Forwards' }, - { defaultKey: 'KeyS', key: 'KeyS', name: 'Walk Backwards' }, - { defaultKey: 'KeyA', key: 'KeyA', name: 'Strafe Left' }, - { defaultKey: 'KeyD', key: 'KeyD', name: 'Strafe Right' }, - { defaultKey: 'Space', key: 'Space', name: 'Jump' }, - { defaultKey: 'ShiftLeft', key: 'ShiftLeft', name: 'Sneak' }, - { defaultKey: 'ControlLeft', key: 'ControlLeft', name: 'Sprint' }, - { defaultKey: 'KeyT', key: 'KeyT', name: 'Open Chat' }, - { defaultKey: 'Slash', key: 'Slash', name: 'Open Command' }, - // { defaultKey: '0', key: '0', name: 'Attack/Destroy' }, - // { defaultKey: '1', key: '1', name: 'Place Block' }, - { defaultKey: 'KeyQ', key: 'KeyQ', name: 'Drop Item' }, - // { defaultKey: 'Digit1', key: 'Digit1', name: 'Hotbar Slot 1' }, - // { defaultKey: 'Digit2', key: 'Digit2', name: 'Hotbar Slot 2' }, - // { defaultKey: 'Digit3', key: 'Digit3', name: 'Hotbar Slot 3' }, - // { defaultKey: 'Digit4', key: 'Digit4', name: 'Hotbar Slot 4' }, - // { defaultKey: 'Digit5', key: 'Digit5', name: 'Hotbar Slot 5' }, - // { defaultKey: 'Digit6', key: 'Digit6', name: 'Hotbar Slot 6' }, - // { defaultKey: 'Digit7', key: 'Digit7', name: 'Hotbar Slot 7' }, - // { defaultKey: 'Digit8', key: 'Digit8', name: 'Hotbar Slot 8' }, - // { defaultKey: 'Digit9', key: 'Digit9', name: 'Hotbar Slot 9' }, - { defaultKey: 'KeyE', key: 'KeyE', name: 'Open Inventory' }, - ] - - document.addEventListener('keydown', (e) => { - if (this.selected !== -1) { - this.keymaps[this.selected].key = e.code - this.selected = -1 - this.requestUpdate() - } - }) - } - - render () { - return html` -
- -

Key Binds

- -
-
- ${this.keymaps.map((m, i) => html` -
- ${m.name} - -
- { - e.target.setAttribute('pmui-label', `> ${m.key} <`) - this.selected = i - this.requestUpdate() - }}> - { - this.keymaps[i].key = this.keymaps[i].defaultKey - this.requestUpdate() - this.selected = -1 - }}> -
-
- `)} -
-
- -
- v.key !== v.defaultKey)} @pmui-click=${this.onResetAllPress}> - hideCurrentModal()}> -
- ` - } - - onResetAllPress () { - for (const keymap of this.keymaps) { - keymap.key = keymap.defaultKey - } - this.requestUpdate() - } -} - -window.customElements.define('pmui-keybindsscreen', KeyBindsScreen) diff --git a/src/menus/pause_screen.js b/src/menus/pause_screen.js deleted file mode 100644 index 0f47395c..00000000 --- a/src/menus/pause_screen.js +++ /dev/null @@ -1,152 +0,0 @@ -//@ts-check -const { join } = require('path') -const { LitElement, html, css } = require('lit') -const { subscribe } = require('valtio') -const { subscribeKey } = require('valtio/utils') -const { usedServerPathsV1 } = require('flying-squid/dist/lib/modules/world') -const { hideCurrentModal, showModal, miscUiState, openOptionsMenu } = require('../globalState') -const { fsState } = require('../loadSave') -const { openGithub, setLoadingScreenStatus } = require('../utils') -const { disconnect } = require('../flyingSquidUtils') -const { closeWan, openToWanAndCopyJoinLink, getJoinLink } = require('../localServerMultiplayer') -const { uniqueFileNameFromWorldName, copyFilesAsyncWithProgress, existsViaStats, mkdirRecursive } = require('../browserfs') -const { showOptionsModal } = require('../react/SelectOption') -const { openURL } = require('./components/common') - -class PauseScreen extends LitElement { - static get styles () { - return css` - .bg { - position: absolute; - top: 0; - left: 0; - background: rgba(0, 0, 0, 0.75); - width: 100%; - height: 100%; - } - - .title { - position: absolute; - top: 40px; - left: 50%; - transform: translate(-50%); - font-size: 10px; - color: white; - text-shadow: 1px 1px #222; - } - - main { - display: flex; - flex-direction: column; - gap: 4px 0; - position: absolute; - left: 50%; - width: 204px; - top: calc(48px); - transform: translate(-50%); - } - - .row { - display: flex; - flex-direction: row; - justify-content: space-between; - width: 100%; - } - ` - } - - constructor () { - super() - - subscribe(fsState, () => { - this.requestUpdate() - }) - subscribeKey(miscUiState, 'singleplayer', () => this.requestUpdate()) - subscribeKey(miscUiState, 'wanOpened', () => this.requestUpdate()) - } - - async openWorldActions () { - if (fsState.inMemorySave || !miscUiState.singleplayer) { - return showOptionsModal('World actions...', []) - } - const action = await showOptionsModal('World actions...', ['Save to browser memory']) - if (action === 'Save to browser memory') { - setLoadingScreenStatus('Saving world') - try { - //@ts-expect-error - const { worldFolder } = localServer.options - const saveRootPath = await uniqueFileNameFromWorldName(worldFolder.split('/').pop(), `/data/worlds`) - await mkdirRecursive(saveRootPath) - for (const copyPath of [...usedServerPathsV1, 'icon.png']) { - const srcPath = join(worldFolder, copyPath) - const savePath = join(saveRootPath, copyPath) - // eslint-disable-next-line no-await-in-loop - await copyFilesAsyncWithProgress(srcPath, savePath, false) - } - } catch (err) { - void showOptionsModal(`Error while saving the world: ${err.message}`, []) - } finally { - setLoadingScreenStatus(undefined) - } - } - } - - render () { - const joinButton = miscUiState.singleplayer - const isOpenedToWan = miscUiState.wanOpened - - return html` -
- - this.openWorldActions()}> - -

Game Menu

- -
- -
- openGithub()}> - openURL('https://discord.gg/4Ucm684Fq3')}> -
- openOptionsMenu('main')}> - - - ${joinButton ? html` -
- this.clickJoinLinkButton()}> - this.clickJoinLinkButton(true)}> -
- ` : ''} - { - disconnect() - }}> -
- ` - } - - async clickJoinLinkButton (qr = false) { - if (!qr && miscUiState.wanOpened) { - closeWan() - return - } - if (!miscUiState.wanOpened || !qr) { - await openToWanAndCopyJoinLink(() => { }, !qr) - } - if (qr) { - const joinLink = getJoinLink() - //@ts-expect-error - miscUiState.currentDisplayQr = joinLink - - } - } - - show () { - this.focus() - } - - onReturnPress () { - hideCurrentModal() - } -} - -window.customElements.define('pmui-pausescreen', PauseScreen) diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index d80a9ebe..84a09d45 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -139,6 +139,7 @@ export const guiOptionsScheme: { { guiScale: { max: 4, + min: 1, unit: '', delayApply: true, }, diff --git a/src/react/ArmorBar.css b/src/react/ArmorBar.css new file mode 100644 index 00000000..ae13935e --- /dev/null +++ b/src/react/ArmorBar.css @@ -0,0 +1,30 @@ +.armor_container { + position: fixed; + display: flex; + z-index: -1; + flex-direction: row; + left: calc(50% - 91px); + bottom: calc(var(--safe-area-inset-bottom) + 40px); + --offset: calc(-1 * 25px); + --bg-x: calc(-1 * 16px); + --bg-y: calc(-1 * 9px); + pointer-events: none; +} + +.armor { + width: 9px; + height: calc(9px); + background-image: var(--gui-icons); + background-size: 256px, 256px; + background-position: var(--bg-x) var(--bg-y), var(--bg-x) var(--bg-y); + margin-left: -1px; +} + + +.armor.full { + background-position: calc(var(--offset) - 9px) var(--bg-y), var(--bg-x) var(--bg-y); +} + +.armor.half { + background-position: var(--offset) var(--bg-y), var(--bg-x) var(--bg-y); +} diff --git a/src/react/ArmorBar.stories.tsx b/src/react/ArmorBar.stories.tsx new file mode 100644 index 00000000..038b3692 --- /dev/null +++ b/src/react/ArmorBar.stories.tsx @@ -0,0 +1,18 @@ +import type { Meta, StoryObj } from '@storybook/react' +import icons from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/icons.png' + +import ArmorBar from './ArmorBar' + + +const meta: Meta = { + component: ArmorBar, +} + +export default meta +type Story = StoryObj; + +export const Primary: Story = { + args: { + armorValue: 10 + } +} diff --git a/src/react/ArmorBar.tsx b/src/react/ArmorBar.tsx new file mode 100644 index 00000000..cc9c66cd --- /dev/null +++ b/src/react/ArmorBar.tsx @@ -0,0 +1,52 @@ +import { useRef, useState, useEffect, CSSProperties } from 'react' +import SharedHudVars from './SharedHudVars' +import './ArmorBar.css' + + +export type ArmorBarProps = { + armorValue: number, + style?: CSSProperties +} + +export default ( + { + armorValue, + style + }: ArmorBarProps) => { + const armorRef = useRef(null!) + + useEffect(() => { + const armorElement = armorRef.current + const armors = armorElement.children + + for (const armor of armors) { + armor.classList.remove('full') + armor.classList.remove('half') + } + + for (let i = 0; i < Math.ceil(armorValue / 2); i++) { + if (i >= armors.length) break + + if (armorValue % 2 !== 0 && Math.ceil(armorValue / 2) === i + 1) { + armors[i].classList.add('half') + } else { + armors[i].classList.add('full') + } + } + }, [armorValue]) + + return +
+ { + Array.from({ length: 10 }, () => 0) + .map( + (num, index) =>
+ ) + } +
+
+} + + diff --git a/src/react/BossBarOverlay.css b/src/react/BossBarOverlay.css new file mode 100644 index 00000000..fdbeb594 --- /dev/null +++ b/src/react/BossBarOverlay.css @@ -0,0 +1,34 @@ +.bossBars { + display: flex; + flex-direction: column; + gap: 5px; + position: absolute; + top: 9px; + left: 50%; + transform: translate(-50%); +} + +.bossbar-container { + display: flex; + flex-direction: column; + align-items: center; +} +.bossbar-title { + font-size: 7px; + color: #fff; +} +.bossbar { + background-image: url("textures/1.18.1/gui/bars.png"); + width: 182px; + height: 5px; + position: relative; +} +.bossbar .fill { + content: ""; + position: absolute; + top: 0; + left: 0; + height: 5px; + width: 0; + background-image: url("textures/1.18.1/gui/bars.png"); +} diff --git a/src/react/BossBarOverlay.stories.tsx b/src/react/BossBarOverlay.stories.tsx new file mode 100644 index 00000000..6e9c410d --- /dev/null +++ b/src/react/BossBarOverlay.stories.tsx @@ -0,0 +1,33 @@ +import type { Meta, StoryObj } from '@storybook/react' + +import { ChatMessage } from 'prismarine-chat' +import { BossBar } from 'mineflayer' +import BossBarOverlay from './BossBarOverlay' + +const meta: Meta = { + component: BossBarOverlay +} + +export default meta +type Story = StoryObj; + + +export const Primary: Story = { + args: { + bar: { + entityUUID: 'uuid', + title: { text: 'Boss', translate: 'test' } as ChatMessage & { text: string, translate: string }, + health: 100, + dividers: 2, + color: 'red', + shouldDarkenSky: false, + isDragonBar: false, + createFog: false, + shouldCreateFog: false, + _title: { text: 'Boss', translate: 'entity.minecraft.ender_dragon' }, + _color: 'red', + _dividers: 2, + _health: 100 + } + } +} diff --git a/src/react/BossBarOverlay.tsx b/src/react/BossBarOverlay.tsx new file mode 100644 index 00000000..b0083f0c --- /dev/null +++ b/src/react/BossBarOverlay.tsx @@ -0,0 +1,62 @@ +import type { BossBar as BossBarTypeRaw } from 'mineflayer' +import { useState, useEffect } from 'react' +import MessageFormattedString from './MessageFormattedString' +import './BossBarOverlay.css' + +const colors = ['pink', 'blue', 'red', 'green', 'yellow', 'purple', 'white'] +const divs = [0, 6, 10, 12, 20] +const translations = { + 'entity.minecraft.ender_dragon': 'Ender Dragon', + 'entity.minecraft.wither': 'Wither' +} + +export type BossBarType = BossBarTypeRaw & { + // todo why not use public properties? + title: { text: string, translate: string }, + _title: { text: string, translate: string }, + _color: string, + _dividers: number, + _health: number +} + +export default ({ bar }: {bar: BossBarType}) => { + const [title, setTitle] = useState('') + const [bossBarStyles, setBossBarStyles] = useState<{[key: string]: string | number}>({}) + const [fillStyles, setFillStyles] = useState<{[key: string]: string | number}>({}) + const [div1Styles, setDiv1Styles] = useState<{[key: string]: string | number}>({}) + const [div2Styles, setDiv2Styles] = useState<{[key: string]: string | number}>({}) + + useEffect(() => { + setTitle(bar._title.text ? bar.title.text : translations[bar.title.translate] || 'Unknown Entity') + setBossBarStyles(prevStyles => ({ + ...prevStyles, + backgroundPositionY: `-${colors.indexOf(bar._color) * 10}px` + })) + setFillStyles(prevStyles => ({ + ...prevStyles, + width: `${bar._health * 100}%`, + backgroundPositionY: `-${colors.indexOf(bar._color) * 10 + 5}px` + })) + setDiv1Styles(prevStyles => ({ + ...prevStyles, + backgroundPositionY: `-${divs.indexOf(bar._dividers) * 10 + 70}px` + })) + setDiv2Styles(prevStyles => ({ + ...prevStyles, + width: `${bar._health * 100}%`, + backgroundPositionY: `-${divs.indexOf(bar._dividers) * 10 + 75}px` + })) + }, [bar]) + + return ( +
+
+
+
+
+
+
+
+ ) +} + diff --git a/src/react/BossBarOverlayProvider.tsx b/src/react/BossBarOverlayProvider.tsx new file mode 100644 index 00000000..9bb7d948 --- /dev/null +++ b/src/react/BossBarOverlayProvider.tsx @@ -0,0 +1,32 @@ +import { useState, useEffect } from 'react' +import { BotEvents } from 'mineflayer' +import BossBar, { BossBarType } from './BossBarOverlay' +import './BossBarOverlay.css' + + +export default () => { + const [bossBars, setBossBars] = useState(new Map()) + + useEffect(() => { + // typescript error: no bossBarCreated in BotEvents. Why?? + bot.on('bossBarCreated' as keyof BotEvents, (bossBar) => { + setBossBars(prevBossBars => new Map(prevBossBars.set(bossBar.entityUUID, bossBar))) + }) + bot.on('bossBarUpdated', (bossBar) => { + setBossBars(prevBossBars => new Map(prevBossBars.set(bossBar.entityUUID, bossBar as BossBarType))) + }) + bot.on('bossBarDeleted', (bossBar) => { + const newBossBars = new Map(bossBars) + newBossBars.delete(bossBar.entityUUID) + setBossBars(newBossBars) + }) + }, []) + + return ( +
+ {[...bossBars.values()].map(bar => ( + + ))} +
+ ) +} diff --git a/src/react/BreathBar.css b/src/react/BreathBar.css new file mode 100644 index 00000000..a7e38c7c --- /dev/null +++ b/src/react/BreathBar.css @@ -0,0 +1,31 @@ +.breathbar { + position: fixed; + display: flex; + z-index: -1; + flex-direction: row-reverse; + left: calc(50% + 91px); + transform: translate(-100%); + bottom: 40px; + --offset: calc(-1 * 16px); + --bg-x: calc(-1 * 16px); + --bg-y: calc(-1 * 18px); + pointer-events: none; +} + +.breath { + width: 9px; + height: 9px; + margin-left: -1px; + background-position: 20px 20px; + background-image: var(--gui-icons); +} + +.breath.full { + background-size: 256px; + background-position: var(--offset) var(--bg-y); +} + +.breath.half { + background-size: 256px; + background-position: calc(var(--offset) - 9px) var(--bg-y); +} diff --git a/src/react/BreathBar.stories.tsx b/src/react/BreathBar.stories.tsx new file mode 100644 index 00000000..ea3ba026 --- /dev/null +++ b/src/react/BreathBar.stories.tsx @@ -0,0 +1,16 @@ +import type { Meta, StoryObj } from '@storybook/react' + +import BreathBar from './BreathBar' + +const meta: Meta = { + component: BreathBar +} + +export default meta +type Story = StoryObj; + +export const Primary: Story = { + args: { + oxygen: 20 + } +} diff --git a/src/react/BreathBar.tsx b/src/react/BreathBar.tsx new file mode 100644 index 00000000..f36fbb93 --- /dev/null +++ b/src/react/BreathBar.tsx @@ -0,0 +1,55 @@ +import { useRef, useEffect } from 'react' +import SharedHudVars from './SharedHudVars' +import './BreathBar.css' + +export type BreathBarProps = { + oxygen: number, +} + +export default ( + { + oxygen, + }: BreathBarProps) => { + const breathRef = useRef(null) + + useEffect(() => { + const breathbar = breathRef.current + if (breathbar && oxygen < 20) { + breathbar.style.display = 'flex' + breathbar.classList.toggle('low', oxygen <= 5) + + const breaths = breathbar.children + + for (const breath of breaths) { + breath.classList.remove('full') + breath.classList.remove('half') + } + + for (let i = 0; i < Math.ceil(oxygen / 2); i++) { + if (i >= breaths.length) break + + if (oxygen % 2 !== 0 && Math.ceil(oxygen / 2) === i + 1) { + breaths[i].classList.add('half') + } else { + breaths[i].classList.add('full') + } + } + } else if (breathbar && oxygen >= 20) { + breathbar.style.display = 'none' + } + }, [oxygen]) + + return +
+ { + Array.from({ length: 10 }, () => 0) + .map( + (num, index) =>
+ ) + } +
+
+} diff --git a/src/react/Crosshair.css b/src/react/Crosshair.css new file mode 100644 index 00000000..94312669 --- /dev/null +++ b/src/react/Crosshair.css @@ -0,0 +1,11 @@ +.crosshair { + z-index: -1; + width: 16px; + height: 16px; + background: var(--gui-icons); + background-size: calc(256px * var(--crosshair-scale)); + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } diff --git a/src/react/Crosshair.tsx b/src/react/Crosshair.tsx new file mode 100644 index 00000000..877b8df4 --- /dev/null +++ b/src/react/Crosshair.tsx @@ -0,0 +1,8 @@ +import './Crosshair.css' +import SharedHudVars from './SharedHudVars' + +export default () => { + return +
+ +} diff --git a/src/react/DebugOverlay.module.css b/src/react/DebugOverlay.module.css new file mode 100644 index 00000000..9ea30ebf --- /dev/null +++ b/src/react/DebugOverlay.module.css @@ -0,0 +1,44 @@ + +.debug-left-side, +.debug-right-side { + padding-left: calc(env(safe-area-inset-left) / 2); + padding-right: calc(env(safe-area-inset-right) / 2); + position: absolute; + display: flex; + flex-direction: column; + z-index: -1; + pointer-events: none; +} + +.debug-left-side { + top: 1px; + left: 1px; +} + +.debug-right-side { + top: 5px; + right: 1px; + /* limit renderer long text width */ + width: 50%; +} + +.debug-left-side p, .debug-right-side p { + display: block; + color: white; + font-size: 10px; + width: fit-content; + line-height: 9px; + margin: 0; + padding: 0; + padding-bottom: 1px; + background: rgba(110, 110, 110, 0.5); +} + +.debug-right-side p { + margin-left: auto; +} + +.empty { + display: block; + height: 9px; +} diff --git a/src/react/DebugOverlay.tsx b/src/react/DebugOverlay.tsx new file mode 100644 index 00000000..4b3c19b1 --- /dev/null +++ b/src/react/DebugOverlay.tsx @@ -0,0 +1,223 @@ +import { useEffect, useRef, useMemo, useState } from 'react' +import { getFixedFilesize } from '../downloadAndOpenFile' +import { options } from '../optionsStorage' +import worldInteractions from '../worldInteractions' +import styles from './DebugOverlay.module.css' + +export default () => { + const received = useRef({ ...defaultPacketsCount }) + const sent = useRef({ ...defaultPacketsCount }) + const customEntries = useRef({} as any) + const receivedTotal = useRef(0) + const packetsCountByNamePerSec = useRef({ + received: {} as { [key: string]: number }, + sent: {} as { [key: string]: number } + }) + const packetsCountByName = useRef({ + received: {} as { [key: string]: number }, + sent: {} as { [key: string]: number } + }) + const ignoredPackets = useRef(new Set([] as any[])) + const [packetsString, setPacketsString] = useState('') + const [showDebug, setShowDebug] = useState(false) + const [pos, setPos] = useState<{ x: number, y: number, z: number }>({ x: 0, y: 0, z: 0 }) + const [skyL, setSkyL] = useState(0) + const [blockL, setBlockL] = useState(0) + const [biomeId, setBiomeId] = useState(0) + const [day, setDay] = useState(0) + const [entitiesCount, setEntitiesCount] = useState(0) + const [dimension, setDimension] = useState('') + const [cursorBlock, setCursorBlock] = useState(null) + const [rendererDevice, setRendererDevice] = useState('') + const minecraftYaw = useRef(0) + const minecraftQuad = useRef(0) + + const quadsDescription = [ + 'north (towards negative Z)', + 'east (towards positive X)', + 'south (towards positive Z)', + 'west (towards negative X)' + ] + + const viewDegToMinecraft = (yaw) => yaw % 360 - 180 * (yaw < 0 ? -1 : 1) + + const handleF3 = (e) => { + if (e.code === 'F3') { + setShowDebug(prev => !prev) + e.preventDefault() + } + } + + const readPacket = (data, { name }, _buf, fullBuffer) => { + if (fullBuffer) { + const size = fullBuffer.byteLength + receivedTotal.current += size + received.current.size += size + } + received.current.count++ + managePackets('received', name, data) + } + + const managePackets = (type, name, data) => { + packetsCountByName.current[type][name] ??= 0 + packetsCountByName.current[type][name]++ + if (options.debugLogNotFrequentPackets && !ignoredPackets.current.has(name) && !hardcodedListOfDebugPacketsToIgnore[type].includes(name)) { + packetsCountByNamePerSec.current[type][name] ??= 0 + packetsCountByNamePerSec.current[type][name]++ + if (packetsCountByNamePerSec.current[type][name] > 5 || packetsCountByName.current[type][name] > 100) { // todo think of tracking the count within 10s + console.info(`[packet ${name} was ${type} too frequent] Ignoring...`) + ignoredPackets.current.add(name) + } else { + console.info(`[packet ${type}] ${name}`, /* ${JSON.stringify(data, null, 2)}` */ data) + } + } + } + + useMemo(() => { + document.addEventListener('keydown', handleF3) + const packetsUpdateInterval = setInterval(() => { + setPacketsString(prev => `↓ ${received.current.count} (${(received.current.size / 1024).toFixed(2)} KB/s, ${getFixedFilesize(receivedTotal.current)}) ↑ ${sent.current.count}`) + received.current = { ...defaultPacketsCount } + sent.current = { ...defaultPacketsCount } + packetsCountByNamePerSec.current.received = {} + packetsCountByNamePerSec.current.sent = {} + }, 1000) + + // @ts-expect-error + bot._client.on('packet', readPacket) + // @ts-expect-error + bot._client.on('packet_name' as any, (name, data) => readPacket(data, { name })) // custom client + bot._client.on('writePacket' as any, (name, data) => { + sent.current.count++ + managePackets('sent', name, data) + }) + bot.on('move', () => { + setPos(prev => { return { ...bot.entity.position }}) + setSkyL(prev => bot.world.getSkyLight(bot.entity.position)) + setBlockL(prev => bot.world.getBlockLight(bot.entity.position)) + setBiomeId(prev => bot.world.getBiome(bot.entity.position)) + setDimension(bot.game.dimension) + }) + bot.on('time', () => { + setDay(bot.time.day) + }) + bot.on('entitySpawn', () => { + setEntitiesCount(Object.values(bot.entities).length) + }) + bot.on('entityGone', () => { + setEntitiesCount(Object.values(bot.entities).length) + }) + bot.on('physicsTick', () => { + setCursorBlock(worldInteractions.cursorBlock) + }) + + try { + const gl = window.renderer.getContext() + setRendererDevice(gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info')!.UNMASKED_RENDERER_WEBGL)) + } catch (err) { + console.warn(err) + } + + return () => { + document.removeEventListener('keydown', handleF3) + clearInterval(packetsUpdateInterval) + } + }, []) + + useEffect(() => { + minecraftYaw.current = viewDegToMinecraft(bot.entity.yaw * -180 / Math.PI) + minecraftQuad.current = Math.floor(((minecraftYaw.current + 180) / 90 + 0.5) % 4) + }, [bot.entity.yaw]) + + if (!showDebug) return null + + return <> +
+

Prismarine Web Client ({bot.version})

+

E: {entitiesCount}

+

{dimension}

+
+

XYZ: {pos.x.toFixed(3)} / {pos.y.toFixed(3)} / {pos.z.toFixed(3)}

+

Chunk: {Math.floor(pos.x % 16)} ~ {Math.floor(pos.z % 16)} in {Math.floor(pos.x / 16)} ~ {Math.floor(pos.z / 16)}

+

Packets: {packetsString}

+

Facing (viewer): {bot.entity.yaw.toFixed(3)} {bot.entity.pitch.toFixed(3)}

+

Facing (minecraft): {quadsDescription[minecraftQuad.current]} ({minecraftYaw.current.toFixed(1)} {(bot.entity.pitch * -180 / Math.PI).toFixed(1)})

+

Light: {blockL} ({skyL} sky)

+ +

Biome: minecraft:{loadedData.biomesArray[biomeId]?.name ?? 'unknown biome'}

+

Day: {day}

+
+ {Object.entries(customEntries.current).map(([name, value]) =>

{name}: {value}

)} +
+ +
+

Renderer: {rendererDevice} powered by three.js r{THREE.REVISION}

+
+ {cursorBlock ? (<> +

{cursorBlock.name}

+ { + Object.entries(cursorBlock.getProperties()).map( + ([name, value], idx, arr) => { + return

+ {name}: { + typeof value === 'boolean' ? ( + {value} + ) : value + } +

+ } + ) + } + ) + : '' } + {cursorBlock ? ( +

Looking at: {cursorBlock.position.x} {cursorBlock.position.y} {cursorBlock.position.z}

+ ) : ''} +
+ +} + +const hardcodedListOfDebugPacketsToIgnore = { + received: [ + 'entity_velocity', + 'sound_effect', + 'rel_entity_move', + 'entity_head_rotation', + 'entity_metadata', + 'entity_move_look', + 'teams', + 'entity_teleport', + 'entity_look', + 'ping', + 'entity_update_attributes', + 'player_info', + 'update_time', + 'animation', + 'entity_equipment', + 'entity_destroy', + 'named_entity_spawn', + 'update_light', + 'set_slot', + 'block_break_animation', + 'map_chunk', + 'spawn_entity', + 'world_particles', + 'keep_alive', + 'chat', + 'playerlist_header', + 'scoreboard_objective', + 'scoreboard_score' + ], + sent: [ + 'pong', + 'position', + 'look', + 'keep_alive', + 'position_look' + ] +} + +const defaultPacketsCount = { + count: 0, + size: 0 +} diff --git a/src/react/FoodBar.css b/src/react/FoodBar.css new file mode 100644 index 00000000..bd31e818 --- /dev/null +++ b/src/react/FoodBar.css @@ -0,0 +1,68 @@ +.foodbar { + position: fixed; + display: flex; + z-index: -1; + flex-direction: row-reverse; + left: calc(50% + 91px); + transform: translate(-100%); + bottom: calc(var(--safe-area-inset-bottom) + 30px); + --kind: 0; + --lightened: 0; + --offset: calc(-1 * (52px + (9px * (4 * var(--kind) + var(--lightened) * 2)))); + --bg-x: calc(-1 * (16px + 9px * var(--lightened))); + --bg-y: calc(-1 * 27px); + pointer-events: none; +} + +.foodbar.poisoned { + --kind: 1; +} + +.foodbar.withered { + --kind: 2; +} + +.food { + width: 9px; + height: 9px; + background-size: 256px, 256px; + background-position: var(--bg-x) var(--bg-y), var(--bg-x) var(--bg-y); + background-image: var(--gui-icons); + margin-left: -1px; +} + +.food.full { + background-position: var(--offset) var(--bg-y), var(--bg-x) var(--bg-y); +} + +.food.half { + background-position: calc(var(--offset) - 9px) var(--bg-y), var(--bg-x) var(--bg-y); +} + +.foodbar.low .food { + animation: lowHungerAnim 0.2s steps(2, end) infinite; +} + +.foodbar.low .food:nth-of-type(2n) { + animation-direction: reverse; +} + +.foodbar.low .food:nth-of-type(3n) { + animation-duration: 0.1s; +} + +.foodbar.updated { + animation: updatedAnim 0.3s steps(2, end) 2; +} + +.creative { + display: none; +} + +@keyframes lowHungerAnim { + to { transform: translateY(1px); } +} + +@keyframes updatedAnim { + to { --lightened: 1; } +} diff --git a/src/react/FoodBar.tsx b/src/react/FoodBar.tsx new file mode 100644 index 00000000..c7680b68 --- /dev/null +++ b/src/react/FoodBar.tsx @@ -0,0 +1,76 @@ +import { useRef, useState, useEffect } from 'react' +import SharedHudVars from './SharedHudVars' +import './FoodBar.css' + + +export type FoodBarProps = { + gameMode: string, + food: number, + effectToAdd: number | null, + effectToRemove: number | null, + effectAdded: (htmlElement: HTMLDivElement | null, effect: number | null) => void, + effectEnded: (htmlElement: HTMLDivElement | null, effect: number | null) => void, +} + +export default ( + { + gameMode, + food, + effectToAdd, + effectToRemove, + effectAdded, + effectEnded + }: FoodBarProps) => { + const foodRef = useRef(null) + + useEffect(() => { + if (foodRef.current) { + foodRef.current.classList.toggle('creative', gameMode === 'creative') + } + }, [gameMode]) + + useEffect(() => { + const foodbar = foodRef.current + if (foodbar) { + foodbar.classList.toggle('low', food <= 5) + + const foods = foodbar.children + + for (const food of foods) { + food.classList.remove('full') + food.classList.remove('half') + } + + for (let i = 0; i < Math.ceil(food / 2); i++) { + if (i >= foods.length) break + + if (food % 2 !== 0 && Math.ceil(food / 2) === i + 1) { + foods[i].classList.add('half') + } else { + foods[i].classList.add('full') + } + } + } + }, [food]) + + useEffect(() => { + effectAdded(foodRef.current, effectToAdd) + }, [effectToAdd]) + + useEffect(() => { + effectEnded(foodRef.current, effectToRemove) + }, [effectToRemove]) + + return +
+ { + Array.from({ length: 10 }, () => 0) + .map( + (num, index) =>
+ ) + } +
+
+} diff --git a/src/react/HealthBar.css b/src/react/HealthBar.css new file mode 100644 index 00000000..bbf0f205 --- /dev/null +++ b/src/react/HealthBar.css @@ -0,0 +1,78 @@ +.health { + position: fixed; + display: flex; + z-index: -1; + flex-direction: row; + left: calc(50% - 91px); + bottom: calc(var(--safe-area-inset-bottom) + 30px); + --hardcore: 0; + --kind: 0; + --lightened: 0; + --offset: calc(-1 * (52px + (9px * (4 * var(--kind) + var(--lightened) * 2)) )); + --bg-x: calc(-1 * (16px + 9px * var(--lightened))); + --bg-y: calc(-1 * var(--hardcore) * 45px); + pointer-events: none; +} + +.health.creative { + display: none; +} + +.health.hardcore { + --hardcore: 1; +} + +.health.poisoned { + --kind: 1; +} + +.health.withered { + --kind: 2; +} + +.health.absorption { + --kind: 3; +} + +.heart { + width: 9px; + height: calc(9px - var(--hardcore) * 0.2px); + background-image: var(--gui-icons); + background-size: 256px, 256px; + background-position: var(--bg-x) var(--bg-y), var(--bg-x) var(--bg-y); + margin-left: -1px; +} + +.heart.full { + background-position: var(--offset) var(--bg-y), var(--bg-x) var(--bg-y); +} + +.heart.half { + background-position: calc(var(--offset) - 9px) var(--bg-y), var(--bg-x) var(--bg-y); +} + +.health.low .heart { + animation: lowHealthAnim 0.2s steps(2, end) infinite; +} + +.health.low .heart:nth-of-type(2n) { + animation-direction: reverse; +} + +.health.low .heart:nth-of-type(3n) { + animation-duration: 0.1s; +} + +.health.damaged { + animation: damagedAnim 0.3s steps(2, end) 2; +} + +@keyframes lowHealthAnim { + to { + transform: translateY(1px); + } +} + +@keyframes damagedAnim { + to { --lightened: 1; } +} diff --git a/src/react/HealthBar.stories.tsx b/src/react/HealthBar.stories.tsx new file mode 100644 index 00000000..bcec2e0a --- /dev/null +++ b/src/react/HealthBar.stories.tsx @@ -0,0 +1,45 @@ +import type { Meta, StoryObj } from '@storybook/react' + +import HealthBar from './HealthBar' + +const meta: Meta = { + component: HealthBar +} + +export default meta +type Story = StoryObj; + +const getEffectClass = (effect) => { + switch (effect.id) { + case 19: + return 'poisoned' + case 20: + return 'withered' + case 22: + return 'absorption' + default: + return '' + } +} + +export const Primary: Story = { + args: { + gameMode: 'survival', + isHardcore: true, + damaged: false, + healthValue: 10, + effectToAdd: 19, + effectToRemove: 20, + effectAdded (htmlElement, effect) { + const effectClass = getEffectClass(effect) + if (!effectClass) return + if (htmlElement) htmlElement.classList.add(effectClass) + }, + effectEnded (htmlElement, effect) { + const effectClass = getEffectClass(effect) + if (!effectClass) return + if (htmlElement) htmlElement.classList.remove(effectClass) + } + + } +} diff --git a/src/react/HealthBar.tsx b/src/react/HealthBar.tsx new file mode 100644 index 00000000..46ed8a34 --- /dev/null +++ b/src/react/HealthBar.tsx @@ -0,0 +1,112 @@ +import { useRef, useState, useEffect } from 'react' +import SharedHudVars from './SharedHudVars' +import './HealthBar.css' + + +export type HealthBarProps = { + gameMode: string, + isHardcore: boolean, + damaged: boolean, + healthValue: number, + effectToAdd: number | null, + effectToRemove: number | null, + effectAdded: (htmlElement: HTMLDivElement | null, effect: number | null) => void, + effectEnded: (htmlElement: HTMLDivElement | null, effect: number | null) => void, +} + +export default ( + { + gameMode, + isHardcore, + damaged, + healthValue, + effectToAdd, + effectToRemove, + effectAdded, + effectEnded + }: HealthBarProps) => { + const healthRef = useRef(null) + const [className, setClassName] = useState('') + + useEffect(() => { + if (healthRef.current) { + healthRef.current.classList.toggle('creative', gameMode === 'creative' || gameMode === 'spectator') + // if (gameMode === 'creative' || gameMode === 'spectator') { + // healthRef.current.classList.add('creative') + // } else { + // healthRef.current.classList.remove('creative') + // } + } + }, [gameMode]) + + useEffect(() => { + if (healthRef.current) { + if (isHardcore) { + healthRef.current.classList.add('hardcore') + } else { + healthRef.current.classList.remove('hardcore') + } + } + }, [isHardcore]) + + useEffect(() => { + if (healthRef.current) { + if (damaged) { + healthRef.current.classList.add('damaged') + console.log('damage') + } else { + healthRef.current.classList.remove('damaged') + } + } + }, [damaged]) + + useEffect(() => { + if (healthRef.current) { + if (healthValue <= 4) { + healthRef.current.classList.add('low') + } else { + healthRef.current.classList.remove('low') + } + + const healthElement = healthRef.current + const hearts = healthElement.children + + for (const heart of hearts) { + heart.classList.remove('full') + heart.classList.remove('half') + } + + for (let i = 0; i < Math.ceil(healthValue / 2); i++) { + if (i >= hearts.length) break + + if (healthValue % 2 !== 0 && Math.ceil(healthValue / 2) === i + 1) { + hearts[i].classList.add('half') + } else { + hearts[i].classList.add('full') + } + } + } + }, [healthValue]) + + useEffect(() => { + effectAdded(healthRef.current, effectToAdd) + }, [effectToAdd]) + + useEffect(() => { + effectEnded(healthRef.current, effectToRemove) + }, [effectToRemove]) + + return +
+ { + Array.from({ length: 10 }, () => 0) + .map( + (num, index) =>
+ ) + } +
+
} + + diff --git a/src/react/HotbarRenderApp.tsx b/src/react/HotbarRenderApp.tsx new file mode 100644 index 00000000..2e7ee1d1 --- /dev/null +++ b/src/react/HotbarRenderApp.tsx @@ -0,0 +1,219 @@ +import { useEffect, useRef, useState } from 'react' +import { Transition } from 'react-transition-group' +import { createPortal } from 'react-dom' +import { subscribe, useSnapshot } from 'valtio' +import { getItemNameRaw, openItemsCanvas, openPlayerInventory, upInventoryItems } from '../inventoryWindows' +import { activeModalStack, isGameActive, miscUiState } from '../globalState' +import { currentScaling } from '../scaleInterface' +import { watchUnloadForCleanup } from '../gameUnload' +import MessageFormattedString from './MessageFormattedString' +import SharedHudVars from './SharedHudVars' + + +const ItemName = ({ itemKey }: { itemKey: string }) => { + const nodeRef = useRef(null) + const [show, setShow] = useState(false) + const [itemName, setItemName] = useState | string>('') + + const duration = 300 + + const defaultStyle: React.CSSProperties = { + position: 'fixed', + bottom: `calc(var(--safe-area-inset-bottom) + ${bot ? bot.game.gameMode === 'creative' ? '35px' : '50px' : '50px'})`, + left: 0, + right: 0, + fontSize: 10, + textAlign: 'center', + transition: `opacity ${duration}ms ease-in-out`, + opacity: 0, + pointerEvents: 'none', + } + + const transitionStyles = { + entering: { opacity: 1 }, + entered: { opacity: 1 }, + exiting: { opacity: 0 }, + exited: { opacity: 0 }, + } + + useEffect(() => { + const itemData = itemKey.split('_split_') + if (!itemKey) { + setItemName('') + } else if (itemData[3]) { + const customDisplay = getItemNameRaw({ + nbt: JSON.parse(itemData[3]) + }) + if (customDisplay) { + setItemName(customDisplay) + } else { + setItemName(itemData[0]) + } + } else { + setItemName(itemData[0]) + } + setShow(true) + const id = setTimeout(() => { + setShow(false) + }, 1500) + return () => { + setShow(false) + clearTimeout(id) + } + }, [itemKey]) + + return + {state => ( + +
+ +
+
+ )} +
+} + +export default () => { + const container = useRef(null!) + const [itemKey, setItemKey] = useState('') + const hasModals = useSnapshot(activeModalStack).length + + useEffect(() => { + const controller = new AbortController() + + const inv = openItemsCanvas('HotbarWin', { + clickWindow (slot, mouseButton, mode) { + if (mouseButton === 1) { + console.log('right click') + return + } + const hotbarSlot = slot - bot.inventory.hotbarStart + if (hotbarSlot < 0 || hotbarSlot > 9) return + bot.setQuickBarSlot(hotbarSlot) + }, + } as any) + const { canvasManager } = inv + inv.inventory.supportsOffhand = bot.supportFeature('doesntHaveOffHandSlot') + inv.pwindow.disablePicking = true + + canvasManager.children[0].disableHighlight = true + canvasManager.minimizedWindow = true + canvasManager.minimizedWindow = true + + function setSize () { + canvasManager.setScale(currentScaling.scale) + + canvasManager.windowHeight = 25 * canvasManager.scale + canvasManager.windowWidth = (210 - (inv.inventory.supportsOffhand ? 0 : 25) + (miscUiState.currentTouch ? 28 : 0)) * canvasManager.scale + } + setSize() + watchUnloadForCleanup(subscribe(currentScaling, setSize)) + container.current.appendChild(inv.canvas) + const upHotbarItems = () => { + if (!viewer.world.downloadedTextureImage && !viewer.world.customTexturesDataUrl) return + upInventoryItems(true, inv) + } + + canvasManager.canvas.onpointerdown = (e) => { + if (!isGameActive(true)) return + const pos = inv.canvasManager.getMousePos(inv.canvas, e) + if (pos.x > canvasManager.canvas.width - 30) { + openPlayerInventory() + } + } + + upHotbarItems() + bot.inventory.on('updateSlot', upHotbarItems) + viewer.world.renderUpdateEmitter.on('textureDownloaded', upHotbarItems) + viewer.world.renderUpdateEmitter.on('blockStatesDownloaded', upHotbarItems) + + const setSelectedSlot = (index: number) => { + if (index === bot.quickBarSlot) return + bot.setQuickBarSlot(index) + if (!bot.inventory.slots?.[bot.quickBarSlot + 36]) setItemKey('') + } + const heldItemChanged = () => { + inv.inventory.activeHotbarSlot = bot.quickBarSlot + + if (!bot.inventory.slots?.[bot.quickBarSlot + 36]) return + const item = bot.inventory.slots[bot.quickBarSlot + 36]! + const itemNbt = item.nbt ? JSON.stringify(item.nbt) : '' + setItemKey(`${item.displayName}_split_${item.type}_split_${item.metadata}_split_${itemNbt}`) + } + heldItemChanged() + bot.on('heldItemChanged' as any, heldItemChanged) + + document.addEventListener('wheel', (e) => { + if (!isGameActive(true)) return + e.preventDefault() + const newSlot = ((bot.quickBarSlot + Math.sign(e.deltaY)) % 9 + 9) % 9 + setSelectedSlot(newSlot) + }, { + passive: false, + signal: controller.signal + }) + + document.addEventListener('keydown', (e) => { + if (!isGameActive(true)) return + const numPressed = +((/Digit(\d)/.exec(e.code))?.[1] ?? -1) + if (numPressed < 1 || numPressed > 9) return + setSelectedSlot(numPressed - 1) + }, { + passive: false, + signal: controller.signal + }) + + let touchStart = 0 + document.addEventListener('touchstart', (e) => { + if ((e.target as HTMLElement).closest('.hotbar')) { + touchStart = Date.now() + } else { + touchStart = 0 + } + }) + document.addEventListener('touchend', (e) => { + if (touchStart && (e.target as HTMLElement).closest('.hotbar') && Date.now() - touchStart > 700) { + // drop item + bot._client.write('block_dig', { + 'status': 4, + 'location': { + 'x': 0, + 'z': 0, + 'y': 0 + }, + 'face': 0, + sequence: 0 + }) + } + touchStart = 0 + }) + + return () => { + inv.destroy() + controller.abort() + viewer.world.renderUpdateEmitter.off('textureDownloaded', upHotbarItems) + viewer.world.renderUpdateEmitter.off('blockStatesDownloaded', upHotbarItems) + } + }, []) + + return + + + +
+ + + +} + +const Portal = ({ children, to = document.body }) => { + return createPortal(children, to) +} diff --git a/src/react/HudBarsProvider.tsx b/src/react/HudBarsProvider.tsx new file mode 100644 index 00000000..0b0cec24 --- /dev/null +++ b/src/react/HudBarsProvider.tsx @@ -0,0 +1,136 @@ +import { useRef, useState, useMemo } from 'react' +import { GameMode } from 'mineflayer' +import { armor } from './armorValues' +import HealthBar from './HealthBar' +import FoodBar from './FoodBar' +import ArmorBar from './ArmorBar' +import BreathBar from './BreathBar' +import './HealthBar.css' + +export default () => { + const [damaged, setDamaged] = useState(false) + const [healthValue, setHealthValue] = useState(bot.health) + const [food, setFood] = useState(bot.food) + const [oxygen, setOxygen] = useState(bot.oxygenLevel) + const [armorValue, setArmorValue] = useState(0) + const [gameMode, setGameMode] = useState(bot.game.gameMode) + const [isHardcore, setIsHardcore] = useState(false) + const [effectToAdd, setEffectToAdd] = useState(null) + const [effectToRemove, setEffectToRemove] = useState(null) + const hurtTimeout = useRef | null>(null) + + const getEffectClass = (effect) => { + switch (effect) { + case 19: + return 'poisoned' + case 20: + return 'withered' + case 22: + return 'absorption' + default: + return '' + } + } + + const effectAdded = (htmlElement, effect) => { + const effectClass = getEffectClass(effect) + if (effectClass) { + htmlElement.classList.add(effectClass) + } + setEffectToAdd(null) + } + + const effectEnded = (htmlElement, effect) => { + const effectClass = getEffectClass(effect) + if (effectClass) { + htmlElement.classList.remove(effectClass) + } + setEffectToRemove(null) + } + + const onDamage = () => { + setDamaged(prev => true) + if (hurtTimeout.current) clearTimeout(hurtTimeout.current) + hurtTimeout.current = setTimeout(() => { + setDamaged(prev => false) + }, 1000) + } + + const updateHealth = (hValue) => { + setHealthValue(prev => hValue) + } + + useMemo(() => { + bot.on('entityHurt', (entity) => { + if (entity !== bot.entity) return + onDamage() + }) + + bot.on('game', () => { + setGameMode(prev => bot.game.gameMode) + setIsHardcore(prev => bot.game.hardcore) + }) + + bot.on('entityEffect', (entity, effect) => { + if (entity !== bot.entity) return + setEffectToAdd(prev => effect.id) + }) + + bot.on('entityEffectEnd', (entity, effect) => { + if (entity !== bot.entity) return + setEffectToRemove(prev => effect.id) + }) + + bot.on('health', () => { + if (bot.health < healthValue) onDamage() + updateHealth(bot.health) + setFood(prev => bot.food) + }) + + bot.on('breath', () => { + setOxygen(prev => bot.oxygenLevel) + }) + + const upArmour = () => { + const armorSlots = new Set([5, 6, 7, 8]) + let points = 0 + for (const slotIndex of armorSlots) { + const item = bot.inventory.slots[slotIndex] ?? null + if (!item) continue + const armorName = item.name.split('_') + points += armor[armorName[0]][armorName[1]] + } + setArmorValue(points) + } + bot.inventory.on('updateSlot', upArmour) + upArmour() + }, []) + + return
+ + + + +
+} diff --git a/src/react/IndicatorEffects.css b/src/react/IndicatorEffects.css index 2902bfee..7ddad807 100644 --- a/src/react/IndicatorEffects.css +++ b/src/react/IndicatorEffects.css @@ -2,7 +2,7 @@ position: fixed; top: 6%; left: 0px; - z-index: -1; + z-index: -2; pointer-events: none; } diff --git a/src/react/KeybindingsScreen.tsx b/src/react/KeybindingsScreen.tsx new file mode 100644 index 00000000..19038a71 --- /dev/null +++ b/src/react/KeybindingsScreen.tsx @@ -0,0 +1,12 @@ +import Screen from './Screen' + +export default ({ + onBack, + onReset, + onSet, + keybindings +}) => { + return +

Here you can change the keybindings for the game.

+
+} diff --git a/src/react/KeybindingsScreenApp.tsx b/src/react/KeybindingsScreenApp.tsx new file mode 100644 index 00000000..e0630eab --- /dev/null +++ b/src/react/KeybindingsScreenApp.tsx @@ -0,0 +1,51 @@ +import { useState } from 'react' +import { contro } from '../controls' +import Button from './Button' +import Screen from './Screen' + +export default () => { + const { commands } = contro.inputSchema + const [awaitingInputType, setAwaitingInputType] = useState(null as null | 'keyboard' | 'gamepad') + + // const + + return + {awaitingInputType && } +

Here you can change the keybindings for the game.

+
+ {Object.entries(commands).map(([group, actions]) => { + return
+

{group}

+ {Object.entries(actions).map(([action, { keys, gamepadButtons }]) => { + return
+ + +
+ })} +
+ })} +
+
+} + +const AwaitingInputOverlay = ({ isGamepad }) => { + return
+ {isGamepad ? 'Press the button on the gamepad' : 'Press the key'}. + Press ESC to cancel. +
+} diff --git a/src/react/MessageFormatted.css b/src/react/MessageFormatted.css new file mode 100644 index 00000000..7e5be00a --- /dev/null +++ b/src/react/MessageFormatted.css @@ -0,0 +1,5 @@ +/* base global styles */ + +.formatted-message { + text-shadow: 1px 1px 0px #3f3f3f;; +} diff --git a/src/react/MessageFormatted.tsx b/src/react/MessageFormatted.tsx index cc1a089c..95ab064c 100644 --- a/src/react/MessageFormatted.tsx +++ b/src/react/MessageFormatted.tsx @@ -2,9 +2,10 @@ import { ComponentProps } from 'react' import { render } from '@xmcl/text-component' import { noCase } from 'change-case' import mojangson from 'mojangson' +import { openURL } from 'prismarine-viewer/viewer/lib/simpleUtils' import { MessageFormatPart } from '../botUtils' -import { openURL } from '../menus/components/common' import { chatInputValueGlobal } from './ChatContainer' +import './MessageFormatted.css' const hoverItemToText = (hoverEvent: MessageFormatPart['hoverEvent']) => { try { @@ -27,7 +28,7 @@ const hoverItemToText = (hoverEvent: MessageFormatPart['hoverEvent']) => { } } catch (err) { // todo report critical error - console.error('Failed to parse message hover', err) + reportError?.('Failed to parse message hover' + err.message) return undefined } } @@ -84,7 +85,7 @@ export const MessagePart = ({ part, ...props }: { part: MessageFormatPart } & Co export default ({ parts }: { parts: readonly MessageFormatPart[] }) => { return ( - + {parts.map((part, i) => )} ) diff --git a/src/react/MobileTopButtons.module.css b/src/react/MobileTopButtons.module.css new file mode 100644 index 00000000..1b142d3f --- /dev/null +++ b/src/react/MobileTopButtons.module.css @@ -0,0 +1,37 @@ +.mobile-top-btns { + display: none; + flex-direction: row; + position: fixed; + top: 0; + left: 50%; + transform: translate(-50%); + gap: 0 5px; + z-index: -1; +} + +.pause-btn, +.chat-btn { + --scale: 1.3; + border: none; + outline: 0.5px solid white; + width: calc(14px * var(--scale)); + height: calc(14px * var(--scale)); + background-image: url('extra-textures/gui.png'); + background-size: calc(256px * var(--scale)); + background-position-x: calc(var(--scale) * -202px); + background-position-y: calc(var(--scale) * -66px); +} + +.chat-btn { + background-position-y: calc(var(--scale) * -84px); +} +.debug-btn { + background: #9c8c86; + font-size: 8px; + /* todo make other buttons centered */ + /* margin-right: 5px; */ + color: white; + font-family: minecraft, mojangles, monospace; + padding: 4px 6px; + outline: 0.5px solid white; +} diff --git a/src/react/MobileTopButtons.tsx b/src/react/MobileTopButtons.tsx new file mode 100644 index 00000000..c4acb028 --- /dev/null +++ b/src/react/MobileTopButtons.tsx @@ -0,0 +1,57 @@ +import { useEffect, useRef } from 'react' +import { f3Keybinds } from '../controls' +import { watchValue } from '../optionsStorage' +import { showModal, miscUiState, activeModalStack, hideCurrentModal } from '../globalState' +import { showOptionsModal } from './SelectOption' +import useLongPress from './useLongPress' +import styles from './MobileTopButtons.module.css' + + +export default () => { + const elRef = useRef(null) + + const showMobileControls = (bl) => { + if (elRef.current) elRef.current.style.display = bl ? 'flex' : 'none' + } + + useEffect(() => { + watchValue(miscUiState, o => { + showMobileControls(o.currentTouch) + }) + }, []) + + const onLongPress = async () => { + const select = await showOptionsModal('', f3Keybinds.filter(f3Keybind => f3Keybind.mobileTitle).map(f3Keybind => f3Keybind.mobileTitle)) + if (!select) return + const f3Keybind = f3Keybinds.find(f3Keybind => f3Keybind.mobileTitle === select) + if (f3Keybind) f3Keybind.action() + } + + const defaultOptions = { + shouldPreventDefault: true, + delay: 500, + } + const longPressEvent = useLongPress(onLongPress, () => {}, defaultOptions) + + // ios note: just don't use +
+ + +
+ + {singleplayer ? ( +
+ + {(navigator.share as typeof navigator.share | undefined) ? ( +
+ ) : null} + +
+ +} diff --git a/src/react/PlayerListOverlay.css b/src/react/PlayerListOverlay.css new file mode 100644 index 00000000..b36801c0 --- /dev/null +++ b/src/react/PlayerListOverlay.css @@ -0,0 +1,80 @@ + +.playerlist-container { + position: absolute; + background-color: rgba(0, 0, 0, 0.3); + top: 9px; + left: 50%; + transform: translate(-50%); + width: fit-content; + padding: 1px; + display: flex; + flex-direction: column; + gap: 1px 0; + place-items: center; + z-index: 30; +} + +.playerlist-header, .playerlist-footer { + font-size: 0.5rem +} + +.playerlist-title { + color: white; + text-shadow: 1px 1px 0px #3f3f3f; + font-size: 10px; + margin: 0; + padding: 0; +} + +.playerlist-entry { + overflow: hidden; + color: white; + font-size: 10px; + margin: 0px; + line-height: calc(100% - 1px); + text-shadow: 1px 1px 0px #3f3f3f; + font-family: mojangles, minecraft, monospace; + background: rgba(255, 255, 255, 0.1); + width: 100%; +} + +.active-player { + color: rgb(42, 204, 237); + text-shadow: 1px 1px 0px rgb(4, 44, 67); +} + +.playerlist-ping { + text-align: right; + float: right; + padding-left: 10px; +} + +.playerlist-ping-value { + color: rgb(114, 255, 114); + text-shadow: 1px 1px 0px rgb(28, 105, 28); + float: left; + margin: 0; + margin-right: 1px; +} + +.playerlist-ping-label { + text-shadow: 1px 1px 0px #3f3f3f; + color: white; + float: right; + margin: 0px; +} + +.player-lists { + display: flex; + flex-direction: row; + place-items: center; + place-content: center; + gap: 0 4px; +} + +.player-list { + display: flex; + flex-direction: column; + gap: 1px 0; + min-width: 80px; +} diff --git a/src/react/PlayerListOverlay.stories.tsx b/src/react/PlayerListOverlay.stories.tsx new file mode 100644 index 00000000..cb2d972f --- /dev/null +++ b/src/react/PlayerListOverlay.stories.tsx @@ -0,0 +1,20 @@ +import type { Meta, StoryObj } from '@storybook/react' + +import PlayerListOverlay from './PlayerListOverlay' + +const meta: Meta = { + component: PlayerListOverlay +} + +export default meta +type Story = StoryObj; + +export const Primary: Story = { + args: { + playersLists: [], + clientId: '', + tablistHeader: 'Header', + tablistFooter: 'Footer', + serverIP: '95.163.228.101', + } +} diff --git a/src/react/PlayerListOverlay.tsx b/src/react/PlayerListOverlay.tsx new file mode 100644 index 00000000..ee43ae2c --- /dev/null +++ b/src/react/PlayerListOverlay.tsx @@ -0,0 +1,41 @@ +import MessageFormattedString from './MessageFormattedString' +import './PlayerListOverlay.css' + + +type PlayersLists = Array> + +type PlayerListOverlayProps = { + playersLists: PlayersLists, + clientId: string, + tablistHeader: string | Record | null, + tablistFooter: string | Record | null, + serverIP: string +} + +export default ({ playersLists, clientId, tablistHeader, tablistFooter, serverIP }: PlayerListOverlayProps) => { + + return
+ Server IP: {serverIP} +
+ +
+
+ {playersLists.map((list, index) => ( +
+ {list.map(player => ( +
+ +
+

{player.ping}

+

ms

+
+
+ ))} +
+ ))} +
+
+ +
+
+} diff --git a/src/react/PlayerListOverlayProvider.tsx b/src/react/PlayerListOverlayProvider.tsx new file mode 100644 index 00000000..42e8c735 --- /dev/null +++ b/src/react/PlayerListOverlayProvider.tsx @@ -0,0 +1,91 @@ +import { useSnapshot } from 'valtio' +import { useState, useEffect, useMemo } from 'react' +import { isGameActive, miscUiState } from '../globalState' +import MessageFormattedString from './MessageFormattedString' +import PlayerListOverlay from './PlayerListOverlay' +import './PlayerListOverlay.css' + + +const MAX_ROWS_PER_COL = 10 + +type Players = typeof bot.players + +export default () => { + const { serverIp } = useSnapshot(miscUiState) + const [clientId, setClientId] = useState('') + const [players, setPlayers] = useState({}) + const [isOpen, setIsOpen] = useState(false) + + const handleKeyDown = (e) => { + if (!isGameActive(true)) return + if (e.key === 'Tab') { + setIsOpen(prev => true) + e.preventDefault() + } + } + + const handleKeyUp = (e) => { + if (e.key === 'Tab') { + setIsOpen(prev => false) + e.preventDefault() + } + } + + useMemo(() => { + function requestUpdate () { + // Placeholder for requestUpdate logic + setPlayers(bot.players) + } + + bot.on('playerUpdated', () => requestUpdate()) + bot.on('playerJoined', () => requestUpdate()) + bot.on('playerLeft', () => requestUpdate()) + }, []) + + useEffect(() => { + setPlayers(bot.players) + if (bot.player) { + setClientId(bot.player.uuid) + } else { + bot._client.on('player_info', () => { + setClientId(bot.player?.uuid) + }) + } + + document.addEventListener('keydown', handleKeyDown) + document.addEventListener('keyup', handleKeyUp) + + return () => { + document.removeEventListener('keydown', handleKeyDown) + document.removeEventListener('keyup', handleKeyUp) + } + }, [serverIp]) + + + const playersArray = Object.values(players).sort((a, b) => { + if (a.username > b.username) return 1 + if (a.username < b.username) return -1 + return 0 + }) + const lists = [] as Array + + let tempList = [] as typeof playersArray + for (let i = 0; i < playersArray.length; i++) { + tempList.push(playersArray[i]) + + if ((i + 1) % MAX_ROWS_PER_COL === 0 || i + 1 === playersArray.length) { + lists.push([...tempList]) + tempList = [] + } + } + + if (!isOpen) return null + + return +} diff --git a/src/react/SharedHudVars.tsx b/src/react/SharedHudVars.tsx new file mode 100644 index 00000000..acdcc237 --- /dev/null +++ b/src/react/SharedHudVars.tsx @@ -0,0 +1,27 @@ +import { CSSProperties, useEffect } from 'react' +import icons from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/icons.png' + +export default ({ children }) => { + useEffect(() => { + if (document.getElementById('hud-vars-style')) return + // 1. Don't inline long data URLs for better DX in elements tab + // 2. Easier application to globally override icons with custom image (eg from resourcepacks) + const css = /* css */` + :root { + --gui-icons: url(${icons}), url(${icons}); + } + ` + const style = document.createElement('style') + style.id = 'hud-vars-style' + style.textContent = css + document.head.appendChild(style) + }, []) + + const customVars = { + '--safe-area-inset-bottom': 'calc(env(safe-area-inset-bottom) / 2)' + } as CSSProperties + + return
{children}
+} diff --git a/src/react/Singleplayer.tsx b/src/react/Singleplayer.tsx index c00ffc8c..a4d8c559 100644 --- a/src/react/Singleplayer.tsx +++ b/src/react/Singleplayer.tsx @@ -51,8 +51,8 @@ const World = ({ name, isFocused, title, lastPlayed, size, detail = '', onFocus, world preview
{title}
-
{timeRelativeFormatted} {detail.slice(-30)}
-
{sizeFormatted}
+
{timeRelativeFormatted} {detail.slice(-30)}
+
{sizeFormatted}
} diff --git a/src/react/XPBar.module.css b/src/react/XPBar.module.css new file mode 100644 index 00000000..e9598f99 --- /dev/null +++ b/src/react/XPBar.module.css @@ -0,0 +1,33 @@ +.xp-bar-bg { + z-index: -1; + position: fixed; + left: 50%; + bottom: calc(var(--safe-area-inset-bottom) + 25px); + transform: translate(-50%); + width: 182px; + height: 5px; + background-image: url('minecraft-assets/minecraft-assets/data/1.16.4/gui/icons.png'); + background-size: 256px; + background-position-y: -64px; +} + +.xp-bar { + width: 182px; + height: 5px; + background-image: url('minecraft-assets/minecraft-assets/data/1.17.1/gui/icons.png'); + background-size: 256px; + background-position-y: -69px; +} + + +.xp-label { + position: fixed; + top: -8px; + left: 50%; + transform: translate(-50%); + font-size: 10px; + font-family: minecraft, mojangles, monospace; + color: rgb(30, 250, 30); + text-shadow: 0px -1px #000, 0px 1px #000, 1px 0px #000, -1px 0px #000; + z-index: 10; +} diff --git a/src/react/XPBar.stories.tsx b/src/react/XPBar.stories.tsx new file mode 100644 index 00000000..a7890b1a --- /dev/null +++ b/src/react/XPBar.stories.tsx @@ -0,0 +1,28 @@ +import type { Meta, StoryObj } from '@storybook/react' + +import XPBar from './XPBar' + +const meta: Meta = { + component: XPBar +} + +export default meta +type Story = StoryObj; + +export const Primary: Story = { + args: { + progress: 1, + level: 5 + }, + // add slider for progress + argTypes: { + progress: { + control: { + type: 'range', + min: 0, + max: 1, + step: 0.1 + } + } + } +} diff --git a/src/react/XPBar.tsx b/src/react/XPBar.tsx new file mode 100644 index 00000000..1b3a7a85 --- /dev/null +++ b/src/react/XPBar.tsx @@ -0,0 +1,16 @@ +import SharedHudVars from './SharedHudVars' +import styles from './XPBar.module.css' + +export default ({ progress, level, gamemode }: { progress: number; level: number, gamemode: string }) => ( + +
+
+ 0 ? 'block' : 'none' }}>{level} +
+
+) + diff --git a/src/react/XPBarProvider.tsx b/src/react/XPBarProvider.tsx new file mode 100644 index 00000000..4ee1a392 --- /dev/null +++ b/src/react/XPBarProvider.tsx @@ -0,0 +1,26 @@ +import { useState, useMemo } from 'react' +import { GameMode } from 'mineflayer' +import XPBar from './XPBar' + + +export default () => { + const [progress, setProgress] = useState(0) + const [level, setLevel] = useState(0) + const [gamemode, setGamemode] = useState(bot.game.gameMode) + + useMemo(() => { + const onXpUpdate = () => { + setProgress(bot.experience.progress) + setLevel(bot.experience.level) + } + onXpUpdate() + + bot.on('experience', onXpUpdate) + + bot.on('game', () => { + setGamemode(prev => bot.game.gameMode) + }) + }, []) + + return +} diff --git a/src/react/armorValues.ts b/src/react/armorValues.ts new file mode 100644 index 00000000..cf17edbc --- /dev/null +++ b/src/react/armorValues.ts @@ -0,0 +1,52 @@ +interface Armor { + 'helmet': number; + 'chestplate': number | null; + 'leggings': number | null; + 'boots': number | null; +} + +export const armor: { [material: string]: Armor } = { + 'turtle': { + 'helmet': 2, + 'chestplate': null, + 'leggings': null, + 'boots': null + }, + 'leather': { + 'helmet': 1, + 'chestplate': 3, + 'leggings': 2, + 'boots': 1 + }, + 'golden': { + 'helmet': 2, + 'chestplate': 5, + 'leggings': 3, + 'boots': 1 + }, + 'chainmail': { + 'helmet': 2, + 'chestplate': 5, + 'leggings': 4, + 'boots': 1 + }, + 'iron': { + 'helmet': 2, + 'chestplate': 6, + 'leggings': 5, + 'boots': 2 + }, + 'diamond': { + 'helmet': 3, + 'chestplate': 8, + 'leggings': 6, + 'boots': 3 + }, + 'netherite': { + 'helmet': 3, + 'chestplate': 8, + 'leggings': 6, + 'boots': 3 + } +} + diff --git a/src/react/simpleUtils.ts b/src/react/simpleUtils.ts new file mode 100644 index 00000000..d9519d20 --- /dev/null +++ b/src/react/simpleUtils.ts @@ -0,0 +1,5 @@ +import prettyBytes from 'pretty-bytes' + +export const getFixedFilesize = (bytes: number) => { + return prettyBytes(bytes, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) +} diff --git a/src/react/singleplayer.module.css b/src/react/singleplayer.module.css index 3258ba29..1e092b39 100644 --- a/src/react/singleplayer.module.css +++ b/src/react/singleplayer.module.css @@ -34,6 +34,10 @@ flex-direction: column; font-size: 11px; } +.world_info_description_line { + color: #999; + white-space: nowrap; +} .world_image { height: 100%; aspect-ratio: 1; diff --git a/src/react/useLongPress.ts b/src/react/useLongPress.ts new file mode 100644 index 00000000..3807221d --- /dev/null +++ b/src/react/useLongPress.ts @@ -0,0 +1,64 @@ +import { useCallback, useRef, useState } from 'react' + +interface LongPressOptions { + shouldPreventDefault?: boolean; + delay?: number; +} + +const useLongPress = ( + onLongPress: () => void, + onClick: () => void, + { shouldPreventDefault = true, delay = 300 }: LongPressOptions = {} +) => { + const [longPressTriggered, setLongPressTriggered] = useState(false) + const timeout = useRef() + const target = useRef(null) + + const start = useCallback( + (event: React.MouseEvent | React.TouchEvent) => { + if (shouldPreventDefault && event.target) { + event.target.addEventListener('touchend', preventDefault, { + passive: false + }) + target.current = event.target + } + timeout.current = window.setTimeout(() => { + onLongPress() + setLongPressTriggered(true) + }, delay) + }, + [onLongPress, delay, shouldPreventDefault] + ) + + const clear = useCallback( + (event: React.MouseEvent | React.TouchEvent, shouldTriggerClick = true) => { + if (timeout.current) clearTimeout(timeout.current) + if (shouldTriggerClick && !longPressTriggered) onClick() + setLongPressTriggered(false) + if (shouldPreventDefault && target.current) { + target.current.removeEventListener('touchend', preventDefault) + } + }, + [shouldPreventDefault, onClick, longPressTriggered] + ) + + return { + onMouseDown: (e: React.MouseEvent) => start(e), + onTouchStart: (e: React.TouchEvent) => start(e), + onMouseUp: (e: React.MouseEvent) => clear(e), + onMouseLeave: (e: React.MouseEvent) => clear(e, false), + onTouchEnd: (e: React.TouchEvent) => clear(e) + } +} + +const preventDefault = (event: Event) => { + if (!('touches' in event)) return + + const touchEvent = event as TouchEvent + if (touchEvent.touches.length < 2 && event.preventDefault) { + event.preventDefault() + } +} + +export default useLongPress + diff --git a/src/reactUi.tsx b/src/reactUi.tsx index d56cb805..4c5f1516 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -3,6 +3,7 @@ import { renderToDom, ErrorBoundary } from '@zardoy/react-util' import { useSnapshot } from 'valtio' import { QRCodeSVG } from 'qrcode.react' import { createPortal } from 'react-dom' +import { useEffect, useMemo, useState } from 'react' import { miscUiState } from './globalState' import DeathScreenProvider from './react/DeathScreenProvider' import OptionsRenderApp from './react/OptionsRenderApp' @@ -17,6 +18,12 @@ import TitleProvider from './react/TitleProvider' import ScoreboardProvider from './react/ScoreboardProvider' import SignEditorProvider from './react/SignEditorProvider' import IndicatorEffectsProvider from './react/IndicatorEffectsProvider' +import PlayerListOverlayProvider from './react/PlayerListOverlayProvider' +import HudBarsProvider from './react/HudBarsProvider' +import XPBarProvider from './react/XPBarProvider' +import DebugOverlay from './react/DebugOverlay' +import MobileTopButtons from './react/MobileTopButtons' +import PauseScreen from './react/PauseScreen' import SoundMuffler from './react/SoundMuffler' import TouchControls from './react/TouchControls' import widgets from './react/widgets' @@ -24,6 +31,8 @@ import { useIsWidgetActive } from './react/utils' import GlobalSearchInput from './GlobalSearchInput' import TouchAreasControlsProvider from './react/TouchAreasControlsProvider' import NotificationProvider, { showNotification } from './react/NotificationProvider' +import HotbarRenderApp from './react/HotbarRenderApp' +import Crosshair from './react/Crosshair' const RobustPortal = ({ children, to }) => { return createPortal({children}, to) @@ -54,6 +63,25 @@ const DisplayQr = () => { } +// mounted earlier than ingame ui TODO +const GameHud = ({ children }) => { + const { loadedDataVersion } = useSnapshot(miscUiState) + const [gameLoaded, setGameLoaded] = useState(false) + + useEffect(() => { + customEvents.on('mineflayerBotCreated', () => { + bot.once('inject_allowed', () => { + setGameLoaded(true) + }) + }) + }, []) + useEffect(() => { + if (!loadedDataVersion) setGameLoaded(false) + }, [loadedDataVersion]) + + return gameLoaded ? children : null +} + const InGameUi = () => { const { gameLoaded } = useSnapshot(miscUiState) if (!gameLoaded) return @@ -62,12 +90,21 @@ const InGameUi = () => { {/* apply scaling */} + + + + + + + + + @@ -105,6 +142,8 @@ const App = () => { + {/* + */} } @@ -121,3 +160,17 @@ renderToDom(, { strictMode: false, selector: '#react-root', }) + +disableReactProfiling() +function disableReactProfiling () { + //@ts-expect-error + window.performance.markOrig = window.performance.mark + //@ts-expect-error + window.performance.mark = (name, options) => { + // ignore react internal marks + if (!name.startsWith('⚛') && !localStorage.enableReactProfiling) { + //@ts-expect-error + window.performance.markOrig(name, options) + } + } +} diff --git a/src/scaleInterface.ts b/src/scaleInterface.ts new file mode 100644 index 00000000..9eac457d --- /dev/null +++ b/src/scaleInterface.ts @@ -0,0 +1,31 @@ +import { proxy } from 'valtio' +import { subscribeKey } from 'valtio/utils' +import { options } from './optionsStorage' + +export const currentScaling = proxy({ + scale: 1, +}) + +const setScale = () => { + const scaleValues = [ + { width: 971, height: 670, scale: 2 }, + { width: null, height: 430, scale: 1.5 }, + { width: 590, height: null, scale: 1 } + ] + + const { innerWidth, innerHeight } = window + + let result = options.guiScale + for (const { width, height, scale } of scaleValues) { + if ((width && innerWidth <= width) || (height && innerHeight <= height)) { + result = scale + } + } + + currentScaling.scale = result + document.documentElement.style.setProperty('--guiScale', String(result)) +} + +setScale() +subscribeKey(options, 'guiScale', setScale) +window.addEventListener('resize', setScale) diff --git a/src/texturePack.ts b/src/texturePack.ts index 8c251b49..566e10da 100644 --- a/src/texturePack.ts +++ b/src/texturePack.ts @@ -6,7 +6,7 @@ import { subscribeKey } from 'valtio/utils' import { proxy, ref } from 'valtio' import { getVersion } from 'prismarine-viewer/viewer/lib/version' import blocksFileNames from '../generated/blocks.json' -import type { BlockStates } from './playerWindows' +import type { BlockStates } from './inventoryWindows' import { copyFilesAsync, copyFilesAsyncWithProgress, mkdirRecursive, removeFileRecursiveAsync } from './browserfs' import { setLoadingScreenStatus } from './utils' import { showNotification } from './react/NotificationProvider' diff --git a/src/watchOptions.ts b/src/watchOptions.ts index 4380c6f3..1493e7d1 100644 --- a/src/watchOptions.ts +++ b/src/watchOptions.ts @@ -14,7 +14,7 @@ watchValue(options, o => { document.documentElement.style.setProperty('--chatScale', `${o.chatScale / 100}`) document.documentElement.style.setProperty('--chatWidth', `${o.chatWidth}px`) document.documentElement.style.setProperty('--chatHeight', `${o.chatHeight}px`) - document.documentElement.style.setProperty('--guiScale', `${o.guiScale}`) + // gui scale is set in scaleInterface.ts }) /** happens once */ From 7a28dfc4888d4d546d6dbfdc7944494de1da8c4a Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 20 Apr 2024 22:10:10 +0300 Subject: [PATCH 0023/1074] fix water fog --- src/water.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/water.ts b/src/water.ts index 8bdb2698..9f8ec557 100644 --- a/src/water.ts +++ b/src/water.ts @@ -9,8 +9,8 @@ customEvents.on('gameLoaded', () => { watchUnloadForCleanup(cleanup) const updateInWater = () => { - const waterBr = bot.entity.effects.find(effect => loadedData.effects[effect.id].name === 'water_breathing') - if (inWater && waterBr) { + const waterBr = Object.keys(bot.entity.effects).find((effect: any) => loadedData.effects[effect.id].name === 'water_breathing') + if (inWater) { viewer.scene.fog = new THREE.Fog(0x00_00_ff, 0.1, waterBr ? 100 : 20) // Set the fog color to blue if the bot is in water. } else { cleanup() From 241e5d3d1aa528b0a45b8b961b0c16b8d6fb2714 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Wed, 24 Apr 2024 17:10:44 +0300 Subject: [PATCH 0024/1074] do not override pnpm ver --- .github/workflows/preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 2f866235..9da50d0a 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -28,7 +28,7 @@ jobs: node-version: 18 cache: "pnpm" - name: Install Global Dependencies - run: npm install --global vercel pnpm + run: npm install --global vercel - name: Pull Vercel Environment Information run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} - name: Build Project Artifacts From 619aa5b06376e4fcf6335205cd350dd977ae367b Mon Sep 17 00:00:00 2001 From: Vitaly Date: Wed, 24 Apr 2024 17:16:16 +0300 Subject: [PATCH 0025/1074] optimize light update in single chunks --- prismarine-viewer/viewer/lib/viewer.ts | 8 ++++---- prismarine-viewer/viewer/lib/worldDataEmitter.ts | 6 +++--- prismarine-viewer/viewer/lib/worldrendererCommon.ts | 12 +++++++----- src/watchOptions.ts | 3 ++- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/prismarine-viewer/viewer/lib/viewer.ts b/prismarine-viewer/viewer/lib/viewer.ts index 1b11ac63..9cb7eb3d 100644 --- a/prismarine-viewer/viewer/lib/viewer.ts +++ b/prismarine-viewer/viewer/lib/viewer.ts @@ -77,8 +77,8 @@ export class Viewer { // this.primitives.clear() } - addColumn (x, z, chunk) { - this.world.addColumn(x, z, chunk) + addColumn (x, z, chunk, isLightUpdate = false) { + this.world.addColumn(x, z, chunk, isLightUpdate) } removeColumn (x: string, z: string) { @@ -148,9 +148,9 @@ export class Viewer { // this.updatePrimitive(p) }) - emitter.on('loadChunk', ({ x, z, chunk, worldConfig }) => { + emitter.on('loadChunk', ({ x, z, chunk, worldConfig, isLightUpdate }) => { this.world.worldConfig = worldConfig - this.addColumn(x, z, chunk) + this.addColumn(x, z, chunk, isLightUpdate) }) // todo remove and use other architecture instead so data flow is clear emitter.on('blockEntities', (blockEntities) => { diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index fa916c51..6743e337 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -75,7 +75,7 @@ export class WorldDataEmitter extends EventEmitter { bot._client.on('update_light', ({ chunkX, chunkZ }) => { const chunkPos = new Vec3(chunkX * 16, 0, chunkZ * 16) - this.loadChunk(chunkPos) + this.loadChunk(chunkPos, true) }) this.emitter.on('listening', () => { @@ -128,7 +128,7 @@ export class WorldDataEmitter extends EventEmitter { } } - async loadChunk (pos: ChunkPos) { + async loadChunk (pos: ChunkPos, isLightUpdate = false) { const [botX, botZ] = chunkPos(this.lastPos) const dx = Math.abs(botX - Math.floor(pos.x / 16)) const dz = Math.abs(botZ - Math.floor(pos.z / 16)) @@ -143,7 +143,7 @@ export class WorldDataEmitter extends EventEmitter { worldHeight: column['worldHeight'] ?? 256, } //@ts-ignore - this.emitter.emit('loadChunk', { x: pos.x, z: pos.z, chunk, blockEntities: column.blockEntities, worldConfig }) + this.emitter.emit('loadChunk', { x: pos.x, z: pos.z, chunk, blockEntities: column.blockEntities, worldConfig, isLightUpdate }) this.loadedChunks[`${pos.x},${pos.z}`] = true } } else { diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index ae2a91d3..43983977 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -211,7 +211,7 @@ export abstract class WorldRendererCommon } - addColumn (x, z, chunk) { + addColumn (x: number, z: number, chunk: any, isLightUpdate: boolean) { if (this.workers.length === 0) throw new Error('workers not initialized yet') this.initialChunksLoad = false this.loadedChunks[`${x},${z}`] = true @@ -222,10 +222,12 @@ export abstract class WorldRendererCommon for (let y = this.worldConfig.minY; y < this.worldConfig.worldHeight; y += 16) { const loc = new Vec3(x, y, z) this.setSectionDirty(loc) - this.setSectionDirty(loc.offset(-16, 0, 0)) - this.setSectionDirty(loc.offset(16, 0, 0)) - this.setSectionDirty(loc.offset(0, 0, -16)) - this.setSectionDirty(loc.offset(0, 0, 16)) + if (!isLightUpdate || this.mesherConfig.smoothLighting) { + this.setSectionDirty(loc.offset(-16, 0, 0)) + this.setSectionDirty(loc.offset(16, 0, 0)) + this.setSectionDirty(loc.offset(0, 0, -16)) + this.setSectionDirty(loc.offset(0, 0, 16)) + } } } diff --git a/src/watchOptions.ts b/src/watchOptions.ts index 1493e7d1..009463be 100644 --- a/src/watchOptions.ts +++ b/src/watchOptions.ts @@ -44,7 +44,8 @@ export const watchOptionsAfterViewerInit = () => { viewer.entities.setVisible(o.renderEntities) }) - viewer.world.mesherConfig.smoothLighting = options.smoothLighting + // viewer.world.mesherConfig.smoothLighting = options.smoothLighting + viewer.world.mesherConfig.smoothLighting = false // todo not supported for now subscribeKey(options, 'smoothLighting', () => { viewer.world.mesherConfig.smoothLighting = options.smoothLighting; (viewer.world as WorldRendererThree).rerenderAllChunks() From d7f5e98fe35164fc9351f3bb814b1a260ffd784e Mon Sep 17 00:00:00 2001 From: Vitaly Date: Fri, 26 Apr 2024 09:44:04 +0300 Subject: [PATCH 0026/1074] update typescript to 5.5 --- package.json | 2 +- pnpm-lock.yaml | 138 +++++++++--------- .../viewer/lib/worldDataEmitter.ts | 4 +- src/inventoryWindows.ts | 4 +- src/react/MessageFormatted.tsx | 2 +- src/react/SoundMuffler.tsx | 6 +- 6 files changed, 78 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index e9981866..dee909a8 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "stream-browserify": "^3.0.0", "three": "0.154.0", "timers-browserify": "^2.0.12", - "typescript": "^5.2.2", + "typescript": "5.5.0-beta", "use-typed-event-listener": "^4.0.2", "vitest": "^0.34.6", "yaml": "^2.3.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5eb5111a..fc504d17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -207,16 +207,16 @@ importers: version: 7.4.6(@types/react-dom@18.2.7)(@types/react@18.2.20)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/react': specifier: ^7.4.6 - version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) + version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.0-beta) '@storybook/react-vite': specifier: ^7.4.6 - version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) + version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) '@storybook/web-components': specifier: ^7.4.6 version: 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/web-components-vite': specifier: ^7.4.6 - version: 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) + version: 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) '@types/lodash-es': specifier: ^4.17.9 version: 4.17.9 @@ -249,7 +249,7 @@ importers: version: 1.0.0 contro-max: specifier: ^0.1.2 - version: 0.1.2(typescript@5.2.2) + version: 0.1.2(typescript@5.5.0-beta) crypto-browserify: specifier: ^3.12.0 version: 3.12.0 @@ -264,7 +264,7 @@ importers: version: 8.50.0 eslint-config-zardoy: specifier: ^0.2.17 - version: 0.2.17(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0)(typescript@5.2.2) + version: 0.2.17(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0)(typescript@5.5.0-beta) events: specifier: ^3.3.0 version: 3.3.0 @@ -323,11 +323,11 @@ importers: specifier: ^2.0.12 version: 2.0.12 typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: 5.5.0-beta + version: 5.5.0-beta use-typed-event-listener: specifier: ^4.0.2 - version: 4.0.2(react@18.2.0)(typescript@5.2.2) + version: 4.0.2(react@18.2.0)(typescript@5.5.0-beta) vitest: specifier: ^0.34.6 version: 0.34.6(terser@5.19.2) @@ -7996,8 +7996,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + typescript@5.5.0-beta: + resolution: {integrity: sha512-FRg3e/aQg3olEG3ff8YjHOERsO4IM0m4qGrsE4UMvILaq4TdDZ6gQX4+2Rq9SjTpfSe/ebwiHcsjm/7FfWWQ6Q==} engines: {node: '>=14.17'} hasBin: true @@ -10214,15 +10214,15 @@ snapshots: core-js: 3.32.1 regenerator-runtime: 0.13.11 - '@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@5.2.2) + react-docgen-typescript: 2.2.2(typescript@5.5.0-beta) vite: 4.5.3(@types/node@20.8.0)(terser@5.19.2) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta '@jridgewell/gen-mapping@0.3.3': dependencies: @@ -10957,7 +10957,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.4.6(encoding@0.1.13)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': + '@storybook/builder-vite@7.4.6(encoding@0.1.13)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: '@storybook/channels': 7.4.6 '@storybook/client-logger': 7.4.6 @@ -10980,7 +10980,7 @@ snapshots: rollup: 3.29.4 vite: 4.5.3(@types/node@20.8.0)(terser@5.19.2) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta transitivePeerDependencies: - encoding - supports-color @@ -11264,12 +11264,12 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/react-vite@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': + '@storybook/react-vite@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) '@rollup/pluginutils': 5.0.5(rollup@2.79.1) - '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) - '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2) + '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) + '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.0-beta) '@vitejs/plugin-react': 3.1.0(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) ast-types: 0.14.2 magic-string: 0.30.4 @@ -11285,7 +11285,7 @@ snapshots: - typescript - vite-plugin-glimmerx - '@storybook/react@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)': + '@storybook/react@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.0-beta)': dependencies: '@storybook/client-logger': 7.4.6 '@storybook/core-client': 7.4.6 @@ -11311,7 +11311,7 @@ snapshots: type-fest: 2.19.0 util-deprecate: 1.0.2 optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta transitivePeerDependencies: - encoding - supports-color @@ -11354,9 +11354,9 @@ snapshots: '@types/express': 4.17.18 file-system-cache: 2.3.0 - '@storybook/web-components-vite@7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': + '@storybook/web-components-vite@7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': dependencies: - '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.2.2)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) + '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) '@storybook/core-server': 7.4.6(encoding@0.1.13) '@storybook/node-logger': 7.4.6 '@storybook/web-components': 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -11674,13 +11674,13 @@ snapshots: '@types/node': 20.11.19 optional: true - '@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2)': + '@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0)(typescript@5.5.0-beta)': dependencies: '@eslint-community/regexpp': 4.8.0 - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.5.0-beta) '@typescript-eslint/scope-manager': 6.1.0 - '@typescript-eslint/type-utils': 6.1.0(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.1.0(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 6.1.0(eslint@8.50.0)(typescript@5.5.0-beta) + '@typescript-eslint/utils': 6.1.0(eslint@8.50.0)(typescript@5.5.0-beta) '@typescript-eslint/visitor-keys': 6.1.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.50.0 @@ -11689,22 +11689,22 @@ snapshots: natural-compare: 1.4.0 natural-compare-lite: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.5.0-beta) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2)': + '@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta)': dependencies: '@typescript-eslint/scope-manager': 6.7.3 '@typescript-eslint/types': 6.7.3 - '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.5.0-beta) '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4(supports-color@8.1.1) eslint: 8.50.0 optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta transitivePeerDependencies: - supports-color @@ -11718,15 +11718,15 @@ snapshots: '@typescript-eslint/types': 6.7.3 '@typescript-eslint/visitor-keys': 6.7.3 - '@typescript-eslint/type-utils@6.1.0(eslint@8.50.0)(typescript@5.2.2)': + '@typescript-eslint/type-utils@6.1.0(eslint@8.50.0)(typescript@5.5.0-beta)': dependencies: - '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.1.0(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.5.0-beta) + '@typescript-eslint/utils': 6.1.0(eslint@8.50.0)(typescript@5.5.0-beta) debug: 4.3.4(supports-color@8.1.1) eslint: 8.50.0 - ts-api-utils: 1.0.3(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.5.0-beta) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta transitivePeerDependencies: - supports-color @@ -11734,7 +11734,7 @@ snapshots: '@typescript-eslint/types@6.7.3': {} - '@typescript-eslint/typescript-estree@6.1.0(typescript@5.2.2)': + '@typescript-eslint/typescript-estree@6.1.0(typescript@5.5.0-beta)': dependencies: '@typescript-eslint/types': 6.1.0 '@typescript-eslint/visitor-keys': 6.1.0 @@ -11742,13 +11742,13 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - ts-api-utils: 1.0.3(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.5.0-beta) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2)': + '@typescript-eslint/typescript-estree@6.7.3(typescript@5.5.0-beta)': dependencies: '@typescript-eslint/types': 6.7.3 '@typescript-eslint/visitor-keys': 6.7.3 @@ -11756,20 +11756,20 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - ts-api-utils: 1.0.3(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.5.0-beta) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.1.0(eslint@8.50.0)(typescript@5.2.2)': + '@typescript-eslint/utils@6.1.0(eslint@8.50.0)(typescript@5.5.0-beta)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.3 '@typescript-eslint/scope-manager': 6.1.0 '@typescript-eslint/types': 6.1.0 - '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.5.0-beta) eslint: 8.50.0 semver: 7.6.0 transitivePeerDependencies: @@ -12802,13 +12802,13 @@ snapshots: content-type@1.0.5: {} - contro-max@0.1.2(typescript@5.2.2): + contro-max@0.1.2(typescript@5.5.0-beta): dependencies: emittery: 0.10.2 lodash-es: 4.17.21 optionalDependencies: react: 18.2.0 - use-typed-event-listener: 4.0.2(react@18.2.0)(typescript@5.2.2) + use-typed-event-listener: 4.0.2(react@18.2.0)(typescript@5.5.0-beta) transitivePeerDependencies: - typescript @@ -13664,34 +13664,34 @@ snapshots: eslint-plugin-react: 7.34.1(eslint@8.50.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) - eslint-config-xo-typescript@1.0.1(@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2))(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2): + eslint-config-xo-typescript@1.0.1(@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0)(typescript@5.5.0-beta))(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0)(typescript@5.5.0-beta): dependencies: - '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0)(typescript@5.5.0-beta) + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.5.0-beta) eslint: 8.50.0 - typescript: 5.2.2 + typescript: 5.5.0-beta eslint-config-xo@0.43.1(eslint@8.50.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.50.0 - eslint-config-zardoy@0.2.17(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0)(typescript@5.2.2): + eslint-config-zardoy@0.2.17(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0)(typescript@5.5.0-beta): dependencies: '@rushstack/eslint-patch': 1.4.0 - '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0)(typescript@5.5.0-beta) + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.5.0-beta) eslint: 8.50.0 eslint-config-prettier: 8.10.0(eslint@8.50.0) eslint-config-xo: 0.43.1(eslint@8.50.0) eslint-config-xo-react: 0.27.0(eslint-plugin-react-hooks@4.6.0(eslint@8.50.0))(eslint-plugin-react@7.34.1(eslint@8.50.0))(eslint@8.50.0) - eslint-config-xo-typescript: 1.0.1(@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2))(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2) + eslint-config-xo-typescript: 1.0.1(@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0)(typescript@5.5.0-beta))(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0)(typescript@5.5.0-beta) eslint-plugin-eslint-comments: 3.2.0(eslint@8.50.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0) eslint-plugin-node: 11.1.0(eslint@8.50.0) eslint-plugin-sonarjs: 0.19.0(eslint@8.50.0) eslint-plugin-unicorn: 48.0.0(eslint@8.50.0) - typescript: 5.2.2 + typescript: 5.5.0-beta transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -13707,11 +13707,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@8.50.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint-import-resolver-node@0.3.9)(eslint@8.50.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.5.0-beta) eslint: 8.50.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -13729,7 +13729,7 @@ snapshots: eslint: 8.50.0 ignore: 5.2.4 - eslint-plugin-import@2.27.5(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0): + eslint-plugin-import@2.27.5(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0): dependencies: array-includes: 3.1.7 array.prototype.flat: 1.3.2 @@ -13738,7 +13738,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.50.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@8.50.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint-import-resolver-node@0.3.9)(eslint@8.50.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -13748,7 +13748,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.14.2 optionalDependencies: - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.5.0-beta) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -16791,9 +16791,9 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-docgen-typescript@2.2.2(typescript@5.2.2): + react-docgen-typescript@2.2.2(typescript@5.5.0-beta): dependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta react-docgen@6.0.0-alpha.3: dependencies: @@ -17968,9 +17968,9 @@ snapshots: dependencies: utf8-byte-length: 1.0.4 - ts-api-utils@1.0.3(typescript@5.2.2): + ts-api-utils@1.0.3(typescript@5.5.0-beta): dependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta ts-dedent@2.2.0: {} @@ -18092,7 +18092,7 @@ snapshots: typedarray@0.0.6: {} - typescript@5.2.2: {} + typescript@5.5.0-beta: {} ua-parser-js@1.0.37: {} @@ -18267,13 +18267,13 @@ snapshots: dependencies: react: 18.2.0 - use-typed-event-listener@4.0.2(react@18.2.0)(typescript@5.2.2): + use-typed-event-listener@4.0.2(react@18.2.0)(typescript@5.5.0-beta): dependencies: '@babel/runtime': 7.22.11 react: 18.2.0 use-deep-compare: 1.1.0(react@18.2.0) optionalDependencies: - typescript: 5.2.2 + typescript: 5.5.0-beta utf8-byte-length@1.0.4: {} diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index 6743e337..f4ce9675 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -186,8 +186,8 @@ export class WorldDataEmitter extends EventEmitter { const positions = generateSpiralMatrix(this.viewDistance).map(([x, z]) => { const pos = new Vec3((botX + x) * 16, 0, (botZ + z) * 16) if (!this.loadedChunks[`${pos.x},${pos.z}`]) return pos - return undefined! - }).filter(Boolean) + return undefined + }).filter(a => !!a) this.lastPos.update(pos) await this._loadChunks(positions) } else { diff --git a/src/inventoryWindows.ts b/src/inventoryWindows.ts index 3345b6cd..d9fda1c7 100644 --- a/src/inventoryWindows.ts +++ b/src/inventoryWindows.ts @@ -389,9 +389,9 @@ const upJei = (search: string) => { search = search.toLowerCase() // todo fix pre flat const matchedSlots = loadedData.itemsArray.map(x => { - if (!x.displayName.toLowerCase().includes(search)) return null! + if (!x.displayName.toLowerCase().includes(search)) return null return new PrismarineItem(x.id, 1) - }).filter(Boolean) + }).filter(a => a !== null) lastWindow.pwindow.win.jeiSlotsPage = 0 lastWindow.pwindow.win.jeiSlots = mapSlots(matchedSlots) } diff --git a/src/react/MessageFormatted.tsx b/src/react/MessageFormatted.tsx index 95ab064c..e9a0641a 100644 --- a/src/react/MessageFormatted.tsx +++ b/src/react/MessageFormatted.tsx @@ -78,7 +78,7 @@ export const MessagePart = ({ part, ...props }: { part: MessageFormatPart } & Co underlined && messageFormatStylesMap.underlined, strikethrough && messageFormatStylesMap.strikethrough, obfuscated && messageFormatStylesMap.obfuscated - ].filter(Boolean) + ].filter(a => a !== false && a !== undefined).filter(Boolean) return {text} } diff --git a/src/react/SoundMuffler.tsx b/src/react/SoundMuffler.tsx index 4f162940..869abc1c 100644 --- a/src/react/SoundMuffler.tsx +++ b/src/react/SoundMuffler.tsx @@ -42,16 +42,16 @@ export default () => { Last World Played {Object.entries(lastPlayedSounds.lastServerPlayed).map(([key, value]) => { - if (!showMuted && mutedSounds.includes(key)) return null as never + if (!showMuted && mutedSounds.includes(key)) return null return [key, value.count] as const - }).filter(Boolean).sort((a, b) => b[1] - a[1]).slice(0, 20).map(([key, count]) => { + }).filter(a => !!a).sort((a, b) => b[1] - a[1]).slice(0, 20).map(([key, count]) => { return {count} })} Last Client Played {lastPlayedSounds.lastClientPlayed.map((key) => { - if (!showMuted && mutedSounds.includes(key)) return null as never + if (!showMuted && mutedSounds.includes(key)) return null return })} From cf83844281217f4ec52b8f62855844511bd7343e Mon Sep 17 00:00:00 2001 From: Vitaly Date: Fri, 26 Apr 2024 09:44:47 +0300 Subject: [PATCH 0027/1074] fix annoying f3 issue --- src/react/MobileTopButtons.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/react/MobileTopButtons.tsx b/src/react/MobileTopButtons.tsx index c4acb028..c686bb0b 100644 --- a/src/react/MobileTopButtons.tsx +++ b/src/react/MobileTopButtons.tsx @@ -40,6 +40,7 @@ export default () => { }}>S
{ document.dispatchEvent(new KeyboardEvent('keydown', { code: 'F3' })) + document.dispatchEvent(new KeyboardEvent('keyup', { code: 'F3' })) }} { ...longPressEvent }>F3
{ e.stopPropagation() From b9aa44907100a7c3a136da6c39d26cfb46a1ab45 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 27 Apr 2024 15:51:06 +0300 Subject: [PATCH 0028/1074] fix ios hotbar, fix item name display, fix item select, fix inv open --- src/botUtils.ts | 2 +- src/react/HotbarRenderApp.tsx | 29 +++++++++++++++-------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/botUtils.ts b/src/botUtils.ts index 5dacbf4f..a76f889b 100644 --- a/src/botUtils.ts +++ b/src/botUtils.ts @@ -114,6 +114,6 @@ const blockToItemRemaps = { } export const getItemFromBlock = (block: import('prismarine-block').Block) => { - const item = loadedData.items[blockToItemRemaps[block.name] ?? block.name] + const item = loadedData.itemsByName[blockToItemRemaps[block.name] ?? block.name] return item } diff --git a/src/react/HotbarRenderApp.tsx b/src/react/HotbarRenderApp.tsx index 2e7ee1d1..e747c4e3 100644 --- a/src/react/HotbarRenderApp.tsx +++ b/src/react/HotbarRenderApp.tsx @@ -19,7 +19,7 @@ const ItemName = ({ itemKey }: { itemKey: string }) => { const defaultStyle: React.CSSProperties = { position: 'fixed', - bottom: `calc(var(--safe-area-inset-bottom) + ${bot ? bot.game.gameMode === 'creative' ? '35px' : '50px' : '50px'})`, + bottom: `calc(env(safe-area-inset-bottom) + ${bot ? bot.game.gameMode === 'creative' ? '35px' : '50px' : '50px'})`, left: 0, right: 0, fontSize: 10, @@ -117,7 +117,7 @@ export default () => { canvasManager.canvas.onpointerdown = (e) => { if (!isGameActive(true)) return const pos = inv.canvasManager.getMousePos(inv.canvas, e) - if (pos.x > canvasManager.canvas.width - 30) { + if (canvasManager.canvas.width - pos.x < 35 * inv.canvasManager.scale) { openPlayerInventory() } } @@ -135,7 +135,10 @@ export default () => { const heldItemChanged = () => { inv.inventory.activeHotbarSlot = bot.quickBarSlot - if (!bot.inventory.slots?.[bot.quickBarSlot + 36]) return + if (!bot.inventory.slots?.[bot.quickBarSlot + 36]) { + setItemKey('') + return + } const item = bot.inventory.slots[bot.quickBarSlot + 36]! const itemNbt = item.nbt ? JSON.stringify(item.nbt) : '' setItemKey(`${item.displayName}_split_${item.type}_split_${item.metadata}_split_${itemNbt}`) @@ -199,17 +202,15 @@ export default () => { return - -
- +
} From 6615984966ee22670965bbbacb418f30818833fa Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 27 Apr 2024 16:04:52 +0300 Subject: [PATCH 0029/1074] fix water rendering TODO still need to be correctly mapped to block named water instead --- prismarine-viewer/viewer/lib/mesher/world.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prismarine-viewer/viewer/lib/mesher/world.ts b/prismarine-viewer/viewer/lib/mesher/world.ts index 50616f82..63263809 100644 --- a/prismarine-viewer/viewer/lib/mesher/world.ts +++ b/prismarine-viewer/viewer/lib/mesher/world.ts @@ -114,6 +114,8 @@ export class World { } const block = this.blockCache[stateId] + if (block.name === 'flowing_water') block.name = 'water' + if (block.name === 'flowing_lava') block.name = 'lava' // block.position = loc // it overrides position of all currently loaded blocks block.biome = this.biomeCache[column.getBiome(locInChunk)] ?? this.biomeCache[1] ?? this.biomeCache[0] if (block.name === 'redstone_ore') block.transparent = false From a504d3f5aa9b830ea47db577f2cb593e328bd236 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 27 Apr 2024 16:11:38 +0300 Subject: [PATCH 0030/1074] disable some useless warnings --- src/loadSave.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/loadSave.ts b/src/loadSave.ts index 655fbea8..c332e670 100644 --- a/src/loadSave.ts +++ b/src/loadSave.ts @@ -85,8 +85,10 @@ export const loadSave = async (root = '/world') => { const qs = new URLSearchParams(window.location.search) version = qs.get('mapVersion') ?? levelDat.Version?.Name if (!version) { - const newVersion = disablePrompts ? '1.8.8' : prompt(`In 1.8 and before world save doesn't contain version info, please enter version you want to use to load the world.\nSupported versions ${supportedVersions.join(', ')}`, '1.8.8') - if (!newVersion) return + // const newVersion = disablePrompts ? '1.8.8' : prompt(`In 1.8 and before world save doesn't contain version info, please enter version you want to use to load the world.\nSupported versions ${supportedVersions.join(', ')}`, '1.8.8') + // if (!newVersion) return + // todo detect world load issues + const newVersion = '1.8.8' version = newVersion } const lastSupportedVersion = supportedVersions.at(-1)! @@ -110,7 +112,7 @@ export const loadSave = async (root = '/world') => { isFlat = levelDat.generatorName === 'flat' } if (!isFlat && levelDat.generatorName !== 'default' && levelDat.generatorName !== 'customized') { - warnings.push(`Generator ${levelDat.generatorName} may not be supported yet`) + // warnings.push(`Generator ${levelDat.generatorName} may not be supported yet, be careful of new chunks writes`) } const playerUuid = nameToMcOfflineUUID(options.localUsername) @@ -150,7 +152,7 @@ export const loadSave = async (root = '/world') => { if (!fsState.isReadonly && !fsState.inMemorySave && !disablePrompts) { // todo allow also to ctrl+s - alert('Note: the world is saved only on /save or disconnect! Ensure you have backup!') + alert('Note: the world is saved on interval, /save or disconnect! Ensure you have backup and be careful of new chunks writes!') } // improve compatibility with community saves From 9322e09a836a0d896ccaa0e5aa8ebd48e31f34f2 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 27 Apr 2024 22:55:25 +0300 Subject: [PATCH 0031/1074] fix: "modern" controls now correctly works with flying fix: right stick button on gamepad now toggles sneaking --- src/controls.ts | 13 +++++++++++-- src/react/HotbarRenderApp.tsx | 4 +++- src/react/TouchAreasControls.tsx | 29 ++++++++++++++++++++++------- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/controls.ts b/src/controls.ts index 734a2a6d..26405082 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -32,7 +32,8 @@ export const contro = new ControMax({ jump: ['Space', 'A'], inventory: ['KeyE', 'X'], drop: ['KeyQ', 'B'], - sneak: ['ShiftLeft', 'Right Stick'], + sneak: ['ShiftLeft'], + toggleSneakOrDown: [null, 'Right Stick'], sprint: ['ControlLeft', 'Left Stick'], nextHotbarSlot: [null, 'Left Bumper'], prevHotbarSlot: [null, 'Right Bumper'], @@ -152,7 +153,7 @@ const uiCommand = (command: Command) => { } } -export const setSneaking = (state: boolean) => { +const setSneaking = (state: boolean) => { gameAdditionalState.isSneaking = state bot.setControlState('sneak', state) } @@ -178,6 +179,14 @@ const onTriggerOrReleased = (command: Command, pressed: boolean) => { if (pressed) { setSprinting(pressed) } + break + case 'general.toggleSneakOrDown': + if (gameAdditionalState.isFlying) { + setSneaking(pressed) + } else if (pressed) { + setSneaking(!gameAdditionalState.isSneaking) + } + break case 'general.attackDestroy': document.dispatchEvent(new MouseEvent(pressed ? 'mousedown' : 'mouseup', { button: 0 })) diff --git a/src/react/HotbarRenderApp.tsx b/src/react/HotbarRenderApp.tsx index e747c4e3..5b32e3cc 100644 --- a/src/react/HotbarRenderApp.tsx +++ b/src/react/HotbarRenderApp.tsx @@ -108,13 +108,14 @@ export default () => { } setSize() watchUnloadForCleanup(subscribe(currentScaling, setSize)) + inv.canvas.style.pointerEvents = 'auto' container.current.appendChild(inv.canvas) const upHotbarItems = () => { if (!viewer.world.downloadedTextureImage && !viewer.world.customTexturesDataUrl) return upInventoryItems(true, inv) } - canvasManager.canvas.onpointerdown = (e) => { + canvasManager.canvas.onclick = (e) => { if (!isGameActive(true)) return const pos = inv.canvasManager.getMousePos(inv.canvas, e) if (canvasManager.canvas.width - pos.x < 35 * inv.canvasManager.scale) { @@ -209,6 +210,7 @@ export default () => { display: 'flex', justifyContent: 'center', zIndex: hasModals ? 1 : 8, + pointerEvents: 'none', bottom: 'env(safe-area-inset-bottom)' }} /> diff --git a/src/react/TouchAreasControls.tsx b/src/react/TouchAreasControls.tsx index e2a3fd87..f56db047 100644 --- a/src/react/TouchAreasControls.tsx +++ b/src/react/TouchAreasControls.tsx @@ -1,6 +1,6 @@ -import { CSSProperties, PointerEvent, PointerEventHandler, useEffect, useRef, useState } from 'react' +import { CSSProperties, PointerEvent, useEffect, useRef } from 'react' import { proxy, ref, useSnapshot } from 'valtio' -import { contro, setSneaking } from '../controls' +import { contro } from '../controls' import worldInteractions from '../worldInteractions' import PixelartIcon from './PixelartIcon' import Button from './Button' @@ -56,6 +56,7 @@ export default ({ touchActive, setupActive, buttonsPositions, closeButtonsSetup const joystickInner = useRef(null) const { pointer } = useSnapshot(joystickPointer) + // const { isFlying, isSneaking } = useSnapshot(gameAdditionalState) const newButtonPositions = { ...buttonsPositions } const buttonProps = (name: ButtonName) => { @@ -72,7 +73,10 @@ export default ({ touchActive, setupActive, buttonsPositions, closeButtonsSetup document.dispatchEvent(new MouseEvent('mouseup', { button: 2 })) }, sneak () { - setSneaking(!bot.getControlState('sneak')) + void contro.emit('trigger', { + command: 'general.toggleSneakOrDown', + schema: null as any, + }) active = bot.getControlState('sneak') }, break () { @@ -81,14 +85,22 @@ export default ({ touchActive, setupActive, buttonsPositions, closeButtonsSetup active = true }, jump () { - bot.setControlState('jump', true) - active = true + void contro.emit('trigger', { + command: 'general.jump', + schema: null as any, + }) + active = bot.controlState.jump } } const holdUp = { action () { }, sneak () { + void contro.emit('release', { + command: 'general.toggleSneakOrDown', + schema: null as any, + }) + active = bot.getControlState('sneak') }, break () { document.dispatchEvent(new MouseEvent('mouseup', { button: 0 })) @@ -96,8 +108,11 @@ export default ({ touchActive, setupActive, buttonsPositions, closeButtonsSetup active = false }, jump () { - bot.setControlState('jump', false) - active = false + void contro.emit('release', { + command: 'general.jump', + schema: null as any, + }) + active = bot.controlState.jump } } From e44c7cece26d36ff18ce0bbc15314d3a72c520cb Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 27 Apr 2024 23:17:06 +0300 Subject: [PATCH 0032/1074] workaround gpu textures overflow issue with many unknown entities TODO should be reworked completely --- prismarine-viewer/examples/playground.ts | 2 +- prismarine-viewer/viewer/lib/entities.js | 38 ++++++++++++++---------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/prismarine-viewer/examples/playground.ts b/prismarine-viewer/examples/playground.ts index bc9294ac..295cc47d 100644 --- a/prismarine-viewer/examples/playground.ts +++ b/prismarine-viewer/examples/playground.ts @@ -132,7 +132,7 @@ async function main () { document.body.appendChild(renderer.domElement) // Create viewer - const viewer = new Viewer(renderer, 1) + const viewer = new Viewer(renderer, { numWorkers: 1, showChunkBorders: false }) viewer.entities.setDebugMode('basic') viewer.setVersion(version) viewer.entities.onSkinUpdate = () => { diff --git a/prismarine-viewer/viewer/lib/entities.js b/prismarine-viewer/viewer/lib/entities.js index 350dc53e..290c3932 100644 --- a/prismarine-viewer/viewer/lib/entities.js +++ b/prismarine-viewer/viewer/lib/entities.js @@ -17,7 +17,7 @@ import externalTexturesJson from './entity/externalTextures.json' export const TWEEN_DURATION = 50 // todo should be 100 -function getUsernameTexture (username, { fontFamily = 'sans-serif' }) { +function getUsernameTexture(username, { fontFamily = 'sans-serif' }) { const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') if (!ctx) throw new Error('Could not get 2d context') @@ -58,7 +58,10 @@ const addNametag = (entity, options, mesh) => { } } -function getEntityMesh (entity, scene, options, overrides) { +// todo cleanup +const nametags = {} + +function getEntityMesh(entity, scene, options, overrides) { if (entity.name) { try { // https://github.com/PrismarineJS/prismarine-viewer/pull/410 @@ -78,10 +81,13 @@ function getEntityMesh (entity, scene, options, overrides) { geometry.translate(0, entity.height / 2, 0) const material = new THREE.MeshBasicMaterial({ color: 0xff_00_ff }) const cube = new THREE.Mesh(geometry, material) - addNametag({ - username: entity.name, - height: entity.height, - }, options, cube) + const nametagCount = (nametags[entity.name] = (nametags[entity.name] || 0) + 1) + if (nametagCount < 6) { + addNametag({ + username: entity.name, + height: entity.height, + }, options, cube) + } return cube } @@ -99,7 +105,7 @@ export class Entities extends EventEmitter { this.getItemUv = undefined } - clear () { + clear() { for (const mesh of Object.values(this.entities)) { this.scene.remove(mesh) dispose3(mesh) @@ -107,7 +113,7 @@ export class Entities extends EventEmitter { this.entities = {} } - setDebugMode (mode, /** @type {THREE.Object3D?} */entity = null) { + setDebugMode(mode, /** @type {THREE.Object3D?} */entity = null) { this.debugMode = mode for (const mesh of entity ? [entity] : Object.values(this.entities)) { const boxHelper = mesh.children.find(c => c.name === 'debug') @@ -119,14 +125,14 @@ export class Entities extends EventEmitter { } } - setVisible (visible, /** @type {THREE.Object3D?} */entity = null) { + setVisible(visible, /** @type {THREE.Object3D?} */entity = null) { this.visible = visible for (const mesh of entity ? [entity] : Object.values(this.entities)) { mesh.visible = visible } } - render () { + render() { const dt = this.clock.getDelta() for (const entityId of Object.keys(this.entities)) { const playerObject = this.getPlayerObject(entityId) @@ -136,7 +142,7 @@ export class Entities extends EventEmitter { } } - getPlayerObject (entityId) { + getPlayerObject(entityId) { /** @type {(PlayerObject & { animation?: PlayerAnimation }) | undefined} */ const playerObject = this.entities[entityId]?.playerObject return playerObject @@ -146,7 +152,7 @@ export class Entities extends EventEmitter { defaultSteveTexture // true means use default skin url - updatePlayerSkin (entityId, username, /** @type {string | true} */skinUrl, /** @type {string | true | undefined} */capeUrl = undefined) { + updatePlayerSkin(entityId, username, /** @type {string | true} */skinUrl, /** @type {string | true | undefined} */capeUrl = undefined) { let playerObject = this.getPlayerObject(entityId) if (!playerObject) return // const username = this.entities[entityId].username @@ -229,14 +235,14 @@ export class Entities extends EventEmitter { playerObject.cape.map = null } - function isCanvasBlank (canvas) { + function isCanvasBlank(canvas) { return !canvas.getContext('2d') .getImageData(0, 0, canvas.width, canvas.height).data .some(channel => channel !== 0) } } - playAnimation (entityPlayerId, /** @type {'walking' | 'running' | 'oneSwing' | 'idle'} */animation) { + playAnimation(entityPlayerId, /** @type {'walking' | 'running' | 'oneSwing' | 'idle'} */animation) { const playerObject = this.getPlayerObject(entityPlayerId) if (!playerObject) return @@ -256,14 +262,14 @@ export class Entities extends EventEmitter { } - displaySimpleText (jsonLike) { + displaySimpleText(jsonLike) { if (!jsonLike) return const parsed = mojangson.simplify(mojangson.parse(jsonLike)) const text = flat(parsed).map(x => x.text) return text.join('') } - update (/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) { + update(/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) { let isPlayerModel = entity.name === 'player' if (entity.name === 'zombie' || entity.name === 'zombie_villager' || entity.name === 'husk') { isPlayerModel = true From d83120fdce389f5c88b1c17dcbbb549747849523 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Mon, 22 Apr 2024 09:37:44 +0300 Subject: [PATCH 0033/1074] disable smooth lighting for now as it doesn't work correctly --- prismarine-viewer/viewer/lib/mesher/models.ts | 10 ++++------ prismarine-viewer/viewer/lib/mesher/world.ts | 4 +++- src/optionsGuiScheme.tsx | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index fc86a671..833de180 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -387,15 +387,12 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr const corner = world.getBlock(cursor.offset(...cornerDir)) let cornerLightResult = 15 - if (world.config.smoothLighting) { + if (/* world.config.smoothLighting */false) { // todo fix const side1Light = world.getLight(cursor.plus(new Vec3(...side1Dir)), true) const side2Light = world.getLight(cursor.plus(new Vec3(...side2Dir)), true) const cornerLight = world.getLight(cursor.plus(new Vec3(...cornerDir)), true) // interpolate - cornerLightResult = Math.min( - Math.min(side1Light, side2Light), - cornerLight - ) + cornerLightResult = (side1Light + side2Light + cornerLight) / 3 } const side1Block = world.shouldMakeAo(side1) ? 1 : 0 @@ -405,7 +402,8 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr // TODO: correctly interpolate ao light based on pos (evaluate once for each corner of the block) const ao = (side1Block && side2Block) ? 0 : (3 - (side1Block + side2Block + cornerBlock)) - light = (ao + 1) / 4 * cornerLightResult / 15 + // todo light should go upper on lower blocks + light = (ao + 1) / 4 * (cornerLightResult / 15) aos.push(ao) } diff --git a/prismarine-viewer/viewer/lib/mesher/world.ts b/prismarine-viewer/viewer/lib/mesher/world.ts index 63263809..9a4f0ab3 100644 --- a/prismarine-viewer/viewer/lib/mesher/world.ts +++ b/prismarine-viewer/viewer/lib/mesher/world.ts @@ -130,7 +130,9 @@ export class World { // todo export in chunk instead const hasChunkSection = (column, pos) => { if (column._getSection) return column._getSection(pos) - if (column.skyLightSections) return column.skyLightSections[getLightSectionIndex(pos, column.minY)] + if (column.skyLightSections) { + return column.skyLightSections[getLightSectionIndex(pos, column.minY)] || column.blockLightSections[getLightSectionIndex(pos, column.minY)] + } if (column.sections) return column.sections[pos.y >> 4] } diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index 84a09d45..96840af5 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -50,7 +50,7 @@ export const guiOptionsScheme: { dayCycleAndLighting: { text: 'Day Cycle', }, - smoothLighting: {}, + // smoothLighting: {}, newVersionsLighting: { text: 'Lighting in newer versions', }, From b278016460f2c659533fba05e0dfc5bac9898be9 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Mon, 22 Apr 2024 11:09:09 +0300 Subject: [PATCH 0034/1074] implement disableDuringGame --- src/optionsGuiScheme.tsx | 3 ++- src/react/OptionsItems.tsx | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index 96840af5..2457c34f 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -56,7 +56,8 @@ export const guiOptionsScheme: { }, lowMemoryMode: { text: 'Low Memory Mode', - enableWarning: 'Enabling it will make chunks load ~4x slower' + enableWarning: 'Enabling it will make chunks load ~4x slower', + disabledDuringGame: true }, }, ], diff --git a/src/react/OptionsItems.tsx b/src/react/OptionsItems.tsx index 5dd31923..1ff589ca 100644 --- a/src/react/OptionsItems.tsx +++ b/src/react/OptionsItems.tsx @@ -3,6 +3,7 @@ import { noCase } from 'change-case' import { titleCase } from 'title-case' import { useMemo } from 'react' import { options, qsOptions } from '../optionsStorage' +import { miscUiState } from '../globalState' import Button from './Button' import Slider from './Slider' import Screen from './Screen' @@ -12,6 +13,7 @@ type GeneralItem = { id?: string text?: string, disabledReason?: string, + disabledDuringGame?: boolean tooltip?: string // description?: string enableWarning?: string @@ -34,8 +36,8 @@ export type OptionMeta = GeneralItem & ({ }) // todo not reactive -const isDisabled = (id) => { - return Object.keys(qsOptions).includes(id) +const isDisabled = (item: GeneralItem) => { + return Object.keys(qsOptions).includes(item.id!) } export const OptionButton = ({ item }: { item: Extract }) => { @@ -60,6 +62,10 @@ export const OptionButton = ({ item }: { item: Extract { + if (item.disabledReason) { + await showOptionsModal(`The option is unavailable. ${item.disabledReason}`, []) + return + } if (item.enableWarning && !options[item.id!]) { const result = await showOptionsModal(item.enableWarning, ['Enable']) if (!result) return @@ -86,7 +92,7 @@ export const OptionButton = ({ item }: { item: Extract { + return { options[item.id!] = value }} unit={item.unit} valueDisplay={valueDisplay} updateOnDragEnd={item.delayApply} /> } @@ -111,9 +117,13 @@ const OptionElement = ({ item }: { item: Extract { + const { gameLoaded } = useSnapshot(miscUiState) if (item.id) { item.text ??= titleCase(noCase(item.id)) } + if (item.disabledDuringGame && gameLoaded) { + item.disabledReason = 'Cannot be changed during game' + } let baseElement = null as React.ReactNode | null if (item.type === 'toggle') baseElement = From cfb9b17fd4aff13ebad063b0253b213584fd0b6e Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 4 May 2024 13:10:03 +0300 Subject: [PATCH 0035/1074] fix: don't attack on right click --- src/worldInteractions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index b2602cc5..544027a5 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -87,7 +87,7 @@ class WorldInteraction { const entity = getEntityCursor() - if (entity) { + if (entity && e.button === 2) { bot.attack(entity) } }) From 826c66b9ec51f89c41de7dbd643a43ea9af1bc11 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 4 May 2024 16:07:18 +0300 Subject: [PATCH 0036/1074] feat: brand new Servers List UI /w auto login feature! (#110) --- config.json | 18 +- cypress/e2e/index.spec.ts | 13 +- package.json | 2 +- pnpm-lock.yaml | 94 +++++- prismarine-viewer/viewer/lib/simpleUtils.ts | 4 + src/connect.ts | 15 + src/devReload.ts | 2 +- src/downloadAndOpenFile.ts | 5 +- src/globalState.ts | 15 +- src/globals.d.ts | 10 +- src/index.ts | 41 ++- src/menus/components/button.js | 136 -------- src/menus/components/common.js | 60 ---- src/menus/components/edit_box.js | 161 ---------- src/menus/play_screen.js | 250 --------------- src/optionsGuiScheme.tsx | 2 +- src/react/AddServer.tsx | 110 +++++++ src/react/Button.tsx | 4 +- src/react/ChatProvider.tsx | 18 +- src/react/Input.tsx | 4 +- src/react/MainMenu.tsx | 4 +- src/react/MainMenuRenderApp.tsx | 4 +- src/react/MessageFormatted.tsx | 2 +- src/react/PauseScreen.tsx | 2 +- src/react/ServersList.stories.tsx | 55 ++++ src/react/ServersList.tsx | 165 ++++++++++ src/react/ServersListProvider.tsx | 339 ++++++++++++++++++++ src/react/Singleplayer.tsx | 73 +++-- src/react/SingleplayerProvider.tsx | 2 +- src/react/input.module.css | 61 ++-- src/react/simpleHooks.ts | 6 + src/react/singleplayer.module.css | 14 + src/reactUi.tsx | 2 + src/watchOptions.ts | 2 +- 34 files changed, 976 insertions(+), 719 deletions(-) create mode 100644 src/connect.ts delete mode 100644 src/menus/components/button.js delete mode 100644 src/menus/components/common.js delete mode 100644 src/menus/components/edit_box.js delete mode 100644 src/menus/play_screen.js create mode 100644 src/react/AddServer.tsx create mode 100644 src/react/ServersList.stories.tsx create mode 100644 src/react/ServersList.tsx create mode 100644 src/react/ServersListProvider.tsx create mode 100644 src/react/simpleHooks.ts diff --git a/config.json b/config.json index b7fa1d7e..c1db50c3 100644 --- a/config.json +++ b/config.json @@ -2,6 +2,20 @@ "version": 1, "defaultHost": "", "defaultProxy": "proxy.mcraft.fun", - "defaultVersion": "1.18.2", - "mapsProvider": "https://maps.mcraft.fun/" + "mapsProvider": "https://maps.mcraft.fun/", + "promoteServers": [ + { + "ip": "kaboom.pw", + "description": "Chaos and destruction server. Free for everyone." + }, + { + "ip": "go.mineberry.org", + "version": "1.18.2", + "description": "One of the best servers here. Join now!" + }, + { + "ip": "play.minemalia.com", + "description": "Only login with existing accounts." + } + ] } diff --git a/cypress/e2e/index.spec.ts b/cypress/e2e/index.spec.ts index 8b168bf1..35399393 100644 --- a/cypress/e2e/index.spec.ts +++ b/cypress/e2e/index.spec.ts @@ -53,20 +53,19 @@ it('Loads & renders singleplayer', () => { }) it.only('Joins to server', () => { - // visit('/?version=1.16.1') + visit('/?ip=localhost&version=1.16.1') window.localStorage.version = '' - visit() // todo replace with data-test - cy.get('[data-test-id="connect-screen-button"]', { includeShadowDom: true }).click() - cy.get('input#serverip', { includeShadowDom: true }).clear().focus().type('localhost') - cy.get('input#botversion', { includeShadowDom: true }).clear().focus().type('1.16.1') // todo needs to fix autoversion - cy.get('[data-test-id="connect-to-server"]', { includeShadowDom: true }).click() + // cy.get('[data-test-id="servers-screen-button"]').click() + // cy.get('[data-test-id="server-ip"]').clear().focus().type('localhost') + // cy.get('[data-test-id="version"]').clear().focus().type('1.16.1') // todo needs to fix autoversion + cy.get('[data-test-id="connect-qs"]').click() testWorldLoad() }) it('Loads & renders zip world', () => { cleanVisit() - cy.get('[data-test-id="select-file-folder"]', { includeShadowDom: true }).click({ shiftKey: true }) + cy.get('[data-test-id="select-file-folder"]').click({ shiftKey: true }) cy.get('input[type="file"]').selectFile('cypress/superflat.zip', { force: true }) testWorldLoad() }) diff --git a/package.json b/package.json index dee909a8..4d99a6d5 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "dependencies": { "@dimaka/interface": "0.0.3-alpha.0", "@floating-ui/react": "^0.26.1", + "@mui/base": "5.0.0-beta.40", "@nxg-org/mineflayer-auto-jump": "^0.7.7", "@nxg-org/mineflayer-tracker": "^1.2.1", "@react-oauth/google": "^0.12.1", @@ -60,7 +61,6 @@ "google-drive-browserfs": "github:zardoy/browserfs#google-drive", "iconify-icon": "^1.0.8", "jszip": "^3.10.1", - "lit": "^2.8.0", "lodash-es": "^4.17.21", "minecraft-assets": "^1.12.2", "minecraft-data": "3.62.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc504d17..1ef5b1d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: '@floating-ui/react': specifier: ^0.26.1 version: 0.26.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/base': + specifier: 5.0.0-beta.40 + version: 5.0.0-beta.40(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@nxg-org/mineflayer-auto-jump': specifier: ^0.7.7 version: 0.7.7 @@ -104,9 +107,6 @@ importers: jszip: specifier: ^3.10.1 version: 3.10.1 - lit: - specifier: ^2.8.0 - version: 2.8.0 lodash-es: specifier: ^4.17.21 version: 4.17.21 @@ -1110,6 +1110,10 @@ packages: resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.24.5': + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.22.5': resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} @@ -1661,6 +1665,12 @@ packages: react: ^18.2.0 react-dom: '>=16.8.0' + '@floating-ui/react-dom@2.0.9': + resolution: {integrity: sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==} + peerDependencies: + react: ^18.2.0 + react-dom: '>=16.8.0' + '@floating-ui/react@0.26.1': resolution: {integrity: sha512-5gyJIJ2tZOPMgmZ/vEcVhdmQiy75b7LPO71sYIiDsxGcZ4hxLuygQWCuT0YXHqppt//Eese+L6t5KnX/gZ3tVA==} peerDependencies: @@ -1931,6 +1941,35 @@ packages: resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==} engines: {node: '>= 10'} + '@mui/base@5.0.0-beta.40': + resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^18.2.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/types@7.2.14': + resolution: {integrity: sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/utils@5.15.14': + resolution: {integrity: sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@ndelangen/get-tarball@3.0.9': resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} @@ -2774,6 +2813,9 @@ packages: '@types/pretty-hrtime@1.0.1': resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==} + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/prop-types@15.7.5': resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} @@ -3664,6 +3706,10 @@ packages: resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} engines: {node: '>=6'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + color-convert@0.5.3: resolution: {integrity: sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==} @@ -9458,6 +9504,10 @@ snapshots: dependencies: regenerator-runtime: 0.14.0 + '@babel/runtime@7.24.5': + dependencies: + regenerator-runtime: 0.14.0 + '@babel/template@7.22.5': dependencies: '@babel/code-frame': 7.22.13 @@ -9864,6 +9914,12 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@floating-ui/react-dom@2.0.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/dom': 1.5.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@floating-ui/react@0.26.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -10279,6 +10335,34 @@ snapshots: '@msgpack/msgpack@2.8.0': {} + '@mui/base@5.0.0-beta.40(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@floating-ui/react-dom': 2.0.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/types': 7.2.14(@types/react@18.2.20) + '@mui/utils': 5.15.14(@types/react@18.2.20)(react@18.2.0) + '@popperjs/core': 2.11.8 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.20 + + '@mui/types@7.2.14(@types/react@18.2.20)': + optionalDependencies: + '@types/react': 18.2.20 + + '@mui/utils@5.15.14(@types/react@18.2.20)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@types/prop-types': 15.7.12 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 18.2.0 + optionalDependencies: + '@types/react': 18.2.20 + '@ndelangen/get-tarball@3.0.9': dependencies: gunzip-maybe: 1.4.2 @@ -11577,6 +11661,8 @@ snapshots: '@types/pretty-hrtime@1.0.1': {} + '@types/prop-types@15.7.12': {} + '@types/prop-types@15.7.5': {} '@types/qs@6.9.8': {} @@ -12705,6 +12791,8 @@ snapshots: clsx@1.1.1: {} + clsx@2.1.1: {} + color-convert@0.5.3: {} color-convert@1.9.3: diff --git a/prismarine-viewer/viewer/lib/simpleUtils.ts b/prismarine-viewer/viewer/lib/simpleUtils.ts index 5c602f1c..3f17e5ad 100644 --- a/prismarine-viewer/viewer/lib/simpleUtils.ts +++ b/prismarine-viewer/viewer/lib/simpleUtils.ts @@ -19,6 +19,10 @@ export function openURL (url, newTab = true) { } } +export const isMobile = () => { + return window.matchMedia('(pointer: coarse)').matches || navigator.userAgent.includes('Mobile') +} + export function chunkPos (pos: { x: number, z: number }) { const x = Math.floor(pos.x / 16) const z = Math.floor(pos.z / 16) diff --git a/src/connect.ts b/src/connect.ts new file mode 100644 index 00000000..5e4df859 --- /dev/null +++ b/src/connect.ts @@ -0,0 +1,15 @@ +export type ConnectOptions = { + server?: string; + singleplayer?: any; + username: string; + password?: any; + proxy?: any; + botVersion?: any; + serverOverrides?; + serverOverridesFlat?; + peerId?: string; + ignoreQs?: boolean; + onSuccessfulPlay?: () => void + autoLoginPassword?: string + serverIndex?: string +} diff --git a/src/devReload.ts b/src/devReload.ts index a89551d3..19e50263 100644 --- a/src/devReload.ts +++ b/src/devReload.ts @@ -1,5 +1,5 @@ +import { isMobile } from 'prismarine-viewer/viewer/lib/simpleUtils' import { WorldRendererThree } from 'prismarine-viewer/viewer/lib/worldrendererThree' -import { isMobile } from './menus/components/common' if (process.env.NODE_ENV === 'development') { if (sessionStorage.lastReload) { diff --git a/src/downloadAndOpenFile.ts b/src/downloadAndOpenFile.ts index b3d3a059..7ac154fc 100644 --- a/src/downloadAndOpenFile.ts +++ b/src/downloadAndOpenFile.ts @@ -20,9 +20,6 @@ const inner = async () => { if (resourcePackState.resourcePackInstalled) { if (!confirm(`You are going to install a new resource pack, which will REPLACE the current one: ${await getResourcePackName()} Continue?`)) return } - } else { - const menu = document.getElementById('play-screen') - menu.style = 'display: none;' } const name = mapUrl.slice(mapUrl.lastIndexOf('/') + 1).slice(-25) const downloadThing = texturepack ? 'texturepack' : 'world' @@ -78,7 +75,7 @@ export default async () => { try { return await inner() } catch (err) { - setLoadingScreenStatus(`Failed to download. Either refresh page or remove mapUrl param from URL. Reason: ${err.message}`) + setLoadingScreenStatus(`Failed to download. Either refresh page or remove map param from URL. Reason: ${err.message}`) return true } } diff --git a/src/globalState.ts b/src/globalState.ts index fa1c4cda..1b0526f9 100644 --- a/src/globalState.ts +++ b/src/globalState.ts @@ -56,10 +56,10 @@ const showModalInner = (modal: Modal) => { return true } -export const showModal = (elem: (HTMLElement & Record) | { reactType: string }) => { +export const showModal = (elem: /* (HTMLElement & Record) | */{ reactType: string }) => { const resolved = elem instanceof HTMLElement ? { elem: ref(elem) } : elem const curModal = activeModalStack.at(-1) - if (elem === curModal?.elem || (elem.reactType && elem.reactType === curModal?.reactType) || !showModalInner(resolved)) return + if (/* elem === curModal?.elem || */(elem.reactType && elem.reactType === curModal?.reactType) || !showModalInner(resolved)) return if (curModal) defaultModalActions.hide(curModal) activeModalStack.push(resolved) } @@ -118,11 +118,12 @@ export const showContextmenu = (items: ContextMenuItem[], { clientX, clientY }) // --- export type AppConfig = { - defaultHost?: string - defaultHostSave?: string + // defaultHost?: string + // defaultHostSave?: string defaultProxy?: string - defaultProxySave?: string - defaultVersion?: string + // defaultProxySave?: string + // defaultVersion?: string + promoteServers?: Array<{ip, description, version?}> mapsProvider?: string } @@ -130,12 +131,14 @@ export const miscUiState = proxy({ currentDisplayQr: null as string | null, currentTouch: null as boolean | null, serverIp: null as string | null, + username: '', hasErrors: false, singleplayer: false, flyingSquid: false, wanOpened: false, /** wether game hud is shown (in playing state) */ gameLoaded: false, + loadedServerIndex: '', /** currently trying to load or loaded mc version, after all data is loaded */ loadedDataVersion: null as string | null, appLoaded: false, diff --git a/src/globals.d.ts b/src/globals.d.ts index b0a8d6db..7d2a478c 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -27,7 +27,6 @@ declare const customEvents: import('typed-emitter').default<{ declare const beforeRenderFrame: Array<() => void> declare interface Document { - getElementById (id): any exitPointerLock?(): void } @@ -37,14 +36,7 @@ declare namespace JSX { } } -declare interface DocumentFragment { - getElementById (id): HTMLElement & Record - querySelector (id): HTMLElement & Record -} - -declare interface Window extends Record { - -} +declare interface Window extends Record {} type StringKeys = Extract diff --git a/src/index.ts b/src/index.ts index c4cff16a..0cd178d9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,9 +10,6 @@ import initCollisionShapes from './getCollisionShapes' import { itemsAtlases, onGameLoad } from './inventoryWindows' import { supportedVersions } from 'minecraft-protocol' -import './menus/components/button' -import './menus/components/edit_box' -import './menus/play_screen' import 'core-js/features/array/at' import 'core-js/features/promise/with-resolvers' @@ -90,6 +87,7 @@ import { saveToBrowserMemory } from './react/PauseScreen' import { ViewerWrapper } from 'prismarine-viewer/viewer/lib/viewerWrapper' import './devReload' import './water' +import { ConnectOptions } from './connect' window.debug = debug window.THREE = THREE @@ -240,13 +238,10 @@ const cleanConnectIp = (host: string | undefined, defaultPort: string | undefine } } -async function connect (connectOptions: { - server?: string; singleplayer?: any; username: string; password?: any; proxy?: any; botVersion?: any; serverOverrides?; serverOverridesFlat?; peerId?: string; ignoreQs?: boolean -}) { +async function connect (connectOptions: ConnectOptions) { if (miscUiState.gameLoaded) return miscUiState.hasErrors = false lastConnectOptions.value = connectOptions - document.getElementById('play-screen').style = 'display: none;' removePanorama() const { singleplayer } = connectOptions @@ -331,7 +326,7 @@ async function connect (connectOptions: { }) if (proxy) { - console.log(`using proxy ${proxy.host}${proxy.port && `:${proxy.port}`}`) + console.log(`using proxy ${proxy.host}:${proxy.port || location.port}`) net['setProxy']({ hostname: proxy.host, port: proxy.port }) } @@ -528,12 +523,6 @@ async function connect (connectOptions: { bot.once('login', () => { worldInteractions.initBot() - // server is ok, add it to the history - if (!connectOptions.server) return - const serverHistory: string[] = JSON.parse(localStorage.getItem('serverHistory') || '[]') - serverHistory.unshift(connectOptions.server) - localStorage.setItem('serverHistory', JSON.stringify([...new Set(serverHistory)])) - setLoadingScreenStatus('Loading world') }) @@ -548,10 +537,16 @@ async function connect (connectOptions: { window.pathfinder = pathfinder miscUiState.gameLoaded = true + miscUiState.loadedServerIndex = connectOptions.serverIndex ?? '' customEvents.emit('gameLoaded') if (p2pConnectTimeout) clearTimeout(p2pConnectTimeout) setLoadingScreenStatus('Placing blocks (starting viewer)') + localStorage.lastConnectOptions = JSON.stringify(connectOptions) + connectOptions.onSuccessfulPlay?.() + if (connectOptions.autoLoginPassword) { + bot.chat(`/login ${connectOptions.autoLoginPassword}`) + } console.log('bot spawned - starting viewer') @@ -726,6 +721,7 @@ async function connect (connectOptions: { console.log('Done!') + // todo onGameLoad(async () => { if (!viewer.world.downloadedBlockStatesData && !viewer.world.customBlockStatesData) { await new Promise(resolve => { @@ -733,6 +729,7 @@ async function connect (connectOptions: { }) } miscUiState.serverIp = server.host as string | null + miscUiState.username = username }) if (appStatusState.isError) return @@ -839,12 +836,26 @@ void window.fetch('config.json').then(async res => res.json()).then(c => c, (err miscUiState.appConfig = config }) +// qs open actions downloadAndOpenFile().then((downloadAction) => { if (downloadAction) return + const qs = new URLSearchParams(window.location.search) + if (qs.get('reconnect') && process.env.NODE_ENV === 'development') { + const ip = qs.get('ip') + const lastConnect = JSON.parse(localStorage.lastConnectOptions ?? {}) + void connect({ + ...lastConnect, // todo mixing is not good idea + ip: ip || undefined + }) + return + } + if (qs.get('ip') || qs.get('proxy')) { + // show server editor for connect or save + showModal({ reactType: 'editServer' }) + } void Promise.resolve().then(() => { // try to connect to peer - const qs = new URLSearchParams(window.location.search) const peerId = qs.get('connectPeer') const version = qs.get('peerVersion') if (peerId) { diff --git a/src/menus/components/button.js b/src/menus/components/button.js deleted file mode 100644 index 1f726821..00000000 --- a/src/menus/components/button.js +++ /dev/null @@ -1,136 +0,0 @@ -//@ts-check -import { LitElement, html, css, unsafeCSS } from 'lit' -import widgetsGui from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/widgets.png' -import { playSound, loadSound } from '../../basicSounds' - -class Button extends LitElement { - static get styles () { - return css` - .button { - --txrV: 66px; - position: relative; - width: 200px; - height: 20px; - font-family: minecraft, mojangles, monospace; - font-size: 10px; - color: white; - text-shadow: 1px 1px #222; - border: none; - z-index: 1; - outline: none; - display: inline-flex; - justify-content: center; - align-items: center; - } - - .button:hover, - .button:focus-visible { - --txrV: 86px; - } - - .button:disabled { - --txrV: 46px; - color: #A0A0A0; - text-shadow: 1px 1px #111; - } - - .button::after { - content: ''; - display: block; - position: absolute; - top: 0; - left: 0; - width: calc(50% + 1px); - height: 20px; - background: url('${unsafeCSS(widgetsGui)}'); - background-size: 256px; - background-position-y: calc(var(--txrV) * -1); - z-index: -1; - } - - .button::before { - content: ''; - display: block; - position: absolute; - top: 0; - left: 50%; - width: 50%; - height: 20px; - background: url('${unsafeCSS(widgetsGui)}'); - background-size: 256px; - background-position-x: calc(-200px + 100%); - background-position-y: calc(var(--txrV) * -1); - z-index: -1; - } - - .icon { - position: absolute; - top: 3px; - left: 3px; - font-size: 14px; - } - ` - } - - static get properties () { - return { - label: { - type: String, - attribute: 'pmui-label' - }, - width: { - type: String, - attribute: 'pmui-width' - }, - disabled: { - type: Boolean, - }, - onPress: { - type: Function, - attribute: 'pmui-click' - }, - icon: { - type: Function, - attribute: 'pmui-icon' - }, - testId: { - type: String, - attribute: 'pmui-test-id' - } - } - } - - constructor () { - super() - this.label = '' - this.icon = undefined - this.testId = undefined - this.disabled = false - this.width = '200px' - this.onPress = () => { } - } - - render () { - return html` - - ` - } - - onBtnClick (e) { - playSound('button_click.mp3') - this.dispatchEvent(new window.CustomEvent('pmui-click', { detail: e })) - } -} - -loadSound('button_click.mp3') -window.customElements.define('pmui-button', Button) diff --git a/src/menus/components/common.js b/src/menus/components/common.js deleted file mode 100644 index 83c74abd..00000000 --- a/src/menus/components/common.js +++ /dev/null @@ -1,60 +0,0 @@ -import { css } from 'lit' - -const commonCss = css` - .bg { - position: absolute; - top: 0; - left: 0; - background: rgba(0, 0, 0, 0.75); - width: 100%; - height: 100%; - } - - .title { - position: absolute; - top: 0; - left: 50%; - transform: translate(-50%); - font-size: 10px; - color: white; - text-align: center; - text-shadow: 1px 1px #222; - } - - .text { - color: white; - font-size: 10px; - text-shadow: 1px 1px #222; - } -` - -/** @returns {boolean} */ -function isMobile () { - return window.matchMedia('(pointer: coarse)').matches || navigator.userAgent.includes('Mobile') -} - -// todo there are better workarounds and proper way to detect notch -/** @returns {boolean} */ -function isProbablyIphone () { - if (!isMobile()) return false - const smallest = window.innerWidth < window.innerHeight ? window.innerWidth : window.innerHeight - return smallest < 600 -} - -/** - * @param {string} url - */ -function openURL (url, newTab = true) { - if (newTab) { - window.open(url, '_blank', 'noopener,noreferrer') - } else { - window.open(url, '_self') - } -} - -export { - isProbablyIphone, - commonCss, - isMobile, - openURL, -} diff --git a/src/menus/components/edit_box.js b/src/menus/components/edit_box.js deleted file mode 100644 index c7210d43..00000000 --- a/src/menus/components/edit_box.js +++ /dev/null @@ -1,161 +0,0 @@ -const { LitElement, html, css } = require('lit') -const { ifDefined } = require('lit/directives/if-defined.js') - -class EditBox extends LitElement { - static get styles () { - return css` - .edit-container { - position: relative; - width: 200px; - height: 20px; - background: black; - border: 1px solid grey; - } - .edit-container.invalid { - border: 1px solid #c70000; - } - - .edit-container.warning { - border: 1px solid rgb(159, 151, 0); - } - - .edit-container.invalid:hover, - .edit-container.invalid:focus-within { - border-color: red; - } - .edit-container.warning:hover, - .edit-container.warning:focus-within { - border-color: yellow; - } - - .edit-container:hover, - .edit-container:focus-within { - border-color: white; - } - - .edit-container label { - position: absolute; - z-index: 2; - pointer-events: none; - bottom: 21px; - left: 0; - font-size: 10px; - color: rgb(206, 206, 206); - text-shadow: 1px 1px black; - } - - .edit-box { - position: relative; - outline: none; - border: none; - background: none; - left: 1px; - width: calc(100% - 2px); - height: 100%; - font-family: minecraft, mojangles, monospace; - font-size: 10px; - color: white; - text-shadow: 1px 1px #222; - } - - input::-webkit-outer-spin-button, - input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; - } - - /* Firefox */ - input[type=number] { - appearance: textfield; - -moz-appearance: textfield; - } - ` - } - - constructor () { - super() - this.width = '200px' - this.id = '' - this.value = '' - this.label = '' - this.required = false - } - - static get properties () { - return { - width: { - type: String, - attribute: 'pmui-width' - }, - id: { - type: String, - attribute: 'pmui-id' - }, - label: { - type: String, - attribute: 'pmui-label' - }, - value: { - type: String, - attribute: 'pmui-value' - }, - autocompleteValues: { - type: Array, - }, - type: { - type: String, - attribute: 'pmui-type' - }, - inputMode: { - type: String, - attribute: 'pmui-inputmode' - }, - required: { - type: Boolean, - attribute: 'pmui-required' - }, - placeholder: { - type: String, - attribute: 'pmui-placeholder' - }, - state: { - type: String, - attribute: true - } - } - } - - render () { - return html` -
- - ${this.autocompleteValues ? html` - - ${this.autocompleteValues.map(value => html` - - `)} - - ` : ''} - { this.value = this.inputMode === 'decimal' ? value.replaceAll(',', '.') : value }} - class="edit-box"> -
- ` - } -} - -window.customElements.define('pmui-editbox', EditBox) diff --git a/src/menus/play_screen.js b/src/menus/play_screen.js deleted file mode 100644 index e9517d9e..00000000 --- a/src/menus/play_screen.js +++ /dev/null @@ -1,250 +0,0 @@ -//@ts-check -const { LitElement, html, css } = require('lit') -const viewerSupportedVersions = require('prismarine-viewer/viewer/supportedVersions.json') -const { supportedVersions } = require('minecraft-protocol') -const { hideCurrentModal, miscUiState } = require('../globalState') -const { commonCss } = require('./components/common') - -const fullySupporedVersions = viewerSupportedVersions - -class PlayScreen extends LitElement { - static get styles () { - return css` - ${commonCss} - .title { - top: 12px; - } - - .edit-boxes { - position: fixed; - top: 59px; - left: 50%; - display: flex; - flex-direction: column; - gap: 14px 0; - transform: translate(-50%); - width: 310px; - } - - .wrapper { - width: 100%; - display: flex; - flex-direction: row; - gap: 0 4px; - } - - .button-wrapper { - display: flex; - flex-direction: row; - gap: 0 4px; - position: absolute; - bottom: 9px; - left: 50%; - transform: translate(-50%); - width: 310px; - } - - .extra-info-version { - font-size: 10px; - color: rgb(206, 206, 206); - text-shadow: 1px 1px black; - position: absolute; - left: calc(50% + 2px); - bottom: -34px; - } - - .extra-info-proxy { - font-size: 8px; - color: rgb(206, 206, 206); - text-shadow: 1px 1px black; - margin:0; - margin-top:-12px; - } - - a { - color: white; - } - ` - } - - static get properties () { - return { - server: { type: String }, - serverImplicit: { type: String }, - serverport: { type: Number }, - proxy: { type: String }, - proxyImplicit: { type: String }, - proxyport: { type: Number }, - username: { type: String }, - password: { type: String }, - version: { type: String } - } - } - - constructor () { - super() - this.version = '' - this.serverport = '' - this.proxyport = '' - this.server = '' - this.proxy = '' - this.username = '' - this.password = '' - this.serverImplicit = '' - this.proxyImplicit = '' - // todo set them sooner add indicator - void window.fetch('config.json').then(async res => res.json()).then(c => c, (error) => { - console.warn('Failed to load optional config.json', error) - return {} - }).then(async (/** @type {import('../globalState').AppConfig} */config) => { - miscUiState.appConfig = config - const params = new URLSearchParams(window.location.search) - - const getParam = (localStorageKey, qs = localStorageKey) => { - const qsValue = qs ? params.get(qs) : undefined - if (qsValue) { - this.style.display = 'block' - } - return qsValue || window.localStorage.getItem(localStorageKey) - } - - if (config.defaultHost === '' || config.defaultHostSave === '') { - let proxy = config.defaultProxy || config.defaultProxySave || params.get('proxy') - const cleanUrl = url => url.replaceAll(/(https?:\/\/|\/$)/g, '') - if (proxy && cleanUrl(proxy) !== cleanUrl(location.origin + location.pathname)) { - if (!proxy.startsWith('http')) proxy = 'https://' + proxy - const proxyConfig = await fetch(proxy + '/config.json').then(async res => res.json()).then(c => c, (error) => { - console.warn(`Failed to load config.json from proxy ${proxy}`, error) - return {} - }) - if (config.defaultHost === '' && proxyConfig.defaultHost) { - config.defaultHost = proxyConfig.defaultHost - } else { - config.defaultHost = '' - } - if (config.defaultHostSave === '' && proxyConfig.defaultHostSave) { - config.defaultHostSave = proxyConfig.defaultHostSave - } else { - config.defaultHostSave = '' - } - } - this.server = this.serverImplicit - } - - this.serverImplicit = config.defaultHost ?? '' - this.proxyImplicit = config.defaultProxy ?? '' - this.server = getParam('server', 'ip') ?? config.defaultHostSave ?? '' - this.proxy = getParam('proxy') ?? config.defaultProxySave ?? '' - this.version = getParam('version') || (window.localStorage.getItem('version') ?? config.defaultVersion ?? '') - this.username = getParam('username') || 'pviewer' + (Math.floor(Math.random() * 1000)) - this.password = getParam('password') || '' - if (process.env.NODE_ENV === 'development' && params.get('reconnect') && this.server && this.username) { - this.onConnectPress() - } - }) - } - - render () { - return html` -
- -

Join a Server

- -
-
- { this.server = e.target.value }} - > - { this.serverport = e.target.value }} - > -
-
- { this.proxy = e.target.value }} - > - { this.proxyport = e.target.value }} - > -
-
-

Enter proxy url you want to use. Learn more.

-
-
- { this.username = e.target.value }} - > - { this.version = e.target.value = e.target.value.replaceAll(',', '.') }} - > -
-

Leave blank and it will be chosen automatically

-
- -
- - hideCurrentModal()}> -
- ` - } - - onConnectPress () { - const server = this.server ? `${this.server}${this.serverport && `:${this.serverport}`}` : this.serverImplicit - const proxy = this.proxy ? `${this.proxy}${this.proxyport && `:${this.proxyport}`}` : this.proxyImplicit - - window.localStorage.setItem('username', this.username) - window.localStorage.setItem('password', this.password) - window.localStorage.setItem('server', server) - window.localStorage.setItem('proxy', proxy) - window.localStorage.setItem('version', this.version) - - window.dispatchEvent(new window.CustomEvent('connect', { - detail: { - server, - proxy, - username: this.username, - password: this.password, - botVersion: this.version - } - })) - } -} - -window.customElements.define('pmui-playscreen', PlayScreen) diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index 2457c34f..1c92a39c 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { useSnapshot } from 'valtio' +import { openURL } from 'prismarine-viewer/viewer/lib/simpleUtils' import { miscUiState, openOptionsMenu, showModal } from './globalState' -import { openURL } from './menus/components/common' import { AppOptions, options } from './optionsStorage' import Button from './react/Button' import { OptionMeta, OptionSlider } from './react/OptionsItems' diff --git a/src/react/AddServer.tsx b/src/react/AddServer.tsx new file mode 100644 index 00000000..bae39ac9 --- /dev/null +++ b/src/react/AddServer.tsx @@ -0,0 +1,110 @@ +import React from 'react' +import Screen from './Screen' +import Input from './Input' +import Button from './Button' +import { useIsSmallWidth } from './simpleHooks' + +export interface NewServerInfo { + ip: string + name?: string + versionOverride?: string + proxyOverride?: string + usernameOverride?: string + passwordOverride?: string +} + +interface Props { + onBack: () => void + onConfirm: (info: NewServerInfo) => void + title?: string + initialData?: NewServerInfo + parseQs?: boolean + onQsConnect?: (server: NewServerInfo) => void + defaults?: Pick +} + +export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQs, onQsConnect, defaults }: Props) => { + const qsParams = parseQs ? new URLSearchParams(window.location.search) : undefined + + const [serverName, setServerName] = React.useState(initialData?.name ?? qsParams?.get('name') ?? '') + + const ipWithoutPort = initialData?.ip.split(':')[0] + const port = initialData?.ip.split(':')[1] + + const [serverIp, setServerIp] = React.useState(ipWithoutPort ?? qsParams?.get('ip') ?? '') + const [serverPort, setServerPort] = React.useState(port ?? '') + const [versionOverride, setVersionOverride] = React.useState(initialData?.versionOverride ?? qsParams?.get('version') ?? '') + const [proxyOverride, setProxyOverride] = React.useState(initialData?.proxyOverride ?? qsParams?.get('proxy') ?? '') + const [usernameOverride, setUsernameOverride] = React.useState(initialData?.usernameOverride ?? qsParams?.get('username') ?? '') + const [passwordOverride, setPasswordOverride] = React.useState(initialData?.passwordOverride ?? qsParams?.get('password') ?? '') + const smallWidth = useIsSmallWidth() + + return +
{ + e.preventDefault() + let ip = serverIp.includes(':') ? serverIp : `${serverIp}:${serverPort}` + ip = ip.replace(/:$/, '') + onConfirm({ + name: serverName, + ip, + versionOverride, + proxyOverride, + usernameOverride, + passwordOverride + }) + }} + > +
+
+ setServerName(value)} placeholder='Defaults to IP' /> +
+ setServerIp(value)} /> + setServerPort(value)} placeholder='25565' /> +
Overrides:
+ setVersionOverride(value)} placeholder='Optional, but recommended to specify' /> + setProxyOverride(value)} placeholder={defaults?.proxyOverride} /> + setUsernameOverride(value)} placeholder={defaults?.usernameOverride} /> + setPasswordOverride(value)} /* placeholder='For advanced usage only' */ /> + + + {qsParams?.get('ip') &&
+ +
} +
+
+
+} + +const InputWithLabel = ({ label, span, ...props }: React.ComponentProps & { label, span?}) => { + return
+ + +
+} diff --git a/src/react/Button.tsx b/src/react/Button.tsx index 4d346b14..db7e575a 100644 --- a/src/react/Button.tsx +++ b/src/react/Button.tsx @@ -15,7 +15,7 @@ interface Props extends React.ComponentProps<'button'> { void loadSound('button_click.mp3') -export default (({ label, icon, children, inScreen, rootRef, ...args }) => { +export default (({ label, icon, children, inScreen, rootRef, type = 'button', ...args }) => { const onClick = (e) => { void playSound('button_click.mp3') args.onClick?.(e) @@ -29,7 +29,7 @@ export default (({ label, icon, children, inScreen, rootRef, ...args }) => { args.style.width = 20 } - return +
+ } + searchRowChildrenOverride={ +
+
+ Proxy: +
+ + {autocomplete.groupedOptions &&
    + {autocomplete.groupedOptions.map((proxy, index) => { + const { itemRef, ...optionProps } = autocomplete.getOptionProps({ option: proxy, index }) + return + })} +
} +
+ + setUsername(value)} /> +
+
+ } + serversLayout + onWorldAction={(action, serverName) => { + if (action === 'load') { + joinServer(serverName, {}) + } + props.onWorldAction?.(action, serverName) + }} + /> +} + +type Status = 'unknown' | 'error' | 'success' + +const ProxyRender = ({ status, ip, inputRef, value, setValue, ...props }: { + status: Status + ip: string +} & Record) => { + const iconPerStatus = { + unknown: 'cellular-signal-0', + error: 'cellular-signal-off', + success: 'cellular-signal-3', + } + + return
+ setValue?.(value)} + onChange={props.onChange} + /> +
+ +
+ {ip} +
+
+
+} diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx new file mode 100644 index 00000000..ecd74916 --- /dev/null +++ b/src/react/ServersListProvider.tsx @@ -0,0 +1,339 @@ +import { useEffect, useMemo, useState } from 'react' +import { proxy } from 'valtio' +import { qsOptions } from '../optionsStorage' +import { ConnectOptions } from '../connect' +import { hideCurrentModal, miscUiState, showModal } from '../globalState' +import ServersList from './ServersList' +import AddServer from './AddServer' +import { useDidUpdateEffect, useIsModalActive } from './utils' + +interface StoreServerItem { + ip: string, + name?: string + version?: string + lastJoined?: number + description?: string + proxyOverride?: string + usernameOverride?: string + passwordOverride?: string + optionsOverride?: Record + autoLogin?: Record +} + +type ServerResponse = { + version: { + name_raw: string + } + // display tooltip + players?: { + online: number + max: number + list: Array<{ + name_raw: string + name_clean: string + }> + } + icon: string + motd: { + raw: string + } + // todo circle error icon + mods?: Array<{ name, version }> + // todo display via hammer icon + software?: string + plugins?: Array<{ name, version }> +} + +type AdditionalDisplayData = { + formattedText: string + textNameRight: string + icon?: string +} + +const getInitialServersList = () => { + if (localStorage['serversList']) return JSON.parse(localStorage['serversList']) as StoreServerItem[] + + const servers = [] as StoreServerItem[] + + const legacyServersList = localStorage['serverHistory'] ? JSON.parse(localStorage['serverHistory']) as string[] : null + if (legacyServersList) { + for (const server of legacyServersList) { + if (!server || localStorage['server'] === server) continue + servers.push({ ip: server, lastJoined: Date.now() }) + } + } + + if (localStorage['server']) { + const legacyLastJoinedServer: StoreServerItem = { + ip: localStorage['server'], + passwordOverride: localStorage['password'], + version: localStorage['version'], + lastJoined: Date.now() + } + servers.push(legacyLastJoinedServer) + } + + if (servers.length === 0) { // server list is empty, let's suggest some + for (const server of miscUiState.appConfig?.promoteServers ?? []) { + servers.push({ + ip: server.ip, + description: server.description, + version: server.version, + }) + } + } + + return servers +} + +const setNewServersList = (serversList: StoreServerItem[]) => { + localStorage['serversList'] = JSON.stringify(serversList) + + // cleanup legacy + localStorage.removeItem('serverHistory') + localStorage.removeItem('server') + localStorage.removeItem('password') + localStorage.removeItem('version') +} + +const getInitialProxies = () => { + const proxies = [] as string[] + if (miscUiState.appConfig?.defaultProxy) { + proxies.push(miscUiState.appConfig.defaultProxy) + } + if (localStorage['proxy']) { + proxies.push(localStorage['proxy']) + localStorage.removeItem('proxy') + } + return proxies +} + +export const updateLoadedServerData = (callback: (data: StoreServerItem) => StoreServerItem) => { + // function assumes component is not mounted to avoid sync issues after save + const { loadedServerIndex } = miscUiState + if (!loadedServerIndex) return + const servers = getInitialServersList() + const server = servers[loadedServerIndex] + servers[loadedServerIndex] = callback(server) + setNewServersList(servers) +} + +const Inner = () => { + const [proxies, setProxies] = useState(localStorage['proxies'] ? JSON.parse(localStorage['proxies']) : getInitialProxies()) + const [selectedProxy, setSelectedProxy] = useState(localStorage.getItem('selectedProxy') ?? proxies?.[0] ?? '') + const [serverEditScreen, setServerEditScreen] = useState(null) // true for add + const [defaultUsername, setDefaultUsername] = useState(localStorage['username'] ?? (`mcrafter${Math.floor(Math.random() * 1000)}`)) + + useEffect(() => { + localStorage.setItem('username', defaultUsername) + }, [defaultUsername]) + + useEffect(() => { + // TODO! do not unmount on connecting screen + // if (proxies.length) { + // localStorage.setItem('proxies', JSON.stringify(proxies)) + // } + // if (selectedProxy) { + // localStorage.setItem('selectedProxy', selectedProxy) + // } + }, [proxies]) + + const [serversList, setServersList] = useState(() => getInitialServersList()) + const [additionalData, setAdditionalData] = useState>({}) + + useDidUpdateEffect(() => { + // save data only on user changes + setNewServersList(serversList) + }, [serversList]) + + // by lastJoined + const serversListSorted = useMemo(() => { + return serversList.map((server, index) => ({ ...server, index })).sort((a, b) => (b.lastJoined ?? 0) - (a.lastJoined ?? 0)) + }, [serversList]) + + useEffect(() => { + const update = async () => { + for (const server of serversListSorted) { + const isInLocalNetwork = server.ip.startsWith('192.168.') || server.ip.startsWith('10.') || server.ip.startsWith('172.') || server.ip.startsWith('127.') || server.ip.startsWith('localhost') + if (isInLocalNetwork) continue + // eslint-disable-next-line no-await-in-loop + await fetch(`https://api.mcstatus.io/v2/status/java/${server.ip}`).then(async r => r.json()).then((data: ServerResponse) => { + const versionClean = data.version.name_raw.replace(/^[^\d.]+/, '') + setAdditionalData(old => { + return ({ + ...old, + [server.ip]: { + formattedText: data.motd.raw, + textNameRight: `${versionClean} ${data.players?.online ?? '??'}/${data.players?.max ?? '??'}`, + icon: data.icon, + } + }) + }) + }) + } + } + void update() + }, [serversListSorted]) + + const isEditScreenModal = useIsModalActive('editServer') + + useEffect(() => { + if (!isEditScreenModal) { + setServerEditScreen(null) + } + }, [isEditScreenModal]) + + useEffect(() => { + if (serverEditScreen && !isEditScreenModal) { + showModal({ reactType: 'editServer' }) + } + }, [serverEditScreen]) + + if (isEditScreenModal) { + return { + hideCurrentModal() + }} + onConfirm={(info) => { + if (!serverEditScreen) return + if (serverEditScreen === true) { + const server: StoreServerItem = { ...info, lastJoined: Date.now() } // so it appears first + setServersList(old => [...old, server]) + } else { + const index = serversList.indexOf(serverEditScreen) + serversList[index] = info + setServersList([...serversList]) + } + setServerEditScreen(null) + }} + initialData={!serverEditScreen || serverEditScreen === true ? undefined : serverEditScreen} + onQsConnect={(info) => { + const connectOptions: ConnectOptions = { + username: info.usernameOverride || defaultUsername, + server: info.ip, + proxy: info.proxyOverride || selectedProxy, + botVersion: info.versionOverride, + password: info.passwordOverride, + ignoreQs: true, + } + dispatchEvent(new CustomEvent('connect', { detail: connectOptions })) + }} + /> + } + + return { + let ip = indexOrIp + let server: StoreServerItem | undefined + if (overrides.shouldSave === undefined) { + // hack: inner component doesn't know of overrides for existing servers + server = serversListSorted.find(s => s.index.toString() === indexOrIp)! + ip = server.ip + overrides = server + } + + const lastJoinedUsername = serversListSorted.find(s => s.usernameOverride)?.usernameOverride + let username = overrides.username || defaultUsername + if (!username) { + username = prompt('Username', lastJoinedUsername || '') + if (!username) return + setDefaultUsername(username) + } + const options = { + username, + server: ip, + proxy: overrides.proxy || selectedProxy, + botVersion: overrides.version, + password: overrides.password, + ignoreQs: true, + autoLoginPassword: server?.autoLogin?.[username], + onSuccessfulPlay () { + if (overrides.shouldSave && !serversList.some(s => s.ip === ip)) { + const newServersList = [...serversList, { + ip, + lastJoined: Date.now(), + }] + // setServersList(newServersList) + setNewServersList(newServersList) // component is not mounted + } + + if (overrides.shouldSave === undefined) { // loading saved + // find and update + const server = serversList.find(s => s.ip === ip) + if (server) { + server.lastJoined = Date.now() + // setServersList([...serversList]) + setNewServersList(serversList) // component is not mounted + } + } + + // save new selected proxy (if new) + if (!proxies.includes(selectedProxy)) { + // setProxies([...proxies, selectedProxy]) + localStorage.setItem('proxies', JSON.stringify([...proxies, selectedProxy])) + } + if (selectedProxy) { + localStorage.setItem('selectedProxy', selectedProxy) + } + }, + serverIndex: overrides.shouldSave ? serversList.length.toString() : indexOrIp // assume last + } satisfies ConnectOptions + dispatchEvent(new CustomEvent('connect', { detail: options })) + // qsOptions + }} + username={defaultUsername} + setUsername={setDefaultUsername} + onWorldAction={(action, index) => { + const server = serversList[index] + if (!server) return + + if (action === 'edit') { + setServerEditScreen(server) + } + if (action === 'delete') { + setServersList(old => old.filter(s => s !== server)) + } + }} + onGeneralAction={(action) => { + if (action === 'create') { + setServerEditScreen(true) + } + if (action === 'cancel') { + hideCurrentModal() + } + }} + worldData={serversListSorted.map(server => { + const additional = additionalData[server.ip] + return { + name: server.index.toString(), + title: server.name || server.ip, + detail: (server.version ?? '') + ' ' + (server.usernameOverride ?? ''), + // lastPlayed: server.lastJoined, + formattedTextOverride: additional?.formattedText, + worldNameRight: additional?.textNameRight ?? '', + iconSrc: additional?.icon, + } + })} + initialProxies={{ + proxies, + selected: selectedProxy, + }} + updateProxies={({ proxies, selected }) => { + // new proxy is saved in joinServer + setProxies(proxies) + setSelectedProxy(selected) + }} + /> +} + +export default () => { + const editServerModalActive = useIsModalActive('editServer') + const isServersListModalActive = useIsModalActive('serversList') + const eitherModal = isServersListModalActive || editServerModalActive + return eitherModal ? : null +} diff --git a/src/react/Singleplayer.tsx b/src/react/Singleplayer.tsx index a4d8c559..76a75e82 100644 --- a/src/react/Singleplayer.tsx +++ b/src/react/Singleplayer.tsx @@ -10,22 +10,25 @@ import styles from './singleplayer.module.css' import Input from './Input' import Button from './Button' import Tabs from './Tabs' +import MessageFormattedString from './MessageFormattedString' export interface WorldProps { name: string title: string - iconBase64?: string size?: number lastPlayed?: number isFocused?: boolean - onFocus?: (name: string) => void + iconSrc?: string detail?: string + formattedTextOverride?: string + worldNameRight?: string + onFocus?: (name: string) => void onInteraction?(interaction: 'enter' | 'space') } -const World = ({ name, isFocused, title, lastPlayed, size, detail = '', onFocus, onInteraction, iconBase64 }: WorldProps) => { +const World = ({ name, isFocused, title, lastPlayed, size, detail = '', onFocus, onInteraction, iconSrc, formattedTextOverride, worldNameRight }: WorldProps) => { const timeRelativeFormatted = useMemo(() => { - if (!lastPlayed) return + if (!lastPlayed) return '' const formatter = new Intl.RelativeTimeFormat('en', { numeric: 'auto' }) const diff = Date.now() - lastPlayed const minutes = Math.floor(diff / 1000 / 60) @@ -38,7 +41,7 @@ const World = ({ name, isFocused, title, lastPlayed, size, detail = '', onFocus, return formatter.format(-minutes, 'minute') }, [lastPlayed]) const sizeFormatted = useMemo(() => { - if (!size) return + if (!size) return '' return filesize(size) }, [size]) @@ -48,18 +51,29 @@ const World = ({ name, isFocused, title, lastPlayed, size, detail = '', onFocus, onInteraction?.(e.code === 'Enter' ? 'enter' : 'space') } }} onDoubleClick={() => onInteraction?.('enter')}> - world preview + world preview
-
{title}
-
{timeRelativeFormatted} {detail.slice(-30)}
-
{sizeFormatted}
+
+
{title}
+
{worldNameRight}
+
+ {formattedTextOverride ?
+ +
: + <> +
{timeRelativeFormatted} {detail.slice(-30)}
+
{sizeFormatted}
+ }
} interface Props { worldData: WorldProps[] | null // null means loading - providers: Record + serversLayout?: boolean + firstRowChildrenOverride?: React.ReactNode + searchRowChildrenOverride?: React.ReactNode + providers?: Record activeProvider?: string setActiveProvider?: (provider: string) => void providerActions?: Record void) | undefined | JSX.Element> @@ -74,9 +88,24 @@ interface Props { onGeneralAction (action: 'cancel' | 'create'): void } -export default ({ worldData, onGeneralAction, onWorldAction, activeProvider, setActiveProvider, providerActions, providers, disabledProviders, error, isReadonly, warning, warningAction, warningActionLabel }: Props) => { +export default ({ + worldData, + onGeneralAction, + onWorldAction, + firstRowChildrenOverride, + serversLayout, + searchRowChildrenOverride, + activeProvider, + setActiveProvider, + providerActions, + providers = {}, + disabledProviders, + error, + isReadonly, + warning, warningAction, warningActionLabel +}: Props) => { const containerRef = useRef() - const firstButton = useRef(null!) + const firstButton = useRef(null) useTypedEventListener(window, 'keydown', (e) => { if (e.code === 'ArrowDown' || e.code === 'ArrowUp') { @@ -100,10 +129,10 @@ export default ({ worldData, onGeneralAction, onWorldAction, activeProvider, set return
-
- Select Saved World + {serversLayout ? 'Join Java Servers' : 'Select Saved World'} + {searchRowChildrenOverride ||
setSearch(value)} /> -
+
}
{ setActiveProvider?.(tab as any) @@ -147,15 +176,17 @@ export default ({ worldData, onGeneralAction, onWorldAction, activeProvider, set }
-
-
- +
+ {firstRowChildrenOverride ||
+ -
+
}
- + {serversLayout ? : } - + {serversLayout ? + : + }
diff --git a/src/react/SingleplayerProvider.tsx b/src/react/SingleplayerProvider.tsx index 8eb3af0f..35704e8e 100644 --- a/src/react/SingleplayerProvider.tsx +++ b/src/react/SingleplayerProvider.tsx @@ -85,7 +85,7 @@ export const readWorlds = (abortController: AbortController) => { title: levelName ?? folder, lastPlayed: levelDat.LastPlayed && longArrayToNumber(levelDat.LastPlayed), detail: `${levelDat.Version?.Name ?? 'unknown version'}, ${folder}`, - iconBase64, + iconSrc: iconBase64 ? `data:image/png;base64,${iconBase64}` : undefined, size, } satisfies WorldProps }))).filter((x, i) => { diff --git a/src/react/input.module.css b/src/react/input.module.css index 9ad01c90..ce889645 100644 --- a/src/react/input.module.css +++ b/src/react/input.module.css @@ -1,39 +1,40 @@ .container { - position: relative; - width: 200px; - height: 20px; - background: black; - border: 1px solid grey; - box-sizing: content-box; + position: relative; + width: 200px; + height: 20px; + background: black; + border: 1px solid grey; + box-sizing: content-box; } .input { - position: relative; - outline: none; - border: none; - background: none; - left: 1px; - width: calc(100% - 2px); - height: 100%; - font-family: minecraft, mojangles, monospace; - font-size: 10px; - color: white; - text-shadow: 1px 1px #222; + position: relative; + outline: none; + border: none; + background: none; + left: 1px; + width: calc(100% - 2px); + height: 100%; + font-family: minecraft, mojangles, monospace; + font-size: 10px; + color: white; + text-shadow: 1px 1px #222; + padding-left: 2px; } .container:hover, - .container:focus-within { - border-color: white; - } +.container:focus-within { + border-color: white; +} - input::-webkit-outer-spin-button, - input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; - } +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} - /* Firefox */ - input[type=number] { - appearance: textfield; - -moz-appearance: textfield; - } +/* Firefox */ +input[type=number] { + appearance: textfield; + -moz-appearance: textfield; +} diff --git a/src/react/simpleHooks.ts b/src/react/simpleHooks.ts new file mode 100644 index 00000000..9202bfa2 --- /dev/null +++ b/src/react/simpleHooks.ts @@ -0,0 +1,6 @@ +import { useMedia } from 'react-use' + +const SMALL_SCREEN_MEDIA = '@media (max-width: 440px)' +export const useIsSmallWidth = () => { + return useMedia(SMALL_SCREEN_MEDIA.replace('@media ', '')) +} diff --git a/src/react/singleplayer.module.css b/src/react/singleplayer.module.css index 1e092b39..fef43b76 100644 --- a/src/react/singleplayer.module.css +++ b/src/react/singleplayer.module.css @@ -28,11 +28,25 @@ display: flex; outline: none; } +.world_title { + display: flex; + justify-content: space-between; + align-items: center; +} +.world_title_right { + color: #999; + font-size: 9px; +} .world_info { margin-left: 3px; display: flex; flex-direction: column; font-size: 11px; + white-space: nowrap; +} +.world_info_formatted { + font-size: 10px; + white-space: pre; } .world_info_description_line { color: #999; diff --git a/src/reactUi.tsx b/src/reactUi.tsx index 4c5f1516..419d8dff 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -33,6 +33,7 @@ import TouchAreasControlsProvider from './react/TouchAreasControlsProvider' import NotificationProvider, { showNotification } from './react/NotificationProvider' import HotbarRenderApp from './react/HotbarRenderApp' import Crosshair from './react/Crosshair' +import ServersListProvider from './react/ServersListProvider' const RobustPortal = ({ children, to }) => { return createPortal({children}, to) @@ -139,6 +140,7 @@ const App = () => { + diff --git a/src/watchOptions.ts b/src/watchOptions.ts index 009463be..56fc9c2c 100644 --- a/src/watchOptions.ts +++ b/src/watchOptions.ts @@ -2,10 +2,10 @@ import { subscribeKey } from 'valtio/utils' import { WorldRendererThree } from 'prismarine-viewer/viewer/lib/worldrendererThree' +import { isMobile } from 'prismarine-viewer/viewer/lib/simpleUtils' import { options, watchValue } from './optionsStorage' import { reloadChunks } from './utils' import { miscUiState } from './globalState' -import { isMobile } from './menus/components/common' subscribeKey(options, 'renderDistance', reloadChunks) subscribeKey(options, 'multiplayerRenderDistance', reloadChunks) From ab9e5db4453e7a31d33f30e0e4439030a4e517d2 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sun, 5 May 2024 02:58:08 +0300 Subject: [PATCH 0037/1074] up flying squid --- package.json | 4 +- pnpm-lock.yaml | 165 +++++++++++++------------------------------------ 2 files changed, 44 insertions(+), 125 deletions(-) diff --git a/package.json b/package.json index 4d99a6d5..d1f4c7eb 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "esbuild": "^0.19.3", "esbuild-plugin-polyfill-node": "^0.3.0", "express": "^4.18.2", - "flying-squid": "npm:@zardoy/flying-squid@^0.0.17", + "flying-squid": "npm:@zardoy/flying-squid@^0.0.19", "fs-extra": "^11.1.1", "google-drive-browserfs": "github:zardoy/browserfs#google-drive", "iconify-icon": "^1.0.8", @@ -96,8 +96,6 @@ "@storybook/blocks": "^7.4.6", "@storybook/react": "^7.4.6", "@storybook/react-vite": "^7.4.6", - "@storybook/web-components": "^7.4.6", - "@storybook/web-components-vite": "^7.4.6", "@types/lodash-es": "^4.17.9", "@types/react-transition-group": "^4.4.7", "@types/stats.js": "^0.17.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ef5b1d0..9d1b69cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -93,8 +93,8 @@ importers: specifier: ^4.18.2 version: 4.18.2 flying-squid: - specifier: npm:@zardoy/flying-squid@^0.0.17 - version: '@zardoy/flying-squid@0.0.17(encoding@0.1.13)' + specifier: npm:@zardoy/flying-squid@^0.0.19 + version: '@zardoy/flying-squid@0.0.19(encoding@0.1.13)' fs-extra: specifier: ^11.1.1 version: 11.1.1 @@ -130,7 +130,7 @@ importers: version: 6.1.1 prismarine-provider-anvil: specifier: github:zardoy/prismarine-provider-anvil#everything - version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0) + version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.62.0) prosemirror-example-setup: specifier: ^1.2.2 version: 1.2.2 @@ -211,12 +211,6 @@ importers: '@storybook/react-vite': specifier: ^7.4.6 version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) - '@storybook/web-components': - specifier: ^7.4.6 - version: 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/web-components-vite': - specifier: ^7.4.6 - version: 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) '@types/lodash-es': specifier: ^4.17.9 version: 4.17.9 @@ -409,7 +403,7 @@ importers: dependencies: vite: specifier: ^4.4.9 - version: 4.4.10(@types/node@20.12.7)(terser@5.19.2) + version: 4.4.10(@types/node@20.12.8)(terser@5.19.2) packages: @@ -1922,12 +1916,6 @@ packages: '@juggle/resize-observer@3.3.1': resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==} - '@lit-labs/ssr-dom-shim@1.1.1': - resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==} - - '@lit/reactive-element@1.6.3': - resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} - '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true @@ -2619,19 +2607,6 @@ packages: '@storybook/types@7.4.6': resolution: {integrity: sha512-6QLXtMVsFZFpzPkdGWsu/iuc8na9dnS67AMOBKm5qCLPwtUJOYkwhMdFRSSeJthLRpzV7JLAL8Kwvl7MFP3QSw==} - '@storybook/web-components-vite@7.4.6': - resolution: {integrity: sha512-L/y6MTLbqfHaM0faK9Yl8n5PIyW4daZrtk7NfaOT6UjgNFjOx3o4CctYew6oj90cNk5HdZQX2OZny043GxDLZw==} - engines: {node: ^14.18 || >=16} - peerDependencies: - react: ^18.2.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - - '@storybook/web-components@7.4.6': - resolution: {integrity: sha512-HWqkZtdkmNimkzMmE0mGRys2ee9qgEeDVCruiffySVquBRMQ6n1xgvHZYaO6OLlMeH0YHPg083ZqUasS5GsYVg==} - engines: {node: '>=16.0.0'} - peerDependencies: - lit: ^2.0.0 - '@surma/rollup-plugin-off-main-thread@2.2.3': resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} @@ -2792,8 +2767,8 @@ packages: '@types/node@20.11.19': resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} - '@types/node@20.12.7': - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@20.12.8': + resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} '@types/node@20.8.0': resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} @@ -2837,8 +2812,8 @@ packages: '@types/react@18.2.20': resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==} - '@types/readable-stream@4.0.11': - resolution: {integrity: sha512-R3eUMUTTKoIoaz7UpYLxvZCrOmCRPRbAmoDDHKcimTEySltaJhF8hLzj4+EzyDifiX5eK6oDQGSfmNnXjxZzYQ==} + '@types/readable-stream@4.0.12': + resolution: {integrity: sha512-SCaw+bs9o/HCX1eTa3glTcQgW1oPxof49mqP2Qikik3xzTimNv2M4p43BQHhBuf7CwOJdQW0s1SrWU3MZxz6lw==} '@types/resolve@1.17.1': resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} @@ -3059,8 +3034,8 @@ packages: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - '@zardoy/flying-squid@0.0.17': - resolution: {integrity: sha512-qGCS7aRmMflDdIN7IGLpDc0W2gUYc5OQ45KEn3XtcxwOP0Q7zyvo3mnsD5KSV3n2lyhQ4783Ov8V6J86xea0lw==} + '@zardoy/flying-squid@0.0.19': + resolution: {integrity: sha512-q0eW/AO66bA5YQfGd+mnZjenZ7oocCrxlU4ktJbS4vfhjC2PPLzXLpWhXnzqN9A3VSzMzraV/9SY9kGQkw8xNA==} engines: {node: '>=8'} hasBin: true @@ -4295,8 +4270,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} es-module-lexer@0.9.3: @@ -4963,6 +4938,10 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -5697,15 +5676,6 @@ packages: enquirer: optional: true - lit-element@3.3.3: - resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} - - lit-html@2.8.0: - resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} - - lit@2.8.0: - resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} - load-bmfont@1.4.1: resolution: {integrity: sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==} @@ -6742,8 +6712,8 @@ packages: prismarine-physics@1.8.0: resolution: {integrity: sha512-gbM+S+bmVtOKVv+Z0WGaHMeEeBHISIDsRDRlv8sr0dex3ZJRhuq8djA02CBreguXtI18ZKh6q3TSj2qDr45NHA==} - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f} + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29} version: 2.7.0 prismarine-realms@1.3.2: @@ -6937,6 +6907,9 @@ packages: rambda@6.9.0: resolution: {integrity: sha512-yosVdGg1hNGkXPzqGiOYNEpXKjEOxzUCg2rB0l+NKdyCaSf4z+i5ojbN0IqDSezMMf71YEglI+ZUTgTffn5afw==} + rambda@9.2.0: + resolution: {integrity: sha512-RjM8TBNPR+iSvWLqbBpFveDfEf2RPRKHuwBHjQdXsYFDwn3MIvgmJiqVVC1CIQKnOwzeDQd44zqDFgSKQ7RT1Q==} + ramda@0.29.0: resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} @@ -10306,12 +10279,6 @@ snapshots: '@juggle/resize-observer@3.3.1': {} - '@lit-labs/ssr-dom-shim@1.1.1': {} - - '@lit/reactive-element@1.6.3': - dependencies: - '@lit-labs/ssr-dom-shim': 1.1.1 - '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': dependencies: detect-libc: 2.0.2 @@ -11438,44 +11405,6 @@ snapshots: '@types/express': 4.17.18 file-system-cache: 2.3.0 - '@storybook/web-components-vite@7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2))': - dependencies: - '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.5.0-beta)(vite@4.5.3(@types/node@20.8.0)(terser@5.19.2)) - '@storybook/core-server': 7.4.6(encoding@0.1.13) - '@storybook/node-logger': 7.4.6 - '@storybook/web-components': 7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - magic-string: 0.30.4 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@preact/preset-vite' - - bufferutil - - encoding - - lit - - supports-color - - typescript - - utf-8-validate - - vite - - vite-plugin-glimmerx - - '@storybook/web-components@7.4.6(encoding@0.1.13)(lit@2.8.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/core-client': 7.4.6 - '@storybook/docs-tools': 7.4.6(encoding@0.1.13) - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/types': 7.4.6 - lit: 2.8.0 - tiny-invariant: 1.3.1 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - encoding - - react - - react-dom - - supports-color - '@surma/rollup-plugin-off-main-thread@2.2.3': dependencies: ejs: 3.1.9 @@ -11643,7 +11572,7 @@ snapshots: undici-types: 5.26.5 optional: true - '@types/node@20.12.7': + '@types/node@20.12.8': dependencies: undici-types: 5.26.5 @@ -11685,9 +11614,9 @@ snapshots: '@types/scheduler': 0.16.3 csstype: 3.1.2 - '@types/readable-stream@4.0.11': + '@types/readable-stream@4.0.12': dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 safe-buffer: 5.1.2 '@types/resolve@1.17.1': @@ -11975,7 +11904,7 @@ snapshots: '@types/emscripten': 1.39.8 tslib: 1.14.1 - '@zardoy/flying-squid@0.0.17(encoding@0.1.13)': + '@zardoy/flying-squid@0.0.19(encoding@0.1.13)': dependencies: change-case: 4.1.2 colors: 1.4.0 @@ -11994,9 +11923,10 @@ snapshots: prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 - prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0) + prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.62.0) prismarine-windows: 2.9.0 prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 + rambda: 9.2.0 random-seed: 0.3.0 range: 0.0.3 readline: 1.3.0 @@ -13540,7 +13470,7 @@ snapshots: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -13578,7 +13508,7 @@ snapshots: es-errors@1.3.0: {} - es-iterator-helpers@1.0.18: + es-iterator-helpers@1.0.19: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -13587,7 +13517,7 @@ snapshots: es-set-tostringtag: 2.0.3 function-bind: 1.1.2 get-intrinsic: 1.2.4 - globalthis: 1.0.3 + globalthis: 1.0.4 has-property-descriptors: 1.0.2 has-proto: 1.0.3 has-symbols: 1.0.3 @@ -13864,7 +13794,7 @@ snapshots: array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.50.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -14490,6 +14420,11 @@ snapshots: dependencies: define-properties: 1.2.1 + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -15271,22 +15206,6 @@ snapshots: optionalDependencies: enquirer: 2.4.1 - lit-element@3.3.3: - dependencies: - '@lit-labs/ssr-dom-shim': 1.1.1 - '@lit/reactive-element': 1.6.3 - lit-html: 2.8.0 - - lit-html@2.8.0: - dependencies: - '@types/trusted-types': 2.0.3 - - lit@2.8.0: - dependencies: - '@lit/reactive-element': 1.6.3 - lit-element: 3.3.3 - lit-html: 2.8.0 - load-bmfont@1.4.1: dependencies: buffer-equal: 0.0.1 @@ -15744,7 +15663,7 @@ snapshots: minecraft-protocol@https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f(encoding@0.1.13): dependencies: - '@types/readable-stream': 4.0.11 + '@types/readable-stream': 4.0.12 aes-js: 3.1.2 buffer-equal: 1.0.1 debug: 4.3.4(supports-color@8.1.1) @@ -16563,7 +16482,7 @@ snapshots: prismarine-nbt: 2.5.0 vec3: 0.1.8 - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0ddcd9d48574113308e1fbebef60816aced0846f(minecraft-data@3.62.0): + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.62.0): dependencies: prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) prismarine-nbt: 2.5.0 @@ -16825,6 +16744,8 @@ snapshots: rambda@6.9.0: {} + rambda@9.2.0: {} + ramda@0.29.0: {} randexp@0.4.6: @@ -17108,7 +17029,7 @@ snapshots: es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 - globalthis: 1.0.3 + globalthis: 1.0.4 which-builtin-type: 1.1.3 regenerate-unicode-properties@10.1.0: @@ -18447,13 +18368,13 @@ snapshots: - supports-color - terser - vite@4.4.10(@types/node@20.12.7)(terser@5.19.2): + vite@4.4.10(@types/node@20.12.8)(terser@5.19.2): dependencies: esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 optionalDependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 fsevents: 2.3.3 terser: 5.19.2 From 1e7153c2e299273577ad7876d6445b709c1ebf20 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sun, 5 May 2024 03:25:08 +0300 Subject: [PATCH 0038/1074] feat: publish all stories UI components to npm! (#111) --- .github/workflows/ci.yml | 1 + .github/workflows/publish.yml | 7 + .gitignore | 4 +- README.MD | 5 +- README.NPM.MD | 32 ++++ experiments/UiStandaloneExample.tsx | 71 +++++++++ package.json | 14 +- package.npm.json | 36 +++++ pnpm-lock.yaml | 51 +++--- scripts/buildNpmReact.ts | 148 ++++++++++++++++++ src/botUtils.test.ts | 4 +- src/botUtils.ts | 11 +- src/controls.ts | 2 +- src/entities.ts | 4 + src/flyingSquidEvents.ts | 2 +- src/globals.d.ts | 44 +----- src/react/AppStatusProvider.tsx | 3 +- src/react/ArmorBar.css | 1 + src/react/ArmorBar.tsx | 4 +- src/react/BarsCommon.tsx | 26 +++ src/react/BossBarOverlay.css | 4 +- src/react/BreathBar.css | 1 + src/react/Button.stories.tsx | 18 +++ src/react/Button.tsx | 28 ++-- src/react/ButtonAppProvider.tsx | 10 ++ src/react/{ChatContainer.css => Chat.css} | 0 src/react/Chat.stories.tsx | 2 +- src/react/{ChatContainer.tsx => Chat.tsx} | 5 +- src/react/ChatProvider.tsx | 6 +- src/react/CreateWorldProvider.tsx | 2 +- src/react/DeathScreenProvider.tsx | 2 +- ...n.module.css => DiveTransition.module.css} | 0 ...stories.tsx => DiveTransition.stories.tsx} | 0 src/react/DiveTransition.tsx | 2 +- src/react/EnterFullscreenButton.tsx | 2 +- src/react/FoodBar.css | 1 + src/react/FoodBar.stories.tsx | 19 +++ src/react/FoodBar.tsx | 33 ++-- src/react/FullScreenWidget.tsx | 2 +- src/react/HealthBar.css | 1 + src/react/HealthBar.stories.tsx | 24 --- src/react/HealthBar.tsx | 51 +++--- src/react/HudBarsProvider.tsx | 28 +--- src/react/Input.tsx | 5 +- src/react/MessageFormatted.tsx | 2 +- src/react/PauseScreen.tsx | 2 +- src/react/PixelartIcon.tsx | 2 +- src/react/PlayerListOverlay.css | 5 +- src/react/PlayerListOverlay.stories.tsx | 10 +- src/react/PlayerListOverlay.tsx | 9 +- src/react/Scoreboard.tsx | 10 +- src/react/SelectOption.tsx | 2 +- src/react/ServersListProvider.tsx | 3 +- src/react/SharedHudVars.tsx | 11 +- src/react/SignEditorProvider.tsx | 2 +- src/react/SingleplayerProvider.tsx | 2 +- src/react/Slider.tsx | 63 ++++---- src/react/SoundMuffler.tsx | 2 +- src/react/TouchAreasControlsProvider.tsx | 2 +- src/react/TouchControls.tsx | 2 +- src/react/globals.d.ts | 45 ++++++ src/react/npmReactEntrypoint.ts | 1 + src/react/utils.ts | 19 +-- src/react/utilsApp.ts | 15 ++ src/reactUi.tsx | 37 +++-- src/styles.css | 1 - src/worldInteractions.ts | 2 + tsconfig.npm.json | 12 ++ 68 files changed, 688 insertions(+), 289 deletions(-) create mode 100644 README.NPM.MD create mode 100644 experiments/UiStandaloneExample.tsx create mode 100644 package.npm.json create mode 100644 scripts/buildNpmReact.ts create mode 100644 src/react/BarsCommon.tsx create mode 100644 src/react/Button.stories.tsx create mode 100644 src/react/ButtonAppProvider.tsx rename src/react/{ChatContainer.css => Chat.css} (100%) rename src/react/{ChatContainer.tsx => Chat.tsx} (99%) rename src/react/{diveAnimation.module.css => DiveTransition.module.css} (100%) rename src/react/{Dive.stories.tsx => DiveTransition.stories.tsx} (100%) create mode 100644 src/react/FoodBar.stories.tsx create mode 100644 src/react/globals.d.ts create mode 100644 src/react/npmReactEntrypoint.ts create mode 100644 src/react/utilsApp.ts create mode 100644 tsconfig.npm.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b08045be..0663fce7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,6 +18,7 @@ jobs: - run: pnpm check-build - run: pnpm test-unit - run: pnpm lint + - run: pnpm tsx scripts/buildNpmReact.ts - run: nohup pnpm prod-start & - run: nohup pnpm test-mc-server & - uses: cypress-io/github-action@v5 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cbc09b43..79bc5ffd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -33,9 +33,16 @@ jobs: pnpx zardoy-release node --footer "This release URL: ${{ steps.deploy.outputs.stdout }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - run: | + pnpx zardoy-release npm + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: cp vercel.json .vercel/output/static/vercel.json - uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: .vercel/output/static force_orphan: true + - run: pnpm tsx scripts/buildNpmReact.ts + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index c4434877..240b751a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ package-lock.json Thumbs.db build localSettings.mjs -dist +dist* .DS_Store .idea/ world @@ -17,3 +17,5 @@ out .vercel generated storybook-static + +src/react/npmReactComponents.ts diff --git a/README.MD b/README.MD index 7a93ce7e..1b8b84ac 100644 --- a/README.MD +++ b/README.MD @@ -4,7 +4,7 @@ A true Minecraft client running in your browser! A port of the original game to the web, written in JavaScript using modern web technologies. -This project is a work in progress, but I consider it to be usable. If you encounter any bugs or usability issues, please report them! +If you encounter any bugs or usability issues, please report them! You can try this out at [mcraft.fun](https://mcraft.fun/), [pcm.gg](https://pcm.gg) (short link) [mcon.vercel.app](https://mcon.vercel.app/) or the GitHub pages deploy. Every commit from the `develop` (default) branch is deployed to [s.mcraft.fun](https://s.mcraft.fun/) - so it's usually newer, but might be less stable. @@ -19,6 +19,8 @@ You can try this out at [mcraft.fun](https://mcraft.fun/), [pcm.gg](https://pcm. - Resource pack support - even even more! +All components that are in [Storybook](https://mcraft.fun/storybook) are published as npm module and can be used in other projects: [`minecraft-react`](https://npmjs.com/minecraft-react) + ### Recommended Settings - Controls -> **Raw Input** -> **On** - This will make the controls more precise @@ -65,7 +67,6 @@ To open the console, press `F12`, or if you are on mobile, you can type `#debug` It should be easy to build/start the project locally. See [CONTRIBUTING.MD](./CONTRIBUTING.md) for more info. -There is storybook for fast UI development. Run `pnpm storybook` to start it. There is world renderer playground ([link](https://mcon.vercel.app/playground.html)). However, there are many things that can be done in online version. You can access some global variables in the console and useful examples: diff --git a/README.NPM.MD b/README.NPM.MD new file mode 100644 index 00000000..24c90bc9 --- /dev/null +++ b/README.NPM.MD @@ -0,0 +1,32 @@ +# Minecraft React + +```bash +yarn add minecraft-react +``` + +## Usage + +```jsx +import { Scoreboard } from 'minecraft-react' + +const App = () => { + return ( + + ) +} +``` + +See [Storybook](https://mcraft.fun/storybook/) or [Storybook (Mirror link)](https://mcon.vercel.app/storybook/) for more examples and full components list. Also take a look at the full [standalone example](https://github.com/zardoy/prismarine-web-client/tree/experiments/UiStandaloneExample.tsx). + +There are two types of components: + +- Small UI components or HUD components +- Full screen components (like sign editor, worlds selector) diff --git a/experiments/UiStandaloneExample.tsx b/experiments/UiStandaloneExample.tsx new file mode 100644 index 00000000..80f68e8d --- /dev/null +++ b/experiments/UiStandaloneExample.tsx @@ -0,0 +1,71 @@ +import React, { useState } from 'react' +import { createRoot } from 'react-dom/client' +import { + Button, + Slider, + ArmorBar, + BreathBar, + Chat, + HealthBar, + PlayerListOverlay, + Scoreboard, + MessageFormattedString, + XPBar, + FoodBar +} from '../dist-npm' + +const ExampleDemo = () => { + const [sliderValue, setSliderValue] = useState(0) + + return ( +
+ + setSliderValue(value)} /> + + { + console.log('typed', message) + // close + }} + /> + + + + + "§bRed" displays as + + +
+ ) +} + +createRoot(document.body as Element).render() diff --git a/package.json b/package.json index d1f4c7eb..25a87472 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,12 @@ "web", "client" ], - "author": "PrismarineJS", + "publish": { + "preset": { + "publishOnlyIfChanged": true, + "runBuild": false + } + }, "license": "MIT", "dependencies": { "@dimaka/interface": "0.0.3-alpha.0", @@ -48,6 +53,7 @@ "adm-zip": "^0.5.12", "browserfs": "github:zardoy/browserfs#build", "change-case": "^5.1.2", + "classnames": "^2.5.1", "compression": "^1.7.4", "cors": "^2.8.5", "cypress-plugin-snapshots": "^1.4.4", @@ -78,11 +84,15 @@ "react-dom": "^18.2.0", "react-transition-group": "^4.4.5", "remark": "^15.0.1", + "filesize": "^10.0.12", "sanitize-filename": "^1.6.3", "skinview3d": "^3.0.1", "source-map-js": "^1.0.2", "stats-gl": "^1.0.5", "stats.js": "^0.17.0", + "use-typed-event-listener": "^4.0.2", + "mojangson": "^2.0.4", + "prosemirror-menu": "^1.2.4", "tabbable": "^6.2.0", "title-case": "3.x", "ua-parser-js": "^1.0.37", @@ -113,7 +123,6 @@ "eslint": "^8.50.0", "eslint-config-zardoy": "^0.2.17", "events": "^3.3.0", - "filesize": "^10.0.12", "http-browserify": "^1.7.0", "http-server": "^14.1.1", "https-browserify": "^1.0.0", @@ -132,7 +141,6 @@ "three": "0.154.0", "timers-browserify": "^2.0.12", "typescript": "5.5.0-beta", - "use-typed-event-listener": "^4.0.2", "vitest": "^0.34.6", "yaml": "^2.3.2" }, diff --git a/package.npm.json b/package.npm.json new file mode 100644 index 00000000..bae8b60f --- /dev/null +++ b/package.npm.json @@ -0,0 +1,36 @@ +{ + "name": "minecraft-react", + "description": "A Minecraft-like React UI library", + "keywords": [ + "minecraft", + "minecraft style" + ], + "license": "MIT", + "sideEffects": false, + "files": [ + "**" + ], + "exports": { + ".": { + "default": "./dist/react/npmReactComponents.js", + "types": "./dist/react/npmReactComponents.d.ts" + }, + "./*": { + "default": "./dist/react/*", + "types": "./dist/react/*" + }, + "./dist": { + "default": "./dist/*", + "types": "./dist/*" + } + }, + "module": "./dist/react/npmReactComponents.js", + "types": "./dist/react/npmReactComponents.d.ts", + "repository": "zardoy/prismarine-web-client", + "version": "0.0.0-dev", + "dependencies": {}, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d1b69cc..054539d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -68,6 +68,9 @@ importers: change-case: specifier: ^5.1.2 version: 5.1.2 + classnames: + specifier: ^2.5.1 + version: 2.5.1 compression: specifier: ^1.7.4 version: 1.7.4 @@ -92,6 +95,9 @@ importers: express: specifier: ^4.18.2 version: 4.18.2 + filesize: + specifier: ^10.0.12 + version: 10.0.12 flying-squid: specifier: npm:@zardoy/flying-squid@^0.0.19 version: '@zardoy/flying-squid@0.0.19(encoding@0.1.13)' @@ -116,6 +122,9 @@ importers: minecraft-data: specifier: 3.62.0 version: 3.62.0 + mojangson: + specifier: ^2.0.4 + version: 2.0.4 net-browserify: specifier: github:zardoy/prismarinejs-net-browserify version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070 @@ -137,6 +146,9 @@ importers: prosemirror-markdown: specifier: ^1.12.0 version: 1.12.0 + prosemirror-menu: + specifier: ^1.2.4 + version: 1.2.4 prosemirror-state: specifier: ^1.4.3 version: 1.4.3 @@ -182,6 +194,9 @@ importers: ua-parser-js: specifier: ^1.0.37 version: 1.0.37 + use-typed-event-listener: + specifier: ^4.0.2 + version: 4.0.2(react@18.2.0)(typescript@5.5.0-beta) valtio: specifier: ^1.11.1 version: 1.11.2(@types/react@18.2.20)(react@18.2.0) @@ -262,9 +277,6 @@ importers: events: specifier: ^3.3.0 version: 3.3.0 - filesize: - specifier: ^10.0.12 - version: 10.0.12 http-browserify: specifier: ^1.7.0 version: 1.7.0 @@ -319,9 +331,6 @@ importers: typescript: specifier: 5.5.0-beta version: 5.5.0-beta - use-typed-event-listener: - specifier: ^4.0.2 - version: 4.0.2(react@18.2.0)(typescript@5.5.0-beta) vitest: specifier: ^0.34.6 version: 0.34.6(terser@5.19.2) @@ -3635,8 +3644,8 @@ packages: cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} - classnames@2.3.2: - resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} @@ -9968,7 +9977,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.2 - '@types/node': 20.8.0 + '@types/node': 20.12.8 '@types/yargs': 17.0.28 chalk: 4.1.2 @@ -11459,11 +11468,11 @@ snapshots: '@types/cors@2.8.15': dependencies: - '@types/node': 20.8.0 + '@types/node': 20.12.8 '@types/cross-spawn@6.0.3': dependencies: - '@types/node': 20.8.10 + '@types/node': 20.12.8 '@types/debug@4.1.12': dependencies: @@ -11512,7 +11521,7 @@ snapshots: '@types/graceful-fs@4.1.7': dependencies: - '@types/node': 20.8.10 + '@types/node': 20.12.8 '@types/http-cache-semantics@4.0.2': {} @@ -11621,7 +11630,7 @@ snapshots: '@types/resolve@1.17.1': dependencies: - '@types/node': 20.8.10 + '@types/node': 20.12.8 '@types/sat@0.0.31': {} @@ -11632,7 +11641,7 @@ snapshots: '@types/send@0.17.2': dependencies: '@types/mime': 1.3.3 - '@types/node': 20.8.10 + '@types/node': 20.12.8 '@types/serve-static@1.15.3': dependencies: @@ -11941,7 +11950,7 @@ snapshots: '@zardoy/react-util@0.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - classnames: 2.3.2 + classnames: 2.5.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -12674,7 +12683,7 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 - classnames@2.3.2: {} + classnames@2.5.1: {} clean-regexp@1.0.0: dependencies: @@ -13373,7 +13382,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.15 - '@types/node': 20.8.0 + '@types/node': 20.12.8 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -14976,7 +14985,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.7 - '@types/node': 20.8.0 + '@types/node': 20.12.8 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -14993,7 +15002,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 20.12.8 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -15001,13 +15010,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 20.8.10 + '@types/node': 20.12.8 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@29.7.0: dependencies: - '@types/node': 20.8.10 + '@types/node': 20.12.8 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 diff --git a/scripts/buildNpmReact.ts b/scripts/buildNpmReact.ts new file mode 100644 index 00000000..71513cb3 --- /dev/null +++ b/scripts/buildNpmReact.ts @@ -0,0 +1,148 @@ +import fs from 'fs' +import path from 'path' +import { build, transform } from 'esbuild' +import { execSync } from 'child_process' +// import { copy } from 'fs-extra' +import { glob } from 'glob' + +const isAbsolute = (path: string) => path.startsWith('/') || /^[A-Z]:/i.test(path) + +fs.promises.readdir(path.resolve(__dirname, '../src/react')).then(async (files) => { + const components = files + .filter((file) => { + if (file.startsWith('Concept')) return false + return file.endsWith('.stories.tsx'); + }) + .map((file) => { + return file.replace('.stories.tsx', '') + }) + + const content = components.map((component) => { + return `export { default as ${component} } from './${component}'` + }).join('\n') + + await fs.promises.writeFile( + path.resolve(__dirname, '../src/react/npmReactComponents.ts'), + content + ) + + execSync('pnpm tsc -p tsconfig.npm.json', { + cwd: path.resolve(__dirname, '../'), + stdio: 'inherit', + }) + + const packageJson = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.npm.json'), 'utf-8')) + const packageJsonRoot = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8')) + const external = Object.keys(packageJson.peerDependencies) + const dependencies = new Set() + const version = packageJsonRoot.version + packageJson.version = version + + const externalize = ['minecraft-assets', 'prismarine-viewer'] + const { metafile } = await build({ + entryPoints: [path.resolve(__dirname, '../src/react/npmReactComponents.ts')], + bundle: true, + outfile: path.resolve(__dirname, '../dist-npm/bundle.esm.js'), + format: 'esm', + platform: 'browser', + target: 'es2020', + external: external, + metafile: true, + minify: true, + write: false, // todo + loader: { + '.png': 'dataurl', + }, + plugins: [ + // on external module resolve + { + name: 'collect-imports', + setup (build) { + build.onResolve({ filter: /.*/ }, (args) => { + if (args.importer.includes('node_modules') || external.some(x => args.path.startsWith(x)) || isAbsolute(args.path)) { + return undefined + } + if (args.path.startsWith('./') || args.path.startsWith('../')) { + if (args.path.endsWith('.png') || args.path.endsWith('.css') || args.path.endsWith('.jpg') || args.path.endsWith('.jpeg')) { + const absoluteImporting = path.join(path.dirname(args.importer), args.path) + const absoluteRoot = path.resolve(__dirname, '../src') + const relativeToRoot = path.relative(absoluteRoot, absoluteImporting) + fs.copyFileSync(absoluteImporting, path.resolve(__dirname, '../dist-npm/dist-pre', relativeToRoot)) + } + // default behavior + return undefined + } + const dep = args.path.startsWith('@') ? args.path.split('/').slice(0, 2).join('/') : args.path.split('/')[0] + if (!dependencies.has(dep)) { + dependencies.add(dep) + console.log('Adding dependency:', dep, 'from', args.importer) + } + // return { external: true } + }) + }, + }, + ], + }) + for (const dependency of dependencies) { + if (externalize.includes(dependency)) continue + if (!packageJsonRoot.dependencies[dependency]) throw new Error(`Dependency ${dependency} not found in package.json`) + packageJson.dependencies[dependency] = packageJsonRoot.dependencies[dependency] + } + fs.writeFileSync(path.resolve(__dirname, '../dist-npm/package.json'), JSON.stringify(packageJson, null, 2)) + // fs.promises.writeFile('./dist-npm/metafile.json', JSON.stringify(metafile, null, 2)) + + await build({ + entryPoints: ['dist-npm/dist-pre/**/*.js'], + outdir: 'dist-npm/dist', + // allowOverwrite: true, + jsx: 'preserve', + bundle: true, + target: 'esnext', + platform: 'browser', + format: 'esm', + loader: { + '.css': 'copy', + '.module.css': 'copy', + '.png': 'copy', + }, + minifyWhitespace: false, + logOverride: { + // 'ignored-bare-import': "info" + }, + plugins: [ + { + name: 'all-external', + setup (build) { + build.onResolve({ filter: /.*/ }, (args) => { + // todo use workspace deps + if (externalize.some(x => args.path.startsWith(x))) { + return undefined // bundle + } + if (args.path.endsWith('.css') || args.path.endsWith('.png') || args.path.endsWith('.jpg') || args.path.endsWith('.jpeg')) { + return undefined // loader action + } + return { + path: args.path, + external: true, + } + }) + }, + } + ], + }) + + const paths = await glob('dist-npm/dist-pre/**/*.d.ts') + // copy to dist + for (const p of paths) { + const relative = path.relative('dist-npm/dist-pre', p) + const target = path.resolve('dist-npm/dist', relative) + fs.copyFileSync(p, target) + } + // rm dist-pre + fs.rmSync('dist-npm/dist-pre', { recursive: true }) + fs.copyFileSync(path.resolve(__dirname, '../README.NPM.MD'), path.resolve(__dirname, '../dist-npm/README.md')) + + if (version !== '0.0.0-dev') { + execSync('npm publish', { cwd: path.resolve(__dirname, '../dist-npm') }) + } +}) diff --git a/src/botUtils.test.ts b/src/botUtils.test.ts index 91531138..99aa07b4 100644 --- a/src/botUtils.test.ts +++ b/src/botUtils.test.ts @@ -2,8 +2,8 @@ import { test, expect } from 'vitest' import mcData from 'minecraft-data' import { formatMessage } from './botUtils' -globalThis.window ??= {} as any -globalThis.window.loadedData ??= mcData('1.20.1') +//@ts-expect-error +globalThis.loadedData ??= mcData('1.20.1') const mapIncludeDefined = (props) => { return (x) => { diff --git a/src/botUtils.ts b/src/botUtils.ts index a76f889b..fb4000a1 100644 --- a/src/botUtils.ts +++ b/src/botUtils.ts @@ -1,6 +1,7 @@ // this should actually be moved to mineflayer / prismarine-viewer import { fromFormattedString, TextComponent } from '@xmcl/text-component' +import type { IndexedData } from 'minecraft-data' export type MessageFormatPart = Pick & { text: string @@ -26,8 +27,10 @@ type MessageInput = { json?: any } -// todo move to sign-renderer, replace with prismarine-chat -export const formatMessage = (message: MessageInput) => { +const global = globalThis as any + +// todo move to sign-renderer, replace with prismarine-chat, fix mcData issue! +export const formatMessage = (message: MessageInput, mcData: IndexedData = global.loadedData) => { let msglist: MessageFormatPart[] = [] const readMsg = (msg: MessageInput) => { @@ -47,7 +50,7 @@ export const formatMessage = (message: MessageInput) => { ...styles }) } else if (msg.translate) { - const tText = window.loadedData.language[msg.translate] ?? msg.translate + const tText = mcData?.language[msg.translate] ?? msg.translate if (msg.with) { const splitted = tText.split(/%s|%\d+\$s/g) @@ -114,6 +117,6 @@ const blockToItemRemaps = { } export const getItemFromBlock = (block: import('prismarine-block').Block) => { - const item = loadedData.itemsByName[blockToItemRemaps[block.name] ?? block.name] + const item = global.mcData.itemsByName[blockToItemRemaps[block.name] ?? block.name] return item } diff --git a/src/controls.ts b/src/controls.ts index 26405082..f5e18ae7 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -10,7 +10,7 @@ import { isGameActive, showModal, gameAdditionalState, activeModalStack, hideCur import { goFullscreen, pointerLock, reloadChunks } from './utils' import { options } from './optionsStorage' import { openPlayerInventory } from './inventoryWindows' -import { chatInputValueGlobal } from './react/ChatContainer' +import { chatInputValueGlobal } from './react/Chat' import { fsState } from './loadSave' import { showOptionsModal } from './react/SelectOption' import widgets from './react/widgets' diff --git a/src/entities.ts b/src/entities.ts index 3e075f71..dbb59bed 100644 --- a/src/entities.ts +++ b/src/entities.ts @@ -58,7 +58,11 @@ customEvents.on('gameLoaded', () => { } } + let lastCall = 0 bot.on('physicsTick', () => { + // throttle, tps: 6 + if (Date.now() - lastCall < 166) return + lastCall = Date.now() for (const [id, { tracking, info }] of Object.entries(bot.tracker.trackingData)) { if (!tracking) continue const e = bot.entities[id] diff --git a/src/flyingSquidEvents.ts b/src/flyingSquidEvents.ts index fbab268b..fb5b00e3 100644 --- a/src/flyingSquidEvents.ts +++ b/src/flyingSquidEvents.ts @@ -1,5 +1,5 @@ import { showModal } from './globalState' -import { chatInputValueGlobal } from './react/ChatContainer' +import { chatInputValueGlobal } from './react/Chat' import { showNotification } from './react/NotificationProvider' export default () => { diff --git a/src/globals.d.ts b/src/globals.d.ts index 7d2a478c..6a38a21d 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -30,46 +30,4 @@ declare interface Document { exitPointerLock?(): void } -declare namespace JSX { - interface IntrinsicElements { - [elemName: string]: any - } -} - -declare interface Window extends Record {} - -type StringKeys = Extract - - -interface ObjectConstructor { - keys (obj: T): Array> - entries (obj: T): Array<[StringKeys, T[keyof T]]> - // todo review https://stackoverflow.com/questions/57390305/trying-to-get-fromentries-type-right - fromEntries> (obj: T): Record - assign, K extends Record> (target: T, source: K): asserts target is T & K -} - -declare module '*.module.css' { - const css: Record - export default css -} -declare module '*.css' { - const css: string - export default css -} -declare module '*.json' { - const json: any - export = json -} -declare module '*.png' { - const png: string - export default png -} - -interface PromiseConstructor { - withResolvers (): { - resolve: (value: T) => void; - reject: (reason: any) => void; - promise: Promise; - } -} +declare interface Window extends Record { } diff --git a/src/react/AppStatusProvider.tsx b/src/react/AppStatusProvider.tsx index 52c95383..6ae39308 100644 --- a/src/react/AppStatusProvider.tsx +++ b/src/react/AppStatusProvider.tsx @@ -6,7 +6,8 @@ import { fsState } from '../loadSave' import { guessProblem } from '../guessProblem' import AppStatus from './AppStatus' import DiveTransition from './DiveTransition' -import { useDidUpdateEffect, useIsModalActive } from './utils' +import { useDidUpdateEffect } from './utils' +import { useIsModalActive } from './utilsApp' import Button from './Button' const initialState = { diff --git a/src/react/ArmorBar.css b/src/react/ArmorBar.css index ae13935e..ca579a72 100644 --- a/src/react/ArmorBar.css +++ b/src/react/ArmorBar.css @@ -9,6 +9,7 @@ --bg-x: calc(-1 * 16px); --bg-y: calc(-1 * 9px); pointer-events: none; + image-rendering: pixelated; } .armor { diff --git a/src/react/ArmorBar.tsx b/src/react/ArmorBar.tsx index cc9c66cd..777f753d 100644 --- a/src/react/ArmorBar.tsx +++ b/src/react/ArmorBar.tsx @@ -40,7 +40,7 @@ export default ( { Array.from({ length: 10 }, () => 0) .map( - (num, index) =>
) @@ -48,5 +48,3 @@ export default (
} - - diff --git a/src/react/BarsCommon.tsx b/src/react/BarsCommon.tsx new file mode 100644 index 00000000..1ddc89cc --- /dev/null +++ b/src/react/BarsCommon.tsx @@ -0,0 +1,26 @@ +const getEffectClass = (effect) => { + switch (effect.id) { + case 19: + return 'poisoned' + case 20: + return 'withered' + case 22: + return 'absorption' + default: + return '' + } +} + +export const barEffectAdded = (htmlElement, effect) => { + const effectClass = getEffectClass(effect) + if (effectClass) { + htmlElement.classList.add(effectClass) + } +} + +export const barEffectEnded = (htmlElement, effect) => { + const effectClass = getEffectClass(effect) + if (effectClass) { + htmlElement.classList.remove(effectClass) + } +} diff --git a/src/react/BossBarOverlay.css b/src/react/BossBarOverlay.css index fdbeb594..95ce44ec 100644 --- a/src/react/BossBarOverlay.css +++ b/src/react/BossBarOverlay.css @@ -18,7 +18,7 @@ color: #fff; } .bossbar { - background-image: url("textures/1.18.1/gui/bars.png"); + background-image: url("minecraft-assets/minecraft-assets/data/1.18.1/gui/bars.png"); width: 182px; height: 5px; position: relative; @@ -30,5 +30,5 @@ left: 0; height: 5px; width: 0; - background-image: url("textures/1.18.1/gui/bars.png"); + background-image: url("minecraft-assets/minecraft-assets/data/1.18.1/gui/bars.png"); } diff --git a/src/react/BreathBar.css b/src/react/BreathBar.css index a7e38c7c..e98cf7c2 100644 --- a/src/react/BreathBar.css +++ b/src/react/BreathBar.css @@ -10,6 +10,7 @@ --bg-x: calc(-1 * 16px); --bg-y: calc(-1 * 18px); pointer-events: none; + image-rendering: pixelated; } .breath { diff --git a/src/react/Button.stories.tsx b/src/react/Button.stories.tsx new file mode 100644 index 00000000..88ad0074 --- /dev/null +++ b/src/react/Button.stories.tsx @@ -0,0 +1,18 @@ +import type { Meta, StoryObj } from '@storybook/react' + +import Button from './Button' + +const meta: Meta = { + component: Button, +} + +export default meta +type Story = StoryObj; + +export const Primary: Story = { + args: { + label: 'Hello!', + icon: 'pixelarticons:lock-open', + inScreen: false, + }, +} diff --git a/src/react/Button.tsx b/src/react/Button.tsx index db7e575a..20dc0801 100644 --- a/src/react/Button.tsx +++ b/src/react/Button.tsx @@ -1,7 +1,7 @@ import classNames from 'classnames' -import { FC, Ref } from 'react' -import { loadSound, playSound } from '../basicSounds' +import { createContext, FC, Ref, useContext } from 'react' import buttonCss from './button.module.css' +import SharedHudVars from './SharedHudVars' // testing in storybook from deathscreen @@ -13,11 +13,19 @@ interface Props extends React.ComponentProps<'button'> { rootRef?: Ref } -void loadSound('button_click.mp3') +const ButtonContext = createContext({ + onClick () { }, +}) + +export const ButtonProvider: FC<{children, onClick}> = ({ children, onClick }) => { + return {children} +} export default (({ label, icon, children, inScreen, rootRef, type = 'button', ...args }) => { + const ctx = useContext(ButtonContext) + const onClick = (e) => { - void playSound('button_click.mp3') + ctx.onClick() args.onClick?.(e) } if (inScreen) { @@ -29,9 +37,11 @@ export default (({ label, icon, children, inScreen, rootRef, type = 'button', .. args.style.width = 20 } - return + return + + }) satisfies FC diff --git a/src/react/ButtonAppProvider.tsx b/src/react/ButtonAppProvider.tsx new file mode 100644 index 00000000..206b52a2 --- /dev/null +++ b/src/react/ButtonAppProvider.tsx @@ -0,0 +1,10 @@ +import { loadSound, playSound } from '../basicSounds' +import { ButtonProvider } from './Button' + +void loadSound('button_click.mp3') + +export default ({ children }) => { + return { + void playSound('button_click.mp3') + }}>{children} +} diff --git a/src/react/ChatContainer.css b/src/react/Chat.css similarity index 100% rename from src/react/ChatContainer.css rename to src/react/Chat.css diff --git a/src/react/Chat.stories.tsx b/src/react/Chat.stories.tsx index c568f23b..901368d5 100644 --- a/src/react/Chat.stories.tsx +++ b/src/react/Chat.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react' import { useEffect, useState } from 'react' import { formatMessage } from '../botUtils' -import Chat, { fadeMessage, chatInputValueGlobal } from './ChatContainer' +import Chat, { fadeMessage, chatInputValueGlobal } from './Chat' import Button from './Button' window.spamMessage = window.spamMessage ?? '' diff --git a/src/react/ChatContainer.tsx b/src/react/Chat.tsx similarity index 99% rename from src/react/ChatContainer.tsx rename to src/react/Chat.tsx index 86a3641a..b05f9930 100644 --- a/src/react/ChatContainer.tsx +++ b/src/react/Chat.tsx @@ -3,9 +3,8 @@ import { useEffect, useMemo, useRef, useState } from 'react' import { isCypress } from '../standaloneUtils' import { MessageFormatPart } from '../botUtils' import { MessagePart } from './MessageFormatted' -import './ChatContainer.css' -import { isIos } from './utils' -import { reactKeyForMessage } from './Scoreboard' +import './Chat.css' +import { isIos, reactKeyForMessage } from './utils' export type Message = { parts: MessageFormatPart[], diff --git a/src/react/ChatProvider.tsx b/src/react/ChatProvider.tsx index 1a4d88b6..0322c60f 100644 --- a/src/react/ChatProvider.tsx +++ b/src/react/ChatProvider.tsx @@ -4,8 +4,8 @@ import { formatMessage } from '../botUtils' import { getBuiltinCommandsList, tryHandleBuiltinCommand } from '../builtinCommands' import { hideCurrentModal, miscUiState } from '../globalState' import { options } from '../optionsStorage' -import ChatContainer, { Message, fadeMessage } from './ChatContainer' -import { useIsModalActive } from './utils' +import Chat, { Message, fadeMessage } from './Chat' +import { useIsModalActive } from './utilsApp' import { hideNotification, showNotification } from './NotificationProvider' import { updateLoadedServerData } from './ServersListProvider' @@ -37,7 +37,7 @@ export default () => { }) }, []) - return { diff --git a/src/react/DeathScreenProvider.tsx b/src/react/DeathScreenProvider.tsx index 930ed070..4e68dbec 100644 --- a/src/react/DeathScreenProvider.tsx +++ b/src/react/DeathScreenProvider.tsx @@ -5,7 +5,7 @@ import { MessageFormatPart, formatMessage } from '../botUtils' import { showModal, hideModal } from '../globalState' import { options } from '../optionsStorage' import DeathScreen from './DeathScreen' -import { useIsModalActive } from './utils' +import { useIsModalActive } from './utilsApp' const dieReasonProxy = proxy({ value: null as MessageFormatPart[] | null }) diff --git a/src/react/diveAnimation.module.css b/src/react/DiveTransition.module.css similarity index 100% rename from src/react/diveAnimation.module.css rename to src/react/DiveTransition.module.css diff --git a/src/react/Dive.stories.tsx b/src/react/DiveTransition.stories.tsx similarity index 100% rename from src/react/Dive.stories.tsx rename to src/react/DiveTransition.stories.tsx diff --git a/src/react/DiveTransition.tsx b/src/react/DiveTransition.tsx index a3188305..cd78dd66 100644 --- a/src/react/DiveTransition.tsx +++ b/src/react/DiveTransition.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { Transition } from 'react-transition-group' -import styles from './diveAnimation.module.css' +import styles from './DiveTransition.module.css' // dive animation from framework7 diff --git a/src/react/EnterFullscreenButton.tsx b/src/react/EnterFullscreenButton.tsx index 12c47f40..ad78ddad 100644 --- a/src/react/EnterFullscreenButton.tsx +++ b/src/react/EnterFullscreenButton.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import Button from './Button' -import { useUsingTouch } from './utils' +import { useUsingTouch } from './utilsApp' export default () => { const [fullScreen, setFullScreen] = useState(false) diff --git a/src/react/FoodBar.css b/src/react/FoodBar.css index bd31e818..ca3629cd 100644 --- a/src/react/FoodBar.css +++ b/src/react/FoodBar.css @@ -12,6 +12,7 @@ --bg-x: calc(-1 * (16px + 9px * var(--lightened))); --bg-y: calc(-1 * 27px); pointer-events: none; + image-rendering: pixelated; } .foodbar.poisoned { diff --git a/src/react/FoodBar.stories.tsx b/src/react/FoodBar.stories.tsx new file mode 100644 index 00000000..abf351e3 --- /dev/null +++ b/src/react/FoodBar.stories.tsx @@ -0,0 +1,19 @@ +import type { Meta, StoryObj } from '@storybook/react' + +import FoodBar from './FoodBar' + +const meta: Meta = { + component: FoodBar +} + +export default meta +type Story = StoryObj; + +export const Primary: Story = { + args: { + gameMode: 'survival', + food: 10, + effectToAdd: 19, + effectToRemove: 20, + } +} diff --git a/src/react/FoodBar.tsx b/src/react/FoodBar.tsx index c7680b68..d4141e45 100644 --- a/src/react/FoodBar.tsx +++ b/src/react/FoodBar.tsx @@ -1,15 +1,16 @@ import { useRef, useState, useEffect } from 'react' import SharedHudVars from './SharedHudVars' import './FoodBar.css' +import { barEffectAdded, barEffectEnded } from './BarsCommon' export type FoodBarProps = { - gameMode: string, + gameMode?: string, food: number, - effectToAdd: number | null, - effectToRemove: number | null, - effectAdded: (htmlElement: HTMLDivElement | null, effect: number | null) => void, - effectEnded: (htmlElement: HTMLDivElement | null, effect: number | null) => void, + effectToAdd?: number | null, + effectToRemove?: number | null, + resetEffects?: () => void, + style?: React.CSSProperties } export default ( @@ -18,8 +19,8 @@ export default ( food, effectToAdd, effectToRemove, - effectAdded, - effectEnded + resetEffects, + style }: FoodBarProps) => { const foodRef = useRef(null) @@ -54,15 +55,17 @@ export default ( }, [food]) useEffect(() => { - effectAdded(foodRef.current, effectToAdd) - }, [effectToAdd]) + if (effectToAdd) { + barEffectAdded(foodRef.current, effectToAdd) + } + if (effectToRemove) { + barEffectEnded(foodRef.current, effectToRemove) + } + resetEffects?.() + }, [effectToAdd, effectToRemove]) - useEffect(() => { - effectEnded(foodRef.current, effectToRemove) - }, [effectToRemove]) - - return -
+ return +
{ Array.from({ length: 10 }, () => 0) .map( diff --git a/src/react/FullScreenWidget.tsx b/src/react/FullScreenWidget.tsx index ecec1813..79869446 100644 --- a/src/react/FullScreenWidget.tsx +++ b/src/react/FullScreenWidget.tsx @@ -1,5 +1,5 @@ import Screen from './Screen' -import { useIsWidgetActive } from './utils' +import { useIsWidgetActive } from './utilsApp' export default ({ name, title, children }) => { const isWidgetActive = useIsWidgetActive(name) diff --git a/src/react/HealthBar.css b/src/react/HealthBar.css index bbf0f205..a6fefe09 100644 --- a/src/react/HealthBar.css +++ b/src/react/HealthBar.css @@ -12,6 +12,7 @@ --bg-x: calc(-1 * (16px + 9px * var(--lightened))); --bg-y: calc(-1 * var(--hardcore) * 45px); pointer-events: none; + image-rendering: pixelated; } .health.creative { diff --git a/src/react/HealthBar.stories.tsx b/src/react/HealthBar.stories.tsx index bcec2e0a..69e84429 100644 --- a/src/react/HealthBar.stories.tsx +++ b/src/react/HealthBar.stories.tsx @@ -9,19 +9,6 @@ const meta: Meta = { export default meta type Story = StoryObj; -const getEffectClass = (effect) => { - switch (effect.id) { - case 19: - return 'poisoned' - case 20: - return 'withered' - case 22: - return 'absorption' - default: - return '' - } -} - export const Primary: Story = { args: { gameMode: 'survival', @@ -30,16 +17,5 @@ export const Primary: Story = { healthValue: 10, effectToAdd: 19, effectToRemove: 20, - effectAdded (htmlElement, effect) { - const effectClass = getEffectClass(effect) - if (!effectClass) return - if (htmlElement) htmlElement.classList.add(effectClass) - }, - effectEnded (htmlElement, effect) { - const effectClass = getEffectClass(effect) - if (!effectClass) return - if (htmlElement) htmlElement.classList.remove(effectClass) - } - } } diff --git a/src/react/HealthBar.tsx b/src/react/HealthBar.tsx index 46ed8a34..14e27fe6 100644 --- a/src/react/HealthBar.tsx +++ b/src/react/HealthBar.tsx @@ -1,41 +1,36 @@ -import { useRef, useState, useEffect } from 'react' +import { useRef, useEffect } from 'react' import SharedHudVars from './SharedHudVars' import './HealthBar.css' +import { barEffectAdded, barEffectEnded } from './BarsCommon' export type HealthBarProps = { - gameMode: string, + gameMode?: string, isHardcore: boolean, damaged: boolean, healthValue: number, - effectToAdd: number | null, - effectToRemove: number | null, - effectAdded: (htmlElement: HTMLDivElement | null, effect: number | null) => void, - effectEnded: (htmlElement: HTMLDivElement | null, effect: number | null) => void, + effectToAdd?: number | null, + effectToRemove?: number | null, + resetEffects?: () => void + style?: React.CSSProperties } export default ( { - gameMode, - isHardcore, - damaged, - healthValue, + gameMode, + isHardcore, + damaged, + healthValue, effectToAdd, effectToRemove, - effectAdded, - effectEnded + resetEffects, + style }: HealthBarProps) => { const healthRef = useRef(null) - const [className, setClassName] = useState('') useEffect(() => { if (healthRef.current) { healthRef.current.classList.toggle('creative', gameMode === 'creative' || gameMode === 'spectator') - // if (gameMode === 'creative' || gameMode === 'spectator') { - // healthRef.current.classList.add('creative') - // } else { - // healthRef.current.classList.remove('creative') - // } } }, [gameMode]) @@ -89,24 +84,24 @@ export default ( }, [healthValue]) useEffect(() => { - effectAdded(healthRef.current, effectToAdd) - }, [effectToAdd]) - - useEffect(() => { - effectEnded(healthRef.current, effectToRemove) - }, [effectToRemove]) + if (effectToAdd) { + barEffectAdded(healthRef.current, effectToAdd) + } + if (effectToRemove) { + barEffectEnded(healthRef.current, effectToRemove) + } + resetEffects?.() + }, [effectToAdd, effectToRemove]) return -
+
{ Array.from({ length: 10 }, () => 0) .map( - (num, index) =>
) }
} - - diff --git a/src/react/HudBarsProvider.tsx b/src/react/HudBarsProvider.tsx index 0b0cec24..746d4819 100644 --- a/src/react/HudBarsProvider.tsx +++ b/src/react/HudBarsProvider.tsx @@ -32,22 +32,6 @@ export default () => { } } - const effectAdded = (htmlElement, effect) => { - const effectClass = getEffectClass(effect) - if (effectClass) { - htmlElement.classList.add(effectClass) - } - setEffectToAdd(null) - } - - const effectEnded = (htmlElement, effect) => { - const effectClass = getEffectClass(effect) - if (effectClass) { - htmlElement.classList.remove(effectClass) - } - setEffectToRemove(null) - } - const onDamage = () => { setDamaged(prev => true) if (hurtTimeout.current) clearTimeout(hurtTimeout.current) @@ -114,8 +98,10 @@ export default () => { healthValue={healthValue} effectToAdd={effectToAdd} effectToRemove={effectToRemove} - effectAdded={effectAdded} - effectEnded={effectEnded} + resetEffects={() => { + setEffectToAdd(null) + setEffectToRemove(null) + }} /> { food={food} effectToAdd={effectToAdd} effectToRemove={effectToRemove} - effectAdded={effectAdded} - effectEnded={effectEnded} + resetEffects={() => { + setEffectToAdd(null) + setEffectToRemove(null) + }} /> { rootStyles?: React.CSSProperties @@ -10,11 +10,10 @@ interface Props extends React.ComponentProps<'input'> { export default ({ autoFocus, rootStyles, inputRef, ...inputProps }: Props) => { const ref = useRef(null!) - const isTouch = useUsingTouch() useEffect(() => { if (inputRef) (inputRef as any).current = ref.current - if (!autoFocus || isTouch) return // Don't make screen keyboard popup on mobile + if (!autoFocus || isMobile()) return // Don't make screen keyboard popup on mobile ref.current.focus() }, []) diff --git a/src/react/MessageFormatted.tsx b/src/react/MessageFormatted.tsx index baab8171..6b9620ca 100644 --- a/src/react/MessageFormatted.tsx +++ b/src/react/MessageFormatted.tsx @@ -4,7 +4,7 @@ import { noCase } from 'change-case' import mojangson from 'mojangson' import { openURL } from 'prismarine-viewer/viewer/lib/simpleUtils' import { MessageFormatPart } from '../botUtils' -import { chatInputValueGlobal } from './ChatContainer' +import { chatInputValueGlobal } from './Chat' import './MessageFormatted.css' const hoverItemToText = (hoverEvent: MessageFormatPart['hoverEvent']) => { diff --git a/src/react/PauseScreen.tsx b/src/react/PauseScreen.tsx index 92e6c8c7..a224f9e6 100644 --- a/src/react/PauseScreen.tsx +++ b/src/react/PauseScreen.tsx @@ -15,7 +15,7 @@ import { disconnect } from '../flyingSquidUtils' import { pointerLock, setLoadingScreenStatus } from '../utils' import { closeWan, openToWanAndCopyJoinLink, getJoinLink } from '../localServerMultiplayer' import { copyFilesAsyncWithProgress, mkdirRecursive, uniqueFileNameFromWorldName } from '../browserfs' -import { useIsModalActive } from './utils' +import { useIsModalActive } from './utilsApp' import { showOptionsModal } from './SelectOption' import Button from './Button' import Screen from './Screen' diff --git a/src/react/PixelartIcon.tsx b/src/react/PixelartIcon.tsx index a54cd40e..919b8309 100644 --- a/src/react/PixelartIcon.tsx +++ b/src/react/PixelartIcon.tsx @@ -3,5 +3,5 @@ import { CSSProperties } from 'react' // names: https://pixelarticons.com/free/ export default ({ iconName, width = undefined as undefined | number, styles = {} as CSSProperties, className = undefined }) => { if (width !== undefined) styles = { width, height: width, ...styles } - return + return } diff --git a/src/react/PlayerListOverlay.css b/src/react/PlayerListOverlay.css index b36801c0..aa141181 100644 --- a/src/react/PlayerListOverlay.css +++ b/src/react/PlayerListOverlay.css @@ -3,8 +3,9 @@ position: absolute; background-color: rgba(0, 0, 0, 0.3); top: 9px; - left: 50%; - transform: translate(-50%); + left: 0; + right: 0; + margin: auto; width: fit-content; padding: 1px; display: flex; diff --git a/src/react/PlayerListOverlay.stories.tsx b/src/react/PlayerListOverlay.stories.tsx index cb2d972f..0353e32e 100644 --- a/src/react/PlayerListOverlay.stories.tsx +++ b/src/react/PlayerListOverlay.stories.tsx @@ -11,8 +11,14 @@ type Story = StoryObj; export const Primary: Story = { args: { - playersLists: [], - clientId: '', + playersLists: [ + [ + { username: 'Player 1', ping: 10, uuid: '1' }, + { username: 'Player 2', ping: 20, uuid: '2' }, + { username: 'Player 3', ping: 30, uuid: '3' }, + ] + ], + clientId: '2', tablistHeader: 'Header', tablistFooter: 'Footer', serverIP: '95.163.228.101', diff --git a/src/react/PlayerListOverlay.tsx b/src/react/PlayerListOverlay.tsx index ee43ae2c..a1479c14 100644 --- a/src/react/PlayerListOverlay.tsx +++ b/src/react/PlayerListOverlay.tsx @@ -2,7 +2,7 @@ import MessageFormattedString from './MessageFormattedString' import './PlayerListOverlay.css' -type PlayersLists = Array> +type PlayersLists = Array>> type PlayerListOverlayProps = { playersLists: PlayersLists, @@ -10,11 +10,12 @@ type PlayerListOverlayProps = { tablistHeader: string | Record | null, tablistFooter: string | Record | null, serverIP: string + style?: React.CSSProperties } -export default ({ playersLists, clientId, tablistHeader, tablistFooter, serverIP }: PlayerListOverlayProps) => { +export default ({ playersLists, clientId, tablistHeader, tablistFooter, serverIP, style }: PlayerListOverlayProps) => { - return
+ return
Server IP: {serverIP}
@@ -23,7 +24,7 @@ export default ({ playersLists, clientId, tablistHeader, tablistFooter, serverIP {playersLists.map((list, index) => (
{list.map(player => ( -
+

{player.ping}

diff --git a/src/react/Scoreboard.tsx b/src/react/Scoreboard.tsx index 546a0f58..8970f004 100644 --- a/src/react/Scoreboard.tsx +++ b/src/react/Scoreboard.tsx @@ -1,5 +1,6 @@ import './Scoreboard.css' import MessageFormattedString from './MessageFormattedString' +import { reactKeyForMessage } from './utils' export type ScoreboardItems = Array<{name: string, value: number, displayName?: any}> @@ -8,17 +9,14 @@ type ScoreboardProps = { title: string, items: ScoreboardItems, open: boolean + style?: React.CSSProperties } -export const reactKeyForMessage = (message) => { - return typeof message === 'string' ? message : JSON.stringify(message) -} - -export default function Scoreboard ({ title, items, open }: ScoreboardProps) { +export default function Scoreboard ({ title, items, open, style }: ScoreboardProps) { if (!open) return null return ( -
+
diff --git a/src/react/SelectOption.tsx b/src/react/SelectOption.tsx index b74434e1..e2879e10 100644 --- a/src/react/SelectOption.tsx +++ b/src/react/SelectOption.tsx @@ -1,7 +1,7 @@ import { proxy, useSnapshot } from 'valtio' import { hideCurrentModal, showModal } from '../globalState' import Screen from './Screen' -import { useIsModalActive } from './utils' +import { useIsModalActive } from './utilsApp' import Button from './Button' const state = proxy({ diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index ecd74916..0de15e1e 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -5,7 +5,8 @@ import { ConnectOptions } from '../connect' import { hideCurrentModal, miscUiState, showModal } from '../globalState' import ServersList from './ServersList' import AddServer from './AddServer' -import { useDidUpdateEffect, useIsModalActive } from './utils' +import { useDidUpdateEffect } from './utils' +import { useIsModalActive } from './utilsApp' interface StoreServerItem { ip: string, diff --git a/src/react/SharedHudVars.tsx b/src/react/SharedHudVars.tsx index acdcc237..ca48453a 100644 --- a/src/react/SharedHudVars.tsx +++ b/src/react/SharedHudVars.tsx @@ -1,5 +1,6 @@ import { CSSProperties, useEffect } from 'react' import icons from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/icons.png' +import widgets from 'minecraft-assets/minecraft-assets/data/1.17.1/gui/widgets.png' export default ({ children }) => { useEffect(() => { @@ -8,7 +9,9 @@ export default ({ children }) => { // 2. Easier application to globally override icons with custom image (eg from resourcepacks) const css = /* css */` :root { + --widgets-gui-atlas: url(${widgets}); --gui-icons: url(${icons}), url(${icons}); + --safe-area-inset-bottom: calc(env(safe-area-inset-bottom) / 2); } ` const style = document.createElement('style') @@ -17,11 +20,5 @@ export default ({ children }) => { document.head.appendChild(style) }, []) - const customVars = { - '--safe-area-inset-bottom': 'calc(env(safe-area-inset-bottom) / 2)' - } as CSSProperties - - return
{children}
+ return children } diff --git a/src/react/SignEditorProvider.tsx b/src/react/SignEditorProvider.tsx index b6ade625..666935b6 100644 --- a/src/react/SignEditorProvider.tsx +++ b/src/react/SignEditorProvider.tsx @@ -2,7 +2,7 @@ import { useMemo, useEffect, useState, useRef } from 'react' import { showModal, hideModal } from '../globalState' import { setDoPreventDefault } from '../controls' import { options } from '../optionsStorage' -import { useIsModalActive } from './utils' +import { useIsModalActive } from './utilsApp' import SignEditor, { ResultType } from './SignEditor' diff --git a/src/react/SingleplayerProvider.tsx b/src/react/SingleplayerProvider.tsx index 35704e8e..83d28637 100644 --- a/src/react/SingleplayerProvider.tsx +++ b/src/react/SingleplayerProvider.tsx @@ -9,7 +9,7 @@ import { haveDirectoryPicker, setLoadingScreenStatus } from '../utils' import { exportWorld } from '../builtinCommands' import { googleProviderState, useGoogleLogIn, GoogleDriveProvider, isGoogleDriveAvailable, APP_ID } from '../googledrive' import Singleplayer, { WorldProps } from './Singleplayer' -import { useIsModalActive } from './utils' +import { useIsModalActive } from './utilsApp' import { showOptionsModal } from './SelectOption' import Input from './Input' import GoogleButton from './GoogleButton' diff --git a/src/react/Slider.tsx b/src/react/Slider.tsx index bc6c5890..34cc2717 100644 --- a/src/react/Slider.tsx +++ b/src/react/Slider.tsx @@ -1,6 +1,7 @@ // Slider.tsx import React, { useState, useEffect } from 'react' import styles from './slider.module.css' +import SharedHudVars from './SharedHudVars' interface Props extends React.ComponentProps<'div'> { label: string; @@ -47,36 +48,38 @@ const Slider: React.FC = ({ } return ( -
- { - const newValue = Number(e.target.value) - setValue(newValue) - fireValueUpdate(false, newValue) - }} - // todo improve correct handling of drag end - onLostPointerCapture={() => { - fireValueUpdate(true) - }} - onPointerUp={() => { - fireValueUpdate(true) - }} - onKeyUp={() => { - fireValueUpdate(true) - }} - /> -
-
- -
+ +
+ { + const newValue = Number(e.target.value) + setValue(newValue) + fireValueUpdate(false, newValue) + }} + // todo improve correct handling of drag end + onLostPointerCapture={() => { + fireValueUpdate(true) + }} + onPointerUp={() => { + fireValueUpdate(true) + }} + onKeyUp={() => { + fireValueUpdate(true) + }} + /> +
+
+ +
+
) } diff --git a/src/react/SoundMuffler.tsx b/src/react/SoundMuffler.tsx index 869abc1c..ecbae14d 100644 --- a/src/react/SoundMuffler.tsx +++ b/src/react/SoundMuffler.tsx @@ -5,7 +5,7 @@ import { lastPlayedSounds } from '../soundSystem' import { options } from '../optionsStorage' import Button from './Button' import Screen from './Screen' -import { useIsModalActive } from './utils' +import { useIsModalActive } from './utilsApp' const SoundRow = ({ sound, children }) => { const { mutedSounds } = useSnapshot(options) diff --git a/src/react/TouchAreasControlsProvider.tsx b/src/react/TouchAreasControlsProvider.tsx index 7de8eaca..24479e89 100644 --- a/src/react/TouchAreasControlsProvider.tsx +++ b/src/react/TouchAreasControlsProvider.tsx @@ -2,7 +2,7 @@ import { useSnapshot } from 'valtio' import { activeModalStack, hideModal } from '../globalState' import { options } from '../optionsStorage' import TouchAreasControls from './TouchAreasControls' -import { useIsModalActive, useUsingTouch } from './utils' +import { useIsModalActive, useUsingTouch } from './utilsApp' export default () => { const usingTouch = useUsingTouch() diff --git a/src/react/TouchControls.tsx b/src/react/TouchControls.tsx index db71ae1f..b49d57c4 100644 --- a/src/react/TouchControls.tsx +++ b/src/react/TouchControls.tsx @@ -4,7 +4,7 @@ import { useSnapshot } from 'valtio' import { contro } from '../controls' import { miscUiState, activeModalStack } from '../globalState' import { watchValue, options } from '../optionsStorage' -import { useUsingTouch } from './utils' +import { useUsingTouch } from './utilsApp' // todo useInterfaceState.setState({ diff --git a/src/react/globals.d.ts b/src/react/globals.d.ts new file mode 100644 index 00000000..842d27c4 --- /dev/null +++ b/src/react/globals.d.ts @@ -0,0 +1,45 @@ +type StringKeys = Extract + + +interface ObjectConstructor { + keys (obj: T): Array> + entries (obj: T): Array<[StringKeys, T[keyof T]]> + // todo review https://stackoverflow.com/questions/57390305/trying-to-get-fromentries-type-right + fromEntries> (obj: T): Record + assign, K extends Record> (target: T, source: K): asserts target is T & K +} + +declare module '*.module.css' { + const css: Record + export default css +} +declare module '*.css' { + const css: string + export default css +} +declare module '*.json' { + const json: any + export = json +} +declare module '*.png' { + const png: string + export default png +} + +interface PromiseConstructor { + withResolvers (): { + resolve: (value: T) => void; + reject: (reason: any) => void; + promise: Promise; + } +} + +declare namespace JSX { + interface IntrinsicElements { + 'iconify-icon': { + icon: string + style?: React.CSSProperties + class?: string + } + } +} diff --git a/src/react/npmReactEntrypoint.ts b/src/react/npmReactEntrypoint.ts new file mode 100644 index 00000000..643930d7 --- /dev/null +++ b/src/react/npmReactEntrypoint.ts @@ -0,0 +1 @@ +// export * from './npmReactComponents' diff --git a/src/react/utils.ts b/src/react/utils.ts index 900b279f..b8caeddf 100644 --- a/src/react/utils.ts +++ b/src/react/utils.ts @@ -1,16 +1,5 @@ -import { useSnapshot } from 'valtio' import { useEffect, useRef } from 'react' import { UAParser } from 'ua-parser-js' -import { activeModalStack, miscUiState } from '../globalState' - -export const useIsModalActive = (modal: string, useIncludes = false) => { - const allStack = useSnapshot(activeModalStack) - return useIncludes ? allStack.some(x => x.reactType === modal) : allStack.at(-1)?.reactType === modal -} - -export const useIsWidgetActive = (name: string) => { - return useIsModalActive(`widget-${name}`) -} export function useDidUpdateEffect (fn, inputs) { const isMountingRef = useRef(false) @@ -28,10 +17,10 @@ export function useDidUpdateEffect (fn, inputs) { }, inputs) } -export const useUsingTouch = () => { - return useSnapshot(miscUiState).currentTouch -} - export const ua = new UAParser(navigator.userAgent) export const isIos = ua.getOS().name === 'iOS' + +export const reactKeyForMessage = (message) => { + return typeof message === 'string' ? message : JSON.stringify(message) +} diff --git a/src/react/utilsApp.ts b/src/react/utilsApp.ts new file mode 100644 index 00000000..3fd18515 --- /dev/null +++ b/src/react/utilsApp.ts @@ -0,0 +1,15 @@ +import { useSnapshot } from 'valtio' +import { activeModalStack, miscUiState } from '../globalState' + + +export const useUsingTouch = () => { + return useSnapshot(miscUiState).currentTouch +} +export const useIsModalActive = (modal: string, useIncludes = false) => { + const allStack = useSnapshot(activeModalStack) + return useIncludes ? allStack.some(x => x.reactType === modal) : allStack.at(-1)?.reactType === modal +} + +export const useIsWidgetActive = (name: string) => { + return useIsModalActive(`widget-${name}`) +} diff --git a/src/reactUi.tsx b/src/reactUi.tsx index 419d8dff..760a1a7b 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -27,12 +27,13 @@ import PauseScreen from './react/PauseScreen' import SoundMuffler from './react/SoundMuffler' import TouchControls from './react/TouchControls' import widgets from './react/widgets' -import { useIsWidgetActive } from './react/utils' +import { useIsWidgetActive } from './react/utilsApp' import GlobalSearchInput from './GlobalSearchInput' import TouchAreasControlsProvider from './react/TouchAreasControlsProvider' import NotificationProvider, { showNotification } from './react/NotificationProvider' import HotbarRenderApp from './react/HotbarRenderApp' import Crosshair from './react/Crosshair' +import ButtonAppProvider from './react/ButtonAppProvider' import ServersListProvider from './react/ServersListProvider' const RobustPortal = ({ children, to }) => { @@ -112,7 +113,7 @@ const InGameUi = () => { - {/* becaues of z-index */} + {/* because of z-index */} @@ -132,21 +133,23 @@ const WidgetDisplay = ({ name, Component }) => { const App = () => { return
- - - - - - - - - - - - - {/* - */} - + + + + + + + + + + + + + + {/* + */} + +
} diff --git a/src/styles.css b/src/styles.css index 64fc054d..30abc52b 100644 --- a/src/styles.css +++ b/src/styles.css @@ -26,7 +26,6 @@ html { } body { - --widgets-gui-atlas: url('minecraft-assets/minecraft-assets/data/1.17.1/gui/widgets.png'); --title-gui: url('minecraft-assets/minecraft-assets/data/1.17.1/gui/title/minecraft.png'); } diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index 544027a5..c3263f2f 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -89,6 +89,8 @@ class WorldInteraction { if (entity && e.button === 2) { bot.attack(entity) + } else { + // bot } }) document.addEventListener('blur', (e) => { diff --git a/tsconfig.npm.json b/tsconfig.npm.json new file mode 100644 index 00000000..0aec498f --- /dev/null +++ b/tsconfig.npm.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "dist-npm/dist-pre", + "noEmit": false, + "declaration": true + }, + "include": [ + "src/react/npmReactComponents.ts", + "src/react/globals.d.ts" + ] +} From 86554050c372904af9d2616bfeaa41ab5a4982f6 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sun, 5 May 2024 03:26:56 +0300 Subject: [PATCH 0039/1074] up tested ver --- src/loadSave.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/loadSave.ts b/src/loadSave.ts index c332e670..af9d078c 100644 --- a/src/loadSave.ts +++ b/src/loadSave.ts @@ -91,12 +91,13 @@ export const loadSave = async (root = '/world') => { const newVersion = '1.8.8' version = newVersion } - const lastSupportedVersion = supportedVersions.at(-1)! + // const lastSupportedVersion = supportedVersions.at(-1)! + const lastTestedVersion = '1.18.2' const firstSupportedVersion = supportedVersions[0] const lowerBound = isMajorVersionGreater(firstSupportedVersion, version) - const upperBound = isMajorVersionGreater(version, lastSupportedVersion) + const upperBound = isMajorVersionGreater(version, lastTestedVersion) if (lowerBound || upperBound) { - version = prompt(`Version ${version} is not supported, supported versions are ${supportedVersions.join(', ')}, what try to use instead?`, lowerBound ? firstSupportedVersion : lastSupportedVersion) + version = prompt(`Version ${version} is not supported, supported versions are ${supportedVersions.join(', ')}, what try to use instead?`, lowerBound ? firstSupportedVersion : lastTestedVersion) if (!version) return } if (levelDat.WorldGenSettings) { From 038dfc415be3fd4b657e804d5299d2a6acd97adc Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 5 May 2024 03:34:46 +0300 Subject: [PATCH 0040/1074] ci: remove wrong command --- .github/workflows/publish.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 79bc5ffd..616a241a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -33,10 +33,6 @@ jobs: pnpx zardoy-release node --footer "This release URL: ${{ steps.deploy.outputs.stdout }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - run: | - pnpx zardoy-release npm - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: cp vercel.json .vercel/output/static/vercel.json - uses: peaceiris/actions-gh-pages@v3 with: From 2e93e90d287bf19c22653804e35bf3bb80fd02e9 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 5 May 2024 03:45:57 +0300 Subject: [PATCH 0041/1074] impr auto publish for npm --- .github/workflows/publish.yml | 6 +++++- scripts/buildNpmReact.ts | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 616a241a..18c1a9bf 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -33,12 +33,16 @@ jobs: pnpx zardoy-release node --footer "This release URL: ${{ steps.deploy.outputs.stdout }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # has possible output: tag + id: release + # has output - run: cp vercel.json .vercel/output/static/vercel.json - uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: .vercel/output/static force_orphan: true - - run: pnpm tsx scripts/buildNpmReact.ts + - run: pnpm tsx scripts/buildNpmReact.ts ${{ steps.release.outputs.tag }} + if: steps.release.outputs.tag env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/scripts/buildNpmReact.ts b/scripts/buildNpmReact.ts index 71513cb3..4516f1b7 100644 --- a/scripts/buildNpmReact.ts +++ b/scripts/buildNpmReact.ts @@ -35,7 +35,8 @@ fs.promises.readdir(path.resolve(__dirname, '../src/react')).then(async (files) const packageJsonRoot = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8')) const external = Object.keys(packageJson.peerDependencies) const dependencies = new Set() - const version = packageJsonRoot.version + let version = process.argv[2] || packageJsonRoot.version + version = version.replace(/^v/, '') packageJson.version = version const externalize = ['minecraft-assets', 'prismarine-viewer'] From 228d60056bbd22c175e2bf174d4f50d8b1c63164 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 5 May 2024 03:57:21 +0300 Subject: [PATCH 0042/1074] hotfix: offline server check crashes other servers checks --- src/react/ServersListProvider.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index 0de15e1e..85c55ed6 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -22,7 +22,8 @@ interface StoreServerItem { } type ServerResponse = { - version: { + online: boolean + version?: { name_raw: string } // display tooltip @@ -34,8 +35,8 @@ type ServerResponse = { name_clean: string }> } - icon: string - motd: { + icon?: string + motd?: { raw: string } // todo circle error icon @@ -159,12 +160,13 @@ const Inner = () => { if (isInLocalNetwork) continue // eslint-disable-next-line no-await-in-loop await fetch(`https://api.mcstatus.io/v2/status/java/${server.ip}`).then(async r => r.json()).then((data: ServerResponse) => { - const versionClean = data.version.name_raw.replace(/^[^\d.]+/, '') + const versionClean = data.version?.name_raw.replace(/^[^\d.]+/, '') + if (!versionClean) return setAdditionalData(old => { return ({ ...old, [server.ip]: { - formattedText: data.motd.raw, + formattedText: data.motd?.raw ?? '', textNameRight: `${versionClean} ${data.players?.online ?? '??'}/${data.players?.max ?? '??'}`, icon: data.icon, } From d1d47b334c7525c9083a2a3b39797fef368c914a Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 6 May 2024 01:04:04 +0300 Subject: [PATCH 0043/1074] fix camera desync issues --- prismarine-viewer/viewer/lib/viewer.ts | 8 +++++++- prismarine-viewer/viewer/lib/worldrendererCommon.ts | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/prismarine-viewer/viewer/lib/viewer.ts b/prismarine-viewer/viewer/lib/viewer.ts index 9cb7eb3d..9f8067db 100644 --- a/prismarine-viewer/viewer/lib/viewer.ts +++ b/prismarine-viewer/viewer/lib/viewer.ts @@ -12,7 +12,6 @@ export class Viewer { scene: THREE.Scene ambientLight: THREE.AmbientLight directionalLight: THREE.DirectionalLight - camera: THREE.PerspectiveCamera world: WorldRendererCommon entities: Entities // primitives: Primitives @@ -25,6 +24,13 @@ export class Viewer { renderingUntilNoUpdates = false processEntityOverrides = (e, overrides) => overrides + get camera () { + return this.world.camera + } + set camera (camera) { + this.world.camera = camera + } + constructor(public renderer: THREE.WebGLRenderer, worldConfig = defaultWorldRendererConfig) { // https://discourse.threejs.org/t/updates-to-color-management-in-three-js-r152/50791 THREE.ColorManagement.enabled = false diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index 43983977..05fb6f4e 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -54,6 +54,7 @@ export abstract class WorldRendererCommon allChunksFinished = false handleResize = () => { } mesherConfig = defaultMesherConfig + camera: THREE.PerspectiveCamera abstract outputFormat: 'threeJs' | 'webgl' From 36962331d17bdcd65951f00e6383b6eb60662c2e Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 6 May 2024 01:54:29 +0300 Subject: [PATCH 0044/1074] chore: up mc-data, fix cam reset fix: hide add server UI after adding a server --- package.json | 4 +- pnpm-lock.yaml | 60 +++++++++---------- prismarine-viewer/viewer/lib/mesher/models.ts | 4 +- .../viewer/lib/mesher/test/mesherTester.ts | 15 +++-- prismarine-viewer/viewer/lib/viewer.ts | 4 +- .../viewer/lib/worldrendererThree.ts | 2 +- src/react/ServersListProvider.tsx | 9 +-- 7 files changed, 51 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 25a87472..fdaecb65 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "jszip": "^3.10.1", "lodash-es": "^4.17.21", "minecraft-assets": "^1.12.2", - "minecraft-data": "3.62.0", + "minecraft-data": "3.65.0", "net-browserify": "github:zardoy/prismarinejs-net-browserify", "node-gzip": "^1.1.2", "peerjs": "^1.5.0", @@ -154,7 +154,7 @@ "diamond-square": "github:zardoy/diamond-square", "prismarine-block": "github:zardoy/prismarine-block#next-era", "prismarine-world": "github:zardoy/prismarine-world#next-era", - "minecraft-data": "3.62.0", + "minecraft-data": "3.65.0", "prismarine-provider-anvil": "github:zardoy/prismarine-provider-anvil#everything", "minecraft-protocol": "github:zardoy/minecraft-protocol#everything", "react": "^18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 054539d5..21d48b30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ overrides: diamond-square: github:zardoy/diamond-square prismarine-block: github:zardoy/prismarine-block#next-era prismarine-world: github:zardoy/prismarine-world#next-era - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 prismarine-provider-anvil: github:zardoy/prismarine-provider-anvil#everything minecraft-protocol: github:zardoy/minecraft-protocol#everything react: ^18.2.0 @@ -120,8 +120,8 @@ importers: specifier: ^1.12.2 version: 1.12.2 minecraft-data: - specifier: 3.62.0 - version: 3.62.0 + specifier: 3.65.0 + version: 3.65.0 mojangson: specifier: ^2.0.4 version: 2.0.4 @@ -139,7 +139,7 @@ importers: version: 6.1.1 prismarine-provider-anvil: specifier: github:zardoy/prismarine-provider-anvil#everything - version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.62.0) + version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0) prosemirror-example-setup: specifier: ^1.2.2 version: 1.2.2 @@ -375,7 +375,7 @@ importers: version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chunk: specifier: github:zardoy/prismarine-chunk - version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) prismarine-schematic: specifier: ^1.2.0 version: 1.2.3 @@ -6028,8 +6028,8 @@ packages: minecraft-assets@1.12.2: resolution: {integrity: sha512-/eMxh3LNjCXOnU6KnQMjBM8dRnoJNpWIg7mD2m2RthraYiQK2FNzPWIKxWm2j3Ufcf5nzFXupgABledE86r4fQ==} - minecraft-data@3.62.0: - resolution: {integrity: sha512-jJXZ/WgyX79tIHlqvfyqG+sJDUekHiA3e9NRUCMGUno4NDrZMcpRI065DnkrI720RHTMb8iadf0NmnBP4Rla5A==} + minecraft-data@3.65.0: + resolution: {integrity: sha512-9K8dOrdrcpUklTdqKBtRcKur0gLZnguTvhM/1Xv52qzh8Unkto4290RJc4ueRIYo1VqN4zzQrRxO8lnqtkERDQ==} minecraft-folder-path@1.2.0: resolution: {integrity: sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==} @@ -6691,7 +6691,7 @@ packages: prismarine-biome@1.3.0: resolution: {integrity: sha512-GY6nZxq93mTErT7jD7jt8YS1aPrOakbJHh39seYsJFXvueIOdHAmW16kYQVrTVMW5MlWLQVxV/EquRwOgr4MnQ==} peerDependencies: - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 prismarine-registry: ^1.1.0 prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0: @@ -11923,16 +11923,16 @@ snapshots: exit-hook: 2.2.1 flatmap: 0.0.3 long: 5.2.3 - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 minecraft-protocol: https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f(encoding@0.1.13) mkdirp: 2.1.6 node-gzip: 1.1.2 node-rsa: 1.1.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 - prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.62.0) + prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0) prismarine-windows: 2.9.0 prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 rambda: 9.2.0 @@ -13194,8 +13194,8 @@ snapshots: diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687: dependencies: - minecraft-data: 3.62.0 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + minecraft-data: 3.65.0 + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) random-seed: 0.3.0 vec3: 0.1.8 @@ -15659,7 +15659,7 @@ snapshots: minecraft-assets@1.12.2: {} - minecraft-data@3.62.0: {} + minecraft-data@3.65.0: {} minecraft-folder-path@1.2.0: {} @@ -15679,7 +15679,7 @@ snapshots: endian-toggle: 0.0.0 lodash.get: 4.4.2 lodash.merge: 4.6.2 - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 minecraft-folder-path: 1.2.0 node-fetch: 2.7.0(encoding@0.1.13) node-rsa: 0.4.2 @@ -15719,7 +15719,7 @@ snapshots: mineflayer-pathfinder@2.4.4: dependencies: - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-entity: 2.3.1 prismarine-item: 1.14.0 @@ -15729,12 +15729,12 @@ snapshots: mineflayer@https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f(encoding@0.1.13): dependencies: - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 minecraft-protocol: https://codeload.github.com/zardoy/minecraft-protocol/tar.gz/2c14a686bfe7cbd9a5c87b629b402295ee86219f(encoding@0.1.13) - prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) + prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chat: 1.9.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -16431,15 +16431,15 @@ snapshots: - encoding - supports-color - prismarine-biome@1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0): + prismarine-biome@1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0): dependencies: - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 prismarine-registry: 1.7.0 prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0: dependencies: - minecraft-data: 3.62.0 - prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) + minecraft-data: 3.65.0 + prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) prismarine-chat: 1.9.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -16452,9 +16452,9 @@ snapshots: prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0): + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0): dependencies: - prismarine-biome: 1.3.0(minecraft-data@3.62.0)(prismarine-registry@1.7.0) + prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 @@ -16487,13 +16487,13 @@ snapshots: prismarine-physics@1.8.0: dependencies: - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 prismarine-nbt: 2.5.0 vec3: 0.1.8 - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.62.0): + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0): dependencies: - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.62.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) prismarine-nbt: 2.5.0 uint4: 0.1.2 vec3: 0.1.8 @@ -16514,12 +16514,12 @@ snapshots: prismarine-registry@1.7.0: dependencies: - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 prismarine-nbt: 2.5.0 prismarine-schematic@1.2.3: dependencies: - minecraft-data: 3.62.0 + minecraft-data: 3.65.0 prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-nbt: 2.2.1 prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index 833de180..bfb96d11 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -349,8 +349,7 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr const aos: number[] = [] const neighborPos = position.plus(new Vec3(...dir)) - let baseLightLevel = world.getLight(neighborPos) - const baseLight = baseLightLevel / 15 + const baseLight = world.getLight(neighborPos) / 15 for (const pos of corners) { let vertex = [ (pos[0] ? maxx : minx), @@ -418,6 +417,7 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr attr.tiles[`${cursor.x},${cursor.y},${cursor.z}`].faces.push({ face, neighbor: `${neighborPos.x},${neighborPos.y},${neighborPos.z}`, + light: baseLight // texture: eFace.texture.name, }) } diff --git a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts index 21c5d129..a665db6b 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts @@ -1,6 +1,6 @@ import { setBlockStatesData, getSectionGeometry } from '../models' import { World as MesherWorld } from '../world' -import ChunkLoader from 'prismarine-chunk' +import ChunkLoader, { PCChunk } from 'prismarine-chunk' import { Vec3 } from 'vec3' import MinecraftData from 'minecraft-data' @@ -26,18 +26,25 @@ export const setup = (version, initialBlocks: [number[], string][]) => { return { centerFaces, totalTiles, - centerTileNeighbors + centerTileNeighbors, + faces: sectionGeometry.tiles[`${pos.x},${pos.y},${pos.z}`]?.faces ?? [] } } setBlockStatesData(blockStates, true) - mesherWorld.addColumn(0, 0, chunk1.toJson()) + const reload = () => { + mesherWorld.removeColumn(0, 0) + mesherWorld.addColumn(0, 0, chunk1.toJson()) + } + reload() return { mesherWorld, getGeometry, pos, - mcData + mcData, + reload, + chunk: chunk1 as PCChunk } } diff --git a/prismarine-viewer/viewer/lib/viewer.ts b/prismarine-viewer/viewer/lib/viewer.ts index 9f8067db..65091f3e 100644 --- a/prismarine-viewer/viewer/lib/viewer.ts +++ b/prismarine-viewer/viewer/lib/viewer.ts @@ -38,9 +38,9 @@ export class Viewer { this.scene = new THREE.Scene() this.scene.matrixAutoUpdate = false // for perf - this.resetScene() - this.threeJsWorld = new WorldRendererThree(this.scene, this.renderer, this.camera, worldConfig) + this.threeJsWorld = new WorldRendererThree(this.scene, this.renderer, worldConfig) this.setWorld() + this.resetScene() this.entities = new Entities(this.scene) // this.primitives = new Primitives(this.scene, this.camera) diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 1fff112f..a099dbbc 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -20,7 +20,7 @@ export class WorldRendererThree extends WorldRendererCommon { return Object.values(this.sectionObjects).reduce((acc, obj) => acc + (obj as any).tilesCount, 0) } - constructor(public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public camera: THREE.PerspectiveCamera, public config: WorldRendererConfig) { + constructor(public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public config: WorldRendererConfig) { super(config) } diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index 85c55ed6..5da2fc68 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -180,16 +180,13 @@ const Inner = () => { const isEditScreenModal = useIsModalActive('editServer') - useEffect(() => { - if (!isEditScreenModal) { - setServerEditScreen(null) - } - }, [isEditScreenModal]) - useEffect(() => { if (serverEditScreen && !isEditScreenModal) { showModal({ reactType: 'editServer' }) } + if (!serverEditScreen && isEditScreenModal) { + hideCurrentModal() + } }, [serverEditScreen]) if (isEditScreenModal) { From 03b3e56a74eb8c375b67209b88892bea35292378 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Mon, 6 May 2024 19:06:44 +0300 Subject: [PATCH 0045/1074] fix: reload the page on quit button until issues with time desync are fixed up squid to restore support for 1.14 worlds --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- src/flyingSquidUtils.ts | 1 + src/react/AppStatus.tsx | 2 +- src/react/PauseScreen.tsx | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index fdaecb65..acee3c83 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "esbuild": "^0.19.3", "esbuild-plugin-polyfill-node": "^0.3.0", "express": "^4.18.2", - "flying-squid": "npm:@zardoy/flying-squid@^0.0.19", + "flying-squid": "npm:@zardoy/flying-squid@^0.0.20", "fs-extra": "^11.1.1", "google-drive-browserfs": "github:zardoy/browserfs#google-drive", "iconify-icon": "^1.0.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21d48b30..36cc8e30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,8 +99,8 @@ importers: specifier: ^10.0.12 version: 10.0.12 flying-squid: - specifier: npm:@zardoy/flying-squid@^0.0.19 - version: '@zardoy/flying-squid@0.0.19(encoding@0.1.13)' + specifier: npm:@zardoy/flying-squid@^0.0.20 + version: '@zardoy/flying-squid@0.0.20(encoding@0.1.13)' fs-extra: specifier: ^11.1.1 version: 11.1.1 @@ -3043,8 +3043,8 @@ packages: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - '@zardoy/flying-squid@0.0.19': - resolution: {integrity: sha512-q0eW/AO66bA5YQfGd+mnZjenZ7oocCrxlU4ktJbS4vfhjC2PPLzXLpWhXnzqN9A3VSzMzraV/9SY9kGQkw8xNA==} + '@zardoy/flying-squid@0.0.20': + resolution: {integrity: sha512-WyejZS2Upzv86g6Ez5Z/4Pd0ea9tkFL2itAj24UNpO7fyzxuTN2Ag1Ouvh+MSkCloXhR4E/yoER2krHW8vzwBw==} engines: {node: '>=8'} hasBin: true @@ -11913,7 +11913,7 @@ snapshots: '@types/emscripten': 1.39.8 tslib: 1.14.1 - '@zardoy/flying-squid@0.0.19(encoding@0.1.13)': + '@zardoy/flying-squid@0.0.20(encoding@0.1.13)': dependencies: change-case: 4.1.2 colors: 1.4.0 diff --git a/src/flyingSquidUtils.ts b/src/flyingSquidUtils.ts index 2590468d..bd312bfb 100644 --- a/src/flyingSquidUtils.ts +++ b/src/flyingSquidUtils.ts @@ -38,4 +38,5 @@ export const disconnect = async () => { } window.history.replaceState({}, '', `${window.location.pathname}`) // remove qs bot.end('You left the server') + location.reload() } diff --git a/src/react/AppStatus.tsx b/src/react/AppStatus.tsx index b1b98c35..9bf2ece1 100644 --- a/src/react/AppStatus.tsx +++ b/src/react/AppStatus.tsx @@ -44,7 +44,7 @@ export default ({ status, isError, hideDots = false, lastStatus = '', backAction <> {backAction && + )} diff --git a/src/react/PauseScreen.tsx b/src/react/PauseScreen.tsx index a224f9e6..0d63df5d 100644 --- a/src/react/PauseScreen.tsx +++ b/src/react/PauseScreen.tsx @@ -137,7 +137,7 @@ export default () => {
) : null}
From 3046524ff6243dbcccb43985cf11970ac02b76f6 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 8 May 2024 20:36:05 +0300 Subject: [PATCH 0046/1074] chore: fix all tests feat: add lockConnect to QS options for alt connection screen UI --- README.MD | 9 +++++---- cypress/e2e/index.spec.ts | 4 ++-- src/react/{AddServer.tsx => AddServerOrConnect.tsx} | 6 +++--- src/react/ServersList.stories.tsx | 4 ++-- src/react/ServersListProvider.tsx | 6 +++--- 5 files changed, 15 insertions(+), 14 deletions(-) rename src/react/{AddServer.tsx => AddServerOrConnect.tsx} (96%) diff --git a/README.MD b/README.MD index 1b8b84ac..bc39fb98 100644 --- a/README.MD +++ b/README.MD @@ -103,10 +103,11 @@ world chunks have a *yellow* border, hostile mobs have a *red* outline, passive Press `Y` to set query parameters to url of your current game state. -- `?server=` - Display connect screen to the server on load -- `?username=` - Set the username on load -- `?proxy=` - Set the proxy server address on load -- `?version=` - Set the version on load +- `?ip=` - Display connect screen to the server on load +- `?username=` - Set the username for server +- `?proxy=` - Set the proxy server address to use for server +- `?version=` - Set the version for server +- `?lockConnect=true` - Disable cancel / save buttons, useful for integrates iframes - `?reconnect=true` - Reconnect to the server on page reloads. Available in **dev mode only** and very useful on server testing. - `?loadSave=` - Load the save on load with the specified folder name (not title) diff --git a/cypress/e2e/index.spec.ts b/cypress/e2e/index.spec.ts index 35399393..455b1283 100644 --- a/cypress/e2e/index.spec.ts +++ b/cypress/e2e/index.spec.ts @@ -38,7 +38,7 @@ const setOptions = (options: Partial) => { } it('Loads & renders singleplayer', () => { - cleanVisit('/?singleplayer=1') + visit('/?singleplayer=1') setOptions({ localServerOptions: { generation: { @@ -52,7 +52,7 @@ it('Loads & renders singleplayer', () => { testWorldLoad() }) -it.only('Joins to server', () => { +it('Joins to server', () => { visit('/?ip=localhost&version=1.16.1') window.localStorage.version = '' // todo replace with data-test diff --git a/src/react/AddServer.tsx b/src/react/AddServerOrConnect.tsx similarity index 96% rename from src/react/AddServer.tsx rename to src/react/AddServerOrConnect.tsx index bae39ac9..54f04af1 100644 --- a/src/react/AddServer.tsx +++ b/src/react/AddServerOrConnect.tsx @@ -38,6 +38,7 @@ export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQ const [usernameOverride, setUsernameOverride] = React.useState(initialData?.usernameOverride ?? qsParams?.get('username') ?? '') const [passwordOverride, setPasswordOverride] = React.useState(initialData?.passwordOverride ?? qsParams?.get('password') ?? '') const smallWidth = useIsSmallWidth() + const lockConnect = qsParams?.get('lockConnect') === 'true' return
setProxyOverride(value)} placeholder={defaults?.proxyOverride} /> setUsernameOverride(value)} placeholder={defaults?.usernameOverride} /> setPasswordOverride(value)} /* placeholder='For advanced usage only' */ /> - - + } }>Cancel} {qsParams?.get('ip') &&
} diff --git a/src/styles.css b/src/styles.css index 30abc52b..fa57e51d 100644 --- a/src/styles.css +++ b/src/styles.css @@ -134,6 +134,18 @@ body { -ms-interpolation-mode: nearest-neighbor; } +.overlay-top-scaled { + position: fixed; + inset: 0; + transform-origin: top left; + transform: scale(var(--guiScale)); + width: calc(100% / var(--guiScale)); + height: calc(100% / var(--guiScale)); + z-index: 80; + image-rendering: pixelated; + pointer-events: none; +} + #viewer-canvas { position: fixed; top: 0; From 620488af201a02fc38bc19a604876a26884c01a2 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Fri, 10 May 2024 05:08:28 +0300 Subject: [PATCH 0052/1074] Add Gamepad UI Cursor component and styles --- src/react/GamepadUiCursor.module.css | 11 ++++++++ src/react/GamepadUiCursor.tsx | 40 ++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/react/GamepadUiCursor.module.css create mode 100644 src/react/GamepadUiCursor.tsx diff --git a/src/react/GamepadUiCursor.module.css b/src/react/GamepadUiCursor.module.css new file mode 100644 index 00000000..f3f114e4 --- /dev/null +++ b/src/react/GamepadUiCursor.module.css @@ -0,0 +1,11 @@ +.crosshair { + width: 16px; + height: 16px; + background: var(--gui-icons); + background-size: calc(256px * var(--crosshair-scale)); + position: fixed; + z-index: 100; + transform: translate(-50%, -50%); + pointer-events: none; + image-rendering: pixelated; +} diff --git a/src/react/GamepadUiCursor.tsx b/src/react/GamepadUiCursor.tsx new file mode 100644 index 00000000..84c9b63a --- /dev/null +++ b/src/react/GamepadUiCursor.tsx @@ -0,0 +1,40 @@ +import { proxy, useSnapshot } from 'valtio' +import { useEffect } from 'react' +import { activeModalStack, miscUiState } from '../globalState' +import SharedHudVars from './SharedHudVars' +import styles from './GamepadUiCursor.module.css' + +export const gamepadUiCursorState = proxy({ + x: 50, + y: 50, + multiply: 1, + display: false +}) + +export const moveGamepadCursorByPx = (value: number, isX: boolean) => { + value *= gamepadUiCursorState.multiply * 3 + const valueToPercentage = value / (isX ? window.innerWidth : window.innerHeight) * 100 + gamepadUiCursorState[isX ? 'x' : 'y'] += valueToPercentage +} + +export default () => { + const hasModals = useSnapshot(activeModalStack).length > 0 + const { x, y } = useSnapshot(gamepadUiCursorState) + const { usingGamepadInput, gameLoaded } = useSnapshot(miscUiState) + + const doDisplay = usingGamepadInput && (hasModals || !gameLoaded) + + useEffect(() => { + document.body.style.cursor = gameLoaded && !hasModals && usingGamepadInput ? 'none' : 'auto' + }, [usingGamepadInput, hasModals, gameLoaded]) + + useEffect(() => { + gamepadUiCursorState.display = doDisplay + }, [doDisplay]) + + if (!doDisplay) return null + + return +
+ +} From e9443cd2fe0dece8749e291444473a89c6767459 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 9 May 2024 21:17:16 +0300 Subject: [PATCH 0053/1074] ui: fix input alignment --- src/react/input.module.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/react/input.module.css b/src/react/input.module.css index ce889645..ce181ade 100644 --- a/src/react/input.module.css +++ b/src/react/input.module.css @@ -8,7 +8,7 @@ } .input { - position: relative; + position: absolute; outline: none; border: none; background: none; From 3f068ed0da7ebb4cd6519c0d473683cb86ebd28d Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 10 May 2024 06:03:25 +0300 Subject: [PATCH 0054/1074] fix tsc --- src/react/TouchAreasControls.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/react/TouchAreasControls.tsx b/src/react/TouchAreasControls.tsx index f56db047..b660fcb2 100644 --- a/src/react/TouchAreasControls.tsx +++ b/src/react/TouchAreasControls.tsx @@ -40,12 +40,14 @@ export const handleMovementStickDelta = (e?: { clientX, clientY }) => { } joystickPointer.joystickInner!.style.transform = `translate(${x}px, ${y}px)` + const vector = { + x: x / max, + y: 0, + z: y / max, + } void contro.emit('movementUpdate', { - vector: { - x: x / max, - y: 0, - z: y / max, - }, + vector, + soleVector: vector }) } From b7d317825f1f32a03b235249a2f403e9584d3a82 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 11 May 2024 21:15:51 +0300 Subject: [PATCH 0055/1074] fix lighting in playround for pre-flat versions --- prismarine-viewer/examples/playground.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/prismarine-viewer/examples/playground.ts b/prismarine-viewer/examples/playground.ts index 295cc47d..223fc6f2 100644 --- a/prismarine-viewer/examples/playground.ts +++ b/prismarine-viewer/examples/playground.ts @@ -138,6 +138,7 @@ async function main () { viewer.entities.onSkinUpdate = () => { viewer.render() } + viewer.world.mesherConfig.enableLighting = false viewer.listen(worldView) // Load chunks From 54a7e52cff8c6d372ca93f921188a17399955758 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 11 May 2024 21:20:30 +0300 Subject: [PATCH 0056/1074] add light test utils --- .../viewer/lib/mesher/test/mesherTester.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts index a665db6b..6103a3d4 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts @@ -38,8 +38,22 @@ export const setup = (version, initialBlocks: [number[], string][]) => { } reload() + const getLights = () => { + return Object.fromEntries(getGeometry().faces.map(({ face, light }) => ([face, light * 15 - 2]))) + } + + const setLight = (x: number, y: number, z: number, val = 0) => { + // create columns first + chunk1.setBlockLight(pos.offset(x, y, z), 15) + chunk1.setSkyLight(pos.offset(x, y, z), 15) + chunk1.setBlockLight(pos.offset(x, y, z), val) + chunk1.setSkyLight(pos.offset(x, y, z), 0) + } + return { mesherWorld, + setLight, + getLights, getGeometry, pos, mcData, From 02fb4c93940ec995ccf89dca52d28c8b44c49781 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 02:15:58 +0300 Subject: [PATCH 0057/1074] fix different width in server menu --- src/react/singleplayer.module.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/react/singleplayer.module.css b/src/react/singleplayer.module.css index fef43b76..c7ec49f6 100644 --- a/src/react/singleplayer.module.css +++ b/src/react/singleplayer.module.css @@ -23,7 +23,7 @@ .world_root { height: 40px; - width: 300px; + width: 308px; border: 1px solid transparent; display: flex; outline: none; @@ -43,6 +43,7 @@ flex-direction: column; font-size: 11px; white-space: nowrap; + width: 100%; } .world_info_formatted { font-size: 10px; From ef146f7a28c5105f47810d50db6b6995db120924 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 03:42:31 +0300 Subject: [PATCH 0058/1074] fix(hud): fix safe bottom area for iOS devices when clicked "Hide Toolbar" https://forums.developer.apple.com/forums/thread/716552 chore: add new experiment for demo --- experiments/ios-safe-area-bottom-bug.html | 15 +++++++++++++++ package.json | 2 +- src/react/HotbarRenderApp.tsx | 2 +- src/react/SharedHudVars.tsx | 6 ++++-- 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 experiments/ios-safe-area-bottom-bug.html diff --git a/experiments/ios-safe-area-bottom-bug.html b/experiments/ios-safe-area-bottom-bug.html new file mode 100644 index 00000000..53d867f5 --- /dev/null +++ b/experiments/ios-safe-area-bottom-bug.html @@ -0,0 +1,15 @@ + +
+ bottom: env(safe-area-inset-bottom) +
diff --git a/package.json b/package.json index 11324549..92de17cf 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "lint": "eslint \"{src,cypress}/**/*.{ts,js,jsx,tsx}\"", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build && node scripts/build.js moveStorybookFiles", - "start-experiments": "vite --config experiments/vite.config.ts", + "start-experiments": "vite --config experiments/vite.config.ts --host", "watch-other-workers": "echo NOT IMPLEMENTED", "watch-mesher": "node prismarine-viewer/buildMesherWorker.mjs -w", "run-playground": "run-p watch-mesher watch-other-workers playground-server watch-playground", diff --git a/src/react/HotbarRenderApp.tsx b/src/react/HotbarRenderApp.tsx index 5b32e3cc..3b50f49b 100644 --- a/src/react/HotbarRenderApp.tsx +++ b/src/react/HotbarRenderApp.tsx @@ -211,7 +211,7 @@ export default () => { justifyContent: 'center', zIndex: hasModals ? 1 : 8, pointerEvents: 'none', - bottom: 'env(safe-area-inset-bottom)' + bottom: 'var(--hud-bottom-raw)' }} /> diff --git a/src/react/SharedHudVars.tsx b/src/react/SharedHudVars.tsx index 9a9392fd..6cc0c54e 100644 --- a/src/react/SharedHudVars.tsx +++ b/src/react/SharedHudVars.tsx @@ -8,10 +8,12 @@ export default ({ children }): React.ReactElement => { // 1. Don't inline long data URLs for better DX in elements tab // 2. Easier application to globally override icons with custom image (eg from resourcepacks) const css = /* css */` - :root { + html { --widgets-gui-atlas: url(${widgets}); --gui-icons: url(${icons}), url(${icons}); - --safe-area-inset-bottom: calc(env(safe-area-inset-bottom) / 2); + --hud-bottom-max: 0px; + --hud-bottom-raw: max(env(safe-area-inset-bottom), var(--hud-bottom-max)); + --safe-area-inset-bottom: calc(var(--hud-bottom-raw) / 2); } ` const style = document.createElement('style') From 0a1b97857c4c464da0fc306154420b577e9dad9c Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 03:43:10 +0300 Subject: [PATCH 0059/1074] feat: add a way to specify version from quick connect e.g. test.com:1.18.2 or 192.168.0.100:25566:1.17.1 --- src/react/ServersList.tsx | 12 ++++++++++-- src/react/ServersListProvider.tsx | 7 +++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/react/ServersList.tsx b/src/react/ServersList.tsx index 2fbbd349..f6b89452 100644 --- a/src/react/ServersList.tsx +++ b/src/react/ServersList.tsx @@ -60,14 +60,22 @@ export default ({ initialProxies, updateProxies: updateProxiesProp, joinServer, return { e.preventDefault() - joinServer(serverIp, { + let ip = serverIp + let version + const parts = ip.split(':') + if (parts.length > 1 && parts.at(-1)!.includes('.')) { + version = parts.at(-1)! + ip = parts.slice(0, -1).join(':') + } + joinServer(ip, { shouldSave: save, + versionOverride: version, }) }} >
{/* todo history */} - setServerIp(value)} /> + setServerIp(value)} />
- ) : null } + ) : null} {level > 0 && level < 256 ? (
{level + 1}
- ) : null } + ) : null}
} @@ -56,7 +56,7 @@ const indicatorIcons: Record = { readonlyFiles: 'file-off', } -export default ({ indicators, effects }: {indicators: typeof defaultIndicatorsState, effects: readonly EffectType[]}) => { +export default ({ indicators, effects }: { indicators: typeof defaultIndicatorsState, effects: readonly EffectType[] }) => { const effectsRef = useRef(effects) useEffect(() => { effectsRef.current = effects diff --git a/src/reactUi.tsx b/src/reactUi.tsx index 94ea6b88..9a79de34 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -36,6 +36,7 @@ import Crosshair from './react/Crosshair' import ButtonAppProvider from './react/ButtonAppProvider' import ServersListProvider from './react/ServersListProvider' import GamepadUiCursor from './react/GamepadUiCursor' +import HeldMapUi from './react/HeldMapUi' const RobustPortal = ({ children, to }) => { return createPortal({children}, to) @@ -85,6 +86,12 @@ const GameHud = ({ children }) => { return gameLoaded ? children : null } +const InGameComponent = ({ children }) => { + const { gameLoaded } = useSnapshot(miscUiState) + if (!gameLoaded) return null + return children +} + const InGameUi = () => { const { gameLoaded } = useSnapshot(miscUiState) if (!gameLoaded) return @@ -135,6 +142,14 @@ const WidgetDisplay = ({ name, Component }) => { const App = () => { return
+ +
+ + + +
+
+
@@ -151,6 +166,7 @@ const App = () => { */} + {/* todo correct mounting! */}
diff --git a/src/styles.css b/src/styles.css index fa57e51d..139996e9 100644 --- a/src/styles.css +++ b/src/styles.css @@ -134,7 +134,7 @@ body { -ms-interpolation-mode: nearest-neighbor; } -.overlay-top-scaled { +.overlay-top-scaled, .overlay-bottom-scaled { position: fixed; inset: 0; transform-origin: top left; @@ -146,6 +146,10 @@ body { pointer-events: none; } +.overlay-bottom-scaled { + z-index: 1; +} + #viewer-canvas { position: fixed; top: 0; diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index c3263f2f..2e20de29 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -197,7 +197,7 @@ class WorldInteraction { 'minecart', 'boat', 'tnt_minecart', 'chest_minecart', 'hopper_minecart', 'command_block_minecart', 'armor_stand', 'lead', 'name_tag', // - 'writable_book', 'written_book', 'compass', 'clock', 'filled_map', 'empty_map', + 'writable_book', 'written_book', 'compass', 'clock', 'filled_map', 'empty_map', 'map', 'shears', 'carrot_on_a_stick', 'warped_fungus_on_a_stick', 'spawn_egg', 'trident', 'crossbow', 'elytra', 'shield', 'turtle_helmet', ].includes(bot.heldItem.name) @@ -219,10 +219,10 @@ class WorldInteraction { bot.lookAt = oldLookAt }).catch(console.warn) } - this.lastBlockPlaced = 0 } else { bot.activateItem() // todo offhand } + this.lastBlockPlaced = 0 } // Stop break From 3329d0e75eaffca181d652f0fb80df96a8e3b90c Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 04:14:16 +0300 Subject: [PATCH 0062/1074] fix: held item display was not updated after server/window GUI manipulation on inventory --- src/index.ts | 9 +++++++++ src/react/HeldMapUi.tsx | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 69886b3b..8dbc46cf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -547,6 +547,15 @@ async function connect (connectOptions: ConnectOptions) { window.Vec3 = Vec3 window.pathfinder = pathfinder + // patch mineflayer + // todo move to mineflayer + bot.inventory.on('updateSlot', (index) => { + if ((index as unknown as number) === bot.quickBarSlot + bot.inventory.hotbarStart) { + //@ts-expect-error + bot.emit('heldItemChanged') + } + }) + miscUiState.gameLoaded = true miscUiState.loadedServerIndex = connectOptions.serverIndex ?? '' customEvents.emit('gameLoaded') diff --git a/src/react/HeldMapUi.tsx b/src/react/HeldMapUi.tsx index 242cba03..9187c98b 100644 --- a/src/react/HeldMapUi.tsx +++ b/src/react/HeldMapUi.tsx @@ -20,13 +20,14 @@ export default () => { return canvas.toDataURL('image/png') }) + // TODO delete maps! const updateHeldMap = () => { setDataUrl(null) if (!bot.heldItem || !['filled_map', 'map'].includes(bot.heldItem.name)) return // setDataUrl(true) const mapNumber = (bot.heldItem?.nbt?.value as any)?.map?.value // if (!mapNumber) return - setDataUrl(bot.mapDownloader.maps[mapNumber] as unknown as string) + setDataUrl(bot.mapDownloader.maps?.[mapNumber] as unknown as string) } bot.on('heldItemChanged' as any, () => { From c1651ce3b55ec846fd459b9c61461ce3040211e2 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 15:36:11 +0300 Subject: [PATCH 0063/1074] fix: some collision shapes were missing for 1.20.4 --- ...Shapes.mjs => generateMoreCollisionShapes.mjs} | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) rename scripts/{getMoreCollisionShapes.mjs => generateMoreCollisionShapes.mjs} (94%) diff --git a/scripts/getMoreCollisionShapes.mjs b/scripts/generateMoreCollisionShapes.mjs similarity index 94% rename from scripts/getMoreCollisionShapes.mjs rename to scripts/generateMoreCollisionShapes.mjs index 3f772af1..ee178478 100644 --- a/scripts/getMoreCollisionShapes.mjs +++ b/scripts/generateMoreCollisionShapes.mjs @@ -1,8 +1,11 @@ +//@ts-check import minecraftData from 'minecraft-data' import minecraftAssets from 'minecraft-assets' import fs from 'fs' -const latestData = minecraftData('1.20.2') +const latestVersion = minecraftData.versions.pc[0] + +const latestData = minecraftData(latestVersion.minecraftVersion) // dont touch, these are the ones that are already full box const fullBoxInteractionShapes = [ @@ -62,7 +65,7 @@ const fullBoxInteractionShapesTemp = [ 'white_wall_banner', ] -const shapes = latestData.blockCollisionShapes; +const shapes = latestData.blockCollisionShapes const fullShape = shapes.shapes[1] const outputJson = {} @@ -97,8 +100,8 @@ const interestedBlocks = latestData.blocksArray.filter(block => { const { blocksStates, blocksModels } = minecraftAssets(latestData.version.minecraftVersion) const getShapeFromModel = (block,) => { - const blockStates = JSON.parse(fs.readFileSync('./prismarine-viewer/public/blocksStates/1.19.1.json')) - const blockState = blockStates[block]; + const blockStates = JSON.parse(fs.readFileSync('./prismarine-viewer/public/blocksStates/1.19.1.json', 'utf8')) + const blockState = blockStates[block] const perVariant = {} for (const [key, variant] of Object.entries(blockState.variants)) { // const shapes = (Array.isArray(variant) ? variant : [variant]).flatMap((v) => v.model?.elements).filter(Boolean).map(({ from, to }) => [...from, ...to]).reduce((acc, cur) => { @@ -146,7 +149,7 @@ outer: for (const interestedBlock of [...interestedBlocksNoStates, ...interested } } - const hasStates = interestedBlocksStates.includes(interestedBlock); + const hasStates = interestedBlocksStates.includes(interestedBlock) if (hasStates) { const states = blocksStates[interestedBlock] if (!states) { @@ -159,7 +162,7 @@ outer: for (const interestedBlock of [...interestedBlocksNoStates, ...interested continue } let outputStates = {} - for (const {when} of states.multipart) { + for (const { when } of states.multipart) { if (when) { for (const [key, value] of Object.entries(when)) { if (key === 'OR') { From 6f085ac5061e2d38b2f7fa71c1df3127b549186f Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 15:49:10 +0300 Subject: [PATCH 0064/1074] fix: entity text was not displayed in some edge-cases --- prismarine-viewer/viewer/lib/entities.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/prismarine-viewer/viewer/lib/entities.js b/prismarine-viewer/viewer/lib/entities.js index 290c3932..136c77fe 100644 --- a/prismarine-viewer/viewer/lib/entities.js +++ b/prismarine-viewer/viewer/lib/entities.js @@ -1,10 +1,10 @@ //@ts-check -const THREE = require('three') -const TWEEN = require('@tweenjs/tween.js') - -const Entity = require('./entity/EntityMesh') -const { dispose3 } = require('./dispose') -const EventEmitter = require('events') +import * as THREE from 'three' +import * as TWEEN from '@tweenjs/tween.js' +import * as Entity from './entity/EntityMesh' +import { dispose3 } from './dispose' +import nbt from 'prismarine-nbt' +import EventEmitter from 'events' import { PlayerObject, PlayerAnimation } from 'skinview3d' import { loadSkinToCanvas, loadEarsToCanvasFromSkin, inferModelType, loadCapeToCanvas, loadImage } from 'skinview-utils' // todo replace with url @@ -264,7 +264,7 @@ export class Entities extends EventEmitter { displaySimpleText(jsonLike) { if (!jsonLike) return - const parsed = mojangson.simplify(mojangson.parse(jsonLike)) + const parsed = typeof jsonLike === 'string' ? mojangson.simplify(mojangson.parse(jsonLike)) : nbt.simplify(jsonLike) const text = flat(parsed).map(x => x.text) return text.join('') } From 8d710e297eb116c45160d19f791cddf1ab485ea0 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 15:54:33 +0300 Subject: [PATCH 0065/1074] save version override from quick connect --- src/react/ServersListProvider.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index 07bbba31..bd39bc10 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -252,9 +252,10 @@ const Inner = () => { autoLoginPassword: server?.autoLogin?.[username], onSuccessfulPlay () { if (overrides.shouldSave && !serversList.some(s => s.ip === ip)) { - const newServersList = [...serversList, { + const newServersList: StoreServerItem[] = [...serversList, { ip, lastJoined: Date.now(), + versionOverride: overrides.versionOverride, }] // setServersList(newServersList) setNewServersList(newServersList) // component is not mounted From 5198e698160483fcc2aaacb508cee63501d546a2 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 18 May 2024 05:57:50 +0300 Subject: [PATCH 0066/1074] fix: correctly display item names in inventory GUI fix: fix opening nested inventory GUI on servers! --- README.MD | 4 ++++ src/globalState.ts | 6 +++--- src/inventoryWindows.ts | 27 +++++++++++++++++++++------ 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/README.MD b/README.MD index ce368540..225cdda2 100644 --- a/README.MD +++ b/README.MD @@ -126,3 +126,7 @@ Press `Y` to set query parameters to url of your current game state. - [Minecraft Protocol](https://github.com/PrismarineJS/node-minecraft-protocol) - Makes connections to servers possible - [Peer.js](https://peerjs.com/) - P2P networking (when you open to wan) - [Three.js](https://threejs.org/) - Helping in 3D rendering + +### Alternatives + +- [https://github.com/ClassiCube/ClassiCube](ClassiCube - Better C# Rewrite) [https://www.classicube.net/](https://www.classicube.net/server/play/?warned=true) diff --git a/src/globalState.ts b/src/globalState.ts index 1b0526f9..4b62f8d6 100644 --- a/src/globalState.ts +++ b/src/globalState.ts @@ -8,7 +8,7 @@ import type { OptionsGroupType } from './optionsGuiScheme' const notHideableModalsWithoutForce = new Set(['app-status']) -type Modal = ({ elem?: HTMLElement & Record } & { reactType?: string }) +type Modal = ({ elem?: HTMLElement & Record } & { reactType: string }) type ContextMenuItem = { callback; label } @@ -57,7 +57,7 @@ const showModalInner = (modal: Modal) => { } export const showModal = (elem: /* (HTMLElement & Record) | */{ reactType: string }) => { - const resolved = elem instanceof HTMLElement ? { elem: ref(elem) } : elem + const resolved = elem const curModal = activeModalStack.at(-1) if (/* elem === curModal?.elem || */(elem.reactType && elem.reactType === curModal?.reactType) || !showModalInner(resolved)) return if (curModal) defaultModalActions.hide(curModal) @@ -123,7 +123,7 @@ export type AppConfig = { defaultProxy?: string // defaultProxySave?: string // defaultVersion?: string - promoteServers?: Array<{ip, description, version?}> + promoteServers?: Array<{ ip, description, version?}> mapsProvider?: string } diff --git a/src/inventoryWindows.ts b/src/inventoryWindows.ts index d9fda1c7..d87d4008 100644 --- a/src/inventoryWindows.ts +++ b/src/inventoryWindows.ts @@ -123,6 +123,11 @@ export const onGameLoad = (onLoad) => { // todo hide up to the window itself! hideCurrentModal() }) + bot.on('respawn', () => { // todo validate logic against native client (maybe login) + if (lastWindow) { + hideCurrentModal() + } + }) customEvents.on('search', (q) => { if (!lastWindow) return @@ -316,10 +321,10 @@ export const getItemNameRaw = (item: Pick const getItemName = (slot: Item | null) => { const parsed = getItemNameRaw(slot) - if (!parsed || parsed['extra']) return + if (!parsed) return // todo display full text renderer from sign renderer const text = flat(parsed as MessageFormatPart).map(x => x.text) - return text + return text.join('') } export const renderSlotExternal = (slot) => { @@ -362,12 +367,15 @@ export const onModalClose = (callback: () => any) => { callback() unsubscribe() } - }) + }, true) } const implementedContainersGuiMap = { // todo allow arbitrary size instead! + 'minecraft:generic_9x1': 'ChestWin', + 'minecraft:generic_9x2': 'ChestWin', 'minecraft:generic_9x3': 'ChestWin', + 'minecraft:generic_9x4': 'Generic95Win', 'minecraft:generic_9x5': 'Generic95Win', // hopper 'minecraft:generic_5x1': 'HopperWin', @@ -401,22 +409,29 @@ export const openItemsCanvas = (type, _bot = bot as typeof bot | null) => { return inv } +let skipClosePacketSending = false const openWindow = (type: string | undefined) => { // if (activeModalStack.some(x => x.reactType?.includes?.('player_win:'))) { if (activeModalStack.length) { // game is not in foreground, don't close current modal - if (type) bot.currentWindow?.['close']() - return + if (type) { + skipClosePacketSending = true + hideCurrentModal() + } else { + bot.currentWindow?.['close']() + return + } } showModal({ reactType: `player_win:${type}`, }) onModalClose(() => { // might be already closed (event fired) - if (type !== undefined && bot.currentWindow) bot.currentWindow['close']() + if (type !== undefined && bot.currentWindow && !skipClosePacketSending) bot.currentWindow['close']() lastWindow.destroy() lastWindow = null as any miscUiState.displaySearchInput = false destroyFn() + skipClosePacketSending = false }) cleanLoadedImagesCache() const inv = openItemsCanvas(type) From 6375df15763c0bae6eb36a59801be43f6ad27384 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 18 May 2024 22:24:52 +0300 Subject: [PATCH 0067/1074] improve readme clarity --- README.MD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.MD b/README.MD index 225cdda2..af966101 100644 --- a/README.MD +++ b/README.MD @@ -120,7 +120,7 @@ Press `Y` to set query parameters to url of your current game state. ### Notable Things that Power this Project - [Mineflayer](https://github.com/PrismarineJS/mineflayer) - Handles all client-side communications with the server (including the builtin one) - forked -- [Flying Squid](https://github.com/prismarineJS/flying-squid) - The builtin server that makes single player possible! Here forked version is used. +- [Forked Flying Squid (Space Squid)](https://github.com/zardoy/space-squid) - The builtin offline server that makes single player & P2P possible! - [Prismarine Provider Anvil](https://github.com/PrismarineJS/prismarine-provider-anvil) - Handles world loading (region format) - [Prismarine Physics](https://github.com/PrismarineJS/prismarine-physics) - Does all the physics calculations - [Minecraft Protocol](https://github.com/PrismarineJS/node-minecraft-protocol) - Makes connections to servers possible @@ -129,4 +129,4 @@ Press `Y` to set query parameters to url of your current game state. ### Alternatives -- [https://github.com/ClassiCube/ClassiCube](ClassiCube - Better C# Rewrite) [https://www.classicube.net/](https://www.classicube.net/server/play/?warned=true) +- [https://github.com/ClassiCube/ClassiCube](ClassiCube - Better C# Rewrite) [DEMO](https://www.classicube.net/server/play/?warned=true) From 6bf1085fbe422b3e926fcb89e29da70ea2804c8d Mon Sep 17 00:00:00 2001 From: gguio <109200692+gguio@users.noreply.github.com> Date: Sat, 18 May 2024 23:51:35 +0400 Subject: [PATCH 0068/1074] feat: Key binds screen (#108) --------- Co-authored-by: gguio Co-authored-by: Vitaly --- esbuild.mjs | 1 + package.json | 2 +- pnpm-lock.yaml | 10 +- src/controls.ts | 28 +- ...tation_console_controller_gamepad_icon.svg | 1 + src/customCommands.ts | 91 ++++ src/optionsGuiScheme.tsx | 23 +- src/react/KeybindingsCustom.tsx | 171 ++++++++ src/react/KeybindingsScreen.module.css | 88 ++++ src/react/KeybindingsScreen.tsx | 388 +++++++++++++++++- src/react/KeybindingsScreenApp.tsx | 51 --- src/react/KeybindingsScreenProvider.tsx | 50 +++ src/react/OptionsGroup.tsx | 2 +- src/react/globals.d.ts | 4 + ...tation_console_controller_gamepad_icon.svg | 1 + ...tation_console_controller_gamepad_icon.svg | 1 + ...square_console_controller_gamepad_icon.svg | 1 + ...iangle_console_controller_gamepad_icon.svg | 1 + src/react/storageProvider.ts | 13 + src/reactUi.tsx | 2 + src/screens.css | 1 + 21 files changed, 858 insertions(+), 72 deletions(-) create mode 100644 src/cross_playstation_console_controller_gamepad_icon.svg create mode 100644 src/customCommands.ts create mode 100644 src/react/KeybindingsCustom.tsx create mode 100644 src/react/KeybindingsScreen.module.css delete mode 100644 src/react/KeybindingsScreenApp.tsx create mode 100644 src/react/KeybindingsScreenProvider.tsx create mode 100644 src/react/ps_icons/circle_playstation_console_controller_gamepad_icon.svg create mode 100644 src/react/ps_icons/cross_playstation_console_controller_gamepad_icon.svg create mode 100644 src/react/ps_icons/playstation_square_console_controller_gamepad_icon.svg create mode 100644 src/react/ps_icons/playstation_triangle_console_controller_gamepad_icon.svg create mode 100644 src/react/storageProvider.ts diff --git a/esbuild.mjs b/esbuild.mjs index 1e8d6478..d68693d8 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -79,6 +79,7 @@ const buildOptions = { loader: { // todo use external or resolve issues with duplicating '.png': 'dataurl', + '.svg': 'dataurl', '.map': 'empty', '.vert': 'text', '.frag': 'text', diff --git a/package.json b/package.json index 4bbeaf81..6905a8b7 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "constants-browserify": "^1.0.0", - "contro-max": "^0.1.6", + "contro-max": "^0.1.7", "crypto-browserify": "^3.12.0", "cypress": "^10.11.0", "cypress-esbuild-preprocessor": "^1.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index beb0c0a9..dcacb13a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -268,8 +268,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 contro-max: - specifier: ^0.1.6 - version: 0.1.6(typescript@5.5.0-beta) + specifier: ^0.1.7 + version: 0.1.7(typescript@5.5.0-beta) crypto-browserify: specifier: ^3.12.0 version: 3.12.0 @@ -3811,8 +3811,8 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - contro-max@0.1.6: - resolution: {integrity: sha512-QsoOcAlbtNgkCGBvwKsh+GUVZ2c5zfMgYQCu+v4MplX5VolkWhMwAcEOBRxt8oENbnRXOKUGQr816Ey1G4/jpg==} + contro-max@0.1.7: + resolution: {integrity: sha512-HIYF1Dl50tUyTKaDsX+mPMDv2OjleNMVedYuBTX0n1wKNm9WxjWu2w74ATjz/8fHVL9GgmziIxAlFStd2je6kg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} convert-source-map@1.9.0: @@ -12851,7 +12851,7 @@ snapshots: content-type@1.0.5: {} - contro-max@0.1.6(typescript@5.5.0-beta): + contro-max@0.1.7(typescript@5.5.0-beta): dependencies: events: 3.3.0 lodash-es: 4.17.21 diff --git a/src/controls.ts b/src/controls.ts index 6dd47be2..6e38b90c 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -6,21 +6,24 @@ import { proxy, subscribe } from 'valtio' import { ControMax } from 'contro-max/build/controMax' import { CommandEventArgument, SchemaCommandInput } from 'contro-max/build/types' import { stringStartsWith } from 'contro-max/build/stringUtils' +import { UserOverridesConfig } from 'contro-max/build/types/store' import { isGameActive, showModal, gameAdditionalState, activeModalStack, hideCurrentModal, miscUiState } from './globalState' import { goFullscreen, pointerLock, reloadChunks } from './utils' import { options } from './optionsStorage' import { openPlayerInventory } from './inventoryWindows' import { chatInputValueGlobal } from './react/Chat' import { fsState } from './loadSave' +import { customCommandsConfig } from './customCommands' +import { CustomCommand } from './react/KeybindingsCustom' import { showOptionsModal } from './react/SelectOption' import widgets from './react/widgets' import { getItemFromBlock } from './botUtils' import { gamepadUiCursorState, moveGamepadCursorByPx } from './react/GamepadUiCursor' -// todo move this to shared file with component -export const customKeymaps = proxy(JSON.parse(localStorage.keymap || '{}')) + +export const customKeymaps = proxy(JSON.parse(localStorage.keymap || '{}')) as UserOverridesConfig subscribe(customKeymaps, () => { - localStorage.keymap = JSON.parse(customKeymaps) + localStorage.keymap = JSON.stringify(customKeymaps) }) const controlOptions = { @@ -53,7 +56,8 @@ export const contro = new ControMax({ }, advanced: { lockUrl: ['KeyY'], - } + }, + custom: {} as Record, // waila: { // showLookingBlockRecipe: ['Numpad3'], // showLookingBlockUsages: ['Numpad4'] @@ -81,6 +85,8 @@ export const contro = new ControMax({ window.controMax = contro export type Command = CommandEventArgument['command'] +// updateCustomBinds() + export const setDoPreventDefault = (state: boolean) => { controlOptions.preventDefault = state } @@ -285,6 +291,20 @@ function cycleHotbarSlot (dir: 1 | -1) { bot.setQuickBarSlot(newHotbarSlot) } +// custom commands hamdler +const customCommandsHandler = (buttonData: { code?: string, button?: string, state: boolean }) => { + if (!buttonData.state || !isGameActive(true)) return + + const codeOrButton = buttonData.code ?? buttonData.button + const inputType = buttonData.code ? 'keys' : 'gamepad' + for (const value of Object.values(contro.userConfig!.custom)) { + if (value[inputType]?.includes(codeOrButton!)) { + customCommandsConfig[(value as CustomCommand).type].handler((value as CustomCommand).inputs) + } + } +} +contro.on('pressedKeyOrButtonChanged', customCommandsHandler) + contro.on('trigger', ({ command }) => { const willContinue = !isGameActive(true) alwaysPressedHandledCommand(command) diff --git a/src/cross_playstation_console_controller_gamepad_icon.svg b/src/cross_playstation_console_controller_gamepad_icon.svg new file mode 100644 index 00000000..d7d176e2 --- /dev/null +++ b/src/cross_playstation_console_controller_gamepad_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/customCommands.ts b/src/customCommands.ts new file mode 100644 index 00000000..eddfc89e --- /dev/null +++ b/src/customCommands.ts @@ -0,0 +1,91 @@ +import { guiOptionsScheme, tryFindOptionConfig } from './optionsGuiScheme' +import { options } from './optionsStorage' + +export const customCommandsConfig = { + chat: { + input: [ + { + type: 'text', + placeholder: 'Command to send e.g. gamemode creative' + } + ], + handler ([command]) { + bot.chat(`/${command.replace(/^\//, '')}`) + } + }, + setOrToggleSetting: { + input: [ + { + type: 'select', + // maybe title case? + options: Object.keys(options) + }, + { + type: 'select', + options: ['toggle', 'set'] + }, + ([setting = '', action = ''] = []) => { + const value = options[setting] + if (!action || value === undefined || action === 'toggle') return null + if (action === 'set') { + const getBase = () => { + const config = tryFindOptionConfig(setting as any) + if (config && 'values' in config) { + return { + type: 'select', + options: config.values + } + } + if (config?.type === 'toggle' || typeof value === 'boolean') { + return { + type: 'select', + options: ['true', 'false'] + } + } + if (config?.type === 'slider' || value.type === 'number') { + return { + type: 'number', + } + } + return { + type: 'text' + } + } + return { + ...getBase(), + placeholder: value + } + } + } + ], + handler ([setting, action, value]) { + if (action === 'toggle') { + const value = options[setting] + const config = tryFindOptionConfig(setting) + if (config && 'values' in config && config.values) { + const { values } = config + const currentIndex = values.indexOf(value) + const nextIndex = (currentIndex + 1) % values.length + options[setting] = values[nextIndex] + } else { + options[setting] = typeof value === 'boolean' ? !value : typeof value === 'number' ? value + 1 : value + } + } else { + options[setting] = value + } + } + }, + jsScripts: { + input: [ + { + type: 'text', + placeholder: 'JavaScript code to run in main thread (sensitive!)' + } + ], + handler ([code]) { + // eslint-disable-next-line no-new-func -- this is a feature, not a bug + new Function(code)() + } + }, + // openCommandsScreen: {} +} diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index 1c92a39c..b847fe11 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -184,7 +184,16 @@ export const guiOptionsScheme: { custom () { return Keyboard & Mouse }, - // keybindings + }, + { + custom () { + return + }, mouseSensX: {}, mouseSensY: { min: -1, @@ -282,3 +291,15 @@ const Category = ({ children }) =>
{children}
+ +export const tryFindOptionConfig = (option: keyof AppOptions) => { + for (const group of Object.values(guiOptionsScheme)) { + for (const optionConfig of group) { + if (option in optionConfig) { + return optionConfig[option] + } + } + } + + return null +} diff --git a/src/react/KeybindingsCustom.tsx b/src/react/KeybindingsCustom.tsx new file mode 100644 index 00000000..bee991bf --- /dev/null +++ b/src/react/KeybindingsCustom.tsx @@ -0,0 +1,171 @@ +import { useEffect, useState, useContext } from 'react' +import { customCommandsConfig } from '../customCommands' +import { ButtonWithMatchesAlert, Context } from './KeybindingsScreen' +import Button from './Button' +import styles from './KeybindingsScreen.module.css' +import Input from './Input' + + +export type CustomCommand = { + keys: undefined | string[] + gamepad: undefined | string[] + type: string + inputs: any[] +} + +export type CustomCommandsMap = Record + +export default ( + { + customCommands, + updateCurrBind, + resetBinding, + }: { + customCommands: CustomCommandsMap, + updateCurrBind: (group: string, action: string) => void, + resetBinding: (group: string, action: string, inputType: string) => void, + } +) => { + const { userConfig, setUserConfig } = useContext(Context) + const [customConfig, setCustomConfig] = useState({ ...customCommands }) + + useEffect(() => { + setUserConfig({ ...userConfig, custom: { ...customConfig } }) + }, [customConfig]) + + const addNewCommand = (type: string) => { + // max key + 1 + const newKey = String(Math.max(...Object.keys(customConfig).map(Number).filter(key => !isNaN(key)), 0) + 1) + setCustomConfig(prev => { + const newCustomConf = { ...prev } + newCustomConf[newKey] = { + keys: undefined as string[] | undefined, + gamepad: undefined as string[] | undefined, + type, + inputs: [] as any[] + } + return newCustomConf + }) + } + + return <> +
+ {Object.entries(customCommandsConfig).map(([group, { input }]) => ( +
+
{group}
+ {Object.entries(customConfig).filter(([key, data]) => data.type === group).map((commandData, indexOption) => { + return + })} +
+ ))} +
+ +} + +const CustomCommandContainer = ( + { + indexOption, + commandData, + updateCurrBind, + setCustomConfig, + resetBinding, + groupData + } +) => { + const { userConfig } = useContext(Context) + + const [commandKey, { keys, gamepad, inputs }] = commandData + const [group, { input }] = groupData + + const setInputValue = (optionKey, indexInput, value) => { + setCustomConfig(prev => { + const newConfig = { ...prev } + newConfig[optionKey].inputs = [...prev[optionKey].inputs] + newConfig[optionKey].inputs[indexInput] = value + return newConfig + }) + } + + return
+ {input.map((obj, indexInput) => { + const config = typeof obj === 'function' ? obj(inputs) : obj + if (!config) return null + + return config.type === 'select' + ? + : setInputValue(commandKey, indexInput, e.target.value)} /> + })} +
+ { + userConfig?.['custom']?.[commandKey]?.keys ?
+
+} diff --git a/src/react/KeybindingsScreen.module.css b/src/react/KeybindingsScreen.module.css new file mode 100644 index 00000000..e8a9f69b --- /dev/null +++ b/src/react/KeybindingsScreen.module.css @@ -0,0 +1,88 @@ +.container { + overflow-x: auto; + width: 100%; + display: flex; + flex-direction: column; + gap: 10px; +} + +@media (max-width: 590px) { + .container { + width: 90vw; + } +} + +.group { + display: flex; + flex-direction: column; + gap: 5px; +} + +.group-category { + font-size: 1rem; + text-align: center; + margin-top: 15px; + margin-bottom: 7px; + text-transform: capitalize; +} + +.actionBinds { + position: relative; + display: flex; +} + +.warning-container { + flex-basis: 25%; + display: flex; + flex-direction: column; + height: inherit; +} + +.actionName { + flex-basis: 30%; + margin-right: 5px; + flex-wrap: wrap; + align-self: center; + font-size: 10px; +} + +.undo-keyboard, +.undo-gamepad { + aspect-ratio: 1; +} + +.button { + width: 100%; + font-size: 7px; +} + +.margin-left { + margin-left: 25px; +} + +.matched-bind { + border: 1px solid red; + border-bottom: 1px solid red; +} + +.matched-bind-warning { + display: flex; + color: yellow; + font-family: inherit; + font-size: 5px; + width: fit-content; +} + +.matched-bind-warning a { + color: inherit; +} + +/* ~~~~ custom bindings styles */ + +.chat-command { + font: inherit; + color: white; + display: block; + height: 100%; + flex-grow: 1; +} diff --git a/src/react/KeybindingsScreen.tsx b/src/react/KeybindingsScreen.tsx index 19038a71..97126655 100644 --- a/src/react/KeybindingsScreen.tsx +++ b/src/react/KeybindingsScreen.tsx @@ -1,12 +1,382 @@ +import { useState, useEffect, useRef, createContext, useContext } from 'react' +import { UserOverridesConfig } from 'contro-max/build/types/store' +import { contro as controEx } from '../controls' +import { hideModal } from '../globalState' +import triangle from './ps_icons/playstation_triangle_console_controller_gamepad_icon.svg' +import square from './ps_icons/playstation_square_console_controller_gamepad_icon.svg' +import circle from './ps_icons/circle_playstation_console_controller_gamepad_icon.svg' +import cross from './ps_icons/cross_playstation_console_controller_gamepad_icon.svg' +import PixelartIcon from './PixelartIcon' +import KeybindingsCustom, { CustomCommandsMap } from './KeybindingsCustom' +import { BindingActionsContext } from './KeybindingsScreenProvider' +import Button from './Button' import Screen from './Screen' +import styles from './KeybindingsScreen.module.css' -export default ({ - onBack, - onReset, - onSet, - keybindings -}) => { - return -

Here you can change the keybindings for the game.

-
+ +type HandleClick = (group: string, action: string, index: number, type: string | null) => void + +type setBinding = (data: any, group: string, command: string, buttonIndex: number) => void + +export const Context = createContext( + { + isPS: false as boolean | undefined, + userConfig: controEx?.userConfig ?? {} as UserOverridesConfig | undefined, + setUserConfig (config) { }, + handleClick: (() => { }) as HandleClick, + parseBindingName (binding) { return '' as string }, + bindsMap: { keyboard: {} as any, gamepad: {} as any } + } +) + +export default ( + { + contro, + isPS, + }: { + contro: typeof controEx, + isPS?: boolean + } +) => { + const containerRef = useRef(null) + const bindsMap = useRef({ keyboard: {} as any, gamepad: {} as any }) + const { commands } = contro.inputSchema + const [userConfig, setUserConfig] = useState(contro.userConfig ?? {}) + const [awaitingInputType, setAwaitingInputType] = useState(null as null | 'keyboard' | 'gamepad') + const [groupName, setGroupName] = useState('') + const [actionName, setActionName] = useState('') + const [buttonNum, setButtonNum] = useState(0) + const { updateBinds } = useContext(BindingActionsContext) + const [customCommands, setCustomCommands] = useState(userConfig.custom as CustomCommandsMap ?? {}) + + const updateCurrBind = (group: string, action: string) => { + setGroupName(prev => group) + setActionName(prev => action) + } + + const handleClick: HandleClick = (group, action, index, type) => { + //@ts-expect-error + setAwaitingInputType(type) + updateCurrBind(group, action) + setButtonNum(prev => index) + } + + const setBinding: setBinding = (data, group, command, buttonIndex) => { + setUserConfig(prev => { + const newConfig = { ...prev } + newConfig[group] ??= {} + newConfig[group][command] ??= {} + + // keys and buttons should always exist in commands + const type = 'code' in data ? 'keys' : 'button' in data ? 'gamepad' : null + if (type) { + newConfig[group][command][type] ??= group === 'custom' ? [] : [...contro.inputSchema.commands[group][command][type]] + newConfig[group][command][type]![buttonIndex] = data.code ?? data.button + } + + return newConfig + }) + } + + const resetBinding = (group: string, command: string, inputType: string) => { + if (!userConfig?.[group]?.[command]) return + + setUserConfig(prev => { + const newConfig = { ...prev } + const prop = inputType === 'keyboard' ? 'keys' : 'gamepad' + newConfig[group][command][prop] = undefined + return newConfig + }) + } + + useEffect(() => { + updateBinds(userConfig) + setCustomCommands({ ...userConfig.custom as CustomCommandsMap }) + + updateBindMap() + }, [userConfig]) + + // const updateKeyboardBinding = (e: import('react').KeyboardEvent) => { + // if (!e.code || e.key === 'Escape' || !awaitingInputType) return + // setBinding({ code: e.code, state: true }, groupName, actionName, buttonNum) + // } + + const updateBinding = (data: any) => { + if ((!data.state && awaitingInputType) || !awaitingInputType) { + setAwaitingInputType(null) + return + } + if ('code' in data) { + if (data.code === 'Escape' || ['Mouse0', 'Mouse1', 'Mouse2'].includes(data.code)) { + setAwaitingInputType(null) + return + } + setBinding({ code: data.code, state: true }, groupName, actionName, buttonNum) + } + if ('button' in data) { + contro.enabled = false + void Promise.resolve().then(() => { contro.enabled = true }) + setBinding(data, groupName, actionName, buttonNum) + } + + setAwaitingInputType(null) + } + + const updateBindMap = () => { + bindsMap.current = { keyboard: {} as any, gamepad: {} as any } + if (commands) { + for (const [group, actions] of Object.entries(commands)) { + for (const [action, { keys, gamepad }] of Object.entries(actions)) { + if (keys) { + let currKeys + if (userConfig?.[group]?.[action]?.keys) { + currKeys = userConfig[group][action].keys + } else { + currKeys = keys + } + for (const [index, key] of currKeys.entries()) { + bindsMap.current.keyboard[key] ??= [] + if (!bindsMap.current.keyboard[key].some(obj => obj.group === group && obj.action === action && obj.index === index)) { + bindsMap.current.keyboard[key].push({ group, action, index }) + } + } + } + if (gamepad) { + let currButtons + if (userConfig?.[group]?.[action]?.gamepad) { + currButtons = userConfig[group][action].gamepad + } else { + currButtons = gamepad + } + if (currButtons.length > 0) { + bindsMap.current.gamepad[currButtons[0]] ??= [] + bindsMap.current.gamepad[currButtons[0]].push({ group, action, index: 0 }) + } + } + } + } + } + } + + // fill binds map + useEffect(() => { + updateBindMap() + }, []) + + useEffect(() => { + contro.on('pressedKeyOrButtonChanged', updateBinding) + + return () => { + contro.off('pressedKeyOrButtonChanged', updateBinding) + } + }, [groupName, actionName, awaitingInputType]) + + + return + + {awaitingInputType && } +
+ + + {Object.entries(commands).map(([group, actions], index) => { + if (group === 'custom') return null + return
+
{group}
+ {group === 'general' ? ( +
+ Note: Left, right and middle click keybindings are hardcoded and cannot be changed currently. +
+ ) : null} + {Object.entries(actions).map(([action, { keys, gamepad }]) => { + return
+
{parseActionName(action)}
+ +
+ })} +
+ })} + + +
+
+
+} + +export const ButtonWithMatchesAlert = ({ + group, + action, + index, + inputType, + keys, + gamepad, +}) => { + const { isPS, userConfig, handleClick, parseBindingName, bindsMap } = useContext(Context) + const [buttonSign, setButtonSign] = useState('') + + useEffect(() => { + const type = inputType === 'keyboard' ? 'keys' : 'gamepad' + + const customValue = userConfig?.[group]?.[action]?.[type]?.[index] + if (customValue) { + if (type === 'keys') { + setButtonSign(parseBindingName(customValue)) + } else { + setButtonSign(isPS && buttonsMap[customValue] ? buttonsMap[customValue] : customValue) + } + } else if (type === 'keys') { + setButtonSign(keys?.length ? parseBindingName(keys[index]) : '') + } else { + setButtonSign(gamepad?.[0] ? + isPS ? + buttonsMap[gamepad[0]] ?? gamepad[0] + : gamepad[0] + : '') + } + }, [userConfig, isPS]) + + return
+ + {userConfig?.[group]?.[action]?.[inputType === 'keyboard' ? 'keys' : 'gamepad']?.some( + key => Object.keys(bindsMap[inputType]).includes(key) + && bindsMap[inputType][key].length > 1 + && bindsMap[inputType][key].some( + prop => prop.index === index + && prop.group === group + && prop.action === action + ) + ) ? ( +
+ +
+ This bind is already in use. +
+
+ ) : null} +
+} + +export const AwaitingInputOverlay = ({ isGamepad }) => { + return
+
+ {isGamepad ? 'Press the button on the gamepad ' : 'Press the key, side mouse button '} + or ESC to cancel. +
+ +
+} + +const parseActionName = (action: string) => { + const parts = action.split(/(?=[A-Z])/) + parts[0] = parts[0].charAt(0).toUpperCase() + parts[0].slice(1) + return parts.join(' ') +} + +const parseBindingName = (binding: string | undefined) => { + if (!binding) return '' + const cut = binding.replaceAll(/(Numpad|Digit|Key)/g, '') + const parts = cut.split(/(?=[A-Z\d])/) + return parts.reverse().join(' ') +} + +const buttonsMap = { + 'A': cross, + 'B': circle, + 'X': square, + 'Y': triangle } diff --git a/src/react/KeybindingsScreenApp.tsx b/src/react/KeybindingsScreenApp.tsx deleted file mode 100644 index e0630eab..00000000 --- a/src/react/KeybindingsScreenApp.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useState } from 'react' -import { contro } from '../controls' -import Button from './Button' -import Screen from './Screen' - -export default () => { - const { commands } = contro.inputSchema - const [awaitingInputType, setAwaitingInputType] = useState(null as null | 'keyboard' | 'gamepad') - - // const - - return - {awaitingInputType && } -

Here you can change the keybindings for the game.

-
- {Object.entries(commands).map(([group, actions]) => { - return
-

{group}

- {Object.entries(actions).map(([action, { keys, gamepadButtons }]) => { - return
- - -
- })} -
- })} -
-
-} - -const AwaitingInputOverlay = ({ isGamepad }) => { - return
- {isGamepad ? 'Press the button on the gamepad' : 'Press the key'}. - Press ESC to cancel. -
-} diff --git a/src/react/KeybindingsScreenProvider.tsx b/src/react/KeybindingsScreenProvider.tsx new file mode 100644 index 00000000..97f04a62 --- /dev/null +++ b/src/react/KeybindingsScreenProvider.tsx @@ -0,0 +1,50 @@ +import { createContext, useState } from 'react' +import { contro } from '../controls' +import KeybindingsScreen from './KeybindingsScreen' +import { useIsModalActive } from './utilsApp' + + +export const updateBinds = (commands: any) => { + contro.inputSchema.commands.custom = Object.fromEntries(Object.entries(commands?.custom ?? {}).map(([key, value]) => { + return [key, { + keys: [], + gamepad: [], + type: '', + inputs: [] + }] + })) + + for (const [group, actions] of Object.entries(commands)) { + contro.userConfig![group] = Object.fromEntries(Object.entries(actions).map(([key, value]) => { + const newValue = { + keys: value?.keys ?? undefined, + gamepad: value?.gamepad ?? undefined, + } + + if (group === 'custom') { + newValue['type'] = (value).type + newValue['inputs'] = (value).inputs + } + + return [key, newValue] + })) + } +} + +const bindingActions = { + updateBinds +} + +export const BindingActionsContext = createContext(bindingActions) + +export default () => { + const [bindActions, setBindActions] = useState(bindingActions) + const isModalActive = useIsModalActive('keybindings') + + if (!isModalActive) return null + + const hasPsGamepad = [...(navigator.getGamepads?.() ?? [])].some(gp => gp?.id.match(/playstation|dualsense|dualshock/i)) // todo: use last used gamepad detection + return + + +} diff --git a/src/react/OptionsGroup.tsx b/src/react/OptionsGroup.tsx index bbfac00e..81df531b 100644 --- a/src/react/OptionsGroup.tsx +++ b/src/react/OptionsGroup.tsx @@ -3,7 +3,7 @@ import { options } from '../optionsStorage' import { OptionsGroupType, guiOptionsScheme } from '../optionsGuiScheme' import OptionsItems, { OptionMeta } from './OptionsItems' -const optionValueToType = (optionValue: any, item: OptionMeta) => { +export const optionValueToType = (optionValue: any, item: OptionMeta) => { if (typeof optionValue === 'boolean' || item.values) return 'toggle' if (typeof optionValue === 'number') return 'slider' if (typeof optionValue === 'string') return 'element' diff --git a/src/react/globals.d.ts b/src/react/globals.d.ts index 842d27c4..108fae54 100644 --- a/src/react/globals.d.ts +++ b/src/react/globals.d.ts @@ -25,6 +25,10 @@ declare module '*.png' { const png: string export default png } +declare module '*.svg' { + const svg: string + export default svg +} interface PromiseConstructor { withResolvers (): { diff --git a/src/react/ps_icons/circle_playstation_console_controller_gamepad_icon.svg b/src/react/ps_icons/circle_playstation_console_controller_gamepad_icon.svg new file mode 100644 index 00000000..d49af336 --- /dev/null +++ b/src/react/ps_icons/circle_playstation_console_controller_gamepad_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/react/ps_icons/cross_playstation_console_controller_gamepad_icon.svg b/src/react/ps_icons/cross_playstation_console_controller_gamepad_icon.svg new file mode 100644 index 00000000..d7d176e2 --- /dev/null +++ b/src/react/ps_icons/cross_playstation_console_controller_gamepad_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/react/ps_icons/playstation_square_console_controller_gamepad_icon.svg b/src/react/ps_icons/playstation_square_console_controller_gamepad_icon.svg new file mode 100644 index 00000000..9f08790e --- /dev/null +++ b/src/react/ps_icons/playstation_square_console_controller_gamepad_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/react/ps_icons/playstation_triangle_console_controller_gamepad_icon.svg b/src/react/ps_icons/playstation_triangle_console_controller_gamepad_icon.svg new file mode 100644 index 00000000..a397c517 --- /dev/null +++ b/src/react/ps_icons/playstation_triangle_console_controller_gamepad_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/react/storageProvider.ts b/src/react/storageProvider.ts new file mode 100644 index 00000000..df97d228 --- /dev/null +++ b/src/react/storageProvider.ts @@ -0,0 +1,13 @@ +import { CustomCommand } from './KeybindingsCustom' + +type StorageData = { + customCommands: Record + // ... +} + +export const getStoredValue = (name: T): StorageData[T] | undefined => { + return localStorage[name] ? JSON.parse(localStorage[name]) : undefined +} +export const setStoredValue = (name: T, value: StorageData[T]) => { + localStorage[name] = JSON.stringify(value) +} diff --git a/src/reactUi.tsx b/src/reactUi.tsx index 9a79de34..e384fbfd 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -36,6 +36,7 @@ import Crosshair from './react/Crosshair' import ButtonAppProvider from './react/ButtonAppProvider' import ServersListProvider from './react/ServersListProvider' import GamepadUiCursor from './react/GamepadUiCursor' +import KeybindingsScreenProvider from './react/KeybindingsScreenProvider' import HeldMapUi from './react/HeldMapUi' const RobustPortal = ({ children, to }) => { @@ -157,6 +158,7 @@ const App = () => { + diff --git a/src/screens.css b/src/screens.css index c4e7fe9b..32765506 100644 --- a/src/screens.css +++ b/src/screens.css @@ -33,6 +33,7 @@ margin-top: 35px; /* todo remove it but without it in chrome android the screen is not scrollable */ overflow: auto; + height: fit-content; /* todo I'm not sure about it */ /* margin-top: calc(100% / 6 - 16px); */ align-items: center; From 97ca34e8f93002d6e54e2c842d13cd4d7cd3ee0e Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sun, 19 May 2024 15:32:50 +0300 Subject: [PATCH 0069/1074] hotfix: input handler crash --- src/controls.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controls.ts b/src/controls.ts index 6e38b90c..7d1e4cdf 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -297,7 +297,7 @@ const customCommandsHandler = (buttonData: { code?: string, button?: string, sta const codeOrButton = buttonData.code ?? buttonData.button const inputType = buttonData.code ? 'keys' : 'gamepad' - for (const value of Object.values(contro.userConfig!.custom)) { + for (const value of Object.values(contro.userConfig!.custom ?? {})) { if (value[inputType]?.includes(codeOrButton!)) { customCommandsConfig[(value as CustomCommand).type].handler((value as CustomCommand).inputs) } From 2bec255b7da0c9142c606cc3c0d9a93fd8cc4cba Mon Sep 17 00:00:00 2001 From: Vitaly Date: Mon, 20 May 2024 05:47:38 +0300 Subject: [PATCH 0070/1074] fix: update flying-squid to respect time in saves! --- package.json | 2 +- pnpm-lock.yaml | 36 +++++-------------- .../viewer/lib/worldDataEmitter.ts | 1 + 3 files changed, 10 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 6905a8b7..6e73b981 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "esbuild-plugin-polyfill-node": "^0.3.0", "express": "^4.18.2", "filesize": "^10.0.12", - "flying-squid": "npm:@zardoy/flying-squid@^0.0.20", + "flying-squid": "npm:@zardoy/flying-squid@^0.0.24", "fs-extra": "^11.1.1", "google-drive-browserfs": "github:zardoy/browserfs#google-drive", "iconify-icon": "^1.0.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dcacb13a..6d784e17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -104,8 +104,8 @@ importers: specifier: ^10.0.12 version: 10.0.12 flying-squid: - specifier: npm:@zardoy/flying-squid@^0.0.20 - version: '@zardoy/flying-squid@0.0.20(encoding@0.1.13)' + specifier: npm:@zardoy/flying-squid@^0.0.24 + version: '@zardoy/flying-squid@0.0.24(encoding@0.1.13)' fs-extra: specifier: ^11.1.1 version: 11.1.1 @@ -3054,8 +3054,8 @@ packages: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - '@zardoy/flying-squid@0.0.20': - resolution: {integrity: sha512-WyejZS2Upzv86g6Ez5Z/4Pd0ea9tkFL2itAj24UNpO7fyzxuTN2Ag1Ouvh+MSkCloXhR4E/yoER2krHW8vzwBw==} + '@zardoy/flying-squid@0.0.24': + resolution: {integrity: sha512-C+VNHyh9yYB7aG9OL6r9NR5bF73fyRQ0rHhkvvz901hLBZI3+5nOPdcA6XwJm9XX9BYStXbLTHp6shmo20JRHQ==} engines: {node: '>=8'} hasBin: true @@ -3274,9 +3274,6 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} - asap@1.0.0: - resolution: {integrity: sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==} - asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} @@ -4551,9 +4548,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - event-promise@0.0.1: - resolution: {integrity: sha512-ouEmk2N0BalybPM0zmj3RHE93AX4p9hAIHZfbbqxolLChqCB6pcLDbYH6zZ8TaiFWImPHfs5kFnNpA0u9RdEaQ==} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -6801,9 +6795,6 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} - promise@5.0.0: - resolution: {integrity: sha512-N2BfLz0Sigf7rsm5NnItRwTNqEDUF2ephwEXTcOAf2cO9NwZ9TnIjOmnQNtC0r70CV0S1+uc9mSMmFH7gxk87Q==} - prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -11443,8 +11434,7 @@ snapshots: magic-string: 0.25.9 string.prototype.matchall: 4.0.10 - '@tootallnate/once@2.0.0': - optional: true + '@tootallnate/once@2.0.0': {} '@tweenjs/tween.js@18.6.4': {} @@ -11935,18 +11925,18 @@ snapshots: '@types/emscripten': 1.39.8 tslib: 1.14.1 - '@zardoy/flying-squid@0.0.20(encoding@0.1.13)': + '@zardoy/flying-squid@0.0.24(encoding@0.1.13)': dependencies: + '@tootallnate/once': 2.0.0 change-case: 4.1.2 colors: 1.4.0 diamond-square: https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687 emit-then: 2.0.0 - event-promise: 0.0.1 exit-hook: 2.2.1 flatmap: 0.0.3 long: 5.2.3 minecraft-data: 3.65.0 - minecraft-protocol: 1.47.0(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) + minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/ccab9fb39681f3ebe0d264e2a3f833aa3c5a1ac7(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) mkdirp: 2.1.6 node-gzip: 1.1.2 node-rsa: 1.1.1 @@ -12212,8 +12202,6 @@ snapshots: arrify@1.0.1: {} - asap@1.0.0: {} - asn1.js@5.4.1: dependencies: bn.js: 4.12.0 @@ -13950,10 +13938,6 @@ snapshots: etag@1.8.1: {} - event-promise@0.0.1: - dependencies: - promise: 5.0.0 - event-target-shim@5.0.1: {} eventemitter2@6.4.7: {} @@ -16638,10 +16622,6 @@ snapshots: retry: 0.12.0 optional: true - promise@5.0.0: - dependencies: - asap: 1.0.0 - prompts@2.4.2: dependencies: kleur: 3.0.3 diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index f4ce9675..40cc3413 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -87,6 +87,7 @@ export class WorldDataEmitter extends EventEmitter { }, })) this.emitter.emit('renderDistance', this.viewDistance) + this.emitter.emit('time', bot.time.timeOfDay) }) // node.js stream data event pattern if (this.emitter.listenerCount('blockEntities')) { From 5e9423909167090b244b26b4493d8a6336d4751c Mon Sep 17 00:00:00 2001 From: Vitaly Date: Mon, 20 May 2024 05:47:53 +0300 Subject: [PATCH 0071/1074] feat: big fix: rendering blocks for preflat versions (<1.13)! (#125) --- prismarine-viewer/buildMesherWorker.mjs | 2 + prismarine-viewer/viewer/lib/mesher/mesher.ts | 1 + prismarine-viewer/viewer/lib/mesher/models.ts | 76 +- prismarine-viewer/viewer/lib/mesher/world.ts | 39 +- prismarine-viewer/viewer/lib/viewer.ts | 4 +- .../viewer/prepare/generateTextures.ts | 5 + scripts/esbuildPlugins.mjs | 24 +- src/preflatMap.json | 1741 +++++++++++++++++ 8 files changed, 1880 insertions(+), 12 deletions(-) create mode 100644 src/preflatMap.json diff --git a/prismarine-viewer/buildMesherWorker.mjs b/prismarine-viewer/buildMesherWorker.mjs index 819324de..e9f6a16f 100644 --- a/prismarine-viewer/buildMesherWorker.mjs +++ b/prismarine-viewer/buildMesherWorker.mjs @@ -6,6 +6,7 @@ import path from 'path' import { fileURLToPath } from 'url' import fs from 'fs' import { dynamicMcDataFiles } from './buildMesherConfig.mjs' +import { mesherSharedPlugins } from '../scripts/esbuildPlugins.mjs' const allowedBundleFiles = ['legacy', 'versions', 'protocolVersions', 'features'] @@ -34,6 +35,7 @@ const buildOptions = { 'process.env.BROWSER': '"true"', }, plugins: [ + ...mesherSharedPlugins, { name: 'external-json', setup (build) { diff --git a/prismarine-viewer/viewer/lib/mesher/mesher.ts b/prismarine-viewer/viewer/lib/mesher/mesher.ts index 0bcf7250..bc1d3bbb 100644 --- a/prismarine-viewer/viewer/lib/mesher/mesher.ts +++ b/prismarine-viewer/viewer/lib/mesher/mesher.ts @@ -53,6 +53,7 @@ self.onmessage = ({ data }) => { if (data.config) { world ??= new World(data.config.version) world.config = {...world.config, ...data.config} + globalThis.world = world } if (data.type === 'mesherData') { diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index bfb96d11..40b82ea2 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -1,7 +1,9 @@ import { Vec3 } from 'vec3' import type { BlockStatesOutput } from '../../prepare/modelsBuilder' import { World } from './world' -import { Block } from 'prismarine-block' +import { WorldBlock as Block } from './world' +import legacyJson from '../../../../src/preflatMap.json' +import { versionToNumber } from '../../prepare/utils' const tints: any = {} let blockStates: BlockStatesOutput @@ -33,6 +35,53 @@ function prepareTints (tints) { }) } +const calculatedBlocksEntries = Object.entries(legacyJson.clientCalculatedBlocks); +export function preflatBlockCalculation (block: Block, world: World, position: Vec3) { + const type = calculatedBlocksEntries.find(([name, blocks]) => blocks.includes(block.name))?.[0] + if (!type) return + switch (type) { + case 'directional': { + const isSolidConnection = !block.name.includes('redstone') && !block.name.includes('tripwire') + const neighbors = [ + world.getBlock(position.offset(0, 0, 1)), + world.getBlock(position.offset(0, 0, -1)), + world.getBlock(position.offset(1, 0, 0)), + world.getBlock(position.offset(-1, 0, 0)) + ] + // set needed props to true: east:'false',north:'false',south:'false',west:'false' + const props = {} + for (const [i, neighbor] of neighbors.entries()) { + const isConnectedToSolid = isSolidConnection ? (neighbor && !neighbor.transparent) : false + if (isConnectedToSolid || neighbor?.name === block.name) { + props[['south', 'north', 'east', 'west'][i]] = 'true' + } + } + return props + } + // case 'gate_in_wall': {} + case 'block_snowy': { + const aboveIsSnow = world.getBlock(position.offset(0, 1, 0))?.name === 'snow' + return { + snowy: `${aboveIsSnow}` + } + } + case 'door': { + // upper half matches lower in + const half = block.getProperties().half + if (half === 'upper') { + // copy other properties + const lower = world.getBlock(position.offset(0, -1, 0)) + if (lower?.name === block.name) { + return { + ...lower.getProperties(), + half: 'upper' + } + } + } + } + } +} + function tintToGl (tint) { const r = (tint >> 16) & 0xff const g = (tint >> 8) & 0xff @@ -349,7 +398,7 @@ function renderElement (world: World, cursor: Vec3, element, doAO: boolean, attr const aos: number[] = [] const neighborPos = position.plus(new Vec3(...dir)) - const baseLight = world.getLight(neighborPos) / 15 + const baseLight = world.getLight(neighborPos, undefined, undefined, block.name) / 15 for (const pos of corners) { let vertex = [ (pos[0] ? maxx : minx), @@ -462,7 +511,7 @@ export function getSectionGeometry (sx, sy, sz, world: World) { for (cursor.z = sz; cursor.z < sz + 16; cursor.z++) { for (cursor.x = sx; cursor.x < sx + 16; cursor.x++) { const block = world.getBlock(cursor)! - if (block.name.includes('_sign')) { + if (block.name.includes('_sign') || block.name === 'sign') { const key = `${cursor.x},${cursor.y},${cursor.z}` const props: any = block.getProperties() const facingRotationMap = { @@ -478,7 +527,24 @@ export function getSectionGeometry (sx, sy, sz, world: World) { } } const biome = block.biome.name - if (block.variant === undefined) { + + let preflatRecomputeVariant = !!(block as any)._originalProperties + if (world.preflat) { + const patchProperties = preflatBlockCalculation(block, world, cursor) + if (patchProperties) { + //@ts-ignore + block._originalProperties ??= block._properties + //@ts-ignore + block._properties = { ...block._originalProperties, ...patchProperties } + preflatRecomputeVariant = true + } else { + //@ts-ignore + block._properties = block._originalProperties ?? block._properties + //@ts-ignore + block._originalProperties = undefined + } + } + if (block.variant === undefined || preflatRecomputeVariant) { block.variant = getModelVariants(block) } @@ -592,7 +658,7 @@ function matchProperties (block: Block, /* to match against */properties: Record return true } -function getModelVariants (block: import('prismarine-block').Block) { +function getModelVariants (block: Block) { // air, cave_air, void_air and so on... // full list of invisible & special blocks https://minecraft.wiki/w/Model#Blocks_and_fluids if (block.name === '' || block.name === 'air' || block.name.endsWith('_air')) return [] diff --git a/prismarine-viewer/viewer/lib/mesher/world.ts b/prismarine-viewer/viewer/lib/mesher/world.ts index 9a4f0ab3..5f3a281d 100644 --- a/prismarine-viewer/viewer/lib/mesher/world.ts +++ b/prismarine-viewer/viewer/lib/mesher/world.ts @@ -4,6 +4,7 @@ import { Block } from "prismarine-block" import { Vec3 } from 'vec3' import moreBlockDataGeneratedJson from '../moreBlockDataGenerated.json' import { defaultMesherConfig } from './shared' +import legacyJson from '../../../../src/preflatMap.json' const ignoreAoBlocks = Object.keys(moreBlockDataGeneratedJson.noOcclusions) @@ -17,7 +18,7 @@ function isCube (shapes) { return shape[0] === 0 && shape[1] === 0 && shape[2] === 0 && shape[3] === 1 && shape[4] === 1 && shape[5] === 1 } -export type WorldBlock = Block & { +export type WorldBlock = Omit & { variant?: any // todo isCube: boolean @@ -30,14 +31,16 @@ export class World { columns = {} as { [key: string]: import('prismarine-chunk/types/index').PCChunk } blockCache = {} biomeCache: { [id: number]: mcData.Biome } + preflat: boolean constructor(version) { this.Chunk = Chunks(version) as any this.biomeCache = mcData(version).biomes + this.preflat = !mcData(version).supportFeature('blockStateId') this.config.version = version } - getLight (pos: Vec3, isNeighbor = false) { + getLight (pos: Vec3, isNeighbor = false, skipMoreChecks = false, curBlockName = '') { const { enableLighting, skyLight } = this.config if (!enableLighting) return 15 // const key = `${pos.x},${pos.y},${pos.z}` @@ -52,8 +55,17 @@ export class World { ) + 2 ) // lightsCache.set(key, result) - if (result === 2 && this.getBlock(pos)?.name.match(/_stairs|slab/)) { // todo this is obviously wrong - result = this.getLight(pos.offset(0, 1, 0)) + if (result === 2 && [this.getBlock(pos)?.name ?? '', curBlockName].some(x => x.match(/_stairs|slab|glass_pane/)) && !skipMoreChecks) { // todo this is obviously wrong + const lights = [ + this.getLight(pos.offset(0, 1, 0), undefined, true), + this.getLight(pos.offset(0, -1, 0), undefined, true), + this.getLight(pos.offset(0, 0, 1), undefined, true), + this.getLight(pos.offset(0, 0, -1), undefined, true), + this.getLight(pos.offset(1, 0, 0), undefined, true), + this.getLight(pos.offset(-1, 0, 0), undefined, true) + ].filter(x => x !== 2) + const min = Math.min(...lights) + result = min } if (isNeighbor && result === 2) result = 15 // TODO return result @@ -91,6 +103,8 @@ export class World { } getBlock (pos: Vec3): WorldBlock | null { + // for easier testing + if (!(pos instanceof Vec3)) pos = new Vec3(...pos as [number, number, number]) const key = columnKey(Math.floor(pos.x / 16) * 16, Math.floor(pos.z / 16) * 16) const column = this.columns[key] @@ -111,6 +125,23 @@ export class World { throw new Error('position is not reliable, use pos parameter instead of block.position') } }) + if (this.preflat) { + const namePropsStr = legacyJson.blocks[b.type + ':' + b.metadata] || legacyJson.blocks[b.type + ':' + '0'] + b.name = namePropsStr.split('[')[0] + const propsStr = namePropsStr.split('[')?.[1]?.split(']'); + if (propsStr) { + const newProperties = Object.fromEntries(propsStr.join('').split(',').map(x => { + let [key, val] = x.split('=') as any + if (!isNaN(val)) val = parseInt(val) + return [key, val] + })) + //@ts-ignore + b._properties = newProperties + } else { + //@ts-ignore + b._properties = {} + } + } } const block = this.blockCache[stateId] diff --git a/prismarine-viewer/viewer/lib/viewer.ts b/prismarine-viewer/viewer/lib/viewer.ts index 65091f3e..2a240104 100644 --- a/prismarine-viewer/viewer/lib/viewer.ts +++ b/prismarine-viewer/viewer/lib/viewer.ts @@ -7,6 +7,7 @@ import EventEmitter from 'events' import { WorldRendererThree } from './worldrendererThree' import { generateSpiralMatrix } from 'flying-squid/dist/utils' import { WorldRendererCommon, WorldRendererConfig, defaultWorldRendererConfig } from './worldrendererCommon' +import { versionToNumber } from '../prepare/utils' export class Viewer { scene: THREE.Scene @@ -76,7 +77,8 @@ export class Viewer { } setVersion (userVersion: string) { - const texturesVersion = getVersion(userVersion) + let texturesVersion = getVersion(userVersion) + if (versionToNumber(userVersion) < versionToNumber('1.13')) texturesVersion = '1.13.2' // we normalize to post-flatenning in mesher console.log('[viewer] Using version:', userVersion, 'textures:', texturesVersion) this.world.setVersion(userVersion, texturesVersion) this.entities.clear() diff --git a/prismarine-viewer/viewer/prepare/generateTextures.ts b/prismarine-viewer/viewer/prepare/generateTextures.ts index 2a196ccb..dc838c65 100644 --- a/prismarine-viewer/viewer/prepare/generateTextures.ts +++ b/prismarine-viewer/viewer/prepare/generateTextures.ts @@ -5,6 +5,7 @@ import mcAssets from 'minecraft-assets' import fs from 'fs-extra' import { prepareMoreGeneratedBlocks } from './moreGeneratedBlocks' import { generateItemsAtlases } from './genItemsAtlas' +import { versionToNumber } from './utils' const publicPath = path.resolve(__dirname, '../../public') @@ -23,6 +24,10 @@ Promise.resolve().then(async () => { if (!mcAssets.versions.includes(version)) { throw new Error(`Version ${version} is not supported by minecraft-assets`) } + if (versionToNumber(version) < versionToNumber('1.13')) { + // we normalize data to 1.13 for pre 1.13 versions + continue + } const assets = mcAssets(version) const { warnings: _warnings } = await prepareMoreGeneratedBlocks(assets) _warnings.forEach(x => warnings.add(x)) diff --git a/scripts/esbuildPlugins.mjs b/scripts/esbuildPlugins.mjs index 999f9dc7..49547ea1 100644 --- a/scripts/esbuildPlugins.mjs +++ b/scripts/esbuildPlugins.mjs @@ -8,6 +8,7 @@ import MCProtocol from 'minecraft-protocol' import MCData from 'minecraft-data' import { throttle } from 'lodash-es' +const __dirname = dirname(new URL(import.meta.url).pathname) const { supportedVersions } = MCProtocol const prod = process.argv.includes('--prod') @@ -26,7 +27,7 @@ export const startWatchingHmr = () => { // 'dist/webglRendererWorker.js': 'webglRendererWorker', } for (const name of Object.keys(eventsPerFile)) { - const file = join('dist', name); + const file = join('dist', name) if (!fs.existsSync(file)) console.warn(`[missing worker] File ${name} does not exist`) fs.watchFile(file, () => { writeToClients({ replace: { type: eventsPerFile[name] } }) @@ -34,8 +35,27 @@ export const startWatchingHmr = () => { } } +/** @type {import('esbuild').Plugin[]} */ +const mesherSharedPlugins = [ + { + name: 'minecraft-data', + setup (build) { + build.onLoad({ + filter: /data[\/\\]pc[\/\\]common[\/\\]legacy.json$/, + }, async (args) => { + const data = fs.readFileSync(join(__dirname, '../src/preflatMap.json'), 'utf8') + return { + contents: `module.exports = ${data}`, + loader: 'js', + } + }) + } + } +] + /** @type {import('esbuild').Plugin[]} */ const plugins = [ + ...mesherSharedPlugins, { name: 'strict-aliases', setup (build) { @@ -339,4 +359,4 @@ const plugins = [ }) ] -export { plugins, connectedClients as clients } +export { plugins, connectedClients as clients, mesherSharedPlugins } diff --git a/src/preflatMap.json b/src/preflatMap.json new file mode 100644 index 00000000..fdf2640f --- /dev/null +++ b/src/preflatMap.json @@ -0,0 +1,1741 @@ +{ + "blocks": { + "0:0": "air", + "1:0": "stone", + "1:1": "granite", + "1:2": "polished_granite", + "1:3": "diorite", + "1:4": "polished_diorite", + "1:5": "andesite", + "1:6": "polished_andesite", + "2:0": "grass_block[snowy=false]", + "3:0": "dirt", + "3:1": "coarse_dirt", + "3:2": "podzol[snowy=false]", + "4:0": "cobblestone", + "5:0": "oak_planks", + "5:1": "spruce_planks", + "5:2": "birch_planks", + "5:3": "jungle_planks", + "5:4": "acacia_planks", + "5:5": "dark_oak_planks", + "6:0": "oak_sapling[stage=0]", + "6:1": "spruce_sapling[stage=0]", + "6:2": "birch_sapling[stage=0]", + "6:3": "jungle_sapling[stage=0]", + "6:4": "acacia_sapling[stage=0]", + "6:5": "dark_oak_sapling[stage=0]", + "6:8": "oak_sapling[stage=1]", + "6:9": "spruce_sapling[stage=1]", + "6:10": "birch_sapling[stage=1]", + "6:11": "jungle_sapling[stage=1]", + "6:12": "acacia_sapling[stage=1]", + "6:13": "dark_oak_sapling[stage=1]", + "7:0": "bedrock", + "8:0": "water[level=0]", + "8:1": "water[level=1]", + "8:2": "water[level=2]", + "8:3": "water[level=3]", + "8:4": "water[level=4]", + "8:5": "water[level=5]", + "8:6": "water[level=6]", + "8:7": "water[level=7]", + "8:8": "water[level=8]", + "8:9": "water[level=9]", + "8:10": "water[level=10]", + "8:11": "water[level=11]", + "8:12": "water[level=12]", + "8:13": "water[level=13]", + "8:14": "water[level=14]", + "8:15": "water[level=15]", + "9:0": "water[level=0]", + "9:1": "water[level=1]", + "9:2": "water[level=2]", + "9:3": "water[level=3]", + "9:4": "water[level=4]", + "9:5": "water[level=5]", + "9:6": "water[level=6]", + "9:7": "water[level=7]", + "9:8": "water[level=8]", + "9:9": "water[level=9]", + "9:10": "water[level=10]", + "9:11": "water[level=11]", + "9:12": "water[level=12]", + "9:13": "water[level=13]", + "9:14": "water[level=14]", + "9:15": "water[level=15]", + "10:0": "lava[level=0]", + "10:1": "lava[level=1]", + "10:2": "lava[level=2]", + "10:3": "lava[level=3]", + "10:4": "lava[level=4]", + "10:5": "lava[level=5]", + "10:6": "lava[level=6]", + "10:7": "lava[level=7]", + "10:8": "lava[level=8]", + "10:9": "lava[level=9]", + "10:10": "lava[level=10]", + "10:11": "lava[level=11]", + "10:12": "lava[level=12]", + "10:13": "lava[level=13]", + "10:14": "lava[level=14]", + "10:15": "lava[level=15]", + "11:0": "lava[level=0]", + "11:1": "lava[level=1]", + "11:2": "lava[level=2]", + "11:3": "lava[level=3]", + "11:4": "lava[level=4]", + "11:5": "lava[level=5]", + "11:6": "lava[level=6]", + "11:7": "lava[level=7]", + "11:8": "lava[level=8]", + "11:9": "lava[level=9]", + "11:10": "lava[level=10]", + "11:11": "lava[level=11]", + "11:12": "lava[level=12]", + "11:13": "lava[level=13]", + "11:14": "lava[level=14]", + "11:15": "lava[level=15]", + "12:0": "sand", + "12:1": "red_sand", + "13:0": "gravel", + "14:0": "gold_ore", + "15:0": "iron_ore", + "16:0": "coal_ore", + "17:0": "oak_log[axis=y]", + "17:1": "spruce_log[axis=y]", + "17:2": "birch_log[axis=y]", + "17:3": "jungle_log[axis=y]", + "17:4": "oak_log[axis=x]", + "17:5": "spruce_log[axis=x]", + "17:6": "birch_log[axis=x]", + "17:7": "jungle_log[axis=x]", + "17:8": "oak_log[axis=z]", + "17:9": "spruce_log[axis=z]", + "17:10": "birch_log[axis=z]", + "17:11": "jungle_log[axis=z]", + "17:12": "oak_bark", + "17:13": "spruce_bark", + "17:14": "birch_bark", + "17:15": "jungle_bark", + "18:0": "oak_leaves[check_decay=false,decayable=true]", + "18:1": "spruce_leaves[check_decay=false,decayable=true]", + "18:2": "birch_leaves[check_decay=false,decayable=true]", + "18:3": "jungle_leaves[check_decay=false,decayable=true]", + "18:4": "oak_leaves[check_decay=false,decayable=false]", + "18:5": "spruce_leaves[check_decay=false,decayable=false]", + "18:6": "birch_leaves[check_decay=false,decayable=false]", + "18:7": "jungle_leaves[check_decay=false,decayable=false]", + "18:8": "oak_leaves[check_decay=true,decayable=true]", + "18:9": "spruce_leaves[check_decay=true,decayable=true]", + "18:10": "birch_leaves[check_decay=true,decayable=true]", + "18:11": "jungle_leaves[check_decay=true,decayable=true]", + "18:12": "oak_leaves[check_decay=true,decayable=false]", + "18:13": "spruce_leaves[check_decay=true,decayable=false]", + "18:14": "birch_leaves[check_decay=true,decayable=false]", + "18:15": "jungle_leaves[check_decay=true,decayable=false]", + "19:0": "sponge", + "19:1": "wet_sponge", + "20:0": "glass", + "21:0": "lapis_ore", + "22:0": "lapis_block", + "23:0": "dispenser[facing=down,triggered=false]", + "23:1": "dispenser[facing=up,triggered=false]", + "23:2": "dispenser[facing=north,triggered=false]", + "23:3": "dispenser[facing=south,triggered=false]", + "23:4": "dispenser[facing=west,triggered=false]", + "23:5": "dispenser[facing=east,triggered=false]", + "23:8": "dispenser[facing=down,triggered=true]", + "23:9": "dispenser[facing=up,triggered=true]", + "23:10": "dispenser[facing=north,triggered=true]", + "23:11": "dispenser[facing=south,triggered=true]", + "23:12": "dispenser[facing=west,triggered=true]", + "23:13": "dispenser[facing=east,triggered=true]", + "24:0": "sandstone", + "24:1": "chiseled_sandstone", + "24:2": "cut_sandstone", + "25:0": "note_block", + "26:0": "red_bed[facing=south,occupied=false,part=foot]", + "26:1": "red_bed[facing=west,occupied=false,part=foot]", + "26:2": "red_bed[facing=north,occupied=false,part=foot]", + "26:3": "red_bed[facing=east,occupied=false,part=foot]", + "26:8": "red_bed[facing=south,occupied=false,part=head]", + "26:9": "red_bed[facing=west,occupied=false,part=head]", + "26:10": "red_bed[facing=north,occupied=false,part=head]", + "26:11": "red_bed[facing=east,occupied=false,part=head]", + "26:12": "red_bed[facing=south,occupied=true,part=head]", + "26:13": "red_bed[facing=west,occupied=true,part=head]", + "26:14": "red_bed[facing=north,occupied=true,part=head]", + "26:15": "red_bed[facing=east,occupied=true,part=head]", + "27:0": "powered_rail[powered=false,shape=north_south]", + "27:1": "powered_rail[powered=false,shape=east_west]", + "27:2": "powered_rail[powered=false,shape=ascending_east]", + "27:3": "powered_rail[powered=false,shape=ascending_west]", + "27:4": "powered_rail[powered=false,shape=ascending_north]", + "27:5": "powered_rail[powered=false,shape=ascending_south]", + "27:8": "powered_rail[powered=true,shape=north_south]", + "27:9": "powered_rail[powered=true,shape=east_west]", + "27:10": "powered_rail[powered=true,shape=ascending_east]", + "27:11": "powered_rail[powered=true,shape=ascending_west]", + "27:12": "powered_rail[powered=true,shape=ascending_north]", + "27:13": "powered_rail[powered=true,shape=ascending_south]", + "28:0": "detector_rail[powered=false,shape=north_south]", + "28:1": "detector_rail[powered=false,shape=east_west]", + "28:2": "detector_rail[powered=false,shape=ascending_east]", + "28:3": "detector_rail[powered=false,shape=ascending_west]", + "28:4": "detector_rail[powered=false,shape=ascending_north]", + "28:5": "detector_rail[powered=false,shape=ascending_south]", + "28:8": "detector_rail[powered=true,shape=north_south]", + "28:9": "detector_rail[powered=true,shape=east_west]", + "28:10": "detector_rail[powered=true,shape=ascending_east]", + "28:11": "detector_rail[powered=true,shape=ascending_west]", + "28:12": "detector_rail[powered=true,shape=ascending_north]", + "28:13": "detector_rail[powered=true,shape=ascending_south]", + "29:0": "sticky_piston[extended=false,facing=down]", + "29:1": "sticky_piston[extended=false,facing=up]", + "29:2": "sticky_piston[extended=false,facing=north]", + "29:3": "sticky_piston[extended=false,facing=south]", + "29:4": "sticky_piston[extended=false,facing=west]", + "29:5": "sticky_piston[extended=false,facing=east]", + "29:8": "sticky_piston[extended=true,facing=down]", + "29:9": "sticky_piston[extended=true,facing=up]", + "29:10": "sticky_piston[extended=true,facing=north]", + "29:11": "sticky_piston[extended=true,facing=south]", + "29:12": "sticky_piston[extended=true,facing=west]", + "29:13": "sticky_piston[extended=true,facing=east]", + "30:0": "cobweb", + "31:0": "dead_bush", + "31:1": "grass", + "31:2": "fern", + "32:0": "dead_bush", + "33:0": "piston[extended=false,facing=down]", + "33:1": "piston[extended=false,facing=up]", + "33:2": "piston[extended=false,facing=north]", + "33:3": "piston[extended=false,facing=south]", + "33:4": "piston[extended=false,facing=west]", + "33:5": "piston[extended=false,facing=east]", + "33:8": "piston[extended=true,facing=down]", + "33:9": "piston[extended=true,facing=up]", + "33:10": "piston[extended=true,facing=north]", + "33:11": "piston[extended=true,facing=south]", + "33:12": "piston[extended=true,facing=west]", + "33:13": "piston[extended=true,facing=east]", + "34:0": "piston_head[facing=down,short=false,type=normal]", + "34:1": "piston_head[facing=up,short=false,type=normal]", + "34:2": "piston_head[facing=north,short=false,type=normal]", + "34:3": "piston_head[facing=south,short=false,type=normal]", + "34:4": "piston_head[facing=west,short=false,type=normal]", + "34:5": "piston_head[facing=east,short=false,type=normal]", + "34:8": "piston_head[facing=down,short=false,type=sticky]", + "34:9": "piston_head[facing=up,short=false,type=sticky]", + "34:10": "piston_head[facing=north,short=false,type=sticky]", + "34:11": "piston_head[facing=south,short=false,type=sticky]", + "34:12": "piston_head[facing=west,short=false,type=sticky]", + "34:13": "piston_head[facing=east,short=false,type=sticky]", + "35:0": "white_wool", + "35:1": "orange_wool", + "35:2": "magenta_wool", + "35:3": "light_blue_wool", + "35:4": "yellow_wool", + "35:5": "lime_wool", + "35:6": "pink_wool", + "35:7": "gray_wool", + "35:8": "light_gray_wool", + "35:9": "cyan_wool", + "35:10": "purple_wool", + "35:11": "blue_wool", + "35:12": "brown_wool", + "35:13": "green_wool", + "35:14": "red_wool", + "35:15": "black_wool", + "36:0": "moving_piston[facing=down,type=normal]", + "36:1": "moving_piston[facing=up,type=normal]", + "36:2": "moving_piston[facing=north,type=normal]", + "36:3": "moving_piston[facing=south,type=normal]", + "36:4": "moving_piston[facing=west,type=normal]", + "36:5": "moving_piston[facing=east,type=normal]", + "36:8": "moving_piston[facing=down,type=sticky]", + "36:9": "moving_piston[facing=up,type=sticky]", + "36:10": "moving_piston[facing=north,type=sticky]", + "36:11": "moving_piston[facing=south,type=sticky]", + "36:12": "moving_piston[facing=west,type=sticky]", + "36:13": "moving_piston[facing=east,type=sticky]", + "37:0": "dandelion", + "38:0": "poppy", + "38:1": "blue_orchid", + "38:2": "allium", + "38:3": "azure_bluet", + "38:4": "red_tulip", + "38:5": "orange_tulip", + "38:6": "white_tulip", + "38:7": "pink_tulip", + "38:8": "oxeye_daisy", + "39:0": "brown_mushroom", + "40:0": "red_mushroom", + "41:0": "gold_block", + "42:0": "iron_block", + "43:0": "stone_slab[type=double]", + "43:1": "sandstone_slab[type=double]", + "43:2": "petrified_oak_slab[type=double]", + "43:3": "cobblestone_slab[type=double]", + "43:4": "brick_slab[type=double]", + "43:5": "stone_brick_slab[type=double]", + "43:6": "nether_brick_slab[type=double]", + "43:7": "quartz_slab[type=double]", + "43:8": "smooth_stone", + "43:9": "smooth_sandstone", + "43:10": "petrified_oak_slab[type=double]", + "43:11": "cobblestone_slab[type=double]", + "43:12": "brick_slab[type=double]", + "43:13": "stone_brick_slab[type=double]", + "43:14": "nether_brick_slab[type=double]", + "43:15": "smooth_quartz", + "44:0": "stone_slab[type=bottom]", + "44:1": "sandstone_slab[type=bottom]", + "44:2": "petrified_oak_slab[type=bottom]", + "44:3": "cobblestone_slab[type=bottom]", + "44:4": "brick_slab[type=bottom]", + "44:5": "stone_brick_slab[type=bottom]", + "44:6": "nether_brick_slab[type=bottom]", + "44:7": "quartz_slab[type=bottom]", + "44:8": "stone_slab[type=top]", + "44:9": "sandstone_slab[type=top]", + "44:10": "petrified_oak_slab[type=top]", + "44:11": "cobblestone_slab[type=top]", + "44:12": "brick_slab[type=top]", + "44:13": "stone_brick_slab[type=top]", + "44:14": "nether_brick_slab[type=top]", + "44:15": "quartz_slab[type=top]", + "45:0": "bricks", + "46:0": "tnt[unstable=false]", + "46:1": "tnt[unstable=true]", + "47:0": "bookshelf", + "48:0": "mossy_cobblestone", + "49:0": "obsidian", + "50:1": "wall_torch[facing=east]", + "50:2": "wall_torch[facing=west]", + "50:3": "wall_torch[facing=south]", + "50:4": "wall_torch[facing=north]", + "50:5": "torch", + "51:0": "fire[age=0,east=false,north=false,south=false,up=false,west=false]", + "51:1": "fire[age=1,east=false,north=false,south=false,up=false,west=false]", + "51:2": "fire[age=2,east=false,north=false,south=false,up=false,west=false]", + "51:3": "fire[age=3,east=false,north=false,south=false,up=false,west=false]", + "51:4": "fire[age=4,east=false,north=false,south=false,up=false,west=false]", + "51:5": "fire[age=5,east=false,north=false,south=false,up=false,west=false]", + "51:6": "fire[age=6,east=false,north=false,south=false,up=false,west=false]", + "51:7": "fire[age=7,east=false,north=false,south=false,up=false,west=false]", + "51:8": "fire[age=8,east=false,north=false,south=false,up=false,west=false]", + "51:9": "fire[age=9,east=false,north=false,south=false,up=false,west=false]", + "51:10": "fire[age=10,east=false,north=false,south=false,up=false,west=false]", + "51:11": "fire[age=11,east=false,north=false,south=false,up=false,west=false]", + "51:12": "fire[age=12,east=false,north=false,south=false,up=false,west=false]", + "51:13": "fire[age=13,east=false,north=false,south=false,up=false,west=false]", + "51:14": "fire[age=14,east=false,north=false,south=false,up=false,west=false]", + "51:15": "fire[age=15,east=false,north=false,south=false,up=false,west=false]", + "52:0": "mob_spawner", + "53:0": "oak_stairs[facing=east,half=bottom,shape=straight]", + "53:1": "oak_stairs[facing=west,half=bottom,shape=straight]", + "53:2": "oak_stairs[facing=south,half=bottom,shape=straight]", + "53:3": "oak_stairs[facing=north,half=bottom,shape=straight]", + "53:4": "oak_stairs[facing=east,half=top,shape=straight]", + "53:5": "oak_stairs[facing=west,half=top,shape=straight]", + "53:6": "oak_stairs[facing=south,half=top,shape=straight]", + "53:7": "oak_stairs[facing=north,half=top,shape=straight]", + "54:2": "chest[facing=north,type=single]", + "54:3": "chest[facing=south,type=single]", + "54:4": "chest[facing=west,type=single]", + "54:5": "chest[facing=east,type=single]", + "55:0": "redstone_wire[east=none,north=none,power=0,south=none,west=none]", + "55:1": "redstone_wire[east=none,north=none,power=1,south=none,west=none]", + "55:2": "redstone_wire[east=none,north=none,power=2,south=none,west=none]", + "55:3": "redstone_wire[east=none,north=none,power=3,south=none,west=none]", + "55:4": "redstone_wire[east=none,north=none,power=4,south=none,west=none]", + "55:5": "redstone_wire[east=none,north=none,power=5,south=none,west=none]", + "55:6": "redstone_wire[east=none,north=none,power=6,south=none,west=none]", + "55:7": "redstone_wire[east=none,north=none,power=7,south=none,west=none]", + "55:8": "redstone_wire[east=none,north=none,power=8,south=none,west=none]", + "55:9": "redstone_wire[east=none,north=none,power=9,south=none,west=none]", + "55:10": "redstone_wire[east=none,north=none,power=10,south=none,west=none]", + "55:11": "redstone_wire[east=none,north=none,power=11,south=none,west=none]", + "55:12": "redstone_wire[east=none,north=none,power=12,south=none,west=none]", + "55:13": "redstone_wire[east=none,north=none,power=13,south=none,west=none]", + "55:14": "redstone_wire[east=none,north=none,power=14,south=none,west=none]", + "55:15": "redstone_wire[east=none,north=none,power=15,south=none,west=none]", + "56:0": "diamond_ore", + "57:0": "diamond_block", + "58:0": "crafting_table", + "59:0": "wheat[age=0]", + "59:1": "wheat[age=1]", + "59:2": "wheat[age=2]", + "59:3": "wheat[age=3]", + "59:4": "wheat[age=4]", + "59:5": "wheat[age=5]", + "59:6": "wheat[age=6]", + "59:7": "wheat[age=7]", + "60:0": "farmland[moisture=0]", + "60:1": "farmland[moisture=1]", + "60:2": "farmland[moisture=2]", + "60:3": "farmland[moisture=3]", + "60:4": "farmland[moisture=4]", + "60:5": "farmland[moisture=5]", + "60:6": "farmland[moisture=6]", + "60:7": "farmland[moisture=7]", + "61:2": "furnace[facing=north,lit=false]", + "61:3": "furnace[facing=south,lit=false]", + "61:4": "furnace[facing=west,lit=false]", + "61:5": "furnace[facing=east,lit=false]", + "62:2": "furnace[facing=north,lit=true]", + "62:3": "furnace[facing=south,lit=true]", + "62:4": "furnace[facing=west,lit=true]", + "62:5": "furnace[facing=east,lit=true]", + "63:0": "sign[rotation=0]", + "63:1": "sign[rotation=1]", + "63:2": "sign[rotation=2]", + "63:3": "sign[rotation=3]", + "63:4": "sign[rotation=4]", + "63:5": "sign[rotation=5]", + "63:6": "sign[rotation=6]", + "63:7": "sign[rotation=7]", + "63:8": "sign[rotation=8]", + "63:9": "sign[rotation=9]", + "63:10": "sign[rotation=10]", + "63:11": "sign[rotation=11]", + "63:12": "sign[rotation=12]", + "63:13": "sign[rotation=13]", + "63:14": "sign[rotation=14]", + "63:15": "sign[rotation=15]", + "64:0": "oak_door[facing=east,half=lower,hinge=right,open=false,powered=false]", + "64:1": "oak_door[facing=south,half=lower,hinge=right,open=false,powered=false]", + "64:2": "oak_door[facing=west,half=lower,hinge=right,open=false,powered=false]", + "64:3": "oak_door[facing=north,half=lower,hinge=right,open=false,powered=false]", + "64:4": "oak_door[facing=east,half=lower,hinge=right,open=true,powered=false]", + "64:5": "oak_door[facing=south,half=lower,hinge=right,open=true,powered=false]", + "64:6": "oak_door[facing=west,half=lower,hinge=right,open=true,powered=false]", + "64:7": "oak_door[facing=north,half=lower,hinge=right,open=true,powered=false]", + "64:8": "oak_door[facing=east,half=upper,hinge=left,open=false,powered=false]", + "64:9": "oak_door[facing=east,half=upper,hinge=right,open=false,powered=false]", + "64:10": "oak_door[facing=east,half=upper,hinge=left,open=false,powered=true]", + "64:11": "oak_door[facing=east,half=upper,hinge=right,open=false,powered=true]", + "65:2": "ladder[facing=north]", + "65:3": "ladder[facing=south]", + "65:4": "ladder[facing=west]", + "65:5": "ladder[facing=east]", + "66:0": "rail[shape=north_south]", + "66:1": "rail[shape=east_west]", + "66:2": "rail[shape=ascending_east]", + "66:3": "rail[shape=ascending_west]", + "66:4": "rail[shape=ascending_north]", + "66:5": "rail[shape=ascending_south]", + "66:6": "rail[shape=south_east]", + "66:7": "rail[shape=south_west]", + "66:8": "rail[shape=north_west]", + "66:9": "rail[shape=north_east]", + "67:0": "cobblestone_stairs[facing=east,half=bottom,shape=straight]", + "67:1": "cobblestone_stairs[facing=west,half=bottom,shape=straight]", + "67:2": "cobblestone_stairs[facing=south,half=bottom,shape=straight]", + "67:3": "cobblestone_stairs[facing=north,half=bottom,shape=straight]", + "67:4": "cobblestone_stairs[facing=east,half=top,shape=straight]", + "67:5": "cobblestone_stairs[facing=west,half=top,shape=straight]", + "67:6": "cobblestone_stairs[facing=south,half=top,shape=straight]", + "67:7": "cobblestone_stairs[facing=north,half=top,shape=straight]", + "68:2": "wall_sign[facing=north]", + "68:3": "wall_sign[facing=south]", + "68:4": "wall_sign[facing=west]", + "68:5": "wall_sign[facing=east]", + "69:0": "lever[face=ceiling,facing=west,powered=false]", + "69:1": "lever[face=wall,facing=east,powered=false]", + "69:2": "lever[face=wall,facing=west,powered=false]", + "69:3": "lever[face=wall,facing=south,powered=false]", + "69:4": "lever[face=wall,facing=north,powered=false]", + "69:5": "lever[face=floor,facing=north,powered=false]", + "69:6": "lever[face=floor,facing=west,powered=false]", + "69:7": "lever[face=ceiling,facing=north,powered=false]", + "69:8": "lever[face=ceiling,facing=west,powered=true]", + "69:9": "lever[face=wall,facing=east,powered=true]", + "69:10": "lever[face=wall,facing=west,powered=true]", + "69:11": "lever[face=wall,facing=south,powered=true]", + "69:12": "lever[face=wall,facing=north,powered=true]", + "69:13": "lever[face=floor,facing=north,powered=true]", + "69:14": "lever[face=floor,facing=west,powered=true]", + "69:15": "lever[face=ceiling,facing=north,powered=true]", + "70:0": "stone_pressure_plate[powered=false]", + "70:1": "stone_pressure_plate[powered=true]", + "71:0": "iron_door[facing=east,half=lower,hinge=right,open=false,powered=false]", + "71:1": "iron_door[facing=south,half=lower,hinge=right,open=false,powered=false]", + "71:2": "iron_door[facing=west,half=lower,hinge=right,open=false,powered=false]", + "71:3": "iron_door[facing=north,half=lower,hinge=right,open=false,powered=false]", + "71:4": "iron_door[facing=east,half=lower,hinge=right,open=true,powered=false]", + "71:5": "iron_door[facing=south,half=lower,hinge=right,open=true,powered=false]", + "71:6": "iron_door[facing=west,half=lower,hinge=right,open=true,powered=false]", + "71:7": "iron_door[facing=north,half=lower,hinge=right,open=true,powered=false]", + "71:8": "iron_door[facing=east,half=upper,hinge=left,open=false,powered=false]", + "71:9": "iron_door[facing=east,half=upper,hinge=right,open=false,powered=false]", + "71:10": "iron_door[facing=east,half=upper,hinge=left,open=false,powered=true]", + "71:11": "iron_door[facing=east,half=upper,hinge=right,open=false,powered=true]", + "72:0": "oak_pressure_plate[powered=false]", + "72:1": "oak_pressure_plate[powered=true]", + "73:0": "redstone_ore[lit=false]", + "74:0": "redstone_ore[lit=true]", + "75:1": "redstone_wall_torch[facing=east,lit=false]", + "75:2": "redstone_wall_torch[facing=west,lit=false]", + "75:3": "redstone_wall_torch[facing=south,lit=false]", + "75:4": "redstone_wall_torch[facing=north,lit=false]", + "75:5": "redstone_torch[lit=false]", + "76:1": "redstone_wall_torch[facing=east,lit=true]", + "76:2": "redstone_wall_torch[facing=west,lit=true]", + "76:3": "redstone_wall_torch[facing=south,lit=true]", + "76:4": "redstone_wall_torch[facing=north,lit=true]", + "76:5": "redstone_torch[lit=true]", + "77:0": "stone_button[face=ceiling,facing=north,powered=false]", + "77:1": "stone_button[face=wall,facing=east,powered=false]", + "77:2": "stone_button[face=wall,facing=west,powered=false]", + "77:3": "stone_button[face=wall,facing=south,powered=false]", + "77:4": "stone_button[face=wall,facing=north,powered=false]", + "77:5": "stone_button[face=floor,facing=north,powered=false]", + "77:8": "stone_button[face=ceiling,facing=north,powered=true]", + "77:9": "stone_button[face=wall,facing=east,powered=true]", + "77:10": "stone_button[face=wall,facing=west,powered=true]", + "77:11": "stone_button[face=wall,facing=south,powered=true]", + "77:12": "stone_button[face=wall,facing=north,powered=true]", + "77:13": "stone_button[face=floor,facing=north,powered=true]", + "78:0": "snow[layers=1]", + "78:1": "snow[layers=2]", + "78:2": "snow[layers=3]", + "78:3": "snow[layers=4]", + "78:4": "snow[layers=5]", + "78:5": "snow[layers=6]", + "78:6": "snow[layers=7]", + "78:7": "snow[layers=8]", + "79:0": "ice", + "80:0": "snow_block", + "81:0": "cactus[age=0]", + "81:1": "cactus[age=1]", + "81:2": "cactus[age=2]", + "81:3": "cactus[age=3]", + "81:4": "cactus[age=4]", + "81:5": "cactus[age=5]", + "81:6": "cactus[age=6]", + "81:7": "cactus[age=7]", + "81:8": "cactus[age=8]", + "81:9": "cactus[age=9]", + "81:10": "cactus[age=10]", + "81:11": "cactus[age=11]", + "81:12": "cactus[age=12]", + "81:13": "cactus[age=13]", + "81:14": "cactus[age=14]", + "81:15": "cactus[age=15]", + "82:0": "clay", + "83:0": "sugar_cane[age=0]", + "83:1": "sugar_cane[age=1]", + "83:2": "sugar_cane[age=2]", + "83:3": "sugar_cane[age=3]", + "83:4": "sugar_cane[age=4]", + "83:5": "sugar_cane[age=5]", + "83:6": "sugar_cane[age=6]", + "83:7": "sugar_cane[age=7]", + "83:8": "sugar_cane[age=8]", + "83:9": "sugar_cane[age=9]", + "83:10": "sugar_cane[age=10]", + "83:11": "sugar_cane[age=11]", + "83:12": "sugar_cane[age=12]", + "83:13": "sugar_cane[age=13]", + "83:14": "sugar_cane[age=14]", + "83:15": "sugar_cane[age=15]", + "84:0": "jukebox[has_record=false]", + "84:1": "jukebox[has_record=true]", + "85:0": "oak_fence[east=false,north=false,south=false,west=false]", + "86:0": "carved_pumpkin[facing=south]", + "86:1": "carved_pumpkin[facing=west]", + "86:2": "carved_pumpkin[facing=north]", + "86:3": "carved_pumpkin[facing=east]", + "87:0": "netherrack", + "88:0": "soul_sand", + "89:0": "glowstone", + "90:1": "portal[axis=x]", + "90:2": "portal[axis=z]", + "91:0": "jack_o_lantern[facing=south]", + "91:1": "jack_o_lantern[facing=west]", + "91:2": "jack_o_lantern[facing=north]", + "91:3": "jack_o_lantern[facing=east]", + "92:0": "cake[bites=0]", + "92:1": "cake[bites=1]", + "92:2": "cake[bites=2]", + "92:3": "cake[bites=3]", + "92:4": "cake[bites=4]", + "92:5": "cake[bites=5]", + "92:6": "cake[bites=6]", + "93:0": "repeater[delay=1,facing=south,locked=false,powered=false]", + "93:1": "repeater[delay=1,facing=west,locked=false,powered=false]", + "93:2": "repeater[delay=1,facing=north,locked=false,powered=false]", + "93:3": "repeater[delay=1,facing=east,locked=false,powered=false]", + "93:4": "repeater[delay=2,facing=south,locked=false,powered=false]", + "93:5": "repeater[delay=2,facing=west,locked=false,powered=false]", + "93:6": "repeater[delay=2,facing=north,locked=false,powered=false]", + "93:7": "repeater[delay=2,facing=east,locked=false,powered=false]", + "93:8": "repeater[delay=3,facing=south,locked=false,powered=false]", + "93:9": "repeater[delay=3,facing=west,locked=false,powered=false]", + "93:10": "repeater[delay=3,facing=north,locked=false,powered=false]", + "93:11": "repeater[delay=3,facing=east,locked=false,powered=false]", + "93:12": "repeater[delay=4,facing=south,locked=false,powered=false]", + "93:13": "repeater[delay=4,facing=west,locked=false,powered=false]", + "93:14": "repeater[delay=4,facing=north,locked=false,powered=false]", + "93:15": "repeater[delay=4,facing=east,locked=false,powered=false]", + "94:0": "repeater[delay=1,facing=south,locked=false,powered=true]", + "94:1": "repeater[delay=1,facing=west,locked=false,powered=true]", + "94:2": "repeater[delay=1,facing=north,locked=false,powered=true]", + "94:3": "repeater[delay=1,facing=east,locked=false,powered=true]", + "94:4": "repeater[delay=2,facing=south,locked=false,powered=true]", + "94:5": "repeater[delay=2,facing=west,locked=false,powered=true]", + "94:6": "repeater[delay=2,facing=north,locked=false,powered=true]", + "94:7": "repeater[delay=2,facing=east,locked=false,powered=true]", + "94:8": "repeater[delay=3,facing=south,locked=false,powered=true]", + "94:9": "repeater[delay=3,facing=west,locked=false,powered=true]", + "94:10": "repeater[delay=3,facing=north,locked=false,powered=true]", + "94:11": "repeater[delay=3,facing=east,locked=false,powered=true]", + "94:12": "repeater[delay=4,facing=south,locked=false,powered=true]", + "94:13": "repeater[delay=4,facing=west,locked=false,powered=true]", + "94:14": "repeater[delay=4,facing=north,locked=false,powered=true]", + "94:15": "repeater[delay=4,facing=east,locked=false,powered=true]", + "95:0": "white_stained_glass", + "95:1": "orange_stained_glass", + "95:2": "magenta_stained_glass", + "95:3": "light_blue_stained_glass", + "95:4": "yellow_stained_glass", + "95:5": "lime_stained_glass", + "95:6": "pink_stained_glass", + "95:7": "gray_stained_glass", + "95:8": "light_gray_stained_glass", + "95:9": "cyan_stained_glass", + "95:10": "purple_stained_glass", + "95:11": "blue_stained_glass", + "95:12": "brown_stained_glass", + "95:13": "green_stained_glass", + "95:14": "red_stained_glass", + "95:15": "black_stained_glass", + "96:0": "oak_trapdoor[facing=north,half=bottom,open=false]", + "96:1": "oak_trapdoor[facing=south,half=bottom,open=false]", + "96:2": "oak_trapdoor[facing=west,half=bottom,open=false]", + "96:3": "oak_trapdoor[facing=east,half=bottom,open=false]", + "96:4": "oak_trapdoor[facing=north,half=bottom,open=true]", + "96:5": "oak_trapdoor[facing=south,half=bottom,open=true]", + "96:6": "oak_trapdoor[facing=west,half=bottom,open=true]", + "96:7": "oak_trapdoor[facing=east,half=bottom,open=true]", + "96:8": "oak_trapdoor[facing=north,half=top,open=false]", + "96:9": "oak_trapdoor[facing=south,half=top,open=false]", + "96:10": "oak_trapdoor[facing=west,half=top,open=false]", + "96:11": "oak_trapdoor[facing=east,half=top,open=false]", + "96:12": "oak_trapdoor[facing=north,half=top,open=true]", + "96:13": "oak_trapdoor[facing=south,half=top,open=true]", + "96:14": "oak_trapdoor[facing=west,half=top,open=true]", + "96:15": "oak_trapdoor[facing=east,half=top,open=true]", + "97:0": "infested_stone", + "97:1": "infested_cobblestone", + "97:2": "infested_stone_bricks", + "97:3": "infested_mossy_stone_bricks", + "97:4": "infested_cracked_stone_bricks", + "97:5": "infested_chiseled_stone_bricks", + "98:0": "stone_bricks", + "98:1": "mossy_stone_bricks", + "98:2": "cracked_stone_bricks", + "98:3": "chiseled_stone_bricks", + "99:0": "brown_mushroom_block[north=false,east=false,south=false,west=false,up=false,down=false]", + "99:1": "brown_mushroom_block[north=true,east=false,south=false,west=true,up=true,down=false]", + "99:2": "brown_mushroom_block[north=true,east=false,south=false,west=false,up=true,down=false]", + "99:3": "brown_mushroom_block[north=true,east=true,south=false,west=false,up=true,down=false]", + "99:4": "brown_mushroom_block[north=false,east=false,south=false,west=true,up=true,down=false]", + "99:5": "brown_mushroom_block[north=false,east=false,south=false,west=false,up=true,down=false]", + "99:6": "brown_mushroom_block[north=false,east=true,south=false,west=false,up=true,down=false]", + "99:7": "brown_mushroom_block[north=false,east=false,south=true,west=true,up=true,down=false]", + "99:8": "brown_mushroom_block[north=false,east=false,south=true,west=false,up=true,down=false]", + "99:9": "brown_mushroom_block[north=false,east=true,south=true,west=false,up=true,down=false]", + "99:10": "mushroom_stem[north=true,east=true,south=true,west=true,up=false,down=false]", + "99:14": "brown_mushroom_block[north=true,east=true,south=true,west=true,up=true,down=true]", + "99:15": "mushroom_stem[north=true,east=true,south=true,west=true,up=true,down=true]", + "100:0": "red_mushroom_block[north=false,east=false,south=false,west=false,up=false,down=false]", + "100:1": "red_mushroom_block[north=true,east=false,south=false,west=true,up=true,down=false]", + "100:2": "red_mushroom_block[north=true,east=false,south=false,west=false,up=true,down=false]", + "100:3": "red_mushroom_block[north=true,east=true,south=false,west=false,up=true,down=false]", + "100:4": "red_mushroom_block[north=false,east=false,south=false,west=true,up=true,down=false]", + "100:5": "red_mushroom_block[north=false,east=false,south=false,west=false,up=true,down=false]", + "100:6": "red_mushroom_block[north=false,east=true,south=false,west=false,up=true,down=false]", + "100:7": "red_mushroom_block[north=false,east=false,south=true,west=true,up=true,down=false]", + "100:8": "red_mushroom_block[north=false,east=false,south=true,west=false,up=true,down=false]", + "100:9": "red_mushroom_block[north=false,east=true,south=true,west=false,up=true,down=false]", + "100:10": "mushroom_stem[north=true,east=true,south=true,west=true,up=false,down=false]", + "100:14": "red_mushroom_block[north=true,east=true,south=true,west=true,up=true,down=true]", + "100:15": "mushroom_stem[north=true,east=true,south=true,west=true,up=true,down=true]", + "101:0": "iron_bars[east=false,north=false,south=false,west=false]", + "102:0": "glass_pane[east=false,north=false,south=false,west=false]", + "103:0": "melon_block", + "104:0": "pumpkin_stem[age=0]", + "104:1": "pumpkin_stem[age=1]", + "104:2": "pumpkin_stem[age=2]", + "104:3": "pumpkin_stem[age=3]", + "104:4": "pumpkin_stem[age=4]", + "104:5": "pumpkin_stem[age=5]", + "104:6": "pumpkin_stem[age=6]", + "104:7": "pumpkin_stem[age=7]", + "105:0": "melon_stem[age=0]", + "105:1": "melon_stem[age=1]", + "105:2": "melon_stem[age=2]", + "105:3": "melon_stem[age=3]", + "105:4": "melon_stem[age=4]", + "105:5": "melon_stem[age=5]", + "105:6": "melon_stem[age=6]", + "105:7": "melon_stem[age=7]", + "106:0": "vine[east=false,north=false,south=false,up=true,west=false]", + "106:1": "vine[east=false,north=false,south=true,up=true,west=false]", + "106:2": "vine[east=false,north=false,south=false,up=true,west=true]", + "106:3": "vine[east=false,north=false,south=true,up=true,west=true]", + "106:4": "vine[east=false,north=true,south=false,up=true,west=false]", + "106:5": "vine[east=false,north=true,south=true,up=true,west=false]", + "106:6": "vine[east=false,north=true,south=false,up=true,west=true]", + "106:7": "vine[east=false,north=true,south=true,up=true,west=true]", + "106:8": "vine[east=true,north=false,south=false,up=true,west=false]", + "106:9": "vine[east=true,north=false,south=true,up=true,west=false]", + "106:10": "vine[east=true,north=false,south=false,up=true,west=true]", + "106:11": "vine[east=true,north=false,south=true,up=true,west=true]", + "106:12": "vine[east=true,north=true,south=false,up=true,west=false]", + "106:13": "vine[east=true,north=true,south=true,up=true,west=false]", + "106:14": "vine[east=true,north=true,south=false,up=true,west=true]", + "106:15": "vine[east=true,north=true,south=true,up=true,west=true]", + "107:0": "oak_fence_gate[facing=south,in_wall=false,open=false,powered=false]", + "107:1": "oak_fence_gate[facing=west,in_wall=false,open=false,powered=false]", + "107:2": "oak_fence_gate[facing=north,in_wall=false,open=false,powered=false]", + "107:3": "oak_fence_gate[facing=east,in_wall=false,open=false,powered=false]", + "107:4": "oak_fence_gate[facing=south,in_wall=false,open=true,powered=false]", + "107:5": "oak_fence_gate[facing=west,in_wall=false,open=true,powered=false]", + "107:6": "oak_fence_gate[facing=north,in_wall=false,open=true,powered=false]", + "107:7": "oak_fence_gate[facing=east,in_wall=false,open=true,powered=false]", + "107:8": "oak_fence_gate[facing=south,in_wall=false,open=false,powered=true]", + "107:9": "oak_fence_gate[facing=west,in_wall=false,open=false,powered=true]", + "107:10": "oak_fence_gate[facing=north,in_wall=false,open=false,powered=true]", + "107:11": "oak_fence_gate[facing=east,in_wall=false,open=false,powered=true]", + "107:12": "oak_fence_gate[facing=south,in_wall=false,open=true,powered=true]", + "107:13": "oak_fence_gate[facing=west,in_wall=false,open=true,powered=true]", + "107:14": "oak_fence_gate[facing=north,in_wall=false,open=true,powered=true]", + "107:15": "oak_fence_gate[facing=east,in_wall=false,open=true,powered=true]", + "108:0": "brick_stairs[facing=east,half=bottom,shape=straight]", + "108:1": "brick_stairs[facing=west,half=bottom,shape=straight]", + "108:2": "brick_stairs[facing=south,half=bottom,shape=straight]", + "108:3": "brick_stairs[facing=north,half=bottom,shape=straight]", + "108:4": "brick_stairs[facing=east,half=top,shape=straight]", + "108:5": "brick_stairs[facing=west,half=top,shape=straight]", + "108:6": "brick_stairs[facing=south,half=top,shape=straight]", + "108:7": "brick_stairs[facing=north,half=top,shape=straight]", + "109:0": "stone_brick_stairs[facing=east,half=bottom,shape=straight]", + "109:1": "stone_brick_stairs[facing=west,half=bottom,shape=straight]", + "109:2": "stone_brick_stairs[facing=south,half=bottom,shape=straight]", + "109:3": "stone_brick_stairs[facing=north,half=bottom,shape=straight]", + "109:4": "stone_brick_stairs[facing=east,half=top,shape=straight]", + "109:5": "stone_brick_stairs[facing=west,half=top,shape=straight]", + "109:6": "stone_brick_stairs[facing=south,half=top,shape=straight]", + "109:7": "stone_brick_stairs[facing=north,half=top,shape=straight]", + "110:0": "mycelium[snowy=false]", + "111:0": "lily_pad", + "112:0": "nether_bricks", + "113:0": "nether_brick_fence[east=false,north=false,south=false,west=false]", + "114:0": "nether_brick_stairs[facing=east,half=bottom,shape=straight]", + "114:1": "nether_brick_stairs[facing=west,half=bottom,shape=straight]", + "114:2": "nether_brick_stairs[facing=south,half=bottom,shape=straight]", + "114:3": "nether_brick_stairs[facing=north,half=bottom,shape=straight]", + "114:4": "nether_brick_stairs[facing=east,half=top,shape=straight]", + "114:5": "nether_brick_stairs[facing=west,half=top,shape=straight]", + "114:6": "nether_brick_stairs[facing=south,half=top,shape=straight]", + "114:7": "nether_brick_stairs[facing=north,half=top,shape=straight]", + "115:0": "nether_wart[age=0]", + "115:1": "nether_wart[age=1]", + "115:2": "nether_wart[age=2]", + "115:3": "nether_wart[age=3]", + "116:0": "enchanting_table", + "117:0": "brewing_stand[has_bottle_0=false,has_bottle_1=false,has_bottle_2=false]", + "117:1": "brewing_stand[has_bottle_0=true,has_bottle_1=false,has_bottle_2=false]", + "117:2": "brewing_stand[has_bottle_0=false,has_bottle_1=true,has_bottle_2=false]", + "117:3": "brewing_stand[has_bottle_0=true,has_bottle_1=true,has_bottle_2=false]", + "117:4": "brewing_stand[has_bottle_0=false,has_bottle_1=false,has_bottle_2=true]", + "117:5": "brewing_stand[has_bottle_0=true,has_bottle_1=false,has_bottle_2=true]", + "117:6": "brewing_stand[has_bottle_0=false,has_bottle_1=true,has_bottle_2=true]", + "117:7": "brewing_stand[has_bottle_0=true,has_bottle_1=true,has_bottle_2=true]", + "118:0": "cauldron[level=0]", + "118:1": "cauldron[level=1]", + "118:2": "cauldron[level=2]", + "118:3": "cauldron[level=3]", + "119:0": "end_portal", + "120:0": "end_portal_frame[eye=false,facing=south]", + "120:1": "end_portal_frame[eye=false,facing=west]", + "120:2": "end_portal_frame[eye=false,facing=north]", + "120:3": "end_portal_frame[eye=false,facing=east]", + "120:4": "end_portal_frame[eye=true,facing=south]", + "120:5": "end_portal_frame[eye=true,facing=west]", + "120:6": "end_portal_frame[eye=true,facing=north]", + "120:7": "end_portal_frame[eye=true,facing=east]", + "121:0": "end_stone", + "122:0": "dragon_egg", + "123:0": "redstone_lamp[lit=false]", + "124:0": "redstone_lamp[lit=true]", + "125:0": "oak_slab[type=double]", + "125:1": "spruce_slab[type=double]", + "125:2": "birch_slab[type=double]", + "125:3": "jungle_slab[type=double]", + "125:4": "acacia_slab[type=double]", + "125:5": "dark_oak_slab[type=double]", + "126:0": "oak_slab[type=bottom]", + "126:1": "spruce_slab[type=bottom]", + "126:2": "birch_slab[type=bottom]", + "126:3": "jungle_slab[type=bottom]", + "126:4": "acacia_slab[type=bottom]", + "126:5": "dark_oak_slab[type=bottom]", + "126:8": "oak_slab[type=top]", + "126:9": "spruce_slab[type=top]", + "126:10": "birch_slab[type=top]", + "126:11": "jungle_slab[type=top]", + "126:12": "acacia_slab[type=top]", + "126:13": "dark_oak_slab[type=top]", + "127:0": "cocoa[age=0,facing=south]", + "127:1": "cocoa[age=0,facing=west]", + "127:2": "cocoa[age=0,facing=north]", + "127:3": "cocoa[age=0,facing=east]", + "127:4": "cocoa[age=1,facing=south]", + "127:5": "cocoa[age=1,facing=west]", + "127:6": "cocoa[age=1,facing=north]", + "127:7": "cocoa[age=1,facing=east]", + "127:8": "cocoa[age=2,facing=south]", + "127:9": "cocoa[age=2,facing=west]", + "127:10": "cocoa[age=2,facing=north]", + "127:11": "cocoa[age=2,facing=east]", + "128:0": "sandstone_stairs[facing=east,half=bottom,shape=straight]", + "128:1": "sandstone_stairs[facing=west,half=bottom,shape=straight]", + "128:2": "sandstone_stairs[facing=south,half=bottom,shape=straight]", + "128:3": "sandstone_stairs[facing=north,half=bottom,shape=straight]", + "128:4": "sandstone_stairs[facing=east,half=top,shape=straight]", + "128:5": "sandstone_stairs[facing=west,half=top,shape=straight]", + "128:6": "sandstone_stairs[facing=south,half=top,shape=straight]", + "128:7": "sandstone_stairs[facing=north,half=top,shape=straight]", + "129:0": "emerald_ore", + "130:2": "ender_chest[facing=north]", + "130:3": "ender_chest[facing=south]", + "130:4": "ender_chest[facing=west]", + "130:5": "ender_chest[facing=east]", + "131:0": "tripwire_hook[attached=false,facing=south,powered=false]", + "131:1": "tripwire_hook[attached=false,facing=west,powered=false]", + "131:2": "tripwire_hook[attached=false,facing=north,powered=false]", + "131:3": "tripwire_hook[attached=false,facing=east,powered=false]", + "131:4": "tripwire_hook[attached=true,facing=south,powered=false]", + "131:5": "tripwire_hook[attached=true,facing=west,powered=false]", + "131:6": "tripwire_hook[attached=true,facing=north,powered=false]", + "131:7": "tripwire_hook[attached=true,facing=east,powered=false]", + "131:8": "tripwire_hook[attached=false,facing=south,powered=true]", + "131:9": "tripwire_hook[attached=false,facing=west,powered=true]", + "131:10": "tripwire_hook[attached=false,facing=north,powered=true]", + "131:11": "tripwire_hook[attached=false,facing=east,powered=true]", + "131:12": "tripwire_hook[attached=true,facing=south,powered=true]", + "131:13": "tripwire_hook[attached=true,facing=west,powered=true]", + "131:14": "tripwire_hook[attached=true,facing=north,powered=true]", + "131:15": "tripwire_hook[attached=true,facing=east,powered=true]", + "132:0": "tripwire[attached=false,disarmed=false,east=false,north=false,powered=false,south=false,west=false]", + "132:1": "tripwire[attached=false,disarmed=false,east=false,north=false,powered=true,south=false,west=false]", + "132:4": "tripwire[attached=true,disarmed=false,east=false,north=false,powered=false,south=false,west=false]", + "132:5": "tripwire[attached=true,disarmed=false,east=false,north=false,powered=true,south=false,west=false]", + "132:8": "tripwire[attached=false,disarmed=true,east=false,north=false,powered=false,south=false,west=false]", + "132:9": "tripwire[attached=false,disarmed=true,east=false,north=false,powered=true,south=false,west=false]", + "132:12": "tripwire[attached=true,disarmed=true,east=false,north=false,powered=false,south=false,west=false]", + "132:13": "tripwire[attached=true,disarmed=true,east=false,north=false,powered=true,south=false,west=false]", + "133:0": "emerald_block", + "134:0": "spruce_stairs[facing=east,half=bottom,shape=straight]", + "134:1": "spruce_stairs[facing=west,half=bottom,shape=straight]", + "134:2": "spruce_stairs[facing=south,half=bottom,shape=straight]", + "134:3": "spruce_stairs[facing=north,half=bottom,shape=straight]", + "134:4": "spruce_stairs[facing=east,half=top,shape=straight]", + "134:5": "spruce_stairs[facing=west,half=top,shape=straight]", + "134:6": "spruce_stairs[facing=south,half=top,shape=straight]", + "134:7": "spruce_stairs[facing=north,half=top,shape=straight]", + "135:0": "birch_stairs[facing=east,half=bottom,shape=straight]", + "135:1": "birch_stairs[facing=west,half=bottom,shape=straight]", + "135:2": "birch_stairs[facing=south,half=bottom,shape=straight]", + "135:3": "birch_stairs[facing=north,half=bottom,shape=straight]", + "135:4": "birch_stairs[facing=east,half=top,shape=straight]", + "135:5": "birch_stairs[facing=west,half=top,shape=straight]", + "135:6": "birch_stairs[facing=south,half=top,shape=straight]", + "135:7": "birch_stairs[facing=north,half=top,shape=straight]", + "136:0": "jungle_stairs[facing=east,half=bottom,shape=straight]", + "136:1": "jungle_stairs[facing=west,half=bottom,shape=straight]", + "136:2": "jungle_stairs[facing=south,half=bottom,shape=straight]", + "136:3": "jungle_stairs[facing=north,half=bottom,shape=straight]", + "136:4": "jungle_stairs[facing=east,half=top,shape=straight]", + "136:5": "jungle_stairs[facing=west,half=top,shape=straight]", + "136:6": "jungle_stairs[facing=south,half=top,shape=straight]", + "136:7": "jungle_stairs[facing=north,half=top,shape=straight]", + "137:0": "command_block[conditional=false,facing=down]", + "137:1": "command_block[conditional=false,facing=up]", + "137:2": "command_block[conditional=false,facing=north]", + "137:3": "command_block[conditional=false,facing=south]", + "137:4": "command_block[conditional=false,facing=west]", + "137:5": "command_block[conditional=false,facing=east]", + "137:8": "command_block[conditional=true,facing=down]", + "137:9": "command_block[conditional=true,facing=up]", + "137:10": "command_block[conditional=true,facing=north]", + "137:11": "command_block[conditional=true,facing=south]", + "137:12": "command_block[conditional=true,facing=west]", + "137:13": "command_block[conditional=true,facing=east]", + "138:0": "beacon", + "139:0": "cobblestone_wall[east=false,north=false,south=false,up=false,west=false]", + "139:1": "mossy_cobblestone_wall[east=false,north=false,south=false,up=false,west=false]", + "140:0": "potted_cactus", + "140:1": "potted_cactus", + "140:2": "potted_cactus", + "140:3": "potted_cactus", + "140:4": "potted_cactus", + "140:5": "potted_cactus", + "140:6": "potted_cactus", + "140:7": "potted_cactus", + "140:8": "potted_cactus", + "140:9": "potted_cactus", + "140:10": "potted_cactus", + "140:11": "potted_cactus", + "140:12": "potted_cactus", + "140:13": "potted_cactus", + "140:14": "potted_cactus", + "140:15": "potted_cactus", + "141:0": "carrots[age=0]", + "141:1": "carrots[age=1]", + "141:2": "carrots[age=2]", + "141:3": "carrots[age=3]", + "141:4": "carrots[age=4]", + "141:5": "carrots[age=5]", + "141:6": "carrots[age=6]", + "141:7": "carrots[age=7]", + "142:0": "potatoes[age=0]", + "142:1": "potatoes[age=1]", + "142:2": "potatoes[age=2]", + "142:3": "potatoes[age=3]", + "142:4": "potatoes[age=4]", + "142:5": "potatoes[age=5]", + "142:6": "potatoes[age=6]", + "142:7": "potatoes[age=7]", + "143:0": "oak_button[face=ceiling,facing=north,powered=false]", + "143:1": "oak_button[face=wall,facing=east,powered=false]", + "143:2": "oak_button[face=wall,facing=west,powered=false]", + "143:3": "oak_button[face=wall,facing=south,powered=false]", + "143:4": "oak_button[face=wall,facing=north,powered=false]", + "143:5": "oak_button[face=floor,facing=north,powered=false]", + "143:8": "oak_button[face=ceiling,facing=north,powered=true]", + "143:9": "oak_button[face=wall,facing=east,powered=true]", + "143:10": "oak_button[face=wall,facing=west,powered=true]", + "143:11": "oak_button[face=wall,facing=south,powered=true]", + "143:12": "oak_button[face=wall,facing=north,powered=true]", + "143:13": "oak_button[face=floor,facing=north,powered=true]", + "144:0": "undefined[facing=down,nodrop=false]", + "144:1": "undefined[facing=up,nodrop=false]", + "144:2": "undefined[facing=north,nodrop=false]", + "144:3": "undefined[facing=south,nodrop=false]", + "144:4": "undefined[facing=west,nodrop=false]", + "144:5": "undefined[facing=east,nodrop=false]", + "144:8": "undefined[facing=down,nodrop=true]", + "144:9": "undefined[facing=up,nodrop=true]", + "144:10": "undefined[facing=north,nodrop=true]", + "144:11": "undefined[facing=south,nodrop=true]", + "144:12": "undefined[facing=west,nodrop=true]", + "144:13": "undefined[facing=east,nodrop=true]", + "145:0": "anvil[facing=south]", + "145:1": "anvil[facing=west]", + "145:2": "anvil[facing=north]", + "145:3": "anvil[facing=east]", + "145:4": "chipped_anvil[facing=south]", + "145:5": "chipped_anvil[facing=west]", + "145:6": "chipped_anvil[facing=north]", + "145:7": "chipped_anvil[facing=east]", + "145:8": "damaged_anvil[facing=south]", + "145:9": "damaged_anvil[facing=west]", + "145:10": "damaged_anvil[facing=north]", + "145:11": "damaged_anvil[facing=east]", + "146:2": "trapped_chest[facing=north,type=single]", + "146:3": "trapped_chest[facing=south,type=single]", + "146:4": "trapped_chest[facing=west,type=single]", + "146:5": "trapped_chest[facing=east,type=single]", + "147:0": "light_weighted_pressure_plate[power=0]", + "147:1": "light_weighted_pressure_plate[power=1]", + "147:2": "light_weighted_pressure_plate[power=2]", + "147:3": "light_weighted_pressure_plate[power=3]", + "147:4": "light_weighted_pressure_plate[power=4]", + "147:5": "light_weighted_pressure_plate[power=5]", + "147:6": "light_weighted_pressure_plate[power=6]", + "147:7": "light_weighted_pressure_plate[power=7]", + "147:8": "light_weighted_pressure_plate[power=8]", + "147:9": "light_weighted_pressure_plate[power=9]", + "147:10": "light_weighted_pressure_plate[power=10]", + "147:11": "light_weighted_pressure_plate[power=11]", + "147:12": "light_weighted_pressure_plate[power=12]", + "147:13": "light_weighted_pressure_plate[power=13]", + "147:14": "light_weighted_pressure_plate[power=14]", + "147:15": "light_weighted_pressure_plate[power=15]", + "148:0": "heavy_weighted_pressure_plate[power=0]", + "148:1": "heavy_weighted_pressure_plate[power=1]", + "148:2": "heavy_weighted_pressure_plate[power=2]", + "148:3": "heavy_weighted_pressure_plate[power=3]", + "148:4": "heavy_weighted_pressure_plate[power=4]", + "148:5": "heavy_weighted_pressure_plate[power=5]", + "148:6": "heavy_weighted_pressure_plate[power=6]", + "148:7": "heavy_weighted_pressure_plate[power=7]", + "148:8": "heavy_weighted_pressure_plate[power=8]", + "148:9": "heavy_weighted_pressure_plate[power=9]", + "148:10": "heavy_weighted_pressure_plate[power=10]", + "148:11": "heavy_weighted_pressure_plate[power=11]", + "148:12": "heavy_weighted_pressure_plate[power=12]", + "148:13": "heavy_weighted_pressure_plate[power=13]", + "148:14": "heavy_weighted_pressure_plate[power=14]", + "148:15": "heavy_weighted_pressure_plate[power=15]", + "149:0": "comparator[facing=south,mode=compare,powered=false]", + "149:1": "comparator[facing=west,mode=compare,powered=false]", + "149:2": "comparator[facing=north,mode=compare,powered=false]", + "149:3": "comparator[facing=east,mode=compare,powered=false]", + "149:4": "comparator[facing=south,mode=subtract,powered=false]", + "149:5": "comparator[facing=west,mode=subtract,powered=false]", + "149:6": "comparator[facing=north,mode=subtract,powered=false]", + "149:7": "comparator[facing=east,mode=subtract,powered=false]", + "149:8": "comparator[facing=south,mode=compare,powered=true]", + "149:9": "comparator[facing=west,mode=compare,powered=true]", + "149:10": "comparator[facing=north,mode=compare,powered=true]", + "149:11": "comparator[facing=east,mode=compare,powered=true]", + "149:12": "comparator[facing=south,mode=subtract,powered=true]", + "149:13": "comparator[facing=west,mode=subtract,powered=true]", + "149:14": "comparator[facing=north,mode=subtract,powered=true]", + "149:15": "comparator[facing=east,mode=subtract,powered=true]", + "150:0": "comparator[facing=south,mode=compare,powered=false]", + "150:1": "comparator[facing=west,mode=compare,powered=false]", + "150:2": "comparator[facing=north,mode=compare,powered=false]", + "150:3": "comparator[facing=east,mode=compare,powered=false]", + "150:4": "comparator[facing=south,mode=subtract,powered=false]", + "150:5": "comparator[facing=west,mode=subtract,powered=false]", + "150:6": "comparator[facing=north,mode=subtract,powered=false]", + "150:7": "comparator[facing=east,mode=subtract,powered=false]", + "150:8": "comparator[facing=south,mode=compare,powered=true]", + "150:9": "comparator[facing=west,mode=compare,powered=true]", + "150:10": "comparator[facing=north,mode=compare,powered=true]", + "150:11": "comparator[facing=east,mode=compare,powered=true]", + "150:12": "comparator[facing=south,mode=subtract,powered=true]", + "150:13": "comparator[facing=west,mode=subtract,powered=true]", + "150:14": "comparator[facing=north,mode=subtract,powered=true]", + "150:15": "comparator[facing=east,mode=subtract,powered=true]", + "151:0": "daylight_detector[inverted=false,power=0]", + "151:1": "daylight_detector[inverted=false,power=1]", + "151:2": "daylight_detector[inverted=false,power=2]", + "151:3": "daylight_detector[inverted=false,power=3]", + "151:4": "daylight_detector[inverted=false,power=4]", + "151:5": "daylight_detector[inverted=false,power=5]", + "151:6": "daylight_detector[inverted=false,power=6]", + "151:7": "daylight_detector[inverted=false,power=7]", + "151:8": "daylight_detector[inverted=false,power=8]", + "151:9": "daylight_detector[inverted=false,power=9]", + "151:10": "daylight_detector[inverted=false,power=10]", + "151:11": "daylight_detector[inverted=false,power=11]", + "151:12": "daylight_detector[inverted=false,power=12]", + "151:13": "daylight_detector[inverted=false,power=13]", + "151:14": "daylight_detector[inverted=false,power=14]", + "151:15": "daylight_detector[inverted=false,power=15]", + "152:0": "redstone_block", + "153:0": "nether_quartz_ore", + "154:0": "hopper[enabled=true,facing=down]", + "154:2": "hopper[enabled=true,facing=north]", + "154:3": "hopper[enabled=true,facing=south]", + "154:4": "hopper[enabled=true,facing=west]", + "154:5": "hopper[enabled=true,facing=east]", + "154:8": "hopper[enabled=false,facing=down]", + "154:10": "hopper[enabled=false,facing=north]", + "154:11": "hopper[enabled=false,facing=south]", + "154:12": "hopper[enabled=false,facing=west]", + "154:13": "hopper[enabled=false,facing=east]", + "155:0": "quartz_block", + "155:1": "chiseled_quartz_block", + "155:2": "quartz_pillar[axis=y]", + "155:3": "quartz_pillar[axis=x]", + "155:4": "quartz_pillar[axis=z]", + "156:0": "quartz_stairs[facing=east,half=bottom,shape=straight]", + "156:1": "quartz_stairs[facing=west,half=bottom,shape=straight]", + "156:2": "quartz_stairs[facing=south,half=bottom,shape=straight]", + "156:3": "quartz_stairs[facing=north,half=bottom,shape=straight]", + "156:4": "quartz_stairs[facing=east,half=top,shape=straight]", + "156:5": "quartz_stairs[facing=west,half=top,shape=straight]", + "156:6": "quartz_stairs[facing=south,half=top,shape=straight]", + "156:7": "quartz_stairs[facing=north,half=top,shape=straight]", + "157:0": "activator_rail[powered=false,shape=north_south]", + "157:1": "activator_rail[powered=false,shape=east_west]", + "157:2": "activator_rail[powered=false,shape=ascending_east]", + "157:3": "activator_rail[powered=false,shape=ascending_west]", + "157:4": "activator_rail[powered=false,shape=ascending_north]", + "157:5": "activator_rail[powered=false,shape=ascending_south]", + "157:8": "activator_rail[powered=true,shape=north_south]", + "157:9": "activator_rail[powered=true,shape=east_west]", + "157:10": "activator_rail[powered=true,shape=ascending_east]", + "157:11": "activator_rail[powered=true,shape=ascending_west]", + "157:12": "activator_rail[powered=true,shape=ascending_north]", + "157:13": "activator_rail[powered=true,shape=ascending_south]", + "158:0": "dropper[facing=down,triggered=false]", + "158:1": "dropper[facing=up,triggered=false]", + "158:2": "dropper[facing=north,triggered=false]", + "158:3": "dropper[facing=south,triggered=false]", + "158:4": "dropper[facing=west,triggered=false]", + "158:5": "dropper[facing=east,triggered=false]", + "158:8": "dropper[facing=down,triggered=true]", + "158:9": "dropper[facing=up,triggered=true]", + "158:10": "dropper[facing=north,triggered=true]", + "158:11": "dropper[facing=south,triggered=true]", + "158:12": "dropper[facing=west,triggered=true]", + "158:13": "dropper[facing=east,triggered=true]", + "159:0": "white_terracotta", + "159:1": "orange_terracotta", + "159:2": "magenta_terracotta", + "159:3": "light_blue_terracotta", + "159:4": "yellow_terracotta", + "159:5": "lime_terracotta", + "159:6": "pink_terracotta", + "159:7": "gray_terracotta", + "159:8": "light_gray_terracotta", + "159:9": "cyan_terracotta", + "159:10": "purple_terracotta", + "159:11": "blue_terracotta", + "159:12": "brown_terracotta", + "159:13": "green_terracotta", + "159:14": "red_terracotta", + "159:15": "black_terracotta", + "160:0": "white_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:1": "orange_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:2": "magenta_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:3": "light_blue_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:4": "yellow_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:5": "lime_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:6": "pink_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:7": "gray_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:8": "light_gray_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:9": "cyan_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:10": "purple_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:11": "blue_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:12": "brown_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:13": "green_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:14": "red_stained_glass_pane[east=false,north=false,south=false,west=false]", + "160:15": "black_stained_glass_pane[east=false,north=false,south=false,west=false]", + "161:0": "acacia_leaves[check_decay=false,decayable=true]", + "161:1": "dark_oak_leaves[check_decay=false,decayable=true]", + "161:4": "acacia_leaves[check_decay=false,decayable=false]", + "161:5": "dark_oak_leaves[check_decay=false,decayable=false]", + "161:8": "acacia_leaves[check_decay=true,decayable=true]", + "161:9": "dark_oak_leaves[check_decay=true,decayable=true]", + "161:12": "acacia_leaves[check_decay=true,decayable=false]", + "161:13": "dark_oak_leaves[check_decay=true,decayable=false]", + "162:0": "acacia_log[axis=y]", + "162:1": "dark_oak_log[axis=y]", + "162:4": "acacia_log[axis=x]", + "162:5": "dark_oak_log[axis=x]", + "162:8": "acacia_log[axis=z]", + "162:9": "dark_oak_log[axis=z]", + "162:12": "acacia_bark", + "162:13": "dark_oak_bark", + "163:0": "acacia_stairs[facing=east,half=bottom,shape=straight]", + "163:1": "acacia_stairs[facing=west,half=bottom,shape=straight]", + "163:2": "acacia_stairs[facing=south,half=bottom,shape=straight]", + "163:3": "acacia_stairs[facing=north,half=bottom,shape=straight]", + "163:4": "acacia_stairs[facing=east,half=top,shape=straight]", + "163:5": "acacia_stairs[facing=west,half=top,shape=straight]", + "163:6": "acacia_stairs[facing=south,half=top,shape=straight]", + "163:7": "acacia_stairs[facing=north,half=top,shape=straight]", + "164:0": "dark_oak_stairs[facing=east,half=bottom,shape=straight]", + "164:1": "dark_oak_stairs[facing=west,half=bottom,shape=straight]", + "164:2": "dark_oak_stairs[facing=south,half=bottom,shape=straight]", + "164:3": "dark_oak_stairs[facing=north,half=bottom,shape=straight]", + "164:4": "dark_oak_stairs[facing=east,half=top,shape=straight]", + "164:5": "dark_oak_stairs[facing=west,half=top,shape=straight]", + "164:6": "dark_oak_stairs[facing=south,half=top,shape=straight]", + "164:7": "dark_oak_stairs[facing=north,half=top,shape=straight]", + "165:0": "slime_block", + "166:0": "barrier", + "167:0": "iron_trapdoor[facing=north,half=bottom,open=false]", + "167:1": "iron_trapdoor[facing=south,half=bottom,open=false]", + "167:2": "iron_trapdoor[facing=west,half=bottom,open=false]", + "167:3": "iron_trapdoor[facing=east,half=bottom,open=false]", + "167:4": "iron_trapdoor[facing=north,half=bottom,open=true]", + "167:5": "iron_trapdoor[facing=south,half=bottom,open=true]", + "167:6": "iron_trapdoor[facing=west,half=bottom,open=true]", + "167:7": "iron_trapdoor[facing=east,half=bottom,open=true]", + "167:8": "iron_trapdoor[facing=north,half=top,open=false]", + "167:9": "iron_trapdoor[facing=south,half=top,open=false]", + "167:10": "iron_trapdoor[facing=west,half=top,open=false]", + "167:11": "iron_trapdoor[facing=east,half=top,open=false]", + "167:12": "iron_trapdoor[facing=north,half=top,open=true]", + "167:13": "iron_trapdoor[facing=south,half=top,open=true]", + "167:14": "iron_trapdoor[facing=west,half=top,open=true]", + "167:15": "iron_trapdoor[facing=east,half=top,open=true]", + "168:0": "prismarine", + "168:1": "prismarine_bricks", + "168:2": "dark_prismarine", + "169:0": "sea_lantern", + "170:0": "hay_block[axis=y]", + "170:4": "hay_block[axis=x]", + "170:8": "hay_block[axis=z]", + "171:0": "white_carpet", + "171:1": "orange_carpet", + "171:2": "magenta_carpet", + "171:3": "light_blue_carpet", + "171:4": "yellow_carpet", + "171:5": "lime_carpet", + "171:6": "pink_carpet", + "171:7": "gray_carpet", + "171:8": "light_gray_carpet", + "171:9": "cyan_carpet", + "171:10": "purple_carpet", + "171:11": "blue_carpet", + "171:12": "brown_carpet", + "171:13": "green_carpet", + "171:14": "red_carpet", + "171:15": "black_carpet", + "172:0": "terracotta", + "173:0": "coal_block", + "174:0": "packed_ice", + "175:0": "sunflower[half=lower]", + "175:1": "lilac[half=lower]", + "175:2": "tall_grass[half=lower]", + "175:3": "large_fern[half=lower]", + "175:4": "rose_bush[half=lower]", + "175:5": "peony[half=lower]", + "175:8": "peony[half=upper]", + "175:9": "peony[half=upper]", + "175:10": "peony[half=upper]", + "175:11": "peony[half=upper]", + "176:0": "white_banner[rotation=0]", + "176:1": "white_banner[rotation=1]", + "176:2": "white_banner[rotation=2]", + "176:3": "white_banner[rotation=3]", + "176:4": "white_banner[rotation=4]", + "176:5": "white_banner[rotation=5]", + "176:6": "white_banner[rotation=6]", + "176:7": "white_banner[rotation=7]", + "176:8": "white_banner[rotation=8]", + "176:9": "white_banner[rotation=9]", + "176:10": "white_banner[rotation=10]", + "176:11": "white_banner[rotation=11]", + "176:12": "white_banner[rotation=12]", + "176:13": "white_banner[rotation=13]", + "176:14": "white_banner[rotation=14]", + "176:15": "white_banner[rotation=15]", + "177:2": "white_wall_banner[facing=north]", + "177:3": "white_wall_banner[facing=south]", + "177:4": "white_wall_banner[facing=west]", + "177:5": "white_wall_banner[facing=east]", + "178:0": "daylight_detector[inverted=true,power=0]", + "178:1": "daylight_detector[inverted=true,power=1]", + "178:2": "daylight_detector[inverted=true,power=2]", + "178:3": "daylight_detector[inverted=true,power=3]", + "178:4": "daylight_detector[inverted=true,power=4]", + "178:5": "daylight_detector[inverted=true,power=5]", + "178:6": "daylight_detector[inverted=true,power=6]", + "178:7": "daylight_detector[inverted=true,power=7]", + "178:8": "daylight_detector[inverted=true,power=8]", + "178:9": "daylight_detector[inverted=true,power=9]", + "178:10": "daylight_detector[inverted=true,power=10]", + "178:11": "daylight_detector[inverted=true,power=11]", + "178:12": "daylight_detector[inverted=true,power=12]", + "178:13": "daylight_detector[inverted=true,power=13]", + "178:14": "daylight_detector[inverted=true,power=14]", + "178:15": "daylight_detector[inverted=true,power=15]", + "179:0": "red_sandstone", + "179:1": "chiseled_red_sandstone", + "179:2": "cut_red_sandstone", + "180:0": "red_sandstone_stairs[facing=east,half=bottom,shape=straight]", + "180:1": "red_sandstone_stairs[facing=west,half=bottom,shape=straight]", + "180:2": "red_sandstone_stairs[facing=south,half=bottom,shape=straight]", + "180:3": "red_sandstone_stairs[facing=north,half=bottom,shape=straight]", + "180:4": "red_sandstone_stairs[facing=east,half=top,shape=straight]", + "180:5": "red_sandstone_stairs[facing=west,half=top,shape=straight]", + "180:6": "red_sandstone_stairs[facing=south,half=top,shape=straight]", + "180:7": "red_sandstone_stairs[facing=north,half=top,shape=straight]", + "181:0": "red_sandstone_slab[type=double]", + "181:8": "smooth_red_sandstone", + "182:0": "red_sandstone_slab[type=bottom]", + "182:8": "red_sandstone_slab[type=top]", + "183:0": "spruce_fence_gate[facing=south,in_wall=false,open=false,powered=false]", + "183:1": "spruce_fence_gate[facing=west,in_wall=false,open=false,powered=false]", + "183:2": "spruce_fence_gate[facing=north,in_wall=false,open=false,powered=false]", + "183:3": "spruce_fence_gate[facing=east,in_wall=false,open=false,powered=false]", + "183:4": "spruce_fence_gate[facing=south,in_wall=false,open=true,powered=false]", + "183:5": "spruce_fence_gate[facing=west,in_wall=false,open=true,powered=false]", + "183:6": "spruce_fence_gate[facing=north,in_wall=false,open=true,powered=false]", + "183:7": "spruce_fence_gate[facing=east,in_wall=false,open=true,powered=false]", + "183:8": "spruce_fence_gate[facing=south,in_wall=false,open=false,powered=true]", + "183:9": "spruce_fence_gate[facing=west,in_wall=false,open=false,powered=true]", + "183:10": "spruce_fence_gate[facing=north,in_wall=false,open=false,powered=true]", + "183:11": "spruce_fence_gate[facing=east,in_wall=false,open=false,powered=true]", + "183:12": "spruce_fence_gate[facing=south,in_wall=false,open=true,powered=true]", + "183:13": "spruce_fence_gate[facing=west,in_wall=false,open=true,powered=true]", + "183:14": "spruce_fence_gate[facing=north,in_wall=false,open=true,powered=true]", + "183:15": "spruce_fence_gate[facing=east,in_wall=false,open=true,powered=true]", + "184:0": "birch_fence_gate[facing=south,in_wall=false,open=false,powered=false]", + "184:1": "birch_fence_gate[facing=west,in_wall=false,open=false,powered=false]", + "184:2": "birch_fence_gate[facing=north,in_wall=false,open=false,powered=false]", + "184:3": "birch_fence_gate[facing=east,in_wall=false,open=false,powered=false]", + "184:4": "birch_fence_gate[facing=south,in_wall=false,open=true,powered=false]", + "184:5": "birch_fence_gate[facing=west,in_wall=false,open=true,powered=false]", + "184:6": "birch_fence_gate[facing=north,in_wall=false,open=true,powered=false]", + "184:7": "birch_fence_gate[facing=east,in_wall=false,open=true,powered=false]", + "184:8": "birch_fence_gate[facing=south,in_wall=false,open=false,powered=true]", + "184:9": "birch_fence_gate[facing=west,in_wall=false,open=false,powered=true]", + "184:10": "birch_fence_gate[facing=north,in_wall=false,open=false,powered=true]", + "184:11": "birch_fence_gate[facing=east,in_wall=false,open=false,powered=true]", + "184:12": "birch_fence_gate[facing=south,in_wall=false,open=true,powered=true]", + "184:13": "birch_fence_gate[facing=west,in_wall=false,open=true,powered=true]", + "184:14": "birch_fence_gate[facing=north,in_wall=false,open=true,powered=true]", + "184:15": "birch_fence_gate[facing=east,in_wall=false,open=true,powered=true]", + "185:0": "jungle_fence_gate[facing=south,in_wall=false,open=false,powered=false]", + "185:1": "jungle_fence_gate[facing=west,in_wall=false,open=false,powered=false]", + "185:2": "jungle_fence_gate[facing=north,in_wall=false,open=false,powered=false]", + "185:3": "jungle_fence_gate[facing=east,in_wall=false,open=false,powered=false]", + "185:4": "jungle_fence_gate[facing=south,in_wall=false,open=true,powered=false]", + "185:5": "jungle_fence_gate[facing=west,in_wall=false,open=true,powered=false]", + "185:6": "jungle_fence_gate[facing=north,in_wall=false,open=true,powered=false]", + "185:7": "jungle_fence_gate[facing=east,in_wall=false,open=true,powered=false]", + "185:8": "jungle_fence_gate[facing=south,in_wall=false,open=false,powered=true]", + "185:9": "jungle_fence_gate[facing=west,in_wall=false,open=false,powered=true]", + "185:10": "jungle_fence_gate[facing=north,in_wall=false,open=false,powered=true]", + "185:11": "jungle_fence_gate[facing=east,in_wall=false,open=false,powered=true]", + "185:12": "jungle_fence_gate[facing=south,in_wall=false,open=true,powered=true]", + "185:13": "jungle_fence_gate[facing=west,in_wall=false,open=true,powered=true]", + "185:14": "jungle_fence_gate[facing=north,in_wall=false,open=true,powered=true]", + "185:15": "jungle_fence_gate[facing=east,in_wall=false,open=true,powered=true]", + "186:0": "dark_oak_fence_gate[facing=south,in_wall=false,open=false,powered=false]", + "186:1": "dark_oak_fence_gate[facing=west,in_wall=false,open=false,powered=false]", + "186:2": "dark_oak_fence_gate[facing=north,in_wall=false,open=false,powered=false]", + "186:3": "dark_oak_fence_gate[facing=east,in_wall=false,open=false,powered=false]", + "186:4": "dark_oak_fence_gate[facing=south,in_wall=false,open=true,powered=false]", + "186:5": "dark_oak_fence_gate[facing=west,in_wall=false,open=true,powered=false]", + "186:6": "dark_oak_fence_gate[facing=north,in_wall=false,open=true,powered=false]", + "186:7": "dark_oak_fence_gate[facing=east,in_wall=false,open=true,powered=false]", + "186:8": "dark_oak_fence_gate[facing=south,in_wall=false,open=false,powered=true]", + "186:9": "dark_oak_fence_gate[facing=west,in_wall=false,open=false,powered=true]", + "186:10": "dark_oak_fence_gate[facing=north,in_wall=false,open=false,powered=true]", + "186:11": "dark_oak_fence_gate[facing=east,in_wall=false,open=false,powered=true]", + "186:12": "dark_oak_fence_gate[facing=south,in_wall=false,open=true,powered=true]", + "186:13": "dark_oak_fence_gate[facing=west,in_wall=false,open=true,powered=true]", + "186:14": "dark_oak_fence_gate[facing=north,in_wall=false,open=true,powered=true]", + "186:15": "dark_oak_fence_gate[facing=east,in_wall=false,open=true,powered=true]", + "187:0": "acacia_fence_gate[facing=south,in_wall=false,open=false,powered=false]", + "187:1": "acacia_fence_gate[facing=west,in_wall=false,open=false,powered=false]", + "187:2": "acacia_fence_gate[facing=north,in_wall=false,open=false,powered=false]", + "187:3": "acacia_fence_gate[facing=east,in_wall=false,open=false,powered=false]", + "187:4": "acacia_fence_gate[facing=south,in_wall=false,open=true,powered=false]", + "187:5": "acacia_fence_gate[facing=west,in_wall=false,open=true,powered=false]", + "187:6": "acacia_fence_gate[facing=north,in_wall=false,open=true,powered=false]", + "187:7": "acacia_fence_gate[facing=east,in_wall=false,open=true,powered=false]", + "187:8": "acacia_fence_gate[facing=south,in_wall=false,open=false,powered=true]", + "187:9": "acacia_fence_gate[facing=west,in_wall=false,open=false,powered=true]", + "187:10": "acacia_fence_gate[facing=north,in_wall=false,open=false,powered=true]", + "187:11": "acacia_fence_gate[facing=east,in_wall=false,open=false,powered=true]", + "187:12": "acacia_fence_gate[facing=south,in_wall=false,open=true,powered=true]", + "187:13": "acacia_fence_gate[facing=west,in_wall=false,open=true,powered=true]", + "187:14": "acacia_fence_gate[facing=north,in_wall=false,open=true,powered=true]", + "187:15": "acacia_fence_gate[facing=east,in_wall=false,open=true,powered=true]", + "188:0": "spruce_fence[east=false,north=false,south=false,west=false]", + "189:0": "birch_fence[east=false,north=false,south=false,west=false]", + "190:0": "jungle_fence[east=false,north=false,south=false,west=false]", + "191:0": "dark_oak_fence[east=false,north=false,south=false,west=false]", + "192:0": "acacia_fence[east=false,north=false,south=false,west=false]", + "193:0": "spruce_door[facing=east,half=lower,hinge=right,open=false,powered=false]", + "193:1": "spruce_door[facing=south,half=lower,hinge=right,open=false,powered=false]", + "193:2": "spruce_door[facing=west,half=lower,hinge=right,open=false,powered=false]", + "193:3": "spruce_door[facing=north,half=lower,hinge=right,open=false,powered=false]", + "193:4": "spruce_door[facing=east,half=lower,hinge=right,open=true,powered=false]", + "193:5": "spruce_door[facing=south,half=lower,hinge=right,open=true,powered=false]", + "193:6": "spruce_door[facing=west,half=lower,hinge=right,open=true,powered=false]", + "193:7": "spruce_door[facing=north,half=lower,hinge=right,open=true,powered=false]", + "193:8": "spruce_door[facing=east,half=upper,hinge=left,open=false,powered=false]", + "193:9": "spruce_door[facing=east,half=upper,hinge=right,open=false,powered=false]", + "193:10": "spruce_door[facing=east,half=upper,hinge=left,open=false,powered=true]", + "193:11": "spruce_door[facing=east,half=upper,hinge=right,open=false,powered=true]", + "194:0": "birch_door[facing=east,half=lower,hinge=right,open=false,powered=false]", + "194:1": "birch_door[facing=south,half=lower,hinge=right,open=false,powered=false]", + "194:2": "birch_door[facing=west,half=lower,hinge=right,open=false,powered=false]", + "194:3": "birch_door[facing=north,half=lower,hinge=right,open=false,powered=false]", + "194:4": "birch_door[facing=east,half=lower,hinge=right,open=true,powered=false]", + "194:5": "birch_door[facing=south,half=lower,hinge=right,open=true,powered=false]", + "194:6": "birch_door[facing=west,half=lower,hinge=right,open=true,powered=false]", + "194:7": "birch_door[facing=north,half=lower,hinge=right,open=true,powered=false]", + "194:8": "birch_door[facing=east,half=upper,hinge=left,open=false,powered=false]", + "194:9": "birch_door[facing=east,half=upper,hinge=right,open=false,powered=false]", + "194:10": "birch_door[facing=east,half=upper,hinge=left,open=false,powered=true]", + "194:11": "birch_door[facing=east,half=upper,hinge=right,open=false,powered=true]", + "195:0": "jungle_door[facing=east,half=lower,hinge=right,open=false,powered=false]", + "195:1": "jungle_door[facing=south,half=lower,hinge=right,open=false,powered=false]", + "195:2": "jungle_door[facing=west,half=lower,hinge=right,open=false,powered=false]", + "195:3": "jungle_door[facing=north,half=lower,hinge=right,open=false,powered=false]", + "195:4": "jungle_door[facing=east,half=lower,hinge=right,open=true,powered=false]", + "195:5": "jungle_door[facing=south,half=lower,hinge=right,open=true,powered=false]", + "195:6": "jungle_door[facing=west,half=lower,hinge=right,open=true,powered=false]", + "195:7": "jungle_door[facing=north,half=lower,hinge=right,open=true,powered=false]", + "195:8": "jungle_door[facing=east,half=upper,hinge=left,open=false,powered=false]", + "195:9": "jungle_door[facing=east,half=upper,hinge=right,open=false,powered=false]", + "195:10": "jungle_door[facing=east,half=upper,hinge=left,open=false,powered=true]", + "195:11": "jungle_door[facing=east,half=upper,hinge=right,open=false,powered=true]", + "196:0": "acacia_door[facing=east,half=lower,hinge=right,open=false,powered=false]", + "196:1": "acacia_door[facing=south,half=lower,hinge=right,open=false,powered=false]", + "196:2": "acacia_door[facing=west,half=lower,hinge=right,open=false,powered=false]", + "196:3": "acacia_door[facing=north,half=lower,hinge=right,open=false,powered=false]", + "196:4": "acacia_door[facing=east,half=lower,hinge=right,open=true,powered=false]", + "196:5": "acacia_door[facing=south,half=lower,hinge=right,open=true,powered=false]", + "196:6": "acacia_door[facing=west,half=lower,hinge=right,open=true,powered=false]", + "196:7": "acacia_door[facing=north,half=lower,hinge=right,open=true,powered=false]", + "196:8": "acacia_door[facing=east,half=upper,hinge=left,open=false,powered=false]", + "196:9": "acacia_door[facing=east,half=upper,hinge=right,open=false,powered=false]", + "196:10": "acacia_door[facing=east,half=upper,hinge=left,open=false,powered=true]", + "196:11": "acacia_door[facing=east,half=upper,hinge=right,open=false,powered=true]", + "197:0": "dark_oak_door[facing=east,half=lower,hinge=right,open=false,powered=false]", + "197:1": "dark_oak_door[facing=south,half=lower,hinge=right,open=false,powered=false]", + "197:2": "dark_oak_door[facing=west,half=lower,hinge=right,open=false,powered=false]", + "197:3": "dark_oak_door[facing=north,half=lower,hinge=right,open=false,powered=false]", + "197:4": "dark_oak_door[facing=east,half=lower,hinge=right,open=true,powered=false]", + "197:5": "dark_oak_door[facing=south,half=lower,hinge=right,open=true,powered=false]", + "197:6": "dark_oak_door[facing=west,half=lower,hinge=right,open=true,powered=false]", + "197:7": "dark_oak_door[facing=north,half=lower,hinge=right,open=true,powered=false]", + "197:8": "dark_oak_door[facing=east,half=upper,hinge=left,open=false,powered=false]", + "197:9": "dark_oak_door[facing=east,half=upper,hinge=right,open=false,powered=false]", + "197:10": "dark_oak_door[facing=east,half=upper,hinge=left,open=false,powered=true]", + "197:11": "dark_oak_door[facing=east,half=upper,hinge=right,open=false,powered=true]", + "198:0": "end_rod[facing=down]", + "198:1": "end_rod[facing=up]", + "198:2": "end_rod[facing=north]", + "198:3": "end_rod[facing=south]", + "198:4": "end_rod[facing=west]", + "198:5": "end_rod[facing=east]", + "199:0": "chorus_plant[down=false,east=false,north=false,south=false,up=false,west=false]", + "200:0": "chorus_flower[age=0]", + "200:1": "chorus_flower[age=1]", + "200:2": "chorus_flower[age=2]", + "200:3": "chorus_flower[age=3]", + "200:4": "chorus_flower[age=4]", + "200:5": "chorus_flower[age=5]", + "201:0": "purpur_block", + "202:0": "purpur_pillar[axis=y]", + "202:4": "purpur_pillar[axis=x]", + "202:8": "purpur_pillar[axis=z]", + "203:0": "purpur_stairs[facing=east,half=bottom,shape=straight]", + "203:1": "purpur_stairs[facing=west,half=bottom,shape=straight]", + "203:2": "purpur_stairs[facing=south,half=bottom,shape=straight]", + "203:3": "purpur_stairs[facing=north,half=bottom,shape=straight]", + "203:4": "purpur_stairs[facing=east,half=top,shape=straight]", + "203:5": "purpur_stairs[facing=west,half=top,shape=straight]", + "203:6": "purpur_stairs[facing=south,half=top,shape=straight]", + "203:7": "purpur_stairs[facing=north,half=top,shape=straight]", + "204:0": "purpur_slab[type=double]", + "205:0": "purpur_slab[type=bottom]", + "205:8": "purpur_slab[type=top]", + "206:0": "end_stone_bricks", + "207:0": "beetroots[age=0]", + "207:1": "beetroots[age=1]", + "207:2": "beetroots[age=2]", + "207:3": "beetroots[age=3]", + "208:0": "grass_path", + "209:0": "end_gateway", + "210:0": "repeating_command_block[conditional=false,facing=down]", + "210:1": "repeating_command_block[conditional=false,facing=up]", + "210:2": "repeating_command_block[conditional=false,facing=north]", + "210:3": "repeating_command_block[conditional=false,facing=south]", + "210:4": "repeating_command_block[conditional=false,facing=west]", + "210:5": "repeating_command_block[conditional=false,facing=east]", + "210:8": "repeating_command_block[conditional=true,facing=down]", + "210:9": "repeating_command_block[conditional=true,facing=up]", + "210:10": "repeating_command_block[conditional=true,facing=north]", + "210:11": "repeating_command_block[conditional=true,facing=south]", + "210:12": "repeating_command_block[conditional=true,facing=west]", + "210:13": "repeating_command_block[conditional=true,facing=east]", + "211:0": "chain_command_block[conditional=false,facing=down]", + "211:1": "chain_command_block[conditional=false,facing=up]", + "211:2": "chain_command_block[conditional=false,facing=north]", + "211:3": "chain_command_block[conditional=false,facing=south]", + "211:4": "chain_command_block[conditional=false,facing=west]", + "211:5": "chain_command_block[conditional=false,facing=east]", + "211:8": "chain_command_block[conditional=true,facing=down]", + "211:9": "chain_command_block[conditional=true,facing=up]", + "211:10": "chain_command_block[conditional=true,facing=north]", + "211:11": "chain_command_block[conditional=true,facing=south]", + "211:12": "chain_command_block[conditional=true,facing=west]", + "211:13": "chain_command_block[conditional=true,facing=east]", + "212:0": "frosted_ice[age=0]", + "212:1": "frosted_ice[age=1]", + "212:2": "frosted_ice[age=2]", + "212:3": "frosted_ice[age=3]", + "213:0": "magma_block", + "214:0": "nether_wart_block", + "215:0": "red_nether_bricks", + "216:0": "bone_block[axis=y]", + "216:4": "bone_block[axis=x]", + "216:8": "bone_block[axis=z]", + "217:0": "structure_void", + "218:0": "observer[facing=down,powered=false]", + "218:1": "observer[facing=up,powered=false]", + "218:2": "observer[facing=north,powered=false]", + "218:3": "observer[facing=south,powered=false]", + "218:4": "observer[facing=west,powered=false]", + "218:5": "observer[facing=east,powered=false]", + "218:8": "observer[facing=down,powered=true]", + "218:9": "observer[facing=up,powered=true]", + "218:10": "observer[facing=north,powered=true]", + "218:11": "observer[facing=south,powered=true]", + "218:12": "observer[facing=west,powered=true]", + "218:13": "observer[facing=east,powered=true]", + "219:0": "white_shulker_box[facing=down]", + "219:1": "white_shulker_box[facing=up]", + "219:2": "white_shulker_box[facing=north]", + "219:3": "white_shulker_box[facing=south]", + "219:4": "white_shulker_box[facing=west]", + "219:5": "white_shulker_box[facing=east]", + "220:0": "orange_shulker_box[facing=down]", + "220:1": "orange_shulker_box[facing=up]", + "220:2": "orange_shulker_box[facing=north]", + "220:3": "orange_shulker_box[facing=south]", + "220:4": "orange_shulker_box[facing=west]", + "220:5": "orange_shulker_box[facing=east]", + "221:0": "magenta_shulker_box[facing=down]", + "221:1": "magenta_shulker_box[facing=up]", + "221:2": "magenta_shulker_box[facing=north]", + "221:3": "magenta_shulker_box[facing=south]", + "221:4": "magenta_shulker_box[facing=west]", + "221:5": "magenta_shulker_box[facing=east]", + "222:0": "light_blue_shulker_box[facing=down]", + "222:1": "light_blue_shulker_box[facing=up]", + "222:2": "light_blue_shulker_box[facing=north]", + "222:3": "light_blue_shulker_box[facing=south]", + "222:4": "light_blue_shulker_box[facing=west]", + "222:5": "light_blue_shulker_box[facing=east]", + "223:0": "yellow_shulker_box[facing=down]", + "223:1": "yellow_shulker_box[facing=up]", + "223:2": "yellow_shulker_box[facing=north]", + "223:3": "yellow_shulker_box[facing=south]", + "223:4": "yellow_shulker_box[facing=west]", + "223:5": "yellow_shulker_box[facing=east]", + "224:0": "lime_shulker_box[facing=down]", + "224:1": "lime_shulker_box[facing=up]", + "224:2": "lime_shulker_box[facing=north]", + "224:3": "lime_shulker_box[facing=south]", + "224:4": "lime_shulker_box[facing=west]", + "224:5": "lime_shulker_box[facing=east]", + "225:0": "pink_shulker_box[facing=down]", + "225:1": "pink_shulker_box[facing=up]", + "225:2": "pink_shulker_box[facing=north]", + "225:3": "pink_shulker_box[facing=south]", + "225:4": "pink_shulker_box[facing=west]", + "225:5": "pink_shulker_box[facing=east]", + "226:0": "gray_shulker_box[facing=down]", + "226:1": "gray_shulker_box[facing=up]", + "226:2": "gray_shulker_box[facing=north]", + "226:3": "gray_shulker_box[facing=south]", + "226:4": "gray_shulker_box[facing=west]", + "226:5": "gray_shulker_box[facing=east]", + "227:0": "light_gray_shulker_box[facing=down]", + "227:1": "light_gray_shulker_box[facing=up]", + "227:2": "light_gray_shulker_box[facing=north]", + "227:3": "light_gray_shulker_box[facing=south]", + "227:4": "light_gray_shulker_box[facing=west]", + "227:5": "light_gray_shulker_box[facing=east]", + "228:0": "cyan_shulker_box[facing=down]", + "228:1": "cyan_shulker_box[facing=up]", + "228:2": "cyan_shulker_box[facing=north]", + "228:3": "cyan_shulker_box[facing=south]", + "228:4": "cyan_shulker_box[facing=west]", + "228:5": "cyan_shulker_box[facing=east]", + "229:0": "purple_shulker_box[facing=down]", + "229:1": "purple_shulker_box[facing=up]", + "229:2": "purple_shulker_box[facing=north]", + "229:3": "purple_shulker_box[facing=south]", + "229:4": "purple_shulker_box[facing=west]", + "229:5": "purple_shulker_box[facing=east]", + "230:0": "blue_shulker_box[facing=down]", + "230:1": "blue_shulker_box[facing=up]", + "230:2": "blue_shulker_box[facing=north]", + "230:3": "blue_shulker_box[facing=south]", + "230:4": "blue_shulker_box[facing=west]", + "230:5": "blue_shulker_box[facing=east]", + "231:0": "brown_shulker_box[facing=down]", + "231:1": "brown_shulker_box[facing=up]", + "231:2": "brown_shulker_box[facing=north]", + "231:3": "brown_shulker_box[facing=south]", + "231:4": "brown_shulker_box[facing=west]", + "231:5": "brown_shulker_box[facing=east]", + "232:0": "green_shulker_box[facing=down]", + "232:1": "green_shulker_box[facing=up]", + "232:2": "green_shulker_box[facing=north]", + "232:3": "green_shulker_box[facing=south]", + "232:4": "green_shulker_box[facing=west]", + "232:5": "green_shulker_box[facing=east]", + "233:0": "red_shulker_box[facing=down]", + "233:1": "red_shulker_box[facing=up]", + "233:2": "red_shulker_box[facing=north]", + "233:3": "red_shulker_box[facing=south]", + "233:4": "red_shulker_box[facing=west]", + "233:5": "red_shulker_box[facing=east]", + "234:0": "black_shulker_box[facing=down]", + "234:1": "black_shulker_box[facing=up]", + "234:2": "black_shulker_box[facing=north]", + "234:3": "black_shulker_box[facing=south]", + "234:4": "black_shulker_box[facing=west]", + "234:5": "black_shulker_box[facing=east]", + "235:0": "white_glazed_terracotta[facing=south]", + "235:1": "white_glazed_terracotta[facing=west]", + "235:2": "white_glazed_terracotta[facing=north]", + "235:3": "white_glazed_terracotta[facing=east]", + "236:0": "orange_glazed_terracotta[facing=south]", + "236:1": "orange_glazed_terracotta[facing=west]", + "236:2": "orange_glazed_terracotta[facing=north]", + "236:3": "orange_glazed_terracotta[facing=east]", + "237:0": "magenta_glazed_terracotta[facing=south]", + "237:1": "magenta_glazed_terracotta[facing=west]", + "237:2": "magenta_glazed_terracotta[facing=north]", + "237:3": "magenta_glazed_terracotta[facing=east]", + "238:0": "light_blue_glazed_terracotta[facing=south]", + "238:1": "light_blue_glazed_terracotta[facing=west]", + "238:2": "light_blue_glazed_terracotta[facing=north]", + "238:3": "light_blue_glazed_terracotta[facing=east]", + "239:0": "yellow_glazed_terracotta[facing=south]", + "239:1": "yellow_glazed_terracotta[facing=west]", + "239:2": "yellow_glazed_terracotta[facing=north]", + "239:3": "yellow_glazed_terracotta[facing=east]", + "240:0": "lime_glazed_terracotta[facing=south]", + "240:1": "lime_glazed_terracotta[facing=west]", + "240:2": "lime_glazed_terracotta[facing=north]", + "240:3": "lime_glazed_terracotta[facing=east]", + "241:0": "pink_glazed_terracotta[facing=south]", + "241:1": "pink_glazed_terracotta[facing=west]", + "241:2": "pink_glazed_terracotta[facing=north]", + "241:3": "pink_glazed_terracotta[facing=east]", + "242:0": "gray_glazed_terracotta[facing=south]", + "242:1": "gray_glazed_terracotta[facing=west]", + "242:2": "gray_glazed_terracotta[facing=north]", + "242:3": "gray_glazed_terracotta[facing=east]", + "243:0": "light_gray_glazed_terracotta[facing=south]", + "243:1": "light_gray_glazed_terracotta[facing=west]", + "243:2": "light_gray_glazed_terracotta[facing=north]", + "243:3": "light_gray_glazed_terracotta[facing=east]", + "244:0": "cyan_glazed_terracotta[facing=south]", + "244:1": "cyan_glazed_terracotta[facing=west]", + "244:2": "cyan_glazed_terracotta[facing=north]", + "244:3": "cyan_glazed_terracotta[facing=east]", + "245:0": "purple_glazed_terracotta[facing=south]", + "245:1": "purple_glazed_terracotta[facing=west]", + "245:2": "purple_glazed_terracotta[facing=north]", + "245:3": "purple_glazed_terracotta[facing=east]", + "246:0": "blue_glazed_terracotta[facing=south]", + "246:1": "blue_glazed_terracotta[facing=west]", + "246:2": "blue_glazed_terracotta[facing=north]", + "246:3": "blue_glazed_terracotta[facing=east]", + "247:0": "brown_glazed_terracotta[facing=south]", + "247:1": "brown_glazed_terracotta[facing=west]", + "247:2": "brown_glazed_terracotta[facing=north]", + "247:3": "brown_glazed_terracotta[facing=east]", + "248:0": "green_glazed_terracotta[facing=south]", + "248:1": "green_glazed_terracotta[facing=west]", + "248:2": "green_glazed_terracotta[facing=north]", + "248:3": "green_glazed_terracotta[facing=east]", + "249:0": "red_glazed_terracotta[facing=south]", + "249:1": "red_glazed_terracotta[facing=west]", + "249:2": "red_glazed_terracotta[facing=north]", + "249:3": "red_glazed_terracotta[facing=east]", + "250:0": "black_glazed_terracotta[facing=south]", + "250:1": "black_glazed_terracotta[facing=west]", + "250:2": "black_glazed_terracotta[facing=north]", + "250:3": "black_glazed_terracotta[facing=east]", + "251:0": "white_concrete", + "251:1": "orange_concrete", + "251:2": "magenta_concrete", + "251:3": "light_blue_concrete", + "251:4": "yellow_concrete", + "251:5": "lime_concrete", + "251:6": "pink_concrete", + "251:7": "gray_concrete", + "251:8": "light_gray_concrete", + "251:9": "cyan_concrete", + "251:10": "purple_concrete", + "251:11": "blue_concrete", + "251:12": "brown_concrete", + "251:13": "green_concrete", + "251:14": "red_concrete", + "251:15": "black_concrete", + "252:0": "white_concrete_powder", + "252:1": "orange_concrete_powder", + "252:2": "magenta_concrete_powder", + "252:3": "light_blue_concrete_powder", + "252:4": "yellow_concrete_powder", + "252:5": "lime_concrete_powder", + "252:6": "pink_concrete_powder", + "252:7": "gray_concrete_powder", + "252:8": "light_gray_concrete_powder", + "252:9": "cyan_concrete_powder", + "252:10": "purple_concrete_powder", + "252:11": "blue_concrete_powder", + "252:12": "brown_concrete_powder", + "252:13": "green_concrete_powder", + "252:14": "red_concrete_powder", + "252:15": "black_concrete_powder", + "255:0": "structure_block[mode=save]", + "255:1": "structure_block[mode=load]", + "255:2": "structure_block[mode=corner]", + "255:3": "structure_block[mode=data]" + }, + "clientCalculatedBlocks": { + "block_snowy": [ + "grass_block", + "dirt", + "coarse_dirt", + "podzol", + "mycelium" + ], + "directional": [ + "fire", + "redstone_wire", + "oak_fence", + "iron_bars", + "glass_pane", + "vine", + "nether_brick_fence", + "tripwire", + "cobblestone_wall", + "mossy_cobblestone_wall", + "white_stained_glass_pane", + "orange_stained_glass_pane", + "magenta_stained_glass_pane", + "light_blue_stained_glass_pane", + "yellow_stained_glass_pane", + "lime_stained_glass_pane", + "pink_stained_glass_pane", + "gray_stained_glass_pane", + "light_gray_stained_glass_pane", + "cyan_stained_glass_pane", + "purple_stained_glass_pane", + "blue_stained_glass_pane", + "brown_stained_glass_pane", + "green_stained_glass_pane", + "red_stained_glass_pane", + "black_stained_glass_pane", + "spruce_fence", + "birch_fence", + "jungle_fence", + "dark_oak_fence", + "acacia_fence", + "chorus_plant" + ], + "door": [ + "oak_door", + "iron_door", + "spruce_door", + "birch_door", + "jungle_door", + "acacia_door", + "dark_oak_door" + ], + "repeater_locked": [ + "repeater" + ], + "gate_in_wall": [ + "oak_fence_gate", + "spruce_fence_gate", + "birch_fence_gate", + "jungle_fence_gate", + "dark_oak_fence_gate", + "acacia_fence_gate" + ] + } +} From 93e9cf877b5de2cc9409fa9920db14d6d0abd525 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Mon, 20 May 2024 06:01:14 +0300 Subject: [PATCH 0072/1074] fix project build on windows --- scripts/esbuildPlugins.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/esbuildPlugins.mjs b/scripts/esbuildPlugins.mjs index 49547ea1..f6b539c1 100644 --- a/scripts/esbuildPlugins.mjs +++ b/scripts/esbuildPlugins.mjs @@ -7,8 +7,9 @@ import { filesize } from 'filesize' import MCProtocol from 'minecraft-protocol' import MCData from 'minecraft-data' import { throttle } from 'lodash-es' +import { fileURLToPath } from 'url' -const __dirname = dirname(new URL(import.meta.url).pathname) +const __dirname = dirname(fileURLToPath(new URL(import.meta.url))) const { supportedVersions } = MCProtocol const prod = process.argv.includes('--prod') From b6cb302457ab232200e34e1a165dc7aff0f1a832 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 20 May 2024 06:11:09 +0300 Subject: [PATCH 0073/1074] fix build! --- src/flyingSquidUtils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/flyingSquidUtils.ts b/src/flyingSquidUtils.ts index bd312bfb..1f070022 100644 --- a/src/flyingSquidUtils.ts +++ b/src/flyingSquidUtils.ts @@ -33,7 +33,6 @@ export const saveServer = async (autoSave = true) => { export const disconnect = async () => { if (localServer) { await saveServer() - //@ts-expect-error todo expose! void localServer.quit() // todo investigate we should await } window.history.replaceState({}, '', `${window.location.pathname}`) // remove qs From 0dfa7c3c9a283bc96a248333bcc40f098e5df18b Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 20 May 2024 06:17:47 +0300 Subject: [PATCH 0074/1074] fix: fix default gamepad bindings of nextHotbarSlot, prevHotbarSlot --- src/controls.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controls.ts b/src/controls.ts index 7d1e4cdf..b23d3beb 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -39,8 +39,8 @@ export const contro = new ControMax({ sneak: ['ShiftLeft'], toggleSneakOrDown: [null, 'Right Stick'], sprint: ['ControlLeft', 'Left Stick'], - nextHotbarSlot: [null, 'Left Bumper'], - prevHotbarSlot: [null, 'Right Bumper'], + nextHotbarSlot: [null, 'Right Bumper'], + prevHotbarSlot: [null, 'Left Bumper'], attackDestroy: [null, 'Right Trigger'], interactPlace: [null, 'Left Trigger'], chat: [['KeyT', 'Enter']], From 2a2667918b3cbfb0d4a028934d7d18641973bab3 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 21 May 2024 05:25:14 +0300 Subject: [PATCH 0075/1074] feat: limit rendering in background to 20fps so it uses less resources (+setting to control that) --- prismarine-viewer/viewer/lib/viewerWrapper.ts | 12 ++++++----- src/index.ts | 1 + src/optionsGuiScheme.tsx | 10 ++++++++++ src/optionsStorage.ts | 1 + src/react/OptionsItems.tsx | 20 ++++++++++++++++--- 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/prismarine-viewer/viewer/lib/viewerWrapper.ts b/prismarine-viewer/viewer/lib/viewerWrapper.ts index c6419dff..b8017f38 100644 --- a/prismarine-viewer/viewer/lib/viewerWrapper.ts +++ b/prismarine-viewer/viewer/lib/viewerWrapper.ts @@ -5,9 +5,10 @@ export class ViewerWrapper { previousWindowWidth: number previousWindowHeight: number globalObject = globalThis as any - stopRenderOnBlur = true + stopRenderOnBlur = false addedToPage = false renderInterval = 0 + renderIntervalUnfocused: number | undefined fpsInterval constructor(public canvas: HTMLCanvasElement, public renderer?: THREE.WebGLRenderer) { @@ -44,7 +45,7 @@ export class ViewerWrapper { this.globalObject.requestAnimationFrame(this.render.bind(this)) } if (typeof window !== 'undefined') { - // this.trackWindowFocus() + this.trackWindowFocus() } } @@ -77,11 +78,12 @@ export class ViewerWrapper { for (const fn of beforeRenderFrame) fn() this.globalObject.requestAnimationFrame(this.render.bind(this)) if (this.globalObject.stopRender || this.renderer?.xr.isPresenting || (this.stopRenderOnBlur && !this.windowFocused)) return - if (this.renderInterval) { + const renderInterval = (this.windowFocused ? this.renderInterval : this.renderIntervalUnfocused) ?? this.renderInterval + if (renderInterval) { this.delta += time - this.lastTime this.lastTime = time - if (this.delta > this.renderInterval) { - this.delta %= this.renderInterval + if (this.delta > renderInterval) { + this.delta %= renderInterval // continue rendering } else { return diff --git a/src/index.ts b/src/index.ts index 8dbc46cf..1797c894 100644 --- a/src/index.ts +++ b/src/index.ts @@ -120,6 +120,7 @@ const renderWrapper = new ViewerWrapper(renderer.domElement, renderer) renderWrapper.addToPage() watchValue(options, (o) => { renderWrapper.renderInterval = o.frameLimit ? 1000 / o.frameLimit : 0 + renderWrapper.renderIntervalUnfocused = o.backgroundRendering === '5fps' ? 1000 / 5 : o.backgroundRendering === '20fps' ? 1000 / 20 : undefined }) const isFirefox = ua.getBrowser().name === 'Firefox' diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index b847fe11..46f258a8 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -43,6 +43,16 @@ export const guiOptionsScheme: { return +
+} diff --git a/src/reactUi.tsx b/src/reactUi.tsx index e384fbfd..d86cf202 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -38,6 +38,7 @@ import ServersListProvider from './react/ServersListProvider' import GamepadUiCursor from './react/GamepadUiCursor' import KeybindingsScreenProvider from './react/KeybindingsScreenProvider' import HeldMapUi from './react/HeldMapUi' +import BedTime from './react/BedTime' const RobustPortal = ({ children, to }) => { return createPortal({children}, to) @@ -116,6 +117,7 @@ const InGameUi = () => { + diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index 2e20de29..85884b2f 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -14,7 +14,7 @@ import destroyStage9 from 'minecraft-assets/minecraft-assets/data/1.10/blocks/de import { Vec3 } from 'vec3' import { LineMaterial, Wireframe, LineSegmentsGeometry } from 'three-stdlib' -import { isGameActive } from './globalState' +import { hideCurrentModal, isGameActive, showModal } from './globalState' import { assertDefined } from './utils' import { options } from './optionsStorage' @@ -201,7 +201,29 @@ class WorldInteraction { 'shears', 'carrot_on_a_stick', 'warped_fungus_on_a_stick', 'spawn_egg', 'trident', 'crossbow', 'elytra', 'shield', 'turtle_helmet', ].includes(bot.heldItem.name) - if (cursorBlock && !activate) { + let stop = false + if (!bot.controlState.sneak) { + if (cursorBlock?.name === 'bed' || cursorBlock?.name.endsWith('_bed')) { + stop = true + showModal({ reactType: 'bed' }) + let cancelSleep = true + void bot.sleep(cursorBlock).catch((e) => { + if (cancelSleep) { + hideCurrentModal() + } + // if (e.message === 'bot is not sleeping') return + bot._client.emit('chat', { + message: JSON.stringify({ + text: e.message, + }) + }) + }) + setTimeout(() => { + cancelSleep = false + }) + } + } + if (cursorBlock && !activate && !stop) { const vecArray = [new Vec3(0, -1, 0), new Vec3(0, 1, 0), new Vec3(0, 0, -1), new Vec3(0, 0, 1), new Vec3(-1, 0, 0), new Vec3(1, 0, 0)] //@ts-expect-error const delta = cursorBlock.intersect.minus(cursorBlock.position) @@ -219,7 +241,7 @@ class WorldInteraction { bot.lookAt = oldLookAt }).catch(console.warn) } - } else { + } else if (!stop) { bot.activateItem() // todo offhand } this.lastBlockPlaced = 0 From bb85512cc10636e73ddb26b9e9bcfb40bde1fce1 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 22 May 2024 04:26:33 +0300 Subject: [PATCH 0080/1074] update known block are not rendered test --- .../viewer/lib/mesher/test/tests.test.ts | 237 +++++++++++------- .../viewer/prepare/moreGeneratedBlocks.ts | 1 + 2 files changed, 153 insertions(+), 85 deletions(-) diff --git a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts index 22e3a7b2..75dd98fa 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts @@ -1,96 +1,163 @@ import { test, expect } from 'vitest' import { setup } from './mesherTester' +import minecraftData from 'minecraft-data' +import minecraftAssets from 'minecraft-assets' -const version = '1.18.1' +const version = minecraftAssets.versions.at(-1) const addPositions = [ - // [[0, 0, 0], 'diamond_block'], - [[1, 0, 0], 'stone'], - [[-1, 0, 0], 'stone'], - [[0, 1, 0], 'stone'], - [[0, -1, 0], 'stone'], - [[0, 0, 1], 'stone'], - [[0, 0, -1], 'stone'], + // [[0, 0, 0], 'diamond_block'], + // [[1, 0, 0], 'stone'], + // [[-1, 0, 0], 'stone'], + // [[0, 1, 0], 'stone'], + // [[0, -1, 0], 'stone'], + // [[0, 0, 1], 'stone'], + // [[0, 0, -1], 'stone'], ] as const test('Known blocks are not rendered', () => { - const { mesherWorld, getGeometry, pos, mcData } = setup(version, addPositions as any) + const { mesherWorld, getGeometry, pos, mcData } = setup(version, addPositions as any) + const ignoreAsExpected = ['air', 'cave_air', 'void_air', 'barrier', 'water', 'lava', 'moving_piston', 'light'] - let time = 0 - let times = 0 - const invalidBlocks = {}/* as {[number, number]} */ - for (const block of mcData.blocksArray) { - if (block.maxStateId! - block.minStateId! > 100) continue - for (let i = block.minStateId!; i <= block.maxStateId!; i++) { - if (block.transparent) continue - mesherWorld.setBlockStateId(pos, i) - const start = performance.now() - const { centerFaces, totalTiles, centerTileNeighbors } = getGeometry() - time += performance.now() - start - times++ - if (centerFaces === 0 && centerTileNeighbors !== 0) { - if (invalidBlocks[block.name]) continue - invalidBlocks[block.name] = [i - block.minStateId!, centerTileNeighbors] - // console.log('INVALID', block.name, centerTileNeighbors, i - block.minStateId) - } - } - } - console.log('Average time', time / times) - // Fully expected - expect(invalidBlocks).toMatchInlineSnapshot(` - { - "creeper_head": [ - 0, - 6, - ], - "creeper_wall_head": [ - 0, - 6, - ], - "dragon_head": [ - 0, - 6, - ], - "dragon_wall_head": [ - 0, - 6, - ], - "player_head": [ - 0, - 6, - ], - "player_wall_head": [ - 0, - 6, - ], - "powder_snow": [ - 0, - 6, - ], - "skeleton_skull": [ - 0, - 6, - ], - "skeleton_wall_skull": [ - 0, - 6, - ], - "wither_skeleton_skull": [ - 0, - 6, - ], - "wither_skeleton_wall_skull": [ - 0, - 6, - ], - "zombie_head": [ - 0, - 6, - ], - "zombie_wall_head": [ - 0, - 6, - ], + let time = 0 + let times = 0 + const invalidBlocks = {}/* as {[number, number]} */ + for (const block of mcData.blocksArray) { + if (ignoreAsExpected.includes(block.name)) continue + // if (block.maxStateId! - block.minStateId! > 100) continue + // for (let i = block.minStateId!; i <= block.maxStateId!; i++) { + for (let i = block.defaultState!; i <= block.defaultState!; i++) { + // if (block.transparent) continue + mesherWorld.setBlockStateId(pos, i) + const start = performance.now() + const { centerFaces, totalTiles, centerTileNeighbors } = getGeometry() + time += performance.now() - start + times++ + if (centerFaces === 0) { + if (invalidBlocks[block.name]) continue + invalidBlocks[block.name] = true + // invalidBlocks[block.name] = [i - block.defaultState!, centerTileNeighbors] + // console.log('INVALID', block.name, centerTileNeighbors, i - block.minStateId) } - `) + } + } + console.log('Average time', time / times) + // should be fixed, but to avoid regressions & for visibility + expect(invalidBlocks).toMatchInlineSnapshot(` + { + "acacia_hanging_sign": true, + "acacia_wall_hanging_sign": true, + "bamboo_hanging_sign": true, + "bamboo_wall_hanging_sign": true, + "birch_hanging_sign": true, + "birch_wall_hanging_sign": true, + "black_banner": true, + "black_bed": true, + "black_candle": true, + "black_wall_banner": true, + "blue_banner": true, + "blue_bed": true, + "blue_candle": true, + "blue_wall_banner": true, + "brown_banner": true, + "brown_bed": true, + "brown_candle": true, + "brown_wall_banner": true, + "bubble_column": true, + "candle": true, + "cherry_hanging_sign": true, + "cherry_wall_hanging_sign": true, + "creeper_head": true, + "creeper_wall_head": true, + "crimson_hanging_sign": true, + "crimson_wall_hanging_sign": true, + "cyan_banner": true, + "cyan_bed": true, + "cyan_candle": true, + "cyan_wall_banner": true, + "dark_oak_hanging_sign": true, + "dark_oak_wall_hanging_sign": true, + "decorated_pot": true, + "dragon_head": true, + "dragon_wall_head": true, + "end_gateway": true, + "end_portal": true, + "gray_banner": true, + "gray_bed": true, + "gray_candle": true, + "gray_wall_banner": true, + "green_banner": true, + "green_bed": true, + "green_candle": true, + "green_wall_banner": true, + "jungle_hanging_sign": true, + "jungle_wall_hanging_sign": true, + "light_blue_banner": true, + "light_blue_bed": true, + "light_blue_candle": true, + "light_blue_wall_banner": true, + "light_gray_banner": true, + "light_gray_bed": true, + "light_gray_candle": true, + "light_gray_wall_banner": true, + "lime_banner": true, + "lime_bed": true, + "lime_candle": true, + "lime_wall_banner": true, + "magenta_banner": true, + "magenta_bed": true, + "magenta_candle": true, + "magenta_wall_banner": true, + "mangrove_hanging_sign": true, + "mangrove_wall_hanging_sign": true, + "oak_hanging_sign": true, + "oak_wall_hanging_sign": true, + "orange_banner": true, + "orange_bed": true, + "orange_candle": true, + "orange_wall_banner": true, + "piglin_head": true, + "piglin_wall_head": true, + "pink_banner": true, + "pink_bed": true, + "pink_candle": true, + "pink_petals": true, + "pink_wall_banner": true, + "player_head": true, + "player_wall_head": true, + "powder_snow_cauldron": true, + "purple_banner": true, + "purple_bed": true, + "purple_candle": true, + "purple_wall_banner": true, + "red_banner": true, + "red_bed": true, + "red_candle": true, + "red_wall_banner": true, + "repeater": true, + "sea_pickle": true, + "skeleton_skull": true, + "skeleton_wall_skull": true, + "snow": true, + "spruce_hanging_sign": true, + "spruce_wall_hanging_sign": true, + "structure_void": true, + "turtle_egg": true, + "warped_hanging_sign": true, + "warped_wall_hanging_sign": true, + "water_cauldron": true, + "white_banner": true, + "white_bed": true, + "white_candle": true, + "white_wall_banner": true, + "wither_skeleton_skull": true, + "wither_skeleton_wall_skull": true, + "yellow_banner": true, + "yellow_bed": true, + "yellow_candle": true, + "yellow_wall_banner": true, + "zombie_head": true, + "zombie_wall_head": true, + } + `) }) diff --git a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts index e0d2ef41..24b85cc3 100644 --- a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts +++ b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts @@ -419,6 +419,7 @@ const handlers = [ [/(.+)_wall_sign$/, handleSign], [/(.+)_sign$/, handleSign], [/^(?:(ender|trapped)_)?chest$/, handleChest], + // [/(^|(.+)_)bed$/, handleBed], // no-op just suppress warning [/(^light|^moving_piston$)/, true], ] as const From 893f6182413e8ea5fef964a5a59897fb4be1e455 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Thu, 23 May 2024 00:54:41 +0300 Subject: [PATCH 0081/1074] hotfix starfield crash (#127) --- prismarine-viewer/viewer/lib/worldrendererThree.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index acf0e7bf..24b6a28a 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -323,7 +323,7 @@ class StarField { const clock = new THREE.Clock(); this.points.onBeforeRender = (renderer, scene, camera) => { - this.points!.position.copy(camera.position) + this.points?.position.copy?.(camera.position) material.uniforms.time.value = clock.getElapsedTime() * speed } } From c1d7d7c33f68c46f1a51cd33ba975251bc6bf77f Mon Sep 17 00:00:00 2001 From: gguio <109200692+gguio@users.noreply.github.com> Date: Thu, 23 May 2024 09:46:59 +0400 Subject: [PATCH 0082/1074] feat: Support for binds with modifiers (#130) Co-authored-by: gguio --- package.json | 2 +- pnpm-lock.yaml | 64 ++++++++++++++++++++++++++++----- src/controls.ts | 24 ++++++------- src/react/KeybindingsScreen.tsx | 32 +++++++++++++---- 4 files changed, 94 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 6e73b981..9451b266 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "constants-browserify": "^1.0.0", - "contro-max": "^0.1.7", + "contro-max": "^0.1.8", "crypto-browserify": "^3.12.0", "cypress": "^10.11.0", "cypress-esbuild-preprocessor": "^1.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d784e17..8d34f233 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -268,8 +268,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 contro-max: - specifier: ^0.1.7 - version: 0.1.7(typescript@5.5.0-beta) + specifier: ^0.1.8 + version: 0.1.8(typescript@5.5.0-beta) crypto-browserify: specifier: ^3.12.0 version: 3.12.0 @@ -3808,8 +3808,8 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - contro-max@0.1.7: - resolution: {integrity: sha512-HIYF1Dl50tUyTKaDsX+mPMDv2OjleNMVedYuBTX0n1wKNm9WxjWu2w74ATjz/8fHVL9GgmziIxAlFStd2je6kg==} + contro-max@0.1.8: + resolution: {integrity: sha512-5SoeudO8Zzfj/gbFTDrMRFJny02+MY1lBtb2NyCNiBLtHAfvhWZxZs/Z3yJvKL2rY/qKUZs9gTQOIDygBcBrdw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} convert-source-map@1.9.0: @@ -6043,6 +6043,11 @@ packages: resolution: {integrity: sha512-IHL8faXLLIWv1O+2v2NgyKlooilu/OiSL9orI8Kqed/rZvVOrFPzs2PwMAYjpQX9gxLPhiSU19KqZ8CjfNuqhg==} engines: {node: '>=14'} + minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc: + resolution: {tarball: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc} + version: 1.47.0 + engines: {node: '>=14'} + minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/ccab9fb39681f3ebe0d264e2a3f833aa3c5a1ac7: resolution: {tarball: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/ccab9fb39681f3ebe0d264e2a3f833aa3c5a1ac7} version: 1.47.0 @@ -6717,6 +6722,11 @@ packages: prismarine-chat@1.9.1: resolution: {integrity: sha512-x7WWa5MNhiLZSO6tw+YyKpzquFZ+DNISVgiV6K3SU0GsishMXe+nto02WhF/4AuFerKdugm9u1d/r4C4zSkJOg==} + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16} + version: 1.35.0 + engines: {node: '>=14'} + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f: resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f} version: 1.35.0 @@ -11936,11 +11946,11 @@ snapshots: flatmap: 0.0.3 long: 5.2.3 minecraft-data: 3.65.0 - minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/ccab9fb39681f3ebe0d264e2a3f833aa3c5a1ac7(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) + minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) mkdirp: 2.1.6 node-gzip: 1.1.2 node-rsa: 1.1.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -12839,7 +12849,7 @@ snapshots: content-type@1.0.5: {} - contro-max@0.1.7(typescript@5.5.0-beta): + contro-max@0.1.8(typescript@5.5.0-beta): dependencies: events: 3.3.0 lodash-es: 4.17.21 @@ -13206,7 +13216,7 @@ snapshots: diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687: dependencies: minecraft-data: 3.65.0 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0) random-seed: 0.3.0 vec3: 0.1.8 @@ -15700,6 +15710,31 @@ snapshots: - encoding - supports-color + minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13): + dependencies: + '@types/readable-stream': 4.0.12 + aes-js: 3.1.2 + buffer-equal: 1.0.1 + debug: 4.3.4(supports-color@8.1.1) + endian-toggle: 0.0.0 + lodash.get: 4.4.2 + lodash.merge: 4.6.2 + minecraft-data: 3.65.0 + minecraft-folder-path: 1.2.0 + node-fetch: 2.7.0(encoding@0.1.13) + node-rsa: 0.4.2 + prismarine-auth: 2.4.2(encoding@0.1.13) + prismarine-chat: 1.10.1 + prismarine-nbt: 2.5.0 + prismarine-realms: 1.3.2(encoding@0.1.13) + protodef: 1.15.0 + readable-stream: 4.5.2 + uuid-1345: 1.0.2 + yggdrasil: 1.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/ccab9fb39681f3ebe0d264e2a3f833aa3c5a1ac7(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13): dependencies: '@types/readable-stream': 4.0.12 @@ -16520,6 +16555,19 @@ snapshots: prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0): + dependencies: + prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-nbt: 2.5.0 + prismarine-registry: 1.7.0 + smart-buffer: 4.2.0 + uint4: 0.1.2 + vec3: 0.1.8 + xxhash-wasm: 0.4.2 + transitivePeerDependencies: + - minecraft-data + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0): dependencies: prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) diff --git a/src/controls.ts b/src/controls.ts index 847741cf..f940d59d 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -6,7 +6,7 @@ import { proxy, subscribe } from 'valtio' import { ControMax } from 'contro-max/build/controMax' import { CommandEventArgument, SchemaCommandInput } from 'contro-max/build/types' import { stringStartsWith } from 'contro-max/build/stringUtils' -import { UserOverridesConfig } from 'contro-max/build/types/store' +import { UserOverrideCommand, UserOverridesConfig } from 'contro-max/build/types/store' import { isGameActive, showModal, gameAdditionalState, activeModalStack, hideCurrentModal, miscUiState } from './globalState' import { goFullscreen, pointerLock, reloadChunks } from './utils' import { options } from './optionsStorage' @@ -19,6 +19,7 @@ import { showOptionsModal } from './react/SelectOption' import widgets from './react/widgets' import { getItemFromBlock } from './botUtils' import { gamepadUiCursorState, moveGamepadCursorByPx } from './react/GamepadUiCursor' +import { updateBinds } from './react/KeybindingsScreenProvider' export const customKeymaps = proxy(JSON.parse(localStorage.keymap || '{}')) as UserOverridesConfig @@ -86,7 +87,7 @@ export const contro = new ControMax({ window.controMax = contro export type Command = CommandEventArgument['command'] -// updateCustomBinds() +updateBinds(customKeymaps) const updateDoPreventDefault = () => { controlOptions.preventDefault = miscUiState.gameLoaded && !activeModalStack.length @@ -296,19 +297,18 @@ function cycleHotbarSlot (dir: 1 | -1) { bot.setQuickBarSlot(newHotbarSlot) } -// custom commands hamdler -const customCommandsHandler = (buttonData: { code?: string, button?: string, state: boolean }) => { - if (!buttonData.state || !isGameActive(true)) return +// custom commands handler +const customCommandsHandler = ({ command }) => { + const [section, name] = command.split('.') + if (!isGameActive(true) || section !== 'custom') return - const codeOrButton = buttonData.code ?? buttonData.button - const inputType = buttonData.code ? 'keys' : 'gamepad' - for (const value of Object.values(contro.userConfig!.custom ?? {})) { - if (value[inputType]?.includes(codeOrButton!)) { - customCommandsConfig[(value as CustomCommand).type].handler((value as CustomCommand).inputs) - } + if (contro.userConfig?.custom) { + customCommandsConfig[(contro.userConfig.custom[name] as CustomCommand).type].handler( + (contro.userConfig.custom[name] as CustomCommand).inputs + ) } } -contro.on('pressedKeyOrButtonChanged', customCommandsHandler) +contro.on('trigger', customCommandsHandler) contro.on('trigger', ({ command }) => { const willContinue = !isGameActive(true) diff --git a/src/react/KeybindingsScreen.tsx b/src/react/KeybindingsScreen.tsx index 57d7d7ef..2de24de8 100644 --- a/src/react/KeybindingsScreen.tsx +++ b/src/react/KeybindingsScreen.tsx @@ -1,5 +1,6 @@ import { useState, useEffect, useRef, createContext, useContext } from 'react' import { UserOverridesConfig } from 'contro-max/build/types/store' +import { ModifierOnlyKeys } from 'contro-max/build/types/keyCodes' import { contro as controEx } from '../controls' import { hideModal } from '../globalState' import triangle from './ps_icons/playstation_triangle_console_controller_gamepad_icon.svg' @@ -96,22 +97,35 @@ export default ( updateBindMap() }, [userConfig]) - const updateBinding = (data) => { - if (data.state === true || !awaitingInputType) return + const updateBinding = (data: any) => { + if ((!data.state && awaitingInputType) || !awaitingInputType) { + setAwaitingInputType(null) + return + } + + if ('code' in data) { + if (data.state && [...contro.pressedKeys].includes(data.code)) return + if (data.code === 'Escape' || ['Mouse0', 'Mouse1', 'Mouse2'].includes(data.code)) { setAwaitingInputType(null) return } - setBinding({ code: data.code, state: true }, groupName, actionName, buttonNum) + const pressedModifiers = [...contro.pressedKeys].filter( + key => /^(Meta|Control|Alt|Shift)?$/.test(key) + ) + setBinding( + { code: pressedModifiers.length ? `${pressedModifiers[0]}+${data.code}` : data.code, state: true }, + groupName, + actionName, + buttonNum + ) } if ('button' in data) { contro.enabled = false void Promise.resolve().then(() => { contro.enabled = true }) setBinding(data, groupName, actionName, buttonNum) } - - setAwaitingInputType(null) } const updateBindMap = () => { @@ -368,8 +382,12 @@ const parseActionName = (action: string) => { const parseBindingName = (binding: string | undefined) => { if (!binding) return '' const cut = binding.replaceAll(/(Numpad|Digit|Key)/g, '') - const parts = cut.split(/(?=[A-Z\d])/) - return parts.reverse().join(' ') + + const parts = cut.includes('+') ? cut.split('+') : [cut] + for (let i = 0; i < parts.length; i++) { + parts[i] = parts[i].split(/(?=[A-Z\d])/).reverse().join(' ') + } + return parts.join(' + ') } const buttonsMap = { From 1de6ae8f2c71cc8a2d2ebbb9029c962dfe079f61 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 24 May 2024 04:19:33 +0300 Subject: [PATCH 0083/1074] fix: Fix crash in getItemUv function. now dropped items are always displayed --- src/index.ts | 39 ++++++++++++++++++++++++-------------- src/react/ChatProvider.tsx | 2 +- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/index.ts b/src/index.ts index 1797c894..89baaa10 100644 --- a/src/index.ts +++ b/src/index.ts @@ -142,24 +142,35 @@ new THREE.TextureLoader().load(itemsPng, (texture) => { viewer.entities.itemsTexture = texture // todo unify viewer.entities.getItemUv = (id) => { - const name = loadedData.items[id]?.name - const uv = itemsAtlases.latest.textures[name] - if (!uv) { - const variant = viewer.world.downloadedBlockStatesData[name]?.variants?.[''] - if (!variant) return - const uvBlock = (Array.isArray(variant) ? variant[0] : variant).model?.elements?.[0]?.faces?.north.texture - if (!uvBlock) return + try { + const name = loadedData.items[id]?.name + const uv = itemsAtlases.latest.textures[name] + if (!uv) { + const variant = viewer.world.downloadedBlockStatesData[name]?.variants?.[''] + if (!variant) return + const faces = (Array.isArray(variant) ? variant[0] : variant).model?.elements?.[0]?.faces + const uvBlock = faces?.north?.texture ?? faces?.up?.texture ?? faces?.down?.texture ?? faces?.west?.texture ?? faces?.east?.texture ?? faces?.south?.texture + if (!uvBlock) return + return { + ...uvBlock, + size: Math.abs(uvBlock.su), + texture: viewer.world.material.map + } + } return { - ...uvBlock, - size: Math.abs(uvBlock.su), + ...uv, + size: itemsAtlases.latest.size, + texture: viewer.entities.itemsTexture + } + } catch (err) { + reportError?.(err) + return { + u: 0, + v: 0, + size: 16 / viewer.world.material.map!.image.width, texture: viewer.world.material.map } } - return { - ...uv, - size: itemsAtlases.latest.size, - texture: viewer.entities.itemsTexture - } } }) viewer.entities.entitiesOptions = { diff --git a/src/react/ChatProvider.tsx b/src/react/ChatProvider.tsx index 0322c60f..ad4a705d 100644 --- a/src/react/ChatProvider.tsx +++ b/src/react/ChatProvider.tsx @@ -74,7 +74,7 @@ export default () => { if (items[0].match) items = items.map(i => i.match) } if (completeValue === '/') { - if (!items[0].startsWith('/')) { + if (!items[0]?.startsWith('/')) { // normalize items = items.map(item => `/${item}`) } From 8fdcbdfc60bd42e769c4aa0895722f586690ecfe Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 24 May 2024 04:21:41 +0300 Subject: [PATCH 0084/1074] fix: fix more starfield issues, make disableable --- .../viewer/lib/worldrendererThree.ts | 13 ++++++ src/entities.ts | 1 + src/optionsGuiScheme.tsx | 1 + src/optionsStorage.ts | 42 +++++++++++-------- src/watchOptions.ts | 5 +++ 5 files changed, 44 insertions(+), 18 deletions(-) diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 24b6a28a..a2082a53 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -277,11 +277,23 @@ export class WorldRendererThree extends WorldRendererCommon { class StarField { points?: THREE.Points + private _enabled = true + get enabled () { + return this._enabled + } + set enabled (value) { + this._enabled = value + if (this.points) { + this.points.visible = value + } + } constructor(private scene: THREE.Scene) { } addToScene () { + if (this.points || !this.enabled) return + const radius = 80 const depth = 50 const count = 7000 @@ -332,6 +344,7 @@ class StarField { if (this.points) { this.points.geometry.dispose(); (this.points.material as THREE.Material).dispose(); + this.scene.remove(this.points) this.points = undefined; } diff --git a/src/entities.ts b/src/entities.ts index dbb59bed..b238d4ea 100644 --- a/src/entities.ts +++ b/src/entities.ts @@ -14,6 +14,7 @@ const updateAutoJump = () => { jumpOnAllEdges: options.autoParkour, // strictBlockCollision: true, }) + if (autoJump === bot.autoJumper.enabled) return if (autoJump) { bot.autoJumper.enable() } else { diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index 46f258a8..88e6115f 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -69,6 +69,7 @@ export const guiOptionsScheme: { enableWarning: 'Enabling it will make chunks load ~4x slower', disabledDuringGame: true }, + starfieldRendering: {} }, ], main: [ diff --git a/src/optionsStorage.ts b/src/optionsStorage.ts index 9350d5ab..ed71cfdb 100644 --- a/src/optionsStorage.ts +++ b/src/optionsStorage.ts @@ -30,24 +30,7 @@ const defaultOptions = { touchButtonsSize: 40, touchButtonsOpacity: 80, touchButtonsPosition: 12, - touchControlsPositions: { - action: [ - 70, - 85 - ], - sneak: [ - 90, - 85 - ], - break: [ - 70, - 65 - ], - jump: [ - 90, - 65 - ], - } as Record, + touchControlsPositions: getDefaultTouchControlsPositions(), touchControlsType: 'classic' as 'classic' | 'joystick-buttons', gpuPreference: 'default' as 'default' | 'high-performance' | 'low-power', backgroundRendering: '20fps' as 'full' | '20fps' | '5fps', @@ -59,6 +42,7 @@ const defaultOptions = { dayCycleAndLighting: true, loadPlayerSkins: true, lowMemoryMode: false, + starfieldRendering: true, // antiAliasing: false, showChunkBorders: false, // todo rename option @@ -73,6 +57,7 @@ const defaultOptions = { disableLoadPrompts: false, guestUsername: 'guest', askGuestName: true, + errorReporting: true, /** Actually might be useful */ showCursorBlockInSpectator: false, renderEntities: true, @@ -91,6 +76,27 @@ const defaultOptions = { wysiwygSignEditor: 'auto' as 'auto' | 'always' | 'never', } +function getDefaultTouchControlsPositions () { + return { + action: [ + 70, + 85 + ], + sneak: [ + 90, + 85 + ], + break: [ + 70, + 65 + ], + jump: [ + 90, + 65 + ], + } as Record +} + const qsOptionsRaw = new URLSearchParams(location.search).getAll('setting') export const qsOptions = Object.fromEntries(qsOptionsRaw.map(o => { const [key, value] = o.split(':') diff --git a/src/watchOptions.ts b/src/watchOptions.ts index 56fc9c2c..4ff34be4 100644 --- a/src/watchOptions.ts +++ b/src/watchOptions.ts @@ -57,4 +57,9 @@ export const watchOptionsAfterViewerInit = () => { customEvents.on('gameLoaded', () => { viewer.world.mesherConfig.enableLighting = !bot.supportFeature('blockStateId') || options.newVersionsLighting }) + + watchValue(options, o => { + if (!(viewer.world instanceof WorldRendererThree)) return + viewer.world.starField.enabled = o.starfieldRendering + }) } From f2137d95a1a1ca0af04ebde6bd4c3b9194a1370f Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 24 May 2024 04:33:54 +0300 Subject: [PATCH 0085/1074] fix: fix critical memory leak block in the scene were not removed from the memory --- prismarine-viewer/viewer/lib/dispose.js | 6 ---- prismarine-viewer/viewer/lib/entities.js | 30 +++++++++---------- prismarine-viewer/viewer/lib/primitives.js | 7 ++--- prismarine-viewer/viewer/lib/threeJsUtils.ts | 13 ++++++++ .../viewer/lib/worldrendererThree.ts | 7 ++--- 5 files changed, 34 insertions(+), 29 deletions(-) delete mode 100644 prismarine-viewer/viewer/lib/dispose.js create mode 100644 prismarine-viewer/viewer/lib/threeJsUtils.ts diff --git a/prismarine-viewer/viewer/lib/dispose.js b/prismarine-viewer/viewer/lib/dispose.js deleted file mode 100644 index 15ec7b4b..00000000 --- a/prismarine-viewer/viewer/lib/dispose.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - dispose3 (o) { - o.geometry?.dispose() - o.dispose?.() - } -} diff --git a/prismarine-viewer/viewer/lib/entities.js b/prismarine-viewer/viewer/lib/entities.js index 136c77fe..930f62c9 100644 --- a/prismarine-viewer/viewer/lib/entities.js +++ b/prismarine-viewer/viewer/lib/entities.js @@ -2,7 +2,6 @@ import * as THREE from 'three' import * as TWEEN from '@tweenjs/tween.js' import * as Entity from './entity/EntityMesh' -import { dispose3 } from './dispose' import nbt from 'prismarine-nbt' import EventEmitter from 'events' import { PlayerObject, PlayerAnimation } from 'skinview3d' @@ -14,10 +13,11 @@ import { NameTagObject } from 'skinview3d/libs/nametag' import { flat, fromFormattedString } from '@xmcl/text-component' import mojangson from 'mojangson' import externalTexturesJson from './entity/externalTextures.json' +import { disposeObject } from './threeJsUtils' export const TWEEN_DURATION = 50 // todo should be 100 -function getUsernameTexture(username, { fontFamily = 'sans-serif' }) { +function getUsernameTexture (username, { fontFamily = 'sans-serif' }) { const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') if (!ctx) throw new Error('Could not get 2d context') @@ -61,7 +61,7 @@ const addNametag = (entity, options, mesh) => { // todo cleanup const nametags = {} -function getEntityMesh(entity, scene, options, overrides) { +function getEntityMesh (entity, scene, options, overrides) { if (entity.name) { try { // https://github.com/PrismarineJS/prismarine-viewer/pull/410 @@ -105,15 +105,15 @@ export class Entities extends EventEmitter { this.getItemUv = undefined } - clear() { + clear () { for (const mesh of Object.values(this.entities)) { this.scene.remove(mesh) - dispose3(mesh) + disposeObject(mesh) } this.entities = {} } - setDebugMode(mode, /** @type {THREE.Object3D?} */entity = null) { + setDebugMode (mode, /** @type {THREE.Object3D?} */entity = null) { this.debugMode = mode for (const mesh of entity ? [entity] : Object.values(this.entities)) { const boxHelper = mesh.children.find(c => c.name === 'debug') @@ -125,14 +125,14 @@ export class Entities extends EventEmitter { } } - setVisible(visible, /** @type {THREE.Object3D?} */entity = null) { + setVisible (visible, /** @type {THREE.Object3D?} */entity = null) { this.visible = visible for (const mesh of entity ? [entity] : Object.values(this.entities)) { mesh.visible = visible } } - render() { + render () { const dt = this.clock.getDelta() for (const entityId of Object.keys(this.entities)) { const playerObject = this.getPlayerObject(entityId) @@ -142,7 +142,7 @@ export class Entities extends EventEmitter { } } - getPlayerObject(entityId) { + getPlayerObject (entityId) { /** @type {(PlayerObject & { animation?: PlayerAnimation }) | undefined} */ const playerObject = this.entities[entityId]?.playerObject return playerObject @@ -152,7 +152,7 @@ export class Entities extends EventEmitter { defaultSteveTexture // true means use default skin url - updatePlayerSkin(entityId, username, /** @type {string | true} */skinUrl, /** @type {string | true | undefined} */capeUrl = undefined) { + updatePlayerSkin (entityId, username, /** @type {string | true} */skinUrl, /** @type {string | true | undefined} */capeUrl = undefined) { let playerObject = this.getPlayerObject(entityId) if (!playerObject) return // const username = this.entities[entityId].username @@ -235,14 +235,14 @@ export class Entities extends EventEmitter { playerObject.cape.map = null } - function isCanvasBlank(canvas) { + function isCanvasBlank (canvas) { return !canvas.getContext('2d') .getImageData(0, 0, canvas.width, canvas.height).data .some(channel => channel !== 0) } } - playAnimation(entityPlayerId, /** @type {'walking' | 'running' | 'oneSwing' | 'idle'} */animation) { + playAnimation (entityPlayerId, /** @type {'walking' | 'running' | 'oneSwing' | 'idle'} */animation) { const playerObject = this.getPlayerObject(entityPlayerId) if (!playerObject) return @@ -262,14 +262,14 @@ export class Entities extends EventEmitter { } - displaySimpleText(jsonLike) { + displaySimpleText (jsonLike) { if (!jsonLike) return const parsed = typeof jsonLike === 'string' ? mojangson.simplify(mojangson.parse(jsonLike)) : nbt.simplify(jsonLike) const text = flat(parsed).map(x => x.text) return text.join('') } - update(/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) { + update (/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) { let isPlayerModel = entity.name === 'player' if (entity.name === 'zombie' || entity.name === 'zombie_villager' || entity.name === 'husk') { isPlayerModel = true @@ -456,7 +456,7 @@ export class Entities extends EventEmitter { if (e.additionalCleanup) e.additionalCleanup() this.emit('remove', entity) this.scene.remove(e) - dispose3(e) + disposeObject(e) // todo dispose textures as well ? delete this.entities[entity.id] } diff --git a/prismarine-viewer/viewer/lib/primitives.js b/prismarine-viewer/viewer/lib/primitives.js index f206ee87..c8a0c006 100644 --- a/prismarine-viewer/viewer/lib/primitives.js +++ b/prismarine-viewer/viewer/lib/primitives.js @@ -1,6 +1,5 @@ const THREE = require('three') const { MeshLine, MeshLineMaterial } = require('three.meshline') -const { dispose3 } = require('./dispose') function getMesh (primitive, camera) { if (primitive.type === 'line') { @@ -48,7 +47,7 @@ function getMesh (primitive, camera) { } class Primitives { - constructor (scene, camera) { + constructor(scene, camera) { this.scene = scene this.camera = camera this.primitives = {} @@ -57,7 +56,7 @@ class Primitives { clear () { for (const mesh of Object.values(this.primitives)) { this.scene.remove(mesh) - dispose3(mesh) + disposeObject(mesh) } this.primitives = {} } @@ -65,7 +64,7 @@ class Primitives { update (primitive) { if (this.primitives[primitive.id]) { this.scene.remove(this.primitives[primitive.id]) - dispose3(this.primitives[primitive.id]) + disposeObject(this.primitives[primitive.id]) delete this.primitives[primitive.id] } diff --git a/prismarine-viewer/viewer/lib/threeJsUtils.ts b/prismarine-viewer/viewer/lib/threeJsUtils.ts new file mode 100644 index 00000000..f856c244 --- /dev/null +++ b/prismarine-viewer/viewer/lib/threeJsUtils.ts @@ -0,0 +1,13 @@ +import * as THREE from 'three'; + +export const disposeObject = (obj: THREE.Object3D) => { + if (!obj) return + // not cleaning texture there as it might be used by other objects, but would be good to also do that + if (obj instanceof THREE.Mesh) { + obj.geometry.dispose(); + obj.material.dispose(); + } + if (obj.children) { + obj.children.forEach(disposeObject); + } +} diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index a2082a53..60156a50 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -1,13 +1,13 @@ import * as THREE from 'three' import { Vec3 } from 'vec3' import nbt from 'prismarine-nbt' -import { dispose3 } from './dispose' import PrismarineChatLoader from 'prismarine-chat' import { renderSign } from '../sign-renderer/' import { chunkPos, sectionPos } from './simpleUtils' import { WorldRendererCommon, WorldRendererConfig } from './worldrendererCommon' import * as tweenJs from '@tweenjs/tween.js' import { BloomPass, RenderPass, UnrealBloomPass, EffectComposer, WaterPass, GlitchPass } from 'three-stdlib' +import { disposeObject } from './threeJsUtils' export class WorldRendererThree extends WorldRendererCommon { outputFormat = 'threeJs' as const @@ -62,7 +62,7 @@ export class WorldRendererThree extends WorldRendererCommon { let object: THREE.Object3D = this.sectionObjects[data.key] if (object) { this.scene.remove(object) - dispose3(object) + disposeObject(object) delete this.sectionObjects[data.key] } @@ -263,7 +263,7 @@ export class WorldRendererThree extends WorldRendererCommon { const mesh = this.sectionObjects[key] if (mesh) { this.scene.remove(mesh) - dispose3(mesh) + disposeObject(mesh) } delete this.sectionObjects[key] } @@ -327,7 +327,6 @@ class StarField { material.blending = THREE.AdditiveBlending material.depthTest = false material.transparent = true - // material.unifo // Create points and add them to the scene this.points = new THREE.Points(geometry, material) From fcec85baa39f212a98e43a46b6bffa0eebc8455c Mon Sep 17 00:00:00 2001 From: Vitaly Date: Fri, 24 May 2024 10:21:03 +0300 Subject: [PATCH 0086/1074] feat: Make bow, foods cancellable and add use progression indicator feat: make item in offhand activatable --- prismarine-viewer/viewer/lib/threeJsUtils.ts | 5 +- src/react/Crosshair.css | 35 +++++++---- src/react/Crosshair.tsx | 64 +++++++++++++++++++- src/react/TitleProvider.tsx | 1 + src/worldInteractions.ts | 42 +++++++++---- 5 files changed, 121 insertions(+), 26 deletions(-) diff --git a/prismarine-viewer/viewer/lib/threeJsUtils.ts b/prismarine-viewer/viewer/lib/threeJsUtils.ts index f856c244..e4f9404b 100644 --- a/prismarine-viewer/viewer/lib/threeJsUtils.ts +++ b/prismarine-viewer/viewer/lib/threeJsUtils.ts @@ -1,11 +1,10 @@ import * as THREE from 'three'; export const disposeObject = (obj: THREE.Object3D) => { - if (!obj) return // not cleaning texture there as it might be used by other objects, but would be good to also do that if (obj instanceof THREE.Mesh) { - obj.geometry.dispose(); - obj.material.dispose(); + obj.geometry?.dispose?.(); + obj.material?.dispose?.(); } if (obj.children) { obj.children.forEach(disposeObject); diff --git a/src/react/Crosshair.css b/src/react/Crosshair.css index 94252ffa..7076f475 100644 --- a/src/react/Crosshair.css +++ b/src/react/Crosshair.css @@ -1,12 +1,25 @@ .crosshair { - z-index: -1; - width: 16px; - height: 16px; - background: var(--gui-icons); - background-size: calc(256px * var(--crosshair-scale)); - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - image-rendering: pixelated; - } + z-index: -1; + width: 16px; + height: 16px; + background: var(--gui-icons); + background-size: calc(256px * var(--crosshair-scale)); + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + image-rendering: pixelated; + pointer-events: none; +} + +.crosshair-indicator { + z-index: -1; + width: var(--crosshair-indicator-size); + height: 1.5px; + position: fixed; + top: calc(50% + 8px); + left: 50%; + transform: translate(-50%, -50%); + background: lightgray; + pointer-events: none; +} diff --git a/src/react/Crosshair.tsx b/src/react/Crosshair.tsx index 877b8df4..ab289db8 100644 --- a/src/react/Crosshair.tsx +++ b/src/react/Crosshair.tsx @@ -1,8 +1,70 @@ +import { useEffect, useState } from 'react' import './Crosshair.css' +import { proxy, useSnapshot } from 'valtio' import SharedHudVars from './SharedHudVars' +// todo move to mineflayer +export const itemBeingUsed = proxy({ + name: null as string | null, + hand: 0 as 0 | 1 +}) + export default () => { + const { name: usingItem, hand } = useSnapshot(itemBeingUsed) + + const [displayIndicator, setDisplayIndicator] = useState(true) + const [indicatorProgress, setIndicatorProgress] = useState(0) + const [alternativeIndicator, setAlternativeIndicator] = useState(false) + const boxMaxTimeMs = 1000 + // todo add sword indicator + const indicatorSize = 20 + + useEffect(() => { + bot.on('heldItemChanged' as any, () => { + const displayBar = (item: import('prismarine-item').Item | null) => { + const itemName = item?.name + if (!itemName) return + return loadedData.foodsArray.map((food) => food.name).includes(itemName) || itemName === 'bow' || itemName === 'shield' || itemName === 'crossbow' + } + setDisplayIndicator(displayBar(bot.heldItem) || displayBar(bot.inventory.slots[45]) || false) + }) + }, []) + + useEffect(() => { + setAlternativeIndicator(usingItem === 'shield') + if (!usingItem) return + const startTime = Date.now() + let maxTime = 0 + if (usingItem === 'bow' || usingItem === 'crossbow') { + maxTime = 1000 + } + const isFood = loadedData.foodsArray.some((food) => food.name === usingItem) + if (isFood) { + maxTime = 32 * 50 + } + if (!maxTime) return + + const id = setInterval(() => { + const progress = (Date.now() - startTime) / boxMaxTimeMs + if (progress >= 1) { + clearInterval(id) + } else { + setIndicatorProgress(progress) + } + }, 1000 / 60) + return () => { + setIndicatorProgress(0) + clearInterval(id) + } + }, [usingItem]) + return -
+
+ {displayIndicator &&
} } diff --git a/src/react/TitleProvider.tsx b/src/react/TitleProvider.tsx index 151a93c1..f19669ec 100644 --- a/src/react/TitleProvider.tsx +++ b/src/react/TitleProvider.tsx @@ -23,6 +23,7 @@ export default () => { const [openActionBar, setOpenActionBar] = useState(false) useMemo(() => { + // todo move to mineflayer bot._client.on('set_title_text', (packet) => { setTitle(JSON.parse(packet.text)) setOpenTitle(true) diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index 85884b2f..239c02c2 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -17,6 +17,7 @@ import { LineMaterial, Wireframe, LineSegmentsGeometry } from 'three-stdlib' import { hideCurrentModal, isGameActive, showModal } from './globalState' import { assertDefined } from './utils' import { options } from './optionsStorage' +import { itemBeingUsed } from './react/Crosshair' function getViewDirection (pitch, yaw) { const csPitch = Math.cos(pitch) @@ -133,6 +134,9 @@ class WorldInteraction { } this.lastDugBlock = null }) + bot.on('heldItemChanged' as any, () => { + itemBeingUsed.name = null + }) const upLineMaterial = () => { const inCreative = bot.game.gameMode === 'creative' @@ -191,16 +195,20 @@ class WorldInteraction { // Place / interact / activate if (this.buttons[2] && this.lastBlockPlaced >= 4) { - const activate = bot.heldItem && ['egg', 'fishing_rod', 'firework_rocket', - 'fire_charge', 'snowball', 'ender_pearl', 'experience_bottle', 'potion', - 'glass_bottle', 'bucket', 'water_bucket', 'lava_bucket', 'milk_bucket', - 'minecart', 'boat', 'tnt_minecart', 'chest_minecart', 'hopper_minecart', - 'command_block_minecart', 'armor_stand', 'lead', 'name_tag', - // - 'writable_book', 'written_book', 'compass', 'clock', 'filled_map', 'empty_map', 'map', - 'shears', 'carrot_on_a_stick', 'warped_fungus_on_a_stick', - 'spawn_egg', 'trident', 'crossbow', 'elytra', 'shield', 'turtle_helmet', - ].includes(bot.heldItem.name) + const activatableItems = (itemName: string) => { + return ['egg', 'fishing_rod', 'firework_rocket', + 'fire_charge', 'snowball', 'ender_pearl', 'experience_bottle', 'potion', + 'glass_bottle', 'bucket', 'water_bucket', 'lava_bucket', 'milk_bucket', + 'minecart', 'boat', 'tnt_minecart', 'chest_minecart', 'hopper_minecart', + 'command_block_minecart', 'armor_stand', 'lead', 'name_tag', + // + 'writable_book', 'written_book', 'compass', 'clock', 'filled_map', 'empty_map', 'map', + 'shears', 'carrot_on_a_stick', 'warped_fungus_on_a_stick', + 'spawn_egg', 'trident', 'crossbow', 'elytra', 'shield', 'turtle_helmet', 'bow', 'crossbow', 'bucket_of_cod', + ...loadedData.foodsArray.map((f) => f.name), + ].includes(itemName) + } + const activate = bot.heldItem && activatableItems(bot.heldItem.name) let stop = false if (!bot.controlState.sneak) { if (cursorBlock?.name === 'bed' || cursorBlock?.name.endsWith('_bed')) { @@ -223,6 +231,7 @@ class WorldInteraction { }) } } + // todo placing with offhand if (cursorBlock && !activate && !stop) { const vecArray = [new Vec3(0, -1, 0), new Vec3(0, 1, 0), new Vec3(0, 0, -1), new Vec3(0, 0, 1), new Vec3(-1, 0, 0), new Vec3(1, 0, 0)] //@ts-expect-error @@ -242,10 +251,21 @@ class WorldInteraction { }).catch(console.warn) } } else if (!stop) { - bot.activateItem() // todo offhand + const offhand = activate ? false : activatableItems(bot.inventory.slots[45]?.name ?? '') + bot.activateItem(offhand) // todo offhand + itemBeingUsed.name = (offhand ? bot.inventory.slots[45]?.name : bot.heldItem?.name) ?? null + itemBeingUsed.hand = offhand ? 1 : 0 } this.lastBlockPlaced = 0 } + // stop using activated item (cancel) + if (itemBeingUsed.name && !this.buttons[2]) { + itemBeingUsed.name = null + // "only foods and bow can be deactivated" - not true, shields also can be deactivated and client always sends this + // if (bot.heldItem && (loadedData.foodsArray.map((f) => f.name).includes(bot.heldItem.name) || bot.heldItem.name === 'bow')) { + bot.deactivateItem() + // } + } // Stop break if ((!this.buttons[0] && this.lastButtons[0]) || cursorChanged) { From 87e724d5f6d7d4b8630a5f491857e8042f3206c6 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Fri, 24 May 2024 11:05:44 +0300 Subject: [PATCH 0087/1074] fix: fix offhand slot in hotbar display --- pnpm-lock.yaml | 8 ++++---- src/react/HotbarRenderApp.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d34f233..6fdf4afa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -299,7 +299,7 @@ importers: version: 1.0.0 minecraft-inventory-gui: specifier: github:zardoy/minecraft-inventory-gui#next - version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5554c7ab0a74bce52aa5f5f04a48eb8d3b9ac65c(@types/react@18.2.20)(react@18.2.0) + version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:PrismarineJS/mineflayer version: https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f(encoding@0.1.13) @@ -6035,8 +6035,8 @@ packages: minecraft-folder-path@1.2.0: resolution: {integrity: sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==} - minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5554c7ab0a74bce52aa5f5f04a48eb8d3b9ac65c: - resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5554c7ab0a74bce52aa5f5f04a48eb8d3b9ac65c} + minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5: + resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5} version: 1.0.1 minecraft-protocol@1.47.0: @@ -15678,7 +15678,7 @@ snapshots: minecraft-folder-path@1.2.0: {} - minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5554c7ab0a74bce52aa5f5f04a48eb8d3b9ac65c(@types/react@18.2.20)(react@18.2.0): + minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5(@types/react@18.2.20)(react@18.2.0): dependencies: valtio: 1.11.2(@types/react@18.2.20)(react@18.2.0) transitivePeerDependencies: diff --git a/src/react/HotbarRenderApp.tsx b/src/react/HotbarRenderApp.tsx index 3b50f49b..02689485 100644 --- a/src/react/HotbarRenderApp.tsx +++ b/src/react/HotbarRenderApp.tsx @@ -93,7 +93,7 @@ export default () => { }, } as any) const { canvasManager } = inv - inv.inventory.supportsOffhand = bot.supportFeature('doesntHaveOffHandSlot') + inv.inventory.supportsOffhand = !bot.supportFeature('doesntHaveOffHandSlot') inv.pwindow.disablePicking = true canvasManager.children[0].disableHighlight = true From f4ef8f7d85e16727887fddc6c90228ccf235690d Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 25 May 2024 00:18:43 +0300 Subject: [PATCH 0088/1074] cleanup: remove preflat handling --- .../viewer/prepare/moreGeneratedBlocks.ts | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts index 24b85cc3..ffb1a705 100644 --- a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts +++ b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts @@ -1,6 +1,5 @@ import Jimp from 'jimp' import minecraftData from 'minecraft-data' -import prismarineRegistry from 'prismarine-registry' import { McAssets } from './modelsBuilder' import path from 'path' import fs from 'fs' @@ -11,8 +10,6 @@ const twoTileTextures: string[] = [] let currentImage: Jimp let currentBlockName: string let currentMcAssets: McAssets -let isPreFlattening = false -const postFlatenningRegistry = prismarineRegistry('1.13') const __dirname = path.dirname(fileURLToPath(new URL(import.meta.url))) type SidesType = { @@ -24,9 +21,9 @@ type SidesType = { "down": string } -const getBlockStates = (name: string, postFlatenningName = name) => { - const mcData = isPreFlattening ? postFlatenningRegistry : minecraftData(currentMcAssets.version) - return mcData.blocksByName[isPreFlattening ? postFlatenningName : name]?.states +const getBlockStates = (name: string) => { + const mcData = minecraftData(currentMcAssets.version) + return mcData.blocksByName[name]?.states } export const addBlockCustomSidesModel = (name: string, sides: SidesType) => { @@ -124,7 +121,7 @@ const handleShulkerBox = async (dataBase: string, match: RegExpExecArray) => { } const handleSign = async (dataBase: string, match: RegExpExecArray) => { - const states = getBlockStates(currentBlockName, currentBlockName === 'wall_sign' ? 'wall_sign' : 'sign') + const states = getBlockStates(currentBlockName) if (!states) return const [, signMaterial = ''] = match @@ -375,17 +372,11 @@ const handleChest = async (dataBase: string, match: RegExpExecArray) => { if (modelName.endsWith('_left')) chestTextureName = `${chestTextureName}_left` if (modelName.endsWith('_right')) chestTextureName = `${chestTextureName}_right` - // reading latest version since the texture wasn't changed, but in pre-flatenning need custom mapping for doubled_chest const texture = path.join(currentMcAssets.directory, `../1.19.1/entity/chest/${chestTextureName}.png`) currentImage = await Jimp.read(texture) const model = structuredClone(chestModels[modelName]) - // todo < 1.9 - if (currentMcAssets.version === '1.8.8') { - // doesn't have definition of block yet - model.parent = undefined - } model.textures.particle = particle const newModelName = `${currentBlockName}_${modelName}` for (const variant of blockStatesVariants) { @@ -438,7 +429,6 @@ export const tryHandleBlockEntity = async (dataBase, blockName) => { export const prepareMoreGeneratedBlocks = async (mcAssets: McAssets) => { const mcData = minecraftData(mcAssets.version) - isPreFlattening = !mcData.supportFeature('blockStateId') const allTheBlocks = mcData.blocksArray.map(x => x.name) currentMcAssets = mcAssets From 0d8beef65c5022cf32dd2ea758891bad700e2374 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 26 May 2024 18:58:46 +0300 Subject: [PATCH 0089/1074] feat: add gamemode selector in create world screen. always use creative with ?singleplayer=1 --- cypress/e2e/index.spec.ts | 27 ++----------------- cypress/e2e/shared.ts | 15 +++++++++++ .../viewer/prepare/generateTextures.ts | 7 ++--- scripts/esbuildPlugins.mjs | 18 ++++++------- scripts/githubActions.mjs | 8 +++--- src/optionsStorage.ts | 4 ++- src/react/CreateWorld.tsx | 14 +++++++--- src/react/CreateWorldProvider.tsx | 7 ++--- src/react/Crosshair.tsx | 2 +- src/workerWorkaround.ts | 2 ++ tsconfig.json | 2 +- 11 files changed, 56 insertions(+), 50 deletions(-) create mode 100644 cypress/e2e/shared.ts create mode 100644 src/workerWorkaround.ts diff --git a/cypress/e2e/index.spec.ts b/cypress/e2e/index.spec.ts index 455b1283..05b50211 100644 --- a/cypress/e2e/index.spec.ts +++ b/cypress/e2e/index.spec.ts @@ -1,15 +1,5 @@ /// -import type { AppOptions } from '../../src/optionsStorage' - -const cleanVisit = (url?) => { - cy.clearLocalStorage() - visit(url) -} - -const visit = (url = '/') => { - window.localStorage.cypress = 'true' - cy.visit(url) -} +import { setOptions, cleanVisit, visit } from './shared' // todo use ssl @@ -31,14 +21,8 @@ const testWorldLoad = () => { }) } -const setOptions = (options: Partial) => { - cy.window().then(win => { - Object.assign(win['options'], options) - }) -} - it('Loads & renders singleplayer', () => { - visit('/?singleplayer=1') + cleanVisit('/?singleplayer=1') setOptions({ localServerOptions: { generation: { @@ -69,10 +53,3 @@ it('Loads & renders zip world', () => { cy.get('input[type="file"]').selectFile('cypress/superflat.zip', { force: true }) testWorldLoad() }) - -it.skip('Performance test', () => { - // select that world - // from -2 85 24 - // await bot.loadPlugin(pathfinder.pathfinder) - // bot.pathfinder.goto(new pathfinder.goals.GoalXZ(28, -28)) -}) diff --git a/cypress/e2e/shared.ts b/cypress/e2e/shared.ts new file mode 100644 index 00000000..9292a8d5 --- /dev/null +++ b/cypress/e2e/shared.ts @@ -0,0 +1,15 @@ +import { AppOptions } from '../../src/optionsStorage' + +export const cleanVisit = (url?) => { + cy.clearLocalStorage() + visit(url) +} +export const visit = (url = '/') => { + window.localStorage.cypress = 'true' + cy.visit(url) +} +export const setOptions = (options: Partial) => { + cy.window().then(win => { + Object.assign(win['options'], options) + }) +} diff --git a/prismarine-viewer/viewer/prepare/generateTextures.ts b/prismarine-viewer/viewer/prepare/generateTextures.ts index dc838c65..f66fb5d7 100644 --- a/prismarine-viewer/viewer/prepare/generateTextures.ts +++ b/prismarine-viewer/viewer/prepare/generateTextures.ts @@ -19,9 +19,10 @@ const warnings = new Set() Promise.resolve().then(async () => { generateItemsAtlases() console.time('generateTextures') - for (const version of mcAssets.versions as typeof mcAssets['versions']) { + const versions = process.argv.includes('-l') ? [mcAssets.versions.at(-1)!] : mcAssets.versions + for (const version of versions as typeof mcAssets['versions']) { // for debugging (e.g. when above is overridden) - if (!mcAssets.versions.includes(version)) { + if (!versions.includes(version)) { throw new Error(`Version ${version} is not supported by minecraft-assets`) } if (versionToNumber(version) < versionToNumber('1.13')) { @@ -45,7 +46,7 @@ Promise.resolve().then(async () => { fs.copySync(assets.directory, path.resolve(texturesPath, version), { overwrite: true }) } - fs.writeFileSync(path.join(publicPath, 'supportedVersions.json'), '[' + mcAssets.versions.map(v => `"${v}"`).toString() + ']') + fs.writeFileSync(path.join(publicPath, 'supportedVersions.json'), '[' + versions.map(v => `"${v}"`).toString() + ']') warnings.forEach(x => console.warn(x)) console.timeEnd('generateTextures') }) diff --git a/scripts/esbuildPlugins.mjs b/scripts/esbuildPlugins.mjs index f6b539c1..fe4018f3 100644 --- a/scripts/esbuildPlugins.mjs +++ b/scripts/esbuildPlugins.mjs @@ -40,7 +40,7 @@ export const startWatchingHmr = () => { const mesherSharedPlugins = [ { name: 'minecraft-data', - setup (build) { + setup(build) { build.onLoad({ filter: /data[\/\\]pc[\/\\]common[\/\\]legacy.json$/, }, async (args) => { @@ -59,7 +59,7 @@ const plugins = [ ...mesherSharedPlugins, { name: 'strict-aliases', - setup (build) { + setup(build) { build.onResolve({ filter: /^minecraft-protocol$/, }, async ({ kind, resolveDir }) => { @@ -110,7 +110,7 @@ const plugins = [ }, { name: 'data-assets', - setup (build) { + setup(build) { build.onResolve({ filter: /.*/, }, async ({ path, ...rest }) => { @@ -161,7 +161,7 @@ const plugins = [ }, { name: 'prevent-incorrect-linking', - setup (build) { + setup(build) { build.onResolve({ filter: /.+/, }, async ({ resolveDir, path, importer, kind, pluginData }) => { @@ -184,7 +184,7 @@ const plugins = [ }, { name: 'watch-notify', - setup (build) { + setup(build) { let count = 0 let time let prevHash @@ -234,7 +234,7 @@ const plugins = [ }, { name: 'esbuild-readdir', - setup (build) { + setup(build) { build.onResolve({ filter: /^esbuild-readdir:.+$/, }, ({ resolveDir, path }) => { @@ -262,7 +262,7 @@ const plugins = [ }, { name: 'esbuild-import-glob', - setup (build) { + setup(build) { build.onResolve({ filter: /^esbuild-import-glob\(path:(.+),skipFiles:(.+)\)+$/, }, ({ resolveDir, path }) => { @@ -292,7 +292,7 @@ const plugins = [ }, { name: 'fix-dynamic-require', - setup (build) { + setup(build) { build.onResolve({ filter: /1\.14\/chunk/, }, async ({ resolveDir, path }) => { @@ -321,7 +321,7 @@ const plugins = [ }, { name: 'react-displayname', - setup (build) { + setup(build) { build.onLoad({ filter: /.tsx$/, }, async ({ path }) => { diff --git a/scripts/githubActions.mjs b/scripts/githubActions.mjs index ba7b8566..ab786ea9 100644 --- a/scripts/githubActions.mjs +++ b/scripts/githubActions.mjs @@ -6,10 +6,10 @@ const fns = { async getAlias () { const aliasesRaw = process.env.ALIASES if (!aliasesRaw) throw new Error('No aliases found') - const aliases = aliasesRaw.split('\n').map((x) => x.split('=')) + const aliases = aliasesRaw.split('\n').map((x) => x.trim().split('=')) const githubActionsPull = process.env.PULL_URL?.split('/').at(-1) - if (!githubActionsPull) throw new Error(`Not a pull request, got ${process.env.GITHUB_REF}`) - const prNumber = githubActionsPull[1] + if (!githubActionsPull) throw new Error(`Not a pull request, got ${process.env.PULL_URL}`) + const prNumber = githubActionsPull const alias = aliases.find((x) => x[0] === prNumber) if (alias) { // set github output @@ -18,7 +18,7 @@ const fns = { } } -function setOutput(key, value) { +function setOutput (key, value) { // Temporary hack until core actions library catches up with github new recommendations const output = process.env['GITHUB_OUTPUT'] fs.appendFileSync(output, `${key}=${value}${os.EOL}`) diff --git a/src/optionsStorage.ts b/src/optionsStorage.ts index ed71cfdb..2a13abf4 100644 --- a/src/optionsStorage.ts +++ b/src/optionsStorage.ts @@ -52,7 +52,9 @@ const defaultOptions = { excludeCommunicationDebugEvents: [], preventDevReloadWhilePlaying: false, numWorkers: 4, - localServerOptions: {} as any, + localServerOptions: { + gameMode: 1 + } as any, preferLoadReadonly: false, disableLoadPrompts: false, guestUsername: 'guest', diff --git a/src/react/CreateWorld.tsx b/src/react/CreateWorld.tsx index ceed77ec..87b36777 100644 --- a/src/react/CreateWorld.tsx +++ b/src/react/CreateWorld.tsx @@ -8,17 +8,19 @@ import styles from './createWorld.module.css' // const worldTypes = ['default', 'flat', 'largeBiomes', 'amplified', 'customized', 'buffet', 'debug_all_block_states'] const worldTypes = ['default', 'flat'/* , 'void' */] +const gameModes = ['survival', 'creative'/* , 'adventure', 'spectator' */] export const creatingWorldState = proxy({ title: '', type: worldTypes[0], + gameMode: gameModes[0], version: '' }) export default ({ cancelClick, createClick, customizeClick, versions, defaultVersion }) => { const [quota, setQuota] = useState('') - const { title, type, version } = useSnapshot(creatingWorldState) + const { title, type, version, gameMode } = useSnapshot(creatingWorldState) useEffect(() => { creatingWorldState.version = defaultVersion void navigator.storage?.estimate?.().then(({ quota, usage }) => { @@ -54,9 +56,15 @@ export default ({ cancelClick, createClick, customizeClick, versions, defaultVer - + {/* */} +
Default and other world types are WIP
diff --git a/src/react/CreateWorldProvider.tsx b/src/react/CreateWorldProvider.tsx index 728e47ff..0f99ec42 100644 --- a/src/react/CreateWorldProvider.tsx +++ b/src/react/CreateWorldProvider.tsx @@ -3,8 +3,8 @@ import { hideCurrentModal, showModal } from '../globalState' import defaultLocalServerOptions from '../defaultLocalServerOptions' import { mkdirRecursive, uniqueFileNameFromWorldName } from '../browserfs' import CreateWorld, { WorldCustomize, creatingWorldState } from './CreateWorld' -import { useIsModalActive } from './utilsApp' import { getWorldsPath } from './SingleplayerProvider' +import { useIsModalActive } from './utilsApp' export default () => { const activeCreate = useIsModalActive('create-world') @@ -23,7 +23,7 @@ export default () => { }} createClick={async () => { // create new world - const { title, type, version } = creatingWorldState + const { title, type, version, gameMode } = creatingWorldState // todo display path in ui + disable if exist const savePath = await uniqueFileNameFromWorldName(title, getWorldsPath()) await mkdirRecursive(savePath) @@ -51,7 +51,8 @@ export default () => { levelName: title, version, generation, - 'worldFolder': savePath + 'worldFolder': savePath, + gameMode: gameMode === 'survival' ? 0 : 1, }, })) }} diff --git a/src/react/Crosshair.tsx b/src/react/Crosshair.tsx index ab289db8..9079fb66 100644 --- a/src/react/Crosshair.tsx +++ b/src/react/Crosshair.tsx @@ -12,7 +12,7 @@ export const itemBeingUsed = proxy({ export default () => { const { name: usingItem, hand } = useSnapshot(itemBeingUsed) - const [displayIndicator, setDisplayIndicator] = useState(true) + const [displayIndicator, setDisplayIndicator] = useState(false) const [indicatorProgress, setIndicatorProgress] = useState(0) const [alternativeIndicator, setAlternativeIndicator] = useState(false) const boxMaxTimeMs = 1000 diff --git a/src/workerWorkaround.ts b/src/workerWorkaround.ts new file mode 100644 index 00000000..00419b8c --- /dev/null +++ b/src/workerWorkaround.ts @@ -0,0 +1,2 @@ +global = globalThis +globalThis.window = globalThis diff --git a/tsconfig.json b/tsconfig.json index 5d018a46..dbbb9ced 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "forceConsistentCasingInFileNames": true, "useUnknownInCatchVariables": false, "skipLibCheck": true, - "experimentalDecorators": true, + "strictBindCallApply": true, // this the only options that allows smooth transition from js to ts (by not dropping types from js files) // however might need to consider includeing *only needed libraries* instead of using this "maxNodeModuleJsDepth": 1, From e129184ff1d14388a0d4d7b2d5a57e5a7f031422 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Mon, 27 May 2024 10:14:42 +0300 Subject: [PATCH 0090/1074] fix tsc --- src/workerWorkaround.ts | 2 ++ tsconfig.json | 1 + 2 files changed, 3 insertions(+) diff --git a/src/workerWorkaround.ts b/src/workerWorkaround.ts index 00419b8c..7fad22cf 100644 --- a/src/workerWorkaround.ts +++ b/src/workerWorkaround.ts @@ -1,2 +1,4 @@ +//@ts-nocheck +// eslint-disable-next-line no-global-assign global = globalThis globalThis.window = globalThis diff --git a/tsconfig.json b/tsconfig.json index dbbb9ced..454e60cb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,7 @@ "forceConsistentCasingInFileNames": true, "useUnknownInCatchVariables": false, "skipLibCheck": true, + "experimentalDecorators": true, "strictBindCallApply": true, // this the only options that allows smooth transition from js to ts (by not dropping types from js files) // however might need to consider includeing *only needed libraries* instead of using this From 68269ee975f7c1f0d620dc6aac02b3efe2d5b533 Mon Sep 17 00:00:00 2001 From: gguio <109200692+gguio@users.noreply.github.com> Date: Mon, 27 May 2024 12:24:28 +0400 Subject: [PATCH 0091/1074] feat: Screenshot on F2 and hide/show UI on F1 (#136) Co-authored-by: gguio --- src/controls.ts | 18 ++++++++++++++++++ src/globalState.ts | 1 + src/index.ts | 2 ++ src/reactUi.tsx | 4 +++- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/controls.ts b/src/controls.ts index f940d59d..a3a22029 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -651,6 +651,24 @@ window.addEventListener('keydown', (e) => { } }) +window.addEventListener('keydown', (e) => { + if (e.code !== 'F2' || e.repeat || !isGameActive(true)) return + e.preventDefault() + const canvas = document.getElementById('viewer-canvas') as HTMLCanvasElement + if (!canvas) return + const link = document.createElement('a') + link.href = canvas.toDataURL('image/png') + const date = new Date() + link.download = `screenshot ${date.toLocaleString().replaceAll('.', '-').replace(',', '')}.png` + link.click() +}) + +window.addEventListener('keydown', (e) => { + if (e.code !== 'F1' || e.repeat || !isGameActive(true)) return + e.preventDefault() + miscUiState.showUI = !miscUiState.showUI +}) + // #region experimental debug things window.addEventListener('keydown', (e) => { if (e.code === 'F11') { diff --git a/src/globalState.ts b/src/globalState.ts index 4b62f8d6..b7dc1602 100644 --- a/src/globalState.ts +++ b/src/globalState.ts @@ -138,6 +138,7 @@ export const miscUiState = proxy({ wanOpened: false, /** wether game hud is shown (in playing state) */ gameLoaded: false, + showUI: true, loadedServerIndex: '', /** currently trying to load or loaded mc version, after all data is loaded */ loadedDataVersion: null as string | null, diff --git a/src/index.ts b/src/index.ts index 89baaa10..d02f7b92 100644 --- a/src/index.ts +++ b/src/index.ts @@ -108,6 +108,8 @@ let renderer: THREE.WebGLRenderer try { renderer = new THREE.WebGLRenderer({ powerPreference: options.gpuPreference, + preserveDrawingBuffer: true, + logarithmicDepthBuffer: true, }) } catch (err) { console.error(err) diff --git a/src/reactUi.tsx b/src/reactUi.tsx index d86cf202..497f091f 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -143,6 +143,8 @@ const WidgetDisplay = ({ name, Component }) => { } const App = () => { + const { showUI } = useSnapshot(miscUiState) + return
@@ -154,7 +156,7 @@ const App = () => {
- + {showUI && } From cbaeb8c9186be140634f577d9396f129e39b81e0 Mon Sep 17 00:00:00 2001 From: gguio <109200692+gguio@users.noreply.github.com> Date: Tue, 28 May 2024 13:34:22 +0400 Subject: [PATCH 0092/1074] fix hide ui was resetting state (#138) --- src/reactUi.tsx | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/reactUi.tsx b/src/reactUi.tsx index 497f091f..ab1e4ae5 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -95,7 +95,7 @@ const InGameComponent = ({ children }) => { } const InGameUi = () => { - const { gameLoaded } = useSnapshot(miscUiState) + const { gameLoaded, showUI } = useSnapshot(miscUiState) if (!gameLoaded) return return <> @@ -107,17 +107,21 @@ const InGameUi = () => { - - - +
+ + + + +
- - - - - +
+ + + +
+ {showUI && }
From def2baba8fd728a16f38feb9649b3a4b95d6a12e Mon Sep 17 00:00:00 2001 From: Vitaly Date: Tue, 28 May 2024 18:52:15 +0300 Subject: [PATCH 0093/1074] rm unused pmui-playscreen --- index.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/index.html b/index.html index 3e921855..6d3b326b 100644 --- a/index.html +++ b/index.html @@ -94,9 +94,7 @@
-
- -
+
From 295967cc4d6ff4b5b9f83b6fe4f6b2c7f4600158 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 29 May 2024 10:56:57 +0300 Subject: [PATCH 0094/1074] fix inspectPacket function --- src/devtools.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devtools.ts b/src/devtools.ts index 4dbeb51d..e836af02 100644 --- a/src/devtools.ts +++ b/src/devtools.ts @@ -29,7 +29,7 @@ window.len = (obj) => Object.keys(obj).length window.inspectPacket = (packetName, full = false) => { const listener = (...args) => console.log('packet', packetName, full ? args : args[0]) const attach = () => { - bot?.on(packetName, listener) + bot?._client.on(packetName, listener) } attach() customEvents.on('mineflayerBotCreated', attach) From d96ff9ef3a23fc130a0133cc5c2b67dfa41da538 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 29 May 2024 11:16:42 +0300 Subject: [PATCH 0095/1074] fix: was unable to go edit server screen after hitting cancel --- src/react/ServersListProvider.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index bd39bc10..bb23004f 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -186,6 +186,12 @@ const Inner = () => { } }, [serverEditScreen]) + useDidUpdateEffect(() => { + if (!isEditScreenModal) { + setServerEditScreen(null) + } + }, [isEditScreenModal]) + if (isEditScreenModal) { return Date: Sat, 1 Jun 2024 10:36:04 +0300 Subject: [PATCH 0096/1074] fix: page was reloading infinitely in some edge cases, give some time service workers to unregister in these cases --- src/react/MainMenu.tsx | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/react/MainMenu.tsx b/src/react/MainMenu.tsx index f99b6b98..3e3170f4 100644 --- a/src/react/MainMenu.tsx +++ b/src/react/MainMenu.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useState } from 'react' import { openURL } from 'prismarine-viewer/viewer/lib/simpleUtils' import { haveDirectoryPicker } from '../utils' +import { activeModalStack } from '../globalState' import styles from './mainMenu.module.css' import Button from './Button' import ButtonWithTooltip from './ButtonWithTooltip' @@ -17,12 +18,24 @@ interface Props { mapsProvider?: string } -const refreshApp = async () => { +const refreshApp = async (failedUpdate = false) => { const registration = await navigator.serviceWorker.getRegistration() await registration?.unregister() - window.justReloaded = true - sessionStorage.justReloaded = true - window.location.reload() + if (failedUpdate) { + await new Promise(resolve => { + setTimeout(resolve, 2000) + }) + } + if (activeModalStack.length !== 0) return + if (failedUpdate) { + sessionStorage.justReloaded = false + // try to force bypass cache + location.search = '?update=true' + } else { + window.justReloaded = true + sessionStorage.justReloaded = true + window.location.reload() + } } const httpsRegex = /^https?:\/\// @@ -40,10 +53,10 @@ export default ({ connectToServerAction, mapsProvider, singleplayerAction, optio const contents = await f.text() const isLatest = contents === process.env.BUILD_VERSION if (!isLatest && sessionStorage.justReloaded) { - // try to force bypass cache - location.search = '?update=true' + setVersionStatus('(force reloading, wait)') + void refreshApp(true) + return } - sessionStorage.justReloaded = false setVersionStatus(`(${isLatest ? 'latest' : 'new version available'})`) setVersionTitle(`Loaded: ${process.env.BUILD_VERSION}. Remote: ${contents}`) }, () => { }) From c5e636f2416312cf58c8a84cb0937f5cad007c23 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 2 Jun 2024 00:59:23 +0300 Subject: [PATCH 0097/1074] fix (and now check) hide ui --- src/reactUi.tsx | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/reactUi.tsx b/src/reactUi.tsx index ab1e4ae5..2f57e6f0 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -101,19 +101,19 @@ const InGameUi = () => { return <> {/* apply scaling */} - - - - - -
+ + + + + + +
-
@@ -129,7 +129,7 @@ const InGameUi = () => { {/* because of z-index */} - + {showUI && } @@ -147,8 +147,6 @@ const WidgetDisplay = ({ name, Component }) => { } const App = () => { - const { showUI } = useSnapshot(miscUiState) - return
@@ -160,7 +158,7 @@ const App = () => {
- {showUI && } + From 0b2e92c8606a66782243fc632985b569178112f2 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 2 Jun 2024 10:29:29 +0300 Subject: [PATCH 0098/1074] fix sentry 5431874132 --- src/react/HotbarRenderApp.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/react/HotbarRenderApp.tsx b/src/react/HotbarRenderApp.tsx index 02689485..9c6dbe40 100644 --- a/src/react/HotbarRenderApp.tsx +++ b/src/react/HotbarRenderApp.tsx @@ -88,7 +88,7 @@ export default () => { return } const hotbarSlot = slot - bot.inventory.hotbarStart - if (hotbarSlot < 0 || hotbarSlot > 9) return + if (hotbarSlot < 0 || hotbarSlot > 8) return bot.setQuickBarSlot(hotbarSlot) }, } as any) From b317d8ad354e375b4a00c146eafeebf4d86a4170 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 2 Jun 2024 14:20:21 +0300 Subject: [PATCH 0099/1074] fix: reduce fps drops on chunks load a bit by batching operations with a few other minor optimizations --- prismarine-viewer/viewer/lib/entities.js | 39 +++++++++-------- prismarine-viewer/viewer/lib/mesher/mesher.ts | 36 +++++++++++++++- prismarine-viewer/viewer/lib/threeJsUtils.ts | 8 ++-- .../viewer/lib/worldDataEmitter.ts | 11 ++++- .../viewer/lib/worldrendererCommon.ts | 34 +++++++++++++-- .../viewer/lib/worldrendererThree.ts | 43 ++++++++++++++++--- src/optionsGuiScheme.tsx | 3 +- src/react/DebugOverlay.tsx | 26 ++++++----- src/watchOptions.ts | 2 +- src/worldInteractions.ts | 1 + 10 files changed, 153 insertions(+), 50 deletions(-) diff --git a/prismarine-viewer/viewer/lib/entities.js b/prismarine-viewer/viewer/lib/entities.js index 930f62c9..28fc6d89 100644 --- a/prismarine-viewer/viewer/lib/entities.js +++ b/prismarine-viewer/viewer/lib/entities.js @@ -17,7 +17,7 @@ import { disposeObject } from './threeJsUtils' export const TWEEN_DURATION = 50 // todo should be 100 -function getUsernameTexture (username, { fontFamily = 'sans-serif' }) { +function getUsernameTexture(username, { fontFamily = 'sans-serif' }) { const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') if (!ctx) throw new Error('Could not get 2d context') @@ -61,7 +61,7 @@ const addNametag = (entity, options, mesh) => { // todo cleanup const nametags = {} -function getEntityMesh (entity, scene, options, overrides) { +function getEntityMesh(entity, scene, options, overrides) { if (entity.name) { try { // https://github.com/PrismarineJS/prismarine-viewer/pull/410 @@ -94,18 +94,19 @@ function getEntityMesh (entity, scene, options, overrides) { export class Entities extends EventEmitter { constructor(scene) { super() + /** @type {THREE.Scene} */ this.scene = scene this.entities = {} this.entitiesOptions = {} this.debugMode = 'none' this.onSkinUpdate = () => { } this.clock = new THREE.Clock() - this.visible = true + this.rendering = true this.itemsTexture = null this.getItemUv = undefined } - clear () { + clear() { for (const mesh of Object.values(this.entities)) { this.scene.remove(mesh) disposeObject(mesh) @@ -113,7 +114,7 @@ export class Entities extends EventEmitter { this.entities = {} } - setDebugMode (mode, /** @type {THREE.Object3D?} */entity = null) { + setDebugMode(mode, /** @type {THREE.Object3D?} */entity = null) { this.debugMode = mode for (const mesh of entity ? [entity] : Object.values(this.entities)) { const boxHelper = mesh.children.find(c => c.name === 'debug') @@ -125,14 +126,18 @@ export class Entities extends EventEmitter { } } - setVisible (visible, /** @type {THREE.Object3D?} */entity = null) { - this.visible = visible - for (const mesh of entity ? [entity] : Object.values(this.entities)) { - mesh.visible = visible + setRendering(rendering, /** @type {THREE.Object3D?} */entity = null) { + this.rendering = rendering + for (const ent of entity ? [entity] : Object.values(this.entities)) { + if (rendering) { + if (!this.scene.children.includes(ent)) this.scene.add(ent) + } else { + this.scene.remove(ent) + } } } - render () { + render() { const dt = this.clock.getDelta() for (const entityId of Object.keys(this.entities)) { const playerObject = this.getPlayerObject(entityId) @@ -142,7 +147,7 @@ export class Entities extends EventEmitter { } } - getPlayerObject (entityId) { + getPlayerObject(entityId) { /** @type {(PlayerObject & { animation?: PlayerAnimation }) | undefined} */ const playerObject = this.entities[entityId]?.playerObject return playerObject @@ -152,7 +157,7 @@ export class Entities extends EventEmitter { defaultSteveTexture // true means use default skin url - updatePlayerSkin (entityId, username, /** @type {string | true} */skinUrl, /** @type {string | true | undefined} */capeUrl = undefined) { + updatePlayerSkin(entityId, username, /** @type {string | true} */skinUrl, /** @type {string | true | undefined} */capeUrl = undefined) { let playerObject = this.getPlayerObject(entityId) if (!playerObject) return // const username = this.entities[entityId].username @@ -235,14 +240,14 @@ export class Entities extends EventEmitter { playerObject.cape.map = null } - function isCanvasBlank (canvas) { + function isCanvasBlank(canvas) { return !canvas.getContext('2d') .getImageData(0, 0, canvas.width, canvas.height).data .some(channel => channel !== 0) } } - playAnimation (entityPlayerId, /** @type {'walking' | 'running' | 'oneSwing' | 'idle'} */animation) { + playAnimation(entityPlayerId, /** @type {'walking' | 'running' | 'oneSwing' | 'idle'} */animation) { const playerObject = this.getPlayerObject(entityPlayerId) if (!playerObject) return @@ -262,14 +267,14 @@ export class Entities extends EventEmitter { } - displaySimpleText (jsonLike) { + displaySimpleText(jsonLike) { if (!jsonLike) return const parsed = typeof jsonLike === 'string' ? mojangson.simplify(mojangson.parse(jsonLike)) : nbt.simplify(jsonLike) const text = flat(parsed).map(x => x.text) return text.join('') } - update (/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) { + update(/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) { let isPlayerModel = entity.name === 'player' if (entity.name === 'zombie' || entity.name === 'zombie_villager' || entity.name === 'husk') { isPlayerModel = true @@ -392,7 +397,7 @@ export class Entities extends EventEmitter { this.updatePlayerSkin(entity.id, '', overrides?.texture || stevePng) } this.setDebugMode(this.debugMode, group) - this.setVisible(this.visible, group) + this.setRendering(this.rendering, group) } //@ts-ignore diff --git a/prismarine-viewer/viewer/lib/mesher/mesher.ts b/prismarine-viewer/viewer/lib/mesher/mesher.ts index bc1d3bbb..d0c82280 100644 --- a/prismarine-viewer/viewer/lib/mesher/mesher.ts +++ b/prismarine-viewer/viewer/lib/mesher/mesher.ts @@ -19,6 +19,29 @@ function sectionKey (x, y, z) { return `${x},${y},${z}` } +const batchMessagesLimit = 100 + +let queuedMessages = [] as any[] +let queueWaiting = false +const postMessage = (data, transferList = []) => { + queuedMessages.push({ data, transferList }) + if (queuedMessages.length > batchMessagesLimit) { + drainQueue(0, batchMessagesLimit) + } + if (queueWaiting) return + queueWaiting = true + setTimeout(() => { + queueWaiting = false + drainQueue(0, queuedMessages.length) + }) +} + +function drainQueue (from, to) { + const messages = queuedMessages.slice(from, to) + global.postMessage(messages.map(m => m.data), messages.flatMap(m => m.transferList) as unknown as string) + queuedMessages = queuedMessages.slice(to) +} + function setSectionDirty (pos, value = true) { const x = Math.floor(pos.x / 16) * 16 const y = Math.floor(pos.y / 16) * 16 @@ -43,7 +66,7 @@ const softCleanup = () => { world = new World(world.config.version) } -self.onmessage = ({ data }) => { +const handleMessage = data => { const globalVar: any = globalThis if (data.type === 'mcData') { @@ -52,7 +75,7 @@ self.onmessage = ({ data }) => { if (data.config) { world ??= new World(data.config.version) - world.config = {...world.config, ...data.config} + world.config = { ...world.config, ...data.config } globalThis.world = world } @@ -80,6 +103,15 @@ self.onmessage = ({ data }) => { } } +self.onmessage = ({ data }) => { + if (Array.isArray(data)) { + data.forEach(handleMessage) + return + } + + handleMessage(data) +} + setInterval(() => { if (world === null || !blockStatesReady) return diff --git a/prismarine-viewer/viewer/lib/threeJsUtils.ts b/prismarine-viewer/viewer/lib/threeJsUtils.ts index e4f9404b..ee22c477 100644 --- a/prismarine-viewer/viewer/lib/threeJsUtils.ts +++ b/prismarine-viewer/viewer/lib/threeJsUtils.ts @@ -1,12 +1,12 @@ -import * as THREE from 'three'; +import * as THREE from 'three' export const disposeObject = (obj: THREE.Object3D) => { // not cleaning texture there as it might be used by other objects, but would be good to also do that if (obj instanceof THREE.Mesh) { - obj.geometry?.dispose?.(); - obj.material?.dispose?.(); + obj.geometry?.dispose?.() + obj.material?.dispose?.() } if (obj.children) { - obj.children.forEach(disposeObject); + obj.children.forEach(disposeObject) } } diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index 40cc3413..3a8fbd40 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -129,6 +129,15 @@ export class WorldDataEmitter extends EventEmitter { } } + readdDebug () { + const clonedLoadedChunks = { ...this.loadedChunks } + this.unloadAllChunks() + for (const loadedChunk in clonedLoadedChunks) { + const [x, z] = loadedChunk.split(',').map(Number) + this.loadChunk(new Vec3(x, 0, z)) + } + } + async loadChunk (pos: ChunkPos, isLightUpdate = false) { const [botX, botZ] = chunkPos(this.lastPos) const dx = Math.abs(botX - Math.floor(pos.x / 16)) @@ -187,7 +196,7 @@ export class WorldDataEmitter extends EventEmitter { const positions = generateSpiralMatrix(this.viewDistance).map(([x, z]) => { const pos = new Vec3((botX + x) * 16, 0, (botZ + z) * 16) if (!this.loadedChunks[`${pos.x},${pos.z}`]) return pos - return undefined + return undefined! }).filter(a => !!a) this.lastPos.update(pos) await this._loadChunks(positions) diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index d1786650..1a87fa5d 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -73,10 +73,10 @@ export abstract class WorldRendererCommon const src = typeof window === 'undefined' ? `${__dirname}/${workerName}` : workerName const worker: any = new Worker(src) - worker.onmessage = async ({ data }) => { + const handleMessage = (data) => { if (!this.active) return this.handleWorkerMessage(data) - await new Promise(resolve => { + new Promise(resolve => { setTimeout(resolve, 0) }) if (data.type === 'sectionFinished') { @@ -105,6 +105,13 @@ export abstract class WorldRendererCommon this.renderUpdateEmitter.emit('update') } } + worker.onmessage = ({ data }) => { + if (Array.isArray(data)) { + data.forEach(handleMessage) + return + } + handleMessage(data) + } if (worker.on) worker.on('message', (data) => { worker.onmessage({ data }) }) this.workers.push(worker) } @@ -215,6 +222,7 @@ export abstract class WorldRendererCommon } addColumn (x: number, z: number, chunk: any, isLightUpdate: boolean) { + if (!this.active) return if (this.workers.length === 0) throw new Error('workers not initialized yet') this.initialChunksLoad = false this.loadedChunks[`${x},${z}`] = true @@ -256,6 +264,9 @@ export abstract class WorldRendererCommon if ((pos.z & 15) === 15) this.setSectionDirty(pos.offset(0, 0, 16)) } + queueAwaited = false + messagesQueue = {} as { [workerIndex: string]: any[] } + setSectionDirty (pos: Vec3, value = true) { if (this.viewDistance === -1) throw new Error('viewDistance not set') this.allChunksFinished = false @@ -269,7 +280,9 @@ export abstract class WorldRendererCommon // is always dispatched to the same worker const hash = mod(Math.floor(pos.x / 16) + Math.floor(pos.y / 16) + Math.floor(pos.z / 16), this.workers.length) this.sectionsOutstanding.set(key, (this.sectionsOutstanding.get(key) ?? 0) + 1) - this.workers[hash].postMessage({ + this.messagesQueue[hash] ??= [] + this.messagesQueue[hash].push({ + // this.workers[hash].postMessage({ type: 'dirty', x: pos.x, y: pos.y, @@ -277,6 +290,21 @@ export abstract class WorldRendererCommon value, config: this.mesherConfig, }) + this.dispatchMessages() + } + + dispatchMessages () { + if (this.queueAwaited) return + this.queueAwaited = true + setTimeout(() => { + // group messages and send as one + for (const workerIndex in this.messagesQueue) { + const worker = this.workers[Number(workerIndex)] + worker.postMessage(this.messagesQueue[workerIndex]) + } + this.messagesQueue = {} + this.queueAwaited = false + }) } // Listen for chunk rendering updates emitted if a worker finished a render and resolve if the number diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 60156a50..4d28519a 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -16,6 +16,7 @@ export class WorldRendererThree extends WorldRendererCommon { chunkTextures = new Map() signsCache = new Map() starField: StarField + cameraSectionPos: Vec3 = new Vec3(0, 0, 0) get tilesRendered () { return Object.values(this.sectionObjects).reduce((acc, obj) => acc + (obj as any).tilesCount, 0) @@ -42,16 +43,18 @@ export class WorldRendererThree extends WorldRendererCommon { */ updatePosDataChunk (key: string) { const [x, y, z] = key.split(',').map(x => Math.floor(+x / 16)) - const [xPlayer, yPlayer, zPlayer] = this.camera.position.toArray().map(x => Math.floor(x / 16)) // sum of distances: x + y + z - const chunkDistance = Math.abs(x - xPlayer) + Math.abs(y - yPlayer) + Math.abs(z - zPlayer) + const chunkDistance = Math.abs(x - this.cameraSectionPos.x) + Math.abs(y - this.cameraSectionPos.y) + Math.abs(z - this.cameraSectionPos.z) const section = this.sectionObjects[key].children.find(child => child.name === 'mesh')! section.renderOrder = 500 - chunkDistance } updateViewerPosition (pos: Vec3): void { this.viewerPosition = pos - for (const [key, value] of Object.entries(this.sectionObjects)) { + const cameraPos = this.camera.position.toArray().map(x => Math.floor(x / 16)) as [number, number, number] + this.cameraSectionPos = new Vec3(...cameraPos) + for (const key in this.sectionObjects) { + const value = this.sectionObjects[key] if (!value) continue this.updatePosDataChunk(key) } @@ -95,7 +98,10 @@ export class WorldRendererThree extends WorldRendererCommon { mesh.name = 'mesh' object = new THREE.Group() object.add(mesh) - const boxHelper = new THREE.BoxHelper(mesh, 0xffff00) + // mesh with static dimensions: 16x16x16 + const staticChunkMesh = new THREE.Mesh(new THREE.BoxGeometry(16, 16, 16), new THREE.MeshBasicMaterial({ color: 0x000000, transparent: true, opacity: 0 })) + staticChunkMesh.position.set(data.geometry.sx, data.geometry.sy, data.geometry.sz) + const boxHelper = new THREE.BoxHelper(staticChunkMesh, 0xffff00) boxHelper.name = 'helper' object.add(boxHelper) object.name = 'chunk' @@ -117,6 +123,11 @@ export class WorldRendererThree extends WorldRendererCommon { } this.sectionObjects[data.key] = object this.updatePosDataChunk(data.key) + object.matrixAutoUpdate = false + mesh.onAfterRender = (renderer, scene, camera, geometry, material, group) => { + // mesh.matrixAutoUpdate = false + } + this.scene.add(object) } @@ -253,6 +264,24 @@ export class WorldRendererThree extends WorldRendererCommon { } } + readdChunks () { + for (const key of Object.keys(this.sectionObjects)) { + this.scene.remove(this.sectionObjects[key]) + } + setTimeout(() => { + for (const key of Object.keys(this.sectionObjects)) { + this.scene.add(this.sectionObjects[key]) + } + }, 500) + } + + disableUpdates (children = this.scene.children) { + for (const child of children) { + child.matrixWorldNeedsUpdate = false + this.disableUpdates(child.children ?? []) + } + } + removeColumn (x, z) { super.removeColumn(x, z) @@ -332,7 +361,7 @@ class StarField { this.points = new THREE.Points(geometry, material) this.scene.add(this.points) - const clock = new THREE.Clock(); + const clock = new THREE.Clock() this.points.onBeforeRender = (renderer, scene, camera) => { this.points?.position.copy?.(camera.position) material.uniforms.time.value = clock.getElapsedTime() * speed @@ -342,10 +371,10 @@ class StarField { remove () { if (this.points) { this.points.geometry.dispose(); - (this.points.material as THREE.Material).dispose(); + (this.points.material as THREE.Material).dispose() this.scene.remove(this.points) - this.points = undefined; + this.points = undefined } } } diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index 88e6115f..9be844d3 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -69,7 +69,8 @@ export const guiOptionsScheme: { enableWarning: 'Enabling it will make chunks load ~4x slower', disabledDuringGame: true }, - starfieldRendering: {} + starfieldRendering: {}, + renderEntities: {}, }, ], main: [ diff --git a/src/react/DebugOverlay.tsx b/src/react/DebugOverlay.tsx index 4b3c19b1..dd288b49 100644 --- a/src/react/DebugOverlay.tsx +++ b/src/react/DebugOverlay.tsx @@ -83,6 +83,16 @@ export default () => { packetsCountByNamePerSec.current.sent = {} }, 1000) + const freqUpdateInterval = setInterval(() => { + setPos(prev => { return { ...bot.entity.position } }) + setSkyL(prev => bot.world.getSkyLight(bot.entity.position)) + setBlockL(prev => bot.world.getBlockLight(bot.entity.position)) + setBiomeId(prev => bot.world.getBiome(bot.entity.position)) + setDimension(bot.game.dimension) + setDay(bot.time.day) + setCursorBlock(worldInteractions.cursorBlock) + }, 100) + // @ts-expect-error bot._client.on('packet', readPacket) // @ts-expect-error @@ -91,25 +101,12 @@ export default () => { sent.current.count++ managePackets('sent', name, data) }) - bot.on('move', () => { - setPos(prev => { return { ...bot.entity.position }}) - setSkyL(prev => bot.world.getSkyLight(bot.entity.position)) - setBlockL(prev => bot.world.getBlockLight(bot.entity.position)) - setBiomeId(prev => bot.world.getBiome(bot.entity.position)) - setDimension(bot.game.dimension) - }) - bot.on('time', () => { - setDay(bot.time.day) - }) bot.on('entitySpawn', () => { setEntitiesCount(Object.values(bot.entities).length) }) bot.on('entityGone', () => { setEntitiesCount(Object.values(bot.entities).length) }) - bot.on('physicsTick', () => { - setCursorBlock(worldInteractions.cursorBlock) - }) try { const gl = window.renderer.getContext() @@ -121,6 +118,7 @@ export default () => { return () => { document.removeEventListener('keydown', handleF3) clearInterval(packetsUpdateInterval) + clearInterval(freqUpdateInterval) } }, []) @@ -169,7 +167,7 @@ export default () => { ) } ) - : '' } + : ''} {cursorBlock ? (

Looking at: {cursorBlock.position.x} {cursorBlock.position.y} {cursorBlock.position.z}

) : ''} diff --git a/src/watchOptions.ts b/src/watchOptions.ts index 4ff34be4..e379cb50 100644 --- a/src/watchOptions.ts +++ b/src/watchOptions.ts @@ -41,7 +41,7 @@ export const watchOptionsAfterViewerInit = () => { }) watchValue(options, o => { - viewer.entities.setVisible(o.renderEntities) + viewer.entities.setRendering(o.renderEntities) }) // viewer.world.mesherConfig.smoothLighting = options.smoothLighting diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index 239c02c2..330dabd7 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -73,6 +73,7 @@ class WorldInteraction { this.blockBreakMesh = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), breakMaterial) this.blockBreakMesh.visible = false this.blockBreakMesh.renderOrder = 999 + this.blockBreakMesh.name = 'blockBreakMesh' viewer.scene.add(this.blockBreakMesh) // Setup events From 95b80d93ba95cc887ccdf964484c396ab2cb06ee Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 4 Jun 2024 01:45:33 +0300 Subject: [PATCH 0100/1074] fix: waterlogged z-fighting fix --- prismarine-viewer/viewer/lib/mesher/models.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index 40b82ea2..39148aaa 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -35,7 +35,7 @@ function prepareTints (tints) { }) } -const calculatedBlocksEntries = Object.entries(legacyJson.clientCalculatedBlocks); +const calculatedBlocksEntries = Object.entries(legacyJson.clientCalculatedBlocks) export function preflatBlockCalculation (block: Block, world: World, position: Vec3) { const type = calculatedBlocksEntries.find(([name, blocks]) => blocks.includes(block.name))?.[0] if (!type) return @@ -239,9 +239,9 @@ function renderLiquid (world, cursor, texture, type, biome, water, attr) { for (const pos of corners) { const height = cornerHeights[pos[2] * 2 + pos[0]] attr.t_positions.push( - (pos[0] ? 1 : 0) + (cursor.x & 15) - 8, - (pos[1] ? height : 0) + (cursor.y & 15) - 8, - (pos[2] ? 1 : 0) + (cursor.z & 15) - 8) + (pos[0] ? 0.999 : 0.001) + (cursor.x & 15) - 8, + (pos[1] ? height - 0.001 : 0.001) + (cursor.y & 15) - 8, + (pos[2] ? 0.999 : 0.001) + (cursor.z & 15) - 8) attr.t_normals.push(...dir) attr.t_uvs.push(pos[3] * su + u, pos[4] * sv * (pos[1] ? 1 : height) + v) attr.t_colors.push(tint[0], tint[1], tint[2]) From 28e24a7a870a8b217f4d1d3b85f2b39473765c4f Mon Sep 17 00:00:00 2001 From: Wolf2323 Date: Tue, 4 Jun 2024 01:34:29 +0200 Subject: [PATCH 0101/1074] fix: fix rendering of Decorated Pot (#134) --- .../viewer/lib/mesher/test/tests.test.ts | 1 - prismarine-viewer/viewer/prepare/atlas.ts | 42 ++++++++++++--- .../blockModels/1.20/decorated_pot.json | 47 +++++++++++++++++ .../blockStates/1.20/decorated_pot.json | 19 +++++++ .../data/1.20/blockModels/decorated_pot.json | 47 +++++++++++++++++ .../data/1.20/blockStates/decorated_pot.json | 19 +++++++ .../viewer/prepare/moreGeneratedBlocks.ts | 51 +++++++++++++++++-- 7 files changed, 214 insertions(+), 12 deletions(-) create mode 100644 prismarine-viewer/viewer/prepare/blockModels/1.20/decorated_pot.json create mode 100644 prismarine-viewer/viewer/prepare/blockStates/1.20/decorated_pot.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/decorated_pot.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/decorated_pot.json diff --git a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts index 75dd98fa..5a80fa49 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts @@ -77,7 +77,6 @@ test('Known blocks are not rendered', () => { "cyan_wall_banner": true, "dark_oak_hanging_sign": true, "dark_oak_wall_hanging_sign": true, - "decorated_pot": true, "dragon_head": true, "dragon_wall_head": true, "end_gateway": true, diff --git a/prismarine-viewer/viewer/prepare/atlas.ts b/prismarine-viewer/viewer/prepare/atlas.ts index cb30b727..fc3e4029 100644 --- a/prismarine-viewer/viewer/prepare/atlas.ts +++ b/prismarine-viewer/viewer/prepare/atlas.ts @@ -35,7 +35,7 @@ export type JsonAtlas = { } } -export const makeTextureAtlas = (input: string[], getInputData: (name) => { contents: string, tileWidthMult?: number }, tilesCount = input.length, suSvOptimize: 'remove' | null = null): { +export const makeTextureAtlas = (input: string[], getInputData: (name) => { contents: string, tileWidthMult?: number, origSizeTextures?}, tilesCount = input.length, suSvOptimize: 'remove' | null = null): { image: Buffer, canvas: Canvas, json: JsonAtlas @@ -49,6 +49,7 @@ export const makeTextureAtlas = (input: string[], getInputData: (name) => { cont const texturesIndex = {} + let skipXY = [] as [x: number, y: number][] let offset = 0 const suSv = tileSize / imgSize for (const i in input) { @@ -56,20 +57,44 @@ export const makeTextureAtlas = (input: string[], getInputData: (name) => { cont const x = (pos % texSize) * tileSize const y = Math.floor(pos / texSize) * tileSize + if (skipXY.some(([sx, sy]) => sx === x + 1 && sy === y)) { + // todo more offsets + offset++ + } + const img = new Image() - const keyValue = input[i]; - const inputData = getInputData(keyValue); + const keyValue = input[i] + const inputData = getInputData(keyValue) img.src = inputData.contents - const renderWidth = tileSize * (inputData.tileWidthMult ?? 1) - g.drawImage(img, 0, 0, renderWidth, tileSize, x, y, renderWidth, tileSize) + let su = suSv + let sv = suSv + let renderWidth = tileSize * (inputData.tileWidthMult ?? 1) + let renderHeight = tileSize + if (inputData.origSizeTextures?.[keyValue]) { + // todo check have enough space + renderWidth = Math.ceil(img.width / tileSize) * tileSize + renderHeight = Math.ceil(img.height / tileSize) * tileSize + su = renderWidth / imgSize + sv = renderHeight / imgSize + if (renderWidth > tileSize) { + offset += Math.ceil(renderWidth / tileSize) - 1 + } + if (renderHeight > tileSize) { + const skipYs = Math.ceil(renderHeight / tileSize) - 1 + for (let i = 1; i <= skipYs; i++) { + skipXY.push([x, y + i]) + } + } + } + g.drawImage(img, 0, 0, renderWidth, renderHeight, x, y, renderWidth, renderHeight) const cleanName = keyValue.split('.').slice(0, -1).join('.') || keyValue texturesIndex[cleanName] = { u: x / imgSize, v: y / imgSize, ...suSvOptimize === 'remove' ? {} : { - su: suSv, - sv: suSv + su: su, + sv: sv } } } @@ -91,7 +116,7 @@ export function makeBlockTextureAtlas (mcAssets: McAssets) { // const textureFiles = mostEncounteredBlocks.map(x => x + '.png') textureFiles.unshift(...localTextures) - const { generated: additionalTextures, twoTileTextures } = getAdditionalTextures() + const { generated: additionalTextures, twoTileTextures, origSizeTextures } = getAdditionalTextures() textureFiles.push(...Object.keys(additionalTextures)) const atlas = makeTextureAtlas(textureFiles, name => { @@ -105,6 +130,7 @@ export function makeBlockTextureAtlas (mcAssets: McAssets) { return { contents, tileWidthMult: twoTileTextures.includes(name) ? 2 : undefined, + origSizeTextures } }) return atlas diff --git a/prismarine-viewer/viewer/prepare/blockModels/1.20/decorated_pot.json b/prismarine-viewer/viewer/prepare/blockModels/1.20/decorated_pot.json new file mode 100644 index 00000000..364c72d4 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/blockModels/1.20/decorated_pot.json @@ -0,0 +1,47 @@ +{ + "texture_size": [32, 32], + "textures": { + "0": "entity/decorated_pot/decorated_pot_base" + }, + "elements": [ + { + "name": "Body", + "from": [1, 0, 1], + "to": [15, 16, 15], + "faces": { + "north": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, + "east": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, + "south": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, + "west": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, + "up": {"uv": [7, 6.5, 14, 13.5], "texture": "#0"}, + "down": {"uv": [7, 6.5, 14, 13.5], "texture": "#0"} + } + }, + { + "name": "Neck", + "from": [5, 16, 5], + "to": [11, 17, 11], + "faces": { + "north": {"uv": [6, 5.5, 9, 6], "texture": "#0"}, + "east": {"uv": [9, 5.5, 12, 6], "texture": "#0"}, + "south": {"uv": [2.5, 5.5, 5.5, 6], "texture": "#0"}, + "west": {"uv": [0, 5.5, 3, 6], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "name": "Head", + "from": [4, 17, 4], + "to": [12, 20, 12], + "faces": { + "north": {"uv": [0, 4, 4, 5.5], "texture": "#0"}, + "east": {"uv": [4, 4, 8, 5.5], "texture": "#0"}, + "south": {"uv": [8, 4, 12, 5.5], "texture": "#0"}, + "west": {"uv": [12, 4, 16, 5.5], "texture": "#0"}, + "up": {"uv": [4, 0, 8, 4], "texture": "#0"}, + "down": {"uv": [8, 0, 12, 4], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/blockStates/1.20/decorated_pot.json b/prismarine-viewer/viewer/prepare/blockStates/1.20/decorated_pot.json new file mode 100644 index 00000000..5b46a220 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/blockStates/1.20/decorated_pot.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "decorated_pot", + "y": 90 + }, + "facing=south": { + "model": "decorated_pot", + "y": 180 + }, + "facing=west": { + "model": "decorated_pot", + "y": 270 + }, + "facing=north": { + "model": "decorated_pot" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/decorated_pot.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/decorated_pot.json new file mode 100644 index 00000000..364c72d4 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/decorated_pot.json @@ -0,0 +1,47 @@ +{ + "texture_size": [32, 32], + "textures": { + "0": "entity/decorated_pot/decorated_pot_base" + }, + "elements": [ + { + "name": "Body", + "from": [1, 0, 1], + "to": [15, 16, 15], + "faces": { + "north": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, + "east": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, + "south": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, + "west": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, + "up": {"uv": [7, 6.5, 14, 13.5], "texture": "#0"}, + "down": {"uv": [7, 6.5, 14, 13.5], "texture": "#0"} + } + }, + { + "name": "Neck", + "from": [5, 16, 5], + "to": [11, 17, 11], + "faces": { + "north": {"uv": [6, 5.5, 9, 6], "texture": "#0"}, + "east": {"uv": [9, 5.5, 12, 6], "texture": "#0"}, + "south": {"uv": [2.5, 5.5, 5.5, 6], "texture": "#0"}, + "west": {"uv": [0, 5.5, 3, 6], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "name": "Head", + "from": [4, 17, 4], + "to": [12, 20, 12], + "faces": { + "north": {"uv": [0, 4, 4, 5.5], "texture": "#0"}, + "east": {"uv": [4, 4, 8, 5.5], "texture": "#0"}, + "south": {"uv": [8, 4, 12, 5.5], "texture": "#0"}, + "west": {"uv": [12, 4, 16, 5.5], "texture": "#0"}, + "up": {"uv": [4, 0, 8, 4], "texture": "#0"}, + "down": {"uv": [8, 0, 12, 4], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/decorated_pot.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/decorated_pot.json new file mode 100644 index 00000000..5b46a220 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/decorated_pot.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "decorated_pot", + "y": 90 + }, + "facing=south": { + "model": "decorated_pot", + "y": 180 + }, + "facing=west": { + "model": "decorated_pot", + "y": 270 + }, + "facing=north": { + "model": "decorated_pot" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts index ffb1a705..695464ea 100644 --- a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts +++ b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts @@ -7,6 +7,7 @@ import { fileURLToPath } from 'url' // todo refactor const twoTileTextures: string[] = [] +const origSizeTextures: string[] = [] let currentImage: Jimp let currentBlockName: string let currentMcAssets: McAssets @@ -82,7 +83,7 @@ const getBlockTexturesFromJimp = async > (sides: for (const [side, jimp] of Object.entries(sides)) { const textureName = `${textureNameBase}_${side}` const sideTexture = withUv ? { uv: [0, 0, jimp.getWidth(), jimp.getHeight()], texture: textureName } : textureName - const base64 = await jimp.getBase64Async(jimp.getMIME()) + const base64Url = await jimp.getBase64Async(jimp.getMIME()) if (side === 'side') { sidesTextures['north'] = sideTexture sidesTextures['east'] = sideTexture @@ -91,7 +92,7 @@ const getBlockTexturesFromJimp = async > (sides: } else { sidesTextures[side] = sideTexture } - generatedImageTextures[textureName] = base64 + generatedImageTextures[textureName] = base64Url } return sidesTextures @@ -229,6 +230,7 @@ const handleSign = async (dataBase: string, match: RegExpExecArray) => { twoTileTextures.push(blockTextures.up.texture) } +// TODO! should not be there! move to data with signs! const chestModels = { chest: { "parent": "block/block", @@ -401,6 +403,32 @@ const handleChest = async (dataBase: string, match: RegExpExecArray) => { currentMcAssets.blocksStates[currentBlockName] = blockStates } +function getParsedJSON (block: string, type: string) { + const versionParts = currentMcAssets.version.split(".") + const version = versionParts[0] + "." + versionParts[1] + return JSON.parse(fs.readFileSync(path.join(__dirname, `${type}/${version}/${block}.json`), 'utf-8')) +} + +function getBlockState (match: string) { + return getParsedJSON(match, 'blockStates') +} + +async function loadBlockModelTextures (dataBase: string, blockModel: any) { + for (const key in Object.entries(blockModel.textures)) { + const texture: string = blockModel.textures[key] + currentImage = await Jimp.read(dataBase + texture + '.png') + blockModel.textures.particle = texture + generatedImageTextures[texture] = `data:image/png;base64,${fs.readFileSync(path.join(dataBase, texture + '.png'), 'base64')}` + origSizeTextures[texture] = true + } +} + +async function getBlockModel (dataBase: string, block: string) { + const blockModel = getParsedJSON(block, 'blockModels') + await loadBlockModelTextures(dataBase, blockModel) + return blockModel +} + const handlers = [ [/(.+)_shulker_box$/, handleShulkerBox], [/^shulker_box$/, handleShulkerBox], @@ -427,6 +455,21 @@ export const tryHandleBlockEntity = async (dataBase, blockName) => { } } +const handleExternalData = async (dataBase: string, version: string) => { + const [major, minor] = version.split(".") + const dataVer = `${major}.${minor}` + if (!fs.existsSync(path.join(__dirname, 'data', dataVer))) return + const allModels = fs.readdirSync(path.join(__dirname, 'data', dataVer, 'blockModels')).map(x => x.replace('.json', '')) + for (const model of allModels) { + currentMcAssets.blocksModels[model] = await getBlockModel(dataBase, model) + } + + const allBlockStates = fs.readdirSync(path.join(__dirname, 'data', dataVer, 'blockStates')).map(x => x.replace('.json', '')) + for (const blockState of allBlockStates) { + currentMcAssets.blocksStates[blockState] = await getBlockState(blockState) + } +} + export const prepareMoreGeneratedBlocks = async (mcAssets: McAssets) => { const mcData = minecraftData(mcAssets.version) const allTheBlocks = mcData.blocksArray.map(x => x.name) @@ -447,6 +490,8 @@ export const prepareMoreGeneratedBlocks = async (mcAssets: McAssets) => { } } + await handleExternalData(mcAssets.directory, mcAssets.version) + const warnings: string[] = [] for (const [name, model] of Object.entries(mcAssets.blocksModels)) { if (Object.keys(model).length === 1 && model.textures) { @@ -462,5 +507,5 @@ export const prepareMoreGeneratedBlocks = async (mcAssets: McAssets) => { } export const getAdditionalTextures = () => { - return { generated: generatedImageTextures, twoTileTextures } + return { generated: generatedImageTextures, twoTileTextures, origSizeTextures } } From 228039c2450dcdee4a858b77ad740b99278e0ada Mon Sep 17 00:00:00 2001 From: Wolf2323 Date: Tue, 4 Jun 2024 12:41:53 +0200 Subject: [PATCH 0102/1074] cleanup external data handling in more generated blocks (#141) Co-authored-by: Vitaly Turovsky --- .../blockModels/1.20/decorated_pot.json | 47 ------------------- .../blockStates/1.20/decorated_pot.json | 19 -------- .../viewer/prepare/moreGeneratedBlocks.ts | 37 ++++++--------- 3 files changed, 14 insertions(+), 89 deletions(-) delete mode 100644 prismarine-viewer/viewer/prepare/blockModels/1.20/decorated_pot.json delete mode 100644 prismarine-viewer/viewer/prepare/blockStates/1.20/decorated_pot.json diff --git a/prismarine-viewer/viewer/prepare/blockModels/1.20/decorated_pot.json b/prismarine-viewer/viewer/prepare/blockModels/1.20/decorated_pot.json deleted file mode 100644 index 364c72d4..00000000 --- a/prismarine-viewer/viewer/prepare/blockModels/1.20/decorated_pot.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "texture_size": [32, 32], - "textures": { - "0": "entity/decorated_pot/decorated_pot_base" - }, - "elements": [ - { - "name": "Body", - "from": [1, 0, 1], - "to": [15, 16, 15], - "faces": { - "north": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, - "east": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, - "south": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, - "west": {"uv": [0, 6.5, 7, 13.5], "texture": "#0"}, - "up": {"uv": [7, 6.5, 14, 13.5], "texture": "#0"}, - "down": {"uv": [7, 6.5, 14, 13.5], "texture": "#0"} - } - }, - { - "name": "Neck", - "from": [5, 16, 5], - "to": [11, 17, 11], - "faces": { - "north": {"uv": [6, 5.5, 9, 6], "texture": "#0"}, - "east": {"uv": [9, 5.5, 12, 6], "texture": "#0"}, - "south": {"uv": [2.5, 5.5, 5.5, 6], "texture": "#0"}, - "west": {"uv": [0, 5.5, 3, 6], "texture": "#0"}, - "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, - "down": {"uv": [0, 0, 3, 3], "texture": "#0"} - } - }, - { - "name": "Head", - "from": [4, 17, 4], - "to": [12, 20, 12], - "faces": { - "north": {"uv": [0, 4, 4, 5.5], "texture": "#0"}, - "east": {"uv": [4, 4, 8, 5.5], "texture": "#0"}, - "south": {"uv": [8, 4, 12, 5.5], "texture": "#0"}, - "west": {"uv": [12, 4, 16, 5.5], "texture": "#0"}, - "up": {"uv": [4, 0, 8, 4], "texture": "#0"}, - "down": {"uv": [8, 0, 12, 4], "texture": "#0"} - } - } - ] -} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/blockStates/1.20/decorated_pot.json b/prismarine-viewer/viewer/prepare/blockStates/1.20/decorated_pot.json deleted file mode 100644 index 5b46a220..00000000 --- a/prismarine-viewer/viewer/prepare/blockStates/1.20/decorated_pot.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "variants": { - "facing=east": { - "model": "decorated_pot", - "y": 90 - }, - "facing=south": { - "model": "decorated_pot", - "y": 180 - }, - "facing=west": { - "model": "decorated_pot", - "y": 270 - }, - "facing=north": { - "model": "decorated_pot" - } - } -} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts index 695464ea..b343e595 100644 --- a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts +++ b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts @@ -403,18 +403,8 @@ const handleChest = async (dataBase: string, match: RegExpExecArray) => { currentMcAssets.blocksStates[currentBlockName] = blockStates } -function getParsedJSON (block: string, type: string) { - const versionParts = currentMcAssets.version.split(".") - const version = versionParts[0] + "." + versionParts[1] - return JSON.parse(fs.readFileSync(path.join(__dirname, `${type}/${version}/${block}.json`), 'utf-8')) -} - -function getBlockState (match: string) { - return getParsedJSON(match, 'blockStates') -} - async function loadBlockModelTextures (dataBase: string, blockModel: any) { - for (const key in Object.entries(blockModel.textures)) { + for (const key in blockModel.textures) { const texture: string = blockModel.textures[key] currentImage = await Jimp.read(dataBase + texture + '.png') blockModel.textures.particle = texture @@ -423,12 +413,6 @@ async function loadBlockModelTextures (dataBase: string, blockModel: any) { } } -async function getBlockModel (dataBase: string, block: string) { - const blockModel = getParsedJSON(block, 'blockModels') - await loadBlockModelTextures(dataBase, blockModel) - return blockModel -} - const handlers = [ [/(.+)_shulker_box$/, handleShulkerBox], [/^shulker_box$/, handleShulkerBox], @@ -458,15 +442,22 @@ export const tryHandleBlockEntity = async (dataBase, blockName) => { const handleExternalData = async (dataBase: string, version: string) => { const [major, minor] = version.split(".") const dataVer = `${major}.${minor}` - if (!fs.existsSync(path.join(__dirname, 'data', dataVer))) return - const allModels = fs.readdirSync(path.join(__dirname, 'data', dataVer, 'blockModels')).map(x => x.replace('.json', '')) - for (const model of allModels) { - currentMcAssets.blocksModels[model] = await getBlockModel(dataBase, model) + const baseDir = path.join(__dirname, 'data', dataVer) + if (!fs.existsSync(baseDir)) return + + const blockModelsDir = path.join(baseDir, 'blockModels') + const allBlockModels = fs.readdirSync(blockModelsDir).map(x => x.replace('.json', '')) + for (const blockModel of allBlockModels) { + const model = JSON.parse(fs.readFileSync(path.join(blockModelsDir, blockModel + '.json'), 'utf-8')) + currentMcAssets.blocksModels[blockModel] = model + await loadBlockModelTextures(dataBase, model) } - const allBlockStates = fs.readdirSync(path.join(__dirname, 'data', dataVer, 'blockStates')).map(x => x.replace('.json', '')) + const blockStatesDir = path.join(baseDir, 'blockStates') + const allBlockStates = fs.readdirSync(blockStatesDir).map(x => x.replace('.json', '')) for (const blockState of allBlockStates) { - currentMcAssets.blocksStates[blockState] = await getBlockState(blockState) + const state = JSON.parse(fs.readFileSync(path.join(blockStatesDir, blockState + '.json'), 'utf-8')) + currentMcAssets.blocksStates[blockState] = state } } From 32de8ebacda4e63ea93d73219e978ffd9c09123a Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 4 Jun 2024 18:00:42 +0300 Subject: [PATCH 0103/1074] fix: fix all known minecraft-protocol issues. Fixed auto-version. Fixed: kick messages are now always displayed! --- cypress/minecraft-server.mjs | 1 + pnpm-lock.yaml | 8 ++++---- src/index.ts | 27 +++++++++++++++++---------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/cypress/minecraft-server.mjs b/cypress/minecraft-server.mjs index 18f4e3db..32be0c9d 100644 --- a/cypress/minecraft-server.mjs +++ b/cypress/minecraft-server.mjs @@ -2,6 +2,7 @@ import mcServer from 'flying-squid' import defaultOptions from 'flying-squid/config/default-settings.json' assert { type: 'json' } +/** @type {Options} */ const serverOptions = { ...defaultOptions, 'online-mode': false, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6fdf4afa..8bf3f7d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,7 +138,7 @@ importers: version: 2.0.4 net-browserify: specifier: github:zardoy/prismarinejs-net-browserify - version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070 + version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/e7c50bf824ae5b4d987967fd921d8634dad03434 node-gzip: specifier: ^1.1.2 version: 1.1.2 @@ -6224,8 +6224,8 @@ packages: nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070: - resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070} + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/e7c50bf824ae5b4d987967fd921d8634dad03434: + resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/e7c50bf824ae5b4d987967fd921d8634dad03434} version: 0.2.4 nice-try@1.0.5: @@ -15990,7 +15990,7 @@ snapshots: nested-error-stacks@2.1.1: {} - net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d827dba61bd2f9ac9a6086fe2079a0fccadd070: + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/e7c50bf824ae5b4d987967fd921d8634dad03434: dependencies: body-parser: 1.20.2 express: 4.18.2 diff --git a/src/index.ts b/src/index.ts index d02f7b92..e89bc186 100644 --- a/src/index.ts +++ b/src/index.ts @@ -186,7 +186,7 @@ let lastMouseMove: number const updateCursor = () => { worldInteractions.update() } -function onCameraMove (e) { +function onCameraMove(e) { if (e.type !== 'touchmove' && !pointerLock.hasPointerLock) return e.stopPropagation?.() const now = performance.now() @@ -212,7 +212,7 @@ contro.on('stickMovement', ({ stick, vector }) => { miscUiState.usingGamepadInput = true }) -function hideCurrentScreens () { +function hideCurrentScreens() { activeModalStacks['main-menu'] = [...activeModalStack] insertActiveModalStack('', []) } @@ -220,7 +220,7 @@ function hideCurrentScreens () { const loadSingleplayer = (serverOverrides = {}, flattenedServerOverrides = {}) => { void connect({ singleplayer: true, username: options.localUsername, password: '', serverOverrides, serverOverridesFlat: flattenedServerOverrides }) } -function listenGlobalEvents () { +function listenGlobalEvents() { window.addEventListener('connect', e => { const options = (e as CustomEvent).detail void connect(options) @@ -261,7 +261,7 @@ const cleanConnectIp = (host: string | undefined, defaultPort: string | undefine } } -async function connect (connectOptions: ConnectOptions) { +async function connect(connectOptions: ConnectOptions) { if (miscUiState.gameLoaded) return miscUiState.hasErrors = false lastConnectOptions.value = connectOptions @@ -444,18 +444,18 @@ async function connect (connectOptions: ConnectOptions) { } : {}, ...singleplayer ? { version: serverOptions.version, - connect () { }, + connect() { }, Client: CustomChannelClient as any, } : {}, username, password, viewDistance: renderDistance, checkTimeoutInterval: 240 * 1000, - noPongTimeout: 240 * 1000, + // noPongTimeout: 240 * 1000, closeTimeout: 240 * 1000, respawn: options.autoRespawn, maxCatchupTicks: 0, - async versionSelectedHook (client) { + async versionSelectedHook(client) { await downloadMcData(client.version) setLoadingScreenStatus(initialLoadingText) }, @@ -484,6 +484,13 @@ async function connect (connectOptions: ConnectOptions) { //@ts-expect-error bot._client.socket._ws.addEventListener('close', () => { console.log('WebSocket connection closed') + setTimeout(() => { + if (bot) { + bot.emit('end', 'WebSocket connection closed with unknown reason') + } + }, 1000) + }) + bot._client.socket.on('close', () => { setTimeout(() => { if (bot) { bot.emit('end', 'WebSocket connection closed with unknown reason') @@ -606,7 +613,7 @@ async function connect (connectOptions: ConnectOptions) { dayCycle() // Bot position callback - function botPosition () { + function botPosition() { viewer.world.lastCamUpdate = Date.now() // this might cause lag, but not sure viewer.setFirstPersonCamera(bot.entity.position, bot.entity.yaw, bot.entity.pitch) @@ -626,7 +633,7 @@ async function connect (connectOptions: ConnectOptions) { bot.entity.yaw -= x } - function changeCallback () { + function changeCallback() { if (notificationProxy.id === 'pointerlockchange') { hideNotification() } @@ -895,7 +902,7 @@ downloadAndOpenFile().then((downloadAction) => { const unsubscribe = subscribe(miscUiState, checkCanDisplay) checkCanDisplay() // eslint-disable-next-line no-inner-declarations - function checkCanDisplay () { + function checkCanDisplay() { if (miscUiState.appConfig) { unsubscribe() openServerEditor() From 423aa6a49c75022e48e636b3eaa21509810bfef4 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 4 Jun 2024 18:04:34 +0300 Subject: [PATCH 0104/1074] fix eslint --- src/index.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index e89bc186..07781028 100644 --- a/src/index.ts +++ b/src/index.ts @@ -186,7 +186,7 @@ let lastMouseMove: number const updateCursor = () => { worldInteractions.update() } -function onCameraMove(e) { +function onCameraMove (e) { if (e.type !== 'touchmove' && !pointerLock.hasPointerLock) return e.stopPropagation?.() const now = performance.now() @@ -212,7 +212,7 @@ contro.on('stickMovement', ({ stick, vector }) => { miscUiState.usingGamepadInput = true }) -function hideCurrentScreens() { +function hideCurrentScreens () { activeModalStacks['main-menu'] = [...activeModalStack] insertActiveModalStack('', []) } @@ -220,7 +220,7 @@ function hideCurrentScreens() { const loadSingleplayer = (serverOverrides = {}, flattenedServerOverrides = {}) => { void connect({ singleplayer: true, username: options.localUsername, password: '', serverOverrides, serverOverridesFlat: flattenedServerOverrides }) } -function listenGlobalEvents() { +function listenGlobalEvents () { window.addEventListener('connect', e => { const options = (e as CustomEvent).detail void connect(options) @@ -261,7 +261,7 @@ const cleanConnectIp = (host: string | undefined, defaultPort: string | undefine } } -async function connect(connectOptions: ConnectOptions) { +async function connect (connectOptions: ConnectOptions) { if (miscUiState.gameLoaded) return miscUiState.hasErrors = false lastConnectOptions.value = connectOptions @@ -444,7 +444,7 @@ async function connect(connectOptions: ConnectOptions) { } : {}, ...singleplayer ? { version: serverOptions.version, - connect() { }, + connect () { }, Client: CustomChannelClient as any, } : {}, username, @@ -455,7 +455,7 @@ async function connect(connectOptions: ConnectOptions) { closeTimeout: 240 * 1000, respawn: options.autoRespawn, maxCatchupTicks: 0, - async versionSelectedHook(client) { + async versionSelectedHook (client) { await downloadMcData(client.version) setLoadingScreenStatus(initialLoadingText) }, @@ -613,7 +613,7 @@ async function connect(connectOptions: ConnectOptions) { dayCycle() // Bot position callback - function botPosition() { + function botPosition () { viewer.world.lastCamUpdate = Date.now() // this might cause lag, but not sure viewer.setFirstPersonCamera(bot.entity.position, bot.entity.yaw, bot.entity.pitch) @@ -633,7 +633,7 @@ async function connect(connectOptions: ConnectOptions) { bot.entity.yaw -= x } - function changeCallback() { + function changeCallback () { if (notificationProxy.id === 'pointerlockchange') { hideNotification() } @@ -902,7 +902,7 @@ downloadAndOpenFile().then((downloadAction) => { const unsubscribe = subscribe(miscUiState, checkCanDisplay) checkCanDisplay() // eslint-disable-next-line no-inner-declarations - function checkCanDisplay() { + function checkCanDisplay () { if (miscUiState.appConfig) { unsubscribe() openServerEditor() From 98da719e08495d75dfac919477ab0d71bf676a9e Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 5 Jun 2024 11:58:26 +0300 Subject: [PATCH 0105/1074] fix show ui when has modals --- src/reactUi.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/reactUi.tsx b/src/reactUi.tsx index 2f57e6f0..449d7883 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -4,7 +4,7 @@ import { useSnapshot } from 'valtio' import { QRCodeSVG } from 'qrcode.react' import { createPortal } from 'react-dom' import { useEffect, useMemo, useState } from 'react' -import { miscUiState } from './globalState' +import { activeModalStack, miscUiState } from './globalState' import DeathScreenProvider from './react/DeathScreenProvider' import OptionsRenderApp from './react/OptionsRenderApp' import MainMenuRenderApp from './react/MainMenuRenderApp' @@ -95,7 +95,9 @@ const InGameComponent = ({ children }) => { } const InGameUi = () => { - const { gameLoaded, showUI } = useSnapshot(miscUiState) + const { gameLoaded, showUI: showUIRaw } = useSnapshot(miscUiState) + const hasModals = useSnapshot(activeModalStack).length > 0 + const showUI = showUIRaw || hasModals if (!gameLoaded) return return <> From 9a41214674458eea922298a2ae66d263b74705fa Mon Sep 17 00:00:00 2001 From: Vitaly Date: Thu, 6 Jun 2024 16:52:05 +0300 Subject: [PATCH 0106/1074] fix: fix breaking mesh was highlighted --- src/worldInteractions.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index 330dabd7..0245d418 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -68,7 +68,8 @@ class WorldInteraction { } const breakMaterial = new THREE.MeshBasicMaterial({ transparent: true, - blending: THREE.MultiplyBlending + blending: THREE.MultiplyBlending, + alphaTest: 0.5, }) this.blockBreakMesh = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), breakMaterial) this.blockBreakMesh.visible = false From d04a66738ef5c713379f155ac1f2bfaf1d610e33 Mon Sep 17 00:00:00 2001 From: arhellist <92224498+arhellist@users.noreply.github.com> Date: Thu, 6 Jun 2024 18:23:43 +0400 Subject: [PATCH 0107/1074] fix game crash (#144) --- src/react/DebugOverlay.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/react/DebugOverlay.tsx b/src/react/DebugOverlay.tsx index dd288b49..c83418f5 100644 --- a/src/react/DebugOverlay.tsx +++ b/src/react/DebugOverlay.tsx @@ -73,7 +73,7 @@ export default () => { } } - useMemo(() => { + useEffect(() => { document.addEventListener('keydown', handleF3) const packetsUpdateInterval = setInterval(() => { setPacketsString(prev => `↓ ${received.current.count} (${(received.current.size / 1024).toFixed(2)} KB/s, ${getFixedFilesize(receivedTotal.current)}) ↑ ${sent.current.count}`) From fec59aac03c5d04c15f9e1932c154fb26b694582 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 6 Jun 2024 17:30:11 +0300 Subject: [PATCH 0108/1074] up mineflayer --- package.json | 2 +- pnpm-lock.yaml | 49 ++++++++++--------------------------------------- src/index.ts | 9 --------- 3 files changed, 11 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 9451b266..fa28ae5d 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,7 @@ "http-server": "^14.1.1", "https-browserify": "^1.0.0", "minecraft-inventory-gui": "github:zardoy/minecraft-inventory-gui#next", - "mineflayer": "github:PrismarineJS/mineflayer", + "mineflayer": "github:zardoy/mineflayer", "mineflayer-pathfinder": "^2.4.4", "npm-run-all": "^4.1.5", "os-browserify": "^0.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8bf3f7d0..f9928dc6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -301,8 +301,8 @@ importers: specifier: github:zardoy/minecraft-inventory-gui#next version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5(@types/react@18.2.20)(react@18.2.0) mineflayer: - specifier: github:PrismarineJS/mineflayer - version: https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f(encoding@0.1.13) + specifier: github:zardoy/mineflayer + version: https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192(encoding@0.1.13) mineflayer-pathfinder: specifier: ^2.4.4 version: 2.4.4 @@ -6039,10 +6039,6 @@ packages: resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5} version: 1.0.1 - minecraft-protocol@1.47.0: - resolution: {integrity: sha512-IHL8faXLLIWv1O+2v2NgyKlooilu/OiSL9orI8Kqed/rZvVOrFPzs2PwMAYjpQX9gxLPhiSU19KqZ8CjfNuqhg==} - engines: {node: '>=14'} - minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc: resolution: {tarball: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc} version: 1.47.0 @@ -6071,8 +6067,8 @@ packages: resolution: {integrity: sha512-QMMNPx4IyZE7ydAzjvGLQLCnQNUOfkk1qVZKxTTS9q3qPTAewz4GhsVUBtbQ8LSbHthe5RcQ1Sgxs4wlIma/Qw==} engines: {node: '>=18'} - mineflayer@https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f: - resolution: {tarball: https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f} + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192: + resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192} version: 4.20.1 engines: {node: '>=18'} @@ -15685,31 +15681,6 @@ snapshots: - '@types/react' - react - minecraft-protocol@1.47.0(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13): - dependencies: - '@types/readable-stream': 4.0.12 - aes-js: 3.1.2 - buffer-equal: 1.0.1 - debug: 4.3.4(supports-color@8.1.1) - endian-toggle: 0.0.0 - lodash.get: 4.4.2 - lodash.merge: 4.6.2 - minecraft-data: 3.65.0 - minecraft-folder-path: 1.2.0 - node-fetch: 2.7.0(encoding@0.1.13) - node-rsa: 0.4.2 - prismarine-auth: 2.4.2(encoding@0.1.13) - prismarine-chat: 1.10.1 - prismarine-nbt: 2.5.0 - prismarine-realms: 1.3.2(encoding@0.1.13) - protodef: 1.15.0 - readable-stream: 4.5.2 - uuid-1345: 1.0.2 - yggdrasil: 1.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13): dependencies: '@types/readable-stream': 4.0.12 @@ -15804,11 +15775,11 @@ snapshots: mineflayer@4.20.1(encoding@0.1.13): dependencies: minecraft-data: 3.65.0 - minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/ccab9fb39681f3ebe0d264e2a3f833aa3c5a1ac7(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) + minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chat: 1.10.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -15824,14 +15795,14 @@ snapshots: - encoding - supports-color - mineflayer@https://codeload.github.com/PrismarineJS/mineflayer/tar.gz/5a544cf2547a6e0f1f17786962d77a33c661c02f(encoding@0.1.13): + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192(encoding@0.1.13): dependencies: minecraft-data: 3.65.0 - minecraft-protocol: 1.47.0(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) + minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 - prismarine-chat: 1.9.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) + prismarine-chat: 1.10.1 + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 diff --git a/src/index.ts b/src/index.ts index 07781028..3b48a492 100644 --- a/src/index.ts +++ b/src/index.ts @@ -568,15 +568,6 @@ async function connect (connectOptions: ConnectOptions) { window.Vec3 = Vec3 window.pathfinder = pathfinder - // patch mineflayer - // todo move to mineflayer - bot.inventory.on('updateSlot', (index) => { - if ((index as unknown as number) === bot.quickBarSlot + bot.inventory.hotbarStart) { - //@ts-expect-error - bot.emit('heldItemChanged') - } - }) - miscUiState.gameLoaded = true miscUiState.loadedServerIndex = connectOptions.serverIndex ?? '' customEvents.emit('gameLoaded') From bd54b5bd807534bb30deb7e0314f089bcee8d715 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 6 Jun 2024 19:09:07 +0300 Subject: [PATCH 0109/1074] fix: username override of servers was never used --- src/react/ServersList.tsx | 18 ++++++++++-------- src/react/ServersListProvider.tsx | 17 +++++++++-------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/react/ServersList.tsx b/src/react/ServersList.tsx index f6b89452..f3759bce 100644 --- a/src/react/ServersList.tsx +++ b/src/react/ServersList.tsx @@ -5,14 +5,12 @@ import Singleplayer from './Singleplayer' import Input from './Input' import Button from './Button' import PixelartIcon from './PixelartIcon' +import { BaseServerInfo } from './AddServerOrConnect' interface Props extends React.ComponentProps { - joinServer: (ip: string, overrides: { - username?: string - password?: string - proxy?: string - versionOverride?: string + joinServer: (info: BaseServerInfo, additional: { shouldSave?: boolean + index?: number }) => void initialProxies: SavedProxiesLocalStorage updateProxies: (proxies: SavedProxiesLocalStorage) => void @@ -67,9 +65,11 @@ export default ({ initialProxies, updateProxies: updateProxiesProp, joinServer, version = parts.at(-1)! ip = parts.slice(0, -1).join(':') } - joinServer(ip, { - shouldSave: save, + joinServer({ + ip, versionOverride: version, + }, { + shouldSave: save, }) }} > @@ -116,7 +116,9 @@ export default ({ initialProxies, updateProxies: updateProxiesProp, joinServer, serversLayout onWorldAction={(action, serverName) => { if (action === 'load') { - joinServer(serverName, {}) + joinServer({ + ip: serverName, + }, {}) } props.onWorldAction?.(action, serverName) }} diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index bb23004f..9772c9b4 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -231,10 +231,11 @@ const Inner = () => { } return { + joinServer={(overrides, { shouldSave }) => { + const indexOrIp = overrides.ip let ip = indexOrIp let server: StoreServerItem | undefined - if (overrides.shouldSave === undefined) { + if (shouldSave === undefined) { // hack: inner component doesn't know of overrides for existing servers server = serversListSorted.find(s => s.index.toString() === indexOrIp)! ip = server.ip @@ -242,7 +243,7 @@ const Inner = () => { } const lastJoinedUsername = serversListSorted.find(s => s.usernameOverride)?.usernameOverride - let username = overrides.username || defaultUsername + let username = overrides.usernameOverride || defaultUsername if (!username) { username = prompt('Username', lastJoinedUsername || '') if (!username) return @@ -251,13 +252,13 @@ const Inner = () => { const options = { username, server: normalizeIp(ip), - proxy: overrides.proxy || selectedProxy, + proxy: overrides.proxyOverride || selectedProxy, botVersion: overrides.versionOverride ?? /* legacy */ overrides['version'], - password: overrides.password, + password: overrides.passwordOverride, ignoreQs: true, autoLoginPassword: server?.autoLogin?.[username], onSuccessfulPlay () { - if (overrides.shouldSave && !serversList.some(s => s.ip === ip)) { + if (shouldSave && !serversList.some(s => s.ip === ip)) { const newServersList: StoreServerItem[] = [...serversList, { ip, lastJoined: Date.now(), @@ -267,7 +268,7 @@ const Inner = () => { setNewServersList(newServersList) // component is not mounted } - if (overrides.shouldSave === undefined) { // loading saved + if (shouldSave === undefined) { // loading saved // find and update const server = serversList.find(s => s.ip === ip) if (server) { @@ -286,7 +287,7 @@ const Inner = () => { localStorage.setItem('selectedProxy', selectedProxy) } }, - serverIndex: overrides.shouldSave ? serversList.length.toString() : indexOrIp // assume last + serverIndex: shouldSave ? serversList.length.toString() : indexOrIp // assume last } satisfies ConnectOptions dispatchEvent(new CustomEvent('connect', { detail: options })) // qsOptions From aa18c3cbbdd1dd770f75f6695dd6bfff15b61a51 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 6 Jun 2024 19:52:12 +0300 Subject: [PATCH 0110/1074] add ping proxy implementation --- src/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/index.ts b/src/index.ts index 3b48a492..fe584b4d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -498,6 +498,22 @@ async function connect (connectOptions: ConnectOptions) { }) }) }) + let i = 0 + //@ts-expect-error + bot.pingProxy = async () => { + const curI = ++i + return new Promise(resolve => { + //@ts-expect-error + bot._client.socket._ws.send(`ping:${curI}`) + const date = Date.now() + const onPong = (received) => { + if (received !== curI.toString()) return + bot._client.socket.off('pong' as any, onPong) + resolve(Date.now() - date) + } + bot._client.socket.on('pong' as any, onPong) + }) + } } // socket setup actually can be delayed because of dns lookup if (bot._client.socket) { From 1e741c7c7a44fd783c2f76875b2d20cc618f8683 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 6 Jun 2024 19:53:08 +0300 Subject: [PATCH 0111/1074] up net-browserify --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9928dc6..7ced3b41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,7 +138,7 @@ importers: version: 2.0.4 net-browserify: specifier: github:zardoy/prismarinejs-net-browserify - version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/e7c50bf824ae5b4d987967fd921d8634dad03434 + version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d4650ff39943d1358a05d7197c3caa12fa8fb99 node-gzip: specifier: ^1.1.2 version: 1.1.2 @@ -6220,8 +6220,8 @@ packages: nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/e7c50bf824ae5b4d987967fd921d8634dad03434: - resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/e7c50bf824ae5b4d987967fd921d8634dad03434} + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d4650ff39943d1358a05d7197c3caa12fa8fb99: + resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d4650ff39943d1358a05d7197c3caa12fa8fb99} version: 0.2.4 nice-try@1.0.5: @@ -15961,7 +15961,7 @@ snapshots: nested-error-stacks@2.1.1: {} - net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/e7c50bf824ae5b4d987967fd921d8634dad03434: + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d4650ff39943d1358a05d7197c3caa12fa8fb99: dependencies: body-parser: 1.20.2 express: 4.18.2 From 4c03d68b03f4748d41fe238a4aa81a8f14ed0089 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 7 Jun 2024 00:22:41 +0300 Subject: [PATCH 0112/1074] up browserify --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ced3b41..10add82d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,7 +138,7 @@ importers: version: 2.0.4 net-browserify: specifier: github:zardoy/prismarinejs-net-browserify - version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d4650ff39943d1358a05d7197c3caa12fa8fb99 + version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/2ed580ba422781addd1166ab31eede5914cd5f61 node-gzip: specifier: ^1.1.2 version: 1.1.2 @@ -6220,8 +6220,8 @@ packages: nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d4650ff39943d1358a05d7197c3caa12fa8fb99: - resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d4650ff39943d1358a05d7197c3caa12fa8fb99} + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/2ed580ba422781addd1166ab31eede5914cd5f61: + resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/2ed580ba422781addd1166ab31eede5914cd5f61} version: 0.2.4 nice-try@1.0.5: @@ -15961,7 +15961,7 @@ snapshots: nested-error-stacks@2.1.1: {} - net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/7d4650ff39943d1358a05d7197c3caa12fa8fb99: + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/2ed580ba422781addd1166ab31eede5914cd5f61: dependencies: body-parser: 1.20.2 express: 4.18.2 From bbf8fbf4a5fed3387b2329f39d3037cde595dbff Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 7 Jun 2024 01:30:00 +0300 Subject: [PATCH 0113/1074] fix o.text.includes is not a function crash --- src/botUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/botUtils.ts b/src/botUtils.ts index 30e13834..79b10118 100644 --- a/src/botUtils.ts +++ b/src/botUtils.ts @@ -101,7 +101,7 @@ export const formatMessage = (message: MessageInput, mcData: IndexedData = globa msglist = msglist.map(msg => { // normalize § - if (!msg.text.includes('§')) return msg + if (!msg.text.includes?.('§')) return msg const newMsg = fromFormattedString(msg.text) return flat(newMsg) }).flat(Infinity) From 94c665d851f8366b31ca4aa8873526dd53840af8 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 8 Jun 2024 23:13:44 +0300 Subject: [PATCH 0114/1074] move everything to frequent update interval --- src/react/DebugOverlay.tsx | 7 +------ src/reactUi.tsx | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/react/DebugOverlay.tsx b/src/react/DebugOverlay.tsx index c83418f5..bb38672e 100644 --- a/src/react/DebugOverlay.tsx +++ b/src/react/DebugOverlay.tsx @@ -91,6 +91,7 @@ export default () => { setDimension(bot.game.dimension) setDay(bot.time.day) setCursorBlock(worldInteractions.cursorBlock) + setEntitiesCount(Object.values(bot.entities).length) }, 100) // @ts-expect-error @@ -101,12 +102,6 @@ export default () => { sent.current.count++ managePackets('sent', name, data) }) - bot.on('entitySpawn', () => { - setEntitiesCount(Object.values(bot.entities).length) - }) - bot.on('entityGone', () => { - setEntitiesCount(Object.values(bot.entities).length) - }) try { const gl = window.renderer.getContext() diff --git a/src/reactUi.tsx b/src/reactUi.tsx index 449d7883..8a9cc32c 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -98,7 +98,7 @@ const InGameUi = () => { const { gameLoaded, showUI: showUIRaw } = useSnapshot(miscUiState) const hasModals = useSnapshot(activeModalStack).length > 0 const showUI = showUIRaw || hasModals - if (!gameLoaded) return + if (!gameLoaded || !bot) return return <> From 6be0bc8c9a93d79f0524d0e8bdb7041941e5c27d Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 8 Jun 2024 23:20:07 +0300 Subject: [PATCH 0115/1074] fix: elytra equipped crashed hud bars fix sentry 5457375830 --- src/react/HudBarsProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/react/HudBarsProvider.tsx b/src/react/HudBarsProvider.tsx index 746d4819..ea78ae08 100644 --- a/src/react/HudBarsProvider.tsx +++ b/src/react/HudBarsProvider.tsx @@ -82,7 +82,7 @@ export default () => { const item = bot.inventory.slots[slotIndex] ?? null if (!item) continue const armorName = item.name.split('_') - points += armor[armorName[0]][armorName[1]] + points += armor[armorName[0]]?.[armorName[1]] ?? 0 } setArmorValue(points) } From 409577d8e0b272ec155e9cbfc96e94a0295b49de Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 9 Jun 2024 00:19:08 +0300 Subject: [PATCH 0116/1074] up net --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 10add82d..38a9ebb6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,7 +138,7 @@ importers: version: 2.0.4 net-browserify: specifier: github:zardoy/prismarinejs-net-browserify - version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/2ed580ba422781addd1166ab31eede5914cd5f61 + version: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/99434199f25d3c6bbe15833bb78ec40b07c2df6f node-gzip: specifier: ^1.1.2 version: 1.1.2 @@ -6220,8 +6220,8 @@ packages: nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/2ed580ba422781addd1166ab31eede5914cd5f61: - resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/2ed580ba422781addd1166ab31eede5914cd5f61} + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/99434199f25d3c6bbe15833bb78ec40b07c2df6f: + resolution: {tarball: https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/99434199f25d3c6bbe15833bb78ec40b07c2df6f} version: 0.2.4 nice-try@1.0.5: @@ -15961,7 +15961,7 @@ snapshots: nested-error-stacks@2.1.1: {} - net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/2ed580ba422781addd1166ab31eede5914cd5f61: + net-browserify@https://codeload.github.com/zardoy/prismarinejs-net-browserify/tar.gz/99434199f25d3c6bbe15833bb78ec40b07c2df6f: dependencies: body-parser: 1.20.2 express: 4.18.2 From 6268561e4148dbaec0de0c6965e3423ccb709849 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 9 Jun 2024 01:09:02 +0300 Subject: [PATCH 0117/1074] make inputs in server editor a bit smaller, fix proxy select --- src/react/AddServerOrConnect.tsx | 60 +++++++++++++++++++------------- src/react/ServersList.tsx | 4 +-- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/react/AddServerOrConnect.tsx b/src/react/AddServerOrConnect.tsx index 500c1e61..d74ff8fe 100644 --- a/src/react/AddServerOrConnect.tsx +++ b/src/react/AddServerOrConnect.tsx @@ -23,6 +23,8 @@ interface Props { defaults?: Pick } +const ELEMENTS_WIDTH = 190 + export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQs, onQsConnect, defaults }: Props) => { const qsParams = parseQs ? new URLSearchParams(window.location.search) : undefined @@ -41,24 +43,25 @@ export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQ const lockConnect = qsParams?.get('lockConnect') === 'true' return - { - e.preventDefault() - let ip = serverIp.includes(':') ? serverIp : `${serverIp}:${serverPort}` - ip = ip.replace(/:$/, '') - onConfirm({ - name: serverName, - ip, - versionOverride, - proxyOverride, - usernameOverride, - passwordOverride - }) - }} + { + e.preventDefault() + let ip = serverIp.includes(':') ? serverIp : `${serverIp}:${serverPort}` + ip = ip.replace(/:$/, '') + onConfirm({ + name: serverName, + ip, + versionOverride, + proxyOverride, + usernameOverride, + passwordOverride + }) + }} >
setProxyOverride(value)} placeholder={defaults?.proxyOverride} /> setUsernameOverride(value)} placeholder={defaults?.usernameOverride} /> setPasswordOverride(value)} /* placeholder='For advanced usage only' */ /> - {!lockConnect && <>} + {!lockConnect && <> + { + onBack() + }}>Cancel + Save + } {qsParams?.get('ip') &&
- + >Connect
}
} +const ButtonWrapper = ({ ...props }: React.ComponentProps) => { + props.style ??= {} + props.style.width = ELEMENTS_WIDTH + return
From 05a0d3a184ae4478470f11046b89d7f45160b4a1 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 9 Jun 2024 02:02:26 +0300 Subject: [PATCH 0118/1074] fix: attack entities on left click not on right click --- src/worldInteractions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index 0245d418..49c21c2e 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -90,7 +90,7 @@ class WorldInteraction { const entity = getEntityCursor() - if (entity && e.button === 2) { + if (entity && e.button === 0) { bot.attack(entity) } else { // bot From 353bec4c6b718ab3a2b54f147a35d04fa274c058 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sun, 9 Jun 2024 18:12:34 +0300 Subject: [PATCH 0119/1074] fix: fix entity label display for older versions of minecraft --- prismarine-viewer/viewer/lib/entities.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/prismarine-viewer/viewer/lib/entities.js b/prismarine-viewer/viewer/lib/entities.js index 28fc6d89..94f06e0c 100644 --- a/prismarine-viewer/viewer/lib/entities.js +++ b/prismarine-viewer/viewer/lib/entities.js @@ -267,11 +267,15 @@ export class Entities extends EventEmitter { } - displaySimpleText(jsonLike) { + parseEntityLabel(jsonLike) { if (!jsonLike) return - const parsed = typeof jsonLike === 'string' ? mojangson.simplify(mojangson.parse(jsonLike)) : nbt.simplify(jsonLike) - const text = flat(parsed).map(x => x.text) - return text.join('') + try { + const parsed = typeof jsonLike === 'string' ? mojangson.simplify(mojangson.parse(jsonLike)) : nbt.simplify(jsonLike) + const text = flat(parsed).map(x => x.text) + return text.join('') + } catch (err) { + return jsonLike + } } update(/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) { @@ -410,7 +414,7 @@ export class Entities extends EventEmitter { } } // not player - const displayText = entity.metadata?.[3] && this.displaySimpleText(entity.metadata[2]) + const displayText = entity.metadata?.[3] && this.parseEntityLabel(entity.metadata[2]) if (entity.name !== 'player' && displayText) { addNametag({ ...entity, username: displayText }, this.entitiesOptions, this.entities[entity.id].children.find(c => c.name === 'mesh')) } From 7f3d5ca1f0ead78528f065c55ba3724f951b875b Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 10 Jun 2024 03:27:34 +0300 Subject: [PATCH 0120/1074] rename project to minecraft-web-client fixes issue146 --- README.NPM.MD | 2 +- package.json | 2 +- package.npm.json | 2 +- scripts/downloadSoundsMap.mjs | 2 +- scripts/prepareSounds.mjs | 8 ++++---- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.NPM.MD b/README.NPM.MD index 24c90bc9..c036adba 100644 --- a/README.NPM.MD +++ b/README.NPM.MD @@ -24,7 +24,7 @@ const App = () => { } ``` -See [Storybook](https://mcraft.fun/storybook/) or [Storybook (Mirror link)](https://mcon.vercel.app/storybook/) for more examples and full components list. Also take a look at the full [standalone example](https://github.com/zardoy/prismarine-web-client/tree/experiments/UiStandaloneExample.tsx). +See [Storybook](https://mcraft.fun/storybook/) or [Storybook (Mirror link)](https://mcon.vercel.app/storybook/) for more examples and full components list. Also take a look at the full [standalone example](https://github.com/zardoy/minecraft-web-client/tree/experiments/UiStandaloneExample.tsx). There are two types of components: diff --git a/package.json b/package.json index fa28ae5d..7bbde636 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "prismarine-web-client", + "name": "minecraft-web-client", "version": "0.0.0-dev", "description": "A minecraft client running in a browser", "scripts": { diff --git a/package.npm.json b/package.npm.json index bae8b60f..7e13d67b 100644 --- a/package.npm.json +++ b/package.npm.json @@ -26,7 +26,7 @@ }, "module": "./dist/react/npmReactComponents.js", "types": "./dist/react/npmReactComponents.d.ts", - "repository": "zardoy/prismarine-web-client", + "repository": "zardoy/minecraft-web-client", "version": "0.0.0-dev", "dependencies": {}, "peerDependencies": { diff --git a/scripts/downloadSoundsMap.mjs b/scripts/downloadSoundsMap.mjs index 066a3df7..3c335f8f 100644 --- a/scripts/downloadSoundsMap.mjs +++ b/scripts/downloadSoundsMap.mjs @@ -1,6 +1,6 @@ import fs from 'fs' -const url = 'https://github.com/zardoy/prismarine-web-client/raw/sounds-generated/sounds.js' +const url = 'https://github.com/zardoy/minecraft-web-client/raw/sounds-generated/sounds.js' const savePath = 'dist/sounds.js' fetch(url).then(res => res.text()).then(data => { fs.writeFileSync(savePath, data, 'utf8') diff --git a/scripts/prepareSounds.mjs b/scripts/prepareSounds.mjs index 4ed119cb..8f3e5bef 100644 --- a/scripts/prepareSounds.mjs +++ b/scripts/prepareSounds.mjs @@ -61,7 +61,7 @@ const downloadAllSounds = async () => { } prevSounds = soundAssets } - async function downloadSound ({ name, hash, size }, namePath, log) { + async function downloadSound({ name, hash, size }, namePath, log) { const savePath = path.resolve(`generated/sounds/${namePath}`) if (fs.existsSync(savePath)) { // console.log('skipped', name) @@ -86,7 +86,7 @@ const downloadAllSounds = async () => { } writer.close() } - async function downloadSounds (assets, addPath = '') { + async function downloadSounds(assets, addPath = '') { for (let i = 0; i < assets.length; i += 5) { await Promise.all(assets.slice(i, i + 5).map((asset, j) => downloadSound(asset, `${addPath}${asset.name}`, () => { console.log('downloading', addPath, asset.name, i + j, '/', assets.length) @@ -135,7 +135,7 @@ const convertSounds = async () => { } const CONCURRENCY = 5 - for(let i = 0; i < toConvert.length; i += CONCURRENCY) { + for (let i = 0; i < toConvert.length; i += CONCURRENCY) { await Promise.all(toConvert.slice(i, i + CONCURRENCY).map((oggPath, j) => convertSound(i + j))) } } @@ -221,7 +221,7 @@ const makeSoundsBundle = async () => { const allSoundsMeta = { format: 'mp3', - baseUrl: 'https://raw.githubusercontent.com/zardoy/prismarine-web-client/sounds-generated/sounds/' + baseUrl: 'https://raw.githubusercontent.com/zardoy/minecraft-web-client/sounds-generated/sounds/' } await build({ From 7f4edbedba20b22bd9b903c780a2c268679d6463 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 11 Jun 2024 03:26:24 +0300 Subject: [PATCH 0121/1074] rm manimali, replace with a better server --- config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.json b/config.json index 1bbbfd47..e4f86060 100644 --- a/config.json +++ b/config.json @@ -15,9 +15,9 @@ "description": "One of the best servers here. Join now!" }, { - "ip": "play.minemalia.com", + "ip": "sus.shhnowisnottheti.me", "version": "1.18.2", - "description": "Only login with existing accounts." + "description": "Creative, your own 'boxes' (islands)" } ] } From 38e4efc79b4054bfc354ccaaf6fe5c5f572a3978 Mon Sep 17 00:00:00 2001 From: Wolf2323 Date: Tue, 11 Jun 2024 20:14:58 +0200 Subject: [PATCH 0122/1074] fix: improve signs models & text, added all missing sign types (#143) Co-authored-by: Vitaly Turovsky --- prismarine-viewer/viewer/lib/mesher/models.ts | 4 +- .../viewer/lib/mesher/test/tests.test.ts | 22 -- .../viewer/lib/worldrendererThree.ts | 27 +- prismarine-viewer/viewer/prepare/atlas.ts | 49 +-- .../data/1.13/blockModels/sign/oak.json | 6 + .../data/1.13/blockModels/sign/oak_wall.json | 6 + .../data/1.13/blockModels/sign/sign.json | 140 +++++++ .../data/1.13/blockModels/sign/sign_wall.json | 72 ++++ .../data/1.13/blockStates/sign/sign.json | 67 ++++ .../data/1.13/blockStates/sign/wall_sign.json | 19 + .../data/1.14/blockModels/sign/acacia.json | 6 + .../1.14/blockModels/sign/acacia_wall.json | 6 + .../data/1.14/blockModels/sign/birch.json | 6 + .../1.14/blockModels/sign/birch_wall.json | 6 + .../data/1.14/blockModels/sign/dark_oak.json | 6 + .../1.14/blockModels/sign/dark_oak_wall.json | 6 + .../data/1.14/blockModels/sign/jungle.json | 6 + .../1.14/blockModels/sign/jungle_wall.json | 7 + .../data/1.14/blockModels/sign/spruce.json | 6 + .../1.14/blockModels/sign/spruce_wall.json | 6 + .../1.14/blockStates/sign/acacia_sign.json | 67 ++++ .../blockStates/sign/acacia_wall_sign.json | 19 + .../1.14/blockStates/sign/birch_sign.json | 67 ++++ .../blockStates/sign/birch_wall_sign.json | 19 + .../1.14/blockStates/sign/dark_oak_sign.json | 67 ++++ .../blockStates/sign/dark_oak_wall_sign.json | 19 + .../1.14/blockStates/sign/jungle_sign.json | 67 ++++ .../blockStates/sign/jungle_wall_sign.json | 19 + .../data/1.14/blockStates/sign/oak_sign.json | 67 ++++ .../1.14/blockStates/sign/oak_wall_sign.json | 19 + .../1.14/blockStates/sign/spruce_sign.json | 67 ++++ .../blockStates/sign/spruce_wall_sign.json | 19 + .../data/1.16/blockModels/sign/crimson.json | 6 + .../1.16/blockModels/sign/crimson_wall.json | 6 + .../data/1.16/blockModels/sign/warped.json | 6 + .../1.16/blockModels/sign/warped_wall.json | 6 + .../1.16/blockStates/sign/crimson_sign.json | 67 ++++ .../blockStates/sign/crimson_wall_sign.json | 19 + .../1.16/blockStates/sign/warped_sign.json | 67 ++++ .../blockStates/sign/warped_wall_sign.json | 19 + .../data/1.19/blockModels/sign/mangrove.json | 6 + .../1.19/blockModels/sign/mangrove_wall.json | 6 + .../1.19/blockStates/sign/mangrove_sign.json | 67 ++++ .../blockStates/sign/mangrove_wall_sign.json | 19 + .../1.20/blockModels/sign/acacia_hanging.json | 7 + .../blockModels/sign/acacia_wall_hanging.json | 7 + .../data/1.20/blockModels/sign/bamboo.json | 6 + .../1.20/blockModels/sign/bamboo_hanging.json | 7 + .../1.20/blockModels/sign/bamboo_wall.json | 6 + .../blockModels/sign/bamboo_wall_hanging.json | 7 + .../1.20/blockModels/sign/birch_hanging.json | 7 + .../blockModels/sign/birch_wall_hanging.json | 7 + .../data/1.20/blockModels/sign/cherry.json | 6 + .../1.20/blockModels/sign/cherry_hanging.json | 7 + .../1.20/blockModels/sign/cherry_wall.json | 6 + .../blockModels/sign/cherry_wall_hanging.json | 7 + .../blockModels/sign/crimson_hanging.json | 7 + .../sign/crimson_wall_hanging.json | 7 + .../blockModels/sign/dark_oak_hanging.json | 7 + .../sign/dark_oak_wall_hanging.json | 7 + .../data/1.20/blockModels/sign/hanging.json | 115 ++++++ .../1.20/blockModels/sign/jungle_hanging.json | 7 + .../blockModels/sign/jungle_wall_hanging.json | 7 + .../blockModels/sign/mangrove_hanging.json | 7 + .../sign/mangrove_wall_hanging.json | 7 + .../1.20/blockModels/sign/oak_hanging.json | 7 + .../blockModels/sign/oak_wall_hanging.json | 7 + .../1.20/blockModels/sign/spruce_hanging.json | 7 + .../blockModels/sign/spruce_wall_hanging.json | 7 + .../1.20/blockModels/sign/wall_hanging.json | 347 ++++++++++++++++++ .../1.20/blockModels/sign/warped_hanging.json | 7 + .../blockModels/sign/warped_wall_hanging.json | 7 + .../blockStates/sign/acacia_hanging_sign.json | 67 ++++ .../sign/acacia_wall_hanging_sign.json | 19 + .../blockStates/sign/bamboo_hanging_sign.json | 67 ++++ .../1.20/blockStates/sign/bamboo_sign.json | 67 ++++ .../sign/bamboo_wall_hanging_sign.json | 19 + .../blockStates/sign/bamboo_wall_sign.json | 19 + .../blockStates/sign/birch_hanging_sign.json | 67 ++++ .../sign/birch_wall_hanging_sign.json | 19 + .../blockStates/sign/cherry_hanging_sign.json | 67 ++++ .../1.20/blockStates/sign/cherry_sign.json | 67 ++++ .../sign/cherry_wall_hanging_sign.json | 19 + .../blockStates/sign/cherry_wall_sign.json | 19 + .../sign/crimson_hanging_sign.json | 67 ++++ .../sign/crimson_wall_hanging_sign.json | 19 + .../sign/dark_oak_hanging_sign.json | 67 ++++ .../sign/dark_oak_wall_hanging_sign.json | 19 + .../blockStates/sign/jungle_hanging_sign.json | 67 ++++ .../sign/jungle_wall_hanging_sign.json | 19 + .../sign/mangrove_hanging_sign.json | 67 ++++ .../sign/mangrove_wall_hanging_sign.json | 19 + .../blockStates/sign/oak_hanging_sign.json | 67 ++++ .../sign/oak_wall_hanging_sign.json | 19 + .../blockStates/sign/spruce_hanging_sign.json | 67 ++++ .../sign/spruce_wall_hanging_sign.json | 19 + .../blockStates/sign/warped_hanging_sign.json | 67 ++++ .../sign/warped_wall_hanging_sign.json | 19 + .../viewer/prepare/modelsBuilder.ts | 10 +- .../viewer/prepare/moreGeneratedBlocks.ts | 193 +++------- 100 files changed, 3048 insertions(+), 196 deletions(-) create mode 100644 prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/oak.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/oak_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/sign_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.13/blockStates/sign/sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.13/blockStates/sign/wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/acacia.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/acacia_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/birch.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/birch_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/dark_oak.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/dark_oak_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/jungle.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/jungle_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/spruce.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/spruce_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/acacia_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/acacia_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/birch_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/birch_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/dark_oak_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/dark_oak_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/jungle_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/jungle_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/oak_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/oak_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/spruce_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/spruce_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/crimson.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/crimson_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/warped.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/warped_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/crimson_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/crimson_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/warped_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/warped_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.19/blockModels/sign/mangrove.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.19/blockModels/sign/mangrove_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.19/blockStates/sign/mangrove_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.19/blockStates/sign/mangrove_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/acacia_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/acacia_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/birch_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/birch_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_wall.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/crimson_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/crimson_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/dark_oak_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/dark_oak_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/jungle_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/jungle_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/mangrove_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/mangrove_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/oak_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/oak_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/spruce_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/spruce_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/warped_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/warped_wall_hanging.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/acacia_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/acacia_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/birch_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/birch_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_wall_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/crimson_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/crimson_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/dark_oak_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/dark_oak_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/jungle_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/jungle_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/mangrove_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/mangrove_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/oak_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/oak_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/spruce_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/spruce_wall_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/warped_hanging_sign.json create mode 100644 prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/warped_wall_hanging_sign.json diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index 39148aaa..c978c240 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -520,9 +520,11 @@ export function getSectionGeometry (sx, sy, sz, world: World) { "west": 1, "east": 3 } - const isWall = block.name.endsWith('wall_sign') || block.name.endsWith('hanging_sign') + const isWall = block.name.endsWith('wall_sign') || block.name.endsWith('wall_hanging_sign') + const isHanging = block.name.endsWith('hanging_sign') attr.signs[key] = { isWall, + isHanging, rotation: isWall ? facingRotationMap[props.facing] : +props.rotation } } diff --git a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts index 5a80fa49..de5db815 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts @@ -45,12 +45,6 @@ test('Known blocks are not rendered', () => { // should be fixed, but to avoid regressions & for visibility expect(invalidBlocks).toMatchInlineSnapshot(` { - "acacia_hanging_sign": true, - "acacia_wall_hanging_sign": true, - "bamboo_hanging_sign": true, - "bamboo_wall_hanging_sign": true, - "birch_hanging_sign": true, - "birch_wall_hanging_sign": true, "black_banner": true, "black_bed": true, "black_candle": true, @@ -65,18 +59,12 @@ test('Known blocks are not rendered', () => { "brown_wall_banner": true, "bubble_column": true, "candle": true, - "cherry_hanging_sign": true, - "cherry_wall_hanging_sign": true, "creeper_head": true, "creeper_wall_head": true, - "crimson_hanging_sign": true, - "crimson_wall_hanging_sign": true, "cyan_banner": true, "cyan_bed": true, "cyan_candle": true, "cyan_wall_banner": true, - "dark_oak_hanging_sign": true, - "dark_oak_wall_hanging_sign": true, "dragon_head": true, "dragon_wall_head": true, "end_gateway": true, @@ -89,8 +77,6 @@ test('Known blocks are not rendered', () => { "green_bed": true, "green_candle": true, "green_wall_banner": true, - "jungle_hanging_sign": true, - "jungle_wall_hanging_sign": true, "light_blue_banner": true, "light_blue_bed": true, "light_blue_candle": true, @@ -107,10 +93,6 @@ test('Known blocks are not rendered', () => { "magenta_bed": true, "magenta_candle": true, "magenta_wall_banner": true, - "mangrove_hanging_sign": true, - "mangrove_wall_hanging_sign": true, - "oak_hanging_sign": true, - "oak_wall_hanging_sign": true, "orange_banner": true, "orange_bed": true, "orange_candle": true, @@ -138,12 +120,8 @@ test('Known blocks are not rendered', () => { "skeleton_skull": true, "skeleton_wall_skull": true, "snow": true, - "spruce_hanging_sign": true, - "spruce_wall_hanging_sign": true, "structure_void": true, "turtle_egg": true, - "warped_hanging_sign": true, - "warped_wall_hanging_sign": true, "water_cauldron": true, "white_banner": true, "white_bed": true, diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 4d28519a..095e5a94 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -112,11 +112,11 @@ export class WorldRendererThree extends WorldRendererCommon { } // should not compute it once if (Object.keys(data.geometry.signs).length) { - for (const [posKey, { isWall, rotation }] of Object.entries(data.geometry.signs)) { + for (const [posKey, { isWall, isHanging, rotation }] of Object.entries(data.geometry.signs)) { const [x, y, z] = posKey.split(',') const signBlockEntity = this.blockEntities[posKey] if (!signBlockEntity) continue - const sign = this.renderSign(new Vec3(+x, +y, +z), rotation, isWall, nbt.simplify(signBlockEntity)) + const sign = this.renderSign(new Vec3(+x, +y, +z), rotation, isWall, isHanging, nbt.simplify(signBlockEntity)) if (!sign) continue object.add(sign) } @@ -165,7 +165,7 @@ export class WorldRendererThree extends WorldRendererCommon { this.renderer.render(this.scene, this.camera) } - renderSign (position: Vec3, rotation: number, isWall: boolean, blockEntity) { + renderSign (position: Vec3, rotation: number, isWall: boolean, isHanging: boolean, blockEntity) { const tex = this.getSignTexture(position, blockEntity) if (!tex) return @@ -182,13 +182,16 @@ export class WorldRendererThree extends WorldRendererCommon { mesh.renderOrder = 999 // todo @sa2urami shouldnt all this be done in worker? - mesh.scale.set(1, 7 / 16, 1) - if (isWall) { - mesh.position.set(0, 0, -(8 - 1.5) / 16 + 0.001) + const lineHeight = 7 / 16; + const scaleFactor = isHanging ? 1.3 : 1 + mesh.scale.set(1 * scaleFactor, lineHeight * scaleFactor, 1 * scaleFactor) + + const thickness = (isHanging ? 2 : 1.5) / 16 + const wallSpacing = 0.25 / 16; + if (isWall && !isHanging) { + mesh.position.set(0, 0, -0.5 + thickness + wallSpacing + 0.0001) } else { - // standing - const faceEnd = 8.75 - mesh.position.set(0, 0, (faceEnd - 16 / 2) / 16 + 0.001) + mesh.position.set(0, 0, thickness / 2 + 0.0001) } const group = new THREE.Group() @@ -196,8 +199,10 @@ export class WorldRendererThree extends WorldRendererCommon { rotation * (isWall ? 90 : 45 / 2) ), 0) group.add(mesh) - const y = isWall ? 4.5 / 16 + mesh.scale.y / 2 : (1 - (mesh.scale.y / 2)) - group.position.set(position.x + 0.5, position.y + y, position.z + 0.5) + const height = (isHanging ? 10 : 8)/16 + const heightOffset = (isHanging ? 0 : isWall ? 4.333 : 9.333) / 16 + const textPosition = height/2 + heightOffset + group.position.set(position.x + 0.5, position.y + textPosition, position.z + 0.5) return group } diff --git a/prismarine-viewer/viewer/prepare/atlas.ts b/prismarine-viewer/viewer/prepare/atlas.ts index fc3e4029..cf73fdc4 100644 --- a/prismarine-viewer/viewer/prepare/atlas.ts +++ b/prismarine-viewer/viewer/prepare/atlas.ts @@ -49,19 +49,18 @@ export const makeTextureAtlas = (input: string[], getInputData: (name) => { cont const texturesIndex = {} - let skipXY = [] as [x: number, y: number][] - let offset = 0 + let nextX = 0 + let nextY = 0 + let rowMaxY = 0 + + const goToNextRow = () => { + nextX = 0 + nextY += rowMaxY + rowMaxY = 0 + } + const suSv = tileSize / imgSize for (const i in input) { - const pos = +i + offset - const x = (pos % texSize) * tileSize - const y = Math.floor(pos / texSize) * tileSize - - if (skipXY.some(([sx, sy]) => sx === x + 1 && sy === y)) { - // todo more offsets - offset++ - } - const img = new Image() const keyValue = input[i] const inputData = getInputData(keyValue) @@ -76,16 +75,24 @@ export const makeTextureAtlas = (input: string[], getInputData: (name) => { cont renderHeight = Math.ceil(img.height / tileSize) * tileSize su = renderWidth / imgSize sv = renderHeight / imgSize - if (renderWidth > tileSize) { - offset += Math.ceil(renderWidth / tileSize) - 1 - } - if (renderHeight > tileSize) { - const skipYs = Math.ceil(renderHeight / tileSize) - 1 - for (let i = 1; i <= skipYs; i++) { - skipXY.push([x, y + i]) - } + if (renderHeight > imgSize || renderWidth > imgSize) { + throw new Error('Texture ' + keyValue + ' is too big') } } + + if (nextX + renderWidth > imgSize) { + goToNextRow() + } + + const x = nextX + const y = nextY + + nextX += renderWidth + rowMaxY = Math.max(rowMaxY, renderHeight) + if (nextX >= imgSize) { + goToNextRow() + } + g.drawImage(img, 0, 0, renderWidth, renderHeight, x, y, renderWidth, renderHeight) const cleanName = keyValue.split('.').slice(0, -1).join('.') || keyValue @@ -116,7 +123,7 @@ export function makeBlockTextureAtlas (mcAssets: McAssets) { // const textureFiles = mostEncounteredBlocks.map(x => x + '.png') textureFiles.unshift(...localTextures) - const { generated: additionalTextures, twoTileTextures, origSizeTextures } = getAdditionalTextures() + const { generated: additionalTextures, origSizeTextures } = getAdditionalTextures() textureFiles.push(...Object.keys(additionalTextures)) const atlas = makeTextureAtlas(textureFiles, name => { @@ -129,7 +136,7 @@ export function makeBlockTextureAtlas (mcAssets: McAssets) { return { contents, - tileWidthMult: twoTileTextures.includes(name) ? 2 : undefined, + // tileWidthMult: twoTileTextures.includes(name) ? 2 : undefined, origSizeTextures } }) diff --git a/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/oak.json b/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/oak.json new file mode 100644 index 00000000..2f16a429 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/oak.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/sign" + } +} diff --git a/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/oak_wall.json b/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/oak_wall.json new file mode 100644 index 00000000..dfdb230f --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/oak_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/sign" + } +} diff --git a/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/sign.json b/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/sign.json new file mode 100644 index 00000000..4562cfae --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/sign.json @@ -0,0 +1,140 @@ +{ + "elements": [ + { + "from": [ + 7.25, + 0, + 7.25 + ], + "to": [ + 8.75, + 9.333, + 8.75 + ], + "faces": { + "north": { + "uv": [ + 1.5, + 8, + 2, + 15 + ], + "texture": "#sign" + }, + "east": { + "uv": [ + 1, + 8, + 1.5, + 15 + ], + "texture": "#sign" + }, + "south": { + "uv": [ + 0.5, + 8, + 1, + 15 + ], + "texture": "#sign" + }, + "west": { + "uv": [ + 0, + 8, + 0.5, + 15 + ], + "texture": "#sign" + }, + "up": { + "uv": [ + 0.5, + 7, + 1, + 8 + ], + "texture": "#sign" + }, + "down": { + "uv": [ + 1, + 7, + 1.5, + 8 + ], + "texture": "#sign" + } + } + }, + { + "from": [ + 0, + 9.333, + 7.25 + ], + "to": [ + 16, + 17.333, + 8.75 + ], + "faces": { + "north": { + "uv": [ + 7, + 1, + 13, + 7 + ], + "texture": "#sign" + }, + "east": { + "uv": [ + 6.5, + 1, + 7, + 7 + ], + "texture": "#sign" + }, + "south": { + "uv": [ + 0.5, + 1, + 6.5, + 7 + ], + "texture": "#sign" + }, + "west": { + "uv": [ + 0, + 1, + 0.5, + 7 + ], + "texture": "#sign" + }, + "up": { + "uv": [ + 0.5, + 0, + 6.5, + 1 + ], + "texture": "#sign" + }, + "down": { + "uv": [ + 6.5, + 1, + 12.5, + 0 + ], + "texture": "#sign" + } + } + } + ] +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/sign_wall.json b/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/sign_wall.json new file mode 100644 index 00000000..b743c983 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.13/blockModels/sign/sign_wall.json @@ -0,0 +1,72 @@ +{ + "elements": [ + { + "from": [ + 0, + 4.333, + 0.25 + ], + "to": [ + 16, + 12.333, + 1.75 + ], + "faces": { + "north": { + "uv": [ + 7, + 1, + 13, + 7 + ], + "texture": "#sign" + }, + "east": { + "uv": [ + 6.5, + 1, + 7, + 7 + ], + "texture": "#sign" + }, + "south": { + "uv": [ + 0.5, + 1, + 6.5, + 7 + ], + "texture": "#sign" + }, + "west": { + "uv": [ + 0, + 1, + 0.5, + 7 + ], + "texture": "#sign" + }, + "up": { + "uv": [ + 0.5, + 0, + 6.5, + 1 + ], + "texture": "#sign" + }, + "down": { + "uv": [ + 6.5, + 1, + 12.5, + 0 + ], + "texture": "#sign" + } + } + } + ] +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.13/blockStates/sign/sign.json b/prismarine-viewer/viewer/prepare/data/1.13/blockStates/sign/sign.json new file mode 100644 index 00000000..4ebcedcd --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.13/blockStates/sign/sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/oak" + }, + "rotation=1": { + "model": "sign/oak", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/oak", + "y": 45 + }, + "rotation=3": { + "model": "sign/oak", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/oak", + "y": 90 + }, + "rotation=5": { + "model": "sign/oak", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/oak", + "y": 135 + }, + "rotation=7": { + "model": "sign/oak", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/oak", + "y": 180 + }, + "rotation=9": { + "model": "sign/oak", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/oak", + "y": 225 + }, + "rotation=11": { + "model": "sign/oak", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/oak", + "y": 270 + }, + "rotation=13": { + "model": "sign/oak", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/oak", + "y": 315 + }, + "rotation=15": { + "model": "sign/oak", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.13/blockStates/sign/wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.13/blockStates/sign/wall_sign.json new file mode 100644 index 00000000..26453d53 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.13/blockStates/sign/wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/oak_wall" + }, + "facing=west": { + "model": "sign/oak_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/oak_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/oak_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/acacia.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/acacia.json new file mode 100644 index 00000000..7057ded0 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/acacia.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/acacia" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/acacia_wall.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/acacia_wall.json new file mode 100644 index 00000000..70b755bf --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/acacia_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/acacia" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/birch.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/birch.json new file mode 100644 index 00000000..d20d1438 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/birch.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/birch" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/birch_wall.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/birch_wall.json new file mode 100644 index 00000000..c7983bee --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/birch_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/birch" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/dark_oak.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/dark_oak.json new file mode 100644 index 00000000..803add52 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/dark_oak.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/dark_oak" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/dark_oak_wall.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/dark_oak_wall.json new file mode 100644 index 00000000..b410acfe --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/dark_oak_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/dark_oak" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/jungle.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/jungle.json new file mode 100644 index 00000000..17d52250 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/jungle.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/jungle" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/jungle_wall.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/jungle_wall.json new file mode 100644 index 00000000..bfe6c8f8 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/jungle_wall.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/jungle" + } +} diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/spruce.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/spruce.json new file mode 100644 index 00000000..8f2b2179 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/spruce.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/spruce" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/spruce_wall.json b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/spruce_wall.json new file mode 100644 index 00000000..1509eb3c --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockModels/sign/spruce_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/spruce" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/acacia_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/acacia_sign.json new file mode 100644 index 00000000..370c2c84 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/acacia_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/acacia" + }, + "rotation=1": { + "model": "sign/acacia", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/acacia", + "y": 45 + }, + "rotation=3": { + "model": "sign/acacia", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/acacia", + "y": 90 + }, + "rotation=5": { + "model": "sign/acacia", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/acacia", + "y": 135 + }, + "rotation=7": { + "model": "sign/acacia", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/acacia", + "y": 180 + }, + "rotation=9": { + "model": "sign/acacia", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/acacia", + "y": 225 + }, + "rotation=11": { + "model": "sign/acacia", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/acacia", + "y": 270 + }, + "rotation=13": { + "model": "sign/acacia", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/acacia", + "y": 315 + }, + "rotation=15": { + "model": "sign/acacia", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/acacia_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/acacia_wall_sign.json new file mode 100644 index 00000000..b524b126 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/acacia_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/acacia_wall" + }, + "facing=west": { + "model": "sign/acacia_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/acacia_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/acacia_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/birch_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/birch_sign.json new file mode 100644 index 00000000..2ffe5fd5 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/birch_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/birch" + }, + "rotation=1": { + "model": "sign/birch", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/birch", + "y": 45 + }, + "rotation=3": { + "model": "sign/birch", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/birch", + "y": 90 + }, + "rotation=5": { + "model": "sign/birch", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/birch", + "y": 135 + }, + "rotation=7": { + "model": "sign/birch", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/birch", + "y": 180 + }, + "rotation=9": { + "model": "sign/birch", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/birch", + "y": 225 + }, + "rotation=11": { + "model": "sign/birch", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/birch", + "y": 270 + }, + "rotation=13": { + "model": "sign/birch", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/birch", + "y": 315 + }, + "rotation=15": { + "model": "sign/birch", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/birch_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/birch_wall_sign.json new file mode 100644 index 00000000..622924b5 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/birch_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/birch_wall" + }, + "facing=west": { + "model": "sign/birch_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/birch_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/birch_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/dark_oak_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/dark_oak_sign.json new file mode 100644 index 00000000..6001019b --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/dark_oak_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/dark_oak" + }, + "rotation=1": { + "model": "sign/dark_oak", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/dark_oak", + "y": 45 + }, + "rotation=3": { + "model": "sign/dark_oak", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/dark_oak", + "y": 90 + }, + "rotation=5": { + "model": "sign/dark_oak", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/dark_oak", + "y": 135 + }, + "rotation=7": { + "model": "sign/dark_oak", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/dark_oak", + "y": 180 + }, + "rotation=9": { + "model": "sign/dark_oak", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/dark_oak", + "y": 225 + }, + "rotation=11": { + "model": "sign/dark_oak", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/dark_oak", + "y": 270 + }, + "rotation=13": { + "model": "sign/dark_oak", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/dark_oak", + "y": 315 + }, + "rotation=15": { + "model": "sign/dark_oak", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/dark_oak_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/dark_oak_wall_sign.json new file mode 100644 index 00000000..4b5cc921 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/dark_oak_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/dark_oak_wall" + }, + "facing=west": { + "model": "sign/dark_oak_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/dark_oak_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/dark_oak_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/jungle_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/jungle_sign.json new file mode 100644 index 00000000..983c2d68 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/jungle_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/jungle" + }, + "rotation=1": { + "model": "sign/jungle", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/jungle", + "y": 45 + }, + "rotation=3": { + "model": "sign/jungle", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/jungle", + "y": 90 + }, + "rotation=5": { + "model": "sign/jungle", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/jungle", + "y": 135 + }, + "rotation=7": { + "model": "sign/jungle", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/jungle", + "y": 180 + }, + "rotation=9": { + "model": "sign/jungle", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/jungle", + "y": 225 + }, + "rotation=11": { + "model": "sign/jungle", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/jungle", + "y": 270 + }, + "rotation=13": { + "model": "sign/jungle", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/jungle", + "y": 315 + }, + "rotation=15": { + "model": "sign/jungle", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/jungle_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/jungle_wall_sign.json new file mode 100644 index 00000000..898f7323 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/jungle_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/jungle_wall" + }, + "facing=west": { + "model": "sign/jungle_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/jungle_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/jungle_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/oak_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/oak_sign.json new file mode 100644 index 00000000..4ebcedcd --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/oak_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/oak" + }, + "rotation=1": { + "model": "sign/oak", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/oak", + "y": 45 + }, + "rotation=3": { + "model": "sign/oak", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/oak", + "y": 90 + }, + "rotation=5": { + "model": "sign/oak", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/oak", + "y": 135 + }, + "rotation=7": { + "model": "sign/oak", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/oak", + "y": 180 + }, + "rotation=9": { + "model": "sign/oak", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/oak", + "y": 225 + }, + "rotation=11": { + "model": "sign/oak", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/oak", + "y": 270 + }, + "rotation=13": { + "model": "sign/oak", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/oak", + "y": 315 + }, + "rotation=15": { + "model": "sign/oak", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/oak_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/oak_wall_sign.json new file mode 100644 index 00000000..26453d53 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/oak_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/oak_wall" + }, + "facing=west": { + "model": "sign/oak_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/oak_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/oak_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/spruce_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/spruce_sign.json new file mode 100644 index 00000000..78722223 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/spruce_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/spruce" + }, + "rotation=1": { + "model": "sign/spruce", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/spruce", + "y": 45 + }, + "rotation=3": { + "model": "sign/spruce", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/spruce", + "y": 90 + }, + "rotation=5": { + "model": "sign/spruce", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/spruce", + "y": 135 + }, + "rotation=7": { + "model": "sign/spruce", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/spruce", + "y": 180 + }, + "rotation=9": { + "model": "sign/spruce", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/spruce", + "y": 225 + }, + "rotation=11": { + "model": "sign/spruce", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/spruce", + "y": 270 + }, + "rotation=13": { + "model": "sign/spruce", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/spruce", + "y": 315 + }, + "rotation=15": { + "model": "sign/spruce", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/spruce_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/spruce_wall_sign.json new file mode 100644 index 00000000..8366709a --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.14/blockStates/sign/spruce_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/spruce_wall" + }, + "facing=west": { + "model": "sign/spruce_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/spruce_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/spruce_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/crimson.json b/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/crimson.json new file mode 100644 index 00000000..201e42ad --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/crimson.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/crimson" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/crimson_wall.json b/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/crimson_wall.json new file mode 100644 index 00000000..3faf8661 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/crimson_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/crimson" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/warped.json b/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/warped.json new file mode 100644 index 00000000..6dd3269e --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/warped.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/warped" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/warped_wall.json b/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/warped_wall.json new file mode 100644 index 00000000..a046ec14 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.16/blockModels/sign/warped_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/warped" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/crimson_sign.json b/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/crimson_sign.json new file mode 100644 index 00000000..5df00a29 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/crimson_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/crimson" + }, + "rotation=1": { + "model": "sign/crimson", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/crimson", + "y": 45 + }, + "rotation=3": { + "model": "sign/crimson", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/crimson", + "y": 90 + }, + "rotation=5": { + "model": "sign/crimson", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/crimson", + "y": 135 + }, + "rotation=7": { + "model": "sign/crimson", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/crimson", + "y": 180 + }, + "rotation=9": { + "model": "sign/crimson", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/crimson", + "y": 225 + }, + "rotation=11": { + "model": "sign/crimson", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/crimson", + "y": 270 + }, + "rotation=13": { + "model": "sign/crimson", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/crimson", + "y": 315 + }, + "rotation=15": { + "model": "sign/crimson", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/crimson_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/crimson_wall_sign.json new file mode 100644 index 00000000..149227b2 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/crimson_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/crimson_wall" + }, + "facing=west": { + "model": "sign/crimson_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/crimson_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/crimson_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/warped_sign.json b/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/warped_sign.json new file mode 100644 index 00000000..4af216ca --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/warped_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/warped" + }, + "rotation=1": { + "model": "sign/warped", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/warped", + "y": 45 + }, + "rotation=3": { + "model": "sign/warped", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/warped", + "y": 90 + }, + "rotation=5": { + "model": "sign/warped", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/warped", + "y": 135 + }, + "rotation=7": { + "model": "sign/warped", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/warped", + "y": 180 + }, + "rotation=9": { + "model": "sign/warped", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/warped", + "y": 225 + }, + "rotation=11": { + "model": "sign/warped", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/warped", + "y": 270 + }, + "rotation=13": { + "model": "sign/warped", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/warped", + "y": 315 + }, + "rotation=15": { + "model": "sign/warped", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/warped_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/warped_wall_sign.json new file mode 100644 index 00000000..b1d7f5e0 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.16/blockStates/sign/warped_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/warped_wall" + }, + "facing=west": { + "model": "sign/warped_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/warped_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/warped_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.19/blockModels/sign/mangrove.json b/prismarine-viewer/viewer/prepare/data/1.19/blockModels/sign/mangrove.json new file mode 100644 index 00000000..bb82e85a --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.19/blockModels/sign/mangrove.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/mangrove" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.19/blockModels/sign/mangrove_wall.json b/prismarine-viewer/viewer/prepare/data/1.19/blockModels/sign/mangrove_wall.json new file mode 100644 index 00000000..30e9bd55 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.19/blockModels/sign/mangrove_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/mangrove" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.19/blockStates/sign/mangrove_sign.json b/prismarine-viewer/viewer/prepare/data/1.19/blockStates/sign/mangrove_sign.json new file mode 100644 index 00000000..54a92e7e --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.19/blockStates/sign/mangrove_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/mangrove" + }, + "rotation=1": { + "model": "sign/mangrove", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/mangrove", + "y": 45 + }, + "rotation=3": { + "model": "sign/mangrove", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/mangrove", + "y": 90 + }, + "rotation=5": { + "model": "sign/mangrove", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/mangrove", + "y": 135 + }, + "rotation=7": { + "model": "sign/mangrove", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/mangrove", + "y": 180 + }, + "rotation=9": { + "model": "sign/mangrove", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/mangrove", + "y": 225 + }, + "rotation=11": { + "model": "sign/mangrove", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/mangrove", + "y": 270 + }, + "rotation=13": { + "model": "sign/mangrove", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/mangrove", + "y": 315 + }, + "rotation=15": { + "model": "sign/mangrove", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.19/blockStates/sign/mangrove_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.19/blockStates/sign/mangrove_wall_sign.json new file mode 100644 index 00000000..d00760e7 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.19/blockStates/sign/mangrove_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/mangrove_wall" + }, + "facing=west": { + "model": "sign/mangrove_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/mangrove_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/mangrove_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/acacia_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/acacia_hanging.json new file mode 100644 index 00000000..13702388 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/acacia_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/acacia" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/acacia_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/acacia_wall_hanging.json new file mode 100644 index 00000000..1e2a9d85 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/acacia_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/acacia" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo.json new file mode 100644 index 00000000..6c9fd930 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/bamboo" + } +} diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_hanging.json new file mode 100644 index 00000000..c5302b1b --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/bamboo" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_wall.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_wall.json new file mode 100644 index 00000000..bf726f10 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/bamboo" + } +} diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_wall_hanging.json new file mode 100644 index 00000000..d3a46453 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/bamboo_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/bamboo" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/birch_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/birch_hanging.json new file mode 100644 index 00000000..71a4b708 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/birch_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/birch" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/birch_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/birch_wall_hanging.json new file mode 100644 index 00000000..13b215a5 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/birch_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/birch" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry.json new file mode 100644 index 00000000..406c6318 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign", + "textures": { + "sign": "entity/signs/cherry" + } +} diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_hanging.json new file mode 100644 index 00000000..6ff4c5b7 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/cherry" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_wall.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_wall.json new file mode 100644 index 00000000..b3b07061 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "sign/sign_wall", + "textures": { + "sign": "entity/signs/cherry" + } +} diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_wall_hanging.json new file mode 100644 index 00000000..aeef94bd --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/cherry_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/cherry" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/crimson_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/crimson_hanging.json new file mode 100644 index 00000000..a6c9286a --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/crimson_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/crimson" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/crimson_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/crimson_wall_hanging.json new file mode 100644 index 00000000..20889940 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/crimson_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/crimson" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/dark_oak_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/dark_oak_hanging.json new file mode 100644 index 00000000..506c4440 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/dark_oak_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/dark_oak" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/dark_oak_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/dark_oak_wall_hanging.json new file mode 100644 index 00000000..21c1ebd5 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/dark_oak_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/dark_oak" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/hanging.json new file mode 100644 index 00000000..52d90ee3 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/hanging.json @@ -0,0 +1,115 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "ambientocclusion": false, + "texture_size": [ + 64, + 32 + ], + "textures": { + "wood": "entity/signs/hanging/oak" + }, + "elements": [ + { + "name": "Sign", + "from": [ + 1, + 0, + 7 + ], + "to": [ + 15, + 10, + 9 + ], + "faces": { + "north": { + "uv": [ + 4.5, + 7, + 8, + 12 + ], + "texture": "#wood" + }, + "east": { + "uv": [ + 4, + 7, + 4.5, + 12 + ], + "texture": "#wood" + }, + "south": { + "uv": [ + 0.5, + 7, + 4, + 12 + ], + "texture": "#wood" + }, + "west": { + "uv": [ + 0, + 7, + 0.5, + 12 + ], + "texture": "#wood" + }, + "up": { + "uv": [ + 4, + 6, + 0.5, + 7 + ], + "rotation": 180, + "texture": "#wood" + }, + "down": { + "uv": [ + 4, + 7, + 7.5, + 6 + ], + "texture": "#wood" + } + } + }, + { + "from": [ + 2, + 10, + 8 + ], + "to": [ + 14, + 16, + 8 + ], + "faces": { + "north": { + "uv": [ + 3.5, + 3, + 6.5, + 6 + ], + "texture": "#wood" + }, + "south": { + "uv": [ + 3.5, + 3, + 6.5, + 6 + ], + "texture": "#wood" + } + } + } + ] +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/jungle_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/jungle_hanging.json new file mode 100644 index 00000000..db141f6d --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/jungle_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/jungle" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/jungle_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/jungle_wall_hanging.json new file mode 100644 index 00000000..aefe92f3 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/jungle_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/jungle" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/mangrove_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/mangrove_hanging.json new file mode 100644 index 00000000..e84c41f2 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/mangrove_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/mangrove" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/mangrove_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/mangrove_wall_hanging.json new file mode 100644 index 00000000..e5feb72e --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/mangrove_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/mangrove" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/oak_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/oak_hanging.json new file mode 100644 index 00000000..7437c82f --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/oak_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/oak" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/oak_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/oak_wall_hanging.json new file mode 100644 index 00000000..3c8d9e5e --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/oak_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/oak" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/spruce_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/spruce_hanging.json new file mode 100644 index 00000000..3dee635d --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/spruce_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/spruce" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/spruce_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/spruce_wall_hanging.json new file mode 100644 index 00000000..71e66b9c --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/spruce_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/spruce" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/wall_hanging.json new file mode 100644 index 00000000..424ffe37 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/wall_hanging.json @@ -0,0 +1,347 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "ambientocclusion": false, + "texture_size": [ + 64, + 32 + ], + "textures": { + "wood": "entity/signs/hanging/oak" + }, + "elements": [ + { + "name": "Sign", + "from": [ + 1, + 0, + 7 + ], + "to": [ + 15, + 10, + 9 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 8, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 7, + 8, + 12 + ], + "texture": "#wood" + }, + "east": { + "uv": [ + 4, + 7, + 4.5, + 12 + ], + "texture": "#wood" + }, + "south": { + "uv": [ + 0.5, + 7, + 4, + 12 + ], + "texture": "#wood" + }, + "west": { + "uv": [ + 0, + 7, + 0.5, + 12 + ], + "texture": "#wood" + }, + "up": { + "uv": [ + 4, + 6, + 0.5, + 7 + ], + "rotation": 180, + "texture": "#wood" + }, + "down": { + "uv": [ + 4, + 7, + 7.5, + 6 + ], + "texture": "#wood" + } + } + }, + { + "name": "Hanger", + "from": [ + 0, + 14, + 6 + ], + "to": [ + 16, + 16, + 10 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 8, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 2, + 10, + 3 + ], + "texture": "#wood" + }, + "east": { + "uv": [ + 0, + 2, + 1, + 3 + ], + "texture": "#wood" + }, + "south": { + "uv": [ + 1, + 2, + 5, + 3 + ], + "texture": "#wood" + }, + "west": { + "uv": [ + 0, + 2, + 1, + 3 + ], + "texture": "#wood" + }, + "up": { + "uv": [ + 1, + 0, + 5, + 2 + ], + "rotation": 180, + "texture": "#wood" + }, + "down": { + "uv": [ + 5, + 0, + 9, + 2 + ], + "texture": "#wood" + } + } + }, + { + "name": "ChainA1", + "from": [ + 4.8, + 10, + 10.5 + ], + "to": [ + 6.2, + 14, + 10.5 + ], + "shade": false, + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + 8, + 8 + ], + "rescale": true + }, + "faces": { + "north": { + "uv": [ + 1.5, + 3, + 2.25, + 6 + ], + "texture": "#wood" + }, + "south": { + "uv": [ + 1.5, + 3, + 2.25, + 6 + ], + "texture": "#wood" + } + } + }, + { + "name": "ChainB2", + "from": [ + 10.5, + 10, + 4.8 + ], + "to": [ + 10.5, + 14, + 6.2 + ], + "shade": false, + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + 8, + 8 + ], + "rescale": true + }, + "faces": { + "east": { + "uv": [ + 0, + 3, + 0.75, + 6 + ], + "texture": "#wood" + }, + "west": { + "uv": [ + 0, + 3, + 0.75, + 6 + ], + "texture": "#wood" + } + } + }, + { + "name": "ChainB1", + "from": [ + 9.8, + 10, + 5.5 + ], + "to": [ + 11.2, + 14, + 5.5 + ], + "shade": false, + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + 8, + 8 + ], + "rescale": true + }, + "faces": { + "north": { + "uv": [ + 1.5, + 3, + 2.25, + 6 + ], + "texture": "#wood" + }, + "south": { + "uv": [ + 1.5, + 3, + 2.25, + 6 + ], + "texture": "#wood" + } + } + }, + { + "name": "ChainA2", + "from": [ + 5.5, + 10, + 9.8 + ], + "to": [ + 5.5, + 14, + 11.2 + ], + "shade": false, + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + 8, + 8 + ], + "rescale": true + }, + "faces": { + "east": { + "uv": [ + 0, + 3, + 0.75, + 6 + ], + "texture": "#wood" + }, + "west": { + "uv": [ + 0, + 3, + 0.75, + 6 + ], + "texture": "#wood" + } + } + } + ] +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/warped_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/warped_hanging.json new file mode 100644 index 00000000..015ba2c0 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/warped_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/hanging", + "textures": { + "wood": "entity/signs/hanging/warped" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/warped_wall_hanging.json b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/warped_wall_hanging.json new file mode 100644 index 00000000..8870c317 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockModels/sign/warped_wall_hanging.json @@ -0,0 +1,7 @@ +{ + "credit": "Made with Blockbench by TyBraniff for Bluemaps support.", + "parent": "sign/wall_hanging", + "textures": { + "wood": "entity/signs/hanging/warped" + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/acacia_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/acacia_hanging_sign.json new file mode 100644 index 00000000..18a25013 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/acacia_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/acacia_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/acacia_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/acacia_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/acacia_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/acacia_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/acacia_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/acacia_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/acacia_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/acacia_hanging" + }, + "rotation=9": { + "model": "sign/acacia_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/acacia_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/acacia_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/acacia_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/acacia_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/acacia_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/acacia_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/acacia_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/acacia_wall_hanging_sign.json new file mode 100644 index 00000000..edbae40d --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/acacia_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/acacia_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/acacia_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/acacia_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/acacia_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_hanging_sign.json new file mode 100644 index 00000000..5ff1854b --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/bamboo_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/bamboo_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/bamboo_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/bamboo_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/bamboo_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/bamboo_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/bamboo_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/bamboo_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/bamboo_hanging" + }, + "rotation=9": { + "model": "sign/bamboo_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/bamboo_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/bamboo_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/bamboo_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/bamboo_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/bamboo_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/bamboo_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_sign.json new file mode 100644 index 00000000..1041460a --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/bamboo" + }, + "rotation=1": { + "model": "sign/bamboo", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/bamboo", + "y": 45 + }, + "rotation=3": { + "model": "sign/bamboo", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/bamboo", + "y": 90 + }, + "rotation=5": { + "model": "sign/bamboo", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/bamboo", + "y": 135 + }, + "rotation=7": { + "model": "sign/bamboo", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/bamboo", + "y": 180 + }, + "rotation=9": { + "model": "sign/bamboo", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/bamboo", + "y": 225 + }, + "rotation=11": { + "model": "sign/bamboo", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/bamboo", + "y": 270 + }, + "rotation=13": { + "model": "sign/bamboo", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/bamboo", + "y": 315 + }, + "rotation=15": { + "model": "sign/bamboo", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_wall_hanging_sign.json new file mode 100644 index 00000000..3bd24804 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/bamboo_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/bamboo_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/bamboo_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/bamboo_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_wall_sign.json new file mode 100644 index 00000000..8b5ce481 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/bamboo_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/bamboo_wall" + }, + "facing=west": { + "model": "sign/bamboo_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/bamboo_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/bamboo_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/birch_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/birch_hanging_sign.json new file mode 100644 index 00000000..6052d4f7 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/birch_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/birch_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/birch_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/birch_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/birch_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/birch_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/birch_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/birch_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/birch_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/birch_hanging" + }, + "rotation=9": { + "model": "sign/birch_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/birch_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/birch_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/birch_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/birch_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/birch_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/birch_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/birch_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/birch_wall_hanging_sign.json new file mode 100644 index 00000000..656e8093 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/birch_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/birch_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/birch_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/birch_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/birch_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_hanging_sign.json new file mode 100644 index 00000000..32ce33dc --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/cherry_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/cherry_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/cherry_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/cherry_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/cherry_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/cherry_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/cherry_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/cherry_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/cherry_hanging" + }, + "rotation=9": { + "model": "sign/cherry_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/cherry_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/cherry_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/cherry_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/cherry_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/cherry_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/cherry_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_sign.json new file mode 100644 index 00000000..4e562a26 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/cherry" + }, + "rotation=1": { + "model": "sign/cherry", + "y": 22.5 + }, + "rotation=2": { + "model": "sign/cherry", + "y": 45 + }, + "rotation=3": { + "model": "sign/cherry", + "y": 67.5 + }, + "rotation=4": { + "model": "sign/cherry", + "y": 90 + }, + "rotation=5": { + "model": "sign/cherry", + "y": 112.5 + }, + "rotation=6": { + "model": "sign/cherry", + "y": 135 + }, + "rotation=7": { + "model": "sign/cherry", + "y": 157.5 + }, + "rotation=8": { + "model": "sign/cherry", + "y": 180 + }, + "rotation=9": { + "model": "sign/cherry", + "y": 202.5 + }, + "rotation=10": { + "model": "sign/cherry", + "y": 225 + }, + "rotation=11": { + "model": "sign/cherry", + "y": 247.5 + }, + "rotation=12": { + "model": "sign/cherry", + "y": 270 + }, + "rotation=13": { + "model": "sign/cherry", + "y": 292.5 + }, + "rotation=14": { + "model": "sign/cherry", + "y": 315 + }, + "rotation=15": { + "model": "sign/cherry", + "y": 337.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_wall_hanging_sign.json new file mode 100644 index 00000000..3e0a2d04 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/cherry_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/cherry_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/cherry_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/cherry_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_wall_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_wall_sign.json new file mode 100644 index 00000000..1b13342c --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/cherry_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=south": { + "model": "sign/cherry_wall" + }, + "facing=west": { + "model": "sign/cherry_wall", + "y": 90 + }, + "facing=north": { + "model": "sign/cherry_wall", + "y": 180 + }, + "facing=east": { + "model": "sign/cherry_wall", + "y": 270 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/crimson_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/crimson_hanging_sign.json new file mode 100644 index 00000000..6e4131f2 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/crimson_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/crimson_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/crimson_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/crimson_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/crimson_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/crimson_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/crimson_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/crimson_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/crimson_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/crimson_hanging" + }, + "rotation=9": { + "model": "sign/crimson_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/crimson_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/crimson_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/crimson_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/crimson_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/crimson_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/crimson_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/crimson_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/crimson_wall_hanging_sign.json new file mode 100644 index 00000000..63c560ae --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/crimson_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/crimson_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/crimson_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/crimson_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/crimson_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/dark_oak_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/dark_oak_hanging_sign.json new file mode 100644 index 00000000..a2bc0458 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/dark_oak_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/dark_oak_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/dark_oak_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/dark_oak_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/dark_oak_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/dark_oak_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/dark_oak_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/dark_oak_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/dark_oak_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/dark_oak_hanging" + }, + "rotation=9": { + "model": "sign/dark_oak_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/dark_oak_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/dark_oak_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/dark_oak_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/dark_oak_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/dark_oak_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/dark_oak_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/dark_oak_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/dark_oak_wall_hanging_sign.json new file mode 100644 index 00000000..138154f9 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/dark_oak_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/dark_oak_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/dark_oak_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/dark_oak_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/dark_oak_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/jungle_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/jungle_hanging_sign.json new file mode 100644 index 00000000..9f1f9eeb --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/jungle_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/jungle_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/jungle_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/jungle_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/jungle_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/jungle_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/jungle_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/jungle_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/jungle_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/jungle_hanging" + }, + "rotation=9": { + "model": "sign/jungle_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/jungle_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/jungle_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/jungle_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/jungle_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/jungle_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/jungle_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/jungle_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/jungle_wall_hanging_sign.json new file mode 100644 index 00000000..3bdb8191 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/jungle_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/jungle_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/jungle_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/jungle_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/jungle_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/mangrove_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/mangrove_hanging_sign.json new file mode 100644 index 00000000..ff977160 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/mangrove_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/mangrove_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/mangrove_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/mangrove_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/mangrove_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/mangrove_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/mangrove_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/mangrove_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/mangrove_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/mangrove_hanging" + }, + "rotation=9": { + "model": "sign/mangrove_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/mangrove_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/mangrove_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/mangrove_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/mangrove_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/mangrove_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/mangrove_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/mangrove_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/mangrove_wall_hanging_sign.json new file mode 100644 index 00000000..9d1d019a --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/mangrove_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/mangrove_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/mangrove_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/mangrove_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/mangrove_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/oak_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/oak_hanging_sign.json new file mode 100644 index 00000000..01e66da8 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/oak_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/oak_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/oak_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/oak_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/oak_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/oak_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/oak_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/oak_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/oak_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/oak_hanging" + }, + "rotation=9": { + "model": "sign/oak_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/oak_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/oak_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/oak_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/oak_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/oak_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/oak_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/oak_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/oak_wall_hanging_sign.json new file mode 100644 index 00000000..9af80947 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/oak_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/oak_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/oak_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/oak_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/oak_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/spruce_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/spruce_hanging_sign.json new file mode 100644 index 00000000..ee9509f6 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/spruce_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/spruce_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/spruce_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/spruce_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/spruce_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/spruce_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/spruce_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/spruce_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/spruce_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/spruce_hanging" + }, + "rotation=9": { + "model": "sign/spruce_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/spruce_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/spruce_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/spruce_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/spruce_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/spruce_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/spruce_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/spruce_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/spruce_wall_hanging_sign.json new file mode 100644 index 00000000..0b9ec25a --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/spruce_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/spruce_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/spruce_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/spruce_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/spruce_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/warped_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/warped_hanging_sign.json new file mode 100644 index 00000000..93764856 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/warped_hanging_sign.json @@ -0,0 +1,67 @@ +{ + "variants": { + "rotation=0": { + "model": "sign/warped_hanging", + "y": 180 + }, + "rotation=1": { + "model": "sign/warped_hanging", + "y": 202.5 + }, + "rotation=2": { + "model": "sign/warped_hanging", + "y": 225 + }, + "rotation=3": { + "model": "sign/warped_hanging", + "y": 247.5 + }, + "rotation=4": { + "model": "sign/warped_hanging", + "y": 270 + }, + "rotation=5": { + "model": "sign/warped_hanging", + "y": 292.5 + }, + "rotation=6": { + "model": "sign/warped_hanging", + "y": 315 + }, + "rotation=7": { + "model": "sign/warped_hanging", + "y": 337.5 + }, + "rotation=8": { + "model": "sign/warped_hanging" + }, + "rotation=9": { + "model": "sign/warped_hanging", + "y": 22.5 + }, + "rotation=10": { + "model": "sign/warped_hanging", + "y": 45 + }, + "rotation=11": { + "model": "sign/warped_hanging", + "y": 67.5 + }, + "rotation=12": { + "model": "sign/warped_hanging", + "y": 90 + }, + "rotation=13": { + "model": "sign/warped_hanging", + "y": 112.5 + }, + "rotation=14": { + "model": "sign/warped_hanging", + "y": 135 + }, + "rotation=15": { + "model": "sign/warped_hanging", + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/warped_wall_hanging_sign.json b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/warped_wall_hanging_sign.json new file mode 100644 index 00000000..378e80f8 --- /dev/null +++ b/prismarine-viewer/viewer/prepare/data/1.20/blockStates/sign/warped_wall_hanging_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "sign/warped_wall_hanging", + "y": 90 + }, + "facing=south": { + "model": "sign/warped_wall_hanging", + "y": 180 + }, + "facing=west": { + "model": "sign/warped_wall_hanging", + "y": 270 + }, + "facing=north": { + "model": "sign/warped_wall_hanging" + } + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/prepare/modelsBuilder.ts b/prismarine-viewer/viewer/prepare/modelsBuilder.ts index 2a0cac57..b6e5268f 100644 --- a/prismarine-viewer/viewer/prepare/modelsBuilder.ts +++ b/prismarine-viewer/viewer/prepare/modelsBuilder.ts @@ -161,7 +161,7 @@ function prepareModel (model: BlockModel, texturesJson) { const getFinalTexture = (originalBlockName) => { // texture name e.g. blocks/anvil_base - const cleanBlockName = cleanupBlockName(originalBlockName); + const cleanBlockName = cleanupBlockName(originalBlockName) return { ...texturesJson[cleanBlockName], /* __debugName: cleanBlockName */ } } @@ -187,10 +187,12 @@ function prepareModel (model: BlockModel, texturesJson) { for (const sideName of Object.keys(elem.faces)) { const face = elem.faces[sideName] + const textureRaw = face.texture.charAt(0) === '#' + ? finalTextures![face.texture.slice(1)] + : getFinalTexture(face.texture) + if (!textureRaw) throw new Error(`Texture ${face.texture} in ${JSON.stringify(model.textures)} not found`) const finalTexture = deepCopy( - face.texture.charAt(0) === '#' - ? finalTextures![face.texture.slice(1)] - : getFinalTexture(face.texture) + textureRaw ) const _from = elem.from diff --git a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts index b343e595..e64b7cff 100644 --- a/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts +++ b/prismarine-viewer/viewer/prepare/moreGeneratedBlocks.ts @@ -4,9 +4,10 @@ import { McAssets } from './modelsBuilder' import path from 'path' import fs from 'fs' import { fileURLToPath } from 'url' +import { versionToNumber } from './utils' // todo refactor -const twoTileTextures: string[] = [] +const handledBlocks = ['water', 'lava', 'barrier'] const origSizeTextures: string[] = [] let currentImage: Jimp let currentBlockName: string @@ -121,115 +122,6 @@ const handleShulkerBox = async (dataBase: string, match: RegExpExecArray) => { await addSimpleCubeWithSides(shulkerBoxTextures) } -const handleSign = async (dataBase: string, match: RegExpExecArray) => { - const states = getBlockStates(currentBlockName) - if (!states) return - - const [, signMaterial = ''] = match - currentImage = await Jimp.read(`${dataBase}entity/${signMaterial ? `signs/${signMaterial}` : 'sign'}.png`) - // todo cache - const signTextures = { - // todo correct mapping - // todo alg to fit to the side - signboard_side: justCrop(0, 2, 2, 12), - face: justCrop(2, 2, 24, 12), - up: justCrop(2, 0, 24, 2), - support: justCrop(0, 16, 2, 14) - } - const blockTextures = await getBlockTexturesFromJimp(signTextures, true) - - const isWall = currentBlockName.includes('wall_') - const isHanging = currentBlockName.includes('hanging_') - const rotationState = states.find(state => state.name === 'rotation') - const faceTexture = { texture: blockTextures.face.texture, uv: blockTextures.face.uv } - if (isWall || isHanging) { - // todo isHanging - if (!isHanging) { - const facingState = states.find(state => state.name === 'facing')! - const facingMap = { - south: 0, - west: 90, - north: 180, - east: 270 - } - - currentMcAssets.blocksStates[currentBlockName] = { - "variants": Object.fromEntries( - facingState.values!.map((_val, i) => { - const val = _val as string - return [`facing=${val}`, { - "model": currentBlockName, - y: facingMap[val], - }] - }) - ) - } - currentMcAssets.blocksModels[currentBlockName] = { - elements: [ - { - // signboard - "from": [0, 4.5, 0], - "to": [16, 11.5, 1.5], - faces: { - south: faceTexture, - east: blockTextures.signboard_side, - west: blockTextures.signboard_side, - up: blockTextures.up, - down: blockTextures.up, - }, - } - ], - } - } - } else if (rotationState) { - currentMcAssets.blocksStates[currentBlockName] = { - "variants": Object.fromEntries( - Array.from({ length: 16 }).map((_val, i) => { - return [`rotation=${i}`, { - "model": currentBlockName, - y: i * (45 / 2), - }] - }) - ) - } - - const supportTexture = blockTextures.support - // TODO fix models.ts, apply textures for signs correctly! - // const supportTexture = { texture: supportTextureImg, uv: [0, 0, 16, 16] } - currentMcAssets.blocksModels[currentBlockName] = { - elements: [ - { - // support post - "from": [7.5, 0, 7.5], - "to": [8.5, 9, 8.5], - faces: { - // todo 14 - north: supportTexture, - east: supportTexture, - south: supportTexture, - west: supportTexture, - } - }, - { - // signboard - "from": [0, 9, 7.25], - "to": [16, 16, 8.75], - faces: { - north: faceTexture, - south: faceTexture, - east: blockTextures.signboard_side, - west: blockTextures.signboard_side, - up: blockTextures.up, - down: blockTextures.up, - }, - } - ], - } - } - twoTileTextures.push(blockTextures.face.texture) - twoTileTextures.push(blockTextures.up.texture) -} - // TODO! should not be there! move to data with signs! const chestModels = { chest: { @@ -405,10 +297,10 @@ const handleChest = async (dataBase: string, match: RegExpExecArray) => { async function loadBlockModelTextures (dataBase: string, blockModel: any) { for (const key in blockModel.textures) { - const texture: string = blockModel.textures[key] - currentImage = await Jimp.read(dataBase + texture + '.png') + let texture: string = blockModel.textures[key] + const useAssetsPath = !!texture.match(/^[0-9.]+\//) blockModel.textures.particle = texture - generatedImageTextures[texture] = `data:image/png;base64,${fs.readFileSync(path.join(dataBase, texture + '.png'), 'base64')}` + generatedImageTextures[texture] = `data:image/png;base64,${fs.readFileSync(path.join(dataBase, useAssetsPath ? '..' : '', texture + '.png'), 'base64')}` origSizeTextures[texture] = true } } @@ -416,11 +308,6 @@ async function loadBlockModelTextures (dataBase: string, blockModel: any) { const handlers = [ [/(.+)_shulker_box$/, handleShulkerBox], [/^shulker_box$/, handleShulkerBox], - [/^sign$/, handleSign], - [/^standing_sign$/, handleSign], - [/^wall_sign$/, handleSign], - [/(.+)_wall_sign$/, handleSign], - [/(.+)_sign$/, handleSign], [/^(?:(ender|trapped)_)?chest$/, handleChest], // [/(^|(.+)_)bed$/, handleBed], // no-op just suppress warning @@ -439,25 +326,58 @@ export const tryHandleBlockEntity = async (dataBase, blockName) => { } } -const handleExternalData = async (dataBase: string, version: string) => { - const [major, minor] = version.split(".") - const dataVer = `${major}.${minor}` - const baseDir = path.join(__dirname, 'data', dataVer) - if (!fs.existsSync(baseDir)) return +async function readAllBlockStates (blockStatesDir: string) { + const files = fs.readdirSync(blockStatesDir) + for (const file of files) { + if (file.endsWith('.json')) { + const state = JSON.parse(fs.readFileSync(path.join(blockStatesDir, file), 'utf-8')) + const name = file.replace('.json', '') + currentMcAssets.blocksStates[name] = state + handledBlocks.push(name) + } else { + await readAllBlockStates(path.join(blockStatesDir, file)) + } + } +} - const blockModelsDir = path.join(baseDir, 'blockModels') - const allBlockModels = fs.readdirSync(blockModelsDir).map(x => x.replace('.json', '')) - for (const blockModel of allBlockModels) { - const model = JSON.parse(fs.readFileSync(path.join(blockModelsDir, blockModel + '.json'), 'utf-8')) - currentMcAssets.blocksModels[blockModel] = model - await loadBlockModelTextures(dataBase, model) +async function readAllBlockModels (dataBase: string, blockModelsDir: string, completePath: string) { + const actualPath = completePath.length ? completePath + "/" : "" + const files = fs.readdirSync(blockModelsDir) + for (const file of files) { + if (file.endsWith('.json')) { + const model = JSON.parse(fs.readFileSync(path.join(blockModelsDir, file), 'utf-8')) + const name = actualPath + file.replace('.json', '') + currentMcAssets.blocksModels[name] = model + await loadBlockModelTextures(dataBase, model) + } else { + await readAllBlockModels(dataBase, path.join(blockModelsDir, file), actualPath + file) + } + } +} + +const handleExternalData = async (assetsPathRoot: string, version: string) => { + const currentVersionNumber = versionToNumber(version) + const versions = fs.readdirSync(path.join(__dirname, 'data'), { withFileTypes: true }) + .filter(x => x.isDirectory()) + .map(x => x.name) + .sort((a, b) => versionToNumber(b) - versionToNumber(a)) + + const allAssetsVersions = fs.readdirSync(assetsPathRoot, { withFileTypes: true }) + .filter(x => x.isDirectory()) + .map(x => x.name) + .sort((a, b) => versionToNumber(b) - versionToNumber(a)) + + const getAssetsVersion = (version: string) => { + return allAssetsVersions[version] ?? allAssetsVersions.find(x => x.startsWith(version)) } - const blockStatesDir = path.join(baseDir, 'blockStates') - const allBlockStates = fs.readdirSync(blockStatesDir).map(x => x.replace('.json', '')) - for (const blockState of allBlockStates) { - const state = JSON.parse(fs.readFileSync(path.join(blockStatesDir, blockState + '.json'), 'utf-8')) - currentMcAssets.blocksStates[blockState] = state + for (const curVer of versions) { + const baseDir = path.join(__dirname, 'data', curVer) + if (versionToNumber(curVer) > currentVersionNumber) continue + + const assetsVersion = getAssetsVersion(curVer) + await readAllBlockStates(path.join(baseDir, 'blockStates')) + await readAllBlockModels(path.join(assetsPathRoot, assetsVersion), path.join(baseDir, 'blockModels'), "") } } @@ -466,7 +386,6 @@ export const prepareMoreGeneratedBlocks = async (mcAssets: McAssets) => { const allTheBlocks = mcData.blocksArray.map(x => x.name) currentMcAssets = mcAssets - const handledBlocks = ['water', 'lava', 'barrier'] // todo const ignoredBlocks = ['skull', 'structure_void', 'banner', 'bed', 'end_portal'] @@ -481,7 +400,7 @@ export const prepareMoreGeneratedBlocks = async (mcAssets: McAssets) => { } } - await handleExternalData(mcAssets.directory, mcAssets.version) + await handleExternalData(path.join(mcAssets.directory, '..'), mcAssets.version) const warnings: string[] = [] for (const [name, model] of Object.entries(mcAssets.blocksModels)) { @@ -498,5 +417,5 @@ export const prepareMoreGeneratedBlocks = async (mcAssets: McAssets) => { } export const getAdditionalTextures = () => { - return { generated: generatedImageTextures, twoTileTextures, origSizeTextures } + return { generated: generatedImageTextures, origSizeTextures } } From 2d4b89651cdd8ff4ad9268d51aeb1c90f01b8968 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 11 Jun 2024 21:17:07 +0300 Subject: [PATCH 0123/1074] format, remove useless comment --- .../viewer/lib/worldrendererThree.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 095e5a94..9a76474b 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -22,7 +22,7 @@ export class WorldRendererThree extends WorldRendererCommon { return Object.values(this.sectionObjects).reduce((acc, obj) => acc + (obj as any).tilesCount, 0) } - constructor(public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public config: WorldRendererConfig) { + constructor (public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public config: WorldRendererConfig) { super(config) this.starField = new StarField(scene) } @@ -181,13 +181,12 @@ export class WorldRendererThree extends WorldRendererCommon { const mesh = new THREE.Mesh(new THREE.PlaneGeometry(1, 1), new THREE.MeshBasicMaterial({ map: tex, transparent: true, })) mesh.renderOrder = 999 - // todo @sa2urami shouldnt all this be done in worker? - const lineHeight = 7 / 16; + const lineHeight = 7 / 16 const scaleFactor = isHanging ? 1.3 : 1 mesh.scale.set(1 * scaleFactor, lineHeight * scaleFactor, 1 * scaleFactor) const thickness = (isHanging ? 2 : 1.5) / 16 - const wallSpacing = 0.25 / 16; + const wallSpacing = 0.25 / 16 if (isWall && !isHanging) { mesh.position.set(0, 0, -0.5 + thickness + wallSpacing + 0.0001) } else { @@ -199,9 +198,9 @@ export class WorldRendererThree extends WorldRendererCommon { rotation * (isWall ? 90 : 45 / 2) ), 0) group.add(mesh) - const height = (isHanging ? 10 : 8)/16 + const height = (isHanging ? 10 : 8) / 16 const heightOffset = (isHanging ? 0 : isWall ? 4.333 : 9.333) / 16 - const textPosition = height/2 + heightOffset + const textPosition = height / 2 + heightOffset group.position.set(position.x + 0.5, position.y + textPosition, position.z + 0.5) return group } @@ -322,7 +321,7 @@ class StarField { } } - constructor(private scene: THREE.Scene) { + constructor (private scene: THREE.Scene) { } addToScene () { @@ -386,7 +385,7 @@ class StarField { const version = parseInt(THREE.REVISION.replace(/\D+/g, '')) class StarfieldMaterial extends THREE.ShaderMaterial { - constructor() { + constructor () { super({ uniforms: { time: { value: 0.0 }, fade: { value: 1.0 } }, vertexShader: /* glsl */ ` From 4f20e2481947d813317b3888e75e77b0b85f39dc Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 12 Jun 2024 21:14:48 +0300 Subject: [PATCH 0124/1074] up flying squid --- package.json | 2 +- pnpm-lock.yaml | 79 ++++++++++++++++++++++++-------------------------- 2 files changed, 39 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 7bbde636..f5f55c7f 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "esbuild-plugin-polyfill-node": "^0.3.0", "express": "^4.18.2", "filesize": "^10.0.12", - "flying-squid": "npm:@zardoy/flying-squid@^0.0.24", + "flying-squid": "npm:@zardoy/flying-squid@^0.0.26", "fs-extra": "^11.1.1", "google-drive-browserfs": "github:zardoy/browserfs#google-drive", "iconify-icon": "^1.0.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38a9ebb6..3cbab433 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -104,8 +104,8 @@ importers: specifier: ^10.0.12 version: 10.0.12 flying-squid: - specifier: npm:@zardoy/flying-squid@^0.0.24 - version: '@zardoy/flying-squid@0.0.24(encoding@0.1.13)' + specifier: npm:@zardoy/flying-squid@^0.0.26 + version: '@zardoy/flying-squid@0.0.26(encoding@0.1.13)' fs-extra: specifier: ^11.1.1 version: 11.1.1 @@ -386,7 +386,7 @@ importers: version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chunk: specifier: github:zardoy/prismarine-chunk - version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) + version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) prismarine-schematic: specifier: ^1.2.0 version: 1.2.3 @@ -3054,8 +3054,8 @@ packages: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - '@zardoy/flying-squid@0.0.24': - resolution: {integrity: sha512-C+VNHyh9yYB7aG9OL6r9NR5bF73fyRQ0rHhkvvz901hLBZI3+5nOPdcA6XwJm9XX9BYStXbLTHp6shmo20JRHQ==} + '@zardoy/flying-squid@0.0.26': + resolution: {integrity: sha512-JUGrr+9I4vgXrgjop5iRpulRhWUgRbPC1j+xPapgICtJPEGuekpXIOOBjAL+X7yu7I5IcrmtG4XCjvTKcC0lIQ==} engines: {node: '>=8'} hasBin: true @@ -6718,13 +6718,8 @@ packages: prismarine-chat@1.9.1: resolution: {integrity: sha512-x7WWa5MNhiLZSO6tw+YyKpzquFZ+DNISVgiV6K3SU0GsishMXe+nto02WhF/4AuFerKdugm9u1d/r4C4zSkJOg==} - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16} - version: 1.35.0 - engines: {node: '>=14'} - - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f} + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a} version: 1.35.0 engines: {node: '>=14'} @@ -6747,6 +6742,10 @@ packages: resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29} version: 2.7.0 + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/422aed5db94f341c3807f1a918c7b83c9ebcfe20: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/422aed5db94f341c3807f1a918c7b83c9ebcfe20} + version: 2.8.0 + prismarine-realms@1.3.2: resolution: {integrity: sha512-5apl9Ru8veTj5q2OozRc4GZOuSIcs3yY4UEtALiLKHstBe8bRw8vNlaz4Zla3jsQ8yP/ul1b1IJINTRbocuA6g==} @@ -6764,9 +6763,9 @@ packages: prismarine-windows@2.9.0: resolution: {integrity: sha512-fm4kOLjGFPov7TEJRmXHoiPabxIQrG36r2mDjlNxfkcLfMHFb3/1ML6mp4iRQa7wL0GK4DIAyiBqCWoeWDxARg==} - prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465} - version: 3.6.2 + prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7} + version: 3.6.3 engines: {node: '>=8.0.0'} process-nextick-args@2.0.1: @@ -11931,7 +11930,7 @@ snapshots: '@types/emscripten': 1.39.8 tslib: 1.14.1 - '@zardoy/flying-squid@0.0.24(encoding@0.1.13)': + '@zardoy/flying-squid@0.0.26(encoding@0.1.13)': dependencies: '@tootallnate/once': 2.0.0 change-case: 4.1.2 @@ -11946,13 +11945,13 @@ snapshots: mkdirp: 2.1.6 node-gzip: 1.1.2 node-rsa: 1.1.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 - prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0) + prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/422aed5db94f341c3807f1a918c7b83c9ebcfe20(minecraft-data@3.65.0) prismarine-windows: 2.9.0 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7 rambda: 9.2.0 random-seed: 0.3.0 range: 0.0.3 @@ -13212,7 +13211,7 @@ snapshots: diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687: dependencies: minecraft-data: 3.65.0 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) random-seed: 0.3.0 vec3: 0.1.8 @@ -15779,7 +15778,7 @@ snapshots: prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chat: 1.10.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -15787,7 +15786,7 @@ snapshots: prismarine-recipe: 1.3.1(prismarine-registry@1.7.0) prismarine-registry: 1.7.0 prismarine-windows: 2.9.0 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7 protodef: 1.15.0 typed-emitter: 1.4.0 vec3: 0.1.8 @@ -15802,7 +15801,7 @@ snapshots: prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-chat: 1.10.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -15810,7 +15809,7 @@ snapshots: prismarine-recipe: 1.3.1(prismarine-registry@1.7.0) prismarine-registry: 1.7.0 prismarine-windows: 2.9.0 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7 protodef: 1.15.0 typed-emitter: 1.4.0 vec3: 0.1.8 @@ -16526,20 +16525,7 @@ snapshots: prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0): - dependencies: - prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 - prismarine-nbt: 2.5.0 - prismarine-registry: 1.7.0 - smart-buffer: 4.2.0 - uint4: 0.1.2 - vec3: 0.1.8 - xxhash-wasm: 0.4.2 - transitivePeerDependencies: - - minecraft-data - - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0): + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0): dependencies: prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 @@ -16580,13 +16566,24 @@ snapshots: prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0): dependencies: - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) prismarine-nbt: 2.5.0 uint4: 0.1.2 vec3: 0.1.8 transitivePeerDependencies: - minecraft-data + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/422aed5db94f341c3807f1a918c7b83c9ebcfe20(minecraft-data@3.65.0): + dependencies: + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) + prismarine-nbt: 2.5.0 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7 + uint4: 0.1.2 + vec3: 0.1.8 + transitivePeerDependencies: + - minecraft-data + prismarine-realms@1.3.2(encoding@0.1.13): dependencies: debug: 4.3.4(supports-color@8.1.1) @@ -16609,7 +16606,7 @@ snapshots: minecraft-data: 3.65.0 prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 prismarine-nbt: 2.2.1 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7 vec3: 0.1.8 prismarine-windows@2.9.0: @@ -16618,7 +16615,7 @@ snapshots: prismarine-registry: 1.7.0 typed-emitter: 2.1.0 - prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465: + prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7: dependencies: vec3: 0.1.8 From 5be093a25f88dae99d216416b6f4cd64bc06ecd2 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 13 Jun 2024 03:46:59 +0300 Subject: [PATCH 0125/1074] feat: support world saves for all versions of Minecraft Java! --- package.json | 2 +- pnpm-lock.yaml | 100 +++++++----------- .../viewer/lib/worldDataEmitter.ts | 2 +- src/createLocalServer.ts | 2 +- src/getCollisionShapes.ts | 6 +- src/globals.d.ts | 4 +- src/loadSave.ts | 10 +- src/react/MainMenu.tsx | 2 +- src/soundSystem.ts | 10 +- src/water.ts | 2 +- 10 files changed, 61 insertions(+), 79 deletions(-) diff --git a/package.json b/package.json index f5f55c7f..37e24dbb 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "esbuild-plugin-polyfill-node": "^0.3.0", "express": "^4.18.2", "filesize": "^10.0.12", - "flying-squid": "npm:@zardoy/flying-squid@^0.0.26", + "flying-squid": "npm:@zardoy/flying-squid@^0.0.27", "fs-extra": "^11.1.1", "google-drive-browserfs": "github:zardoy/browserfs#google-drive", "iconify-icon": "^1.0.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3cbab433..052069c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -104,8 +104,8 @@ importers: specifier: ^10.0.12 version: 10.0.12 flying-squid: - specifier: npm:@zardoy/flying-squid@^0.0.26 - version: '@zardoy/flying-squid@0.0.26(encoding@0.1.13)' + specifier: npm:@zardoy/flying-squid@^0.0.27 + version: '@zardoy/flying-squid@0.0.27(encoding@0.1.13)' fs-extra: specifier: ^11.1.1 version: 11.1.1 @@ -150,7 +150,7 @@ importers: version: 6.1.1 prismarine-provider-anvil: specifier: github:zardoy/prismarine-provider-anvil#everything - version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0) + version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/2663cad29c8f231c299f63e31c5040b6c1872bcc(minecraft-data@3.65.0) prosemirror-example-setup: specifier: ^1.2.2 version: 1.2.2 @@ -302,7 +302,7 @@ importers: version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:zardoy/mineflayer - version: https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192(encoding@0.1.13) + version: https://codeload.github.com/zardoy/mineflayer/tar.gz/f80ba0f8ebbcc15d6c44ade84007f8b4a0ee08ec(encoding@0.1.13) mineflayer-pathfinder: specifier: ^2.4.4 version: 2.4.4 @@ -383,10 +383,10 @@ importers: version: 1.3.6 prismarine-block: specifier: github:zardoy/prismarine-block#next-era - version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8 prismarine-chunk: specifier: github:zardoy/prismarine-chunk - version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) + version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0) prismarine-schematic: specifier: ^1.2.0 version: 1.2.3 @@ -3054,8 +3054,8 @@ packages: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - '@zardoy/flying-squid@0.0.26': - resolution: {integrity: sha512-JUGrr+9I4vgXrgjop5iRpulRhWUgRbPC1j+xPapgICtJPEGuekpXIOOBjAL+X7yu7I5IcrmtG4XCjvTKcC0lIQ==} + '@zardoy/flying-squid@0.0.27': + resolution: {integrity: sha512-8QlPCyLqNQYxsGBMBNNGbfc1HdRPO/t3nBr5NzINEridj772DEbgGHxl252rjZWWELt/3t/k3m6e4k9qS7/ZdA==} engines: {node: '>=8'} hasBin: true @@ -4097,8 +4097,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687: - resolution: {tarball: https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687} + diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/4bbe28dcad35403abaa925055e91f601a61b9015: + resolution: {tarball: https://codeload.github.com/zardoy/diamond-square/tar.gz/4bbe28dcad35403abaa925055e91f601a61b9015} version: 1.3.0 diff-sequences@29.6.3: @@ -6067,8 +6067,8 @@ packages: resolution: {integrity: sha512-QMMNPx4IyZE7ydAzjvGLQLCnQNUOfkk1qVZKxTTS9q3qPTAewz4GhsVUBtbQ8LSbHthe5RcQ1Sgxs4wlIma/Qw==} engines: {node: '>=18'} - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192: - resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192} + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/f80ba0f8ebbcc15d6c44ade84007f8b4a0ee08ec: + resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/f80ba0f8ebbcc15d6c44ade84007f8b4a0ee08ec} version: 4.20.1 engines: {node: '>=18'} @@ -6708,18 +6708,15 @@ packages: minecraft-data: 3.65.0 prismarine-registry: ^1.1.0 - prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0} + prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8} version: 1.17.1 prismarine-chat@1.10.1: resolution: {integrity: sha512-XukYcuueuhDxzEXG7r8BZyt6jOObrPPB4JESCgb+/XenB9nExoSHF8eTQWWj8faKPLqm1dRQaYwFJlNBlJZJUw==} - prismarine-chat@1.9.1: - resolution: {integrity: sha512-x7WWa5MNhiLZSO6tw+YyKpzquFZ+DNISVgiV6K3SU0GsishMXe+nto02WhF/4AuFerKdugm9u1d/r4C4zSkJOg==} - - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a} + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3} version: 1.35.0 engines: {node: '>=14'} @@ -6738,12 +6735,8 @@ packages: prismarine-physics@1.8.0: resolution: {integrity: sha512-gbM+S+bmVtOKVv+Z0WGaHMeEeBHISIDsRDRlv8sr0dex3ZJRhuq8djA02CBreguXtI18ZKh6q3TSj2qDr45NHA==} - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29} - version: 2.7.0 - - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/422aed5db94f341c3807f1a918c7b83c9ebcfe20: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/422aed5db94f341c3807f1a918c7b83c9ebcfe20} + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/2663cad29c8f231c299f63e31c5040b6c1872bcc: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/2663cad29c8f231c299f63e31c5040b6c1872bcc} version: 2.8.0 prismarine-realms@1.3.2: @@ -11930,12 +11923,12 @@ snapshots: '@types/emscripten': 1.39.8 tslib: 1.14.1 - '@zardoy/flying-squid@0.0.26(encoding@0.1.13)': + '@zardoy/flying-squid@0.0.27(encoding@0.1.13)': dependencies: '@tootallnate/once': 2.0.0 change-case: 4.1.2 colors: 1.4.0 - diamond-square: https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687 + diamond-square: https://codeload.github.com/zardoy/diamond-square/tar.gz/4bbe28dcad35403abaa925055e91f601a61b9015 emit-then: 2.0.0 exit-hook: 2.2.1 flatmap: 0.0.3 @@ -11945,11 +11938,11 @@ snapshots: mkdirp: 2.1.6 node-gzip: 1.1.2 node-rsa: 1.1.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 - prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/422aed5db94f341c3807f1a918c7b83c9ebcfe20(minecraft-data@3.65.0) + prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/2663cad29c8f231c299f63e31c5040b6c1872bcc(minecraft-data@3.65.0) prismarine-windows: 2.9.0 prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7 rambda: 9.2.0 @@ -13208,10 +13201,11 @@ snapshots: dependencies: dequal: 2.0.3 - diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687: + diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/4bbe28dcad35403abaa925055e91f601a61b9015: dependencies: minecraft-data: 3.65.0 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0) + prismarine-registry: 1.7.0 random-seed: 0.3.0 vec3: 0.1.8 @@ -15764,7 +15758,7 @@ snapshots: mineflayer-pathfinder@2.4.4: dependencies: minecraft-data: 3.65.0 - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8 prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.2.1 @@ -15776,9 +15770,9 @@ snapshots: minecraft-data: 3.65.0 minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8 prismarine-chat: 1.10.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -15794,14 +15788,14 @@ snapshots: - encoding - supports-color - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192(encoding@0.1.13): + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/f80ba0f8ebbcc15d6c44ade84007f8b4a0ee08ec(encoding@0.1.13): dependencies: minecraft-data: 3.65.0 minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13) prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8 prismarine-chat: 1.10.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0) prismarine-entity: 2.3.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 @@ -16503,11 +16497,11 @@ snapshots: minecraft-data: 3.65.0 prismarine-registry: 1.7.0 - prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0: + prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8: dependencies: minecraft-data: 3.65.0 prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) - prismarine-chat: 1.9.1 + prismarine-chat: 1.10.1 prismarine-item: 1.14.0 prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 @@ -16518,17 +16512,10 @@ snapshots: prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 - prismarine-chat@1.9.1: - dependencies: - mojangson: 2.0.4 - prismarine-item: 1.14.0 - prismarine-nbt: 2.5.0 - prismarine-registry: 1.7.0 - - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0): + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0): dependencies: prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0) - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8 prismarine-nbt: 2.5.0 prismarine-registry: 1.7.0 smart-buffer: 4.2.0 @@ -16564,19 +16551,10 @@ snapshots: prismarine-nbt: 2.5.0 vec3: 0.1.8 - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0): + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/2663cad29c8f231c299f63e31c5040b6c1872bcc(minecraft-data@3.65.0): dependencies: - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) - prismarine-nbt: 2.5.0 - uint4: 0.1.2 - vec3: 0.1.8 - transitivePeerDependencies: - - minecraft-data - - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/422aed5db94f341c3807f1a918c7b83c9ebcfe20(minecraft-data@3.65.0): - dependencies: - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/45f0da31a6ab7107204f2b0a5d56dccb6059025a(minecraft-data@3.65.0) + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8 + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0) prismarine-nbt: 2.5.0 prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7 uint4: 0.1.2 @@ -16604,7 +16582,7 @@ snapshots: prismarine-schematic@1.2.3: dependencies: minecraft-data: 3.65.0 - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8 prismarine-nbt: 2.2.1 prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7 vec3: 0.1.8 diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index 3a8fbd40..ed578040 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -83,7 +83,7 @@ export class WorldDataEmitter extends EventEmitter { get (_target, posKey, receiver) { if (typeof posKey !== 'string') return const [x, y, z] = posKey.split(',').map(Number) - return bot.world.getBlock(new Vec3(x, y, z)).entity + return bot.world.getBlock(new Vec3(x, y, z))?.entity }, })) this.emitter.emit('renderDistance', this.viewDistance) diff --git a/src/createLocalServer.ts b/src/createLocalServer.ts index 44bc2187..d0beac9a 100644 --- a/src/createLocalServer.ts +++ b/src/createLocalServer.ts @@ -14,4 +14,4 @@ export const startLocalServer = (serverOptions) => { // features that flying-squid doesn't support at all // todo move & generate in flying-squid -export const unsupportedLocalServerFeatures = ['transactionPacketExists', 'teleportUsesOwnPacket', 'dimensionDataIsAvailable'] +export const unsupportedLocalServerFeatures = ['transactionPacketExists', 'teleportUsesOwnPacket'] diff --git a/src/getCollisionShapes.ts b/src/getCollisionShapes.ts index 0faf5b6a..4ee0e802 100644 --- a/src/getCollisionShapes.ts +++ b/src/getCollisionShapes.ts @@ -1,4 +1,4 @@ -import { adoptBlockOrItemNamesFromLatest } from 'flying-squid/dist/blockRenames' +import { getRenamedData } from 'flying-squid/dist/blockRenames' import collisionShapesInit from '../generated/latestBlockCollisionsShapes.json' import outputInteractionShapesJson from './interactionShapesGenerated.json' @@ -6,7 +6,7 @@ import outputInteractionShapesJson from './interactionShapesGenerated.json' window.globalGetCollisionShapes = (version) => { // todo use the same in resourcepack const versionFrom = collisionShapesInit.version - const renamedBlocks = adoptBlockOrItemNamesFromLatest('blocks', Object.keys(collisionShapesInit.blocks), versionFrom, version) + const renamedBlocks = getRenamedData('blocks', Object.keys(collisionShapesInit.blocks), versionFrom, version) const collisionShapes = { ...collisionShapesInit, blocks: Object.fromEntries(Object.entries(collisionShapesInit.blocks).map(([, shape], i) => [renamedBlocks[i], shape])) @@ -17,7 +17,7 @@ window.globalGetCollisionShapes = (version) => { export default () => { customEvents.on('gameLoaded', () => { // todo also remap block states (e.g. redstone)! - const renamedBlocksInteraction = adoptBlockOrItemNamesFromLatest('blocks', Object.keys(outputInteractionShapesJson), '1.20.2', bot.version) + const renamedBlocksInteraction = getRenamedData('blocks', Object.keys(outputInteractionShapesJson), '1.20.2', bot.version) const interactionShapes = { ...outputInteractionShapesJson, ...Object.fromEntries(Object.entries(outputInteractionShapesJson).map(([block, shape], i) => [renamedBlocksInteraction[i], shape])) diff --git a/src/globals.d.ts b/src/globals.d.ts index 6a38a21d..05b29a14 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -3,7 +3,9 @@ declare const THREE: typeof import('three') // todo make optional declare const bot: Omit & { - world: import('prismarine-world').world.WorldSync + world: Omit & { + getBlock: (pos: import('vec3').Vec3) => import('prismarine-block').Block | null + } _client: Omit & { write: typeof import('./generatedClientPackets').clientWrite on: typeof import('./generatedServerPackets').clientOn diff --git a/src/loadSave.ts b/src/loadSave.ts index af9d078c..7ca454ff 100644 --- a/src/loadSave.ts +++ b/src/loadSave.ts @@ -1,15 +1,16 @@ import fs from 'fs' import path from 'path' -import { supportedVersions } from 'flying-squid/dist/lib/version' import * as nbt from 'prismarine-nbt' import { proxy } from 'valtio' import { gzip } from 'node-gzip' +import { versionToNumber } from 'prismarine-viewer/viewer/prepare/utils' import { options } from './optionsStorage' import { nameToMcOfflineUUID, disconnect } from './flyingSquidUtils' import { existsViaStats, forceCachedDataPaths, forceRedirectPaths, mkdirRecursive } from './browserfs' import { isMajorVersionGreater } from './utils' import { activeModalStacks, insertActiveModalStack, miscUiState } from './globalState' +import supportedVersions from './supportedVersions.mjs' // todo include name of opened handle (zip)! // additional fs metadata @@ -91,13 +92,12 @@ export const loadSave = async (root = '/world') => { const newVersion = '1.8.8' version = newVersion } - // const lastSupportedVersion = supportedVersions.at(-1)! - const lastTestedVersion = '1.18.2' + const lastSupportedVersion = supportedVersions.at(-1)! const firstSupportedVersion = supportedVersions[0] const lowerBound = isMajorVersionGreater(firstSupportedVersion, version) - const upperBound = isMajorVersionGreater(version, lastTestedVersion) + const upperBound = versionToNumber(version) > versionToNumber(lastSupportedVersion) if (lowerBound || upperBound) { - version = prompt(`Version ${version} is not supported, supported versions are ${supportedVersions.join(', ')}, what try to use instead?`, lowerBound ? firstSupportedVersion : lastTestedVersion) + version = prompt(`Version ${version} is not supported, supported versions are ${supportedVersions.join(', ')}, what try to use instead?`, lowerBound ? firstSupportedVersion : lastSupportedVersion) if (!version) return } if (levelDat.WorldGenSettings) { diff --git a/src/react/MainMenu.tsx b/src/react/MainMenu.tsx index 3e3170f4..43908645 100644 --- a/src/react/MainMenu.tsx +++ b/src/react/MainMenu.tsx @@ -103,7 +103,7 @@ export default ({ connectToServerAction, mapsProvider, singleplayerAction, optio icon='pixelarticons:folder' onClick={openFileAction} initialTooltip={{ - content: 'Load any 1.8-1.16 Java world' + (haveDirectoryPicker() ? '' : ' (zip)'), + content: 'Load any Java world save' + (haveDirectoryPicker() ? '' : ' (zip)!'), placement: 'bottom-start', }} /> diff --git a/src/soundSystem.ts b/src/soundSystem.ts index a2cc1f70..e7fdaee7 100644 --- a/src/soundSystem.ts +++ b/src/soundSystem.ts @@ -144,10 +144,12 @@ subscribeKey(miscUiState, 'gameLoaded', async () => { // movement happening if (Date.now() - lastStepSound > 300) { const blockUnder = bot.world.getBlock(bot.entity.position.offset(0, -1, 0)) - const stepSound = getStepSound(blockUnder) - if (stepSound) { - await playHardcodedSound(stepSound, undefined, 0.6)// todo not sure why 0.6 - lastStepSound = Date.now() + if (blockUnder) { + const stepSound = getStepSound(blockUnder) + if (stepSound) { + await playHardcodedSound(stepSound, undefined, 0.6)// todo not sure why 0.6 + lastStepSound = Date.now() + } } } } diff --git a/src/water.ts b/src/water.ts index 9f8ec557..d8b4b41c 100644 --- a/src/water.ts +++ b/src/water.ts @@ -19,7 +19,7 @@ customEvents.on('gameLoaded', () => { } bot.on('physicsTick', () => { // todo - const _inWater = bot.world.getBlock(bot.entity.position.offset(0, 1, 0)).name === 'water' + const _inWater = bot.world.getBlock(bot.entity.position.offset(0, 1, 0))?.name === 'water' if (_inWater !== inWater) { inWater = _inWater updateInWater() From 216b1712c2dd418636d9fcc9c6e632137555e2d9 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 13 Jun 2024 19:47:48 +0300 Subject: [PATCH 0126/1074] more basic tests. test joining to a local java vanilla server, movement! --- .eslintrc.json | 17 +++++++++ .gitignore | 1 + cypress/e2e/index.spec.ts | 57 ++++++++++++++++++++++++++++- cypress/e2e/shared.ts | 3 ++ cypress/plugins/index.js | 9 ++++- cypress/plugins/server.properties | 61 +++++++++++++++++++++++++++++++ cypress/plugins/startServer.ts | 45 +++++++++++++++++++++++ index.html | 2 +- src/index.ts | 7 +++- src/react/Chat.tsx | 3 +- src/worldInteractions.ts | 3 +- 11 files changed, 200 insertions(+), 8 deletions(-) create mode 100644 cypress/plugins/server.properties create mode 100644 cypress/plugins/startServer.ts diff --git a/.eslintrc.json b/.eslintrc.json index 98388260..a91015d2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -96,5 +96,22 @@ "unicorn/filename-case": "off", "max-depth": "off" }, + "overrides": [ + { + "files": [ + "*.js" + ], + "rules": { + "space-before-function-paren": [ + "error", + { + "anonymous": "always", + "named": "never", + "asyncArrow": "always" + } + ] + } + } + ], "root": true } diff --git a/.gitignore b/.gitignore index 240b751a..3a188862 100644 --- a/.gitignore +++ b/.gitignore @@ -17,5 +17,6 @@ out .vercel generated storybook-static +server-jar src/react/npmReactComponents.ts diff --git a/cypress/e2e/index.spec.ts b/cypress/e2e/index.spec.ts index 05b50211..ec7d84e7 100644 --- a/cypress/e2e/index.spec.ts +++ b/cypress/e2e/index.spec.ts @@ -1,4 +1,6 @@ +/* eslint-disable max-nested-callbacks */ /// +import supportedVersions from '../../src/supportedVersions.mjs' import { setOptions, cleanVisit, visit } from './shared' // todo use ssl @@ -12,7 +14,7 @@ const compareRenderedFlatWorld = () => { } const testWorldLoad = () => { - cy.document().then({ timeout: 20_000 }, doc => { + return cy.document().then({ timeout: 20_000 }, doc => { return new Cypress.Promise(resolve => { doc.addEventListener('cypress-world-ready', resolve) }) @@ -36,7 +38,7 @@ it('Loads & renders singleplayer', () => { testWorldLoad() }) -it('Joins to server', () => { +it('Joins to local flying-squid server', () => { visit('/?ip=localhost&version=1.16.1') window.localStorage.version = '' // todo replace with data-test @@ -47,9 +49,60 @@ it('Joins to server', () => { testWorldLoad() }) +it('Joins to local latest Java vanilla server', () => { + const version = supportedVersions.at(-1)! + cy.task('startServer', [version, 25_590]).then(() => { + visit('/?ip=localhost:25590&username=bot') + cy.get('[data-test-id="connect-qs"]').click() + testWorldLoad().then(() => { + let x = 0 + let z = 0 + cy.window().then((win) => { + x = win.bot.entity.position.x + z = win.bot.entity.position.z + }) + cy.document().trigger('keydown', { code: 'KeyW' }) + cy.wait(1500).then(() => { + cy.document().trigger('keyup', { code: 'KeyW' }) + cy.window().then(async (win) => { + // eslint-disable-next-line prefer-destructuring + const bot: typeof __type_bot = win.bot + // todo use f3 stats instead + if (bot.entity.position.x === x && bot.entity.position.z === z) { + throw new Error('Player not moved') + } + + bot.chat('Hello') // todo assert + bot.chat('/gamemode creative') + // bot.on('message', () => { + void bot.creative.setInventorySlot(bot.inventory.hotbarStart, new win.PrismarineItem(1, 1, 0)) + // }) + await bot.lookAt(bot.entity.position.offset(1, 0, 1)) + }).then(() => { + cy.document().trigger('mousedown', { button: 2, isTrusted: true, force: true }) // right click + cy.document().trigger('mouseup', { button: 2, isTrusted: true, force: true }) + cy.wait(1000) + }) + }) + }) + }) +}) + it('Loads & renders zip world', () => { cleanVisit() cy.get('[data-test-id="select-file-folder"]').click({ shiftKey: true }) cy.get('input[type="file"]').selectFile('cypress/superflat.zip', { force: true }) testWorldLoad() }) + + +it.skip('Loads & renders world from folder', () => { + cleanVisit() + // dragndrop folder + cy.get('[data-test-id="select-file-folder"]').click() + cy.get('input[type="file"]').selectFile('server-jar/world', { + force: true, + // action: 'drag-drop', + }) + testWorldLoad() +}) diff --git a/cypress/e2e/shared.ts b/cypress/e2e/shared.ts index 9292a8d5..47518f1b 100644 --- a/cypress/e2e/shared.ts +++ b/cypress/e2e/shared.ts @@ -3,6 +3,9 @@ import { AppOptions } from '../../src/optionsStorage' export const cleanVisit = (url?) => { cy.clearLocalStorage() visit(url) + window.localStorage.options = { + chatOpacity: 0 + } } export const visit = (url = '/') => { window.localStorage.cypress = 'true' diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index 35dc2989..e55f5d26 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -2,11 +2,13 @@ const { cypressEsbuildPreprocessor } = require('cypress-esbuild-preprocessor') const { initPlugin } = require('cypress-plugin-snapshots/plugin') const polyfill = require('esbuild-plugin-polyfill-node') +const { startMinecraftServer } = require('./startServer') module.exports = (on, config) => { initPlugin(on, config) on('file:preprocessor', cypressEsbuildPreprocessor({ esbuildOptions: { + sourcemap: true, plugins: [ polyfill.polyfillNode({ polyfills: { @@ -17,10 +19,15 @@ module.exports = (on, config) => { }, })) on('task', { - log (message) { + log(message) { console.log(message) return null }, }) + on('task', { + async startServer([version, port]) { + return startMinecraftServer(version, port) + } + }) return config } diff --git a/cypress/plugins/server.properties b/cypress/plugins/server.properties new file mode 100644 index 00000000..5873a1aa --- /dev/null +++ b/cypress/plugins/server.properties @@ -0,0 +1,61 @@ +#Minecraft server properties +allow-flight=false +allow-nether=true +broadcast-console-to-ops=true +broadcast-rcon-to-ops=true +difficulty=peaceful +enable-command-block=false +enable-jmx-monitoring=false +enable-query=false +enable-rcon=false +enable-status=true +enforce-secure-profile=true +enforce-whitelist=false +entity-broadcast-range-percentage=100 +force-gamemode=false +function-permission-level=2 +gamemode=survival +generate-structures=true +generator-settings={} +hardcore=false +hide-online-players=false +initial-disabled-packs= +initial-enabled-packs=vanilla +level-name=world +level-seed= +level-type=flat +log-ips=true +max-build-height=256 +max-chained-neighbor-updates=1000000 +max-players=20 +max-tick-time=60000 +max-world-size=29999984 +motd=A Minecraft Server +network-compression-threshold=256 +online-mode=false +op-permission-level=4 +player-idle-timeout=0 +prevent-proxy-connections=false +pvp=true +query.port=25565 +rate-limit=0 +rcon.password= +rcon.port=25575 +require-resource-pack=false +resource-pack= +resource-pack-id= +resource-pack-prompt= +resource-pack-sha1= +server-ip= +server-port=25565 +simulation-distance=10 +snooper-enabled=true +spawn-animals=true +spawn-monsters=true +spawn-npcs=true +spawn-protection=16 +sync-chunk-writes=true +text-filtering-config= +use-native-transport=true +view-distance=10 +white-list=false diff --git a/cypress/plugins/startServer.ts b/cypress/plugins/startServer.ts new file mode 100644 index 00000000..ecf0d210 --- /dev/null +++ b/cypress/plugins/startServer.ts @@ -0,0 +1,45 @@ +import { ChildProcess, spawn } from 'child_process' +import * as fs from 'fs' +import * as path from 'path' +import { promisify } from 'util' +import { downloadServer } from 'minecraft-wrap' +import * as waitOn from 'wait-on' + +let prevProcess: ChildProcess | null = null +export const startMinecraftServer = async (version: string, port: number) => { + if (prevProcess) return null + const jar = `./server-jar/${version}.jar` + + const start = () => { + // if (prevProcess) { + // prevProcess.kill() + // } + + prevProcess = spawn('java', ['-jar', path.basename(jar), 'nogui', '--port', `${port}`], { + stdio: 'inherit', + cwd: path.dirname(jar), + }) + } + + let coldStart = false + if (fs.existsSync(jar)) { + start() + } else { + coldStart = true + promisify(downloadServer)(version, jar).then(() => { + // add eula.txt + fs.writeFileSync(path.join(path.dirname(jar), 'eula.txt'), 'eula=true') + // copy cypress/plugins/server.properties + fs.copyFileSync(path.join(__dirname, 'server.properties'), path.join(path.dirname(jar), 'server.properties')) + // copy ops.json + fs.copyFileSync(path.join(__dirname, 'ops.json'), path.join(path.dirname(jar), 'ops.json')) + start() + }) + } + + return new Promise((res) => { + waitOn({ resources: [`tcp:localhost:${port}`] }, () => { + setTimeout(() => res(null), coldStart ? 6500 : 2000) // todo retry instead of timeout + }) + }) +} diff --git a/index.html b/index.html index 6d3b326b..62e109cd 100644 --- a/index.html +++ b/index.html @@ -14,7 +14,7 @@
Loading...
-
A true Minecraft client in your browser!
+
A true Minecraft client in your browser!
` diff --git a/src/index.ts b/src/index.ts index fe584b4d..72f270d4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,6 +17,7 @@ import './scaleInterface' import itemsPng from 'prismarine-viewer/public/textures/items.png' import { initWithRenderer } from './topRightStats' import PrismarineBlock from 'prismarine-block' +import PrismarineItem from 'prismarine-item' import { options, watchValue } from './optionsStorage' import './reactUi.jsx' @@ -580,6 +581,7 @@ async function connect (connectOptions: ConnectOptions) { errorAbortController.abort() const mcData = MinecraftData(bot.version) window.PrismarineBlock = PrismarineBlock(mcData.version.minecraftVersion!) + window.PrismarineItem = PrismarineItem(mcData.version.minecraftVersion!) window.loadedData = mcData window.Vec3 = Vec3 window.pathfinder = pathfinder @@ -825,9 +827,12 @@ listenGlobalEvents() watchValue(miscUiState, async s => { if (s.appLoaded) { // fs ready const qs = new URLSearchParams(window.location.search) + const moreServerOptions = {} as Record + if (qs.has('version')) moreServerOptions.version = qs.get('version') if (qs.get('singleplayer') === '1') { loadSingleplayer({}, { - worldFolder: undefined + worldFolder: undefined, + ...moreServerOptions }) } if (qs.get('loadSave')) { diff --git a/src/react/Chat.tsx b/src/react/Chat.tsx index b05f9930..981878c8 100644 --- a/src/react/Chat.tsx +++ b/src/react/Chat.tsx @@ -1,6 +1,5 @@ import { proxy, subscribe } from 'valtio' import { useEffect, useMemo, useRef, useState } from 'react' -import { isCypress } from '../standaloneUtils' import { MessageFormatPart } from '../botUtils' import { MessagePart } from './MessageFormatted' import './Chat.css' @@ -200,7 +199,7 @@ export default ({ messages, opacity = 1, fetchCompletionItems, opened, sendMessa return ( <> -
diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index 9772c9b4..ca749560 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -7,6 +7,7 @@ import ServersList from './ServersList' import AddServerOrConnect, { BaseServerInfo } from './AddServerOrConnect' import { useDidUpdateEffect } from './utils' import { useIsModalActive } from './utilsApp' +import { showOptionsModal } from './SelectOption' interface StoreServerItem extends BaseServerInfo { lastJoined?: number @@ -46,6 +47,15 @@ type AdditionalDisplayData = { icon?: string } +export interface AuthenticatedAccount { + // type: 'microsoft' + username: string + cachedTokens?: { + data: any + expiresOn: number + } +} + const getInitialServersList = () => { if (localStorage['serversList']) return JSON.parse(localStorage['serversList']) as StoreServerItem[] @@ -62,7 +72,6 @@ const getInitialServersList = () => { if (localStorage['server']) { const legacyLastJoinedServer: StoreServerItem = { ip: localStorage['server'], - passwordOverride: localStorage['password'], versionOverride: localStorage['version'], lastJoined: Date.now() } @@ -104,16 +113,21 @@ const getInitialProxies = () => { return proxies } -export const updateLoadedServerData = (callback: (data: StoreServerItem) => StoreServerItem) => { +export const updateLoadedServerData = (callback: (data: StoreServerItem) => StoreServerItem, index = miscUiState.loadedServerIndex) => { + if (!index) return // function assumes component is not mounted to avoid sync issues after save - const { loadedServerIndex } = miscUiState - if (!loadedServerIndex) return const servers = getInitialServersList() - const server = servers[loadedServerIndex] - servers[loadedServerIndex] = callback(server) + const server = servers[index] + servers[index] = callback(server) setNewServersList(servers) } +export const updateAuthenticatedAccountData = (callback: (data: AuthenticatedAccount[]) => AuthenticatedAccount[]) => { + const accounts = JSON.parse(localStorage['authenticatedAccounts'] || '[]') as AuthenticatedAccount[] + const newAccounts = callback(accounts) + localStorage['authenticatedAccounts'] = JSON.stringify(newAccounts) +} + // todo move to base const normalizeIp = (ip: string) => ip.replace(/https?:\/\//, '').replace(/\/(:|$)/, '') @@ -122,6 +136,11 @@ const Inner = () => { const [selectedProxy, setSelectedProxy] = useState(localStorage.getItem('selectedProxy') ?? proxies?.[0] ?? '') const [serverEditScreen, setServerEditScreen] = useState(null) // true for add const [defaultUsername, setDefaultUsername] = useState(localStorage['username'] ?? (`mcrafter${Math.floor(Math.random() * 1000)}`)) + const [authenticatedAccounts, setAuthenticatedAccounts] = useState(JSON.parse(localStorage['authenticatedAccounts'] || '[]')) + + useEffect(() => { + localStorage.setItem('authenticatedAccounts', JSON.stringify(authenticatedAccounts)) + }, [authenticatedAccounts]) useEffect(() => { localStorage.setItem('username', defaultUsername) @@ -215,6 +234,7 @@ const Inner = () => { } setServerEditScreen(null) }} + accounts={authenticatedAccounts.map(a => a.username)} initialData={!serverEditScreen || serverEditScreen === true ? undefined : serverEditScreen} onQsConnect={(info) => { const connectOptions: ConnectOptions = { @@ -222,7 +242,6 @@ const Inner = () => { server: normalizeIp(info.ip), proxy: info.proxyOverride || selectedProxy, botVersion: info.versionOverride, - password: info.passwordOverride, ignoreQs: true, } dispatchEvent(new CustomEvent('connect', { detail: connectOptions })) @@ -249,14 +268,22 @@ const Inner = () => { if (!username) return setDefaultUsername(username) } + let authenticatedAccount: AuthenticatedAccount | true | undefined + if (overrides.authenticatedAccountOverride) { + if (overrides.authenticatedAccountOverride === true) { + authenticatedAccount = true + } else { + authenticatedAccount = authenticatedAccounts.find(a => a.username === overrides.authenticatedAccountOverride) ?? true + } + } const options = { username, server: normalizeIp(ip), proxy: overrides.proxyOverride || selectedProxy, botVersion: overrides.versionOverride ?? /* legacy */ overrides['version'], - password: overrides.passwordOverride, ignoreQs: true, autoLoginPassword: server?.autoLogin?.[username], + authenticatedAccount, onSuccessfulPlay () { if (shouldSave && !serversList.some(s => s.ip === ip)) { const newServersList: StoreServerItem[] = [...serversList, { @@ -294,6 +321,11 @@ const Inner = () => { }} username={defaultUsername} setUsername={setDefaultUsername} + onProfileClick={async () => { + const username = await showOptionsModal('Select authenticated account to remove', authenticatedAccounts.map(a => a.username)) + if (!username) return + setAuthenticatedAccounts(old => old.filter(a => a.username !== username)) + }} onWorldAction={(action, index) => { const server = serversList[index] if (!server) return diff --git a/src/react/SignInMessage.stories.tsx b/src/react/SignInMessage.stories.tsx new file mode 100644 index 00000000..16528700 --- /dev/null +++ b/src/react/SignInMessage.stories.tsx @@ -0,0 +1,18 @@ +import type { Meta, StoryObj } from '@storybook/react' +import SignInMessage from './SignInMessage' + +const meta: Meta<{ open }> = { + component: SignInMessage as any, + render ({ open }) { + return + }, +} + +export default meta +type Story = StoryObj<{ open }> + +export const Primary: Story = { + args: { + }, +} diff --git a/src/react/SignInMessage.tsx b/src/react/SignInMessage.tsx new file mode 100644 index 00000000..2ec38816 --- /dev/null +++ b/src/react/SignInMessage.tsx @@ -0,0 +1,107 @@ +import { useState } from 'react' +import { useUtilsEffect } from '@zardoy/react-util' +import PixelartIcon from './PixelartIcon' +import Screen from './Screen' +import Button from './Button' + +export default ({ + code = 'ABCD-EFGH-IJKL-MNOP', + loginLink = 'https://aka.ms/devicelogin', + connectingServer = 'mc.example.comsdlfjsklfjsfjdskfjsj', + warningText = true, + expiresEnd = Date.now() + 1000 * 60 * 5, + setSaveToken = (() => { }) as ((state: boolean) => void) | undefined, + defaultSaveToken = true, + onCancel = () => { }, + directLink = 'https://aka.ms/devicelogin' +}) => { + if (connectingServer.length > 30) connectingServer = connectingServer.slice(0, 30) + '...' + const [timeLeft, setTimeLeft] = useState(``) + + useUtilsEffect(({ interval }) => { + interval(1000, () => { + const timeLeft = Math.max(0, Math.ceil((expiresEnd - Date.now()) / 1000)) + const minutes = Math.floor(timeLeft / 60) + const seconds = timeLeft % 60 + setTimeLeft(`${minutes}:${seconds.toString().padStart(2, '0')}`) + if (timeLeft <= 0) setTimeLeft('Code expired!') + }) + }, []) + + return + + + +} diff --git a/src/react/SignInMessageProvider.tsx b/src/react/SignInMessageProvider.tsx new file mode 100644 index 00000000..68ea83aa --- /dev/null +++ b/src/react/SignInMessageProvider.tsx @@ -0,0 +1,32 @@ +import { proxy, ref, useSnapshot } from 'valtio' +import SignInMessage from './SignInMessage' +import { lastConnectOptions } from './AppStatusProvider' + +export const signInMessageState = proxy({ + code: '', + link: '', + expiresOn: 0, + shouldSaveToken: true, + abortController: ref(new AbortController()), +}) + +export default () => { + const { code, expiresOn, link, shouldSaveToken } = useSnapshot(signInMessageState) + + if (!code) return null + + return { + signInMessageState.shouldSaveToken = state + }} + connectingServer={lastConnectOptions.value?.server ?? ''} + onCancel={() => { + signInMessageState.abortController.abort() + }} + directLink={`http://microsoft.com/link?otc=${code}`} + /> +} diff --git a/src/react/globals.d.ts b/src/react/globals.d.ts index 108fae54..7b0f64bb 100644 --- a/src/react/globals.d.ts +++ b/src/react/globals.d.ts @@ -32,9 +32,9 @@ declare module '*.svg' { interface PromiseConstructor { withResolvers (): { - resolve: (value: T) => void; - reject: (reason: any) => void; - promise: Promise; + resolve: (value: T) => void + reject: (reason: any) => void + promise: Promise } } @@ -44,6 +44,7 @@ declare namespace JSX { icon: string style?: React.CSSProperties class?: string + onClick?: (e) => void } } } diff --git a/src/reactUi.tsx b/src/reactUi.tsx index f140326e..34a567cd 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -40,6 +40,7 @@ import KeybindingsScreenProvider from './react/KeybindingsScreenProvider' import HeldMapUi from './react/HeldMapUi' import BedTime from './react/BedTime' import NoModalFoundProvider from './react/NoModalFoundProvider' +import SignInMessageProvider from './react/SignInMessageProvider' const RobustPortal = ({ children, to }) => { return createPortal({children}, to) @@ -173,6 +174,7 @@ const App = () => { + {/* */} @@ -191,7 +193,7 @@ const App = () => { const PerComponentErrorBoundary = ({ children }) => { return children.map((child, i) => { const componentNameClean = (child.type.name || child.type.displayName || 'Unknown').replaceAll(/__|_COMPONENT/g, '') - showNotification(`UI component ${componentNameClean} crashed!`, 'Please report this. Use console to see more info.', true, undefined) + showNotification(`UI component ${componentNameClean} crashed!`, 'Please report this. Use console for more.', true, undefined) return null }}>{child}) } diff --git a/src/yggdrasilReplacement.ts b/src/yggdrasilReplacement.ts new file mode 100644 index 00000000..e0cab6f0 --- /dev/null +++ b/src/yggdrasilReplacement.ts @@ -0,0 +1,27 @@ +export const server = ({ host: sessionServer }) => { + return { + async join (accessToken, sessionSelectedProfileId, serverId, sharedSecret, publicKey, cb) { + try { + const result = await fetch(`${sessionServer}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + accessToken, + selectedProfile: sessionSelectedProfileId, + serverId, + sharedSecret, + publicKey, + }), + }) + if (!result.ok) { + throw new Error(`Request failed ${await result.text()}`) + } + cb(null) + } catch (err) { + cb(err) + } + } + } +} From 324c08ef436ec66672d544109eacc08d27dd2dcc Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 7 Jul 2024 00:32:04 +0300 Subject: [PATCH 0162/1074] finally update dockerfile to a working one! uses 6gb of ram to build btw. image size: 2.4gb, ~200mb when running --- .dockerignore | 2 -- Dockerfile | 19 ++++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.dockerignore b/.dockerignore index 285d1303..38ca0016 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,3 @@ -# we dont want default config to be loaded in the dockerfile, but rather using a volume -config.json # build stuff node_modules public \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index aa9eb3dc..086240b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,22 @@ -FROM node:14-alpine +FROM node:18-alpine # Without git installing the npm packages fails RUN apk add git RUN mkdir /app WORKDIR /app COPY . /app -RUN npm install -RUN npm run build +# install python and other dependencies +RUN apk add python3 make g++ cairo-dev pango-dev jpeg-dev giflib-dev librsvg-dev +# install pnpm +RUN npm i -g pnpm@9.0.4 +RUN pnpm install +# only for prod +RUN pnpm run build +# --- +EXPOSE 8080 +# uncomment for development +# EXPOSE 9090 +# VOLUME /app/src +# VOLUME /app/prismarine-viewer +# ENTRYPOINT ["pnpm", "run", "run-all"] +# only for prod ENTRYPOINT ["npm", "run", "prod-start"] From d80b71ede74a110debac25c1ea5b45f802b5d41d Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 6 Jul 2024 23:20:40 +0300 Subject: [PATCH 0163/1074] add demo to npm readme file --- README.NPM.MD | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.NPM.MD b/README.NPM.MD index c036adba..c44492c6 100644 --- a/README.NPM.MD +++ b/README.NPM.MD @@ -1,9 +1,13 @@ # Minecraft React +Minecraft UI components for React. + ```bash -yarn add minecraft-react +pnpm i minecraft-react ``` +![demo](https://github-production-user-asset-6210df.s3.amazonaws.com/46503702/346295584-80f3ed4a-cab6-45d2-8896-5e20233cc9b1.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240706%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240706T195400Z&X-Amz-Expires=300&X-Amz-Signature=5b063823a57057c4042c15edd1db3edd107e00940fd0e66a2ba1df4e564a2809&X-Amz-SignedHeaders=host&actor_id=46503702&key_id=0&repo_id=432411890) + ## Usage ```jsx From d1d0959cb40af0e7872f12996db1ce6ce1f364e1 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 7 Jul 2024 01:12:25 +0300 Subject: [PATCH 0164/1074] feat: add Sonar bypass making possible to join to projects like ruhypixel.net wip: packets replay feature! --- pnpm-lock.yaml | 8 ++++---- src/index.ts | 14 ++++++++++++-- src/inventoryWindows.ts | 4 ++-- src/optionsGuiScheme.tsx | 22 ++++++++++++++++++++++ src/react/AppStatusProvider.tsx | 7 ++++++- src/react/ServersListProvider.tsx | 2 ++ src/react/SignInMessage.tsx | 2 ++ 7 files changed, 50 insertions(+), 9 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98618ba5..cf890476 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -311,7 +311,7 @@ importers: version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/c50afc54e39817f7e4d313ce0f6fdaad71e7e4f4(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:zardoy/mineflayer - version: https://codeload.github.com/zardoy/mineflayer/tar.gz/a4b1b4ba7f8c972cee9c0a16eb1191ff4d21fe23(encoding@0.1.13) + version: https://codeload.github.com/zardoy/mineflayer/tar.gz/dddc683544317f117172077a9245a07be1b12479(encoding@0.1.13) mineflayer-pathfinder: specifier: ^2.4.4 version: 2.4.4 @@ -6089,8 +6089,8 @@ packages: resolution: {integrity: sha512-QMMNPx4IyZE7ydAzjvGLQLCnQNUOfkk1qVZKxTTS9q3qPTAewz4GhsVUBtbQ8LSbHthe5RcQ1Sgxs4wlIma/Qw==} engines: {node: '>=18'} - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/a4b1b4ba7f8c972cee9c0a16eb1191ff4d21fe23: - resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/a4b1b4ba7f8c972cee9c0a16eb1191ff4d21fe23} + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/dddc683544317f117172077a9245a07be1b12479: + resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/dddc683544317f117172077a9245a07be1b12479} version: 4.20.1 engines: {node: '>=18'} @@ -15831,7 +15831,7 @@ snapshots: - encoding - supports-color - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/a4b1b4ba7f8c972cee9c0a16eb1191ff4d21fe23(encoding@0.1.13): + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/dddc683544317f117172077a9245a07be1b12479(encoding@0.1.13): dependencies: minecraft-data: 3.65.0 minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=7otpchsbv7hxsuis4rrrwdtbve)(encoding@0.1.13) diff --git a/src/index.ts b/src/index.ts index 5fd50ce3..e73e8240 100644 --- a/src/index.ts +++ b/src/index.ts @@ -42,6 +42,7 @@ import * as THREE from 'three' import MinecraftData, { versionsByMinecraftVersion } from 'minecraft-data' import debug from 'debug' import { defaultsDeep } from 'lodash-es' +import initializePacketsReplay from './packetsReplay' import { initVR } from './vr' import { @@ -97,6 +98,7 @@ import { ref, subscribe } from 'valtio' import { signInMessageState } from './react/SignInMessageProvider' import { updateAuthenticatedAccountData, updateLoadedServerData } from './react/ServersListProvider' import { versionToNumber } from 'prismarine-viewer/viewer/prepare/utils' +import packetsPatcher from './packetsPatcher' window.debug = debug window.THREE = THREE @@ -108,6 +110,8 @@ window.beforeRenderFrame = [] void registerServiceWorker() watchFov() initCollisionShapes() +initializePacketsReplay() +packetsPatcher() // Create three.js context, add to page let renderer: THREE.WebGLRenderer @@ -361,6 +365,7 @@ async function connect (connectOptions: ConnectOptions) { } const renderDistance = singleplayer ? renderDistanceSingleplayer : multiplayerRenderDistance + let updateDataAfterJoin = () => { } let localServer try { const serverOptions = defaultsDeep({}, connectOptions.serverOverrides ?? {}, options.localServerOptions, defaultServerOptions) @@ -506,9 +511,13 @@ async function connect (connectOptions: ConnectOptions) { } return accounts }) - updateLoadedServerData(s => ({ ...s, authenticatedAccountOverride: client.username }), connectOptions.serverIndex) + updateDataAfterJoin = () => { + updateLoadedServerData(s => ({ ...s, authenticatedAccountOverride: client.username }), connectOptions.serverIndex) + } } else { - updateLoadedServerData(s => ({ ...s, authenticatedAccountOverride: undefined }), connectOptions.serverIndex) + updateDataAfterJoin = () => { + updateLoadedServerData(s => ({ ...s, authenticatedAccountOverride: undefined }), connectOptions.serverIndex) + } } setLoadingScreenStatus('Authentication successful. Logging in to server') } finally { @@ -660,6 +669,7 @@ async function connect (connectOptions: ConnectOptions) { setLoadingScreenStatus('Placing blocks (starting viewer)') localStorage.lastConnectOptions = JSON.stringify(connectOptions) connectOptions.onSuccessfulPlay?.() + updateDataAfterJoin() if (connectOptions.autoLoginPassword) { bot.chat(`/login ${connectOptions.autoLoginPassword}`) } diff --git a/src/inventoryWindows.ts b/src/inventoryWindows.ts index 5f7fc0a5..fd213509 100644 --- a/src/inventoryWindows.ts +++ b/src/inventoryWindows.ts @@ -328,9 +328,9 @@ export const getItemNameRaw = (item: Pick return parsed as MessageFormatPart } } catch (err) { - return [{ + return { text: customName - }] + } } } diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index d7636392..76799a60 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -9,6 +9,7 @@ import Slider from './react/Slider' import { getScreenRefreshRate, setLoadingScreenStatus } from './utils' import { openFilePicker, resetLocalStorageWithoutWorld } from './browserfs' import { getResourcePackName, resourcePackState, uninstallTexturePack } from './texturePack' +import { downloadPacketsReplay, packetsReplaceSessionState } from './packetsReplay' export const guiOptionsScheme: { @@ -309,6 +310,27 @@ export const guiOptionsScheme: { if (confirm('Are you sure you want to reset all settings?')) resetLocalStorageWithoutWorld() }}>Reset all settings }, + }, + { + custom () { + return Developer + }, + }, + { + custom () { + const { active } = useSnapshot(packetsReplaceSessionState) + return + }, + }, + { + custom () { + const { active } = useSnapshot(packetsReplaceSessionState) + return + }, } ], } diff --git a/src/react/AppStatusProvider.tsx b/src/react/AppStatusProvider.tsx index 0b12390c..c905be12 100644 --- a/src/react/AppStatusProvider.tsx +++ b/src/react/AppStatusProvider.tsx @@ -5,6 +5,7 @@ import { resetLocalStorageWorld } from '../browserfs' import { fsState } from '../loadSave' import { guessProblem } from '../errorLoadingScreenHelpers' import { ConnectOptions } from '../connect' +import { downloadPacketsReplay, packetsReplaceSessionState } from '../packetsReplay' import AppStatus from './AppStatus' import DiveTransition from './DiveTransition' import { useDidUpdateEffect } from './utils' @@ -32,6 +33,7 @@ export const lastConnectOptions = { export default () => { const { isError, lastStatus, maybeRecoverable, status, hideDots, descriptionHint } = useSnapshot(appStatusState) + const { active: replayActive } = useSnapshot(packetsReplaceSessionState) const isOpen = useIsModalActive('app-status') @@ -103,7 +105,10 @@ export default () => { } } : undefined} actionsSlot={ - displayAuthButton &&
+
{code}
+
+ Waiting... {timeLeft} +
+
+ {warningText &&
+ Join only vanilla servers! This client is detectable and may result in a ban by anti-cheat plugins. +
} + {setSaveToken && } +
}, ], parameters: { @@ -23,6 +23,6 @@ const preview: Preview = { }, }, }, -}; +} -export default preview; +export default preview diff --git a/README.MD b/README.MD index ad120dbf..9a4ba24a 100644 --- a/README.MD +++ b/README.MD @@ -4,14 +4,14 @@ A true Minecraft client running in your browser! A port of the original game to the web, written in JavaScript using modern web technologies. -If you encounter any bugs or usability issues, please report them! +If you encounter any bugs or usability issues, please report them! For development, see [development](#development--debugging). You can try this out at [mcraft.fun](https://mcraft.fun/), [pcm.gg](https://pcm.gg) (short link) [mcon.vercel.app](https://mcon.vercel.app/) or the GitHub pages deploy. Every commit from the `develop` (default) branch is deployed to [s.mcraft.fun](https://s.mcraft.fun/) - so it's usually newer, but might be less stable. ### Big Features - Open any zip world file or even folder in read-write mode! -- Connect to cracked servers* (it's possible because of proxy servers, see below) +- Connect to Java servers running in both offline (cracked) and online mode* (it's possible because of proxy servers, see below) - Singleplayer mode with simple world generations! - Works offline - Play with friends over internet! (P2P is powered by Peer.js discovery servers) @@ -39,9 +39,9 @@ Whatever offline mode you used (zip, folder, just single player), you can always ### Servers -You can play almost on any server, supporting offline connections. +You can play almost on any Java server, vanilla servers are fully supported. See the [Mineflayer](https://github.com/PrismarineJS/mineflayer) repo for the list of supported versions (should support majority of versions). -There is a builtin proxy, but you can also host a your one! Just clone the repo, run `pnpm i` (following CONTRIBUTING.MD) and run `pnpm prod-start`, then you can specify `http://localhost:8080` in the proxy field. +There is a builtin proxy, but you can also host your one! Just clone the repo, run `pnpm i` (following CONTRIBUTING.MD) and run `pnpm prod-start`, then you can specify `http://localhost:8080` in the proxy field. MS account authentication will be supported soon. ### Rendering @@ -67,9 +67,9 @@ There are many many settings, that are not exposed in the UI yet. You can find o To open the console, press `F12`, or if you are on mobile, you can type `#debug` in the URL (browser address bar), it wont't reload the page, but you will see a button to open the console. This way you can change advanced settings and see all errors or warnings. Also this way you can access global variables (described below). -### Debugging +### Development & Debugging -It should be easy to build/start the project locally. See [CONTRIBUTING.MD](./CONTRIBUTING.md) for more info. +It should be easy to build/start the project locally. See [CONTRIBUTING.MD](./CONTRIBUTING.md) for more info. Also you can look at Dockerfile for reference. There is world renderer playground ([link](https://mcon.vercel.app/playground.html)). diff --git a/esbuild.mjs b/esbuild.mjs index 28b233bf..1f075a62 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -85,6 +85,9 @@ const buildOptions = { '.vert': 'text', '.frag': 'text', '.obj': 'text', + '.woff': 'dataurl', + '.woff2': 'dataurl', + '.ttf': 'dataurl', }, write: false, // todo would be better to enable? diff --git a/package.json b/package.json index 5bf32a69..07e9ff0b 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "flying-squid": "npm:@zardoy/flying-squid@^0.0.33", "fs-extra": "^11.1.1", "google-drive-browserfs": "github:zardoy/browserfs#google-drive", - "iconify-icon": "^1.0.8", "jszip": "^3.10.1", "lodash-es": "^4.17.21", "minecraft-assets": "^1.12.2", @@ -77,6 +76,7 @@ "net-browserify": "github:zardoy/prismarinejs-net-browserify", "node-gzip": "^1.1.2", "peerjs": "^1.5.0", + "pixelarticons": "^1.8.1", "pretty-bytes": "^6.1.1", "prismarine-provider-anvil": "github:zardoy/prismarine-provider-anvil#everything", "prosemirror-example-setup": "^1.2.2", @@ -169,7 +169,8 @@ }, "patchedDependencies": { "minecraft-protocol@1.47.0": "patches/minecraft-protocol@1.47.0.patch", - "three@0.154.0": "patches/three@0.154.0.patch" + "three@0.154.0": "patches/three@0.154.0.patch", + "pixelarticons@1.8.1": "patches/pixelarticons@1.8.1.patch" } }, "packageManager": "pnpm@9.0.4" diff --git a/patches/pixelarticons@1.8.1.patch b/patches/pixelarticons@1.8.1.patch new file mode 100644 index 00000000..10044536 --- /dev/null +++ b/patches/pixelarticons@1.8.1.patch @@ -0,0 +1,27 @@ +diff --git a/fonts/pixelart-icons-font.css b/fonts/pixelart-icons-font.css +index 3b2ebe839370d96bf93ef5ca94a827f07e49378d..103ab4d6b9f3b5c9f41d1407e3cbf4ac392fbf41 100644 +--- a/fonts/pixelart-icons-font.css ++++ b/fonts/pixelart-icons-font.css +@@ -1,16 +1,13 @@ + @font-face { + font-family: "pixelart-icons-font"; +- src: url('pixelart-icons-font.eot?t=1711815892278'); /* IE9*/ +- src: url('pixelart-icons-font.eot?t=1711815892278#iefix') format('embedded-opentype'), /* IE6-IE8 */ ++ src: + url("pixelart-icons-font.woff2?t=1711815892278") format("woff2"), + url("pixelart-icons-font.woff?t=1711815892278") format("woff"), + url('pixelart-icons-font.ttf?t=1711815892278') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ +- url('pixelart-icons-font.svg?t=1711815892278#pixelart-icons-font') format('svg'); /* iOS 4.1- */ + } + + [class^="pixelart-icons-font-"], [class*=" pixelart-icons-font-"] { + font-family: 'pixelart-icons-font' !important; +- font-size:24px; + font-style:normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +@@ -503,4 +500,3 @@ + .pixelart-icons-font-zap:before { content: "\ebe4"; } + .pixelart-icons-font-zoom-in:before { content: "\ebe5"; } + .pixelart-icons-font-zoom-out:before { content: "\ebe6"; } +- diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf890476..2208e681 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ patchedDependencies: minecraft-protocol@1.47.0: hash: 7otpchsbv7hxsuis4rrrwdtbve path: patches/minecraft-protocol@1.47.0.patch + pixelarticons@1.8.1: + hash: cclg2qo6d4yjs4evj64nr2mbwa + path: patches/pixelarticons@1.8.1.patch three@0.154.0: hash: sj7ocb4p23jym6bkfgueanti2e path: patches/three@0.154.0.patch @@ -115,9 +118,6 @@ importers: google-drive-browserfs: specifier: github:zardoy/browserfs#google-drive version: browserfs@https://codeload.github.com/zardoy/browserfs/tar.gz/ab58ae8ef00e3a31db01909e365e6cb5188436e0 - iconify-icon: - specifier: ^1.0.8 - version: 1.0.8 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -148,6 +148,9 @@ importers: peerjs: specifier: ^1.5.0 version: 1.5.0 + pixelarticons: + specifier: ^1.8.1 + version: 1.8.1(patch_hash=cclg2qo6d4yjs4evj64nr2mbwa) pretty-bytes: specifier: ^6.1.1 version: 6.1.1 @@ -1723,9 +1726,6 @@ packages: '@humanwhocodes/object-schema@1.2.1': resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -5158,9 +5158,6 @@ packages: hyphenate-style-name@1.0.4: resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} - iconify-icon@1.0.8: - resolution: {integrity: sha512-jvbUKHXf8EnGGArmhlP2IG8VqQLFFyTvTqb9LVL2TKTh7/eCCD1o2HHE9thpbJJb6B8hzhcFb6rOKhvo7reNKA==} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -6633,6 +6630,9 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pixelarticons@1.8.1: + resolution: {integrity: sha512-4taoDCleft9RtzVHLA73VDnRBwJNqlwbW8ShO6S0G9b+bM5ArGe1MVFW9xpromuPvQgVUYCSjRxNAQuNtADqyA==} + pixelmatch@4.0.2: resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} hasBin: true @@ -9985,8 +9985,6 @@ snapshots: '@humanwhocodes/object-schema@1.2.1': {} - '@iconify/types@2.0.0': {} - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -14722,10 +14720,6 @@ snapshots: hyphenate-style-name@1.0.4: {} - iconify-icon@1.0.8: - dependencies: - '@iconify/types': 2.0.0 - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -16433,6 +16427,8 @@ snapshots: pirates@4.0.6: {} + pixelarticons@1.8.1(patch_hash=cclg2qo6d4yjs4evj64nr2mbwa): {} + pixelmatch@4.0.2: dependencies: pngjs: 3.4.0 diff --git a/scripts/genPixelartTypes.ts b/scripts/genPixelartTypes.ts new file mode 100644 index 00000000..e7c9649a --- /dev/null +++ b/scripts/genPixelartTypes.ts @@ -0,0 +1,16 @@ +import fs from 'fs' + +const icons = fs.readdirSync('node_modules/pixelarticons/svg') + +const addIconPath = '../../node_modules/pixelarticons/svg/' + +let str = 'export type PixelartIconsGenerated = {\n' +for (const icon of icons) { + const name = icon.replace('.svg', '') + // jsdoc + const jsdocImage = '![image](' + addIconPath + icon + ')' + str += ` /** ${jsdocImage} */\n` + str += ` '${name}': string;\n` +} +str += '}\n' +fs.writeFileSync('./src/react/pixelartIcons.generated.ts', str, 'utf8') diff --git a/src/index.ts b/src/index.ts index e73e8240..e34e81ab 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,7 +2,6 @@ import './importsWorkaround' import './styles.css' import './globals' -import 'iconify-icon' import './devtools' import './entities' import './globalDomListeners' diff --git a/src/packetsPatcher.ts b/src/packetsPatcher.ts index f877d6ed..587c41c9 100644 --- a/src/packetsPatcher.ts +++ b/src/packetsPatcher.ts @@ -2,13 +2,13 @@ // todo these fixes should be ported to mineflayer export default () => { - customEvents.on('mineflayerBotCreated', () => { - bot._client.on('packet', (data, meta) => { - if (meta.name === 'map_chunk') { - if (data.groundUp && data.bitMap === 1 && data.chunkData.every(x => x === 0)) { - data.chunkData = Buffer.from(Array.from({ length: 12_544 }).fill(0) as any) - } - } - }) + customEvents.on('mineflayerBotCreated', () => { + bot._client.on('packet', (data, meta) => { + if (meta.name === 'map_chunk') { + if (data.groundUp && data.bitMap === 1 && data.chunkData.every(x => x === 0)) { + data.chunkData = Buffer.from(Array.from({ length: 12_544 }).fill(0) as any) + } + } }) + }) } diff --git a/src/react/Button.tsx b/src/react/Button.tsx index 20dc0801..10ff2fb0 100644 --- a/src/react/Button.tsx +++ b/src/react/Button.tsx @@ -2,6 +2,7 @@ import classNames from 'classnames' import { createContext, FC, Ref, useContext } from 'react' import buttonCss from './button.module.css' import SharedHudVars from './SharedHudVars' +import PixelartIcon from './PixelartIcon' // testing in storybook from deathscreen @@ -17,7 +18,7 @@ const ButtonContext = createContext({ onClick () { }, }) -export const ButtonProvider: FC<{children, onClick}> = ({ children, onClick }) => { +export const ButtonProvider: FC<{ children, onClick }> = ({ children, onClick }) => { return {children} } @@ -39,7 +40,7 @@ export default (({ label, icon, children, inScreen, rootRef, type = 'button', .. return diff --git a/src/react/ConceptCommandsGui.stories.tsx b/src/react/ConceptCommandsGui.stories.tsx index 89cb6eff..4f3586d4 100644 --- a/src/react/ConceptCommandsGui.stories.tsx +++ b/src/react/ConceptCommandsGui.stories.tsx @@ -11,7 +11,6 @@ const Button2 = ({ title, icon }) => {
{title}
- {/* { // const sessionEndpoint = 'http://localhost:3000/session' let authEndpoint = '' let sessionEndpoint = '' + if (!proxyBaseUrl.startsWith('http')) proxyBaseUrl = `${isPageSecure() ? 'https' : 'http'}://${proxyBaseUrl}` + const url = proxyBaseUrl + '/api/vm/net/connect' + let result: Response + try { + result = await fetch(url) + } catch (err) { + throw new Error(`Selected proxy server ${proxyBaseUrl} most likely is down`) + } try { - if (!proxyBaseUrl.startsWith('http')) proxyBaseUrl = `${isPageSecure() ? 'https' : 'http'}://${proxyBaseUrl}` - const url = proxyBaseUrl + '/api/vm/net/connect' - const result = await fetch(url) const json = await result.json() authEndpoint = urlWithBase(json.capabilities.authEndpoint, proxyBaseUrl) sessionEndpoint = urlWithBase(json.capabilities.sessionEndpoint, proxyBaseUrl) diff --git a/src/react/AppStatus.tsx b/src/react/AppStatus.tsx index 10cc5793..9ebecf93 100644 --- a/src/react/AppStatus.tsx +++ b/src/react/AppStatus.tsx @@ -28,6 +28,7 @@ export default ({ status, isError, hideDots = false, lastStatus = '', backAction return ( diff --git a/src/react/Chat.css b/src/react/Chat.css index 41917783..cba0a1aa 100644 --- a/src/react/Chat.css +++ b/src/react/Chat.css @@ -24,6 +24,13 @@ div.chat-wrapper { left: 1px; box-sizing: border-box; background-color: rgba(0, 0, 0, 0); + display: flex; + align-items: center; + gap: 1px; +} + +.chat-input-wrapper form { + display: flex; } .chat-input { @@ -103,7 +110,8 @@ div.chat-wrapper { } .input-mobile #chatinput { - height: 20px; + height: 24px; + font-size: 13px; } .display-mobile { diff --git a/src/react/Chat.tsx b/src/react/Chat.tsx index 89b2aa8b..60467171 100644 --- a/src/react/Chat.tsx +++ b/src/react/Chat.tsx @@ -4,6 +4,8 @@ import { MessageFormatPart } from '../botUtils' import { MessagePart } from './MessageFormatted' import './Chat.css' import { isIos, reactKeyForMessage } from './utils' +import Button from './Button' +import { pixelartIcons } from './PixelartIcon' export type Message = { parts: MessageFormatPart[], @@ -221,6 +223,8 @@ export default ({
diff --git a/src/react/EnterFullscreenButton.tsx b/src/react/EnterFullscreenButton.tsx index ad78ddad..3901b9ae 100644 --- a/src/react/EnterFullscreenButton.tsx +++ b/src/react/EnterFullscreenButton.tsx @@ -1,6 +1,11 @@ import { useEffect, useState } from 'react' +import { useSnapshot } from 'valtio' +import { activeModalStack, miscUiState } from '../globalState' import Button from './Button' import { useUsingTouch } from './utilsApp' +import { pixelartIcons } from './PixelartIcon' + +const hideOnModals = new Set(['chat']) export default () => { const [fullScreen, setFullScreen] = useState(false) @@ -9,16 +14,23 @@ export default () => { setFullScreen(!!document.fullscreenElement) }) }, []) + const { gameLoaded } = useSnapshot(miscUiState) + + const activeStack = useSnapshot(activeModalStack) + + const inMainMenu = activeStack.length === 0 && !gameLoaded const usingTouch = useUsingTouch() - if (!usingTouch || !document.documentElement.requestFullscreen || fullScreen) return null + const hideButton = activeStack.some(x => hideOnModals.has(x.reactType)) + + if (hideButton || !usingTouch || !document.documentElement.requestFullscreen || fullScreen) return null return + {!lockConnect && <> + + }
} From d02008c2ef4bfff93fad0edbeaffca3d60399bcc Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 11 Jul 2024 18:33:16 +0300 Subject: [PATCH 0176/1074] fix(regression): signs lighting was compltely broken --- prismarine-viewer/viewer/lib/mesher/models.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index ab77d516..c978c240 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -624,7 +624,7 @@ export function getSectionGeometry (sx, sy, sz, world: World) { delete attr.t_uvs attr.positions = new Float32Array(attr.positions) as any - attr.normals = new Int8Array(attr.normals) as any + attr.normals = new Float32Array(attr.normals) as any attr.colors = new Float32Array(attr.colors) as any attr.uvs = new Float32Array(attr.uvs) as any From d0205a970b823ed49e4a01dea237e175a096d777 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 11 Jul 2024 20:08:10 +0300 Subject: [PATCH 0177/1074] up mineflayer for better vehicle move --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45ebdda4..9d370f17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -314,7 +314,7 @@ importers: version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/c50afc54e39817f7e4d313ce0f6fdaad71e7e4f4(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:zardoy/mineflayer - version: https://codeload.github.com/zardoy/mineflayer/tar.gz/dddc683544317f117172077a9245a07be1b12479(encoding@0.1.13) + version: https://codeload.github.com/zardoy/mineflayer/tar.gz/c03c76ef2acfc747bfe8cd1e290106c81f399848(encoding@0.1.13) mineflayer-pathfinder: specifier: ^2.4.4 version: 2.4.4 @@ -6086,8 +6086,8 @@ packages: resolution: {integrity: sha512-QMMNPx4IyZE7ydAzjvGLQLCnQNUOfkk1qVZKxTTS9q3qPTAewz4GhsVUBtbQ8LSbHthe5RcQ1Sgxs4wlIma/Qw==} engines: {node: '>=18'} - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/dddc683544317f117172077a9245a07be1b12479: - resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/dddc683544317f117172077a9245a07be1b12479} + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/c03c76ef2acfc747bfe8cd1e290106c81f399848: + resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/c03c76ef2acfc747bfe8cd1e290106c81f399848} version: 4.20.1 engines: {node: '>=18'} @@ -15825,7 +15825,7 @@ snapshots: - encoding - supports-color - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/dddc683544317f117172077a9245a07be1b12479(encoding@0.1.13): + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/c03c76ef2acfc747bfe8cd1e290106c81f399848(encoding@0.1.13): dependencies: minecraft-data: 3.65.0 minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=7otpchsbv7hxsuis4rrrwdtbve)(encoding@0.1.13) From 07002a743748899f58767011c3bf99da2658c63b Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 13 Jul 2024 05:49:38 +0300 Subject: [PATCH 0178/1074] fix: remove entities from the scene on login packet (usually on the world switch) --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d370f17..9deb9a7e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -314,7 +314,7 @@ importers: version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/c50afc54e39817f7e4d313ce0f6fdaad71e7e4f4(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:zardoy/mineflayer - version: https://codeload.github.com/zardoy/mineflayer/tar.gz/c03c76ef2acfc747bfe8cd1e290106c81f399848(encoding@0.1.13) + version: https://codeload.github.com/zardoy/mineflayer/tar.gz/7f65e46a048f1bc2b57775d84b32400dce707321(encoding@0.1.13) mineflayer-pathfinder: specifier: ^2.4.4 version: 2.4.4 @@ -6086,8 +6086,8 @@ packages: resolution: {integrity: sha512-QMMNPx4IyZE7ydAzjvGLQLCnQNUOfkk1qVZKxTTS9q3qPTAewz4GhsVUBtbQ8LSbHthe5RcQ1Sgxs4wlIma/Qw==} engines: {node: '>=18'} - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/c03c76ef2acfc747bfe8cd1e290106c81f399848: - resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/c03c76ef2acfc747bfe8cd1e290106c81f399848} + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/7f65e46a048f1bc2b57775d84b32400dce707321: + resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/7f65e46a048f1bc2b57775d84b32400dce707321} version: 4.20.1 engines: {node: '>=18'} @@ -15825,7 +15825,7 @@ snapshots: - encoding - supports-color - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/c03c76ef2acfc747bfe8cd1e290106c81f399848(encoding@0.1.13): + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/7f65e46a048f1bc2b57775d84b32400dce707321(encoding@0.1.13): dependencies: minecraft-data: 3.65.0 minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=7otpchsbv7hxsuis4rrrwdtbve)(encoding@0.1.13) From 04b5d1ac3f03e5053df6a6142ede7d0c4539d480 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 13 Jul 2024 06:17:47 +0300 Subject: [PATCH 0179/1074] add handled packets stats TODO make auto-updated --- docs-assets/handled-packets.md | 169 +++++++++++++++++++++++++++++++ scripts/updateHandledPackets.mjs | 60 +++++++++++ 2 files changed, 229 insertions(+) create mode 100644 docs-assets/handled-packets.md create mode 100644 scripts/updateHandledPackets.mjs diff --git a/docs-assets/handled-packets.md b/docs-assets/handled-packets.md new file mode 100644 index 00000000..0671987c --- /dev/null +++ b/docs-assets/handled-packets.md @@ -0,0 +1,169 @@ +# Handled Packets + +## Server -> Client + +❌ statistics +❌ advancements +❌ face_player +❌ nbt_query_response +❌ chat_suggestions +❌ trade_list +❌ vehicle_move +❌ open_book +❌ craft_recipe_response +❌ end_combat_event +❌ enter_combat_event +❌ unlock_recipes +❌ camera +❌ update_view_position +❌ update_view_distance +❌ entity_sound_effect +❌ stop_sound +❌ feature_flags +❌ select_advancement_tab +❌ declare_recipes +❌ tags +❌ acknowledge_player_digging +❌ initialize_world_border +❌ world_border_center +❌ world_border_lerp_size +❌ world_border_size +❌ world_border_warning_delay +❌ world_border_warning_reach +❌ simulation_distance +❌ chunk_biomes +❌ damage_event +❌ hurt_animation +✅ spawn_entity +✅ spawn_entity_experience_orb +✅ named_entity_spawn +✅ animation +✅ block_break_animation +✅ tile_entity_data +✅ block_action +✅ block_change +✅ boss_bar +✅ difficulty +✅ tab_complete +✅ declare_commands +✅ multi_block_change +✅ close_window +✅ open_window +✅ window_items +✅ craft_progress_bar +✅ set_slot +✅ set_cooldown +✅ custom_payload +✅ hide_message +✅ kick_disconnect +✅ profileless_chat +✅ entity_status +✅ explosion +✅ unload_chunk +✅ game_state_change +✅ open_horse_window +✅ keep_alive +✅ map_chunk +✅ world_event +✅ world_particles +✅ update_light +✅ login +✅ map +✅ rel_entity_move +✅ entity_move_look +✅ entity_look +✅ open_sign_entity +✅ abilities +✅ player_chat +✅ death_combat_event +✅ player_remove +✅ player_info +✅ position +✅ entity_destroy +✅ remove_entity_effect +✅ resource_pack_send +✅ respawn +✅ entity_head_rotation +✅ held_item_slot +✅ scoreboard_display_objective +✅ entity_metadata +✅ attach_entity +✅ entity_velocity +✅ entity_equipment +✅ experience +✅ update_health +✅ scoreboard_objective +✅ set_passengers +✅ teams +✅ scoreboard_score +✅ spawn_position +✅ update_time +✅ sound_effect +✅ system_chat +✅ playerlist_header +✅ collect +✅ entity_teleport +✅ entity_update_attributes +✅ entity_effect +✅ server_data +✅ clear_titles +✅ action_bar +✅ ping +✅ set_title_subtitle +✅ set_title_text +✅ set_title_time +✅ packet + +## Client -> Server + +❌ query_block_nbt +❌ set_difficulty +❌ query_entity_nbt +❌ pick_item +❌ set_beacon_effect +❌ update_command_block_minecart +❌ update_structure_block +❌ generate_structure +❌ lock_difficulty +❌ craft_recipe_request +❌ displayed_recipe +❌ recipe_book +❌ update_jigsaw_block +❌ spectate +❌ advancement_tab +✅ teleport_confirm +✅ chat_command +✅ chat_message +✅ message_acknowledgement +✅ edit_book +✅ name_item +✅ select_trade +✅ update_command_block +✅ tab_complete +✅ client_command +✅ settings +✅ enchant_item +✅ window_click +✅ close_window +✅ custom_payload +✅ use_entity +✅ keep_alive +✅ position +✅ position_look +✅ look +✅ flying +✅ vehicle_move +✅ steer_boat +✅ abilities +✅ block_dig +✅ entity_action +✅ steer_vehicle +✅ resource_pack_receive +✅ held_item_slot +✅ set_creative_slot +✅ update_sign +✅ arm_animation +✅ block_place +✅ use_item +✅ pong +✅ chat_session_update diff --git a/scripts/updateHandledPackets.mjs b/scripts/updateHandledPackets.mjs new file mode 100644 index 00000000..080eaf44 --- /dev/null +++ b/scripts/updateHandledPackets.mjs @@ -0,0 +1,60 @@ +import fs from 'fs' +import path from 'path' +import minecraftData from 'minecraft-data' + +const lastVersion = minecraftData.versions.pc[0] +// console.log('last proto ver', lastVersion.minecraftVersion) +const allPackets = minecraftData(lastVersion.minecraftVersion).protocol +const getPackets = ({ types }) => { + return Object.keys(types).map(type => type.replace('packet_', '')) +} +// todo test against all versions +const allFromServerPackets = getPackets(allPackets.play.toClient) +const allToServerPackets = getPackets(allPackets.play.toServer).filter(x => !['packet'].includes(x)) + +const buildFile = './dist/index.js' + +const file = fs.readFileSync(buildFile, 'utf8') + +const packetsReceiveRegex = /client\.on\("(\w+)"/g +const packetsReceiveSend = /client\.write\("(\w+)"/g + +let allSupportedReceive = [...new Set([...file.matchAll(packetsReceiveRegex)].map(x => x[1]))] +let allSupportedSend = [...new Set([...file.matchAll(packetsReceiveSend)].map(x => x[1]))] + +let md = '# Handled Packets\n' + +md += '\n## Server -> Client\n\n' +let notSupportedRows = [] +let supportedRows = [] +for (const packet of allFromServerPackets) { + const includes = allSupportedReceive.includes(packet); + (includes ? supportedRows : notSupportedRows).push(packet) +} + +for (const row of notSupportedRows) { + md += `❌ ${row}\n` +} +for (const row of supportedRows) { + md += `✅ ${row}\n` +} + +md += '\n' + +notSupportedRows = [] +supportedRows = [] + +md += '## Client -> Server\n\n' +for (const packet of allToServerPackets) { + const includes = allSupportedSend.includes(packet); + (includes ? supportedRows : notSupportedRows).push(packet) +} + +for (const row of notSupportedRows) { + md += `❌ ${row}\n` +} +for (const row of supportedRows) { + md += `✅ ${row}\n` +} + +fs.writeFileSync('./docs-assets/handled-packets.md', md) From 6c5f72e1f286f2b73f8b940d117b9cec4b197ae1 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 13 Jul 2024 20:31:27 +0300 Subject: [PATCH 0180/1074] feat: implement pitch which was required for note blocks to work properly --- prismarine-viewer/viewer/lib/viewer.ts | 5 +++-- src/soundSystem.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/prismarine-viewer/viewer/lib/viewer.ts b/prismarine-viewer/viewer/lib/viewer.ts index c95127f2..504c4637 100644 --- a/prismarine-viewer/viewer/lib/viewer.ts +++ b/prismarine-viewer/viewer/lib/viewer.ts @@ -32,7 +32,7 @@ export class Viewer { this.world.camera = camera } - constructor(public renderer: THREE.WebGLRenderer, worldConfig = defaultWorldRendererConfig) { + constructor (public renderer: THREE.WebGLRenderer, worldConfig = defaultWorldRendererConfig) { // https://discourse.threejs.org/t/updates-to-color-management-in-three-js-r152/50791 THREE.ColorManagement.enabled = false renderer.outputColorSpace = THREE.LinearSRGBColorSpace @@ -118,7 +118,7 @@ export class Viewer { this.world.updateCamera(pos?.offset(0, yOffset, 0) ?? null, yaw, pitch) } - playSound (position: Vec3, path: string, volume = 1) { + playSound (position: Vec3, path: string, volume = 1, pitch = 1) { if (!this.audioListener) { this.audioListener = new THREE.AudioListener() this.camera.add(this.audioListener) @@ -134,6 +134,7 @@ export class Viewer { sound.setBuffer(buffer) sound.setRefDistance(20) sound.setVolume(volume) + sound.setPlaybackRate(pitch) // set the pitch this.scene.add(sound) // set sound position sound.position.set(position.x, position.y, position.z) diff --git a/src/soundSystem.ts b/src/soundSystem.ts index e7fdaee7..d49b6a8c 100644 --- a/src/soundSystem.ts +++ b/src/soundSystem.ts @@ -50,7 +50,7 @@ subscribeKey(miscUiState, 'gameLoaded', async () => { const isMuted = options.mutedSounds.includes(soundKey) || options.volume === 0 if (position) { if (!isMuted) { - viewer.playSound(position, url, soundVolume * Math.max(Math.min(volume, 1), 0) * (options.volume / 100)) + viewer.playSound(position, url, soundVolume * Math.max(Math.min(volume, 1), 0) * (options.volume / 100), Math.max(Math.min(pitch ?? 1, 2), 0.5)) } if (getDistance(bot.entity.position, position) < 4 * 16) { lastPlayedSounds.lastServerPlayed[soundKey] ??= { count: 0, last: 0 } From b13ef443bb84d4f2f84a4d11bc0f25ffc8d4840c Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 13 Jul 2024 21:30:44 +0300 Subject: [PATCH 0181/1074] feat: rework sound system. Now sounds are 100% implemented for all current & future supported versions --- prismarine-viewer/viewer/prepare/utils.ts | 14 ++++++ src/globals.d.ts | 2 +- src/soundSystem.ts | 53 ++++++++++++----------- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/prismarine-viewer/viewer/prepare/utils.ts b/prismarine-viewer/viewer/prepare/utils.ts index a33909a9..958273f3 100644 --- a/prismarine-viewer/viewer/prepare/utils.ts +++ b/prismarine-viewer/viewer/prepare/utils.ts @@ -2,3 +2,17 @@ export const versionToNumber = (ver: string) => { const [x, y = '0', z = '0'] = ver.split('.') return +`${x.padStart(2, '0')}${y.padStart(2, '0')}${z.padStart(2, '0')}` } + +export const versionToMajor = (version: string) => { + const [x, y = '0'] = version.split('.') + return `${x.padStart(2, '0')}.${y.padStart(2, '0')}` +} + +export const versionsMapToMajor = (versionsMap: Record) => { + const majorVersions = {} as Record + for (const [ver, data] of Object.entries(versionsMap)) { + const major = versionToMajor(ver) + majorVersions[major] = data + } + return majorVersions +} diff --git a/src/globals.d.ts b/src/globals.d.ts index 05b29a14..f8699f21 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -17,7 +17,7 @@ declare const worldView: import('prismarine-viewer/viewer/lib/worldDataEmitter') declare const localServer: import('flying-squid/dist/index').FullServer & { options } | undefined /** all currently loaded mc data */ declare const mcData: Record -declare const loadedData: import('minecraft-data').IndexedData +declare const loadedData: import('minecraft-data').IndexedData & { sounds: Record } declare const customEvents: import('typed-emitter').default<{ /** Singleplayer load requested */ singleplayer (): void diff --git a/src/soundSystem.ts b/src/soundSystem.ts index d49b6a8c..0187a9b0 100644 --- a/src/soundSystem.ts +++ b/src/soundSystem.ts @@ -1,6 +1,6 @@ import { subscribeKey } from 'valtio/utils' import { Vec3 } from 'vec3' -import { versionToNumber } from 'prismarine-viewer/viewer/prepare/utils' +import { versionToMajor, versionToNumber, versionsMapToMajor } from 'prismarine-viewer/viewer/prepare/utils' import { loadScript } from 'prismarine-viewer/viewer/lib/utils' import type { Block } from 'prismarine-block' import { miscUiState } from './globalState' @@ -22,32 +22,26 @@ subscribeKey(miscUiState, 'gameLoaded', async () => { return } - // todo also use major versioned hardcoded sounds - const soundsMap = allSoundsMap[bot.version] + const allSoundsMajor = versionsMapToMajor(allSoundsMap) + const soundsMap = allSoundsMajor[versionToMajor(bot.version)] ?? Object.values(allSoundsMajor)[0] - if (!soundsMap || !miscUiState.gameLoaded || !soundsMap) { + if (!soundsMap || !miscUiState.gameLoaded || !loadedData.sounds) { return } - const soundsPerId = Object.fromEntries(Object.entries(soundsMap).map(([id, sound]) => [+id.split(';')[0], sound])) + // const soundsPerId = Object.fromEntries(Object.entries(soundsMap).map(([id, sound]) => [+id.split(';')[0], sound])) const soundsPerName = Object.fromEntries(Object.entries(soundsMap).map(([id, sound]) => [id.split(';')[1], sound])) - const soundIdToName = Object.fromEntries(Object.entries(soundsMap).map(([id, sound]) => [+id.split(';')[0], id.split(';')[1]])) - const playGeneralSound = async (soundId: string, soundString: string | undefined, position?: Vec3, volume = 1, pitch?: number) => { - if (!soundString) { - console.warn('Unknown sound received from server to play', soundId) - return - } + const playGeneralSound = async (soundKey: string, position?: Vec3, volume = 1, pitch?: number) => { if (!options.volume) return - const parts = soundString.split(';') - const soundVolume = +parts[0]! - const soundName = parts[1]! - // console.log('pitch', pitch) - const versionedSound = getVersionedSound(bot.version, soundName, Object.entries(soundsLegacyMap)) + const soundStaticData = soundsPerName[soundKey]?.split(';') + if (!soundStaticData) return + const soundVolume = +soundStaticData[0]! + const soundPath = soundStaticData[1]! + const versionedSound = getVersionedSound(bot.version, soundPath, Object.entries(soundsLegacyMap)) // todo test versionedSound - const url = allSoundsMeta.baseUrl.replace(/\/$/, '') + (versionedSound ? `/${versionedSound}` : '') + '/minecraft/sounds/' + soundName + '.' + allSoundsMeta.format - const soundKey = soundIdToName[+soundId] ?? soundId - const isMuted = options.mutedSounds.includes(soundKey) || options.volume === 0 + const url = allSoundsMeta.baseUrl.replace(/\/$/, '') + (versionedSound ? `/${versionedSound}` : '') + '/minecraft/sounds/' + soundPath + '.' + allSoundsMeta.format + const isMuted = options.mutedSounds.includes(soundKey) || options.mutedSounds.includes(soundPath) || options.volume === 0 if (position) { if (!isMuted) { viewer.playSound(position, url, soundVolume * Math.max(Math.min(volume, 1), 0) * (options.volume / 100), Math.max(Math.min(pitch ?? 1, 2), 0.5)) @@ -67,17 +61,24 @@ subscribeKey(miscUiState, 'gameLoaded', async () => { } } } - const playHardcodedSound = async (soundId: string, position?: Vec3, volume = 1, pitch?: number) => { - const sound = soundsPerName[soundId] - await playGeneralSound(soundId, sound, position, volume, pitch) + const playHardcodedSound = async (soundKey: string, position?: Vec3, volume = 1, pitch?: number) => { + await playGeneralSound(soundKey, position, volume, pitch) } bot.on('soundEffectHeard', async (soundId, position, volume, pitch) => { - console.debug('soundEffectHeard', soundId, volume) await playHardcodedSound(soundId, position, volume, pitch) }) - bot.on('hardcodedSoundEffectHeard', async (soundId, soundCategory, position, volume, pitch) => { - const sound = soundsPerId[soundId] - await playGeneralSound(soundId.toString(), sound, position, volume, pitch) + bot.on('hardcodedSoundEffectHeard', async (soundIdNum, soundCategory, position, volume, pitch) => { + const fixOffset = versionToNumber('1.20.4') === versionToNumber(bot.version) ? -1 : 0 + const soundKey = loadedData.sounds[soundIdNum + fixOffset]?.name + if (soundKey === undefined) return + await playGeneralSound(soundKey, position, volume, pitch) + }) + // workaround as mineflayer doesn't support soundEvent + bot._client.on('sound_effect', async (packet) => { + const soundResource = packet['soundEvent']?.resource as string | undefined + if (packet.soundId !== 0 || !soundResource) return + const pos = new Vec3(packet.x / 8, packet.y / 8, packet.z / 8) + await playHardcodedSound(soundResource.replace('minecraft:', ''), pos, packet.volume, packet.pitch) }) bot.on('entityHurt', async (entity) => { if (entity.id === bot.entity.id) { From 698779f6b5302165dd3dff731de0b223ac837513 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 13 Jul 2024 21:31:29 +0300 Subject: [PATCH 0182/1074] fix: toggle entity visiiblity even after it's creation --- prismarine-viewer/viewer/lib/entities.js | 10 +++++----- prismarine-viewer/viewer/lib/worldDataEmitter.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/prismarine-viewer/viewer/lib/entities.js b/prismarine-viewer/viewer/lib/entities.js index 94f06e0c..d36b6936 100644 --- a/prismarine-viewer/viewer/lib/entities.js +++ b/prismarine-viewer/viewer/lib/entities.js @@ -405,14 +405,14 @@ export class Entities extends EventEmitter { } //@ts-ignore + // set visibility const isInvisible = entity.metadata?.[0] & 0x20 - if (isInvisible) { - for (const child of this.entities[entity.id].children.find(c => c.name === 'mesh').children) { - if (child.name !== 'nametag') { - child.visible = false - } + for (const child of this.entities[entity.id].children.find(c => c.name === 'mesh').children) { + if (child.name !== 'nametag') { + child.visible = !isInvisible } } + // --- // not player const displayText = entity.metadata?.[3] && this.parseEntityLabel(entity.metadata[2]) if (entity.name !== 'player' && displayText) { diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index 5df5cc73..761509c2 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -44,7 +44,14 @@ export class WorldDataEmitter extends EventEmitter { listenToBot (bot: typeof __type_bot) { const emitEntity = (e) => { if (!e || e === bot.entity) return - this.emitter.emit('entity', { ...e, pos: e.position, username: e.username }) + this.emitter.emit('entity', { + ...e, + pos: e.position, + username: e.username, + // set debugTree (obj) { + // e.debugTree = obj + // } + }) } this.eventListeners[bot.username] = { From 512bc09477aa96352f4d19a165a7e110d5c76f81 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 14 Jul 2024 01:55:41 +0300 Subject: [PATCH 0183/1074] make main docker build 5x smaller, add only proxy dockerfile --- Dockerfile | 32 +++++++++++++++++++++----------- Dockerfile.proxy | 11 +++++++++++ README.MD | 15 +++++++++++---- 3 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 Dockerfile.proxy diff --git a/Dockerfile b/Dockerfile index 086240b5..0ae1c6e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,32 @@ -FROM node:18-alpine +# ---- Build Stage ---- +FROM node:18-alpine AS build # Without git installing the npm packages fails -RUN apk add git -RUN mkdir /app +RUN apk add --no-cache git python3 make g++ cairo-dev pango-dev jpeg-dev giflib-dev librsvg-dev WORKDIR /app COPY . /app -# install python and other dependencies -RUN apk add python3 make g++ cairo-dev pango-dev jpeg-dev giflib-dev librsvg-dev # install pnpm RUN npm i -g pnpm@9.0.4 RUN pnpm install -# only for prod -RUN pnpm run build -# --- -EXPOSE 8080 -# uncomment for development + +# TODO for development # EXPOSE 9090 # VOLUME /app/src # VOLUME /app/prismarine-viewer # ENTRYPOINT ["pnpm", "run", "run-all"] + # only for prod -ENTRYPOINT ["npm", "run", "prod-start"] +RUN pnpm run build + +# ---- Run Stage ---- +FROM node:18-alpine +RUN apk add git +WORKDIR /app +# Copy build artifacts from the build stage +COPY --from=build /app/dist /app/dist +COPY server.js /app/server.js +# Install express +RUN npm i -g pnpm@9.0.4 +RUN npm init -yp +RUN pnpm i express github:zardoy/prismarinejs-net-browserify compression cors +EXPOSE 8080 +ENTRYPOINT ["node", "server.js"] diff --git a/Dockerfile.proxy b/Dockerfile.proxy new file mode 100644 index 00000000..746eef72 --- /dev/null +++ b/Dockerfile.proxy @@ -0,0 +1,11 @@ +# ---- Run Stage ---- +FROM node:18-alpine +RUN apk add git +WORKDIR /app +COPY server.js /app/server.js +# Install server dependencies +RUN npm i -g pnpm@9.0.4 +RUN npm init -yp +RUN pnpm i express github:zardoy/prismarinejs-net-browserify compression cors +EXPOSE 8080 +ENTRYPOINT ["node", "server.js"] diff --git a/README.MD b/README.MD index 9a4ba24a..7576f6ba 100644 --- a/README.MD +++ b/README.MD @@ -44,6 +44,13 @@ See the [Mineflayer](https://github.com/PrismarineJS/mineflayer) repo for the li There is a builtin proxy, but you can also host your one! Just clone the repo, run `pnpm i` (following CONTRIBUTING.MD) and run `pnpm prod-start`, then you can specify `http://localhost:8080` in the proxy field. MS account authentication will be supported soon. +### Docker Files + +- [Main Dockerfile](./Dockerfile) - for production build & offline/private usage. Includes full web-app + proxy server for connecting to Minecraft servers. +- [Proxy Dockerfile](./Dockerfile.proxy) - for proxy server only - that one you would be able to specify in the proxy field on the client (`docker build . -f Dockerfile.proxy -t minecraft-web-proxy`) + +In case of using docker, you don't have to follow preparation steps from CONTRIBUTING.MD, like installing Node.js, pnpm, etc. + ### Rendering #### Three.js Renderer @@ -55,10 +62,6 @@ MS account authentication will be supported soon. -### Things that are not planned yet - -- Mods, plugins (basically JARs) support, shaders - since they all are related to specific game pipelines - ### Advanced Settings There are many many settings, that are not exposed in the UI yet. You can find or change them by opening the browser console and typing `options`. You can also change them by typing `options. = `. @@ -131,6 +134,10 @@ Press `Y` to set query parameters to url of your current game state. - [Peer.js](https://peerjs.com/) - P2P networking (when you open to wan) - [Three.js](https://threejs.org/) - Helping in 3D rendering +### Things that are not planned yet + +- Mods, plugins (basically JARs) support, shaders - since they all are related to specific game pipelines + ### Alternatives - [https://github.com/ClassiCube/ClassiCube](ClassiCube - Better C# Rewrite) [DEMO](https://www.classicube.net/server/play/?warned=true) From b49e9880906f269b1be6456abcdb24f78e45f21e Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 16 Jul 2024 10:35:01 +0300 Subject: [PATCH 0184/1074] fix: inventory didn't update after dropping an item --- src/controls.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/controls.ts b/src/controls.ts index a3a22029..98cc6afb 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -353,7 +353,7 @@ contro.on('trigger', ({ command }) => { document.exitPointerLock?.() openPlayerInventory() break - case 'general.drop': + case 'general.drop': { // if (bot.heldItem/* && ctrl */) bot.tossStack(bot.heldItem) bot._client.write('block_dig', { 'status': 4, @@ -365,7 +365,14 @@ contro.on('trigger', ({ command }) => { 'face': 0, sequence: 0 }) + const slot = bot.inventory.hotbarStart + bot.quickBarSlot + const item = bot.inventory.slots[slot] + if (item) { + item.count-- + bot.inventory.updateSlot(slot, item.count > 0 ? item : null!) + } break + } case 'general.chat': showModal({ reactType: 'chat' }) break From 9ee67cc8270e79e5b2d9025a30148bb083e8c36d Mon Sep 17 00:00:00 2001 From: Wolf2323 Date: Tue, 16 Jul 2024 10:37:01 +0200 Subject: [PATCH 0185/1074] fix: ignoring exception ResizeObserver loop exceptions (#161) --- src/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/index.ts b/src/index.ts index e34e81ab..2a190785 100644 --- a/src/index.ts +++ b/src/index.ts @@ -330,6 +330,9 @@ async function connect (connectOptions: ConnectOptions) { } const handleError = (err) => { console.error(err) + if (err === 'ResizeObserver loop completed with undelivered notifications.') { + return + } errorAbortController.abort() if (isCypress()) throw err miscUiState.hasErrors = true From cda1d59d3bd59580d91f4107a8b4a8bfae57c976 Mon Sep 17 00:00:00 2001 From: Wolf2323 Date: Tue, 16 Jul 2024 11:05:57 +0200 Subject: [PATCH 0186/1074] improved query parameters handling (#162) Co-authored-by: Vitaly --- README.MD | 25 ++++++++++------- src/react/AddServerOrConnect.tsx | 46 +++++++++++++++++++------------- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/README.MD b/README.MD index 7576f6ba..cafa3ac9 100644 --- a/README.MD +++ b/README.MD @@ -110,19 +110,26 @@ world chunks have a *yellow* border, hostile mobs have a *red* outline, passive Press `Y` to set query parameters to url of your current game state. -- `?ip=` - Display connect screen to the server on load -- `?username=` - Set the username for server -- `?proxy=` - Set the proxy server address to use for server -- `?version=` - Set the version for server -- `?lockConnect=true` - Disable cancel / save buttons, useful for integrates iframes +There are some parameters you can set in the url to archive some specific behaviors: + +Server specific: +- `?ip=` - Display connect screen to the server on load with predefined server ip. `:` is optional and can be added to the ip. +- `?name=` - Set the server name for saving to the server list +- `?version=` - Set the version for the server +- `?proxy=` - Set the proxy server address to use for the server +- `?username=` - Set the username for the server +- `?lockConnect=true` - Only works then `ip` parameter is set. Disables cancel/save buttons and all inputs in the connect screen already set as parameters. Useful for integrates iframes. - `?reconnect=true` - Reconnect to the server on page reloads. Available in **dev mode only** and very useful on server testing. + +Single player specific: - `?loadSave=` - Load the save on load with the specified folder name (not title) - `?singleplayer=1` - Create empty world on load. Nothing will be saved -- `?noSave=true` - Disable auto save on unload / disconnect / export. Only manual save with `/save` command will work - - +- `?version=` - Set the version for the singleplayer world (when used with `?singleplayer=1`) +- `?noSave=true` - Disable auto save on unload / disconnect / export whenever a world is loaded. Only manual save with `/save` command will work. - `?map=` - Load the map from ZIP. You can use any url, but it must be CORS enabled. -- `?setting=:` - Set the and lock the setting on load. You can set multiple settings by separating them with `&` e.g. `?setting=autoParkour:true&setting=renderDistance:4` + +General: +- `?setting=:` - Set and lock the setting on load. You can set multiple settings by separating them with `&` e.g. `?setting=autoParkour:true&setting=renderDistance:4` ### Notable Things that Power this Project diff --git a/src/react/AddServerOrConnect.tsx b/src/react/AddServerOrConnect.tsx index 729f1ec2..535e3ee9 100644 --- a/src/react/AddServerOrConnect.tsx +++ b/src/react/AddServerOrConnect.tsx @@ -30,19 +30,25 @@ const ELEMENTS_WIDTH = 190 export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQs, onQsConnect, defaults, accounts, authenticatedAccounts }: Props) => { const qsParams = parseQs ? new URLSearchParams(window.location.search) : undefined + const qsParamName = qsParams?.get('name') + const qsParamIp = qsParams?.get('ip') + const qsParamVersion = qsParams?.get('version') + const qsParamProxy = qsParams?.get('proxy') + const qsParamUsername = qsParams?.get('username') + const qsParamLockConnect = qsParams?.get('lockConnect') - const [serverName, setServerName] = React.useState(initialData?.name ?? qsParams?.get('name') ?? '') + const qsIpParts = qsParamIp?.split(':') + const ipParts = initialData?.ip.split(':') - const ipWithoutPort = initialData?.ip.split(':')[0] - const port = initialData?.ip.split(':')[1] + const [serverName, setServerName] = React.useState(initialData?.name ?? qsParamName ?? '') + const [serverIp, setServerIp] = React.useState(ipParts?.[0] ?? qsIpParts?.[0] ?? '') + const [serverPort, setServerPort] = React.useState(ipParts?.[1] ?? qsIpParts?.[1] ?? '') + const [versionOverride, setVersionOverride] = React.useState(initialData?.versionOverride ?? /* legacy */ initialData?.['version'] ?? qsParamVersion ?? '') + const [proxyOverride, setProxyOverride] = React.useState(initialData?.proxyOverride ?? qsParamProxy ?? '') + const [usernameOverride, setUsernameOverride] = React.useState(initialData?.usernameOverride ?? qsParamUsername ?? '') + const lockConnect = qsParamLockConnect === 'true' - const [serverIp, setServerIp] = React.useState(ipWithoutPort ?? qsParams?.get('ip') ?? '') - const [serverPort, setServerPort] = React.useState(port ?? '') - const [versionOverride, setVersionOverride] = React.useState(initialData?.versionOverride ?? /* legacy */ initialData?.['version'] ?? qsParams?.get('version') ?? '') - const [proxyOverride, setProxyOverride] = React.useState(initialData?.proxyOverride ?? qsParams?.get('proxy') ?? '') - const [usernameOverride, setUsernameOverride] = React.useState(initialData?.usernameOverride ?? qsParams?.get('username') ?? '') const smallWidth = useIsSmallWidth() - const lockConnect = qsParams?.get('lockConnect') === 'true' const initialAccount = initialData?.authenticatedAccountOverride const [accountIndex, setAccountIndex] = React.useState(initialAccount === true ? -2 : initialAccount ? (accounts?.includes(initialAccount) ? accounts.indexOf(initialAccount) : -2) : -1) @@ -61,7 +67,7 @@ export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQ authenticatedAccountOverride, } - return + return
-
- setServerName(value)} placeholder='Defaults to IP' /> -
- setServerIp(value)} /> - setServerPort(value)} placeholder='25565' /> + {!lockConnect && <> +
+ setServerName(value)} placeholder='Defaults to IP' /> +
+ } + setServerIp(value)} /> + setServerPort(value)} placeholder='25565' />
Overrides:
- setVersionOverride(value)} placeholder='Optional, but recommended to specify' /> - setProxyOverride(value)} placeholder={defaults?.proxyOverride} /> - setUsernameOverride(value)} placeholder={defaults?.usernameOverride} disabled={!noAccountSelected} /> + setVersionOverride(value)} placeholder='Optional, but recommended to specify' /> + setProxyOverride(value)} placeholder={defaults?.proxyOverride} /> + setUsernameOverride(value)} placeholder={defaults?.usernameOverride} />