diff options
51 files changed, 3268 insertions, 2527 deletions
@@ -209,7 +209,7 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "azalea" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "anyhow", "azalea-auth", @@ -249,7 +249,7 @@ dependencies = [ [[package]] name = "azalea-auth" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-buf", "azalea-crypto", @@ -269,7 +269,7 @@ dependencies = [ [[package]] name = "azalea-block" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-block-macros", "azalea-buf", @@ -278,7 +278,7 @@ dependencies = [ [[package]] name = "azalea-block-macros" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "proc-macro2", "quote", @@ -287,7 +287,7 @@ dependencies = [ [[package]] name = "azalea-brigadier" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-buf", "azalea-chat", @@ -298,7 +298,7 @@ dependencies = [ [[package]] name = "azalea-buf" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-buf-macros", "byteorder", @@ -311,7 +311,7 @@ dependencies = [ [[package]] name = "azalea-buf-macros" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "proc-macro2", "quote", @@ -320,7 +320,7 @@ dependencies = [ [[package]] name = "azalea-chat" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-buf", "azalea-language", @@ -333,7 +333,7 @@ dependencies = [ [[package]] name = "azalea-client" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "anyhow", "azalea-auth", @@ -368,7 +368,7 @@ dependencies = [ [[package]] name = "azalea-core" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-buf", "azalea-chat", @@ -384,7 +384,7 @@ dependencies = [ [[package]] name = "azalea-crypto" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "aes", "azalea-buf", @@ -401,7 +401,7 @@ dependencies = [ [[package]] name = "azalea-entity" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-block", "azalea-buf", @@ -424,7 +424,7 @@ dependencies = [ [[package]] name = "azalea-inventory" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-buf", "azalea-chat", @@ -439,7 +439,7 @@ dependencies = [ [[package]] name = "azalea-inventory-macros" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "proc-macro2", "quote", @@ -448,7 +448,7 @@ dependencies = [ [[package]] name = "azalea-language" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "compact_str", "serde", @@ -457,7 +457,7 @@ dependencies = [ [[package]] name = "azalea-physics" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-block", "azalea-core", @@ -475,7 +475,7 @@ dependencies = [ [[package]] name = "azalea-protocol" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "anyhow", "async-recursion", @@ -510,7 +510,7 @@ dependencies = [ [[package]] name = "azalea-protocol-macros" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "proc-macro2", "quote", @@ -519,7 +519,7 @@ dependencies = [ [[package]] name = "azalea-registry" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-buf", "azalea-registry-macros", @@ -529,7 +529,7 @@ dependencies = [ [[package]] name = "azalea-registry-macros" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "quote", "syn", @@ -537,7 +537,7 @@ dependencies = [ [[package]] name = "azalea-world" -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5-rc2" dependencies = [ "azalea-block", "azalea-buf", @@ -22,7 +22,7 @@ resolver = "2" # --- Workspace Settings --- [workspace.package] -version = "0.11.0+mc1.21.4" +version = "0.11.0+mc1.21.5" edition = "2024" license = "MIT" repository = "https://github.com/azalea-rs/azalea" @@ -10,7 +10,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools. <!-- The line below is automatically read and updated by the migrate script, so don't change it manually. --> -_Currently supported Minecraft version: `1.21.4`._ +_Currently supported Minecraft version: `1.21.5`._ > [!WARNING] > Azalea is still unfinished, though most crates are in a useable state diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs index afc131c3..886b9dcc 100755 --- a/azalea-block/src/generated.rs +++ b/azalea-block/src/generated.rs @@ -326,7 +326,11 @@ make_block_states! { "south" => South(bool), "up" => Up(bool), "west" => West(bool), - "active" => Active(bool), + "creaking_heart_state" => CreakingHeartState { + Uprooted, + Dormant, + Awake, + }, "natural" => Natural(bool), "half" => TopBottom { Top, @@ -1694,7 +1698,7 @@ make_block_states! { _14, _15, }, - "mode" => Mode { + "mode" => StructureMode { Save, Load, Corner, @@ -1714,6 +1718,12 @@ make_block_states! { NorthUp, SouthUp, }, + "mode" => TestMode { + Start, + Log, + Fail, + Accept, + }, "level" => ComposterLevel { _0, _1, @@ -1958,6 +1968,18 @@ make_block_states! { _3, _4, }, + "flower_amount" => WildflowersFlowerAmount { + _1, + _2, + _3, + _4, + }, + "segment_amount" => LeafLitterSegmentAmount { + _1, + _2, + _3, + _4, + }, "tilt" => Tilt { None, Unstable, @@ -2356,6 +2378,9 @@ make_block_states! { short_grass => BlockBehavior::new(), {}, fern => BlockBehavior::new(), {}, dead_bush => BlockBehavior::new(), {}, + bush => BlockBehavior::new(), {}, + short_dry_grass => BlockBehavior::new(), {}, + tall_dry_grass => BlockBehavior::new(), {}, seagrass => BlockBehavior::new(), {}, tall_seagrass => BlockBehavior::new(), { "half": Half::Lower, @@ -2438,8 +2463,8 @@ make_block_states! { soul_fire => BlockBehavior::new(), {}, spawner => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {}, creaking_heart => BlockBehavior::new(), { - "active": Active(false), "axis": Axis::Y, + "creaking_heart_state": CreakingHeartState::Uprooted, "natural": Natural(false), }, oak_stairs => BlockBehavior::new().strength(2.0, 3.0), { @@ -2754,6 +2779,7 @@ make_block_states! { cactus => BlockBehavior::new().strength(0.4, 0.4), { "age": CactusAge::_0, }, + cactus_flower => BlockBehavior::new(), {}, clay => BlockBehavior::new().strength(0.6, 0.6), {}, sugar_cane => BlockBehavior::new(), { "age": SugarCaneAge::_0, @@ -4771,11 +4797,15 @@ make_block_states! { "waterlogged": Waterlogged(false), }, structure_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(-1.0, 3600000.0), { - "mode": Mode::Load, + "mode": StructureMode::Load, }, jigsaw => BlockBehavior::new().requires_correct_tool_for_drops().strength(-1.0, 3600000.0), { "orientation": Orientation::NorthUp, }, + test_block => BlockBehavior::new(), { + "mode": TestMode::Start, + }, + test_instance_block => BlockBehavior::new(), {}, composter => BlockBehavior::new().strength(0.6, 0.6), { "level": ComposterLevel::_0, }, @@ -5419,6 +5449,14 @@ make_block_states! { "facing": FacingCardinal::North, "flower_amount": PinkPetalsFlowerAmount::_1, }, + wildflowers => BlockBehavior::new(), { + "facing": FacingCardinal::North, + "flower_amount": WildflowersFlowerAmount::_1, + }, + leaf_litter => BlockBehavior::new(), { + "facing": FacingCardinal::North, + "segment_amount": LeafLitterSegmentAmount::_1, + }, moss_block => BlockBehavior::new().strength(0.1, 0.1), {}, big_dripleaf => BlockBehavior::new().strength(0.1, 0.1).force_solid(false), { "facing": FacingCardinal::North, @@ -5578,5 +5616,6 @@ make_block_states! { closed_eyeblossom => BlockBehavior::new(), {}, potted_open_eyeblossom => BlockBehavior::new(), {}, potted_closed_eyeblossom => BlockBehavior::new(), {}, + firefly_bush => BlockBehavior::new(), {}, } } diff --git a/azalea-client/src/plugins/chunks.rs b/azalea-client/src/plugins/chunks.rs index 089cc5d4..060b94e2 100644 --- a/azalea-client/src/plugins/chunks.rs +++ b/azalea-client/src/plugins/chunks.rs @@ -4,7 +4,6 @@ use std::{ io::Cursor, - ops::Deref, time::{Duration, Instant}, }; @@ -15,7 +14,6 @@ use azalea_protocol::packets::game::{ }; use bevy_app::{App, Plugin, Update}; use bevy_ecs::prelude::*; -use simdnbt::owned::BaseNbt; use tracing::{error, trace}; use super::packet::game::handle_outgoing_packets; @@ -98,10 +96,7 @@ pub fn handle_receive_chunk_events( } } - let heightmaps_nbt = &event.packet.chunk_data.heightmaps; - // necessary to make the unwrap_or work - let empty_nbt = BaseNbt::default(); - let heightmaps = heightmaps_nbt.unwrap_or(&empty_nbt).deref(); + let heightmaps = &event.packet.chunk_data.heightmaps; if let Err(e) = partial_instance.chunks.replace_with_packet_data( &pos, diff --git a/azalea-client/src/plugins/packet/game/mod.rs b/azalea-client/src/plugins/packet/game/mod.rs index cc67bcd7..6bb93178 100644 --- a/azalea-client/src/plugins/packet/game/mod.rs +++ b/azalea-client/src/plugins/packet/game/mod.rs @@ -57,6 +57,7 @@ pub fn process_packet_events(ecs: &mut World) { ecs, }; + // the order of these doesn't matter, that's decided by the protocol library declare_packet_handlers!( ClientboundGamePacket, packet.as_ref(), @@ -113,7 +114,6 @@ pub fn process_packet_events(ecs: &mut World) { server_data, set_equipment, update_mob_effect, - add_experience_orb, award_stats, block_changed_ack, block_destruction, @@ -193,6 +193,7 @@ pub fn process_packet_events(ecs: &mut World) { recipe_book_add, recipe_book_remove, recipe_book_settings, + test_instance_block_status, ] ); } @@ -1196,8 +1197,6 @@ impl GamePacketHandler<'_> { debug!("Got update mob effect packet {p:?}"); } - pub fn add_experience_orb(&mut self, _p: &ClientboundAddExperienceOrb) {} - pub fn award_stats(&mut self, _p: &ClientboundAwardStats) {} pub fn block_changed_ack(&mut self, _p: &ClientboundBlockChangedAck) {} @@ -1601,4 +1600,5 @@ impl GamePacketHandler<'_> { pub fn recipe_book_add(&mut self, _p: &ClientboundRecipeBookAdd) {} pub fn recipe_book_remove(&mut self, _p: &ClientboundRecipeBookRemove) {} pub fn recipe_book_settings(&mut self, _p: &ClientboundRecipeBookSettings) {} + pub fn test_instance_block_status(&mut self, _p: &ClientboundTestInstanceBlockStatus) {} } diff --git a/azalea-client/src/test_simulation.rs b/azalea-client/src/test_simulation.rs index 13d65bbb..7b422567 100644 --- a/azalea-client/src/test_simulation.rs +++ b/azalea-client/src/test_simulation.rs @@ -22,7 +22,7 @@ use azalea_world::{Chunk, Instance, MinecraftEntityId, Section}; use bevy_app::App; use bevy_ecs::{prelude::*, schedule::ExecutorKind}; use parking_lot::{Mutex, RwLock}; -use simdnbt::owned::{Nbt, NbtCompound, NbtTag}; +use simdnbt::owned::{NbtCompound, NbtTag}; use tokio::task::JoinHandle; use tokio::{sync::mpsc, time::sleep}; use uuid::Uuid; @@ -299,7 +299,7 @@ pub fn make_basic_empty_chunk( x: pos.x, z: pos.z, chunk_data: ClientboundLevelChunkPacketData { - heightmaps: Nbt::None, + heightmaps: Default::default(), data: Arc::new(chunk_bytes.into()), block_entities: vec![], }, diff --git a/azalea-client/tests/change_dimension_to_nether_and_back.rs b/azalea-client/tests/change_dimension_to_nether_and_back.rs index 969c5053..cc1fcb14 100644 --- a/azalea-client/tests/change_dimension_to_nether_and_back.rs +++ b/azalea-client/tests/change_dimension_to_nether_and_back.rs @@ -5,7 +5,7 @@ use azalea_protocol::packets::{ ConnectionProtocol, Packet, config::{ClientboundFinishConfiguration, ClientboundRegistryData}, }; -use azalea_registry::DimensionType; +use azalea_registry::{DataRegistry, DimensionType}; use azalea_world::InstanceName; use bevy_log::tracing_subscriber; use simdnbt::owned::{NbtCompound, NbtTag}; diff --git a/azalea-client/tests/despawn_entities_when_changing_dimension.rs b/azalea-client/tests/despawn_entities_when_changing_dimension.rs index 3d7f2cb4..967e0aac 100644 --- a/azalea-client/tests/despawn_entities_when_changing_dimension.rs +++ b/azalea-client/tests/despawn_entities_when_changing_dimension.rs @@ -5,7 +5,7 @@ use azalea_protocol::packets::{ ConnectionProtocol, config::{ClientboundFinishConfiguration, ClientboundRegistryData}, }; -use azalea_registry::{DimensionType, EntityKind}; +use azalea_registry::{DataRegistry, DimensionType, EntityKind}; use bevy_ecs::query::With; use bevy_log::tracing_subscriber; use simdnbt::owned::{NbtCompound, NbtTag}; diff --git a/azalea-client/tests/move_despawned_entity.rs b/azalea-client/tests/move_despawned_entity.rs index 74f7e942..d590cb39 100644 --- a/azalea-client/tests/move_despawned_entity.rs +++ b/azalea-client/tests/move_despawned_entity.rs @@ -2,7 +2,7 @@ use azalea_client::test_simulation::*; use azalea_core::{position::ChunkPos, resource_location::ResourceLocation}; use azalea_entity::metadata::Cow; use azalea_protocol::packets::{ConnectionProtocol, game::ClientboundMoveEntityRot}; -use azalea_registry::{DimensionType, EntityKind}; +use azalea_registry::{DataRegistry, DimensionType, EntityKind}; use azalea_world::MinecraftEntityId; use bevy_ecs::query::With; use bevy_log::tracing_subscriber; diff --git a/azalea-client/tests/receive_start_config_packet.rs b/azalea-client/tests/receive_start_config_packet.rs index 36762966..9b0c734d 100644 --- a/azalea-client/tests/receive_start_config_packet.rs +++ b/azalea-client/tests/receive_start_config_packet.rs @@ -1,7 +1,7 @@ use azalea_client::{InConfigState, packet::game::SendPacketEvent, test_simulation::*}; use azalea_core::resource_location::ResourceLocation; use azalea_protocol::packets::{ConnectionProtocol, game::ClientboundStartConfiguration}; -use azalea_registry::DimensionType; +use azalea_registry::{DataRegistry, DimensionType}; use azalea_world::InstanceName; use bevy_ecs::event::Events; use bevy_log::tracing_subscriber; diff --git a/azalea-client/tests/set_health_before_login.rs b/azalea-client/tests/set_health_before_login.rs index c078cae4..d81dd48f 100644 --- a/azalea-client/tests/set_health_before_login.rs +++ b/azalea-client/tests/set_health_before_login.rs @@ -6,7 +6,7 @@ use azalea_protocol::packets::{ config::{ClientboundFinishConfiguration, ClientboundRegistryData}, game::ClientboundSetHealth, }; -use azalea_registry::DimensionType; +use azalea_registry::{DataRegistry, DimensionType}; use bevy_log::tracing_subscriber; use simdnbt::owned::{NbtCompound, NbtTag}; diff --git a/azalea-core/src/position.rs b/azalea-core/src/position.rs index 2dea1471..e82e5e4a 100755 --- a/azalea-core/src/position.rs +++ b/azalea-core/src/position.rs @@ -417,6 +417,18 @@ impl BlockPos { } } +/// Similar to [`BlockPos`] but it's serialized as 3 varints instead of one +/// 64-bit integer, so it can represent a bigger range of numbers. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, AzBuf)] +pub struct Vec3i { + #[var] + pub x: i32, + #[var] + pub y: i32, + #[var] + pub z: i32, +} + /// Chunk coordinates are used to represent where a chunk is in the world. You /// can convert the x and z to block coordinates by multiplying them by 16. #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] diff --git a/azalea-entity/src/data.rs b/azalea-entity/src/data.rs index 67476d8b..c92d1c95 100755 --- a/azalea-entity/src/data.rs +++ b/azalea-entity/src/data.rs @@ -70,7 +70,7 @@ pub enum EntityDataValue { BlockPos(BlockPos), OptionalBlockPos(Option<BlockPos>), Direction(Direction), - OptionalUuid(Option<Uuid>), + OptionalLivingEntityReference(Option<Uuid>), BlockState(azalea_block::BlockState), /// If this is air, that means it's absent, OptionalBlockState(azalea_block::BlockState), @@ -82,8 +82,12 @@ pub enum EntityDataValue { OptionalUnsignedInt(OptionalUnsignedInt), Pose(Pose), CatVariant(azalea_registry::CatVariant), + ChickenVariant(azalea_registry::ChickenVariant), + CowVariant(azalea_registry::CowVariant), WolfVariant(azalea_registry::WolfVariant), + WolfSoundVariant(azalea_registry::WolfSoundVariant), FrogVariant(azalea_registry::FrogVariant), + PigVariant(azalea_registry::PigVariant), OptionalGlobalPos(Option<GlobalPos>), PaintingVariant(azalea_registry::PaintingVariant), SnifferState(SnifferStateKind), diff --git a/azalea-entity/src/dimensions.rs b/azalea-entity/src/dimensions.rs index 12a815d1..8d9a1eae 100755 --- a/azalea-entity/src/dimensions.rs +++ b/azalea-entity/src/dimensions.rs @@ -103,6 +103,7 @@ impl From<EntityKind> for EntityDimensions { EntityKind::JungleChestBoat => EntityDimensions::new(1.375, 0.5625), EntityKind::LeashKnot => EntityDimensions::new(0.375, 0.5), EntityKind::LightningBolt => EntityDimensions::new(0.0, 0.0), + EntityKind::LingeringPotion => EntityDimensions::new(0.25, 0.25), EntityKind::Llama => EntityDimensions::new(0.9, 1.87), EntityKind::LlamaSpit => EntityDimensions::new(0.25, 0.25), EntityKind::MagmaCube => EntityDimensions::new(0.52, 0.52), @@ -128,7 +129,6 @@ impl From<EntityKind> for EntityDimensions { EntityKind::Pillager => EntityDimensions::new(0.6, 1.95), EntityKind::Player => EntityDimensions::new(0.6, 1.8), EntityKind::PolarBear => EntityDimensions::new(1.4, 1.4), - EntityKind::Potion => EntityDimensions::new(0.25, 0.25), EntityKind::Pufferfish => EntityDimensions::new(0.7, 0.7), EntityKind::Rabbit => EntityDimensions::new(0.4, 0.5), EntityKind::Ravager => EntityDimensions::new(1.95, 2.2), @@ -147,6 +147,7 @@ impl From<EntityKind> for EntityDimensions { EntityKind::SpawnerMinecart => EntityDimensions::new(0.98, 0.7), EntityKind::SpectralArrow => EntityDimensions::new(0.5, 0.5), EntityKind::Spider => EntityDimensions::new(1.4, 0.9), + EntityKind::SplashPotion => EntityDimensions::new(0.25, 0.25), EntityKind::SpruceBoat => EntityDimensions::new(1.375, 0.5625), EntityKind::SpruceChestBoat => EntityDimensions::new(1.375, 0.5625), EntityKind::Squid => EntityDimensions::new(0.8, 0.8), diff --git a/azalea-entity/src/metadata.rs b/azalea-entity/src/metadata.rs index cac64999..e6504194 100644 --- a/azalea-entity/src/metadata.rs +++ b/azalea-entity/src/metadata.rs @@ -9,6 +9,7 @@ use azalea_core::{ position::{BlockPos, Vec3}, }; use azalea_inventory::ItemStack; +use azalea_registry::DataRegistry; use bevy_ecs::{bundle::Bundle, component::Component}; use derive_more::{Deref, DerefMut}; use thiserror::Error; @@ -1496,8 +1497,6 @@ pub struct Eating(pub bool); pub struct AbstractHorseStanding(pub bool); #[derive(Component, Deref, DerefMut, Clone, Copy)] pub struct Bred(pub bool); -#[derive(Component, Deref, DerefMut, Clone, Copy)] -pub struct Saddled(pub bool); #[derive(Component, Deref, DerefMut, Clone)] pub struct Dash(pub bool); #[derive(Component, Deref, DerefMut, Clone)] @@ -1584,7 +1583,6 @@ impl Default for CamelMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, dash: Dash(false), last_pose_change_tick: LastPoseChangeTick(0), @@ -1696,7 +1694,7 @@ impl Default for CatMetadataBundle { in_sitting_pose: InSittingPose(false), owneruuid: Owneruuid(None), }, - cat_variant: CatVariant(azalea_registry::CatVariant::Tabby), + cat_variant: CatVariant(azalea_registry::CatVariant::new_raw(0)), is_lying: IsLying(false), relax_state_one: RelaxStateOne(false), cat_collar_color: CatCollarColor(Default::default()), @@ -1893,11 +1891,9 @@ impl Default for CherryChestBoatMetadataBundle { } #[derive(Component, Deref, DerefMut, Clone)] -pub struct DisplayBlock(pub i32); +pub struct CustomDisplayBlock(pub azalea_block::BlockState); #[derive(Component, Deref, DerefMut, Clone)] pub struct DisplayOffset(pub i32); -#[derive(Component, Deref, DerefMut, Clone)] -pub struct CustomDisplay(pub bool); #[derive(Component)] pub struct ChestMinecart; impl ChestMinecart { @@ -1906,7 +1902,7 @@ impl ChestMinecart { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=13 => AbstractMinecart::apply_metadata(entity, d)?, + 0..=12 => AbstractMinecart::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -1947,14 +1943,15 @@ impl Default for ChestMinecartMetadataBundle { hurtdir: Hurtdir(1), damage: Damage(0.0), }, - display_block: DisplayBlock(Default::default()), - display_offset: DisplayOffset(6), - custom_display: CustomDisplay(false), + custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR), + display_offset: DisplayOffset(Default::default()), }, } } } +#[derive(Component, Deref, DerefMut, Clone)] +pub struct ChickenVariant(pub azalea_registry::PigVariant); #[derive(Component)] pub struct Chicken; impl Chicken { @@ -1964,6 +1961,9 @@ impl Chicken { ) -> Result<(), UpdateMetadataError> { match d.index { 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, + 17 => { + entity.insert(ChickenVariant(d.value.into_pig_variant()?)); + } _ => {} } Ok(()) @@ -1974,6 +1974,7 @@ impl Chicken { pub struct ChickenMetadataBundle { _marker: Chicken, parent: AbstractAnimalMetadataBundle, + chicken_variant: ChickenVariant, } impl Default for ChickenMetadataBundle { fn default() -> Self { @@ -2023,6 +2024,7 @@ impl Default for ChickenMetadataBundle { abstract_ageable_baby: AbstractAgeableBaby(false), }, }, + chicken_variant: ChickenVariant(azalea_registry::PigVariant::new_raw(0)), } } } @@ -2110,11 +2112,11 @@ impl CommandBlockMinecart { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=13 => AbstractMinecart::apply_metadata(entity, d)?, - 14 => { + 0..=12 => AbstractMinecart::apply_metadata(entity, d)?, + 13 => { entity.insert(CommandName(d.value.into_string()?)); } - 15 => { + 14 => { entity.insert(LastOutput(d.value.into_formatted_text()?)); } _ => {} @@ -2159,9 +2161,8 @@ impl Default for CommandBlockMinecartMetadataBundle { hurtdir: Hurtdir(1), damage: Damage(0.0), }, - display_block: DisplayBlock(Default::default()), - display_offset: DisplayOffset(6), - custom_display: CustomDisplay(false), + custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR), + display_offset: DisplayOffset(Default::default()), }, command_name: CommandName("".to_string()), last_output: LastOutput(Default::default()), @@ -2169,6 +2170,8 @@ impl Default for CommandBlockMinecartMetadataBundle { } } +#[derive(Component, Deref, DerefMut, Clone)] +pub struct CowVariant(pub azalea_registry::ChickenVariant); #[derive(Component)] pub struct Cow; impl Cow { @@ -2178,6 +2181,9 @@ impl Cow { ) -> Result<(), UpdateMetadataError> { match d.index { 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, + 17 => { + entity.insert(CowVariant(d.value.into_chicken_variant()?)); + } _ => {} } Ok(()) @@ -2188,6 +2194,7 @@ impl Cow { pub struct CowMetadataBundle { _marker: Cow, parent: AbstractAnimalMetadataBundle, + cow_variant: CowVariant, } impl Default for CowMetadataBundle { fn default() -> Self { @@ -2237,6 +2244,7 @@ impl Default for CowMetadataBundle { abstract_ageable_baby: AbstractAgeableBaby(false), }, }, + cow_variant: CowVariant(azalea_registry::ChickenVariant::new_raw(0)), } } } @@ -2248,7 +2256,7 @@ pub struct IsActive(pub bool); #[derive(Component, Deref, DerefMut, Clone)] pub struct IsTearingDown(pub bool); #[derive(Component, Deref, DerefMut, Clone)] -pub struct CreakingHomePos(pub Option<BlockPos>); +pub struct HomePos(pub Option<BlockPos>); #[derive(Component)] pub struct Creaking; impl Creaking { @@ -2268,7 +2276,7 @@ impl Creaking { entity.insert(IsTearingDown(d.value.into_boolean()?)); } 19 => { - entity.insert(CreakingHomePos(d.value.into_optional_block_pos()?)); + entity.insert(HomePos(d.value.into_optional_block_pos()?)); } _ => {} } @@ -2283,7 +2291,7 @@ pub struct CreakingMetadataBundle { can_move: CanMove, is_active: IsActive, is_tearing_down: IsTearingDown, - creaking_home_pos: CreakingHomePos, + home_pos: HomePos, } impl Default for CreakingMetadataBundle { fn default() -> Self { @@ -2332,7 +2340,7 @@ impl Default for CreakingMetadataBundle { can_move: CanMove(true), is_active: IsActive(false), is_tearing_down: IsTearingDown(false), - creaking_home_pos: CreakingHomePos(None), + home_pos: HomePos(None), } } } @@ -2541,8 +2549,6 @@ impl Default for DarkOakChestBoatMetadataBundle { } #[derive(Component, Deref, DerefMut, Clone)] -pub struct TreasurePos(pub BlockPos); -#[derive(Component, Deref, DerefMut, Clone)] pub struct GotFish(pub bool); #[derive(Component, Deref, DerefMut, Clone)] pub struct MoistnessLevel(pub i32); @@ -2556,12 +2562,9 @@ impl Dolphin { match d.index { 0..=16 => AbstractAgeable::apply_metadata(entity, d)?, 17 => { - entity.insert(TreasurePos(d.value.into_block_pos()?)); - } - 18 => { entity.insert(GotFish(d.value.into_boolean()?)); } - 19 => { + 18 => { entity.insert(MoistnessLevel(d.value.into_int()?)); } _ => {} @@ -2574,7 +2577,6 @@ impl Dolphin { pub struct DolphinMetadataBundle { _marker: Dolphin, parent: AbstractAgeableMetadataBundle, - treasure_pos: TreasurePos, got_fish: GotFish, moistness_level: MoistnessLevel, } @@ -2623,7 +2625,6 @@ impl Default for DolphinMetadataBundle { }, abstract_ageable_baby: AbstractAgeableBaby(false), }, - treasure_pos: TreasurePos(BlockPos::new(0, 0, 0)), got_fish: GotFish(false), moistness_level: MoistnessLevel(2400), } @@ -2710,7 +2711,6 @@ impl Default for DonkeyMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, chest: Chest(false), }, @@ -3485,6 +3485,8 @@ impl Default for ExperienceBottleMetadataBundle { } } +#[derive(Component, Deref, DerefMut, Clone)] +pub struct Value(pub i32); #[derive(Component)] pub struct ExperienceOrb; impl ExperienceOrb { @@ -3494,6 +3496,9 @@ impl ExperienceOrb { ) -> Result<(), UpdateMetadataError> { match d.index { 0..=7 => AbstractEntity::apply_metadata(entity, d)?, + 8 => { + entity.insert(Value(d.value.into_int()?)); + } _ => {} } Ok(()) @@ -3504,6 +3509,7 @@ impl ExperienceOrb { pub struct ExperienceOrbMetadataBundle { _marker: ExperienceOrb, parent: AbstractEntityMetadataBundle, + value: Value, } impl Default for ExperienceOrbMetadataBundle { fn default() -> Self { @@ -3526,6 +3532,7 @@ impl Default for ExperienceOrbMetadataBundle { pose: Pose::default(), ticks_frozen: TicksFrozen(Default::default()), }, + value: Value(0), } } } @@ -3854,10 +3861,10 @@ impl Fox { entity.insert(FoxInterested(bitfield & 0x8 != 0)); } 19 => { - entity.insert(TrustedId0(d.value.into_optional_uuid()?)); + entity.insert(TrustedId0(d.value.into_optional_living_entity_reference()?)); } 20 => { - entity.insert(TrustedId1(d.value.into_optional_uuid()?)); + entity.insert(TrustedId1(d.value.into_optional_living_entity_reference()?)); } _ => {} } @@ -3928,7 +3935,7 @@ impl Default for FoxMetadataBundle { abstract_ageable_baby: AbstractAgeableBaby(false), }, }, - fox_kind: FoxKind(0), + fox_kind: FoxKind(Default::default()), fox_sitting: FoxSitting(false), faceplanted: Faceplanted(false), defending: Defending(false), @@ -3943,7 +3950,7 @@ impl Default for FoxMetadataBundle { } #[derive(Component, Deref, DerefMut, Clone)] -pub struct FrogVariant(pub azalea_registry::FrogVariant); +pub struct FrogVariant(pub azalea_registry::WolfSoundVariant); #[derive(Component, Deref, DerefMut, Clone)] pub struct TongueTarget(pub OptionalUnsignedInt); #[derive(Component)] @@ -3956,7 +3963,7 @@ impl Frog { match d.index { 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, 17 => { - entity.insert(FrogVariant(d.value.into_frog_variant()?)); + entity.insert(FrogVariant(d.value.into_wolf_sound_variant()?)); } 18 => { entity.insert(TongueTarget(d.value.into_optional_unsigned_int()?)); @@ -4022,7 +4029,7 @@ impl Default for FrogMetadataBundle { abstract_ageable_baby: AbstractAgeableBaby(false), }, }, - frog_variant: FrogVariant(azalea_registry::FrogVariant::Temperate), + frog_variant: FrogVariant(azalea_registry::WolfSoundVariant::new_raw(0)), tongue_target: TongueTarget(OptionalUnsignedInt(None)), } } @@ -4038,8 +4045,8 @@ impl FurnaceMinecart { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=13 => AbstractMinecart::apply_metadata(entity, d)?, - 14 => { + 0..=12 => AbstractMinecart::apply_metadata(entity, d)?, + 13 => { entity.insert(Fuel(d.value.into_boolean()?)); } _ => {} @@ -4083,9 +4090,8 @@ impl Default for FurnaceMinecartMetadataBundle { hurtdir: Hurtdir(1), damage: Damage(0.0), }, - display_block: DisplayBlock(Default::default()), - display_offset: DisplayOffset(6), - custom_display: CustomDisplay(false), + custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR), + display_offset: DisplayOffset(Default::default()), }, fuel: Fuel(false), } @@ -4620,7 +4626,7 @@ impl HopperMinecart { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=13 => AbstractMinecart::apply_metadata(entity, d)?, + 0..=12 => AbstractMinecart::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -4661,9 +4667,8 @@ impl Default for HopperMinecartMetadataBundle { hurtdir: Hurtdir(1), damage: Damage(0.0), }, - display_block: DisplayBlock(Default::default()), - display_offset: DisplayOffset(6), - custom_display: CustomDisplay(false), + custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR), + display_offset: DisplayOffset(Default::default()), }, } } @@ -4749,7 +4754,6 @@ impl Default for HorseMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, horse_type_variant: HorseTypeVariant(0), } @@ -5452,6 +5456,57 @@ impl Default for LightningBoltMetadataBundle { } } +#[derive(Component)] +pub struct LingeringPotion; +impl LingeringPotion { + pub fn apply_metadata( + entity: &mut bevy_ecs::system::EntityCommands, + d: EntityDataItem, + ) -> Result<(), UpdateMetadataError> { + match d.index { + 0..=8 => AbstractThrownItemProjectile::apply_metadata(entity, d)?, + _ => {} + } + Ok(()) + } +} + +#[derive(Bundle)] +pub struct LingeringPotionMetadataBundle { + _marker: LingeringPotion, + parent: AbstractThrownItemProjectileMetadataBundle, +} +impl Default for LingeringPotionMetadataBundle { + fn default() -> Self { + Self { + _marker: LingeringPotion, + parent: AbstractThrownItemProjectileMetadataBundle { + _marker: AbstractThrownItemProjectile, + parent: AbstractEntityMetadataBundle { + _marker: AbstractEntity, + on_fire: OnFire(false), + shift_key_down: ShiftKeyDown(false), + sprinting: Sprinting(false), + swimming: Swimming(false), + currently_glowing: CurrentlyGlowing(false), + invisible: Invisible(false), + fall_flying: FallFlying(false), + air_supply: AirSupply(Default::default()), + custom_name: CustomName(Default::default()), + custom_name_visible: CustomNameVisible(Default::default()), + silent: Silent(Default::default()), + no_gravity: NoGravity(Default::default()), + pose: Pose::default(), + ticks_frozen: TicksFrozen(Default::default()), + }, + abstract_thrown_item_projectile_item_stack: AbstractThrownItemProjectileItemStack( + Default::default(), + ), + }, + } + } +} + #[derive(Component, Deref, DerefMut, Clone)] pub struct Strength(pub i32); #[derive(Component, Deref, DerefMut, Clone)] @@ -5542,7 +5597,6 @@ impl Default for LlamaMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, chest: Chest(false), }, @@ -5832,7 +5886,7 @@ impl Minecart { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=13 => AbstractMinecart::apply_metadata(entity, d)?, + 0..=12 => AbstractMinecart::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -5873,16 +5927,15 @@ impl Default for MinecartMetadataBundle { hurtdir: Hurtdir(1), damage: Damage(0.0), }, - display_block: DisplayBlock(Default::default()), - display_offset: DisplayOffset(6), - custom_display: CustomDisplay(false), + custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR), + display_offset: DisplayOffset(Default::default()), }, } } } #[derive(Component, Deref, DerefMut, Clone)] -pub struct MooshroomKind(pub String); +pub struct MooshroomKind(pub i32); #[derive(Component)] pub struct Mooshroom; impl Mooshroom { @@ -5891,9 +5944,9 @@ impl Mooshroom { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => Cow::apply_metadata(entity, d)?, + 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, 17 => { - entity.insert(MooshroomKind(d.value.into_string()?)); + entity.insert(MooshroomKind(d.value.into_int()?)); } _ => {} } @@ -5904,58 +5957,55 @@ impl Mooshroom { #[derive(Bundle)] pub struct MooshroomMetadataBundle { _marker: Mooshroom, - parent: CowMetadataBundle, + parent: AbstractAnimalMetadataBundle, mooshroom_kind: MooshroomKind, } impl Default for MooshroomMetadataBundle { fn default() -> Self { Self { _marker: Mooshroom, - parent: CowMetadataBundle { - _marker: Cow, - parent: AbstractAnimalMetadataBundle { - _marker: AbstractAnimal, - parent: AbstractAgeableMetadataBundle { - _marker: AbstractAgeable, - parent: AbstractCreatureMetadataBundle { - _marker: AbstractCreature, - parent: AbstractInsentientMetadataBundle { - _marker: AbstractInsentient, - parent: AbstractLivingMetadataBundle { - _marker: AbstractLiving, - parent: AbstractEntityMetadataBundle { - _marker: AbstractEntity, - on_fire: OnFire(false), - shift_key_down: ShiftKeyDown(false), - sprinting: Sprinting(false), - swimming: Swimming(false), - currently_glowing: CurrentlyGlowing(false), - invisible: Invisible(false), - fall_flying: FallFlying(false), - air_supply: AirSupply(Default::default()), - custom_name: CustomName(Default::default()), - custom_name_visible: CustomNameVisible(Default::default()), - silent: Silent(Default::default()), - no_gravity: NoGravity(Default::default()), - pose: Pose::default(), - ticks_frozen: TicksFrozen(Default::default()), - }, - auto_spin_attack: AutoSpinAttack(false), - abstract_living_using_item: AbstractLivingUsingItem(false), - health: Health(1.0), - effect_particles: EffectParticles(Default::default()), - effect_ambience: EffectAmbience(false), - arrow_count: ArrowCount(0), - stinger_count: StingerCount(0), - sleeping_pos: SleepingPos(None), + parent: AbstractAnimalMetadataBundle { + _marker: AbstractAnimal, + parent: AbstractAgeableMetadataBundle { + _marker: AbstractAgeable, + parent: AbstractCreatureMetadataBundle { + _marker: AbstractCreature, + parent: AbstractInsentientMetadataBundle { + _marker: AbstractInsentient, + parent: AbstractLivingMetadataBundle { + _marker: AbstractLiving, + parent: AbstractEntityMetadataBundle { + _marker: AbstractEntity, + on_fire: OnFire(false), + shift_key_down: ShiftKeyDown(false), + sprinting: Sprinting(false), + swimming: Swimming(false), + currently_glowing: CurrentlyGlowing(false), + invisible: Invisible(false), + fall_flying: FallFlying(false), + air_supply: AirSupply(Default::default()), + custom_name: CustomName(Default::default()), + custom_name_visible: CustomNameVisible(Default::default()), + silent: Silent(Default::default()), + no_gravity: NoGravity(Default::default()), + pose: Pose::default(), + ticks_frozen: TicksFrozen(Default::default()), }, - no_ai: NoAi(false), - left_handed: LeftHanded(false), - aggressive: Aggressive(false), + auto_spin_attack: AutoSpinAttack(false), + abstract_living_using_item: AbstractLivingUsingItem(false), + health: Health(1.0), + effect_particles: EffectParticles(Default::default()), + effect_ambience: EffectAmbience(false), + arrow_count: ArrowCount(0), + stinger_count: StingerCount(0), + sleeping_pos: SleepingPos(None), }, + no_ai: NoAi(false), + left_handed: LeftHanded(false), + aggressive: Aggressive(false), }, - abstract_ageable_baby: AbstractAgeableBaby(false), }, + abstract_ageable_baby: AbstractAgeableBaby(false), }, }, mooshroom_kind: MooshroomKind(Default::default()), @@ -6041,7 +6091,6 @@ impl Default for MuleMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, chest: Chest(false), }, @@ -6341,7 +6390,7 @@ impl Default for PaintingMetadataBundle { pose: Pose::default(), ticks_frozen: TicksFrozen(Default::default()), }, - painting_variant: PaintingVariant(azalea_registry::PaintingVariant::Kebab), + painting_variant: PaintingVariant(azalea_registry::PaintingVariant::new_raw(0)), } } } @@ -6670,7 +6719,7 @@ impl Default for ParrotMetadataBundle { in_sitting_pose: InSittingPose(false), owneruuid: Owneruuid(None), }, - parrot_variant: ParrotVariant(0), + parrot_variant: ParrotVariant(Default::default()), } } } @@ -6745,9 +6794,9 @@ impl Default for PhantomMetadataBundle { } #[derive(Component, Deref, DerefMut, Clone)] -pub struct PigSaddle(pub bool); -#[derive(Component, Deref, DerefMut, Clone)] pub struct PigBoostTime(pub i32); +#[derive(Component, Deref, DerefMut, Clone)] +pub struct PigVariant(pub azalea_registry::FrogVariant); #[derive(Component)] pub struct Pig; impl Pig { @@ -6758,10 +6807,10 @@ impl Pig { match d.index { 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, 17 => { - entity.insert(PigSaddle(d.value.into_boolean()?)); + entity.insert(PigBoostTime(d.value.into_int()?)); } 18 => { - entity.insert(PigBoostTime(d.value.into_int()?)); + entity.insert(PigVariant(d.value.into_frog_variant()?)); } _ => {} } @@ -6773,8 +6822,8 @@ impl Pig { pub struct PigMetadataBundle { _marker: Pig, parent: AbstractAnimalMetadataBundle, - pig_saddle: PigSaddle, pig_boost_time: PigBoostTime, + pig_variant: PigVariant, } impl Default for PigMetadataBundle { fn default() -> Self { @@ -6824,8 +6873,8 @@ impl Default for PigMetadataBundle { abstract_ageable_baby: AbstractAgeableBaby(false), }, }, - pig_saddle: PigSaddle(false), pig_boost_time: PigBoostTime(0), + pig_variant: PigVariant(azalea_registry::FrogVariant::new_raw(0)), } } } @@ -7253,57 +7302,6 @@ impl Default for PolarBearMetadataBundle { } } -#[derive(Component)] -pub struct Potion; -impl Potion { - pub fn apply_metadata( - entity: &mut bevy_ecs::system::EntityCommands, - d: EntityDataItem, - ) -> Result<(), UpdateMetadataError> { - match d.index { - 0..=8 => AbstractThrownItemProjectile::apply_metadata(entity, d)?, - _ => {} - } - Ok(()) - } -} - -#[derive(Bundle)] -pub struct PotionMetadataBundle { - _marker: Potion, - parent: AbstractThrownItemProjectileMetadataBundle, -} -impl Default for PotionMetadataBundle { - fn default() -> Self { - Self { - _marker: Potion, - parent: AbstractThrownItemProjectileMetadataBundle { - _marker: AbstractThrownItemProjectile, - parent: AbstractEntityMetadataBundle { - _marker: AbstractEntity, - on_fire: OnFire(false), - shift_key_down: ShiftKeyDown(false), - sprinting: Sprinting(false), - swimming: Swimming(false), - currently_glowing: CurrentlyGlowing(false), - invisible: Invisible(false), - fall_flying: FallFlying(false), - air_supply: AirSupply(Default::default()), - custom_name: CustomName(Default::default()), - custom_name_visible: CustomNameVisible(Default::default()), - silent: Silent(Default::default()), - no_gravity: NoGravity(Default::default()), - pose: Pose::default(), - ticks_frozen: TicksFrozen(Default::default()), - }, - abstract_thrown_item_projectile_item_stack: AbstractThrownItemProjectileItemStack( - Default::default(), - ), - }, - } - } -} - #[derive(Component, Deref, DerefMut, Clone)] pub struct PufferfishFromBucket(pub bool); #[derive(Component, Deref, DerefMut, Clone)] @@ -8038,7 +8036,6 @@ impl Default for SkeletonHorseMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, } } @@ -8381,7 +8378,7 @@ impl SpawnerMinecart { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=13 => AbstractMinecart::apply_metadata(entity, d)?, + 0..=12 => AbstractMinecart::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -8422,9 +8419,8 @@ impl Default for SpawnerMinecartMetadataBundle { hurtdir: Hurtdir(1), damage: Damage(0.0), }, - display_block: DisplayBlock(Default::default()), - display_offset: DisplayOffset(6), - custom_display: CustomDisplay(false), + custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR), + display_offset: DisplayOffset(Default::default()), }, } } @@ -8557,6 +8553,57 @@ impl Default for SpiderMetadataBundle { } #[derive(Component)] +pub struct SplashPotion; +impl SplashPotion { + pub fn apply_metadata( + entity: &mut bevy_ecs::system::EntityCommands, + d: EntityDataItem, + ) -> Result<(), UpdateMetadataError> { + match d.index { + 0..=8 => AbstractThrownItemProjectile::apply_metadata(entity, d)?, + _ => {} + } + Ok(()) + } +} + +#[derive(Bundle)] +pub struct SplashPotionMetadataBundle { + _marker: SplashPotion, + parent: AbstractThrownItemProjectileMetadataBundle, +} +impl Default for SplashPotionMetadataBundle { + fn default() -> Self { + Self { + _marker: SplashPotion, + parent: AbstractThrownItemProjectileMetadataBundle { + _marker: AbstractThrownItemProjectile, + parent: AbstractEntityMetadataBundle { + _marker: AbstractEntity, + on_fire: OnFire(false), + shift_key_down: ShiftKeyDown(false), + sprinting: Sprinting(false), + swimming: Swimming(false), + currently_glowing: CurrentlyGlowing(false), + invisible: Invisible(false), + fall_flying: FallFlying(false), + air_supply: AirSupply(Default::default()), + custom_name: CustomName(Default::default()), + custom_name_visible: CustomNameVisible(Default::default()), + silent: Silent(Default::default()), + no_gravity: NoGravity(Default::default()), + pose: Pose::default(), + ticks_frozen: TicksFrozen(Default::default()), + }, + abstract_thrown_item_projectile_item_stack: AbstractThrownItemProjectileItemStack( + Default::default(), + ), + }, + } + } +} + +#[derive(Component)] pub struct SpruceBoat; impl SpruceBoat { pub fn apply_metadata( @@ -8811,8 +8858,6 @@ impl Default for StrayMetadataBundle { pub struct StriderBoostTime(pub i32); #[derive(Component, Deref, DerefMut, Clone)] pub struct Suffocating(pub bool); -#[derive(Component, Deref, DerefMut, Clone)] -pub struct StriderSaddle(pub bool); #[derive(Component)] pub struct Strider; impl Strider { @@ -8828,9 +8873,6 @@ impl Strider { 18 => { entity.insert(Suffocating(d.value.into_boolean()?)); } - 19 => { - entity.insert(StriderSaddle(d.value.into_boolean()?)); - } _ => {} } Ok(()) @@ -8843,7 +8885,6 @@ pub struct StriderMetadataBundle { parent: AbstractAnimalMetadataBundle, strider_boost_time: StriderBoostTime, suffocating: Suffocating, - strider_saddle: StriderSaddle, } impl Default for StriderMetadataBundle { fn default() -> Self { @@ -8895,7 +8936,6 @@ impl Default for StriderMetadataBundle { }, strider_boost_time: StriderBoostTime(0), suffocating: Suffocating(false), - strider_saddle: StriderSaddle(false), } } } @@ -9156,7 +9196,7 @@ impl TntMinecart { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=13 => AbstractMinecart::apply_metadata(entity, d)?, + 0..=12 => AbstractMinecart::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -9197,9 +9237,8 @@ impl Default for TntMinecartMetadataBundle { hurtdir: Hurtdir(1), damage: Damage(0.0), }, - display_block: DisplayBlock(Default::default()), - display_offset: DisplayOffset(6), - custom_display: CustomDisplay(false), + custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR), + display_offset: DisplayOffset(Default::default()), }, } } @@ -9287,7 +9326,6 @@ impl Default for TraderLlamaMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, chest: Chest(false), }, @@ -9435,23 +9473,15 @@ impl Default for TropicalFishMetadataBundle { }, abstract_fish_from_bucket: AbstractFishFromBucket(false), }, - tropical_fish_type_variant: TropicalFishTypeVariant(0), + tropical_fish_type_variant: TropicalFishTypeVariant(Default::default()), } } } #[derive(Component, Deref, DerefMut, Clone)] -pub struct TurtleHomePos(pub BlockPos); -#[derive(Component, Deref, DerefMut, Clone)] pub struct HasEgg(pub bool); #[derive(Component, Deref, DerefMut, Clone)] pub struct LayingEgg(pub bool); -#[derive(Component, Deref, DerefMut, Clone)] -pub struct TravelPos(pub BlockPos); -#[derive(Component, Deref, DerefMut, Clone)] -pub struct GoingHome(pub bool); -#[derive(Component, Deref, DerefMut, Clone)] -pub struct Travelling(pub bool); #[derive(Component)] pub struct Turtle; impl Turtle { @@ -9462,23 +9492,11 @@ impl Turtle { match d.index { 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, 17 => { - entity.insert(TurtleHomePos(d.value.into_block_pos()?)); - } - 18 => { entity.insert(HasEgg(d.value.into_boolean()?)); } - 19 => { + 18 => { entity.insert(LayingEgg(d.value.into_boolean()?)); } - 20 => { - entity.insert(TravelPos(d.value.into_block_pos()?)); - } - 21 => { - entity.insert(GoingHome(d.value.into_boolean()?)); - } - 22 => { - entity.insert(Travelling(d.value.into_boolean()?)); - } _ => {} } Ok(()) @@ -9489,12 +9507,8 @@ impl Turtle { pub struct TurtleMetadataBundle { _marker: Turtle, parent: AbstractAnimalMetadataBundle, - turtle_home_pos: TurtleHomePos, has_egg: HasEgg, laying_egg: LayingEgg, - travel_pos: TravelPos, - going_home: GoingHome, - travelling: Travelling, } impl Default for TurtleMetadataBundle { fn default() -> Self { @@ -9544,12 +9558,8 @@ impl Default for TurtleMetadataBundle { abstract_ageable_baby: AbstractAgeableBaby(false), }, }, - turtle_home_pos: TurtleHomePos(BlockPos::new(0, 0, 0)), has_egg: HasEgg(false), laying_egg: LayingEgg(false), - travel_pos: TravelPos(BlockPos::new(0, 0, 0)), - going_home: GoingHome(false), - travelling: Travelling(false), } } } @@ -10282,7 +10292,9 @@ pub struct WolfCollarColor(pub i32); #[derive(Component, Deref, DerefMut, Clone)] pub struct WolfRemainingAngerTime(pub i32); #[derive(Component, Deref, DerefMut, Clone)] -pub struct WolfVariant(pub azalea_registry::WolfVariant); +pub struct WolfVariant(pub azalea_registry::CowVariant); +#[derive(Component, Deref, DerefMut, Clone)] +pub struct SoundVariant(pub azalea_registry::WolfVariant); #[derive(Component)] pub struct Wolf; impl Wolf { @@ -10302,7 +10314,10 @@ impl Wolf { entity.insert(WolfRemainingAngerTime(d.value.into_int()?)); } 22 => { - entity.insert(WolfVariant(d.value.into_wolf_variant()?)); + entity.insert(WolfVariant(d.value.into_cow_variant()?)); + } + 23 => { + entity.insert(SoundVariant(d.value.into_wolf_variant()?)); } _ => {} } @@ -10318,6 +10333,7 @@ pub struct WolfMetadataBundle { wolf_collar_color: WolfCollarColor, wolf_remaining_anger_time: WolfRemainingAngerTime, wolf_variant: WolfVariant, + sound_variant: SoundVariant, } impl Default for WolfMetadataBundle { fn default() -> Self { @@ -10376,7 +10392,8 @@ impl Default for WolfMetadataBundle { wolf_interested: WolfInterested(false), wolf_collar_color: WolfCollarColor(Default::default()), wolf_remaining_anger_time: WolfRemainingAngerTime(0), - wolf_variant: WolfVariant(Default::default()), + wolf_variant: WolfVariant(azalea_registry::CowVariant::new_raw(0)), + sound_variant: SoundVariant(azalea_registry::WolfVariant::new_raw(0)), } } } @@ -10613,7 +10630,6 @@ impl Default for ZombieHorseMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, } } @@ -11132,7 +11148,6 @@ impl Default for AbstractChestedHorseMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), }, chest: Chest(false), } @@ -11512,7 +11527,6 @@ impl AbstractHorse { entity.insert(Eating(bitfield & 0x10 != 0)); entity.insert(AbstractHorseStanding(bitfield & 0x20 != 0)); entity.insert(Bred(bitfield & 0x8 != 0)); - entity.insert(Saddled(bitfield & 0x4 != 0)); } _ => {} } @@ -11528,7 +11542,6 @@ pub struct AbstractHorseMetadataBundle { eating: Eating, abstract_horse_standing: AbstractHorseStanding, bred: Bred, - saddled: Saddled, } impl Default for AbstractHorseMetadataBundle { fn default() -> Self { @@ -11582,7 +11595,6 @@ impl Default for AbstractHorseMetadataBundle { eating: Eating(false), abstract_horse_standing: AbstractHorseStanding(false), bred: Bred(false), - saddled: Saddled(false), } } } @@ -11749,14 +11761,11 @@ impl AbstractMinecart { match d.index { 0..=10 => AbstractVehicle::apply_metadata(entity, d)?, 11 => { - entity.insert(DisplayBlock(d.value.into_int()?)); + entity.insert(CustomDisplayBlock(d.value.into_optional_block_state()?)); } 12 => { entity.insert(DisplayOffset(d.value.into_int()?)); } - 13 => { - entity.insert(CustomDisplay(d.value.into_boolean()?)); - } _ => {} } Ok(()) @@ -11767,9 +11776,8 @@ impl AbstractMinecart { pub struct AbstractMinecartMetadataBundle { _marker: AbstractMinecart, parent: AbstractVehicleMetadataBundle, - display_block: DisplayBlock, + custom_display_block: CustomDisplayBlock, display_offset: DisplayOffset, - custom_display: CustomDisplay, } impl Default for AbstractMinecartMetadataBundle { fn default() -> Self { @@ -11798,9 +11806,8 @@ impl Default for AbstractMinecartMetadataBundle { hurtdir: Hurtdir(1), damage: Damage(0.0), }, - display_block: DisplayBlock(Default::default()), - display_offset: DisplayOffset(6), - custom_display: CustomDisplay(false), + custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR), + display_offset: DisplayOffset(Default::default()), } } } @@ -12108,7 +12115,7 @@ impl AbstractTameable { entity.insert(InSittingPose(bitfield & 0x1 != 0)); } 18 => { - entity.insert(Owneruuid(d.value.into_optional_uuid()?)); + entity.insert(Owneruuid(d.value.into_optional_living_entity_reference()?)); } _ => {} } @@ -12753,6 +12760,11 @@ pub fn apply_metadata( LightningBolt::apply_metadata(entity, d)?; } } + azalea_registry::EntityKind::LingeringPotion => { + for d in items { + LingeringPotion::apply_metadata(entity, d)?; + } + } azalea_registry::EntityKind::Llama => { for d in items { Llama::apply_metadata(entity, d)?; @@ -12878,11 +12890,6 @@ pub fn apply_metadata( PolarBear::apply_metadata(entity, d)?; } } - azalea_registry::EntityKind::Potion => { - for d in items { - Potion::apply_metadata(entity, d)?; - } - } azalea_registry::EntityKind::Pufferfish => { for d in items { Pufferfish::apply_metadata(entity, d)?; @@ -12973,6 +12980,11 @@ pub fn apply_metadata( Spider::apply_metadata(entity, d)?; } } + azalea_registry::EntityKind::SplashPotion => { + for d in items { + SplashPotion::apply_metadata(entity, d)?; + } + } azalea_registry::EntityKind::SpruceBoat => { for d in items { SpruceBoat::apply_metadata(entity, d)?; @@ -13355,6 +13367,9 @@ pub fn apply_default_metadata( azalea_registry::EntityKind::LightningBolt => { entity.insert(LightningBoltMetadataBundle::default()); } + azalea_registry::EntityKind::LingeringPotion => { + entity.insert(LingeringPotionMetadataBundle::default()); + } azalea_registry::EntityKind::Llama => { entity.insert(LlamaMetadataBundle::default()); } @@ -13430,9 +13445,6 @@ pub fn apply_default_metadata( azalea_registry::EntityKind::PolarBear => { entity.insert(PolarBearMetadataBundle::default()); } - azalea_registry::EntityKind::Potion => { - entity.insert(PotionMetadataBundle::default()); - } azalea_registry::EntityKind::Pufferfish => { entity.insert(PufferfishMetadataBundle::default()); } @@ -13487,6 +13499,9 @@ pub fn apply_default_metadata( azalea_registry::EntityKind::Spider => { entity.insert(SpiderMetadataBundle::default()); } + azalea_registry::EntityKind::SplashPotion => { + entity.insert(SplashPotionMetadataBundle::default()); + } azalea_registry::EntityKind::SpruceBoat => { entity.insert(SpruceBoatMetadataBundle::default()); } diff --git a/azalea-entity/src/particle.rs b/azalea-entity/src/particle.rs index 497f4cef..6bc1ef6f 100755 --- a/azalea-entity/src/particle.rs +++ b/azalea-entity/src/particle.rs @@ -45,6 +45,7 @@ pub enum Particle { Infested, CherryLeaves, PaleOakLeaves, + TintedLeaves, SculkSoul, SculkCharge(SculkChargeParticle), SculkChargePop, @@ -122,6 +123,7 @@ pub enum Particle { RaidOmen, TrialOmen, BlockCrumble, + Firefly, } impl From<ParticleKind> for Particle { @@ -164,6 +166,7 @@ impl From<ParticleKind> for Particle { ParticleKind::Flame => Self::Flame, ParticleKind::CherryLeaves => Self::CherryLeaves, ParticleKind::PaleOakLeaves => Self::PaleOakLeaves, + ParticleKind::TintedLeaves => Self::TintedLeaves, ParticleKind::SculkSoul => Self::SculkSoul, ParticleKind::SculkCharge => Self::SculkCharge(SculkChargeParticle::default()), ParticleKind::SculkChargePop => Self::SculkChargePop, @@ -245,6 +248,7 @@ impl From<ParticleKind> for Particle { ParticleKind::TrialOmen => Self::TrialOmen, ParticleKind::Trail => Self::Trail, ParticleKind::BlockCrumble => Self::BlockCrumble, + ParticleKind::Firefly => Self::Firefly, } } } diff --git a/azalea-inventory/src/components.rs b/azalea-inventory/src/components.rs index 1d92faf3..13aa76f5 100644 --- a/azalea-inventory/src/components.rs +++ b/azalea-inventory/src/components.rs @@ -8,8 +8,9 @@ use azalea_core::{ sound::CustomSound, }; use azalea_registry::{ - Attribute, Block, ConsumeEffectKind, DataComponentKind, Enchantment, EntityKind, HolderSet, - Item, MobEffect, Potion, SoundEvent, TrimMaterial, TrimPattern, + self as registry, Attribute, Block, ConsumeEffectKind, DamageKind, DataComponentKind, + Enchantment, EntityKind, Holder, HolderSet, Item, MobEffect, Potion, SoundEvent, TrimMaterial, + TrimPattern, }; use simdnbt::owned::{Nbt, NbtCompound}; use tracing::trace; @@ -51,7 +52,7 @@ where } pub fn from_kind( - kind: azalea_registry::DataComponentKind, + kind: registry::DataComponentKind, buf: &mut Cursor<&[u8]>, ) -> Result<Box<dyn EncodableDataComponent>, BufReadError> { // if this is causing a compile-time error, look at DataComponents.java in the @@ -75,10 +76,6 @@ pub fn from_kind( DataComponentKind::CanBreak => Box::new(CanBreak::azalea_read(buf)?), DataComponentKind::AttributeModifiers => Box::new(AttributeModifiers::azalea_read(buf)?), DataComponentKind::CustomModelData => Box::new(CustomModelData::azalea_read(buf)?), - DataComponentKind::HideAdditionalTooltip => { - Box::new(HideAdditionalTooltip::azalea_read(buf)?) - } - DataComponentKind::HideTooltip => Box::new(HideTooltip::azalea_read(buf)?), DataComponentKind::RepairCost => Box::new(RepairCost::azalea_read(buf)?), DataComponentKind::CreativeSlotLock => Box::new(CreativeSlotLock::azalea_read(buf)?), DataComponentKind::EnchantmentGlintOverride => { @@ -138,6 +135,45 @@ pub fn from_kind( DataComponentKind::Glider => Box::new(Glider::azalea_read(buf)?), DataComponentKind::TooltipStyle => Box::new(TooltipStyle::azalea_read(buf)?), DataComponentKind::DeathProtection => Box::new(DeathProtection::azalea_read(buf)?), + DataComponentKind::Weapon => Box::new(Weapon::azalea_read(buf)?), + DataComponentKind::PotionDurationScale => Box::new(PotionDurationScale::azalea_read(buf)?), + DataComponentKind::VillagerVariant => Box::new(VillagerVariant::azalea_read(buf)?), + DataComponentKind::WolfVariant => Box::new(WolfVariant::azalea_read(buf)?), + DataComponentKind::WolfCollar => Box::new(WolfCollar::azalea_read(buf)?), + DataComponentKind::FoxVariant => Box::new(FoxVariant::azalea_read(buf)?), + DataComponentKind::SalmonSize => Box::new(SalmonSize::azalea_read(buf)?), + DataComponentKind::ParrotVariant => Box::new(ParrotVariant::azalea_read(buf)?), + DataComponentKind::TropicalFishPattern => Box::new(TropicalFishPattern::azalea_read(buf)?), + DataComponentKind::TropicalFishBaseColor => { + Box::new(TropicalFishBaseColor::azalea_read(buf)?) + } + DataComponentKind::TropicalFishPatternColor => { + Box::new(TropicalFishPatternColor::azalea_read(buf)?) + } + DataComponentKind::MooshroomVariant => Box::new(MooshroomVariant::azalea_read(buf)?), + DataComponentKind::RabbitVariant => Box::new(RabbitVariant::azalea_read(buf)?), + DataComponentKind::PigVariant => Box::new(PigVariant::azalea_read(buf)?), + DataComponentKind::FrogVariant => Box::new(FrogVariant::azalea_read(buf)?), + DataComponentKind::HorseVariant => Box::new(HorseVariant::azalea_read(buf)?), + DataComponentKind::PaintingVariant => Box::new(PaintingVariant::azalea_read(buf)?), + DataComponentKind::LlamaVariant => Box::new(LlamaVariant::azalea_read(buf)?), + DataComponentKind::AxolotlVariant => Box::new(AxolotlVariant::azalea_read(buf)?), + DataComponentKind::CatVariant => Box::new(CatVariant::azalea_read(buf)?), + DataComponentKind::CatCollar => Box::new(CatCollar::azalea_read(buf)?), + DataComponentKind::SheepColor => Box::new(SheepColor::azalea_read(buf)?), + DataComponentKind::ShulkerColor => Box::new(ShulkerColor::azalea_read(buf)?), + DataComponentKind::TooltipDisplay => Box::new(TooltipDisplay::azalea_read(buf)?), + DataComponentKind::BlocksAttacks => Box::new(BlocksAttacks::azalea_read(buf)?), + DataComponentKind::ProvidesTrimMaterial => { + Box::new(ProvidesTrimMaterial::azalea_read(buf)?) + } + DataComponentKind::ProvidesBannerPatterns => { + Box::new(ProvidesBannerPatterns::azalea_read(buf)?) + } + DataComponentKind::BreakSound => Box::new(BreakSound::azalea_read(buf)?), + DataComponentKind::WolfSoundVariant => Box::new(WolfSoundVariant::azalea_read(buf)?), + DataComponentKind::CowVariant => Box::new(CowVariant::azalea_read(buf)?), + DataComponentKind::ChickenVariant => Box::new(ChickenVariant::azalea_read(buf)?), }) } @@ -343,18 +379,6 @@ impl DataComponent for CustomModelData { } #[derive(Clone, PartialEq, AzBuf)] -pub struct HideAdditionalTooltip; -impl DataComponent for HideAdditionalTooltip { - const KIND: DataComponentKind = DataComponentKind::HideAdditionalTooltip; -} - -#[derive(Clone, PartialEq, AzBuf)] -pub struct HideTooltip; -impl DataComponent for HideTooltip { - const KIND: DataComponentKind = DataComponentKind::HideTooltip; -} - -#[derive(Clone, PartialEq, AzBuf)] pub struct RepairCost { #[var] pub cost: u32, @@ -600,7 +624,7 @@ impl DataComponent for BlockEntityData { #[derive(Clone, PartialEq, AzBuf)] pub struct Instrument { - pub instrument: azalea_registry::Instrument, + pub instrument: registry::Instrument, } impl DataComponent for Instrument { const KIND: DataComponentKind = DataComponentKind::Instrument; @@ -791,7 +815,7 @@ impl DataComponent for ContainerLoot { #[derive(Clone, PartialEq, AzBuf)] pub struct JukeboxPlayable { - pub song: azalea_registry::JukeboxSong, + pub song: registry::JukeboxSong, pub show_in_tooltip: bool, } impl DataComponent for JukeboxPlayable { @@ -931,3 +955,302 @@ pub struct DeathProtection { impl DataComponent for DeathProtection { const KIND: DataComponentKind = DataComponentKind::DeathProtection; } + +#[derive(Clone, PartialEq, AzBuf)] +pub struct Weapon { + #[var] + pub damage_per_attack: i32, + pub can_disable_blocking: bool, +} +impl DataComponent for Weapon { + const KIND: DataComponentKind = DataComponentKind::Weapon; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct PotionDurationScale { + pub value: f32, +} +impl DataComponent for PotionDurationScale { + const KIND: DataComponentKind = DataComponentKind::PotionDurationScale; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct VillagerVariant { + pub variant: registry::VillagerKind, +} +impl DataComponent for VillagerVariant { + const KIND: DataComponentKind = DataComponentKind::VillagerVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct WolfVariant { + pub variant: registry::WolfVariant, +} +impl DataComponent for WolfVariant { + const KIND: DataComponentKind = DataComponentKind::WolfVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct WolfCollar { + pub color: DyeColor, +} +impl DataComponent for WolfCollar { + const KIND: DataComponentKind = DataComponentKind::WolfCollar; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct FoxVariant { + pub variant: registry::FoxVariant, +} +impl DataComponent for FoxVariant { + const KIND: DataComponentKind = DataComponentKind::FoxVariant; +} + +#[derive(Clone, Copy, PartialEq, AzBuf)] +pub enum SalmonSize { + Small, + Medium, + Large, +} +impl DataComponent for SalmonSize { + const KIND: DataComponentKind = DataComponentKind::SalmonSize; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct ParrotVariant { + pub variant: registry::ParrotVariant, +} +impl DataComponent for ParrotVariant { + const KIND: DataComponentKind = DataComponentKind::ParrotVariant; +} + +#[derive(Clone, Copy, PartialEq, AzBuf)] +pub enum TropicalFishPattern { + Kob, + Sunstreak, + Snooper, + Dasher, + Brinely, + Spotty, + Flopper, + Stripey, + Glitter, + Blockfish, + Betty, + Clayfish, +} +impl DataComponent for TropicalFishPattern { + const KIND: DataComponentKind = DataComponentKind::TropicalFishPattern; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct TropicalFishBaseColor { + pub color: DyeColor, +} +impl DataComponent for TropicalFishBaseColor { + const KIND: DataComponentKind = DataComponentKind::TropicalFishBaseColor; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct TropicalFishPatternColor { + pub color: DyeColor, +} +impl DataComponent for TropicalFishPatternColor { + const KIND: DataComponentKind = DataComponentKind::TropicalFishPatternColor; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct MooshroomVariant { + pub variant: registry::MooshroomVariant, +} +impl DataComponent for MooshroomVariant { + const KIND: DataComponentKind = DataComponentKind::MooshroomVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct RabbitVariant { + pub variant: registry::RabbitVariant, +} +impl DataComponent for RabbitVariant { + const KIND: DataComponentKind = DataComponentKind::RabbitVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct PigVariant { + pub variant: registry::PigVariant, +} +impl DataComponent for PigVariant { + const KIND: DataComponentKind = DataComponentKind::PigVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct FrogVariant { + pub variant: registry::FrogVariant, +} +impl DataComponent for FrogVariant { + const KIND: DataComponentKind = DataComponentKind::FrogVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct HorseVariant { + pub variant: registry::HorseVariant, +} +impl DataComponent for HorseVariant { + const KIND: DataComponentKind = DataComponentKind::HorseVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct PaintingVariant { + pub variant: registry::PaintingVariant, +} +impl DataComponent for PaintingVariant { + const KIND: DataComponentKind = DataComponentKind::PaintingVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct LlamaVariant { + pub variant: registry::LlamaVariant, +} +impl DataComponent for LlamaVariant { + const KIND: DataComponentKind = DataComponentKind::LlamaVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct AxolotlVariant { + pub variant: registry::AxolotlVariant, +} +impl DataComponent for AxolotlVariant { + const KIND: DataComponentKind = DataComponentKind::AxolotlVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct CatVariant { + pub variant: registry::CatVariant, +} +impl DataComponent for CatVariant { + const KIND: DataComponentKind = DataComponentKind::CatVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct CatCollar { + pub color: DyeColor, +} +impl DataComponent for CatCollar { + const KIND: DataComponentKind = DataComponentKind::CatCollar; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct SheepColor { + pub color: DyeColor, +} +impl DataComponent for SheepColor { + const KIND: DataComponentKind = DataComponentKind::SheepColor; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct ShulkerColor { + pub color: DyeColor, +} +impl DataComponent for ShulkerColor { + const KIND: DataComponentKind = DataComponentKind::ShulkerColor; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct TooltipDisplay { + pub hide_tooltip: bool, + pub hidden_components: Vec<DataComponentKind>, +} +impl DataComponent for TooltipDisplay { + const KIND: DataComponentKind = DataComponentKind::TooltipDisplay; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct BlocksAttacks { + pub block_delay_seconds: f32, + pub disable_cooldown_scale: f32, + pub damage_reductions: Vec<DamageReduction>, + pub item_damage: ItemDamageFunction, + pub bypassed_by: Option<ResourceLocation>, + pub block_sound: Option<azalea_registry::Holder<SoundEvent, CustomSound>>, + pub disable_sound: Option<azalea_registry::Holder<SoundEvent, CustomSound>>, +} +impl DataComponent for BlocksAttacks { + const KIND: DataComponentKind = DataComponentKind::BlocksAttacks; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct DamageReduction { + pub horizontal_blocking_angle: f32, + pub kind: Option<HolderSet<DamageKind, ResourceLocation>>, +} +#[derive(Clone, PartialEq, AzBuf)] +pub struct ItemDamageFunction { + pub threshold: f32, + pub base: f32, + pub factor: f32, +} + +#[derive(Clone, PartialEq, AzBuf)] +pub enum ProvidesTrimMaterial { + Holder(Holder<TrimMaterial, DirectTrimMaterial>), + Registry(TrimMaterial), +} +impl DataComponent for ProvidesTrimMaterial { + const KIND: DataComponentKind = DataComponentKind::ProvidesTrimMaterial; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct DirectTrimMaterial { + pub assets: MaterialAssetGroup, + pub description: FormattedText, +} +#[derive(Clone, PartialEq, AzBuf)] +pub struct MaterialAssetGroup { + pub base: AssetInfo, + pub overrides: Vec<(ResourceLocation, AssetInfo)>, +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct AssetInfo { + pub suffix: String, +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct ProvidesBannerPatterns { + pub key: ResourceLocation, +} +impl DataComponent for ProvidesBannerPatterns { + const KIND: DataComponentKind = DataComponentKind::ProvidesBannerPatterns; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct BreakSound { + pub sound: azalea_registry::Holder<SoundEvent, CustomSound>, +} +impl DataComponent for BreakSound { + const KIND: DataComponentKind = DataComponentKind::BreakSound; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct WolfSoundVariant { + pub variant: azalea_registry::WolfSoundVariant, +} +impl DataComponent for WolfSoundVariant { + const KIND: DataComponentKind = DataComponentKind::WolfSoundVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct CowVariant { + pub variant: azalea_registry::CowVariant, +} +impl DataComponent for CowVariant { + const KIND: DataComponentKind = DataComponentKind::CowVariant; +} + +#[derive(Clone, PartialEq, AzBuf)] +pub struct ChickenVariant { + pub variant: azalea_registry::ChickenVariant, +} +impl DataComponent for ChickenVariant { + const KIND: DataComponentKind = DataComponentKind::ChickenVariant; +} diff --git a/azalea-language/src/en_us.json b/azalea-language/src/en_us.json index 2826affe..f79b3c7f 100755 --- a/azalea-language/src/en_us.json +++ b/azalea-language/src/en_us.json @@ -89,6 +89,8 @@ "advancements.adventure.two_birds_one_arrow.title": "Two Birds, One Arrow", "advancements.adventure.under_lock_and_key.description": "Unlock a Vault with a Trial Key", "advancements.adventure.under_lock_and_key.title": "Under Lock and Key", + "advancements.adventure.use_lodestone.description": "Use a Compass on a Lodestone", + "advancements.adventure.use_lodestone.title": "Country Lode, Take Me Home", "advancements.adventure.very_very_frightening.description": "Strike a Villager with lightning", "advancements.adventure.very_very_frightening.title": "Very Very Frightening", "advancements.adventure.voluntary_exile.description": "Kill a raid captain.\nMaybe consider staying away from villages for the time being...", @@ -354,6 +356,7 @@ "argument.message.too_long": "Chat message was too long (%s > maximum %s characters)", "argument.nbt.array.invalid": "Invalid array type '%s'", "argument.nbt.array.mixed": "Can't insert %s into %s", + "argument.nbt.expected.compound": "Expected compound tag", "argument.nbt.expected.key": "Expected key", "argument.nbt.expected.value": "Expected value", "argument.nbt.list.mixed": "Can't insert %s into list of %s", @@ -374,6 +377,7 @@ "argument.range.swapped": "Min cannot be bigger than max", "argument.resource_or_id.failed_to_parse": "Failed to parse structure: %s", "argument.resource_or_id.invalid": "Invalid id or tag", + "argument.resource_selector.not_found": "No matches for selector '%s' of type '%s'", "argument.resource_tag.invalid_type": "Tag '%s' has wrong type '%s' (expected '%s')", "argument.resource_tag.not_found": "Can't find tag '%s' of type '%s'", "argument.resource.invalid_type": "Element '%s' has wrong type '%s' (expected '%s')", @@ -1387,7 +1391,9 @@ "block.minecraft.bubble_coral_fan": "Bubble Coral Fan", "block.minecraft.bubble_coral_wall_fan": "Bubble Coral Wall Fan", "block.minecraft.budding_amethyst": "Budding Amethyst", + "block.minecraft.bush": "Bush", "block.minecraft.cactus": "Cactus", + "block.minecraft.cactus_flower": "Cactus Flower", "block.minecraft.cake": "Cake", "block.minecraft.calcite": "Calcite", "block.minecraft.calibrated_sculk_sensor": "Calibrated Sculk Sensor", @@ -1618,6 +1624,7 @@ "block.minecraft.fire_coral_block": "Fire Coral Block", "block.minecraft.fire_coral_fan": "Fire Coral Fan", "block.minecraft.fire_coral_wall_fan": "Fire Coral Wall Fan", + "block.minecraft.firefly_bush": "Firefly Bush", "block.minecraft.fletching_table": "Fletching Table", "block.minecraft.flower_pot": "Flower Pot", "block.minecraft.flowering_azalea": "Flowering Azalea", @@ -1720,6 +1727,7 @@ "block.minecraft.large_fern": "Large Fern", "block.minecraft.lava": "Lava", "block.minecraft.lava_cauldron": "Lava Cauldron", + "block.minecraft.leaf_litter": "Leaf Litter", "block.minecraft.lectern": "Lectern", "block.minecraft.lever": "Lever", "block.minecraft.light": "Light", @@ -2097,6 +2105,7 @@ "block.minecraft.sea_pickle": "Sea Pickle", "block.minecraft.seagrass": "Seagrass", "block.minecraft.set_spawn": "Respawn point set", + "block.minecraft.short_dry_grass": "Short Dry Grass", "block.minecraft.short_grass": "Short Grass", "block.minecraft.shroomlight": "Shroomlight", "block.minecraft.shulker_box": "Shulker Box", @@ -2193,12 +2202,16 @@ "block.minecraft.suspicious_gravel": "Suspicious Gravel", "block.minecraft.suspicious_sand": "Suspicious Sand", "block.minecraft.sweet_berry_bush": "Sweet Berry Bush", + "block.minecraft.tall_dry_grass": "Tall Dry Grass", "block.minecraft.tall_grass": "Tall Grass", "block.minecraft.tall_seagrass": "Tall Seagrass", "block.minecraft.target": "Target", "block.minecraft.terracotta": "Terracotta", + "block.minecraft.test_block": "Test Block", + "block.minecraft.test_instance_block": "Test Instance Block", "block.minecraft.tinted_glass": "Tinted Glass", "block.minecraft.tnt": "TNT", + "block.minecraft.tnt.disabled": "TNT explosions are disabled", "block.minecraft.torch": "Torch", "block.minecraft.torchflower": "Torchflower", "block.minecraft.torchflower_crop": "Torchflower Crop", @@ -2310,6 +2323,7 @@ "block.minecraft.white_terracotta": "White Terracotta", "block.minecraft.white_tulip": "White Tulip", "block.minecraft.white_wool": "White Wool", + "block.minecraft.wildflowers": "Wildflowers", "block.minecraft.wither_rose": "Wither Rose", "block.minecraft.wither_skeleton_skull": "Wither Skeleton Skull", "block.minecraft.wither_skeleton_wall_skull": "Wither Skeleton Wall Skull", @@ -2697,11 +2711,11 @@ "commands.random.roll": "%s rolled %s (from %s to %s)", "commands.random.sample.success": "Randomized value: %s", "commands.recipe.give.failed": "No new recipes were learned", - "commands.recipe.give.success.multiple": "Unlocked %s recipes for %s players", - "commands.recipe.give.success.single": "Unlocked %s recipes for %s", + "commands.recipe.give.success.multiple": "Unlocked %s recipe(s) for %s players", + "commands.recipe.give.success.single": "Unlocked %s recipe(s) for %s", "commands.recipe.take.failed": "No recipes could be forgotten", - "commands.recipe.take.success.multiple": "Took %s recipes from %s players", - "commands.recipe.take.success.single": "Took %s recipes from %s", + "commands.recipe.take.success.multiple": "Took %s recipe(s) from %s players", + "commands.recipe.take.success.single": "Took %s recipe(s) from %s", "commands.reload.failure": "Reload failed; keeping old data", "commands.reload.success": "Reloading!", "commands.ride.already_riding": "%s is already riding %s", @@ -2848,6 +2862,32 @@ "commands.teleport.success.entity.single": "Teleported %s to %s", "commands.teleport.success.location.multiple": "Teleported %s entities to %s, %s, %s", "commands.teleport.success.location.single": "Teleported %s to %s, %s, %s", + "commands.test.batch.starting": "Starting environment %s batch %s", + "commands.test.clear.error.no_tests": "Could not find any tests to clear", + "commands.test.clear.success": "Cleared %s structure(s)", + "commands.test.coordinates": "%s, %s, %s", + "commands.test.coordinates.copy": "Click to copy to clipboard", + "commands.test.create.success": "Created test setup for test %s", + "commands.test.error.no_test_containing_pos": "Can't find a test instance that contains %s, %s, %s", + "commands.test.error.no_test_instances": "Found no test instances", + "commands.test.error.non_existant_test": "Test %s could not be found", + "commands.test.error.structure_not_found": "Test structure %s could not be found", + "commands.test.error.test_instance_not_found": "Test instance block entity could not be found", + "commands.test.error.test_instance_not_found.position": "Test instance block entity could not be found for test at %s, %s, %s", + "commands.test.error.too_large": "The structure size must be less than %s blocks along each axis", + "commands.test.locate.done": "Finished locating, found %s structure(s)", + "commands.test.locate.found": "Found structure at: %s (distance: %s)", + "commands.test.locate.started": "Started locating test structures, this might take a while...", + "commands.test.no_tests": "No tests to run", + "commands.test.relative_position": "Position relative to %s: %s", + "commands.test.reset.error.no_tests": "Could not find any tests to reset", + "commands.test.reset.success": "Reset %s structure(s)", + "commands.test.run.no_tests": "No tests found", + "commands.test.run.running": "Running %s test(s)...", + "commands.test.summary": "Game Test complete! %s test(s) were run", + "commands.test.summary.all_required_passed": "All required tests passed :)", + "commands.test.summary.failed": "%s required test(s) failed :(", + "commands.test.summary.optional_failed": "%s optional test(s) failed", "commands.tick.query.percentiles": "Percentiles: P50: %sms P95: %sms P99: %sms, sample: %s", "commands.tick.query.rate.running": "Target tick rate: %s per second.\nAverage time per tick: %sms (Target: %sms)", "commands.tick.query.rate.sprinting": "Target tick rate: %s per second (ignored, reference only).\nAverage time per tick: %sms", @@ -2980,7 +3020,7 @@ "controls.resetAll": "Reset Keys", "controls.title": "Controls", "createWorld.customize.buffet.biome": "Please select a biome", - "createWorld.customize.buffet.title": "Buffet world customization", + "createWorld.customize.buffet.title": "Single Biome Customization", "createWorld.customize.flat.height": "Height", "createWorld.customize.flat.layer": "%s", "createWorld.customize.flat.layer.bottom": "Bottom - %s", @@ -2989,7 +3029,7 @@ "createWorld.customize.flat.tile": "Layer Material", "createWorld.customize.flat.title": "Superflat Customization", "createWorld.customize.presets": "Presets", - "createWorld.customize.presets.list": "Alternatively, here's some we made earlier!", + "createWorld.customize.presets.list": "Alternatively, here are some we made earlier!", "createWorld.customize.presets.select": "Use Preset", "createWorld.customize.presets.share": "Want to share your preset with someone? Use the box below!", "createWorld.customize.presets.title": "Select a Preset", @@ -3393,6 +3433,7 @@ "entity.minecraft.killer_bunny": "The Killer Bunny", "entity.minecraft.leash_knot": "Leash Knot", "entity.minecraft.lightning_bolt": "Lightning Bolt", + "entity.minecraft.lingering_potion": "Lingering Potion", "entity.minecraft.llama": "Llama", "entity.minecraft.llama_spit": "Llama Spit", "entity.minecraft.magma_cube": "Magma Cube", @@ -3437,6 +3478,7 @@ "entity.minecraft.spawner_minecart": "Minecart with Monster Spawner", "entity.minecraft.spectral_arrow": "Spectral Arrow", "entity.minecraft.spider": "Spider", + "entity.minecraft.splash_potion": "Splash Potion", "entity.minecraft.spruce_boat": "Spruce Boat", "entity.minecraft.spruce_chest_boat": "Spruce Boat with Chest", "entity.minecraft.squid": "Squid", @@ -3551,9 +3593,11 @@ "gameMode.adventure": "Adventure Mode", "gameMode.changed": "Your game mode has been updated to %s", "gameMode.creative": "Creative Mode", - "gameMode.hardcore": "Hardcore Mode!", + "gameMode.hardcore": "Hardcore Mode", "gameMode.spectator": "Spectator Mode", "gameMode.survival": "Survival Mode", + "gamerule.allowFireTicksAwayFromPlayer": "Tick fire away from players", + "gamerule.allowFireTicksAwayFromPlayer.description": "Controls whether or not fire and lava should be able to tick further than 8 chunks away from any player", "gamerule.announceAdvancements": "Announce advancements", "gamerule.blockExplosionDropDecay": "In block interaction explosions, some blocks won't drop their loot", "gamerule.blockExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by block interactions are lost in the explosion.", @@ -3637,6 +3681,7 @@ "gamerule.spawnRadius": "Respawn location radius", "gamerule.spawnRadius.description": "Controls the size of the area around the spawn point that players can spawn in.", "gamerule.spectatorsGenerateChunks": "Allow spectators to generate terrain", + "gamerule.tntExplodes": "Allow TNT to be activated and to explode", "gamerule.tntExplosionDropDecay": "In TNT explosions, some blocks won't drop their loot", "gamerule.tntExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by TNT are lost in the explosion.", "gamerule.universalAnger": "Universal anger", @@ -3911,6 +3956,7 @@ "item.minecraft.blaze_spawn_egg": "Blaze Spawn Egg", "item.minecraft.blue_bundle": "Blue Bundle", "item.minecraft.blue_dye": "Blue Dye", + "item.minecraft.blue_egg": "Blue Egg", "item.minecraft.bogged_spawn_egg": "Bogged Spawn Egg", "item.minecraft.bolt_armor_trim_smithing_template": "Smithing Template", "item.minecraft.bolt_armor_trim_smithing_template.new": "Bolt Armor Trim", @@ -3929,6 +3975,7 @@ "item.minecraft.brick": "Brick", "item.minecraft.brown_bundle": "Brown Bundle", "item.minecraft.brown_dye": "Brown Dye", + "item.minecraft.brown_egg": "Brown Egg", "item.minecraft.brush": "Brush", "item.minecraft.bucket": "Bucket", "item.minecraft.bundle": "Bundle", @@ -3983,6 +4030,8 @@ "item.minecraft.creeper_spawn_egg": "Creeper Spawn Egg", "item.minecraft.crossbow": "Crossbow", "item.minecraft.crossbow.projectile": "Projectile:", + "item.minecraft.crossbow.projectile.multiple": "Projectile: %s x %s", + "item.minecraft.crossbow.projectile.single": "Projectile: %s", "item.minecraft.cyan_bundle": "Cyan Bundle", "item.minecraft.cyan_dye": "Cyan Dye", "item.minecraft.danger_pottery_shard": "Danger Pottery Shard", @@ -4039,6 +4088,8 @@ "item.minecraft.fire_charge": "Fire Charge", "item.minecraft.firework_rocket": "Firework Rocket", "item.minecraft.firework_rocket.flight": "Flight Duration:", + "item.minecraft.firework_rocket.multiple_stars": "%s x %s", + "item.minecraft.firework_rocket.single_star": "%s", "item.minecraft.firework_star": "Firework Star", "item.minecraft.firework_star.black": "Black", "item.minecraft.firework_star.blue": "Blue", @@ -4575,13 +4626,14 @@ "item.modifiers.any": "When equipped:", "item.modifiers.armor": "When worn:", "item.modifiers.body": "When equipped:", - "item.modifiers.chest": "When on Body:", + "item.modifiers.chest": "When on Chest:", "item.modifiers.feet": "When on Feet:", "item.modifiers.hand": "When held:", "item.modifiers.head": "When on Head:", "item.modifiers.legs": "When on Legs:", "item.modifiers.mainhand": "When in Main Hand:", "item.modifiers.offhand": "When in Off Hand:", + "item.modifiers.saddle": "When saddled:", "item.nbt_tags": "NBT: %s tag(s)", "item.op_block_warning.line1": "Warning:", "item.op_block_warning.line2": "Use of this item might lead to command execution", @@ -4817,15 +4869,15 @@ "mco.backup.generate.world": "Generate world", "mco.backup.info.title": "Changes From Last Backup", "mco.backup.narration": "Backup from %s", - "mco.backup.nobackups": "This realm doesn't have any backups currently.", - "mco.backup.restoring": "Restoring your realm", + "mco.backup.nobackups": "This Realm doesn't have any backups currently.", + "mco.backup.restoring": "Restoring your Realm", "mco.backup.unknown": "UNKNOWN", "mco.brokenworld.download": "Download", "mco.brokenworld.downloaded": "Downloaded", "mco.brokenworld.message.line1": "Please reset or select another world.", "mco.brokenworld.message.line2": "You can also choose to download the world to singleplayer.", "mco.brokenworld.minigame.title": "This minigame is no longer supported", - "mco.brokenworld.nonowner.error": "Please wait for the realm owner to reset the world", + "mco.brokenworld.nonowner.error": "Please wait for the Realm owner to reset the world", "mco.brokenworld.nonowner.title": "World is out of date", "mco.brokenworld.play": "Play", "mco.brokenworld.reset": "Reset", @@ -4864,12 +4916,12 @@ "mco.configure.world.buttons.settings": "Settings", "mco.configure.world.buttons.subscription": "Subscription", "mco.configure.world.buttons.switchminigame": "Switch Minigame", - "mco.configure.world.close.question.line1": "Your realm will become unavailable.", + "mco.configure.world.close.question.line1": "Your Realm will become unavailable.", "mco.configure.world.close.question.line2": "Are you sure you want to continue?", - "mco.configure.world.closing": "Closing the realm...", + "mco.configure.world.closing": "Closing the Realm...", "mco.configure.world.commandBlocks": "Command Blocks", "mco.configure.world.delete.button": "Delete Realm", - "mco.configure.world.delete.question.line1": "Your realm will be permanently deleted", + "mco.configure.world.delete.question.line1": "Your Realm will be permanently deleted", "mco.configure.world.delete.question.line2": "Are you sure you want to continue?", "mco.configure.world.description": "Realm Description", "mco.configure.world.edit.slot.name": "World Name", @@ -4884,20 +4936,20 @@ "mco.configure.world.invites.normal.tooltip": "Normal User", "mco.configure.world.invites.ops.tooltip": "Operator", "mco.configure.world.invites.remove.tooltip": "Remove", - "mco.configure.world.leave.question.line1": "If you leave this realm you won't see it unless you are invited again", + "mco.configure.world.leave.question.line1": "If you leave this Realm you won't see it unless you are invited again", "mco.configure.world.leave.question.line2": "Are you sure you want to continue?", "mco.configure.world.location": "Location", "mco.configure.world.minigame": "Current: %s", "mco.configure.world.name": "Realm Name", - "mco.configure.world.opening": "Opening the realm...", + "mco.configure.world.opening": "Opening the Realm...", "mco.configure.world.players.error": "A player with the provided name does not exist", "mco.configure.world.players.inviting": "Inviting player...", "mco.configure.world.players.title": "Players", "mco.configure.world.pvp": "PVP", "mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost", "mco.configure.world.reset.question.line2": "Are you sure you want to continue?", - "mco.configure.world.resourcepack.question": "You need a custom resource pack to play on this realm\n\nDo you want to download it and play?", - "mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this realm", + "mco.configure.world.resourcepack.question": "You need a custom resource pack to play on this Realm\n\nDo you want to download it and play?", + "mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this Realm", "mco.configure.world.resourcepack.question.line2": "Do you want to download it and play?", "mco.configure.world.restore.download.question.line1": "The world will be downloaded and added to your single player worlds.", "mco.configure.world.restore.download.question.line2": "Do you want to continue?", @@ -4906,7 +4958,7 @@ "mco.configure.world.settings.title": "Settings", "mco.configure.world.slot": "World %s", "mco.configure.world.slot.empty": "Empty", - "mco.configure.world.slot.switch.question.line1": "Your realm will be switched to another world", + "mco.configure.world.slot.switch.question.line1": "Your Realm will be switched to another world", "mco.configure.world.slot.switch.question.line2": "Are you sure you want to continue?", "mco.configure.world.slot.tooltip": "Switch to world", "mco.configure.world.slot.tooltip.active": "Join", @@ -4942,20 +4994,20 @@ "mco.configure.world.uninvite.question": "Are you sure that you want to uninvite", "mco.configure.worlds.title": "Worlds", "mco.connect.authorizing": "Logging in...", - "mco.connect.connecting": "Connecting to the realm...", - "mco.connect.failed": "Failed to connect to the realm", + "mco.connect.connecting": "Connecting to the Realm...", + "mco.connect.failed": "Failed to connect to the Realm", "mco.connect.success": "Done", "mco.create.world": "Create", "mco.create.world.error": "You must enter a name!", "mco.create.world.failed": "Failed to create world!", "mco.create.world.reset.title": "Creating world...", "mco.create.world.skip": "Skip", - "mco.create.world.subtitle": "Optionally, select what world to put on your new realm", - "mco.create.world.wait": "Creating the realm...", + "mco.create.world.subtitle": "Optionally, select what world to put on your new Realm", + "mco.create.world.wait": "Creating the Realm...", "mco.download.cancelled": "Download cancelled", "mco.download.confirmation.line1": "The world you are going to download is larger than %s", - "mco.download.confirmation.line2": "You won't be able to upload this world to your realm again", - "mco.download.confirmation.oversized": "The world you are going to download is larger than %s\n\nYou won't be able to upload this world to your realm again", + "mco.download.confirmation.line2": "You won't be able to upload this world to your Realm again", + "mco.download.confirmation.oversized": "The world you are going to download is larger than %s\n\nYou won't be able to upload this world to your Realm again", "mco.download.done": "Download done", "mco.download.downloading": "Downloading", "mco.download.extracting": "Extracting", @@ -5001,7 +5053,7 @@ "mco.minigame.world.info.line2": "You can later return to your original world without losing anything.", "mco.minigame.world.noSelection": "Please make a selection", "mco.minigame.world.restore": "Ending Minigame...", - "mco.minigame.world.restore.question.line1": "The minigame will end and your realm will be restored.", + "mco.minigame.world.restore.question.line1": "The minigame will end and your Realm will be restored.", "mco.minigame.world.restore.question.line2": "Are you sure you want to continue?", "mco.minigame.world.selected": "Selected Minigame:", "mco.minigame.world.slot.screen.title": "Switching World...", @@ -5028,16 +5080,16 @@ "mco.reset.world.template": "World Templates", "mco.reset.world.title": "Reset World", "mco.reset.world.upload": "Upload world", - "mco.reset.world.warning": "This will replace the current world of your realm", + "mco.reset.world.warning": "This will replace the current world of your Realm", "mco.selectServer.buy": "Buy a Realm!", "mco.selectServer.close": "Close", - "mco.selectServer.closed": "Closed realm", - "mco.selectServer.closeserver": "Close realm", + "mco.selectServer.closed": "Closed Realm", + "mco.selectServer.closeserver": "Close Realm", "mco.selectServer.configure": "Configure", - "mco.selectServer.configureRealm": "Configure realm", + "mco.selectServer.configureRealm": "Configure Realm", "mco.selectServer.create": "Create Realm", - "mco.selectServer.create.subtitle": "Select what world to put on your new realm", - "mco.selectServer.expired": "Expired realm", + "mco.selectServer.create.subtitle": "Select what world to put on your new Realm", + "mco.selectServer.expired": "Expired Realm", "mco.selectServer.expiredList": "Your subscription has expired", "mco.selectServer.expiredRenew": "Renew", "mco.selectServer.expiredSubscribe": "Subscribe", @@ -5053,13 +5105,13 @@ "mco.selectServer.minigameNotSupportedInVersion": "Can't play this minigame in %s", "mco.selectServer.noRealms": "You don't seem to have a Realm. Add a Realm to play together with your friends.", "mco.selectServer.note": "Note:", - "mco.selectServer.open": "Open realm", - "mco.selectServer.openserver": "Open realm", + "mco.selectServer.open": "Open Realm", + "mco.selectServer.openserver": "Open Realm", "mco.selectServer.play": "Play", "mco.selectServer.popup": "Realms is a safe, simple way to enjoy an online Minecraft world with up to ten friends at a time. It supports loads of minigames and plenty of custom worlds! Only the owner of the realm needs to pay.", "mco.selectServer.purchase": "Add Realm", "mco.selectServer.trial": "Get a Trial!", - "mco.selectServer.uninitialized": "Click to start your new realm!", + "mco.selectServer.uninitialized": "Click to start your new Realm!", "mco.snapshot.createSnapshotPopup.text": "You are about to create a free Snapshot Realm that will be paired with your paid Realms subscription. This new Snapshot Realm will be accessible for as long as the paid subscription is active. Your paid Realm will not be affected.", "mco.snapshot.createSnapshotPopup.title": "Create Snapshot Realm?", "mco.snapshot.creating": "Creating Snapshot Realm...", @@ -5098,11 +5150,11 @@ "mco.time.minutesAgo": "%1$s minute(s) ago", "mco.time.now": "right now", "mco.time.secondsAgo": "%1$s second(s) ago", - "mco.trial.message.line1": "Want to get your own realm?", + "mco.trial.message.line1": "Want to get your own Realm?", "mco.trial.message.line2": "Click here for more info!", "mco.upload.button.name": "Upload", "mco.upload.cancelled": "Upload cancelled", - "mco.upload.close.failure": "Could not close your realm, please try again later", + "mco.upload.close.failure": "Could not close your Realm, please try again later", "mco.upload.done": "Upload done", "mco.upload.entry.cheats": "%1$s, %2$s", "mco.upload.entry.commands": "%1$s, %2$s", @@ -5162,6 +5214,7 @@ "mount.onboard": "Press %1$s to Dismount", "multiplayer.applyingPack": "Applying resource pack", "multiplayer.disconnect.authservers_down": "Authentication servers are down. Please try again later, sorry!", + "multiplayer.disconnect.bad_chat_index": "Detected missed or reordered chat message from server", "multiplayer.disconnect.banned": "You are banned from this server", "multiplayer.disconnect.banned_ip.expiration": "\nYour ban will be removed on %s", "multiplayer.disconnect.banned_ip.reason": "Your IP address is banned from this server.\nReason: %s", @@ -5697,7 +5750,7 @@ "realms.missing.snapshot.error.text": "Realms is currently not supported in snapshots", "recipe.notFound": "Unknown recipe: %s", "recipe.toast.description": "Check your recipe book", - "recipe.toast.title": "New Recipes Unlocked!", + "recipe.toast.title": "New Recipe(s) Unlocked!", "record.nowPlaying": "Now Playing: %s", "recover_world.bug_tracker": "Report a Bug", "recover_world.button": "Attempt to Recover", @@ -5868,6 +5921,27 @@ "sleep.skipping_night": "Sleeping through this night", "slot.only_single_allowed": "Only single slots allowed, got '%s'", "slot.unknown": "Unknown slot '%s'", + "snbt.parser.empty_key": "Key cannot be empty", + "snbt.parser.expected_binary_numeral": "Expected a binary number", + "snbt.parser.expected_decimal_numeral": "Expected a decimal number", + "snbt.parser.expected_float_type": "Expected a floating point number", + "snbt.parser.expected_hex_escape": "Expected a character literal of length %s", + "snbt.parser.expected_hex_numeral": "Expected a hexadecimal number", + "snbt.parser.expected_integer_type": "Expected an integer number", + "snbt.parser.expected_non_negative_number": "Expected a non-negative number", + "snbt.parser.expected_number_or_boolean": "Expected a number or a boolean", + "snbt.parser.expected_string_uuid": "Expected a string representing a valid UUID", + "snbt.parser.expected_unquoted_string": "Expected a valid unquoted string", + "snbt.parser.infinity_not_allowed": "Non-finite numbers are not allowed", + "snbt.parser.invalid_array_element_type": "Invalid array element type", + "snbt.parser.invalid_character_name": "Invalid Unicode character name", + "snbt.parser.invalid_codepoint": "Invalid Unicode character value: %s", + "snbt.parser.invalid_string_contents": "Invalid string contents", + "snbt.parser.invalid_unquoted_start": "Unquoted strings can't start with digits 0-9, + or -", + "snbt.parser.leading_zero_not_allowed": "Decimal numbers can't start with 0", + "snbt.parser.no_such_operation": "No such operation: %s", + "snbt.parser.number_parse_failure": "Failed to parse number: %s", + "snbt.parser.undescore_not_allowed": "Underscore characters are not allowed at the start or end of a number", "soundCategory.ambient": "Ambient/Environment", "soundCategory.block": "Blocks", "soundCategory.hostile": "Hostile Creatures", @@ -5992,10 +6066,10 @@ "structure_block.load_not_found": "Structure '%s' is not available", "structure_block.load_prepare": "Structure '%s' position prepared", "structure_block.load_success": "Structure loaded from '%s'", - "structure_block.mode_info.corner": "Corner Mode - Placement and Size Marker", - "structure_block.mode_info.data": "Data Mode - Game Logic Marker", - "structure_block.mode_info.load": "Load Mode - Load from File", - "structure_block.mode_info.save": "Save Mode - Write to File", + "structure_block.mode_info.corner": "Corner Mode - Placement and size marker", + "structure_block.mode_info.data": "Data Mode - Game logic marker", + "structure_block.mode_info.load": "Load Mode - Load from file", + "structure_block.mode_info.save": "Save Mode - Write to file", "structure_block.mode.corner": "Corner", "structure_block.mode.data": "Data", "structure_block.mode.load": "Load", @@ -6014,6 +6088,7 @@ "structure_block.size.x": "structure size x", "structure_block.size.y": "structure size y", "structure_block.size.z": "structure size z", + "structure_block.strict": "Strict Placement:", "structure_block.structure_name": "Structure Name", "subtitles.ambient.cave": "Eerie noise", "subtitles.ambient.sound": "Eerie noise", @@ -6071,6 +6146,7 @@ "subtitles.block.creaking_heart.hurt": "Creaking Heart grumbles", "subtitles.block.creaking_heart.idle": "Eerie noise", "subtitles.block.creaking_heart.spawn": "Creaking Heart awakens", + "subtitles.block.deadbush.idle": "Dry sounds", "subtitles.block.decorated_pot.insert": "Decorated Pot fills", "subtitles.block.decorated_pot.insert_fail": "Decorated Pot wobbles", "subtitles.block.decorated_pot.shatter": "Decorated Pot shatters", @@ -6086,6 +6162,7 @@ "subtitles.block.fence_gate.toggle": "Fence Gate creaks", "subtitles.block.fire.ambient": "Fire crackles", "subtitles.block.fire.extinguish": "Fire extinguished", + "subtitles.block.firefly_bush.idle": "Fireflies buzz", "subtitles.block.frogspawn.hatch": "Tadpole hatches", "subtitles.block.furnace.fire_crackle": "Furnace crackles", "subtitles.block.generic.break": "Block broken", @@ -6120,14 +6197,16 @@ "subtitles.block.respawn_anchor.charge": "Respawn Anchor is charged", "subtitles.block.respawn_anchor.deplete": "Respawn Anchor depletes", "subtitles.block.respawn_anchor.set_spawn": "Respawn Anchor sets spawn", + "subtitles.block.sand.idle": "Sandy sounds", + "subtitles.block.sand.wind": "Windy sounds", "subtitles.block.sculk_catalyst.bloom": "Sculk Catalyst blooms", "subtitles.block.sculk_sensor.clicking": "Sculk Sensor clicks", "subtitles.block.sculk_sensor.clicking_stop": "Sculk Sensor stops clicking", "subtitles.block.sculk_shrieker.shriek": "Sculk Shrieker shrieks", "subtitles.block.sculk.charge": "Sculk bubbles", "subtitles.block.sculk.spread": "Sculk spreads", - "subtitles.block.shulker_box.close": "Shulker closes", - "subtitles.block.shulker_box.open": "Shulker opens", + "subtitles.block.shulker_box.close": "Shulker box closes", + "subtitles.block.shulker_box.open": "Shulker box opens", "subtitles.block.sign.waxed_interact_fail": "Sign wobbles", "subtitles.block.smithing_table.use": "Smithing Table used", "subtitles.block.smoker.smoke": "Smoker smokes", @@ -6754,10 +6833,13 @@ "subtitles.entity.wither.shoot": "Wither attacks", "subtitles.entity.wither.spawn": "Wither released", "subtitles.entity.wolf.ambient": "Wolf pants", + "subtitles.entity.wolf.bark": "Wolf barks", "subtitles.entity.wolf.death": "Wolf dies", "subtitles.entity.wolf.growl": "Wolf growls", "subtitles.entity.wolf.hurt": "Wolf hurts", + "subtitles.entity.wolf.pant": "Wolf pants", "subtitles.entity.wolf.shake": "Wolf shakes", + "subtitles.entity.wolf.whine": "Wolf whines", "subtitles.entity.zoglin.ambient": "Zoglin growls", "subtitles.entity.zoglin.angry": "Zoglin growls angrily", "subtitles.entity.zoglin.attack": "Zoglin attacks", @@ -6933,6 +7015,85 @@ "telemetry.property.user_id.title": "User ID", "telemetry.property.world_load_time_ms.title": "World Load Time (Milliseconds)", "telemetry.property.world_session_id.title": "World Session ID", + "test_block.error.missing": "Test structure missing %s block", + "test_block.error.too_many": "Too many %s blocks", + "test_block.invalid_timeout": "Invalid timeout (%s) - must be a positive number of ticks", + "test_block.message": "Message:", + "test_block.mode_info.accept": "Accept Mode - Accept success for (part of) a test", + "test_block.mode_info.fail": "Fail Mode - Fail the test", + "test_block.mode_info.log": "Log Mode - Log a message", + "test_block.mode_info.start": "Start Mode - The starting point for a test", + "test_block.mode.accept": "Accept", + "test_block.mode.fail": "Fail", + "test_block.mode.log": "Log", + "test_block.mode.start": "Start", + "test_instance_block.entities": "Entities:", + "test_instance_block.error.no_test": "Unable to run test instance at %s, %s, %s since it has an undefined test", + "test_instance_block.error.no_test_structure": "Unable to run test instance at %s, %s, %s since it has no test structure", + "test_instance_block.error.unable_to_save": "Unable to save test structure template for test instance at %s, %s, %s", + "test_instance_block.invalid": "[invalid]", + "test_instance_block.reset_success": "Reset succeeded for test: %s", + "test_instance_block.rotation": "Rotation:", + "test_instance_block.size": "Test Structure Size", + "test_instance_block.starting": "Starting test %s", + "test_instance_block.test_id": "Test Instance ID", + "test_instance.action.reset": "Reset and Load", + "test_instance.action.run": "Load and Run", + "test_instance.action.save": "Save Structure", + "test_instance.description.batch": "Batch: %s", + "test_instance.description.failed": "Failed: %s", + "test_instance.description.function": "Function: %s", + "test_instance.description.invalid_id": "Invalid test ID", + "test_instance.description.no_test": "No such test", + "test_instance.description.structure": "Structure: %s", + "test_instance.description.type": "Type: %s", + "test_instance.type.block_based": "Block-Based Test", + "test_instance.type.function": "Built-in Function Test", + "test.error.block_property_mismatch": "Expected property %s to be %s, was %s", + "test.error.block_property_missing": "Block property missing, expected property %s to be %s", + "test.error.entity_property": "Entity %s failed test: %s", + "test.error.entity_property_details": "Entity %s failed test: %s, expected: %s, was: %s", + "test.error.expected_block": "Expected block %s, got %s", + "test.error.expected_block_tag": "Expected block in #%s, got %s", + "test.error.expected_container_contents": "Container should contain: %s", + "test.error.expected_container_contents_single": "Container should contain a single: %s", + "test.error.expected_empty_container": "Container should be empty", + "test.error.expected_entity": "Expected %s", + "test.error.expected_entity_around": "Expected %s to exist around %s, %s, %s", + "test.error.expected_entity_count": "Expected %s entities of type %s, found %s", + "test.error.expected_entity_data": "Expected entity data to be: %s, was: %s", + "test.error.expected_entity_data_predicate": "Entity data mismatch for %s", + "test.error.expected_entity_effect": "Expected %s to have effect %s %s", + "test.error.expected_entity_having": "Entity inventory should contain %s", + "test.error.expected_entity_holding": "Entity should be holding %s", + "test.error.expected_entity_in_test": "Expected %s to exist in test", + "test.error.expected_entity_not_touching": "Did not expect %s touching %s, %s, %s (relative: %s, %s, %s)", + "test.error.expected_entity_touching": "Expected %s touching %s, %s, %s (relative: %s, %s, %s)", + "test.error.expected_item": "Expected item of type %s", + "test.error.expected_items_count": "Expected %s items of type %s, found %s", + "test.error.fail": "Fail conditions met", + "test.error.invalid_block_type": "Unexpected block type found: %s", + "test.error.missing_block_entity": "Missing block entity", + "test.error.position": "%s at %s, %s, %s (relative: %s, %s, %s) on tick %s", + "test.error.sequence.condition_already_triggered": "Condition already triggered at %s", + "test.error.sequence.condition_not_triggered": "Condition not triggered", + "test.error.sequence.invalid_tick": "Succeeded in invalid tick: expected %s", + "test.error.sequence.not_completed": "Test timed out before sequence completed", + "test.error.set_biome": "Failed to set biome for test", + "test.error.spawn_failure": "Failed to create entity %s", + "test.error.state_not_equal": "Incorrect state. Expected %s, was %s", + "test.error.structure.failure": "Failed to place test structure for %s", + "test.error.tick": "%s on tick %s", + "test.error.ticking_without_structure": "Ticking test before placing structure", + "test.error.timeout.no_result": "Didn't succeed or fail within %s ticks", + "test.error.timeout.no_sequences_finished": "No sequences finished within %s ticks", + "test.error.too_many_entities": "Expected only one %s to exist around %s, %s, %s but found %s", + "test.error.unexpected_block": "Did not expect block to be %s", + "test.error.unexpected_entity": "Did not expect %s to exist", + "test.error.unexpected_item": "Did not expect item of type %s", + "test.error.unknown": "Unknown internal error: %s", + "test.error.value_not_equal": "Expected %s to be %s, was %s", + "test.error.wrong_block_entity": "Wrong block entity type: %s", "title.32bit.deprecation": "32-bit system detected: this may prevent you from playing in the future as a 64-bit system will be required!", "title.32bit.deprecation.realms": "Minecraft will soon require a 64-bit system, which will prevent you from playing or using Realms on this device. You will need to manually cancel any Realms subscription.", "title.32bit.deprecation.realms.check": "Do not show this screen again", diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs index 753be0cb..048ee067 100644 --- a/azalea-physics/src/collision/blocks.rs +++ b/azalea-physics/src/collision/blocks.rs @@ -4918,15 +4918,15 @@ impl BlockWithShape for BlockState { } fn is_collision_shape_empty(&self) -> bool { - matches!(self.id, 0|29..=42|45..=84|86..=117|1987..=2034|2047..=2053|2106..=2133|2398..=2915|3033..=4328|4333..=4340|4357..=4580|4613..=4676|4749..=4768|4849..=4904|4913..=5376|5441..=5696|5793..=5818|5883..=5896|5899..=5902|5907..=5941|5968..=5983|6027..=6031|6033..=6034|7046..=7229|7358..=7359|7362..=7363|7366..=7367|7370..=7371|7374..=7375|7378..=7379|7382..=7383|7386..=7387|8159..=8162|8180|8295..=8438|8699|8702|9023|9026|9370..=9553|9578..=9625|9942..=9973|10119..=10142|11246..=11277|11626..=11957|12195..=12196|12199..=12200|12203..=12204|12207..=12208|12211..=12212|12215..=12216|12219..=12220|12223..=12224|12227..=12228|12231..=12232|12235..=12236|12239..=12240|12243..=12244|12247..=12248|12251..=12252|12255..=12256|12259..=12260|12263..=12264|12267..=12268|12271..=12272|12275..=12276|12279..=12280|12283..=12284|12287..=12288|12291..=12292|12295..=12296|12299..=12300|12303..=12304|12307..=12308|12311..=12312|12315..=12316|12319..=12320|12323..=12324|12327..=12328|12331..=12332|12335..=12336|12339..=12340|12343..=12344|12347..=12348|12351..=12352|12355..=12356|12359..=12360|12363..=12364|12367..=12368|12371..=12372|12375..=12376|12379..=12380|12383..=12384|12419..=12420|12423..=12424|12427..=12428|12431..=12432|12435..=12436|12439..=12440|12443..=12444|12447..=12448|12451..=12452|12455..=12456|12459..=12460|12463..=12464|12467..=12468|12471..=12472|12475..=12476|12479..=12480|13508..=13509|13512|13514|13516|13518|13520..=13525|13527|13562|13773..=13799|13826..=13945|13957|13971..=13974|15179|15182|15503|15506|15827|15830|16151|16154|16475|16478|16799|16802|17123|17126|17447|17450|17771|17774|18095|18098|18419|18422|18743|18746|19067|19070|19588..=19591|19605|19607..=19608|19622|19624..=19678|19693..=19696|19889..=19890|19893..=19894|19897..=19898|19901..=19902|19905..=19906|19909..=19910|19913..=19914|19917..=19918|19921..=19922|19925..=19926|19929..=19930|19933..=19934|19937..=19938|19941..=19942|19945..=19946|19949..=19950|20113..=20160|20289..=20368|20560|20563|20980|20983|21385..=21410|21417|21420|22187|22190|22598|22601|23010|23013|23331|23813..=23940|25782..=25836|25840..=25855|25863..=25864|25871..=25872|25879..=25880|25887..=25914|26013|26016|26424|26427|26835|26838|27246|27249|27585) + matches!(self.id, 0|29..=42|45..=84|86..=117|1987..=2034|2047..=2050|2054..=2056|2109..=2136|2401..=2918|3042..=4337|4342..=4349|4366..=4589|4622..=4685|4758..=4777|4858..=4913|4922..=5385|5450..=5705|5802..=5827|5892..=5905|5908..=5911|5916..=5950|5978..=5993|6037..=6041|6043..=6044|7056..=7239|7368..=7369|7372..=7373|7376..=7377|7380..=7381|7384..=7385|7388..=7389|7392..=7393|7396..=7397|8169..=8172|8190|8305..=8448|8709|8712|9033|9036|9380..=9563|9588..=9635|9952..=9983|10129..=10152|11256..=11287|11636..=11967|12205..=12206|12209..=12210|12213..=12214|12217..=12218|12221..=12222|12225..=12226|12229..=12230|12233..=12234|12237..=12238|12241..=12242|12245..=12246|12249..=12250|12253..=12254|12257..=12258|12261..=12262|12265..=12266|12269..=12270|12273..=12274|12277..=12278|12281..=12282|12285..=12286|12289..=12290|12293..=12294|12297..=12298|12301..=12302|12305..=12306|12309..=12310|12313..=12314|12317..=12318|12321..=12322|12325..=12326|12329..=12330|12333..=12334|12337..=12338|12341..=12342|12345..=12346|12349..=12350|12353..=12354|12357..=12358|12361..=12362|12365..=12366|12369..=12370|12373..=12374|12377..=12378|12381..=12382|12385..=12386|12389..=12390|12393..=12394|12429..=12430|12433..=12434|12437..=12438|12441..=12442|12445..=12446|12449..=12450|12453..=12454|12457..=12458|12461..=12462|12465..=12466|12469..=12470|12473..=12474|12477..=12478|12481..=12482|12485..=12486|12489..=12490|13518..=13519|13522|13524|13526|13528|13530..=13535|13537|13572|13783..=13809|13836..=13955|13967|13981..=13984|15189|15192|15513|15516|15837|15840|16161|16164|16485|16488|16809|16812|17133|17136|17457|17460|17781|17784|18105|18108|18429|18432|18753|18756|19077|19080|19598..=19601|19615|19617..=19618|19632|19634..=19688|19703..=19706|19899..=19900|19903..=19904|19907..=19908|19911..=19912|19915..=19916|19919..=19920|19923..=19924|19927..=19928|19931..=19932|19935..=19936|19939..=19940|19943..=19944|19947..=19948|19951..=19952|19955..=19956|19959..=19960|20123..=20170|20299..=20378|20575|20578|20995|20998|21400..=21425|21432|21435|22202|22205|22613|22616|23025|23028|23346|23828..=23955|25797..=25851|25855..=25870|25910..=25911|25918..=25919|25926..=25927|25934..=25961|26060|26063|26471|26474|26882|26885|27293|27296|27632) } fn is_collision_shape_full(&self) -> bool { - matches!(self.id, 1..=21|26..=28|85|118..=156|160..=188|192..=245|249..=447|476..=1730|2041..=2046|2060..=2065|2090..=2105|2134..=2397|2916|4329..=4332|4349..=4356|5903..=5906|5949..=5950|5967|5984..=5985|6018|6020..=6026|6032|6035..=6042|6114..=6129|6770..=6973|7044..=7045|7630..=7631|8046|8189|8191..=8192|8285..=8286|8439|8680..=8692|10022..=10023|10034..=10038|10143..=10170|11243..=11245|11342..=11344|11589..=11590|11595..=11596|11601..=11606|11623..=11625|11958..=11960|12045..=12046|12051..=12052|12057..=12058|12063..=12064|12069..=12070|12075..=12076|12081..=12082|12093..=12094|12099..=12100|12105..=12106|12111..=12112|12117..=12118|12123..=12124|12129..=12130|12135..=12136|12141..=12142|12147..=12148|12153..=12154|12159..=12160|12165..=12166|12171..=12172|12177..=12178|12183..=12184|12189..=12194|13417..=13426|13507|13528..=13561|13563..=13772|13800|13816..=13825|13954|15099..=15100|15105..=15106|15111..=15112|15117..=15118|15123..=15124|15129..=15130|15135..=15136|15141..=15142|15147..=15148|15153..=15154|15159..=15160|15165..=15166|15171..=15172|19417..=19450|19479|19592..=19604|19606|19609..=19621|19623|19679..=19680|19685..=19686|19691..=19692|20369..=20384|20394..=20457|20459..=20467|20472..=20473|20882..=20887|20892..=20893|21298|21383..=21384|21735..=21737|22044..=22045|22094|22099..=22100|22505|22510..=22511|22916..=22917|22922..=22923|23328..=23330|23812|23941..=23942|23951..=23968|24293..=24294|24299..=24300|24305..=24306|24311..=24320|24645..=24646|24651..=24652|24657..=24658|24663..=24664|25689..=25736|25781|25856|25915|25917..=25920|26005..=26006|26331|26416..=26417|26742|26827..=26828|27153|27238..=27239|27564..=27573|27576..=27584|27586|27603..=27656) + matches!(self.id, 1..=21|26..=28|85|118..=156|160..=188|192..=245|249..=447|476..=1730|2041..=2046|2063..=2068|2093..=2108|2137..=2400|2919|4338..=4341|4358..=4365|5912..=5915|5958..=5959|5977|5994..=5995|6028|6030..=6036|6042|6045..=6052|6124..=6139|6780..=6983|7054..=7055|7640..=7641|8056|8199|8201..=8202|8295..=8296|8449|8690..=8702|10032..=10033|10044..=10048|10153..=10180|11253..=11255|11352..=11354|11599..=11600|11605..=11606|11611..=11616|11633..=11635|11968..=11970|12055..=12056|12061..=12062|12067..=12068|12073..=12074|12079..=12080|12085..=12086|12091..=12092|12103..=12104|12109..=12110|12115..=12116|12121..=12122|12127..=12128|12133..=12134|12139..=12140|12145..=12146|12151..=12152|12157..=12158|12163..=12164|12169..=12170|12175..=12176|12181..=12182|12187..=12188|12193..=12194|12199..=12204|13427..=13436|13517|13538..=13571|13573..=13782|13810|13826..=13835|13964|15109..=15110|15115..=15116|15121..=15122|15127..=15128|15133..=15134|15139..=15140|15145..=15146|15151..=15152|15157..=15158|15163..=15164|15169..=15170|15175..=15176|15181..=15182|19427..=19460|19489|19602..=19614|19616|19619..=19631|19633|19689..=19690|19695..=19696|19701..=19702|20379..=20394|20409..=20472|20474..=20482|20487..=20488|20897..=20902|20907..=20908|21313|21398..=21399|21750..=21752|22059..=22060|22109|22114..=22115|22520|22525..=22526|22931..=22932|22937..=22938|23343..=23345|23827|23956..=23957|23966..=23983|24308..=24309|24314..=24315|24320..=24321|24326..=24335|24660..=24661|24666..=24667|24672..=24673|24678..=24679|25704..=25751|25796|25903|25962|25964..=25967|26052..=26053|26378|26463..=26464|26789|26874..=26875|27200|27285..=27286|27611..=27620|27623..=27631|27633|27650..=27703) } } -static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ +static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27704] = [ &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, @@ -5133,15 +5133,15 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18, &SHAPE19, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18, - &SHAPE19, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE24, - &SHAPE24, &SHAPE25, &SHAPE25, &SHAPE26, &SHAPE26, &SHAPE27, &SHAPE27, &SHAPE28, &SHAPE28, - &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, - &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE14, &SHAPE15, + &SHAPE16, &SHAPE17, &SHAPE18, &SHAPE19, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE23, &SHAPE23, &SHAPE24, &SHAPE24, &SHAPE25, &SHAPE25, &SHAPE26, &SHAPE26, &SHAPE27, + &SHAPE27, &SHAPE28, &SHAPE28, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, + &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -5168,7 +5168,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -5219,20 +5219,21 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, - &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, - &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, - &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, - &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, - &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, - &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, - &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, - &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, - &SHAPE92, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE98, &SHAPE98, - &SHAPE100, &SHAPE100, &SHAPE99, &SHAPE99, &SHAPE98, &SHAPE98, &SHAPE101, &SHAPE101, &SHAPE102, - &SHAPE102, &SHAPE98, &SHAPE98, &SHAPE102, &SHAPE102, &SHAPE101, &SHAPE101, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, + &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, + &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, + &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, + &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, + &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, + &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE98, &SHAPE98, &SHAPE100, + &SHAPE100, &SHAPE99, &SHAPE99, &SHAPE98, &SHAPE98, &SHAPE101, &SHAPE101, &SHAPE102, &SHAPE102, + &SHAPE98, &SHAPE98, &SHAPE102, &SHAPE102, &SHAPE101, &SHAPE101, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -5362,10 +5363,10 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE188, &SHAPE188, &SHAPE188, - &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, + &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -5387,44 +5388,43 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE190, &SHAPE190, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, - &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, - &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, - &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, - &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, - &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, - &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, - &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, - &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, - &SHAPE92, &SHAPE92, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE190, &SHAPE190, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, + &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, + &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, + &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, + &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, + &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, + &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, + &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, + &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, + &SHAPE92, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -5470,13 +5470,14 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -5501,39 +5502,39 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE201, + &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, + &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, + &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, + &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, + &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, + &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, + &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE201, &SHAPE201, &SHAPE201, + &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, &SHAPE201, + &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, &SHAPE201, + &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, &SHAPE201, + &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, - &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, - &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, - &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, - &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, - &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, - &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE201, &SHAPE201, - &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, - &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, - &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, - &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, - &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, - &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, - &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, - &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, - &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, - &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, - &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, - &SHAPE190, &SHAPE190, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, + &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, + &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, + &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, + &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, + &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, + &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, + &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, + &SHAPE190, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE12, &SHAPE184, &SHAPE185, &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1, - &SHAPE1, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, + &SHAPE12, &SHAPE184, &SHAPE185, &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1, &SHAPE1, + &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, - &SHAPE231, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE234, &SHAPE236, &SHAPE234, &SHAPE236, &SHAPE238, &SHAPE240, &SHAPE238, &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE246, &SHAPE248, @@ -7209,51 +7210,38 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, - &SHAPE692, &SHAPE692, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE692, &SHAPE692, &SHAPE692, + &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE231, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE36, - &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, - &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, - &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, - &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, - &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, - &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, - &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, - &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, - &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, - &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, - &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, - &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE231, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, + &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, + &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, + &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, + &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, + &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, + &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, + &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, + &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, + &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, + &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, - &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, + &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, + &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, - &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, + &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, + &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, + &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, @@ -7267,17 +7255,83 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, - &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, - &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, - &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, - &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, - &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, - &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, - &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, - &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, + &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, + &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, + &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, + &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, + &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, + &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, + &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, + &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, + &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, + &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, + &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, + &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, + &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, + &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, + &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, + &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, + &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, + &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, + &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, + &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, + &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, + &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, + &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, + &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, + &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, + &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, + &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, + &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, + &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, + &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, + &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, + &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, + &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, + &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, + &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, + &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, + &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, + &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, + &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, + &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, + &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, + &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, + &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, + &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, + &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, + &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, + &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, + &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, + &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, + &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, + &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, + &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, + &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, + &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, + &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, + &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, + &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, + &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, + &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, + &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, + &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, + &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, + &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, + &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, + &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, @@ -7318,141 +7372,75 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, - &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, - &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, - &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, - &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, - &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, - &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, - &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, - &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, - &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE362, &SHAPE363, &SHAPE363, - &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, - &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, - &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, - &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, - &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, - &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, - &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, - &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, + &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, + &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, - &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE1, &SHAPE1, &SHAPE704, &SHAPE704, &SHAPE705, - &SHAPE705, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE709, - &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713, - &SHAPE713, &SHAPE714, &SHAPE714, &SHAPE715, &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717, - &SHAPE717, &SHAPE718, &SHAPE718, &SHAPE719, &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721, - &SHAPE721, &SHAPE722, &SHAPE722, &SHAPE723, &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725, - &SHAPE725, &SHAPE726, &SHAPE726, &SHAPE727, &SHAPE727, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, - &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, - &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, - &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, - &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, - &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, - &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, - &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, - &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, - &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, - &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, - &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, + &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, + &SHAPE1, &SHAPE1, &SHAPE704, &SHAPE704, &SHAPE705, &SHAPE705, &SHAPE706, &SHAPE706, &SHAPE707, + &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE711, + &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE714, &SHAPE714, &SHAPE715, + &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717, &SHAPE717, &SHAPE718, &SHAPE718, &SHAPE719, + &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721, &SHAPE721, &SHAPE722, &SHAPE722, &SHAPE723, + &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725, &SHAPE725, &SHAPE726, &SHAPE726, &SHAPE727, + &SHAPE727, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, + &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, + &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, + &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, + &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, + &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, + &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, + &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, + &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, + &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, + &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, + &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, + &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, - &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, + &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, + &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, - &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, - &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, - &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, - &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, - &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, - &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, - &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, - &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, + &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, @@ -7465,30 +7453,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, - &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, - &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, - &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, - &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, - &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, - &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, - &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, - &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, - &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, - &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, - &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, - &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, - &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, - &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, - &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, - &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, - &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, - &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, - &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, @@ -7502,7 +7467,30 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, + &SHAPE472, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, + &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, + &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, + &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, + &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, + &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, + &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, + &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, + &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, + &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, + &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, + &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, + &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, + &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, + &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, + &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, + &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, + &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, @@ -7515,30 +7503,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, - &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, - &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, - &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, - &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, - &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, - &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, - &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, - &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, - &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, - &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, - &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, - &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, - &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, - &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, - &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, - &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, - &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, - &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, @@ -7552,20 +7517,57 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, - &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, - &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, - &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, - &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, - &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, + &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, + &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, + &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, + &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, + &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, + &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, + &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, + &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, + &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, + &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, + &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, + &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, + &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, + &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, + &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, + &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, + &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, + &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, + &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, + &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, + &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, + &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, + &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, + &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, + &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, + &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, + &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, + &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, + &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, + &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, @@ -7619,8 +7621,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, - &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -7632,27 +7633,10 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, + &SHAPE1, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, - &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, - &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, - &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, - &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, - &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, - &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, - &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, - &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, - &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, - &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, - &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, - &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, - &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, - &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, - &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, - &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, - &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, @@ -7670,28 +7654,28 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, - &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, - &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, - &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, - &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, - &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, - &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, - &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, - &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, - &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, - &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, - &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, - &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, - &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, - &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, - &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, - &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, - &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, - &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, - &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, - &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, + &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, + &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, + &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, + &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, + &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, + &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, + &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, + &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, + &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, + &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, + &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, + &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, + &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, + &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, + &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, + &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, + &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, + &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, @@ -7709,312 +7693,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, - &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, - &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, - &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, - &SHAPE1, &SHAPE1, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, - &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, - &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, - &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, - &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, - &SHAPE274, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE578, - &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE578, - &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE265, - &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE660, - &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE728, &SHAPE728, &SHAPE729, &SHAPE729, &SHAPE189, - &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE233, - &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE731, - &SHAPE731, &SHAPE73, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE740, - &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740, - &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740, &SHAPE740, - &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE740, - &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE1, &SHAPE187, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, - &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, - &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, - &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, - &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, - &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, - &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, - &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, - &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, - &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, - &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, - &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, - &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, - &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, - &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, - &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, - &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, - &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, - &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, - &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, - &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, - &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, - &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, - &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, - &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, - &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, - &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, - &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, - &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, - &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, - &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, - &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, - &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, - &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, - &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, - &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, - &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, - &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, - &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, - &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, - &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, - &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, - &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, - &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, - &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, - &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, - &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, - &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, - &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, @@ -8023,60 +7702,386 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, - &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, - &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, - &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, - &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, - &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, - &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, - &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, - &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, - &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, - &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, - &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, - &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, - &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, - &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, - &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, - &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, - &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, - &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, - &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, - &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE1, &SHAPE232, &SHAPE232, + &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, + &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, + &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, + &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, + &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, + &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, + &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, + &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, + &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, + &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273, + &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE578, &SHAPE578, + &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE578, &SHAPE578, + &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE265, &SHAPE265, + &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE660, &SHAPE660, + &SHAPE660, &SHAPE660, &SHAPE728, &SHAPE728, &SHAPE729, &SHAPE729, &SHAPE189, &SHAPE189, + &SHAPE189, &SHAPE189, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE233, &SHAPE233, + &SHAPE233, &SHAPE233, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE731, &SHAPE731, + &SHAPE73, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, + &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740, + &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740, &SHAPE740, + &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE1, &SHAPE187, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, + &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, + &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, + &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, + &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, + &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, + &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, + &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, + &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, + &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, + &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, + &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, + &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, + &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, + &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, + &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, + &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, + &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, + &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, + &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, + &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, + &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, + &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, + &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, + &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, + &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, + &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, + &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, + &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, + &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, + &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, + &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, + &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, + &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, + &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, + &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, + &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, + &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, + &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, + &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, + &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, + &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, + &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, + &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, + &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, + &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, + &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, + &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, + &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, + &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, + &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, + &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, + &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, + &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, + &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, + &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, + &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, + &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, + &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, + &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, + &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, + &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, + &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, + &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, + &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, + &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, + &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, + &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, + &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, + &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, + &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, + &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, + &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, + &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, + &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, + &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, + &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, + &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, + &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, + &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, + &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, + &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, + &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, + &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, + &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE1, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, - &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, + &SHAPE1, &SHAPE1, ]; -static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ +static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27704] = [ &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE2, @@ -8283,16 +8288,17 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18, &SHAPE19, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE20, &SHAPE20, &SHAPE21, &SHAPE2, &SHAPE22, - &SHAPE22, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18, &SHAPE19, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE24, &SHAPE24, &SHAPE25, &SHAPE25, - &SHAPE26, &SHAPE26, &SHAPE27, &SHAPE27, &SHAPE28, &SHAPE28, &SHAPE29, &SHAPE29, &SHAPE30, - &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE20, &SHAPE20, &SHAPE21, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE2, &SHAPE22, &SHAPE22, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18, + &SHAPE19, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE24, + &SHAPE24, &SHAPE25, &SHAPE25, &SHAPE26, &SHAPE26, &SHAPE27, &SHAPE27, &SHAPE28, &SHAPE28, + &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, + &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, + &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE35, &SHAPE35, - &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, - &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -8318,8 +8324,11 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE37, - &SHAPE38, &SHAPE39, &SHAPE40, &SHAPE41, &SHAPE42, &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE37, &SHAPE38, &SHAPE39, &SHAPE40, &SHAPE41, &SHAPE42, + &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, + &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, + &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, + &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE42, &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, @@ -8372,25 +8381,21 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE72, &SHAPE73, &SHAPE42, &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, - &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE42, &SHAPE43, - &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, - &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, - &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, - &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE73, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, - &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, - &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, - &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, - &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, - &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, - &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, - &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, - &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, - &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, - &SHAPE100, &SHAPE100, &SHAPE98, &SHAPE98, &SHAPE100, &SHAPE100, &SHAPE99, &SHAPE99, &SHAPE98, - &SHAPE98, &SHAPE101, &SHAPE101, &SHAPE102, &SHAPE102, &SHAPE98, &SHAPE98, &SHAPE102, &SHAPE102, - &SHAPE101, &SHAPE101, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, - &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, + &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE73, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, + &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, + &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, + &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, + &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, + &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, + &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, + &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, + &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, + &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE98, &SHAPE98, &SHAPE99, + &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE98, &SHAPE98, &SHAPE100, &SHAPE100, &SHAPE99, &SHAPE99, + &SHAPE98, &SHAPE98, &SHAPE101, &SHAPE101, &SHAPE102, &SHAPE102, &SHAPE98, &SHAPE98, &SHAPE102, + &SHAPE102, &SHAPE101, &SHAPE101, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, @@ -8407,8 +8412,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, - &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, - &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, + &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, + &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, @@ -8425,8 +8430,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, - &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, - &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, + &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, + &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, @@ -8443,8 +8448,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, - &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, - &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, + &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, + &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, @@ -8461,8 +8466,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, - &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, - &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, + &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, + &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, @@ -8479,8 +8484,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, - &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, - &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, + &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, + &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, @@ -8497,8 +8502,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, - &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, - &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, + &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, + &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, @@ -8515,8 +8520,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, - &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, - &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, + &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, + &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, @@ -8533,8 +8538,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, - &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, - &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, + &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, + &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, @@ -8551,10 +8556,11 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, - &SHAPE182, &SHAPE183, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE12, &SHAPE184, &SHAPE185, - &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, - &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, + &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, + &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE12, &SHAPE184, + &SHAPE185, &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1, &SHAPE188, &SHAPE188, &SHAPE188, + &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, @@ -8582,10 +8588,10 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, - &SHAPE189, &SHAPE189, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, @@ -8593,146 +8599,7 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, - &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, - &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, - &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, - &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, - &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE193, &SHAPE193, &SHAPE192, - &SHAPE192, &SHAPE190, &SHAPE190, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13, - &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12, &SHAPE12, - &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, - &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, - &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, - &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, - &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, - &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, - &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, - &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, - &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, - &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196, &SHAPE197, - &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196, &SHAPE197, - &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, - &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, - &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, - &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, - &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, - &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, - &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, - &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, &SHAPE204, - &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, &SHAPE204, - &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, &SHAPE204, - &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, &SHAPE204, - &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, - &SHAPE206, &SHAPE206, &SHAPE207, &SHAPE207, &SHAPE208, &SHAPE208, &SHAPE209, &SHAPE209, - &SHAPE210, &SHAPE210, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE212, &SHAPE212, - &SHAPE212, &SHAPE212, &SHAPE213, &SHAPE214, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, + &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, @@ -8740,17 +8607,156 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, - &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, - &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, - &SHAPE213, &SHAPE214, &SHAPE1, &SHAPE1, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, + &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE193, &SHAPE193, + &SHAPE192, &SHAPE192, &SHAPE190, &SHAPE190, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, + &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12, + &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE74, &SHAPE74, &SHAPE75, + &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, + &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, + &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, + &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, + &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, + &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, + &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, + &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, + &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, + &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, + &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, + &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, + &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, + &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, + &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196, + &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196, + &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE202, &SHAPE202, &SHAPE202, + &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, + &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, + &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, + &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, + &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, + &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, + &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, + &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, + &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, + &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, + &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE206, + &SHAPE206, &SHAPE206, &SHAPE206, &SHAPE207, &SHAPE207, &SHAPE208, &SHAPE208, &SHAPE209, + &SHAPE209, &SHAPE210, &SHAPE210, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE212, + &SHAPE212, &SHAPE212, &SHAPE212, &SHAPE213, &SHAPE214, &SHAPE190, &SHAPE190, &SHAPE191, + &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, + &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, + &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, + &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, + &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, + &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, + &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, + &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE213, &SHAPE214, &SHAPE213, + &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, + &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE1, &SHAPE1, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE215, &SHAPE216, &SHAPE215, &SHAPE216, &SHAPE217, &SHAPE218, &SHAPE217, &SHAPE218, &SHAPE219, &SHAPE220, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE229, &SHAPE230, &SHAPE12, &SHAPE184, &SHAPE185, &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, - &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, + &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE1, &SHAPE1, &SHAPE235, &SHAPE237, &SHAPE235, &SHAPE237, &SHAPE239, &SHAPE241, &SHAPE239, &SHAPE241, &SHAPE243, &SHAPE245, &SHAPE243, @@ -10460,215 +10466,17 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE189, &SHAPE189, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE692, &SHAPE693, - &SHAPE694, &SHAPE695, &SHAPE696, &SHAPE697, &SHAPE698, &SHAPE699, &SHAPE699, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE692, &SHAPE693, &SHAPE694, &SHAPE695, &SHAPE696, &SHAPE697, + &SHAPE698, &SHAPE699, &SHAPE699, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, - &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, - &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, - &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, - &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, - &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, - &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, - &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, - &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, - &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, - &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, - &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, - &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, - &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, - &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, - &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, - &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, - &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, - &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, - &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, - &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, - &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, - &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, - &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, - &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, - &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, - &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, - &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, - &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, - &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, - &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, - &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, - &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, - &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, - &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, - &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, - &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, - &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, - &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, - &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, - &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, - &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, - &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, - &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, - &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, - &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, - &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, - &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, - &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, - &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, - &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, - &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, - &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, - &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, - &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, - &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, - &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, - &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, - &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, - &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, - &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, - &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, - &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, - &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, - &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, - &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, - &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, - &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, - &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, - &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, - &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, - &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, - &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, - &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, - &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, - &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, - &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, - &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, - &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, - &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, - &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, - &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, - &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, - &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, - &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, - &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, - &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, - &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, - &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, - &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, - &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, - &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, - &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, - &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, - &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, - &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, - &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, - &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, - &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74, - &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, - &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, - &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, - &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, - &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, - &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, - &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, - &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, - &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE213, &SHAPE214, &SHAPE215, &SHAPE216, &SHAPE215, - &SHAPE216, &SHAPE217, &SHAPE218, &SHAPE217, &SHAPE218, &SHAPE219, &SHAPE220, &SHAPE221, - &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE227, - &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE229, &SHAPE230, &SHAPE189, &SHAPE364, &SHAPE365, - &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, - &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, - &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, - &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, - &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, - &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, - &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, - &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, - &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, - &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, - &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, - &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, - &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, - &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, - &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, - &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, - &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, - &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, - &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, - &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, - &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, - &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, - &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, - &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, - &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, - &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, - &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, - &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, - &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, - &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, - &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, - &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, - &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, - &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, - &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, - &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, - &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, - &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, - &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, - &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, - &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, - &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, - &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, - &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE1, &SHAPE1, &SHAPE704, &SHAPE704, &SHAPE705, - &SHAPE705, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE709, - &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713, - &SHAPE713, &SHAPE714, &SHAPE714, &SHAPE715, &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717, - &SHAPE717, &SHAPE718, &SHAPE718, &SHAPE719, &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721, - &SHAPE721, &SHAPE722, &SHAPE722, &SHAPE723, &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725, - &SHAPE725, &SHAPE726, &SHAPE726, &SHAPE727, &SHAPE727, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, - &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE36, + &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, @@ -10717,7 +10525,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, - &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, + &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE572, &SHAPE572, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, @@ -10767,18 +10576,216 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, - &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, - &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, - &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, - &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, - &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, - &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, - &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, - &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, - &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, - &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, - &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373, + &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, + &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, + &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, + &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, + &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, + &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, + &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, + &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, + &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, + &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE213, &SHAPE214, &SHAPE215, &SHAPE216, &SHAPE215, &SHAPE216, &SHAPE217, + &SHAPE218, &SHAPE217, &SHAPE218, &SHAPE219, &SHAPE220, &SHAPE221, &SHAPE222, &SHAPE223, + &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE227, &SHAPE228, &SHAPE229, + &SHAPE230, &SHAPE229, &SHAPE230, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, + &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, + &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, + &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, + &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, + &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, + &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, + &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, + &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, + &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, + &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, + &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, + &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, + &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, + &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, + &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, + &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, + &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, + &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, + &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, + &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, + &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, + &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, + &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, + &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, + &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, + &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, + &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, + &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, + &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, + &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, + &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, + &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, + &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, + &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, + &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, + &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, + &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, + &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, + &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, + &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, + &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, + &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, + &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, + &SHAPE703, &SHAPE703, &SHAPE1, &SHAPE1, &SHAPE704, &SHAPE704, &SHAPE705, &SHAPE705, &SHAPE706, + &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, &SHAPE710, + &SHAPE710, &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE714, + &SHAPE714, &SHAPE715, &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717, &SHAPE717, &SHAPE718, + &SHAPE718, &SHAPE719, &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721, &SHAPE721, &SHAPE722, + &SHAPE722, &SHAPE723, &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725, &SHAPE725, &SHAPE726, + &SHAPE726, &SHAPE727, &SHAPE727, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, + &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, + &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, + &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, + &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, + &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, + &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, + &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, + &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, + &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, + &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, + &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, + &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, + &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, + &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, + &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, + &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, + &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, + &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, + &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, + &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, + &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, + &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, + &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, + &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, + &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, + &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, + &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, + &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, + &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, + &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, + &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, + &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, + &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, + &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, + &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, + &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, + &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, + &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, + &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, + &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, + &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, + &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, + &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, + &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, + &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, + &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, + &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, + &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, + &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, + &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, + &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, + &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, + &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, + &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, + &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, + &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, + &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, + &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, + &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, + &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, + &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, + &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, + &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, + &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, + &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, + &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, + &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, + &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, + &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, + &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, + &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, + &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, + &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, + &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, + &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, + &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, + &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, + &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, + &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, + &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, + &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, + &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, + &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, + &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, + &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, + &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, + &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, + &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, + &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, + &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, + &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, + &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, + &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, + &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, + &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, + &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, + &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, + &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, + &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, + &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, + &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, + &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, + &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, + &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, + &SHAPE92, &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, + &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389, @@ -11114,222 +11121,225 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [ &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE730, &SHAPE731, &SHAPE731, &SHAPE73, &SHAPE732, &SHAPE733, &SHAPE274, &SHAPE274, &SHAPE734, &SHAPE735, &SHAPE274, &SHAPE274, &SHAPE736, &SHAPE737, &SHAPE274, &SHAPE274, &SHAPE738, &SHAPE739, &SHAPE274, &SHAPE274, - &SHAPE1, &SHAPE741, &SHAPE741, &SHAPE741, &SHAPE741, &SHAPE743, &SHAPE743, &SHAPE744, - &SHAPE744, &SHAPE745, &SHAPE745, &SHAPE745, &SHAPE745, &SHAPE746, &SHAPE746, &SHAPE747, - &SHAPE747, &SHAPE748, &SHAPE748, &SHAPE748, &SHAPE748, &SHAPE749, &SHAPE749, &SHAPE750, - &SHAPE750, &SHAPE751, &SHAPE751, &SHAPE751, &SHAPE751, &SHAPE752, &SHAPE752, &SHAPE753, - &SHAPE753, &SHAPE754, &SHAPE754, &SHAPE755, &SHAPE755, &SHAPE756, &SHAPE756, &SHAPE757, - &SHAPE757, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE741, &SHAPE741, &SHAPE741, &SHAPE741, &SHAPE743, &SHAPE743, + &SHAPE744, &SHAPE744, &SHAPE745, &SHAPE745, &SHAPE745, &SHAPE745, &SHAPE746, &SHAPE746, + &SHAPE747, &SHAPE747, &SHAPE748, &SHAPE748, &SHAPE748, &SHAPE748, &SHAPE749, &SHAPE749, + &SHAPE750, &SHAPE750, &SHAPE751, &SHAPE751, &SHAPE751, &SHAPE751, &SHAPE752, &SHAPE752, + &SHAPE753, &SHAPE753, &SHAPE754, &SHAPE754, &SHAPE755, &SHAPE755, &SHAPE756, &SHAPE756, + &SHAPE757, &SHAPE757, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, - &SHAPE758, &SHAPE759, &SHAPE759, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, - &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, - &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, - &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, - &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, - &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, - &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, - &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, - &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, - &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, - &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, - &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, - &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, - &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, - &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, - &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, - &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, - &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, - &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, - &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, - &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, - &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, - &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, - &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, - &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, - &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, - &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, - &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, - &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, - &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, - &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, - &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, - &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, - &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, - &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, - &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, - &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, - &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, - &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, - &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, - &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, - &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, - &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, - &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, - &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, - &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, - &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, - &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, - &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, - &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74, - &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, - &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, - &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, - &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, - &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, - &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, - &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, - &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, - &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, - &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, - &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, - &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, - &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, - &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, - &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, - &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, - &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, - &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, - &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, - &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, - &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, - &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, - &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, - &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, - &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, - &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, - &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, - &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, - &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, - &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, - &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, - &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, - &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, - &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, - &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, - &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, - &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, - &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, - &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, - &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, - &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, - &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, - &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, - &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, - &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, - &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, - &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, - &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, - &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74, &SHAPE74, - &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, - &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, - &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, - &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, - &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, - &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, - &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, - &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, - &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, - &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, - &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373, - &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377, - &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382, - &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389, - &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, &SHAPE393, - &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE401, - &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, - &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, &SHAPE409, - &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE414, - &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, &SHAPE419, - &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, &SHAPE421, - &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE426, - &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, &SHAPE433, - &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, &SHAPE437, - &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE445, - &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, &SHAPE451, - &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, &SHAPE453, - &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE461, - &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, &SHAPE469, - &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, &SHAPE473, - &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, - &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, - &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, &SHAPE485, - &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, - &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, - &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, &SHAPE497, - &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, - &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, - &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, &SHAPE509, - &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, - &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, - &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521, - &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, - &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, - &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE538, - &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543, - &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545, - &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, - &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, - &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, - &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, - &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, - &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, - &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, - &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, - &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, - &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, - &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, - &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, - &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373, - &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377, - &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382, - &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389, - &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, &SHAPE393, - &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE401, - &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, - &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, &SHAPE409, - &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE414, - &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, &SHAPE419, - &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, &SHAPE421, - &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE426, - &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, &SHAPE433, - &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, &SHAPE437, - &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE445, - &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, &SHAPE451, - &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, &SHAPE453, - &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE461, - &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, &SHAPE469, - &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, &SHAPE473, - &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, - &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, - &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, &SHAPE485, - &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, - &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, - &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, &SHAPE497, - &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, - &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, - &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, &SHAPE509, - &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, - &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, - &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521, - &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, - &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, - &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE538, - &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543, - &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545, - &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, - &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE760, &SHAPE1, &SHAPE232, - &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, - &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1, + &SHAPE758, &SHAPE758, &SHAPE759, &SHAPE759, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, + &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, + &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, + &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, + &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, + &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, + &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, + &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, + &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, + &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, + &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, + &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, + &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, + &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, + &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, + &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, + &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, + &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, + &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, + &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, + &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, + &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, + &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, + &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, + &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, + &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, + &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, + &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, + &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, + &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, + &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, + &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, + &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, + &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, + &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, + &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, + &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, + &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, + &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, + &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, + &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, + &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, + &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, + &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, + &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, + &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, + &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, + &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, + &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, + &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, + &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, + &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, + &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, + &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, + &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, + &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, + &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, + &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, + &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, + &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, + &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, + &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, + &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, + &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, + &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, + &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, + &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, + &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, + &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, + &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, + &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, + &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, + &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, + &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, + &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, + &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, + &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, + &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, + &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, + &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, + &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, + &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, + &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, + &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, + &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, + &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, + &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, + &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, + &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, + &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, + &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, + &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, + &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, + &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, + &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, + &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, + &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, + &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, + &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, + &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, + &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, + &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, + &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, + &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, + &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, + &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, + &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, + &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, + &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, + &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, + &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, + &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, + &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, + &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, + &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, + &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, + &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, + &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, + &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, + &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, + &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, + &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, + &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, + &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, + &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, + &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, + &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, + &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, + &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, + &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, + &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, + &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, + &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, + &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, + &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, + &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, + &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, + &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, + &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, + &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, + &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, + &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, + &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, + &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, + &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, + &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, + &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, + &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, + &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, + &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, + &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, + &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, + &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, + &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, + &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, + &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, + &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, + &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, + &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, + &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, + &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, + &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, + &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, + &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, + &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, + &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, + &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, + &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, + &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, + &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, + &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, + &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, + &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, + &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, + &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, + &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, + &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, + &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, + &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, + &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, + &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, + &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, + &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, + &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, + &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, + &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, + &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, + &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE760, &SHAPE1, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, + &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, + &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, ]; diff --git a/azalea-protocol/src/packets/game/c_commands.rs b/azalea-protocol/src/packets/game/c_commands.rs index c0ac27b2..cd21ddd1 100755 --- a/azalea-protocol/src/packets/game/c_commands.rs +++ b/azalea-protocol/src/packets/game/c_commands.rs @@ -91,6 +91,7 @@ pub enum BrigadierString { GreedyPhrase = 2, } +// see ArgumentTypeInfo #[derive(Debug, Clone, AzBuf, PartialEq)] pub enum BrigadierParser { Bool, @@ -140,6 +141,7 @@ pub enum BrigadierParser { ResourceOrTagKey { registry_key: ResourceLocation }, Resource { registry_key: ResourceLocation }, ResourceKey { registry_key: ResourceLocation }, + ResourceSelector { registry_key: ResourceLocation }, TemplateMirror, TemplateRotation, Heightmap, @@ -182,7 +184,7 @@ impl AzaleaRead for BrigadierNodeStub { fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> { let flags = FixedBitSet::<{ 8_usize.div_ceil(8) }>::azalea_read(buf)?; if flags.index(5) || flags.index(6) || flags.index(7) { - warn!("Warning: The flags from a Brigadier node are over 31. This is probably a bug.",); + warn!("The flags from a Brigadier node are over 31. This is a bug, BrigadierParser probably needs updating.",); } let node_type = u8::from(flags.index(0)) + (u8::from(flags.index(1)) * 2); diff --git a/azalea-protocol/src/packets/game/c_container_set_content.rs b/azalea-protocol/src/packets/game/c_container_set_content.rs index 3115a7b7..77ea9ec7 100755 --- a/azalea-protocol/src/packets/game/c_container_set_content.rs +++ b/azalea-protocol/src/packets/game/c_container_set_content.rs @@ -37,48 +37,4 @@ mod tests { packet.write(&mut buf).unwrap(); assert_eq!(buf, contents); } - - #[test] - fn test_read_write_big_container_set_content() { - #[rustfmt::skip] - let contents = [10, 1, 90, 1, 170, 5, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 17, 80, 114, 101, 118, 105, 111, 117, 115, 32, 80, 97, 103, 101, 32, 40, 54, 41, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 62, 5, 231, 107, 8, 147, 65, 45, 135, 242, 47, 95, 58, 70, 91, 105, 0, 0, 1, 254, 3, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 8, 80, 97, 103, 101, 32, 55, 47, 56, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 25, 24, 96, 187, 51, 242, 65, 97, 131, 122, 26, 153, 143, 122, 216, 134, 0, 0, 1, 148, 3, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 13, 78, 101, 120, 116, 32, 80, 97, 103, 101, 32, 40, 56, 41, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 203, 101, 74, 157, 4, 159, 71, 173, 149, 228, 121, 170, 64, 127, 182, 58, 0, 0, 1, 223, 5, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 25, 71, 111, 32, 66, 97, 99, 107, 32, 116, 111, 32, 67, 105, 116, 121, 32, 83, 101, 108, 101, 99, 116, 105, 111, 110, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 134, 183, 152, 100, 133, 118, 74, 35, 179, 188, 177, 175, 164, 81, 113, 14, 0, 0, 1, 157, 9, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 6, 83, 101, 97, 114, 99, 104, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 65, 126, 18, 219, 85, 224, 70, 89, 177, 255, 35, 221, 5, 138, 243, 157, 0, 0, 0, 0, 0, 0, 1, 251, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 47, 12, 197, 190, 121, 244, 75, 144, 170, 28, 179, 220, 82, 113, 250, 18, 0, 0, 1, 241, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 144, 255, 123, 43, 53, 133, 71, 98, 163, 18, 128, 43, 9, 102, 109, 17, 0, 0, 1, 141, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 122, 201, 62, 11, 115, 80, 78, 42, 164, 59, 191, 218, 36, 100, 99, 28, 0, 0, 1, 175, 2, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 254, 1, 161, 38, 93, 186, 70, 76, 133, 57, 77, 149, 86, 143, 160, 210, 0, 0, 1, 169, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 59, 28, 30, 213, 214, 194, 67, 236, 152, 225, 40, 235, 18, 182, 106, 118, 0, 0, 1, 181, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 89, 127, 100, 45, 23, 41, 69, 93, 187, 167, 229, 42, 235, 37, 203, 200, 0, 0, 1, 164, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 80, 82, 232, 142, 122, 39, 78, 76, 139, 86, 231, 223, 147, 188, 151, 31, 0, 0, 1, 252, 6, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 110, 202, 120, 27, 81, 112, 68, 6, 176, 78, 138, 236, 74, 155, 102, 36, 0, 0, 1, 254, 6, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 250, 148, 180, 54, 223, 106, 65, 72, 133, 155, 228, 152, 38, 164, 13, 76, 0, 0, 1, 203, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 104, 50, 30, 169, 227, 21, 78, 111, 145, 140, 61, 251, 171, 87, 237, 156, 0, 0, 1, 141, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 116, 16, 80, 89, 88, 134, 73, 130, 159, 154, 11, 187, 152, 47, 15, 246, 0, 0, 1, 205, 2, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 198, 182, 15, 238, 191, 229, 78, 55, 167, 200, 119, 172, 172, 194, 250, 64, 0, 0, 1, 225, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 125, 180, 76, 110, 110, 204, 75, 122, 164, 224, 99, 32, 106, 188, 93, 128, 0, 0, 1, 196, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 14, 58, 78, 26, 151, 80, 68, 89, 138, 123, 32, 101, 206, 101, 33, 218, 0, 0, 1, 190, 9, 4, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 102, 102, 53, 102, 49, 53, 8, 0, 4, 116, 101, 120, 116, 0, 6, 79, 114, 97, 110, 103, 101, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 6, 121, 101, 108, 108, 111, 119, 8, 0, 4, 116, 101, 120, 116, 0, 13, 32, 69, 110, 101, 114, 103, 121, 32, 83, 119, 111, 114, 100, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 13, 2, 2, 23, 105, 111, 110, 58, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 95, 100, 97, 109, 97, 103, 101, 64, 24, 0, 0, 0, 0, 0, 0, 0, 1, 4, 22, 105, 111, 110, 58, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 95, 115, 112, 101, 101, 100, 63, 252, 204, 204, 204, 204, 204, 205, 0, 1, 1, 7, 51, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 119, 101, 97, 112, 111, 110, 47, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 47, 111, 114, 97, 110, 103, 101, 95, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 24, 115, 5, 163, 74, 89, 79, 249, 146, 120, 81, 85, 5, 199, 50, 36, 8, 0, 14, 105, 111, 110, 58, 99, 117, 115, 116, 111, 109, 105, 116, 101, 109, 0, 19, 69, 78, 69, 82, 71, 89, 95, 83, 87, 79, 82, 68, 95, 79, 82, 65, 78, 71, 69, 0, 0, 1, 170, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 228, 45, 52, 184, 186, 231, 64, 249, 154, 85, 220, 89, 185, 191, 18, 132, 0, 0, 1, 148, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 208, 70, 163, 62, 217, 139, 70, 183, 137, 197, 67, 252, 152, 48, 227, 138, 0, 0, 1, 162, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 254, 202, 177, 230, 229, 182, 73, 123, 155, 132, 135, 87, 114, 149, 42, 115, 0, 0, 1, 250, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 185, 163, 63, 49, 137, 40, 68, 201, 185, 96, 22, 91, 249, 114, 84, 156, 0, 0, 1, 160, 6, 7, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 111, 108, 100, 8, 0, 4, 116, 101, 120, 116, 0, 6, 80, 111, 119, 101, 114, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 8, 76, 101, 103, 103, 105, 110, 103, 115, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 3, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 4, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 7, 80, 111, 119, 101, 114, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 5, 53, 48, 48, 48, 48, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 3, 32, 47, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 5, 53, 48, 48, 48, 48, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 0, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 3, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 13, 77, 111, 100, 115, 32, 40, 108, 105, 109, 105, 116, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 1, 49, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 2, 41, 58, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 13, 2, 0, 24, 105, 111, 110, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 108, 101, 103, 103, 105, 110, 103, 115, 64, 20, 0, 0, 0, 0, 0, 0, 0, 5, 1, 24, 105, 111, 110, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 108, 101, 103, 103, 105, 110, 103, 115, 64, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 7, 44, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 47, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 108, 101, 103, 103, 105, 110, 103, 115, 4, 0, 28, 2, 75, 1, 23, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 0, 0, 1, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 22, 105, 111, 110, 58, 116, 111, 111, 108, 95, 109, 111, 100, 105, 102, 105, 99, 97, 116, 105, 111, 110, 115, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 9, 105, 111, 110, 58, 112, 111, 119, 101, 114, 0, 0, 195, 80, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 222, 50, 97, 187, 223, 130, 78, 27, 181, 50, 191, 193, 220, 26, 166, 32, 8, 0, 14, 105, 111, 110, 58, 99, 117, 115, 116, 111, 109, 105, 116, 101, 109, 0, 20, 80, 79, 87, 69, 82, 95, 65, 82, 77, 79, 82, 95, 76, 69, 71, 71, 73, 78, 71, 83, 0, 0, 1, 206, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 92, 15, 75, 242, 229, 111, 69, 230, 135, 17, 151, 154, 254, 156, 73, 69, 0, 0, 1, 197, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 237, 209, 204, 250, 47, 89, 72, 89, 151, 44, 64, 89, 253, 12, 194, 68, 0, 0, 1, 253, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 139, 69, 194, 233, 38, 229, 66, 224, 170, 40, 138, 147, 33, 232, 61, 126, 0, 0, 1, 241, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 180, 235, 163, 39, 91, 237, 70, 48, 177, 149, 170, 41, 26, 167, 129, 237, 0, 0, 1, 213, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 202, 18, 209, 104, 36, 46, 76, 49, 166, 97, 11, 72, 137, 61, 236, 127, 0, 0, 1, 145, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 78, 5, 94, 87, 195, 173, 75, 190, 141, 204, 226, 162, 70, 68, 236, 32, 0, 0, 1, 174, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 67, 94, 169, 41, 126, 228, 74, 154, 147, 81, 231, 116, 151, 234, 148, 174, 0, 0, 1, 160, 6, 7, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 111, 108, 100, 8, 0, 4, 116, 101, 120, 116, 0, 6, 80, 111, 119, 101, 114, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 10, 67, 104, 101, 115, 116, 112, 108, 97, 116, 101, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 3, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 4, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 7, 80, 111, 119, 101, 114, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 5, 53, 48, 48, 48, 48, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 3, 32, 47, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 5, 53, 48, 48, 48, 48, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 0, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 3, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 13, 77, 111, 100, 115, 32, 40, 108, 105, 109, 105, 116, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 1, 49, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 2, 41, 58, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 13, 2, 0, 26, 105, 111, 110, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 99, 104, 101, 115, 116, 112, 108, 97, 116, 101, 64, 20, 0, 0, 0, 0, 0, 0, 0, 6, 1, 26, 105, 111, 110, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 99, 104, 101, 115, 116, 112, 108, 97, 116, 101, 64, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 7, 46, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 47, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 99, 104, 101, 115, 116, 112, 108, 97, 116, 101, 4, 0, 28, 3, 75, 1, 23, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 0, 0, 1, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 22, 105, 111, 110, 58, 116, 111, 111, 108, 95, 109, 111, 100, 105, 102, 105, 99, 97, 116, 105, 111, 110, 115, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 9, 105, 111, 110, 58, 112, 111, 119, 101, 114, 0, 0, 195, 80, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 53, 127, 15, 194, 212, 201, 74, 70, 155, 232, 218, 234, 82, 153, 238, 47, 8, 0, 14, 105, 111, 110, 58, 99, 117, 115, 116, 111, 109, 105, 116, 101, 109, 0, 22, 80, 79, 87, 69, 82, 95, 65, 82, 77, 79, 82, 95, 67, 72, 69, 83, 84, 80, 76, 65, 84, 69, 0, 0, 1, 97, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 100, 41, 241, 127, 125, 34, 74, 58, 133, 101, 247, 96, 145, 221, 60, 238, 0, 0, 1, 193, 9, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 86, 207, 202, 78, 106, 201, 69, 109, 177, 216, 70, 183, 142, 31, 252, 142, 0, 0, 1, 228, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 129, 79, 1, 9, 230, 105, 65, 230, 141, 182, 24, 27, 16, 35, 39, 28, 0, 0, 1, 144, 7, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 215, 204, 51, 17, 142, 220, 76, 120, 140, 230, 249, 238, 88, 171, 55, 182, 0, 0, 1, 190, 9, 4, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 5, 71, 114, 101, 101, 110, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 6, 121, 101, 108, 108, 111, 119, 8, 0, 4, 116, 101, 120, 116, 0, 13, 32, 69, 110, 101, 114, 103, 121, 32, 83, 119, 111, 114, 100, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 13, 2, 2, 23, 105, 111, 110, 58, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 95, 100, 97, 109, 97, 103, 101, 64, 24, 0, 0, 0, 0, 0, 0, 0, 1, 4, 22, 105, 111, 110, 58, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 95, 115, 112, 101, 101, 100, 63, 252, 204, 204, 204, 204, 204, 205, 0, 1, 1, 7, 50, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 119, 101, 97, 112, 111, 110, 47, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 47, 103, 114, 101, 101, 110, 95, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 72, 52, 170, 201, 22, 92, 65, 184, 150, 136, 65, 82, 84, 115, 106, 113, 8, 0, 14, 105, 111, 110, 58, 99, 117, 115, 116, 111, 109, 105, 116, 101, 109, 0, 18, 69, 78, 69, 82, 71, 89, 95, 83, 87, 79, 82, 68, 95, 71, 82, 69, 69, 78, 0, 0, 1, 136, 2, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 0, 165, 77, 13, 179, 51, 70, 68, 191, 96, 26, 204, 238, 96, 249, 216, 0, 0, 1, 159, 9, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 194, 171, 221, 186, 156, 251, 64, 2, 133, 121, 107, 227, 126, 27, 88, 6, 0, 0, 1, 128, 6, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 183, 245, 245, 213, 233, 254, 75, 183, 157, 222, 154, 9, 0, 186, 209, 255, 0, 0, 1, 131, 9, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 48, 31, 245, 210, 195, 183, 77, 84, 130, 121, 149, 159, 163, 96, 14, 174, 0, 0, 1, 180, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 236, 182, 64, 231, 198, 112, 78, 24, 128, 144, 124, 223, 190, 183, 218, 155, 0, 0, 1, 153, 7, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 24, 101, 83, 78, 117, 67, 77, 192, 173, 51, 135, 133, 24, 84, 180, 243, 0, 0, 1, 168, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 121, 78, 175, 38, 3, 164, 66, 129, 157, 35, 76, 224, 199, 236, 82, 219, 0, 0, 1, 160, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 63, 89, 122, 3, 188, 16, 76, 29, 137, 182, 222, 54, 115, 93, 215, 85, 0, 0, 1, 161, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 68, 122, 30, 52, 205, 241, 66, 229, 162, 100, 143, 216, 152, 182, 103, 235, 0, 0, 1, 199, 2, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 234, 252, 235, 31, 201, 181, 70, 138, 134, 166, 65, 26, 173, 44, 174, 189, 0, 0, 1, 245, 1, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 110, 110, 28, 171, 11, 212, 67, 199, 189, 34, 188, 84, 105, 66, 42, 131, 0, 0, 1, 229, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 203, 97, 235, 205, 232, 71, 68, 32, 164, 18, 197, 153, 84, 138, 196, 239, 0, 0, 0, 1, 141, 4, 0, 0, 1, 204, 4, 0, 0, 1, 161, 2, 0, 0, 1, 155, 3, 0, 0, 3, 220, 3, 0, 0, 1, 201, 3, 0, 0, 1, 207, 3, 0, 0, 1, 197, 3, 0, 0, 1, 202, 3, 0, 0, 1, 199, 3, 0, 0, 1, 157, 5, 0, 0, 1, 151, 5, 0, 0, 1, 169, 2, 0, 0, 1, 90, 0, 0, 1, 193, 1, 0, 0, 1, 92, 0, 0, 1, 205, 3, 0, 0, 0, 0, 1, 162, 6, 0, 0, 1, 162, 6, 0, 0, 1, 251, 6, 0, 0, 0, 1, 214, 7, 0, 0, 0, 1, 183, 5, 0, 0, 1, 212, 6, 0, 0, 1, 213, 7, 0, 0, 1, 244, 5, 0, 0, 1, 159, 5, 0, 0, 1, 202, 4, 0, 0, 1, 142, 5, 0, 0, 0, 1, 194, 4, 0, 0, 0, 0]; - let mut buf = Cursor::new(contents.as_slice()); - let packet = ClientboundContainerSetContent::azalea_read(&mut buf).unwrap(); - println!("{:?}", packet); - - assert_eq!(buf.position(), contents.len() as u64); - - let mut re_encoded = Vec::new(); - packet.write(&mut re_encoded).unwrap(); - - // TODO: make FormattedText re-encode to the same bytes and then - // uncomment the code below - - // assert_eq!(buf, contents); - - // let mut re_decoded = Cursor::new(re_encoded.as_slice()); - // let re_decoded_packet = - // ClientboundContainerSetContent::azalea_read(&mut - // re_decoded).unwrap(); println!("{:?}", packet); - - // assert_eq!(re_decoded.position(), re_encoded.len() as u64); - - // assert_eq!(packet, re_decoded_packet); - } - - #[test] - fn test_read_hypixel_container_set_content() { - #[rustfmt::skip] - let contents = [0, 1, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 193, 7, 3, 0, 13, 0, 1, 5, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 10, 71, 97, 109, 101, 32, 77, 101, 110, 117, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 13, 40, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 41, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 8, 1, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 38, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 32, 116, 111, 32, 98, 114, 105, 110, 103, 32, 117, 112, 32, 116, 104, 101, 32, 71, 97, 109, 101, 32, 77, 101, 110, 117, 33, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 1, 132, 9, 3, 0, 5, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 11, 77, 121, 32, 80, 114, 111, 102, 105, 108, 101, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 13, 40, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 41, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 8, 2, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 48, 82, 105, 103, 104, 116, 45, 99, 108, 105, 99, 107, 32, 116, 111, 32, 98, 114, 111, 119, 115, 101, 32, 113, 117, 101, 115, 116, 115, 44, 32, 118, 105, 101, 119, 32, 97, 99, 104, 105, 101, 118, 101, 109, 101, 110, 116, 115, 44, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 35, 97, 99, 116, 105, 118, 97, 116, 101, 32, 78, 101, 116, 119, 111, 114, 107, 32, 66, 111, 111, 115, 116, 101, 114, 115, 32, 97, 110, 100, 32, 109, 111, 114, 101, 33, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 57, 1, 9, 76, 105, 108, 77, 97, 110, 77, 97, 114, 1, 128, 85, 54, 33, 54, 28, 66, 45, 141, 149, 252, 101, 48, 182, 236, 157, 1, 8, 116, 101, 120, 116, 117, 114, 101, 115, 156, 3, 101, 119, 111, 103, 73, 67, 74, 48, 97, 87, 49, 108, 99, 51, 82, 104, 98, 88, 65, 105, 73, 68, 111, 103, 77, 84, 99, 122, 79, 68, 65, 119, 77, 106, 69, 53, 77, 122, 77, 52, 77, 121, 119, 75, 73, 67, 65, 105, 99, 72, 74, 118, 90, 109, 108, 115, 90, 85, 108, 107, 73, 105, 65, 54, 73, 67, 73, 52, 77, 68, 85, 49, 77, 122, 89, 121, 77, 84, 77, 50, 77, 87, 77, 48, 77, 106, 74, 107, 79, 71, 81, 53, 78, 87, 90, 106, 78, 106, 85, 122, 77, 71, 73, 50, 90, 87, 77, 53, 90, 67, 73, 115, 67, 105, 65, 103, 73, 110, 66, 121, 98, 50, 90, 112, 98, 71, 86, 79, 89, 87, 49, 108, 73, 105, 65, 54, 73, 67, 74, 77, 97, 87, 120, 78, 89, 87, 53, 78, 89, 88, 73, 105, 76, 65, 111, 103, 73, 67, 74, 122, 97, 87, 100, 117, 89, 88, 82, 49, 99, 109, 86, 83, 90, 88, 70, 49, 97, 88, 74, 108, 90, 67, 73, 103, 79, 105, 66, 48, 99, 110, 86, 108, 76, 65, 111, 103, 73, 67, 74, 48, 90, 88, 104, 48, 100, 88, 74, 108, 99, 121, 73, 103, 79, 105, 66, 55, 67, 105, 65, 103, 73, 67, 65, 105, 85, 48, 116, 74, 84, 105, 73, 103, 79, 105, 66, 55, 67, 105, 65, 103, 73, 67, 65, 103, 73, 67, 74, 49, 99, 109, 119, 105, 73, 68, 111, 103, 73, 109, 104, 48, 100, 72, 65, 54, 76, 121, 57, 48, 90, 88, 104, 48, 100, 88, 74, 108, 99, 121, 53, 116, 97, 87, 53, 108, 89, 51, 74, 104, 90, 110, 81, 117, 98, 109, 86, 48, 76, 51, 82, 108, 101, 72, 82, 49, 99, 109, 85, 118, 78, 122, 107, 53, 77, 106, 81, 120, 77, 122, 107, 52, 77, 68, 99, 121, 78, 87, 85, 120, 90, 109, 81, 52, 90, 109, 89, 53, 90, 68, 81, 53, 77, 106, 69, 50, 89, 50, 69, 52, 90, 71, 73, 120, 78, 109, 73, 119, 77, 106, 69, 50, 89, 50, 74, 108, 77, 84, 78, 104, 90, 87, 77, 50, 77, 87, 89, 53, 77, 109, 69, 50, 77, 68, 74, 109, 89, 109, 82, 109, 89, 109, 77, 121, 78, 83, 73, 75, 73, 67, 65, 103, 73, 72, 48, 75, 73, 67, 66, 57, 67, 110, 48, 61, 1, 172, 5, 65, 102, 47, 110, 109, 50, 97, 51, 72, 111, 56, 79, 118, 78, 65, 119, 70, 102, 56, 74, 105, 83, 117, 52, 52, 55, 86, 73, 73, 104, 70, 77, 103, 116, 67, 120, 79, 67, 113, 82, 105, 65, 51, 48, 104, 86, 84, 119, 118, 83, 112, 50, 118, 81, 121, 55, 49, 97, 121, 70, 90, 48, 87, 111, 55, 65, 109, 71, 84, 53, 119, 83, 43, 106, 48, 114, 102, 97, 100, 117, 108, 114, 106, 79, 109, 104, 67, 70, 71, 71, 66, 50, 51, 87, 89, 101, 111, 102, 76, 108, 57, 86, 101, 109, 56, 98, 67, 81, 115, 110, 112, 73, 43, 43, 47, 101, 48, 79, 89, 99, 89, 89, 55, 118, 102, 47, 83, 82, 111, 66, 80, 47, 75, 99, 48, 105, 57, 55, 114, 120, 79, 52, 55, 82, 113, 57, 107, 71, 73, 111, 105, 75, 69, 83, 72, 81, 104, 107, 83, 78, 47, 115, 106, 110, 106, 108, 98, 56, 115, 101, 76, 74, 72, 98, 53, 113, 53, 97, 69, 108, 53, 73, 67, 83, 73, 111, 122, 75, 65, 71, 98, 111, 57, 99, 103, 49, 74, 50, 66, 108, 87, 65, 111, 74, 78, 113, 101, 56, 101, 65, 100, 51, 110, 113, 109, 72, 101, 77, 105, 120, 77, 89, 97, 69, 106, 52, 113, 65, 72, 122, 110, 77, 85, 121, 98, 104, 68, 56, 107, 53, 112, 118, 83, 57, 76, 108, 115, 98, 65, 109, 106, 51, 88, 70, 120, 56, 117, 80, 78, 122, 108, 53, 55, 103, 85, 53, 47, 68, 101, 106, 49, 101, 72, 68, 69, 79, 50, 51, 100, 84, 88, 114, 74, 121, 108, 71, 116, 78, 56, 74, 82, 102, 115, 106, 83, 47, 76, 109, 112, 87, 55, 52, 121, 70, 117, 105, 118, 74, 71, 71, 107, 52, 74, 55, 109, 97, 55, 71, 76, 108, 77, 82, 107, 69, 115, 101, 122, 71, 52, 51, 57, 50, 47, 105, 109, 69, 97, 101, 77, 81, 57, 108, 55, 107, 100, 89, 85, 67, 89, 116, 79, 122, 89, 90, 82, 47, 77, 77, 53, 82, 97, 51, 71, 72, 65, 117, 102, 86, 90, 79, 65, 55, 100, 49, 114, 122, 77, 47, 54, 113, 106, 120, 55, 110, 105, 117, 117, 56, 57, 82, 120, 47, 66, 65, 99, 84, 72, 79, 103, 79, 66, 47, 79, 86, 90, 81, 119, 89, 90, 105, 110, 111, 47, 104, 109, 120, 78, 88, 98, 51, 81, 106, 118, 71, 78, 108, 113, 111, 69, 81, 102, 111, 57, 68, 68, 84, 121, 66, 97, 113, 77, 69, 66, 105, 87, 68, 103, 89, 67, 83, 54, 107, 108, 55, 83, 68, 122, 43, 55, 104, 79, 121, 104, 70, 70, 49, 101, 66, 103, 70, 119, 75, 65, 68, 97, 108, 43, 88, 78, 98, 78, 85, 100, 107, 97, 86, 115, 100, 73, 97, 114, 85, 79, 88, 98, 89, 104, 83, 114, 114, 76, 87, 118, 79, 99, 87, 97, 100, 114, 82, 74, 84, 85, 82, 77, 82, 115, 74, 118, 52, 98, 53, 57, 118, 119, 88, 111, 84, 87, 52, 43, 48, 115, 51, 80, 83, 110, 43, 69, 110, 100, 84, 114, 115, 74, 121, 106, 87, 69, 49, 100, 76, 87, 98, 82, 75, 121, 47, 51, 120, 117, 100, 90, 118, 106, 116, 115, 111, 109, 106, 54, 82, 110, 83, 76, 114, 47, 81, 55, 77, 109, 54, 100, 76, 51, 102, 83, 102, 122, 57, 115, 89, 86, 83, 118, 67, 88, 74, 84, 52, 71, 77, 52, 112, 108, 82, 78, 78, 78, 55, 47, 49, 108, 110, 74, 115, 99, 106, 114, 108, 120, 81, 48, 84, 110, 85, 74, 116, 111, 53, 78, 49, 104, 56, 97, 79, 88, 78, 98, 77, 72, 83, 87, 104, 72, 56, 76, 121, 43, 88, 74, 116, 117, 111, 101, 114, 86, 72, 113, 108, 83, 110, 119, 119, 70, 74, 101, 72, 55, 66, 74, 66, 47, 67, 43, 118, 101, 88, 50, 56, 116, 85, 56, 61, 0, 0, 0, 0, 0, 1, 230, 7, 3, 0, 13, 0, 1, 5, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 3, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 8, 0, 4, 116, 101, 120, 116, 0, 9, 80, 108, 97, 121, 101, 114, 115, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 8, 86, 105, 115, 105, 98, 108, 101, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 13, 40, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 41, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 8, 1, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 40, 82, 105, 103, 104, 116, 45, 99, 108, 105, 99, 107, 32, 116, 111, 32, 116, 111, 103, 103, 108, 101, 32, 112, 108, 97, 121, 101, 114, 32, 118, 105, 115, 105, 98, 105, 108, 105, 116, 121, 33, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 1, 137, 9, 3, 0, 13, 0, 1, 5, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 15, 76, 111, 98, 98, 121, 32, 83, 101, 108, 101, 99, 116, 111, 114, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 13, 40, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 41, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 8, 2, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 48, 82, 105, 103, 104, 116, 45, 99, 108, 105, 99, 107, 32, 116, 111, 32, 115, 119, 105, 116, 99, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 108, 111, 98, 98, 105, 101, 115, 33, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 35, 85, 115, 101, 32, 116, 104, 105, 115, 32, 116, 111, 32, 115, 116, 97, 121, 32, 119, 105, 116, 104, 32, 121, 111, 117, 114, 32, 102, 114, 105, 101, 110, 100, 115, 46, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 0]; - let mut buf = Cursor::new(contents.as_slice()); - let packet = ClientboundContainerSetContent::azalea_read(&mut buf).unwrap(); - println!("{:?}", packet); - - assert_eq!(buf.position(), contents.len() as u64); - - // contains FormattedText which doesn't re-encode to the same bytes - // let mut buf = Vec::new(); - // packet.write(&mut buf).unwrap(); - // assert_eq!(buf, contents); - } } diff --git a/azalea-protocol/src/packets/game/c_container_set_slot.rs b/azalea-protocol/src/packets/game/c_container_set_slot.rs index d150fc60..20df5b06 100755 --- a/azalea-protocol/src/packets/game/c_container_set_slot.rs +++ b/azalea-protocol/src/packets/game/c_container_set_slot.rs @@ -11,27 +11,3 @@ pub struct ClientboundContainerSetSlot { pub slot: u16, pub item_stack: ItemStack, } - -#[cfg(test)] -mod test { - use std::io::Cursor; - - use azalea_buf::AzaleaRead; - - use crate::packets::game::ClientboundContainerSetSlot; - - #[test] - fn test_read_container_set_slot() { - tracing_subscriber::fmt::try_init().ok(); - - #[rustfmt::skip] - let contents = [ - 0, 2, 0, 39, 1, 246, 8, 3, 0, 8, 1, 10, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 47, 89, 111, 117, 114, 32, 106, 111, 117, 114, 110, 97, 108, 44, 32, 99, 111, 110, 116, 97, 105, 110, 105, 110, 103, 32, 97, 108, 108, 32, 113, 117, 101, 115, 116, 32, 105, 110, 102, 111, 114, 109, 97, 116, 105, 111, 110, 115, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 14, 1, 191, 128, 0, 0, 0, 0, 0, 44, 7, 74, 111, 117, 114, 110, 97, 108, 0, 12, 65, 115, 116, 114, 97, 108, 99, 104, 114, 111, 109, 97, 0, 2, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 20, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 1, 0, 10, 117, 110, 100, 101, 114, 108, 105, 110, 101, 100, 0, 1, 0, 4, 98, 111, 108, 100, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 1, 0, 10, 111, 98, 102, 117, 115, 99, 97, 116, 101, 100, 0, 1, 0, 13, 115, 116, 114, 105, 107, 101, 116, 104, 114, 111, 117, 103, 104, 0, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 12, 81, 117, 101, 115, 116, 32, 83, 116, 97, 116, 117, 115, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 3, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 9, 76, 111, 99, 107, 101, 100, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 17, 67, 97, 110, 32, 98, 101, 32, 83, 116, 97, 114, 116, 101, 100, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 111, 108, 100, 8, 0, 4, 116, 101, 120, 116, 0, 10, 83, 116, 97, 114, 116, 101, 100, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 19, 70, 105, 110, 105, 115, 104, 101, 100, 47, 67, 111, 111, 108, 100, 111, 119, 110, 10, 10, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 10, 81, 117, 101, 115, 116, 32, 76, 105, 115, 116, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 8, 100, 97, 114, 107, 95, 114, 101, 100, 8, 0, 4, 116, 101, 120, 116, 0, 3, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 15, 67, 104, 101, 116, 104, 32, 67, 111, 108, 108, 101, 99, 116, 111, 114, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 8, 100, 97, 114, 107, 95, 114, 101, 100, 8, 0, 4, 116, 101, 120, 116, 0, 1, 10, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 17, 82, 101, 112, 101, 97, 116, 97, 98, 108, 101, 32, 81, 117, 101, 115, 116, 115, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 8, 100, 97, 114, 107, 95, 114, 101, 100, 8, 0, 4, 116, 101, 120, 116, 0, 3, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 16, 68, 97, 105, 108, 121, 32, 67, 111, 109, 109, 105, 115, 115, 105, 111, 110, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 8, 100, 97, 114, 107, 95, 114, 101, 100, 8, 0, 4, 116, 101, 120, 116, 0, 1, 10, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 12, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 11, 49, 48, 46, 48, 50, 46, 50, 48, 50, 53, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 111, 108, 100, 8, 0, 4, 116, 101, 120, 116, 0, 6, 49, 55, 58, 48, 48, 10, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 16, 68, 97, 105, 108, 121, 32, 67, 111, 109, 109, 105, 115, 115, 105, 111, 110, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 11, 10, 32, 32, 84, 97, 108, 107, 32, 116, 111, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 11, 65, 113, 117, 97, 10, 75, 121, 114, 101, 108, 108, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 4, 32, 97, 116, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 22, 91, 75, 114, 105, 111, 58, 10, 52, 52, 56, 57, 44, 32, 51, 54, 44, 32, 49, 51, 49, 52, 93, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 7, 46, 10, 32, 32, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 9, 82, 101, 119, 97, 114, 100, 115, 58, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 6, 36, 53, 48, 48, 48, 10, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 0 - ]; - let mut buf = Cursor::new(contents.as_slice()); - let packet = ClientboundContainerSetSlot::azalea_read(&mut buf).unwrap(); - println!("{:?}", packet); - - assert_eq!(buf.position(), contents.len() as u64); - } -} diff --git a/azalea-protocol/src/packets/game/c_disguised_chat.rs b/azalea-protocol/src/packets/game/c_disguised_chat.rs index 90dc5d64..97157089 100644 --- a/azalea-protocol/src/packets/game/c_disguised_chat.rs +++ b/azalea-protocol/src/packets/game/c_disguised_chat.rs @@ -1,7 +1,7 @@ use azalea_buf::AzBuf; use azalea_chat::{ - translatable_component::{StringOrComponent, TranslatableComponent}, FormattedText, + translatable_component::{StringOrComponent, TranslatableComponent}, }; use azalea_protocol_macros::ClientboundGamePacket; @@ -25,8 +25,6 @@ impl ClientboundDisguisedChat { let content = self.message.clone(); let target = self.chat_type.target_name.clone(); - let translation_key = self.chat_type.chat_type.chat_translation_key(); - let mut args = vec![ StringOrComponent::FormattedText(sender), StringOrComponent::FormattedText(content), @@ -35,6 +33,7 @@ impl ClientboundDisguisedChat { args.push(StringOrComponent::FormattedText(target)); } + let translation_key = self.chat_type.translation_key(); let component = TranslatableComponent::new(translation_key.to_string(), args); FormattedText::Translatable(component) diff --git a/azalea-protocol/src/packets/game/c_level_chunk_with_light.rs b/azalea-protocol/src/packets/game/c_level_chunk_with_light.rs index c27c24a9..ad07f01e 100755 --- a/azalea-protocol/src/packets/game/c_level_chunk_with_light.rs +++ b/azalea-protocol/src/packets/game/c_level_chunk_with_light.rs @@ -2,6 +2,7 @@ use std::sync::Arc; use azalea_buf::AzBuf; use azalea_protocol_macros::ClientboundGamePacket; +use azalea_world::heightmap::HeightmapKind; use simdnbt::owned::Nbt; use super::c_light_update::ClientboundLightUpdatePacketData; @@ -17,7 +18,7 @@ pub struct ClientboundLevelChunkWithLight { #[derive(Clone, Debug, AzBuf)] pub struct ClientboundLevelChunkPacketData { - pub heightmaps: Nbt, + pub heightmaps: Vec<(HeightmapKind, Box<[u64]>)>, /// The raw chunk sections. /// /// We can't parse the data in azalea-protocol because it depends on context @@ -36,62 +37,3 @@ pub struct BlockEntity { pub kind: azalea_registry::BlockEntityKind, pub data: Nbt, } - -#[cfg(test)] -mod tests { - use std::{io::Cursor, ops::Deref}; - - use azalea_buf::AzaleaRead; - use azalea_world::Chunk; - use simdnbt::owned::BaseNbt; - - use super::*; - - #[test] - fn test_c_level_chunk_with_light_packet() { - #[rustfmt::skip] - let bytes = [ - 255, 255, 255, 253, 0, 0, 0, 1, 10, 12, 0, 15, 77, 79, 84, 73, 79, 78, 95, 66, 76, 79, 67, 75, 73, 78, 71, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 240, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 195, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 33, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 37, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 2, 0, 137, 51, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 2, 0, 137, 51, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 4, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 32, 67, 101, 0, 0, 0, 0, 0, 32, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 33, 67, 101, 135, 169, 203, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 33, 67, 101, 135, 169, 203, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ]; - - let packet = ClientboundLevelChunkWithLight::azalea_read(&mut Cursor::new(&bytes)).unwrap(); - - let heightmaps_nbt = &packet.chunk_data.heightmaps; - // necessary to make the unwrap_or work - let empty_nbt = BaseNbt::default(); - let heightmaps = heightmaps_nbt.unwrap_or(&empty_nbt).deref(); - - let chunk = Chunk::read_with_dimension_height( - &mut Cursor::new(&packet.chunk_data.data), - 256, - 0, - heightmaps, - ) - .unwrap(); - - assert_eq!(chunk.sections.len(), 16); - } - - #[test] - fn test_hypixel_chunk_packet() { - #[rustfmt::skip] - let bytes = [255, 255, 255, 249, 255, 255, 255, 250, 10, 12, 0, 15, 77, 79, 84, 73, 79, 78, 95, 66, 76, 79, 67, 75, 73, 78, 71, 0, 0, 0, 37, 25, 140, 230, 131, 97, 176, 216, 106, 26, 12, 198, 115, 57, 156, 204, 102, 25, 205, 38, 179, 81, 160, 212, 104, 25, 204, 230, 99, 49, 152, 204, 102, 26, 77, 38, 83, 81, 160, 206, 103, 25, 140, 198, 99, 49, 152, 204, 103, 23, 205, 38, 115, 57, 156, 206, 103, 25, 140, 198, 99, 49, 152, 204, 102, 25, 204, 230, 115, 57, 152, 204, 102, 25, 140, 198, 99, 49, 152, 202, 104, 25, 204, 198, 99, 49, 152, 204, 102, 25, 140, 198, 99, 25, 156, 206, 103, 25, 140, 198, 99, 49, 152, 204, 102, 25, 64, 38, 115, 57, 152, 204, 102, 25, 140, 198, 99, 49, 152, 204, 102, 25, 204, 198, 99, 49, 152, 204, 102, 25, 140, 198, 99, 49, 152, 202, 1, 25, 140, 198, 99, 49, 152, 204, 102, 25, 205, 6, 99, 16, 4, 206, 102, 25, 140, 198, 99, 49, 152, 204, 102, 26, 12, 192, 19, 49, 152, 204, 102, 25, 140, 198, 99, 49, 160, 210, 105, 0, 76, 198, 99, 49, 152, 204, 102, 25, 140, 198, 147, 73, 164, 208, 103, 25, 140, 198, 99, 49, 152, 204, 102, 26, 77, 38, 131, 65, 156, 2, 103, 25, 204, 198, 99, 49, 152, 204, 103, 26, 12, 224, 16, 9, 160, 206, 103, 25, 140, 198, 83, 41, 156, 206, 104, 0, 64, 38, 163, 73, 156, 206, 103, 24, 204, 70, 99, 57, 156, 2, 1, 26, 77, 6, 115, 57, 152, 204, 101, 0, 64, 32, 16, 8, 4, 2, 1, 25, 204, 198, 96, 8, 4, 2, 97, 0, 64, 32, 16, 8, 4, 210, 103, 0, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 3, 49, 156, 206, 101, 12, 0, 13, 87, 79, 82, 76, 68, 95, 83, 85, 82, 70, 65, 67, 69, 0, 0, 0, 37, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 8, 4, 2, 1, 0, 0, 208, 73, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 0, 189, 46, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 4, 4, 0, 189, 46, 177, 16, 180, 79, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 32, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 35, 35, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 48, 0, 0, 0, 0, 0, 1, 35, 50, 0, 0, 0, 0, 0, 0, 35, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 48, 0, 0, 0, 0, 0, 0, 35, 51, 0, 0, 0, 0, 0, 1, 35, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 19, 4, 8, 0, 177, 16, 189, 46, 180, 79, 1, 253, 1, 184, 79, 176, 79, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 19, 49, 0, 0, 0, 0, 0, 2, 19, 51, 0, 0, 0, 0, 0, 0, 19, 16, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 51, 49, 0, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 0, 3, 48, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 16, 0, 0, 0, 0, 0, 0, 51, 49, 0, 0, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0, 0, 2, 19, 51, 48, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 0, 0, 0, 0, 0, 0, 51, 49, 0, 0, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0, 0, 2, 51, 51, 16, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 32, 1, 48, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0, 0, 2, 51, 51, 16, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 32, 1, 48, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 49, 0, 0, 0, 0, 0, 0, 52, 51, 48, 0, 0, 0, 0, 2, 51, 67, 48, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0, 0, 32, 1, 68, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 2, 51, 51, 16, 0, 0, 0, 0, 2, 51, 51, 48, 0, 0, 0, 0, 0, 51, 68, 64, 0, 0, 0, 0, 32, 19, 64, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 3, 48, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 68, 64, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 2, 51, 51, 48, 0, 0, 0, 0, 2, 51, 51, 48, 0, 0, 0, 0, 0, 51, 68, 64, 0, 0, 0, 0, 32, 51, 68, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 3, 16, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 52, 0, 0, 0, 0, 0, 0, 67, 51, 48, 0, 0, 0, 0, 2, 67, 51, 48, 0, 0, 0, 0, 2, 52, 51, 51, 0, 0, 0, 0, 2, 52, 68, 64, 0, 0, 0, 0, 32, 52, 68, 0, 0, 0, 0, 0, 32, 4, 68, 0, 0, 0, 4, 0, 32, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 51, 49, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 67, 51, 48, 0, 0, 0, 0, 0, 68, 51, 51, 0, 0, 0, 0, 2, 52, 67, 51, 0, 0, 0, 0, 34, 52, 68, 51, 0, 0, 0, 0, 32, 52, 68, 64, 0, 0, 64, 0, 32, 4, 68, 0, 0, 0, 68, 0, 32, 0, 64, 0, 0, 68, 51, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 48, 0, 0, 0, 0, 0, 3, 51, 48, 0, 0, 0, 0, 0, 51, 51, 48, 0, 0, 0, 0, 0, 52, 51, 51, 0, 0, 0, 0, 2, 52, 67, 51, 48, 0, 0, 0, 34, 52, 68, 51, 48, 0, 0, 0, 32, 52, 68, 68, 0, 4, 64, 0, 32, 52, 68, 64, 0, 4, 67, 0, 32, 0, 68, 0, 0, 68, 51, 48, 0, 0, 0, 0, 4, 67, 51, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 3, 48, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 48, 0, 0, 0, 0, 0, 3, 51, 48, 0, 0, 0, 0, 0, 51, 51, 51, 0, 0, 0, 0, 0, 51, 67, 51, 48, 0, 0, 0, 2, 51, 67, 51, 51, 0, 0, 0, 2, 52, 68, 51, 51, 51, 48, 0, 32, 52, 68, 68, 48, 3, 68, 0, 32, 52, 68, 64, 0, 68, 67, 0, 32, 68, 68, 64, 4, 68, 51, 48, 0, 0, 4, 64, 4, 68, 51, 48, 0, 0, 0, 0, 0, 68, 51, 0, 0, 0, 0, 0, 0, 68, 48, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 52, 64, 0, 0, 0, 0, 0, 51, 52, 68, 0, 0, 0, 0, 0, 51, 52, 51, 51, 0, 0, 0, 0, 51, 68, 51, 51, 48, 0, 0, 2, 51, 68, 51, 51, 51, 0, 0, 2, 52, 68, 67, 51, 51, 52, 0, 32, 52, 68, 68, 51, 51, 68, 0, 32, 52, 68, 68, 68, 68, 67, 48, 32, 52, 68, 68, 68, 68, 51, 48, 0, 0, 68, 68, 4, 68, 51, 48, 0, 0, 4, 0, 0, 68, 51, 0, 0, 0, 0, 0, 0, 68, 64, 0, 0, 0, 0, 0, 34, 4, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 51, 51, 48, 0, 0, 0, 0, 0, 51, 52, 68, 48, 0, 0, 0, 0, 51, 52, 68, 67, 0, 0, 0, 2, 51, 68, 68, 51, 51, 0, 0, 2, 51, 68, 68, 51, 51, 48, 0, 2, 52, 68, 68, 51, 51, 52, 0, 32, 68, 68, 68, 67, 51, 68, 0, 32, 52, 68, 68, 68, 68, 68, 64, 32, 51, 68, 68, 68, 68, 67, 48, 0, 51, 68, 68, 68, 68, 67, 48, 0, 0, 51, 48, 4, 68, 67, 0, 0, 0, 51, 48, 0, 68, 64, 0, 0, 0, 0, 0, 34, 4, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 0, 0, 0, 0, 51, 67, 51, 51, 0, 0, 0, 0, 51, 68, 68, 51, 48, 6, 0, 2, 51, 68, 68, 67, 51, 0, 0, 2, 52, 68, 68, 67, 51, 52, 96, 2, 68, 68, 68, 67, 51, 68, 0, 32, 68, 68, 68, 68, 68, 68, 0, 32, 52, 68, 68, 68, 68, 68, 64, 32, 51, 68, 68, 68, 68, 68, 64, 0, 51, 68, 68, 68, 68, 68, 0, 0, 3, 51, 52, 68, 68, 68, 0, 0, 0, 51, 48, 4, 68, 64, 0, 0, 0, 3, 0, 34, 4, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 51, 48, 0, 0, 0, 0, 0, 68, 51, 48, 3, 0, 6, 0, 0, 52, 67, 51, 51, 48, 7, 0, 0, 52, 68, 68, 51, 49, 7, 0, 0, 52, 68, 68, 67, 51, 51, 112, 2, 68, 68, 68, 68, 51, 51, 0, 2, 68, 68, 68, 68, 68, 67, 48, 32, 68, 68, 68, 68, 68, 67, 48, 32, 52, 68, 68, 64, 4, 68, 48, 32, 51, 68, 68, 68, 68, 68, 64, 0, 51, 68, 68, 68, 68, 68, 64, 0, 51, 51, 52, 68, 68, 68, 0, 0, 3, 51, 51, 68, 68, 68, 0, 0, 0, 51, 0, 34, 68, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 75, 4, 9, 0, 176, 79, 180, 79, 1, 184, 79, 177, 16, 189, 46, 183, 79, 190, 46, 128, 2, 51, 34, 34, 34, 34, 1, 0, 0, 51, 34, 34, 34, 80, 4, 0, 0, 51, 50, 34, 34, 37, 0, 0, 0, 51, 51, 51, 34, 37, 32, 0, 0, 51, 51, 51, 50, 34, 34, 32, 6, 51, 51, 51, 51, 34, 34, 34, 6, 51, 51, 51, 51, 51, 50, 34, 96, 51, 51, 51, 51, 51, 50, 32, 96, 51, 51, 51, 51, 51, 51, 32, 96, 35, 51, 51, 51, 51, 51, 48, 0, 35, 51, 51, 51, 51, 51, 48, 0, 35, 51, 51, 51, 51, 51, 48, 0, 35, 34, 35, 102, 51, 51, 0, 0, 37, 82, 32, 102, 51, 48, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 50, 34, 34, 34, 81, 64, 0, 51, 50, 34, 34, 34, 80, 0, 0, 51, 51, 51, 34, 34, 80, 0, 0, 51, 51, 51, 51, 34, 35, 48, 0, 51, 51, 51, 51, 34, 35, 34, 6, 51, 51, 51, 51, 51, 50, 34, 6, 51, 51, 51, 51, 51, 50, 34, 96, 51, 51, 51, 51, 51, 50, 34, 96, 51, 51, 51, 51, 51, 51, 38, 96, 51, 51, 51, 51, 51, 51, 48, 0, 51, 51, 51, 51, 51, 51, 48, 0, 51, 51, 51, 51, 51, 51, 48, 0, 35, 51, 51, 102, 99, 51, 0, 0, 83, 51, 80, 102, 102, 48, 0, 0, 5, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, 34, 37, 3, 0, 51, 51, 51, 51, 34, 37, 83, 0, 51, 51, 51, 51, 50, 34, 51, 0, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 51, 51, 51, 6, 51, 51, 51, 51, 51, 51, 34, 6, 51, 51, 51, 51, 51, 51, 34, 96, 51, 51, 51, 51, 51, 51, 34, 96, 51, 51, 51, 51, 51, 51, 118, 0, 51, 51, 51, 51, 51, 51, 48, 0, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 51, 51, 51, 0, 35, 51, 51, 54, 99, 51, 48, 0, 35, 51, 80, 102, 6, 48, 0, 0, 35, 85, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, 50, 34, 51, 48, 51, 51, 51, 51, 50, 34, 51, 48, 51, 51, 51, 51, 51, 51, 51, 48, 51, 51, 51, 51, 51, 51, 51, 48, 51, 51, 51, 51, 51, 51, 51, 6, 51, 51, 51, 51, 51, 51, 51, 96, 51, 51, 51, 51, 51, 51, 51, 96, 51, 51, 51, 51, 51, 51, 119, 96, 51, 51, 51, 51, 51, 51, 119, 0, 51, 51, 51, 51, 51, 51, 119, 0, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 54, 102, 51, 48, 0, 51, 51, 53, 96, 0, 51, 0, 0, 115, 53, 80, 0, 0, 0, 0, 0, 119, 48, 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 51, 48, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 56, 51, 51, 51, 51, 51, 51, 51, 48, 51, 51, 51, 51, 51, 51, 51, 54, 51, 51, 51, 51, 51, 51, 51, 96, 51, 51, 51, 51, 51, 51, 51, 96, 51, 51, 51, 51, 51, 51, 55, 96, 51, 51, 51, 51, 51, 51, 119, 0, 51, 51, 51, 51, 51, 51, 55, 112, 51, 51, 51, 51, 51, 51, 55, 112, 51, 51, 51, 51, 51, 51, 51, 112, 51, 51, 51, 54, 103, 115, 48, 0, 51, 51, 51, 96, 7, 119, 0, 0, 119, 51, 80, 0, 0, 0, 0, 0, 119, 56, 0, 0, 0, 0, 0, 0, 51, 56, 51, 102, 104, 51, 51, 51, 51, 51, 54, 102, 104, 131, 115, 51, 51, 51, 102, 102, 102, 136, 119, 48, 51, 54, 102, 102, 102, 102, 136, 128, 51, 102, 102, 102, 102, 102, 102, 96, 51, 102, 102, 102, 102, 102, 102, 96, 56, 102, 102, 102, 102, 102, 102, 0, 56, 102, 102, 102, 102, 102, 102, 0, 136, 102, 102, 102, 102, 99, 56, 0, 136, 134, 102, 102, 102, 51, 55, 128, 56, 136, 102, 102, 104, 51, 55, 112, 51, 51, 136, 102, 103, 51, 119, 112, 51, 51, 56, 96, 7, 119, 119, 0, 51, 51, 136, 0, 8, 119, 0, 0, 119, 56, 128, 0, 0, 0, 0, 0, 135, 112, 0, 0, 0, 0, 0, 0, 55, 48, 102, 96, 0, 135, 115, 51, 119, 118, 102, 0, 0, 8, 119, 51, 54, 102, 102, 0, 0, 0, 135, 48, 54, 102, 96, 0, 0, 0, 0, 0, 102, 102, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 48, 0, 0, 0, 0, 0, 0, 51, 55, 0, 128, 0, 0, 0, 0, 51, 55, 128, 56, 136, 0, 0, 8, 119, 119, 128, 51, 136, 128, 0, 8, 135, 120, 0, 115, 136, 0, 0, 0, 136, 0, 0, 120, 128, 0, 0, 0, 0, 0, 0, 8, 128, 0, 0, 0, 0, 0, 0, 120, 128, 0, 0, 0, 8, 119, 51, 119, 0, 0, 0, 0, 0, 119, 56, 112, 0, 0, 0, 0, 0, 7, 48, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 131, 56, 0, 0, 0, 0, 0, 0, 51, 56, 0, 128, 0, 0, 0, 0, 55, 136, 0, 51, 0, 0, 0, 0, 8, 128, 0, 56, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 115, 51, 112, 0, 0, 0, 0, 0, 135, 48, 48, 0, 0, 0, 0, 0, 8, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 128, 0, 0, 0, 0, 0, 0, 136, 128, 0, 0, 0, 0, 0, 0, 136, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 51, 56, 128, 0, 0, 0, 0, 0, 3, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 48, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 4, 128, 16, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 128, 16, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 69, 3, 48, 222, 188, 154, 120, 102, 86, 4, 64, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 69, 3, 0, 222, 188, 154, 120, 102, 86, 4, 64, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 4, 64, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 4, 0, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 0, 0, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 128, 16, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 0, 0, 239, 205, 171, 137, 119, 103, 5, 0, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 2, 0, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 0, 0, 239, 205, 171, 137, 119, 103, 5, 80, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 53, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 103, 0, 0, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 53, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 103, 0, 0, 239, 205, 171, 137, 136, 120, 6, 96, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 0, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 53, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 103, 0, 0, 239, 205, 171, 137, 136, 120, 6, 96, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 5, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 103, 0, 0, 239, 205, 171, 137, 136, 120, 0, 96, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 153, 170, 154, 136, 136, 239, 205, 187, 160, 187, 171, 153, 153, 239, 221, 204, 0, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 5, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 7, 0, 0, 239, 205, 171, 137, 136, 120, 6, 0, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 11, 144, 170, 154, 136, 136, 239, 205, 11, 0, 187, 171, 153, 153, 239, 221, 204, 0, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 2, 0, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 5, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 7, 0, 0, 239, 205, 171, 137, 136, 120, 0, 0, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 11, 144, 170, 154, 136, 136, 239, 205, 11, 0, 187, 171, 153, 153, 239, 221, 12, 0, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 0, 0, 210, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 102, 0, 0, 0, 239, 205, 171, 137, 119, 7, 0, 0, 239, 205, 171, 137, 136, 120, 0, 0, 239, 205, 144, 136, 153, 137, 0, 112, 239, 205, 0, 0, 170, 154, 136, 136, 239, 205, 0, 0, 187, 171, 153, 153, 239, 221, 12, 0, 204, 188, 170, 170, 255, 238, 221, 192, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 0, 0, 213, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 0, 0, 0, 222, 188, 154, 120, 102, 0, 0, 0, 239, 205, 171, 137, 119, 0, 0, 0, 239, 205, 11, 120, 136, 8, 0, 0, 239, 205, 0, 135, 153, 137, 0, 112, 239, 205, 0, 0, 170, 154, 8, 136, 239, 205, 0, 0, 187, 171, 153, 153, 239, 221, 0, 0, 204, 188, 170, 170, 255, 238, 221, 192, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 4, 0, 17, 222, 188, 154, 120, 86, 4, 0, 16, 214, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 0, 0, 0, 222, 188, 154, 120, 6, 0, 0, 0, 239, 205, 171, 137, 7, 0, 0, 0, 239, 205, 11, 112, 135, 0, 0, 0, 239, 205, 0, 112, 152, 9, 0, 0, 239, 13, 0, 0, 169, 154, 0, 136, 239, 205, 0, 0, 176, 171, 153, 153, 239, 221, 0, 0, 204, 188, 170, 170, 255, 238, 13, 192, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 18, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 4, 0, 0, 215, 188, 154, 120, 86, 0, 0, 0, 222, 188, 154, 120, 6, 0, 0, 0, 222, 188, 154, 120, 0, 0, 0, 0, 239, 205, 11, 0, 0, 0, 0, 0, 239, 205, 0, 96, 7, 0, 0, 0, 239, 205, 0, 0, 152, 9, 0, 0, 239, 13, 0, 0, 160, 10, 0, 0, 239, 13, 0, 0, 176, 11, 144, 153, 239, 221, 0, 0, 204, 188, 170, 170, 255, 238, 13, 0, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 32, 1, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 0, 0, 0, 216, 188, 154, 120, 0, 0, 0, 0, 222, 188, 154, 8, 0, 0, 0, 0, 222, 188, 154, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 176, 0, 0, 153, 239, 221, 0, 0, 204, 188, 160, 170, 255, 238, 13, 0, 221, 205, 187, 187, 255, 255, 238, 208, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 1, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 6, 0, 0, 0, 217, 188, 154, 120, 0, 0, 0, 0, 222, 188, 154, 0, 0, 0, 0, 0, 222, 188, 10, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 221, 0, 0, 192, 12, 0, 170, 255, 238, 13, 0, 221, 13, 0, 187, 255, 255, 238, 208, 238, 222, 204, 204, 255, 255, 255, 63, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 0, 0, 0, 222, 188, 154, 120, 0, 0, 0, 0, 220, 188, 128, 7, 0, 0, 0, 0, 222, 188, 154, 0, 0, 0, 0, 0, 30, 12, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 63, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 221, 0, 0, 0, 0, 0, 160, 255, 238, 13, 0, 208, 13, 0, 187, 255, 255, 14, 208, 238, 222, 192, 204, 255, 255, 255, 111, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 128, 103, 64, 3, 0, 0, 222, 188, 128, 7, 0, 0, 0, 0, 239, 205, 112, 0, 0, 0, 0, 0, 222, 12, 0, 0, 0, 0, 0, 0, 35, 188, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 111, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 221, 0, 0, 0, 0, 0, 0, 255, 238, 0, 0, 0, 0, 0, 176, 255, 255, 14, 0, 227, 222, 0, 204, 255, 255, 255, 159, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 128, 16, 222, 188, 128, 0, 0, 0, 0, 0, 222, 188, 128, 6, 0, 0, 0, 0, 222, 188, 154, 0, 0, 0, 0, 0, 239, 205, 11, 0, 0, 0, 0, 0, 222, 12, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 159, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 255, 238, 0, 0, 13, 0, 0, 0, 255, 255, 14, 0, 230, 14, 0, 0, 255, 255, 255, 207, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 12, 0, 0, 0, 0, 0, 0, 222, 188, 10, 0, 0, 0, 0, 0, 222, 188, 10, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 255, 238, 0, 48, 3, 0, 0, 0, 255, 255, 14, 206, 57, 14, 0, 0, 255, 255, 255, 255, 255, 239, 0, 208, 255, 255, 255, 255, 255, 255, 238, 238, 222, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 255, 14, 0, 96, 6, 0, 0, 0, 255, 255, 14, 254, 108, 14, 0, 0, 255, 255, 255, 255, 255, 239, 0, 0, 255, 255, 255, 255, 255, 255, 238, 0, 14, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 255, 14, 0, 144, 9, 0, 0, 0, 255, 255, 0, 254, 159, 0, 0, 0, 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 255, 255, 14, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 255, 14, 0, 192, 12, 0, 0, 0, 255, 255, 0, 240, 207, 0, 0, 0, 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 192, 156, 0, 0, 0, 0, 0, 0, 192, 204, 9, 0, 0, 15, 0, 0, 204, 204, 153, 0, 0, 15, 0, 204, 204, 204, 156, 9, 0, 207, 204, 204, 204, 204, 204, 153, 0, 207, 204, 204, 204, 204, 204, 204, 0, 255, 204, 204, 204, 204, 204, 204, 0, 255, 204, 204, 204, 204, 204, 204, 0, 255, 0, 192, 204, 204, 204, 204, 0, 15, 0, 0, 204, 204, 204, 12, 0, 15, 0, 0, 192, 204, 204, 0, 0, 15, 0, 0, 192, 204, 0, 0, 0, 255, 0, 0, 240, 207, 0, 0, 0, 255, 255, 0, 240, 255, 0, 0, 0, 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 255, 207, 204, 15, 0, 0, 0, 240, 255, 255, 204, 12, 0, 15, 0, 255, 255, 255, 204, 204, 12, 255, 255, 255, 255, 255, 207, 204, 12, 255, 255, 255, 255, 255, 255, 204, 204, 255, 255, 255, 255, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 15, 255, 15, 240, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 15, 15, 0, 0, 240, 255, 255, 0, 0, 255, 0, 0, 240, 255, 15, 0, 0, 255, 255, 0, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 15, 240, 0, 0, 240, 255, 255, 255, 15, 0, 0, 0, 255, 255, 255, 255, 255, 0, 15, 240, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 15, 255, 15, 240, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 15, 15, 0, 255, 255, 255, 255, 255, 15, 15, 240, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 240, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 15, 15, 240, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 255, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 4, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - - let packet = ClientboundLevelChunkWithLight::azalea_read(&mut Cursor::new(&bytes)).unwrap(); - - let heightmaps_nbt = &packet.chunk_data.heightmaps; - // necessary to make the unwrap_or work - let empty_nbt = BaseNbt::default(); - let heightmaps = heightmaps_nbt.unwrap_or(&empty_nbt).deref(); - - let chunk = Chunk::read_with_dimension_height( - &mut Cursor::new(&packet.chunk_data.data), - 256, - 0, - heightmaps, - ) - .unwrap(); - - assert_eq!(chunk.sections.len(), 16); - } -} diff --git a/azalea-protocol/src/packets/game/c_player_chat.rs b/azalea-protocol/src/packets/game/c_player_chat.rs index 3628fa95..a9a57301 100644 --- a/azalea-protocol/src/packets/game/c_player_chat.rs +++ b/azalea-protocol/src/packets/game/c_player_chat.rs @@ -2,17 +2,20 @@ use std::io::{Cursor, Write}; use azalea_buf::{AzBuf, AzaleaRead, AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError}; use azalea_chat::{ - translatable_component::{StringOrComponent, TranslatableComponent}, FormattedText, + translatable_component::{StringOrComponent, TranslatableComponent}, }; use azalea_core::bitset::BitSet; use azalea_crypto::MessageSignature; use azalea_protocol_macros::ClientboundGamePacket; -use azalea_registry::{ChatType, OptionalRegistry}; +use azalea_registry::Holder; +use simdnbt::owned::NbtCompound; use uuid::Uuid; #[derive(Clone, Debug, AzBuf, ClientboundGamePacket, PartialEq)] pub struct ClientboundPlayerChat { + #[var] + pub global_index: u32, pub sender: Uuid, #[var] pub index: u32, @@ -52,34 +55,30 @@ pub enum FilterMask { PartiallyFiltered(BitSet), } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, AzBuf)] pub struct ChatTypeBound { - pub chat_type: ChatType, + pub chat_type: Holder<azalea_registry::ChatType, DirectChatType>, pub name: FormattedText, pub target_name: Option<FormattedText>, } -impl AzaleaRead for ChatTypeBound { - fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> { - let Some(chat_type) = OptionalRegistry::<ChatType>::azalea_read(buf)?.0 else { - return Err(BufReadError::Custom("ChatType cannot be None".to_owned())); - }; - let name = FormattedText::azalea_read(buf)?; - let target_name = Option::<FormattedText>::azalea_read(buf)?; - - Ok(ChatTypeBound { - chat_type, - name, - target_name, - }) - } + +#[derive(Clone, Debug, PartialEq, AzBuf)] +pub struct DirectChatType { + pub chat: ChatTypeDecoration, + pub narration: ChatTypeDecoration, } -impl AzaleaWrite for ChatTypeBound { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - OptionalRegistry(Some(self.chat_type)).azalea_write(buf)?; - self.name.azalea_write(buf)?; - self.target_name.azalea_write(buf)?; - Ok(()) - } +#[derive(Clone, Debug, PartialEq, AzBuf)] +pub struct ChatTypeDecoration { + pub translation_key: String, + pub parameters: Vec<ChatTypeDecorationParameter>, + pub style: NbtCompound, +} + +#[derive(Clone, Copy, Debug, PartialEq, AzBuf)] +pub enum ChatTypeDecorationParameter { + Sender = 0, + Target = 1, + Content = 2, } // must be in Client @@ -106,8 +105,6 @@ impl ClientboundPlayerChat { let content = self.content(); let target = self.chat_type.target_name.clone(); - let translation_key = self.chat_type.chat_type.chat_translation_key(); - let mut args = vec![ StringOrComponent::FormattedText(sender), StringOrComponent::FormattedText(content), @@ -116,12 +113,22 @@ impl ClientboundPlayerChat { args.push(StringOrComponent::FormattedText(target)); } + let translation_key = self.chat_type.translation_key(); let component = TranslatableComponent::new(translation_key.to_string(), args); FormattedText::Translatable(component) } } +impl ChatTypeBound { + pub fn translation_key<'a>(&'a self) -> &'a str { + match &self.chat_type { + Holder::Reference(r) => r.chat_translation_key(), + Holder::Direct(d) => d.chat.translation_key.as_str(), + } + } +} + impl AzaleaRead for PackedMessageSignature { fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> { let id = u32::azalea_read_var(buf)?; diff --git a/azalea-protocol/src/packets/game/c_set_equipment.rs b/azalea-protocol/src/packets/game/c_set_equipment.rs index 234de5d9..ad691d66 100755 --- a/azalea-protocol/src/packets/game/c_set_equipment.rs +++ b/azalea-protocol/src/packets/game/c_set_equipment.rs @@ -80,22 +80,3 @@ impl EquipmentSlot { } } } - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_hypixel_set_equipment() { - let mut cursor = Cursor::new( - [ - 230, 25, 0, 1, 224, 6, 2, 0, 3, 0, 22, 79, 0, 0, 0, 3, 0, 0, 0, 0, 0, - ] - .as_slice(), - ); - - let packet = ClientboundSetEquipment::azalea_read(&mut cursor).unwrap(); - println!("packet {packet:?}"); - assert_eq!(cursor.position(), cursor.get_ref().len() as u64); - } -} diff --git a/azalea-protocol/src/packets/game/c_add_experience_orb.rs b/azalea-protocol/src/packets/game/c_test_instance_block_status.rs index 295e1010..9dc958c1 100755..100644 --- a/azalea-protocol/src/packets/game/c_add_experience_orb.rs +++ b/azalea-protocol/src/packets/game/c_test_instance_block_status.rs @@ -1,12 +1,10 @@ use azalea_buf::AzBuf; +use azalea_chat::FormattedText; use azalea_core::position::Vec3; use azalea_protocol_macros::ClientboundGamePacket; -use azalea_world::MinecraftEntityId; #[derive(Clone, Debug, AzBuf, ClientboundGamePacket)] -pub struct ClientboundAddExperienceOrb { - #[var] - pub id: MinecraftEntityId, - pub pos: Vec3, - pub value: u16, +pub struct ClientboundTestInstanceBlockStatus { + pub status: FormattedText, + pub size: Option<Vec3>, } diff --git a/azalea-protocol/src/packets/game/c_update_advancements.rs b/azalea-protocol/src/packets/game/c_update_advancements.rs index cd0c0b98..1c645965 100755 --- a/azalea-protocol/src/packets/game/c_update_advancements.rs +++ b/azalea-protocol/src/packets/game/c_update_advancements.rs @@ -13,6 +13,7 @@ pub struct ClientboundUpdateAdvancements { pub added: Vec<AdvancementHolder>, pub removed: Vec<ResourceLocation>, pub progress: HashMap<ResourceLocation, AdvancementProgress>, + pub show_advancements: bool, } #[derive(Clone, Debug, AzBuf)] @@ -161,6 +162,7 @@ mod tests { )] .into_iter() .collect(), + show_advancements: false, }; let mut data = Vec::new(); diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index e9c9e2a1..aae840bc 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -7,124 +7,124 @@ declare_state_packets!(GamePacket, Clientbound => [ bundle_delimiter, // 0x00 add_entity, // 0x01 - add_experience_orb, // 0x02 - animate, // 0x03 - award_stats, // 0x04 - block_changed_ack, // 0x05 - block_destruction, // 0x06 - block_entity_data, // 0x07 - block_event, // 0x08 - block_update, // 0x09 - boss_event, // 0x0A - change_difficulty, // 0x0B - chunk_batch_finished, // 0x0C - chunk_batch_start, // 0x0D - chunks_biomes, // 0x0E - clear_titles, // 0x0F - command_suggestions, // 0x10 - commands, // 0x11 - container_close, // 0x12 - container_set_content, // 0x13 - container_set_data, // 0x14 - container_set_slot, // 0x15 - cookie_request, // 0x16 - cooldown, // 0x17 - custom_chat_completions, // 0x18 - custom_payload, // 0x19 - damage_event, // 0x1A - debug_sample, // 0x1B - delete_chat, // 0x1C - disconnect, // 0x1D - disguised_chat, // 0x1E - entity_event, // 0x1F - entity_position_sync, // 0x20 - explode, // 0x21 - forget_level_chunk, // 0x22 - game_event, // 0x23 - horse_screen_open, // 0x24 - hurt_animation, // 0x25 - initialize_border, // 0x26 - keep_alive, // 0x27 - level_chunk_with_light, // 0x28 - level_event, // 0x29 - level_particles, // 0x2A - light_update, // 0x2B - login, // 0x2C - map_item_data, // 0x2D - merchant_offers, // 0x2E - move_entity_pos, // 0x2F - move_entity_pos_rot, // 0x30 - move_minecart_along_track, // 0x31 - move_entity_rot, // 0x32 - move_vehicle, // 0x33 - open_book, // 0x34 - open_screen, // 0x35 - open_sign_editor, // 0x36 - ping, // 0x37 - pong_response, // 0x38 - place_ghost_recipe, // 0x39 - player_abilities, // 0x3A - player_chat, // 0x3B - player_combat_end, // 0x3C - player_combat_enter, // 0x3D - player_combat_kill, // 0x3E - player_info_remove, // 0x3F - player_info_update, // 0x40 - player_look_at, // 0x41 - player_position, // 0x42 - player_rotation, // 0x43 - recipe_book_add, // 0x44 - recipe_book_remove, // 0x45 - recipe_book_settings, // 0x46 - remove_entities, // 0x47 - remove_mob_effect, // 0x48 - reset_score, // 0x49 - resource_pack_pop, // 0x4A - resource_pack_push, // 0x4B - respawn, // 0x4C - rotate_head, // 0x4D - section_blocks_update, // 0x4E - select_advancements_tab, // 0x4F - server_data, // 0x50 - set_action_bar_text, // 0x51 - set_border_center, // 0x52 - set_border_lerp_size, // 0x53 - set_border_size, // 0x54 - set_border_warning_delay, // 0x55 - set_border_warning_distance, // 0x56 - set_camera, // 0x57 - set_chunk_cache_center, // 0x58 - set_chunk_cache_radius, // 0x59 - set_cursor_item, // 0x5A - set_default_spawn_position, // 0x5B - set_display_objective, // 0x5C - set_entity_data, // 0x5D - set_entity_link, // 0x5E - set_entity_motion, // 0x5F - set_equipment, // 0x60 - set_experience, // 0x61 - set_health, // 0x62 - set_held_slot, // 0x63 - set_objective, // 0x64 - set_passengers, // 0x65 - set_player_inventory, // 0x66 - set_player_team, // 0x67 - set_score, // 0x68 - set_simulation_distance, // 0x69 - set_subtitle_text, // 0x6A - set_time, // 0x6B - set_title_text, // 0x6C - set_titles_animation, // 0x6D - sound_entity, // 0x6E - sound, // 0x6F - start_configuration, // 0x70 - stop_sound, // 0x71 - store_cookie, // 0x72 - system_chat, // 0x73 - tab_list, // 0x74 - tag_query, // 0x75 - take_item_entity, // 0x76 - teleport_entity, // 0x77 + animate, // 0x02 + award_stats, // 0x03 + block_changed_ack, // 0x04 + block_destruction, // 0x05 + block_entity_data, // 0x06 + block_event, // 0x07 + block_update, // 0x08 + boss_event, // 0x09 + change_difficulty, // 0x0A + chunk_batch_finished, // 0x0B + chunk_batch_start, // 0x0C + chunks_biomes, // 0x0D + clear_titles, // 0x0E + command_suggestions, // 0x0F + commands, // 0x10 + container_close, // 0x11 + container_set_content, // 0x12 + container_set_data, // 0x13 + container_set_slot, // 0x14 + cookie_request, // 0x15 + cooldown, // 0x16 + custom_chat_completions, // 0x17 + custom_payload, // 0x18 + damage_event, // 0x19 + debug_sample, // 0x1A + delete_chat, // 0x1B + disconnect, // 0x1C + disguised_chat, // 0x1D + entity_event, // 0x1E + entity_position_sync, // 0x1F + explode, // 0x20 + forget_level_chunk, // 0x21 + game_event, // 0x22 + horse_screen_open, // 0x23 + hurt_animation, // 0x24 + initialize_border, // 0x25 + keep_alive, // 0x26 + level_chunk_with_light, // 0x27 + level_event, // 0x28 + level_particles, // 0x29 + light_update, // 0x2A + login, // 0x2B + map_item_data, // 0x2C + merchant_offers, // 0x2D + move_entity_pos, // 0x2E + move_entity_pos_rot, // 0x2F + move_minecart_along_track, // 0x30 + move_entity_rot, // 0x31 + move_vehicle, // 0x32 + open_book, // 0x33 + open_screen, // 0x34 + open_sign_editor, // 0x35 + ping, // 0x36 + pong_response, // 0x37 + place_ghost_recipe, // 0x38 + player_abilities, // 0x39 + player_chat, // 0x3A + player_combat_end, // 0x3B + player_combat_enter, // 0x3C + player_combat_kill, // 0x3D + player_info_remove, // 0x3E + player_info_update, // 0x3F + player_look_at, // 0x40 + player_position, // 0x41 + player_rotation, // 0x42 + recipe_book_add, // 0x43 + recipe_book_remove, // 0x44 + recipe_book_settings, // 0x45 + remove_entities, // 0x46 + remove_mob_effect, // 0x47 + reset_score, // 0x48 + resource_pack_pop, // 0x49 + resource_pack_push, // 0x4A + respawn, // 0x4B + rotate_head, // 0x4C + section_blocks_update, // 0x4D + select_advancements_tab, // 0x4E + server_data, // 0x4F + set_action_bar_text, // 0x50 + set_border_center, // 0x51 + set_border_lerp_size, // 0x52 + set_border_size, // 0x53 + set_border_warning_delay, // 0x54 + set_border_warning_distance, // 0x55 + set_camera, // 0x56 + set_chunk_cache_center, // 0x57 + set_chunk_cache_radius, // 0x58 + set_cursor_item, // 0x59 + set_default_spawn_position, // 0x5A + set_display_objective, // 0x5B + set_entity_data, // 0x5C + set_entity_link, // 0x5D + set_entity_motion, // 0x5E + set_equipment, // 0x5F + set_experience, // 0x60 + set_health, // 0x61 + set_held_slot, // 0x62 + set_objective, // 0x63 + set_passengers, // 0x64 + set_player_inventory, // 0x65 + set_player_team, // 0x66 + set_score, // 0x67 + set_simulation_distance, // 0x68 + set_subtitle_text, // 0x69 + set_time, // 0x6A + set_title_text, // 0x6B + set_titles_animation, // 0x6C + sound_entity, // 0x6D + sound, // 0x6E + start_configuration, // 0x6F + stop_sound, // 0x70 + store_cookie, // 0x71 + system_chat, // 0x72 + tab_list, // 0x73 + tag_query, // 0x74 + take_item_entity, // 0x75 + teleport_entity, // 0x76 + test_instance_block_status, // 0x77 ticking_state, // 0x78 ticking_step, // 0x79 transfer, // 0x7A @@ -195,10 +195,12 @@ declare_state_packets!(GamePacket, set_creative_mode_slot, // 0x36 set_jigsaw_block, // 0x37 set_structure_block, // 0x38 - sign_update, // 0x39 - swing, // 0x3A - teleport_to_entity, // 0x3B - use_item_on, // 0x3C - use_item, // 0x3D + set_test_block, // 0x39 + sign_update, // 0x3A + swing, // 0x3B + teleport_to_entity, // 0x3C + test_instance_block_action, // 0x3D + use_item_on, // 0x3E + use_item, // 0x3F ] ); diff --git a/azalea-protocol/src/packets/game/s_chat.rs b/azalea-protocol/src/packets/game/s_chat.rs index 40c7e123..07702ddf 100755 --- a/azalea-protocol/src/packets/game/s_chat.rs +++ b/azalea-protocol/src/packets/game/s_chat.rs @@ -5,6 +5,7 @@ use azalea_protocol_macros::ServerboundGamePacket; #[derive(Clone, Debug, AzBuf, ServerboundGamePacket)] pub struct ServerboundChat { + #[limit(256)] pub message: String, pub timestamp: u64, pub salt: u64, @@ -15,6 +16,7 @@ pub struct ServerboundChat { #[derive(Clone, Debug, AzBuf, Default)] pub struct LastSeenMessagesUpdate { #[var] - pub messages: u32, + pub offset: u32, pub acknowledged: FixedBitSet<{ 20_usize.div_ceil(8) }>, + pub checksum: u8, } diff --git a/azalea-protocol/src/packets/game/s_set_structure_block.rs b/azalea-protocol/src/packets/game/s_set_structure_block.rs index 14b403ab..b2f2aeb1 100755 --- a/azalea-protocol/src/packets/game/s_set_structure_block.rs +++ b/azalea-protocol/src/packets/game/s_set_structure_block.rs @@ -47,15 +47,17 @@ pub enum StructureMode { Data = 3, } -#[derive(AzBuf, Clone, Copy, Debug)] +#[derive(AzBuf, Clone, Copy, Debug, Default)] pub enum Mirror { + #[default] None = 0, LeftRight = 1, FrontBack = 2, } -#[derive(AzBuf, Clone, Copy, Debug)] +#[derive(AzBuf, Clone, Copy, Debug, Default)] pub enum Rotation { + #[default] None = 0, Clockwise90 = 1, Clockwise180 = 2, diff --git a/azalea-protocol/src/packets/game/s_set_test_block.rs b/azalea-protocol/src/packets/game/s_set_test_block.rs new file mode 100644 index 00000000..579b689e --- /dev/null +++ b/azalea-protocol/src/packets/game/s_set_test_block.rs @@ -0,0 +1,19 @@ +use azalea_buf::AzBuf; +use azalea_core::position::BlockPos; +use azalea_protocol_macros::ServerboundGamePacket; + +#[derive(Clone, Debug, AzBuf, ServerboundGamePacket)] +pub struct ServerboundSetTestBlock { + pub position: BlockPos, + pub mode: TestBlockMode, + pub message: String, +} + +#[derive(Clone, Copy, Debug, AzBuf, Default)] +pub enum TestBlockMode { + #[default] + Start, + Log, + Fail, + Accept, +} diff --git a/azalea-protocol/src/packets/game/s_test_instance_block_action.rs b/azalea-protocol/src/packets/game/s_test_instance_block_action.rs new file mode 100644 index 00000000..7ebda866 --- /dev/null +++ b/azalea-protocol/src/packets/game/s_test_instance_block_action.rs @@ -0,0 +1,44 @@ +use azalea_buf::AzBuf; +use azalea_chat::FormattedText; +use azalea_core::position::{BlockPos, Vec3i}; +use azalea_protocol_macros::ServerboundGamePacket; +use azalea_registry::TestInstanceKind; + +use super::s_set_structure_block::Rotation; + +#[derive(Clone, Debug, AzBuf, ServerboundGamePacket)] +pub struct ServerboundTestInstanceBlockAction { + pub pos: BlockPos, + pub action: Action, + pub data: TestInstanceBlockEntityData, +} + +#[derive(Clone, Copy, Debug, AzBuf, Default)] +pub enum Action { + #[default] + Init, + Qurey, + Set, + Reset, + Save, + Export, + Run, +} + +#[derive(Clone, Debug, AzBuf, Default)] +pub struct TestInstanceBlockEntityData { + pub test: Option<TestInstanceKind>, + pub size: Vec3i, + pub rotation: Rotation, + pub ignore_entities: bool, + pub status: TestInstanceBlockEntityStatus, + pub error_message: Option<FormattedText>, +} + +#[derive(Clone, Copy, Debug, AzBuf, Default)] +pub enum TestInstanceBlockEntityStatus { + #[default] + Cleared, + Running, + Finished, +} diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 5f28e340..ade5c915 100755 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -11,8 +11,8 @@ use azalea_buf::{AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError}; use crate::read::ReadPacketError; -pub const PROTOCOL_VERSION: i32 = 769; -pub const VERSION_NAME: &str = "1.21.4"; +pub const PROTOCOL_VERSION: i32 = 770; +pub const VERSION_NAME: &str = "1.21.5"; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { diff --git a/azalea-registry/azalea-registry-macros/src/lib.rs b/azalea-registry/azalea-registry-macros/src/lib.rs index ee0f2490..e2f88251 100755 --- a/azalea-registry/azalea-registry-macros/src/lib.rs +++ b/azalea-registry/azalea-registry-macros/src/lib.rs @@ -7,24 +7,28 @@ use syn::{ punctuated::Punctuated, }; -struct RegistryItem { +struct Registry { name: Ident, - id: String, + items: Vec<RegistryItem>, + attrs: Vec<Attribute>, } -struct Registry { +struct RegistryItem { + attrs: Vec<Attribute>, name: Ident, - items: Vec<RegistryItem>, - attributes: Vec<Attribute>, + id: String, } impl Parse for RegistryItem { // Air => "minecraft:air" fn parse(input: ParseStream) -> Result<Self> { + // parse annotations like #[default] + let attrs = input.call(Attribute::parse_outer).unwrap_or_default(); + let name = input.parse()?; input.parse::<Token![=>]>()?; let id = input.parse::<LitStr>()?.value(); - Ok(RegistryItem { name, id }) + Ok(RegistryItem { attrs, name, id }) } } @@ -36,7 +40,7 @@ impl Parse for Registry { // } // this also includes docs - let attributes = input.call(Attribute::parse_outer).unwrap_or_default(); + let attrs = input.call(Attribute::parse_outer).unwrap_or_default(); input.parse::<Token![enum]>()?; let name = input.parse()?; @@ -48,7 +52,7 @@ impl Parse for Registry { Ok(Registry { name, items: items.into_iter().collect(), - attributes, + attrs, }) } } @@ -65,13 +69,15 @@ pub fn registry(input: TokenStream) -> TokenStream { // } let mut enum_items = quote! {}; for (i, item) in input.items.iter().enumerate() { + let attrs = &item.attrs; let name = &item.name; let protocol_id = i as u32; enum_items.extend(quote! { + #(#attrs)* #name = #protocol_id, }); } - let attributes = input.attributes; + let attributes = input.attrs; generated.extend(quote! { #(#attributes)* #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, azalea_buf::AzBuf, simdnbt::ToNbtTag, simdnbt::FromNbtTag)] diff --git a/azalea-registry/src/data.rs b/azalea-registry/src/data.rs index 17338c8f..7ae55119 100644 --- a/azalea-registry/src/data.rs +++ b/azalea-registry/src/data.rs @@ -1,41 +1,55 @@ -use azalea_buf::AzBuf; +use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite}; + +use crate::Registry; /// A registry which has its values decided by the server in the /// `ClientboundRegistryData` packet. /// /// These can be resolved into their actual values with /// `ResolvableDataRegistry` from azalea-core. -pub trait DataRegistry { +pub trait DataRegistry: AzaleaRead + AzaleaWrite { const NAME: &'static str; fn protocol_id(&self) -> u32; + fn new_raw(id: u32) -> Self; } - -#[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)] -pub struct Enchantment { - #[var] - id: u32, -} -impl DataRegistry for Enchantment { - const NAME: &'static str = "enchantment"; - fn protocol_id(&self) -> u32 { - self.id +impl<T: DataRegistry> Registry for T { + fn from_u32(value: u32) -> Option<Self> { + Some(Self::new_raw(value)) } -} -#[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)] -pub struct DimensionType { - #[var] - id: u32, -} -impl DimensionType { - pub fn new_raw(id: u32) -> Self { - Self { id } + fn to_u32(&self) -> u32 { + self.protocol_id() } } -impl DataRegistry for DimensionType { - const NAME: &'static str = "dimension_type"; - fn protocol_id(&self) -> u32 { - self.id - } + +macro_rules! data_registry { + ($name:ident, $registry_name:expr) => { + #[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)] + pub struct $name { + #[var] + id: u32, + } + impl DataRegistry for $name { + const NAME: &'static str = $registry_name; + fn protocol_id(&self) -> u32 { + self.id + } + fn new_raw(id: u32) -> Self { + Self { id } + } + } + }; } + +data_registry! {Enchantment, "enchantment"} +data_registry! {DimensionType, "dimension_type"} +data_registry! {DamageKind, "damage_kind"} +data_registry! {WolfSoundVariant, "wolf_sound_variant"} +data_registry! {CowVariant, "cow_variant"} +data_registry! {ChickenVariant, "chicken_variant"} +data_registry! {FrogVariant, "frog_variant"} +data_registry! {CatVariant, "cat_variant"} +data_registry! {PigVariant, "pig_variant"} +data_registry! {PaintingVariant, "painting_variant"} +data_registry! {WolfVariant, "wolf_variant"} diff --git a/azalea-registry/src/extra.rs b/azalea-registry/src/extra.rs index 1ba1f0a9..694b9820 100644 --- a/azalea-registry/src/extra.rs +++ b/azalea-registry/src/extra.rs @@ -7,24 +7,82 @@ use azalea_registry_macros::registry; use crate::Registry; registry! { -enum WolfVariant { - Pale => "minecraft:wolf", - Spotted => "minecraft:wolf_spotted", - Snowy => "minecraft:wolf_snowy", - Black => "minecraft:wolf_black", - Ashen => "minecraft:wolf_ashen", - Rusty => "minecraft:wolf_rusty", - Woods => "minecraft:wolf_woods", - Chestnut => "minecraft:wolf_chestnut", - Striped => "minecraft:wolf_striped", +#[derive(Default)] +enum FoxVariant { + #[default] + Red => "minecraft:red", + Snow => "minecraft:snow", } } -#[allow(clippy::derivable_impls)] -impl Default for WolfVariant { - fn default() -> Self { - WolfVariant::Pale - } +registry! { +enum ParrotVariant { + RedBlue => "minecraft:red_blue", + Blue => "minecraft:blue", + Green => "minecraft:green", + YellowBlue => "minecraft:yellow_blue", + Gray => "minecraft:gray", +} +} + +registry! { +#[derive(Default)] +enum MooshroomVariant { + #[default] + Red => "minecraft:red", + Brown => "minecraft:brown", +} +} + +registry! { +#[derive(Default)] +enum RabbitVariant { + #[default] + Brown => "minecraft:brown", + White => "minecraft:white", + Black => "minecraft:black", + WhiteSplotched => "minecraft:white_splotched", + Gold => "minecraft:gold", + Salt => "minecraft:salt", + Evil => "minecraft:evil", +} +} + +registry! { +#[derive(Default)] +enum HorseVariant { + #[default] + White => "minecraft:white", + Creamy => "minecraft:creamy", + Chestnut => "minecraft:chestnut", + Brown => "minecraft:brown", + Black => "minecraft:black", + Gray => "minecraft:gray", + DarkBrown => "minecraft:dark_brown", +} +} + +registry! { +#[derive(Default)] +enum LlamaVariant { + #[default] + Creamy => "minecraft:creamy", + White => "minecraft:white", + Brown => "minecraft:brown", + Gray => "minecraft:gray", +} +} + +registry! { +#[derive(Default)] +enum AxolotlVariant { + #[default] + Lucy => "minecraft:lucy", + Wild => "minecraft:wild", + Gold => "minecraft:gold", + Cyan => "minecraft:cyan", + Blue => "minecraft:blue", +} } registry! { @@ -135,38 +193,3 @@ enum Instrument { DreamGoatHorn => "minecraft:dream_goat_horn", } } - -registry! { -enum PaintingVariant { - Kebab => "minecraft:kebab", - Aztec => "minecraft:aztec", - Alban => "minecraft:alban", - Aztec2 => "minecraft:aztec2", - Bomb => "minecraft:bomb", - Plant => "minecraft:plant", - Wasteland => "minecraft:wasteland", - Pool => "minecraft:pool", - Courbet => "minecraft:courbet", - Sea => "minecraft:sea", - Sunset => "minecraft:sunset", - Creebet => "minecraft:creebet", - Wanderer => "minecraft:wanderer", - Graham => "minecraft:graham", - Match => "minecraft:match", - Bust => "minecraft:bust", - Stage => "minecraft:stage", - Void => "minecraft:void", - SkullAndRoses => "minecraft:skull_and_roses", - Wither => "minecraft:wither", - Fighters => "minecraft:fighters", - Pointer => "minecraft:pointer", - Pigscene => "minecraft:pigscene", - BurningSkull => "minecraft:burning_skull", - Skeleton => "minecraft:skeleton", - Earth => "minecraft:earth", - Wind => "minecraft:wind", - Water => "minecraft:water", - Fire => "minecraft:fire", - DonkeyKong => "minecraft:donkey_kong", -} -} diff --git a/azalea-registry/src/lib.rs b/azalea-registry/src/lib.rs index 59b8101f..11e44829 100755 --- a/azalea-registry/src/lib.rs +++ b/azalea-registry/src/lib.rs @@ -158,10 +158,9 @@ impl<R: Registry, Direct: AzaleaRead + AzaleaWrite> AzaleaRead for Holder<R, Dir if id == 0 { Ok(Self::Direct(Direct::azalea_read(buf)?)) } else { - let Some(value) = R::from_u32(id - 1) else { - return Err(BufReadError::UnexpectedEnumVariant { - id: (id - 1) as i32, - }); + let id = id - 1; + let Some(value) = R::from_u32(id) else { + return Err(BufReadError::UnexpectedEnumVariant { id: id as i32 }); }; Ok(Self::Reference(value)) } @@ -415,6 +414,9 @@ enum Block { ShortGrass => "minecraft:short_grass", Fern => "minecraft:fern", DeadBush => "minecraft:dead_bush", + Bush => "minecraft:bush", + ShortDryGrass => "minecraft:short_dry_grass", + TallDryGrass => "minecraft:tall_dry_grass", Seagrass => "minecraft:seagrass", TallSeagrass => "minecraft:tall_seagrass", Piston => "minecraft:piston", @@ -546,6 +548,7 @@ enum Block { Ice => "minecraft:ice", SnowBlock => "minecraft:snow_block", Cactus => "minecraft:cactus", + CactusFlower => "minecraft:cactus_flower", Clay => "minecraft:clay", SugarCane => "minecraft:sugar_cane", Jukebox => "minecraft:jukebox", @@ -1144,6 +1147,8 @@ enum Block { WarpedWallSign => "minecraft:warped_wall_sign", StructureBlock => "minecraft:structure_block", Jigsaw => "minecraft:jigsaw", + TestBlock => "minecraft:test_block", + TestInstanceBlock => "minecraft:test_instance_block", Composter => "minecraft:composter", Target => "minecraft:target", BeeNest => "minecraft:bee_nest", @@ -1326,6 +1331,8 @@ enum Block { FloweringAzalea => "minecraft:flowering_azalea", MossCarpet => "minecraft:moss_carpet", PinkPetals => "minecraft:pink_petals", + Wildflowers => "minecraft:wildflowers", + LeafLitter => "minecraft:leaf_litter", MossBlock => "minecraft:moss_block", BigDripleaf => "minecraft:big_dripleaf", BigDripleafStem => "minecraft:big_dripleaf_stem", @@ -1377,6 +1384,7 @@ enum Block { ClosedEyeblossom => "minecraft:closed_eyeblossom", PottedOpenEyeblossom => "minecraft:potted_open_eyeblossom", PottedClosedEyeblossom => "minecraft:potted_closed_eyeblossom", + FireflyBush => "minecraft:firefly_bush", } } @@ -1430,6 +1438,8 @@ enum BlockEntityKind { Crafter => "minecraft:crafter", TrialSpawner => "minecraft:trial_spawner", Vault => "minecraft:vault", + TestBlock => "minecraft:test_block", + TestInstanceBlock => "minecraft:test_instance_block", } } @@ -1452,22 +1462,6 @@ enum BlockPredicateKind { } registry! { -enum CatVariant { - Tabby => "minecraft:tabby", - Black => "minecraft:black", - Red => "minecraft:red", - Siamese => "minecraft:siamese", - BritishShorthair => "minecraft:british_shorthair", - Calico => "minecraft:calico", - Persian => "minecraft:persian", - Ragdoll => "minecraft:ragdoll", - White => "minecraft:white", - Jellie => "minecraft:jellie", - AllBlack => "minecraft:all_black", -} -} - -registry! { enum ChunkStatus { Empty => "minecraft:empty", StructureStarts => "minecraft:structure_starts", @@ -1533,6 +1527,7 @@ enum CommandArgumentKind { ResourceOrTagKey => "minecraft:resource_or_tag_key", Resource => "minecraft:resource", ResourceKey => "minecraft:resource_key", + ResourceSelector => "minecraft:resource_selector", TemplateMirror => "minecraft:template_mirror", TemplateRotation => "minecraft:template_rotation", Heightmap => "minecraft:heightmap", @@ -1725,7 +1720,8 @@ enum EntityKind { PiglinBrute => "minecraft:piglin_brute", Pillager => "minecraft:pillager", PolarBear => "minecraft:polar_bear", - Potion => "minecraft:potion", + SplashPotion => "minecraft:splash_potion", + LingeringPotion => "minecraft:lingering_potion", Pufferfish => "minecraft:pufferfish", Rabbit => "minecraft:rabbit", Ravager => "minecraft:ravager", @@ -1798,14 +1794,6 @@ enum Fluid { } registry! { -enum FrogVariant { - Temperate => "minecraft:temperate", - Warm => "minecraft:warm", - Cold => "minecraft:cold", -} -} - -registry! { enum GameEvent { BlockActivate => "minecraft:block_activate", BlockAttach => "minecraft:block_attach", @@ -2098,9 +2086,13 @@ enum Item { Cobweb => "minecraft:cobweb", ShortGrass => "minecraft:short_grass", Fern => "minecraft:fern", + Bush => "minecraft:bush", Azalea => "minecraft:azalea", FloweringAzalea => "minecraft:flowering_azalea", DeadBush => "minecraft:dead_bush", + FireflyBush => "minecraft:firefly_bush", + ShortDryGrass => "minecraft:short_dry_grass", + TallDryGrass => "minecraft:tall_dry_grass", Seagrass => "minecraft:seagrass", SeaPickle => "minecraft:sea_pickle", WhiteWool => "minecraft:white_wool", @@ -2149,6 +2141,8 @@ enum Item { SugarCane => "minecraft:sugar_cane", Kelp => "minecraft:kelp", PinkPetals => "minecraft:pink_petals", + Wildflowers => "minecraft:wildflowers", + LeafLitter => "minecraft:leaf_litter", MossCarpet => "minecraft:moss_carpet", MossBlock => "minecraft:moss_block", PaleMossCarpet => "minecraft:pale_moss_carpet", @@ -2217,6 +2211,7 @@ enum Item { Ice => "minecraft:ice", SnowBlock => "minecraft:snow_block", Cactus => "minecraft:cactus", + CactusFlower => "minecraft:cactus_flower", Clay => "minecraft:clay", Jukebox => "minecraft:jukebox", OakFence => "minecraft:oak_fence", @@ -2719,6 +2714,8 @@ enum Item { BambooChestRaft => "minecraft:bamboo_chest_raft", StructureBlock => "minecraft:structure_block", Jigsaw => "minecraft:jigsaw", + TestBlock => "minecraft:test_block", + TestInstanceBlock => "minecraft:test_instance_block", TurtleHelmet => "minecraft:turtle_helmet", TurtleScute => "minecraft:turtle_scute", ArmadilloScute => "minecraft:armadillo_scute", @@ -2855,6 +2852,8 @@ enum Item { Book => "minecraft:book", SlimeBall => "minecraft:slime_ball", Egg => "minecraft:egg", + BlueEgg => "minecraft:blue_egg", + BrownEgg => "minecraft:brown_egg", Compass => "minecraft:compass", RecoveryCompass => "minecraft:recovery_compass", Bundle => "minecraft:bundle", @@ -3403,6 +3402,7 @@ enum MemoryModuleKind { NearestPlayers => "minecraft:nearest_players", NearestVisiblePlayer => "minecraft:nearest_visible_player", NearestVisibleTargetablePlayer => "minecraft:nearest_visible_targetable_player", + NearestVisibleTargetablePlayers => "minecraft:nearest_visible_targetable_players", WalkTarget => "minecraft:walk_target", LookTarget => "minecraft:look_target", AttackTarget => "minecraft:attack_target", @@ -3581,6 +3581,7 @@ enum ParticleKind { Infested => "minecraft:infested", CherryLeaves => "minecraft:cherry_leaves", PaleOakLeaves => "minecraft:pale_oak_leaves", + TintedLeaves => "minecraft:tinted_leaves", SculkSoul => "minecraft:sculk_soul", SculkCharge => "minecraft:sculk_charge", SculkChargePop => "minecraft:sculk_charge_pop", @@ -3658,6 +3659,7 @@ enum ParticleKind { RaidOmen => "minecraft:raid_omen", TrialOmen => "minecraft:trial_omen", BlockCrumble => "minecraft:block_crumble", + Firefly => "minecraft:firefly", } } @@ -4075,6 +4077,8 @@ enum SoundEvent { ItemBundleInsert => "minecraft:item.bundle.insert", ItemBundleInsertFail => "minecraft:item.bundle.insert_fail", ItemBundleRemoveOne => "minecraft:item.bundle.remove_one", + BlockCactusFlowerBreak => "minecraft:block.cactus_flower.break", + BlockCactusFlowerPlace => "minecraft:block.cactus_flower.place", BlockCakeAddCandle => "minecraft:block.cake.add_candle", BlockCalciteBreak => "minecraft:block.calcite.break", BlockCalciteStep => "minecraft:block.calcite.step", @@ -4254,6 +4258,7 @@ enum SoundEvent { ItemCrossbowQuickCharge2 => "minecraft:item.crossbow.quick_charge_2", ItemCrossbowQuickCharge3 => "minecraft:item.crossbow.quick_charge_3", ItemCrossbowShoot => "minecraft:item.crossbow.shoot", + BlockDeadbushIdle => "minecraft:block.deadbush.idle", BlockDecoratedPotBreak => "minecraft:block.decorated_pot.break", BlockDecoratedPotFall => "minecraft:block.decorated_pot.fall", BlockDecoratedPotHit => "minecraft:block.decorated_pot.hit", @@ -4379,6 +4384,7 @@ enum SoundEvent { BlockFenceGateClose => "minecraft:block.fence_gate.close", BlockFenceGateOpen => "minecraft:block.fence_gate.open", ItemFirechargeUse => "minecraft:item.firecharge.use", + BlockFireflyBushIdle => "minecraft:block.firefly_bush.idle", EntityFireworkRocketBlast => "minecraft:entity.firework_rocket.blast", EntityFireworkRocketBlastFar => "minecraft:entity.firework_rocket.blast_far", EntityFireworkRocketLargeBlast => "minecraft:entity.firework_rocket.large_blast", @@ -4618,6 +4624,11 @@ enum SoundEvent { EntityIllusionerPrepareBlindness => "minecraft:entity.illusioner.prepare_blindness", EntityIllusionerPrepareMirror => "minecraft:entity.illusioner.prepare_mirror", ItemInkSacUse => "minecraft:item.ink_sac.use", + BlockIronBreak => "minecraft:block.iron.break", + BlockIronStep => "minecraft:block.iron.step", + BlockIronPlace => "minecraft:block.iron.place", + BlockIronHit => "minecraft:block.iron.hit", + BlockIronFall => "minecraft:block.iron.fall", BlockIronDoorClose => "minecraft:block.iron_door.close", BlockIronDoorOpen => "minecraft:block.iron_door.open", EntityIronGolemAttack => "minecraft:entity.iron_golem.attack", @@ -4650,6 +4661,11 @@ enum SoundEvent { BlockLavaAmbient => "minecraft:block.lava.ambient", BlockLavaExtinguish => "minecraft:block.lava.extinguish", BlockLavaPop => "minecraft:block.lava.pop", + BlockLeafLitterBreak => "minecraft:block.leaf_litter.break", + BlockLeafLitterStep => "minecraft:block.leaf_litter.step", + BlockLeafLitterPlace => "minecraft:block.leaf_litter.place", + BlockLeafLitterHit => "minecraft:block.leaf_litter.hit", + BlockLeafLitterFall => "minecraft:block.leaf_litter.fall", EntityLeashKnotBreak => "minecraft:entity.leash_knot.break", EntityLeashKnotPlace => "minecraft:entity.leash_knot.place", BlockLeverClick => "minecraft:block.lever.click", @@ -5064,6 +5080,8 @@ enum SoundEvent { BlockSandHit => "minecraft:block.sand.hit", BlockSandPlace => "minecraft:block.sand.place", BlockSandStep => "minecraft:block.sand.step", + BlockSandIdle => "minecraft:block.sand.idle", + BlockSandWind => "minecraft:block.sand.wind", BlockScaffoldingBreak => "minecraft:block.scaffolding.break", BlockScaffoldingFall => "minecraft:block.scaffolding.fall", BlockScaffoldingHit => "minecraft:block.scaffolding.hit", @@ -5440,15 +5458,50 @@ enum SoundEvent { ItemWolfArmorCrack => "minecraft:item.wolf_armor.crack", ItemWolfArmorDamage => "minecraft:item.wolf_armor.damage", ItemWolfArmorRepair => "minecraft:item.wolf_armor.repair", + EntityWolfShake => "minecraft:entity.wolf.shake", + EntityWolfStep => "minecraft:entity.wolf.step", EntityWolfAmbient => "minecraft:entity.wolf.ambient", EntityWolfDeath => "minecraft:entity.wolf.death", EntityWolfGrowl => "minecraft:entity.wolf.growl", - EntityWolfHowl => "minecraft:entity.wolf.howl", EntityWolfHurt => "minecraft:entity.wolf.hurt", EntityWolfPant => "minecraft:entity.wolf.pant", - EntityWolfShake => "minecraft:entity.wolf.shake", - EntityWolfStep => "minecraft:entity.wolf.step", EntityWolfWhine => "minecraft:entity.wolf.whine", + EntityWolfPuglinAmbient => "minecraft:entity.wolf_puglin.ambient", + EntityWolfPuglinDeath => "minecraft:entity.wolf_puglin.death", + EntityWolfPuglinGrowl => "minecraft:entity.wolf_puglin.growl", + EntityWolfPuglinHurt => "minecraft:entity.wolf_puglin.hurt", + EntityWolfPuglinPant => "minecraft:entity.wolf_puglin.pant", + EntityWolfPuglinWhine => "minecraft:entity.wolf_puglin.whine", + EntityWolfSadAmbient => "minecraft:entity.wolf_sad.ambient", + EntityWolfSadDeath => "minecraft:entity.wolf_sad.death", + EntityWolfSadGrowl => "minecraft:entity.wolf_sad.growl", + EntityWolfSadHurt => "minecraft:entity.wolf_sad.hurt", + EntityWolfSadPant => "minecraft:entity.wolf_sad.pant", + EntityWolfSadWhine => "minecraft:entity.wolf_sad.whine", + EntityWolfAngryAmbient => "minecraft:entity.wolf_angry.ambient", + EntityWolfAngryDeath => "minecraft:entity.wolf_angry.death", + EntityWolfAngryGrowl => "minecraft:entity.wolf_angry.growl", + EntityWolfAngryHurt => "minecraft:entity.wolf_angry.hurt", + EntityWolfAngryPant => "minecraft:entity.wolf_angry.pant", + EntityWolfAngryWhine => "minecraft:entity.wolf_angry.whine", + EntityWolfGrumpyAmbient => "minecraft:entity.wolf_grumpy.ambient", + EntityWolfGrumpyDeath => "minecraft:entity.wolf_grumpy.death", + EntityWolfGrumpyGrowl => "minecraft:entity.wolf_grumpy.growl", + EntityWolfGrumpyHurt => "minecraft:entity.wolf_grumpy.hurt", + EntityWolfGrumpyPant => "minecraft:entity.wolf_grumpy.pant", + EntityWolfGrumpyWhine => "minecraft:entity.wolf_grumpy.whine", + EntityWolfBigAmbient => "minecraft:entity.wolf_big.ambient", + EntityWolfBigDeath => "minecraft:entity.wolf_big.death", + EntityWolfBigGrowl => "minecraft:entity.wolf_big.growl", + EntityWolfBigHurt => "minecraft:entity.wolf_big.hurt", + EntityWolfBigPant => "minecraft:entity.wolf_big.pant", + EntityWolfBigWhine => "minecraft:entity.wolf_big.whine", + EntityWolfCuteAmbient => "minecraft:entity.wolf_cute.ambient", + EntityWolfCuteDeath => "minecraft:entity.wolf_cute.death", + EntityWolfCuteGrowl => "minecraft:entity.wolf_cute.growl", + EntityWolfCuteHurt => "minecraft:entity.wolf_cute.hurt", + EntityWolfCutePant => "minecraft:entity.wolf_cute.pant", + EntityWolfCuteWhine => "minecraft:entity.wolf_cute.whine", BlockWoodenDoorClose => "minecraft:block.wooden_door.close", BlockWoodenDoorOpen => "minecraft:block.wooden_door.open", BlockWoodenTrapdoorClose => "minecraft:block.wooden_trapdoor.close", @@ -5626,6 +5679,7 @@ registry! { enum WorldgenFeature { NoOp => "minecraft:no_op", Tree => "minecraft:tree", + FallenTree => "minecraft:fallen_tree", Flower => "minecraft:flower", NoBonemealFlower => "minecraft:no_bonemeal_flower", RandomPatch => "minecraft:random_patch", @@ -5888,6 +5942,8 @@ enum WorldgenTreeDecoratorKind { Beehive => "minecraft:beehive", AlterGround => "minecraft:alter_ground", AttachedToLeaves => "minecraft:attached_to_leaves", + PlaceOnGround => "minecraft:place_on_ground", + AttachedToLogs => "minecraft:attached_to_logs", } } @@ -5992,8 +6048,10 @@ enum BlockKind { Brushable => "minecraft:brushable", BubbleColumn => "minecraft:bubble_column", BuddingAmethyst => "minecraft:budding_amethyst", + Bush => "minecraft:bush", Button => "minecraft:button", Cactus => "minecraft:cactus", + CactusFlower => "minecraft:cactus_flower", Cake => "minecraft:cake", CalibratedSculkSensor => "minecraft:calibrated_sculk_sensor", Campfire => "minecraft:campfire", @@ -6028,7 +6086,7 @@ enum BlockKind { Crop => "minecraft:crop", CryingObsidian => "minecraft:crying_obsidian", DaylightDetector => "minecraft:daylight_detector", - DeadBush => "minecraft:dead_bush", + DryVegetation => "minecraft:dry_vegetation", DecoratedPot => "minecraft:decorated_pot", DetectorRail => "minecraft:detector_rail", DirtPath => "minecraft:dirt_path", @@ -6050,6 +6108,7 @@ enum BlockKind { Fence => "minecraft:fence", FenceGate => "minecraft:fence_gate", Fire => "minecraft:fire", + FireflyBush => "minecraft:firefly_bush", FletchingTable => "minecraft:fletching_table", Flower => "minecraft:flower", FlowerPot => "minecraft:flower_pot", @@ -6082,7 +6141,7 @@ enum BlockKind { Lantern => "minecraft:lantern", LavaCauldron => "minecraft:lava_cauldron", LayeredCauldron => "minecraft:layered_cauldron", - Leaves => "minecraft:leaves", + LeafLitter => "minecraft:leaf_litter", Lectern => "minecraft:lectern", Lever => "minecraft:lever", Light => "minecraft:light", @@ -6107,8 +6166,7 @@ enum BlockKind { Nylium => "minecraft:nylium", Observer => "minecraft:observer", Piglinwallskull => "minecraft:piglinwallskull", - ParticleLeaves => "minecraft:particle_leaves", - PinkPetals => "minecraft:pink_petals", + FlowerBed => "minecraft:flower_bed", PistonBase => "minecraft:piston_base", PistonHead => "minecraft:piston_head", PitcherCrop => "minecraft:pitcher_crop", @@ -6133,6 +6191,7 @@ enum BlockKind { Roots => "minecraft:roots", RotatedPillar => "minecraft:rotated_pillar", Sapling => "minecraft:sapling", + Sand => "minecraft:sand", Scaffolding => "minecraft:scaffolding", SculkCatalyst => "minecraft:sculk_catalyst", Sculk => "minecraft:sculk", @@ -6141,6 +6200,7 @@ enum BlockKind { SculkVein => "minecraft:sculk_vein", Seagrass => "minecraft:seagrass", SeaPickle => "minecraft:sea_pickle", + ShortDryGrass => "minecraft:short_dry_grass", ShulkerBox => "minecraft:shulker_box", Skull => "minecraft:skull", Slab => "minecraft:slab", @@ -6167,11 +6227,16 @@ enum BlockKind { StructureVoid => "minecraft:structure_void", SugarCane => "minecraft:sugar_cane", SweetBerryBush => "minecraft:sweet_berry_bush", + TallDryGrass => "minecraft:tall_dry_grass", TallFlower => "minecraft:tall_flower", TallGrass => "minecraft:tall_grass", TallSeagrass => "minecraft:tall_seagrass", Target => "minecraft:target", + Terracotta => "minecraft:terracotta", + Test => "minecraft:test", + TestInstance => "minecraft:test_instance", TintedGlass => "minecraft:tinted_glass", + TintedParticleLeaves => "minecraft:tinted_particle_leaves", Tnt => "minecraft:tnt", TorchflowerCrop => "minecraft:torchflower_crop", Torch => "minecraft:torch", @@ -6184,6 +6249,7 @@ enum BlockKind { TurtleEgg => "minecraft:turtle_egg", TwistingVinesPlant => "minecraft:twisting_vines_plant", TwistingVines => "minecraft:twisting_vines", + UntintedParticleLeaves => "minecraft:untinted_particle_leaves", Vault => "minecraft:vault", Vine => "minecraft:vine", WallBanner => "minecraft:wall_banner", @@ -6307,8 +6373,7 @@ enum DataComponentKind { CanBreak => "minecraft:can_break", AttributeModifiers => "minecraft:attribute_modifiers", CustomModelData => "minecraft:custom_model_data", - HideAdditionalTooltip => "minecraft:hide_additional_tooltip", - HideTooltip => "minecraft:hide_tooltip", + TooltipDisplay => "minecraft:tooltip_display", RepairCost => "minecraft:repair_cost", CreativeSlotLock => "minecraft:creative_slot_lock", EnchantmentGlintOverride => "minecraft:enchantment_glint_override", @@ -6319,12 +6384,14 @@ enum DataComponentKind { UseCooldown => "minecraft:use_cooldown", DamageResistant => "minecraft:damage_resistant", Tool => "minecraft:tool", + Weapon => "minecraft:weapon", Enchantable => "minecraft:enchantable", Equippable => "minecraft:equippable", Repairable => "minecraft:repairable", Glider => "minecraft:glider", TooltipStyle => "minecraft:tooltip_style", DeathProtection => "minecraft:death_protection", + BlocksAttacks => "minecraft:blocks_attacks", StoredEnchantments => "minecraft:stored_enchantments", DyedColor => "minecraft:dyed_color", MapColor => "minecraft:map_color", @@ -6334,6 +6401,7 @@ enum DataComponentKind { ChargedProjectiles => "minecraft:charged_projectiles", BundleContents => "minecraft:bundle_contents", PotionContents => "minecraft:potion_contents", + PotionDurationScale => "minecraft:potion_duration_scale", SuspiciousStewEffects => "minecraft:suspicious_stew_effects", WritableBookContent => "minecraft:writable_book_content", WrittenBookContent => "minecraft:written_book_content", @@ -6343,8 +6411,10 @@ enum DataComponentKind { BucketEntityData => "minecraft:bucket_entity_data", BlockEntityData => "minecraft:block_entity_data", Instrument => "minecraft:instrument", + ProvidesTrimMaterial => "minecraft:provides_trim_material", OminousBottleAmplifier => "minecraft:ominous_bottle_amplifier", JukeboxPlayable => "minecraft:jukebox_playable", + ProvidesBannerPatterns => "minecraft:provides_banner_patterns", Recipes => "minecraft:recipes", LodestoneTracker => "minecraft:lodestone_tracker", FireworkExplosion => "minecraft:firework_explosion", @@ -6359,6 +6429,31 @@ enum DataComponentKind { Bees => "minecraft:bees", Lock => "minecraft:lock", ContainerLoot => "minecraft:container_loot", + BreakSound => "minecraft:break_sound", + VillagerVariant => "minecraft:villager/variant", + WolfVariant => "minecraft:wolf/variant", + WolfSoundVariant => "minecraft:wolf/sound_variant", + WolfCollar => "minecraft:wolf/collar", + FoxVariant => "minecraft:fox/variant", + SalmonSize => "minecraft:salmon/size", + ParrotVariant => "minecraft:parrot/variant", + TropicalFishPattern => "minecraft:tropical_fish/pattern", + TropicalFishBaseColor => "minecraft:tropical_fish/base_color", + TropicalFishPatternColor => "minecraft:tropical_fish/pattern_color", + MooshroomVariant => "minecraft:mooshroom/variant", + RabbitVariant => "minecraft:rabbit/variant", + PigVariant => "minecraft:pig/variant", + CowVariant => "minecraft:cow/variant", + ChickenVariant => "minecraft:chicken/variant", + FrogVariant => "minecraft:frog/variant", + HorseVariant => "minecraft:horse/variant", + PaintingVariant => "minecraft:painting/variant", + LlamaVariant => "minecraft:llama/variant", + AxolotlVariant => "minecraft:axolotl/variant", + CatVariant => "minecraft:cat/variant", + CatCollar => "minecraft:cat/collar", + SheepColor => "minecraft:sheep/color", + ShulkerColor => "minecraft:shulker/color", } } @@ -6370,39 +6465,6 @@ enum EntitySubPredicateKind { Slime => "minecraft:slime", Raider => "minecraft:raider", Sheep => "minecraft:sheep", - Axolotl => "minecraft:axolotl", - Fox => "minecraft:fox", - Mooshroom => "minecraft:mooshroom", - Rabbit => "minecraft:rabbit", - Horse => "minecraft:horse", - Llama => "minecraft:llama", - Villager => "minecraft:villager", - Parrot => "minecraft:parrot", - Salmon => "minecraft:salmon", - TropicalFish => "minecraft:tropical_fish", - Painting => "minecraft:painting", - Cat => "minecraft:cat", - Frog => "minecraft:frog", - Wolf => "minecraft:wolf", -} -} - -registry! { -enum ItemSubPredicateKind { - Damage => "minecraft:damage", - Enchantments => "minecraft:enchantments", - StoredEnchantments => "minecraft:stored_enchantments", - PotionContents => "minecraft:potion_contents", - CustomData => "minecraft:custom_data", - Container => "minecraft:container", - BundleContents => "minecraft:bundle_contents", - FireworkExplosion => "minecraft:firework_explosion", - Fireworks => "minecraft:fireworks", - WritableBookContent => "minecraft:writable_book_content", - WrittenBookContent => "minecraft:written_book_content", - AttributeModifiers => "minecraft:attribute_modifiers", - Trim => "minecraft:trim", - JukeboxPlayable => "minecraft:jukebox_playable", } } @@ -6625,3 +6687,66 @@ enum SlotDisplay { Composite => "minecraft:composite", } } + +registry! { +enum TicketKind { + Start => "minecraft:start", + Dragon => "minecraft:dragon", + PlayerLoading => "minecraft:player_loading", + PlayerSimulation => "minecraft:player_simulation", + Forced => "minecraft:forced", + Portal => "minecraft:portal", + EnderPearl => "minecraft:ender_pearl", + Unknown => "minecraft:unknown", +} +} + +registry! { +enum TestEnvironmentDefinitionKind { + AllOf => "minecraft:all_of", + GameRules => "minecraft:game_rules", + TimeOfDay => "minecraft:time_of_day", + Weather => "minecraft:weather", + Function => "minecraft:function", +} +} + +registry! { +enum TestFunction { + AlwaysPass => "minecraft:always_pass", +} +} + +registry! { +enum TestInstanceKind { + BlockBased => "minecraft:block_based", + Function => "minecraft:function", +} +} + +registry! { +enum DataComponentPredicateKind { + Damage => "minecraft:damage", + Enchantments => "minecraft:enchantments", + StoredEnchantments => "minecraft:stored_enchantments", + PotionContents => "minecraft:potion_contents", + CustomData => "minecraft:custom_data", + Container => "minecraft:container", + BundleContents => "minecraft:bundle_contents", + FireworkExplosion => "minecraft:firework_explosion", + Fireworks => "minecraft:fireworks", + WritableBookContent => "minecraft:writable_book_content", + WrittenBookContent => "minecraft:written_book_content", + AttributeModifiers => "minecraft:attribute_modifiers", + Trim => "minecraft:trim", + JukeboxPlayable => "minecraft:jukebox_playable", +} +} + +registry! { +enum SpawnConditionKind { + Structure => "minecraft:structure", + MoonBrightness => "minecraft:moon_brightness", + Biome => "minecraft:biome", +} +} diff --git a/azalea-registry/src/tags/blocks.rs b/azalea-registry/src/tags/blocks.rs index 08def1b3..ffabba8c 100644 --- a/azalea-registry/src/tags/blocks.rs +++ b/azalea-registry/src/tags/blocks.rs @@ -360,8 +360,10 @@ pub static BEE_ATTRACTIVE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::MangrovePropagule, Block::CherryLeaves, Block::PinkPetals, + Block::Wildflowers, Block::ChorusFlower, Block::SporeBlossom, + Block::CactusFlower, ]) }); pub static BEE_GROWABLES: LazyLock<HashSet<Block>> = LazyLock::new(|| { @@ -383,9 +385,6 @@ pub static BEEHIVES: LazyLock<HashSet<Block>> = LazyLock::new(|| HashSet::from_iter(vec![Block::BeeNest, Block::Beehive])); pub static BIG_DRIPLEAF_PLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| { HashSet::from_iter(vec![ - Block::Farmland, - Block::Clay, - Block::MossBlock, Block::Dirt, Block::GrassBlock, Block::Podzol, @@ -393,9 +392,11 @@ pub static BIG_DRIPLEAF_PLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, - Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, + Block::Farmland, + Block::Clay, + Block::MossBlock, ]) }); pub static BIRCH_LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| { @@ -450,6 +451,14 @@ pub static CAMEL_SAND_STEP_SOUND_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::ne Block::BlackConcretePowder, ]) }); +pub static CAMELS_SPAWNABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::Sand, + Block::RedSand, + Block::SuspiciousSand, + Block::SuspiciousSand, + ]) +}); pub static CAMPFIRES: LazyLock<HashSet<Block>> = LazyLock::new(|| HashSet::from_iter(vec![Block::Campfire, Block::SoulCampfire])); pub static CANDLE_CAKES: LazyLock<HashSet<Block>> = LazyLock::new(|| { @@ -753,41 +762,6 @@ pub static DARK_OAK_LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::StrippedDarkOakWood, ]) }); -pub static DEAD_BUSH_MAY_PLACE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Block::Sand, - Block::RedSand, - Block::SuspiciousSand, - Block::SuspiciousSand, - Block::Terracotta, - Block::WhiteTerracotta, - Block::OrangeTerracotta, - Block::MagentaTerracotta, - Block::LightBlueTerracotta, - Block::YellowTerracotta, - Block::LimeTerracotta, - Block::PinkTerracotta, - Block::GrayTerracotta, - Block::LightGrayTerracotta, - Block::CyanTerracotta, - Block::PurpleTerracotta, - Block::BlueTerracotta, - Block::BrownTerracotta, - Block::GreenTerracotta, - Block::RedTerracotta, - Block::BlackTerracotta, - Block::Dirt, - Block::GrassBlock, - Block::Podzol, - Block::CoarseDirt, - Block::Mycelium, - Block::RootedDirt, - Block::MossBlock, - Block::PaleMossBlock, - Block::Mud, - Block::MuddyMangroveRoots, - ]) -}); pub static DEEPSLATE_ORE_REPLACEABLES: LazyLock<HashSet<Block>> = LazyLock::new(|| HashSet::from_iter(vec![Block::Deepslate, Block::Tuff])); pub static DIAMOND_ORES: LazyLock<HashSet<Block>> = @@ -852,6 +826,8 @@ pub static DRAGON_IMMUNE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::IronBars, Block::RespawnAnchor, Block::ReinforcedDeepslate, + Block::TestBlock, + Block::TestInstanceBlock, ]) }); pub static DRAGON_TRANSPARENT: LazyLock<HashSet<Block>> = @@ -866,6 +842,50 @@ pub static DRIPSTONE_REPLACEABLE_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::ne Block::Deepslate, ]) }); +pub static DRY_VEGETATION_MAY_PLACE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::Farmland, + Block::Sand, + Block::RedSand, + Block::SuspiciousSand, + Block::SuspiciousSand, + Block::Terracotta, + Block::WhiteTerracotta, + Block::OrangeTerracotta, + Block::MagentaTerracotta, + Block::LightBlueTerracotta, + Block::YellowTerracotta, + Block::LimeTerracotta, + Block::PinkTerracotta, + Block::GrayTerracotta, + Block::LightGrayTerracotta, + Block::CyanTerracotta, + Block::PurpleTerracotta, + Block::BlueTerracotta, + Block::BrownTerracotta, + Block::GreenTerracotta, + Block::RedTerracotta, + Block::BlackTerracotta, + Block::Dirt, + Block::GrassBlock, + Block::Podzol, + Block::CoarseDirt, + Block::Mycelium, + Block::RootedDirt, + Block::MossBlock, + Block::PaleMossBlock, + Block::Mud, + Block::MuddyMangroveRoots, + ]) +}); +pub static EDIBLE_FOR_SHEEP: LazyLock<HashSet<Block>> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::ShortGrass, + Block::ShortDryGrass, + Block::TallDryGrass, + Block::Fern, + ]) +}); pub static EMERALD_ORES: LazyLock<HashSet<Block>> = LazyLock::new(|| HashSet::from_iter(vec![Block::EmeraldOre, Block::DeepslateEmeraldOre])); pub static ENCHANTMENT_POWER_PROVIDER: LazyLock<HashSet<Block>> = @@ -878,6 +898,9 @@ pub static ENCHANTMENT_POWER_TRANSMITTER: LazyLock<HashSet<Block>> = LazyLock::n Block::ShortGrass, Block::Fern, Block::DeadBush, + Block::Bush, + Block::ShortDryGrass, + Block::TallDryGrass, Block::Seagrass, Block::TallSeagrass, Block::Fire, @@ -896,6 +919,7 @@ pub static ENCHANTMENT_POWER_TRANSMITTER: LazyLock<HashSet<Block>> = LazyLock::n Block::WarpedRoots, Block::NetherSprouts, Block::CrimsonRoots, + Block::LeafLitter, Block::HangingRoots, ]) }); @@ -918,6 +942,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::WarpedFungus, Block::WarpedNylium, Block::WarpedRoots, + Block::CactusFlower, Block::Dandelion, Block::OpenEyeblossom, Block::Poppy, @@ -1061,8 +1086,10 @@ pub static FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::MangrovePropagule, Block::CherryLeaves, Block::PinkPetals, + Block::Wildflowers, Block::ChorusFlower, Block::SporeBlossom, + Block::CactusFlower, Block::Dandelion, Block::OpenEyeblossom, Block::Poppy, @@ -1439,6 +1466,8 @@ pub static INSIDE_STEP_SOUND_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::new(|| Block::LilyPad, Block::SmallAmethystBud, Block::PinkPetals, + Block::Wildflowers, + Block::LeafLitter, ]) }); pub static INVALID_SPAWN_INSIDE: LazyLock<HashSet<Block>> = @@ -1698,71 +1727,39 @@ pub static MANGROVE_ROOTS_CAN_GROW_THROUGH: LazyLock<HashSet<Block>> = LazyLock: pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::NoteBlock, - Block::AttachedMelonStem, - Block::AttachedPumpkinStem, - Block::Azalea, Block::Bamboo, Block::Barrel, Block::BeeNest, Block::Beehive, - Block::Beetroots, Block::BigDripleafStem, Block::BigDripleaf, Block::Bookshelf, Block::BrownMushroomBlock, - Block::BrownMushroom, Block::Campfire, - Block::Carrots, Block::CartographyTable, Block::CarvedPumpkin, - Block::CaveVinesPlant, - Block::CaveVines, Block::Chest, Block::ChorusFlower, Block::ChorusPlant, Block::Cocoa, Block::Composter, Block::CraftingTable, - Block::CrimsonFungus, Block::DaylightDetector, - Block::DeadBush, - Block::Fern, Block::FletchingTable, Block::GlowLichen, - Block::ShortGrass, - Block::HangingRoots, Block::JackOLantern, Block::Jukebox, Block::Ladder, - Block::LargeFern, Block::Lectern, - Block::LilyPad, Block::Loom, - Block::MelonStem, Block::Melon, Block::MushroomStem, - Block::NetherWart, - Block::Potatoes, - Block::PumpkinStem, Block::Pumpkin, Block::RedMushroomBlock, - Block::RedMushroom, - Block::Scaffolding, - Block::SmallDripleaf, Block::SmithingTable, Block::SoulCampfire, - Block::SporeBlossom, - Block::SugarCane, - Block::SweetBerryBush, - Block::TallGrass, Block::TrappedChest, - Block::TwistingVinesPlant, - Block::TwistingVines, Block::Vine, - Block::WarpedFungus, - Block::WeepingVinesPlant, - Block::WeepingVines, - Block::Wheat, Block::MangroveRoots, Block::BambooMosaic, Block::BambooMosaicSlab, @@ -1825,17 +1822,6 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::MangrovePlanks, Block::BambooPlanks, Block::CherryPlanks, - Block::OakSapling, - Block::SpruceSapling, - Block::BirchSapling, - Block::JungleSapling, - Block::AcaciaSapling, - Block::DarkOakSapling, - Block::PaleOakSapling, - Block::Azalea, - Block::FloweringAzalea, - Block::MangrovePropagule, - Block::CherrySapling, Block::OakButton, Block::SpruceButton, Block::BirchButton, @@ -2026,16 +2012,6 @@ pub static MINEABLE_HOE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::Shroomlight, Block::Sponge, Block::WetSponge, - Block::JungleLeaves, - Block::OakLeaves, - Block::SpruceLeaves, - Block::PaleOakLeaves, - Block::DarkOakLeaves, - Block::AcaciaLeaves, - Block::BirchLeaves, - Block::AzaleaLeaves, - Block::FloweringAzaleaLeaves, - Block::MangroveLeaves, Block::SculkSensor, Block::CalibratedSculkSensor, Block::MossBlock, @@ -2046,7 +2022,16 @@ pub static MINEABLE_HOE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::SculkCatalyst, Block::SculkVein, Block::SculkShrieker, - Block::PinkPetals, + Block::JungleLeaves, + Block::OakLeaves, + Block::SpruceLeaves, + Block::PaleOakLeaves, + Block::DarkOakLeaves, + Block::AcaciaLeaves, + Block::BirchLeaves, + Block::AzaleaLeaves, + Block::FloweringAzaleaLeaves, + Block::MangroveLeaves, Block::CherryLeaves, ]) }); @@ -2917,6 +2902,29 @@ pub static PLANKS: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::CherryPlanks, ]) }); +pub static PLAYS_AMBIENT_DESERT_BLOCK_SOUNDS: LazyLock<HashSet<Block>> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::Sand, + Block::RedSand, + Block::Terracotta, + Block::WhiteTerracotta, + Block::OrangeTerracotta, + Block::MagentaTerracotta, + Block::LightBlueTerracotta, + Block::YellowTerracotta, + Block::LimeTerracotta, + Block::PinkTerracotta, + Block::GrayTerracotta, + Block::LightGrayTerracotta, + Block::CyanTerracotta, + Block::PurpleTerracotta, + Block::BlueTerracotta, + Block::BrownTerracotta, + Block::GreenTerracotta, + Block::RedTerracotta, + Block::BlackTerracotta, + ]) +}); pub static POLAR_BEARS_SPAWNABLE_ON_ALTERNATE: LazyLock<HashSet<Block>> = LazyLock::new(|| HashSet::from_iter(vec![Block::Ice])); pub static PORTALS: LazyLock<HashSet<Block>> = LazyLock::new(|| { @@ -2980,6 +2988,9 @@ pub static REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::ShortGrass, Block::Fern, Block::DeadBush, + Block::Bush, + Block::ShortDryGrass, + Block::TallDryGrass, Block::Seagrass, Block::TallSeagrass, Block::Fire, @@ -2998,9 +3009,70 @@ pub static REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::WarpedRoots, Block::NetherSprouts, Block::CrimsonRoots, + Block::LeafLitter, Block::HangingRoots, ]) }); +pub static REPLACEABLE_BY_MUSHROOMS: LazyLock<HashSet<Block>> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::PaleMossCarpet, + Block::ShortGrass, + Block::Fern, + Block::DeadBush, + Block::Vine, + Block::GlowLichen, + Block::Sunflower, + Block::Lilac, + Block::RoseBush, + Block::Peony, + Block::TallGrass, + Block::LargeFern, + Block::HangingRoots, + Block::PitcherPlant, + Block::Water, + Block::Seagrass, + Block::TallSeagrass, + Block::BrownMushroom, + Block::RedMushroom, + Block::BrownMushroomBlock, + Block::RedMushroomBlock, + Block::WarpedRoots, + Block::NetherSprouts, + Block::CrimsonRoots, + Block::LeafLitter, + Block::ShortDryGrass, + Block::TallDryGrass, + Block::Bush, + Block::FireflyBush, + Block::JungleLeaves, + Block::OakLeaves, + Block::SpruceLeaves, + Block::PaleOakLeaves, + Block::DarkOakLeaves, + Block::AcaciaLeaves, + Block::BirchLeaves, + Block::AzaleaLeaves, + Block::FloweringAzaleaLeaves, + Block::MangroveLeaves, + Block::CherryLeaves, + Block::Dandelion, + Block::OpenEyeblossom, + Block::Poppy, + Block::BlueOrchid, + Block::Allium, + Block::AzureBluet, + Block::RedTulip, + Block::OrangeTulip, + Block::WhiteTulip, + Block::PinkTulip, + Block::OxeyeDaisy, + Block::Cornflower, + Block::LilyOfTheValley, + Block::WitherRose, + Block::Torchflower, + Block::ClosedEyeblossom, + ]) +}); pub static REPLACEABLE_BY_TREES: LazyLock<HashSet<Block>> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::PaleMossCarpet, @@ -3020,9 +3092,14 @@ pub static REPLACEABLE_BY_TREES: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::Water, Block::Seagrass, Block::TallSeagrass, + Block::Bush, + Block::FireflyBush, Block::WarpedRoots, Block::NetherSprouts, Block::CrimsonRoots, + Block::LeafLitter, + Block::ShortDryGrass, + Block::TallDryGrass, Block::JungleLeaves, Block::OakLeaves, Block::SpruceLeaves, @@ -3486,49 +3563,15 @@ pub static STRIDER_WARM_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::new(|| HashSet::from_iter(vec![Block::Lava])); pub static SWORD_EFFICIENT: LazyLock<HashSet<Block>> = LazyLock::new(|| { HashSet::from_iter(vec![ - Block::ShortGrass, - Block::Fern, - Block::DeadBush, Block::Vine, Block::GlowLichen, - Block::Sunflower, - Block::Lilac, - Block::RoseBush, - Block::Peony, - Block::TallGrass, - Block::LargeFern, - Block::HangingRoots, - Block::PitcherPlant, - Block::BrownMushroom, - Block::RedMushroom, - Block::SugarCane, Block::Pumpkin, Block::CarvedPumpkin, Block::JackOLantern, Block::Melon, - Block::AttachedPumpkinStem, - Block::AttachedMelonStem, - Block::LilyPad, Block::Cocoa, - Block::PitcherCrop, - Block::SweetBerryBush, - Block::CaveVines, - Block::CaveVinesPlant, - Block::SporeBlossom, - Block::PinkPetals, Block::BigDripleaf, Block::BigDripleafStem, - Block::SmallDripleaf, - Block::NetherWart, - Block::WarpedFungus, - Block::WarpedRoots, - Block::NetherSprouts, - Block::CrimsonFungus, - Block::WeepingVines, - Block::WeepingVinesPlant, - Block::TwistingVines, - Block::TwistingVinesPlant, - Block::CrimsonRoots, Block::ChorusPlant, Block::ChorusFlower, Block::JungleLeaves, @@ -3542,27 +3585,10 @@ pub static SWORD_EFFICIENT: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::FloweringAzaleaLeaves, Block::MangroveLeaves, Block::CherryLeaves, - Block::OakSapling, - Block::SpruceSapling, - Block::BirchSapling, - Block::JungleSapling, - Block::AcaciaSapling, - Block::DarkOakSapling, - Block::PaleOakSapling, - Block::Azalea, - Block::FloweringAzalea, - Block::MangrovePropagule, - Block::CherrySapling, - Block::Beetroots, - Block::Carrots, - Block::Potatoes, - Block::Wheat, - Block::MelonStem, - Block::PumpkinStem, - Block::TorchflowerCrop, - Block::PitcherCrop, ]) }); +pub static SWORD_INSTANTLY_MINES: LazyLock<HashSet<Block>> = + LazyLock::new(|| HashSet::from_iter(vec![Block::Bamboo, Block::BambooSapling])); pub static TERRACOTTA: LazyLock<HashSet<Block>> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::Terracotta, @@ -3682,6 +3708,7 @@ pub static WALL_POST_OVERRIDE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::SoulTorch, Block::RedstoneTorch, Block::Tripwire, + Block::CactusFlower, Block::WhiteBanner, Block::OrangeBanner, Block::MagentaBanner, @@ -3827,6 +3854,8 @@ pub static WITHER_IMMUNE: LazyLock<HashSet<Block>> = LazyLock::new(|| { Block::MovingPiston, Block::Light, Block::ReinforcedDeepslate, + Block::TestBlock, + Block::TestInstanceBlock, ]) }); pub static WITHER_SUMMON_BASE_BLOCKS: LazyLock<HashSet<Block>> = diff --git a/azalea-registry/src/tags/items.rs b/azalea-registry/src/tags/items.rs index f7ec01a5..7e6758f4 100644 --- a/azalea-registry/src/tags/items.rs +++ b/azalea-registry/src/tags/items.rs @@ -108,8 +108,10 @@ pub static BEE_FOOD: LazyLock<HashSet<Item>> = LazyLock::new(|| { Item::MangrovePropagule, Item::CherryLeaves, Item::PinkPetals, + Item::Wildflowers, Item::ChorusFlower, Item::SporeBlossom, + Item::CactusFlower, ]) }); pub static BIRCH_LOGS: LazyLock<HashSet<Item>> = LazyLock::new(|| { @@ -144,6 +146,8 @@ pub static BOATS: LazyLock<HashSet<Item>> = LazyLock::new(|| { Item::CherryChestBoat, ]) }); +pub static BOOK_CLONING_TARGET: LazyLock<HashSet<Item>> = + LazyLock::new(|| HashSet::from_iter(vec![Item::WritableBook])); pub static BOOKSHELF_BOOKS: LazyLock<HashSet<Item>> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::Book, @@ -560,6 +564,8 @@ pub static DYEABLE: LazyLock<HashSet<Item>> = LazyLock::new(|| { Item::WolfArmor, ]) }); +pub static EGGS: LazyLock<HashSet<Item>> = + LazyLock::new(|| HashSet::from_iter(vec![Item::Egg, Item::BlueEgg, Item::BrownEgg])); pub static EMERALD_ORES: LazyLock<HashSet<Item>> = LazyLock::new(|| HashSet::from_iter(vec![Item::EmeraldOre, Item::DeepslateEmeraldOre])); pub static ENCHANTABLE_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| { @@ -985,6 +991,40 @@ pub static FISHES: LazyLock<HashSet<Item>> = LazyLock::new(|| { Item::TropicalFish, ]) }); +pub static FLOWERS: LazyLock<HashSet<Item>> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Item::Sunflower, + Item::Lilac, + Item::Peony, + Item::RoseBush, + Item::PitcherPlant, + Item::FloweringAzaleaLeaves, + Item::FloweringAzalea, + Item::MangrovePropagule, + Item::CherryLeaves, + Item::PinkPetals, + Item::Wildflowers, + Item::ChorusFlower, + Item::SporeBlossom, + Item::CactusFlower, + Item::Dandelion, + Item::OpenEyeblossom, + Item::Poppy, + Item::BlueOrchid, + Item::Allium, + Item::AzureBluet, + Item::RedTulip, + Item::OrangeTulip, + Item::WhiteTulip, + Item::PinkTulip, + Item::OxeyeDaisy, + Item::Cornflower, + Item::LilyOfTheValley, + Item::WitherRose, + Item::Torchflower, + Item::ClosedEyeblossom, + ]) +}); pub static FOOT_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::LeatherBoots, diff --git a/azalea-world/src/chunk_storage.rs b/azalea-world/src/chunk_storage.rs index db5ac877..d6243b87 100755 --- a/azalea-world/src/chunk_storage.rs +++ b/azalea-world/src/chunk_storage.rs @@ -1,5 +1,4 @@ use std::collections::hash_map::Entry; -use std::str::FromStr; use std::{ collections::HashMap, fmt::Debug, @@ -13,7 +12,6 @@ use azalea_buf::{AzaleaRead, AzaleaWrite, BufReadError}; use azalea_core::position::{BlockPos, ChunkBlockPos, ChunkPos, ChunkSectionBlockPos}; use nohash_hasher::IntMap; use parking_lot::RwLock; -use simdnbt::owned::NbtCompound; use tracing::{debug, trace, warn}; use crate::heightmap::Heightmap; @@ -177,7 +175,7 @@ impl PartialChunkStorage { &mut self, pos: &ChunkPos, data: &mut Cursor<&[u8]>, - heightmaps: &NbtCompound, + heightmaps: &[(HeightmapKind, Box<[u64]>)], chunk_storage: &mut ChunkStorage, ) -> Result<(), BufReadError> { debug!("Replacing chunk at {:?}", pos); @@ -333,7 +331,7 @@ impl Chunk { buf: &mut Cursor<&[u8]>, dimension_height: u32, min_y: i32, - heightmaps_nbt: &NbtCompound, + heightmaps_data: &[(HeightmapKind, Box<[u64]>)], ) -> Result<Self, BufReadError> { let section_count = dimension_height / SECTION_HEIGHT; let mut sections = Vec::with_capacity(section_count as usize); @@ -344,18 +342,10 @@ impl Chunk { let sections = sections.into_boxed_slice(); let mut heightmaps = HashMap::new(); - for (name, heightmap) in heightmaps_nbt.iter() { - let Ok(kind) = HeightmapKind::from_str(&name.to_str()) else { - warn!("Unknown heightmap kind: {name}"); - continue; - }; - let Some(data) = heightmap.long_array() else { - warn!("Heightmap {name} is not a long array"); - continue; - }; + for (kind, data) in heightmaps_data { let data: Box<[u64]> = data.iter().map(|x| *x as u64).collect(); - let heightmap = Heightmap::new(kind, dimension_height, min_y, data); - heightmaps.insert(kind, heightmap); + let heightmap = Heightmap::new(*kind, dimension_height, min_y, data); + heightmaps.insert(*kind, heightmap); } Ok(Chunk { @@ -449,7 +439,7 @@ impl AzaleaRead for Section { let block_count = u16::azalea_read(buf)?; // this is commented out because the vanilla server is wrong - // ^ this comment was written ages ago. needs more investigation. + // TODO: ^ this comment was written ages ago. needs more investigation. // assert!( // block_count <= 16 * 16 * 16, // "A section has more blocks than what should be possible. This is a bug!" diff --git a/azalea-world/src/heightmap.rs b/azalea-world/src/heightmap.rs index f1ef30d2..00ebad41 100644 --- a/azalea-world/src/heightmap.rs +++ b/azalea-world/src/heightmap.rs @@ -1,6 +1,7 @@ use std::{fmt::Display, str::FromStr}; use azalea_block::BlockState; +use azalea_buf::AzBuf; use azalea_core::{math, position::ChunkBlockPos}; use azalea_registry::tags::blocks::LEAVES; @@ -8,7 +9,7 @@ use crate::{BitStorage, Section, chunk_storage::get_block_state_from_sections}; // (wg stands for worldgen) -#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)] +#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, AzBuf)] pub enum HeightmapKind { WorldSurfaceWg, WorldSurface, diff --git a/azalea-world/src/palette.rs b/azalea-world/src/palette.rs index 97786e7c..699ee2d5 100755 --- a/azalea-world/src/palette.rs +++ b/azalea-world/src/palette.rs @@ -2,7 +2,6 @@ use std::io::{Cursor, Write}; use azalea_block::block_state::BlockStateIntegerRepr; use azalea_buf::{AzaleaRead, AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError}; -use azalea_core::math; use tracing::warn; use crate::BitStorage; @@ -45,37 +44,15 @@ impl PalettedContainer { buf: &mut Cursor<&[u8]>, container_type: &'static PalettedContainerKind, ) -> Result<Self, BufReadError> { - let server_bits_per_entry = u8::azalea_read(buf)?; - let palette_type = PaletteKind::from_bits_and_type(server_bits_per_entry, container_type); + let bits_per_entry = u8::azalea_read(buf)?; + let palette_type = PaletteKind::from_bits_and_type(bits_per_entry, container_type); let palette = palette_type.read(buf)?; let size = container_type.size(); - let data = Box::<[u64]>::azalea_read(buf)?; - - // we can only trust the bits per entry that we're sent if there's enough data - // that it'd be global. if it's not global, then we have to calculate it - // ourselves. - // this almost never matters, except on some custom servers like hypixel limbo - // TODO: this is incorrect. we should be getting the log2 of the max blockstate - // or biome instead of data.len(). this code might be causing wrong data to be - // read. ¯\_(ツ)_/¯ - let calculated_bits_per_entry = math::ceil_log2(data.len() as u32) as u8; - let calculated_bits_per_entry_palette_kind = - PaletteKind::from_bits_and_type(calculated_bits_per_entry, container_type); - let bits_per_entry = if calculated_bits_per_entry_palette_kind == PaletteKind::Global { - server_bits_per_entry - } else { - calculated_bits_per_entry - }; - - debug_assert!( - bits_per_entry != 0 || data.is_empty(), - "Bits per entry is 0 but data is not empty." - ); let mut storage = match BitStorage::new( - bits_per_entry.into(), + bits_per_entry as usize, size, - if data.is_empty() { + if bits_per_entry == 0 { Some(Box::new([])) } else { // we're going to update the data after creating the bitstorage @@ -90,9 +67,11 @@ impl PalettedContainer { )); } }; - // minecraft does this to allow the data to have extra padding bits. most - // servers don't use this, but it's notably used by hypixel. - storage.data = data; + + // now read the data + for i in 0..storage.data.len() { + storage.data[i] = u64::azalea_read(buf)?; + } Ok(PalettedContainer { bits_per_entry, diff --git a/codegen/genitemcomponents.py b/codegen/genitemcomponents.py index 625af847..b0002ae2 100644 --- a/codegen/genitemcomponents.py +++ b/codegen/genitemcomponents.py @@ -1,167 +1,6 @@ -import lib.code.inventory -import lib.code.registry +import lib.code.item_components import lib.code.version -import lib.code.packet -import lib.code.utils -import lib.code.tags -import lib.download -import lib.extract -import lib.utils - -ITEM_COMPONENTS_DIR = 'azalea-inventory/src/components.rs' - -def generate(version_id: str): - expected_variants = get_expected_variants(version_id) - actual_variants = get_actual_variants() - - new_variants = [] - removed_variants = [] - - for variant in expected_variants: - if variant not in actual_variants: - new_variants.append(variant) - for variant in actual_variants: - if variant not in expected_variants: - removed_variants.append(variant) - - print('New variants:') - for variant in new_variants: - print('-', variant) - print() - print('Removed variants:') - for variant in removed_variants: - print('-', variant) - print() - - for variant in removed_variants: - print(f'Removing {variant}...') - remove_variant(variant) - for variant in new_variants: - print(f'Adding {variant}...') - add_variant(variant) - - lib.code.utils.fmt() - - print('Done!') - -def get_expected_variants(version_id: str): - expected_variants = [] - registries = lib.extract.get_registries_report(version_id) - - registry = registries['minecraft:data_component_type'] - registry_entries = sorted( - registry['entries'].items(), key=lambda x: x[1]['protocol_id']) - for variant_name, _variant in registry_entries: - variant_struct_name = lib.utils.to_camel_case(variant_name.split(':')[-1]) - expected_variants.append(variant_struct_name) - - return expected_variants - -def get_actual_variants(): - actual_variants = [] - with open(ITEM_COMPONENTS_DIR, 'r') as f: - code = f.read().split('\n') - - in_match = False - for line in code: - if in_match: - if line == ' })': - break - variant_line_prefix = ' DataComponentKind::' - if line.startswith(variant_line_prefix): - variant = line[len(variant_line_prefix):].split(' ', 1)[0] - actual_variants.append(variant) - elif line == ' Ok(match kind {': - in_match = True - - return actual_variants - -def remove_variant(variant: str): - with open(ITEM_COMPONENTS_DIR, 'r') as f: - code = f.read().split('\n') - - first_line_with_variant = None - line_after_variant = None - - in_match = False - for i, line in enumerate(list(code)): - if in_match: - if line == ' })': - line_after_variant = i - break - variant_line_prefix = ' DataComponentKind::' - if line.startswith(variant_line_prefix): - if first_line_with_variant is not None: - line_after_variant = i - break - variant_name = line[len(variant_line_prefix):].split(' ', 1)[0] - if variant_name == variant: - first_line_with_variant = i - elif line == ' Ok(match kind {': - in_match = True - - if first_line_with_variant is None: - raise ValueError(f'Variant {variant} not found') - if line_after_variant is None: - raise ValueError(f'Couldn\'t find end of variant {variant}') - - code = code[:first_line_with_variant] + code[line_after_variant:] - - # now remove the struct - line_before_struct = None # this is the #[derive] line - line_after_struct = None # impl DataComponent for ... {\n...\n} - for i, line in enumerate(list(code)): - if line == f'pub struct {variant} {{' or line == f'pub struct {variant};': - line_before_struct = i - 1 - elif line == f'impl DataComponent for {variant} {{': - line_after_struct = i + 3 - break - if line_before_struct is None: - raise ValueError(f'Couldn\'t find struct {variant}') - if line_after_struct is None: - raise ValueError(f'Couldn\'t find impl DataComponent for {variant}') - - code = code[:line_before_struct] + code[line_after_struct:] - - with open(ITEM_COMPONENTS_DIR, 'w') as f: - f.write('\n'.join(code)) - -def add_variant(variant: str): - with open(ITEM_COMPONENTS_DIR, 'r') as f: - code = f.read().split('\n') - - in_match = False - last_line_in_match = None - for i, line in enumerate(list(code)): - if in_match: - if line == ' })': - last_line_in_match = i - break - elif line == ' Ok(match kind {': - in_match = True - - if last_line_in_match is None: - raise ValueError('Couldn\'t find end of match') - - code = code[:last_line_in_match] + [ - f' DataComponentKind::{variant} => Box::new({variant}::azalea_read(buf)?),', - ] + code[last_line_in_match:] - - # now insert the struct - code.append('') - code.append('#[derive(Clone, PartialEq, AzBuf)]') - code.append(f'pub struct {variant} {{') - code.append(' pub todo: todo!(), // see DataComponents.java') - code.append('}') - code.append(f'impl DataComponent for {variant} {{') - code.append(f' const KIND: DataComponentKind = DataComponentKind::{variant};') - code.append('}') - - with open(ITEM_COMPONENTS_DIR, 'w') as f: - f.write('\n'.join(code)) - - lib.code.utils.fmt() if __name__ == '__main__': version_id = lib.code.version.get_version_id() - generate(version_id) + lib.code.item_components.generate(version_id) diff --git a/codegen/lib/code/blocks.py b/codegen/lib/code/blocks.py index 181ce774..aaa95ffa 100755 --- a/codegen/lib/code/blocks.py +++ b/codegen/lib/code/blocks.py @@ -33,8 +33,7 @@ def generate_blocks(blocks_report: dict, pixlyzer_block_datas: dict, ordered_blo for property_id in list(block_data_report.get('properties', {}).keys()): property_variants = block_data_report['properties'][property_id] - property_struct_name = get_property_struct_name( - block_id, property_id, property_variants) + property_struct_name = get_property_struct_name(block_id, property_id, property_variants) if property_struct_name in properties: if not properties[property_struct_name] == property_variants: @@ -192,6 +191,10 @@ def get_property_struct_name(block_id: str, property_id: str, property_variants: return 'TrialSpawnerState' if property_variants == ['inactive', 'active', 'unlocking', 'ejecting']: return 'VaultState' + if property_variants == ['start', 'log', 'fail', 'accept']: + return 'TestMode' + if property_variants == ['save', 'load', 'corner', 'data']: + return 'StructureMode' if 'harp' in property_variants and 'didgeridoo' in property_variants: return 'Sound' if is_list_of_string_integers(property_variants): diff --git a/codegen/lib/code/entity.py b/codegen/lib/code/entity.py index a1f5525d..c27c4ce7 100644 --- a/codegen/lib/code/entity.py +++ b/codegen/lib/code/entity.py @@ -103,23 +103,24 @@ def generate_entity_metadata(burger_entities_data: dict, mappings: Mappings): // This file is generated from codegen/lib/code/entity.py. // Don't change it manually! -use crate::particle::Particle; - -use super::{ - ArmadilloStateKind, EntityDataItem, EntityDataValue, OptionalUnsignedInt, Pose, Quaternion, - Rotations, SnifferStateKind, VillagerData, -}; use azalea_chat::FormattedText; use azalea_core::{ direction::Direction, position::{BlockPos, Vec3}, }; use azalea_inventory::ItemStack; +use azalea_registry::DataRegistry; use bevy_ecs::{bundle::Bundle, component::Component}; use derive_more::{Deref, DerefMut}; use thiserror::Error; use uuid::Uuid; +use super::{ + ArmadilloStateKind, EntityDataItem, EntityDataValue, OptionalUnsignedInt, Pose, Quaternion, + Rotations, SnifferStateKind, VillagerData, +}; +use crate::particle::Particle; + #[derive(Error, Debug)] pub enum UpdateMetadataError { #[error("Wrong type ({0:?})")] @@ -410,12 +411,15 @@ impl From<EntityDataValue> for UpdateMetadataError { # some types don't have Default implemented if type_name == 'CompoundTag': default = 'simdnbt::owned::NbtCompound::default()' - elif type_name == 'CatVariant': - default = 'azalea_registry::CatVariant::Tabby' - elif type_name == 'PaintingVariant': - default = 'azalea_registry::PaintingVariant::Kebab' - elif type_name == 'FrogVariant': - default = 'azalea_registry::FrogVariant::Temperate' + # elif type_name == 'CatVariant': + # # TODO: the default should be Tabby but we don't have a way to get that from here + # default = 'azalea_registry::CatVariant::new_raw(0)' + # elif type_name == 'PaintingVariant': + # default = 'azalea_registry::PaintingVariant::Kebab' + # elif type_name == 'FrogVariant': + # default = 'azalea_registry::FrogVariant::Temperate' + elif type_name.endswith('Variant'): + default = f'azalea_registry::{type_name}::new_raw(0)' elif type_name == 'VillagerData': default = 'VillagerData { kind: azalea_registry::VillagerKind::Plains, profession: azalea_registry::VillagerProfession::None, level: 0 }' else: @@ -430,7 +434,7 @@ impl From<EntityDataValue> for UpdateMetadataError { default = f'BlockPos::new{default}' elif type_name == 'OptionalBlockPos': # Option<BlockPos> default = f'Some(BlockPos::new{default})' if default != 'Empty' else 'None' - elif type_name == 'OptionalUuid': + elif type_name == 'OptionalLivingEntityReference': default = f'Some(uuid::uuid!({default}))' if default != 'Empty' else 'None' elif type_name == 'OptionalUnsignedInt': default = f'OptionalUnsignedInt(Some({default}))' if default != 'Empty' else 'OptionalUnsignedInt(None)' diff --git a/codegen/lib/code/item_components.py b/codegen/lib/code/item_components.py new file mode 100644 index 00000000..3d4bf6a6 --- /dev/null +++ b/codegen/lib/code/item_components.py @@ -0,0 +1,164 @@ +import lib.code.inventory +import lib.code.registry +import lib.code.version +import lib.code.packet +import lib.code.utils +import lib.code.tags +import lib.download +import lib.extract +import lib.utils + + +ITEM_COMPONENTS_DIR = 'azalea-inventory/src/components.rs' + +def generate(version_id: str): + expected_variants = get_expected_variants(version_id) + actual_variants = get_actual_variants() + + new_variants = [] + removed_variants = [] + + for variant in expected_variants: + if variant not in actual_variants: + new_variants.append(variant) + for variant in actual_variants: + if variant not in expected_variants: + removed_variants.append(variant) + + print('New variants:') + for variant in new_variants: + print('-', variant) + print() + print('Removed variants:') + for variant in removed_variants: + print('-', variant) + print() + + for variant in removed_variants: + print(f'Removing {variant}...') + remove_variant(variant) + for variant in new_variants: + print(f'Adding {variant}...') + add_variant(variant) + + lib.code.utils.fmt() + + print('Done!') + +def get_expected_variants(version_id: str): + expected_variants = [] + registries = lib.extract.get_registries_report(version_id) + + registry = registries['minecraft:data_component_type'] + registry_entries = sorted( + registry['entries'].items(), key=lambda x: x[1]['protocol_id']) + for variant_name, _variant in registry_entries: + variant_struct_name = lib.utils.to_camel_case(variant_name.split(':')[-1]) + expected_variants.append(variant_struct_name) + + return expected_variants + +def get_actual_variants(): + actual_variants = [] + with open(ITEM_COMPONENTS_DIR, 'r') as f: + code = f.read().split('\n') + + in_match = False + for line in code: + if in_match: + if line == ' })': + break + variant_line_prefix = ' DataComponentKind::' + if line.startswith(variant_line_prefix): + variant = line[len(variant_line_prefix):].split(' ', 1)[0] + actual_variants.append(variant) + elif line == ' Ok(match kind {': + in_match = True + + return actual_variants + +def remove_variant(variant: str): + with open(ITEM_COMPONENTS_DIR, 'r') as f: + code = f.read().split('\n') + + first_line_with_variant = None + line_after_variant = None + + in_match = False + for i, line in enumerate(list(code)): + if in_match: + if line == ' })': + line_after_variant = i + break + variant_line_prefix = ' DataComponentKind::' + if line.startswith(variant_line_prefix): + if first_line_with_variant is not None: + line_after_variant = i + break + variant_name = line[len(variant_line_prefix):].split(' ', 1)[0] + if variant_name == variant: + first_line_with_variant = i + elif line == ' Ok(match kind {': + in_match = True + + if first_line_with_variant is None: + raise ValueError(f'Variant {variant} not found') + if line_after_variant is None: + raise ValueError(f'Couldn\'t find end of variant {variant}') + + code = code[:first_line_with_variant] + code[line_after_variant:] + + # now remove the struct + line_before_struct = None # this is the #[derive] line + line_after_struct = None # impl DataComponent for ... {\n...\n} + for i, line in enumerate(list(code)): + if line == f'pub struct {variant} {{' or line == f'pub struct {variant};': + line_before_struct = i - 1 + elif line == f'impl DataComponent for {variant} {{': + line_after_struct = i + 3 + break + if line_before_struct is None: + raise ValueError(f'Couldn\'t find struct {variant}') + if line_after_struct is None: + raise ValueError(f'Couldn\'t find impl DataComponent for {variant}') + + code = code[:line_before_struct] + code[line_after_struct:] + + with open(ITEM_COMPONENTS_DIR, 'w') as f: + f.write('\n'.join(code)) + +def add_variant(variant: str): + with open(ITEM_COMPONENTS_DIR, 'r') as f: + code = f.read().split('\n') + + in_match = False + last_line_in_match = None + for i, line in enumerate(list(code)): + if in_match: + if line == ' })': + last_line_in_match = i + break + elif line == ' Ok(match kind {': + in_match = True + + if last_line_in_match is None: + raise ValueError('Couldn\'t find end of match') + + code = code[:last_line_in_match] + [ + f' DataComponentKind::{variant} => Box::new({variant}::azalea_read(buf)?),', + ] + code[last_line_in_match:] + + # now insert the struct + code.append('') + code.append('#[derive(Clone, PartialEq, AzBuf)]') + code.append(f'pub struct {variant} {{') + code.append(' pub todo: todo!(), // see DataComponents.java') + code.append('}') + code.append(f'impl DataComponent for {variant} {{') + code.append(f' const KIND: DataComponentKind = DataComponentKind::{variant};') + code.append('}') + + with open(ITEM_COMPONENTS_DIR, 'w') as f: + f.write('\n'.join(code)) + + lib.code.utils.fmt() diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py index 1d60378a..5ae2d41f 100755 --- a/codegen/lib/code/packet.py +++ b/codegen/lib/code/packet.py @@ -14,6 +14,8 @@ MOJMAP_TO_AZALEA_STATE_NAME_MAPPING = { } AZALEA_TO_MOJMAP_STATE_NAME_MAPPING = {v: k for k, v in MOJMAP_TO_AZALEA_STATE_NAME_MAPPING.items()} +PACKETS_DIR = '../azalea-protocol/src/packets' + def generate_packet(packets_report, packet_name, direction, state): mojmap_state = AZALEA_TO_MOJMAP_STATE_NAME_MAPPING.get(state, state) _packet_report = packets_report[mojmap_state][direction]['minecraft:' + packet_name] @@ -24,7 +26,7 @@ def generate_packet(packets_report, packet_name, direction, state): packet_derive_name = f'{to_camel_case(direction)}{to_camel_case(state)}Packet' packet_struct_name = to_camel_case(f'{direction}_{packet_name}') - packet_module_name = f'{direction[0]}_{packet_name}' + packet_module_name = get_packet_module_name(packet_name, direction) code.append(f'use azalea_buf::AzBuf;') code.append(f'use azalea_protocol_macros::{packet_derive_name};') @@ -42,11 +44,16 @@ def generate_packet(packets_report, packet_name, direction, state): # this won't handle writing to the packets/{state}/mod.rs file since we'd need to know the full packet list -def set_packets(packets_report): +def get_packet_module_name(packet_name: str, direction: str): + return f'{direction[0]}_{packet_name}' + +def set_packets(packets_report): for mojmap_state in packets_report: state = MOJMAP_TO_AZALEA_STATE_NAME_MAPPING.get(mojmap_state, mojmap_state) - mod_rs_dir = get_dir_location( - f'../azalea-protocol/src/packets/{state}/mod.rs') + + expected_packet_module_names = set() + state_dir = get_dir_location(f'{PACKETS_DIR}/{state}') + mod_rs_dir = get_dir_location(f'{state_dir}/mod.rs') serverbound_packets = packet_direction_report_to_packet_names(packets_report[mojmap_state]['serverbound']) clientbound_packets = packet_direction_report_to_packet_names(packets_report[mojmap_state].get('clientbound', {})) @@ -61,10 +68,12 @@ def set_packets(packets_report): code.append(' Clientbound => [') for packet_id, packet_name in enumerate(clientbound_packets): code.append(f' {packet_name}, // {padded_hex(packet_id)}') + expected_packet_module_names.add(get_packet_module_name(packet_name, 'clientbound')) code.append(' ],') code.append(' Serverbound => [') for packet_id, packet_name in enumerate(serverbound_packets): code.append(f' {packet_name}, // {padded_hex(packet_id)}') + expected_packet_module_names.add(get_packet_module_name(packet_name, 'serverbound')) code.append(' ]') code.append(');') code.append('') @@ -72,6 +81,23 @@ def set_packets(packets_report): with open(mod_rs_dir, 'w') as f: f.write('\n'.join(code)) + existing_packet_module_names = set() + # iterate over the directory + for file in os.listdir(state_dir): + if file.endswith('.rs') and file != 'mod.rs': + existing_packet_module_names.add(file[:-len('.rs')]) + for packet_module_name in expected_packet_module_names - existing_packet_module_names: + direction = None + if packet_module_name.startswith('c_'): + direction = 'clientbound' + elif packet_module_name.startswith('s_'): + direction = 'serverbound' + else: + raise Exception(f'Invalid packet module name: {packet_module_name}') + packet = packet_module_name[2:] + generate_packet(packets_report, packet, direction, state) + + def packet_direction_report_to_packet_names(report): name_to_id = {} for resource_location, packet in report.items(): @@ -82,8 +108,7 @@ def packet_direction_report_to_packet_names(report): return names_sorted def get_packets(direction: str, state: str): - mod_rs_dir = get_dir_location( - f'../azalea-protocol/src/packets/{state}/mod.rs') + mod_rs_dir = get_dir_location(f'{PACKETS_DIR}/{state}/mod.rs') with open(mod_rs_dir, 'r') as f: mod_rs = f.read().splitlines() diff --git a/codegen/lib/extract.py b/codegen/lib/extract.py index c62b2b99..564133e2 100755 --- a/codegen/lib/extract.py +++ b/codegen/lib/extract.py @@ -85,8 +85,7 @@ def run_python_command_and_download_deps(command): break missing_lib = regex_match.group(1) print('Missing required lib:', missing_lib) - os.system( - f'{determine_python_command()} -m pip install {missing_lib}') + subprocess.run(f'venv/bin/pip install {missing_lib}', cwd=os.path.dirname(os.path.dirname(__file__))) print('ok') @@ -99,7 +98,7 @@ def get_burger_data_for_version(version_id: str): print('\033[92mRunning Burger...\033[m') run_python_command_and_download_deps( f'cd {get_dir_location("__cache__/Burger")} && '\ - f'{determine_python_command()} munch.py {get_dir_location("__cache__")}/client-{version_id}.jar '\ + f'venv/bin/python munch.py {get_dir_location("__cache__")}/client-{version_id}.jar '\ f'--output {get_dir_location("__cache__")}/burger-{version_id}.json '\ f'--mappings {get_dir_location("__cache__")}/mappings-{version_id}.txt' ) diff --git a/codegen/migrate.py b/codegen/migrate.py index 53d5b588..30e33812 100755 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -1,3 +1,4 @@ +import lib.code.item_components import lib.code.inventory import lib.code.language import lib.code.registry @@ -48,7 +49,7 @@ new_block_states_report = lib.extract.get_block_states_report(new_version_id) new_registries = lib.extract.get_registries_report(new_version_id) new_ordered_blocks = lib.code.blocks.get_ordered_blocks(new_registries) lib.code.blocks.generate_blocks( - new_block_states_report, new_pixlyzer_block_datas, new_ordered_blocks) + new_block_states_report, new_pixlyzer_block_datas, new_ordered_blocks, new_burger_data) lib.code.shapes.generate_block_shapes( new_pixlyzer_block_datas, new_shape_datas['shapes'], new_shape_datas['aabbs'], new_block_states_report) @@ -60,10 +61,13 @@ print('Generating registries...') import genregistries genregistries.generate(new_version_id) -# print('Generating entity metadata...') +print('Generating entity metadata...') burger_entities_data = new_burger_data[0]['entities'] lib.code.entity.generate_entity_metadata(burger_entities_data, new_mappings) +print('Generating item components...') +lib.code.item_components.generate(new_version_id) + print('Finishing touches, setting version in README and formatting code...') lib.code.version.set_version_id(new_version_id) |
