diff --git a/build.gradle b/build.gradle index 0f9162a..4ce5b2f 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ repositories{ maven { name = "BlameJared"; url = "https://maven.blamejared.com/" } // IE & CT Files maven { name = "DVS1 Maven FS"; url = "https://dvs1.progwml6.com/files/maven" } // JEI & Tinkers Files maven { url = 'https://maven.latmod.com/' } // Needed for JEI + maven { name = 'tterrag maven'; url = 'https://maven.tterrag.com/' } flatDir { dir 'flatdir' } } @@ -137,6 +138,10 @@ dependencies{ compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-forge-1.18.2:${version_ct}") + implementation fg.deobf("com.simibubi.create:create-${version_minecraft}:${create_version}:slim") { transitive = false } + implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${version_minecraft}:${flywheel_version}") + implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") + runtimeOnly fg.deobf("mezz.jei:jei-${version_minecraft}:${version_jei}") compileOnly fg.deobf("mezz.jei:jei-${version_minecraft}:${version_jei}:api") } diff --git a/gradle.properties b/gradle.properties index e401021..fff49ce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,14 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false version_minecraft=1.18.2 -version_forge=40.1.48 +version_forge=40.2.4 version_fml_mappings=1.18.2 version_parchment=1.18.1-2022.03.06-1.18.2 -version_ie=1.18.2-8.1.0-150 +version_ie=1.18.2-8.4.0-161 + +create_version=0.5.1.e-318 +flywheel_version=0.6.10-105 +registrate_version=MC1.18.2-1.1.3 version_jei=9.7.0.195 -version_ct=9.1.156 \ No newline at end of file +version_ct=9.1.156 diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java index c6bf7ed..c59f830 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java @@ -1,25 +1,149 @@ package twistedgate.overengineered.common.data; +import java.util.function.UnaryOperator; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import javax.annotation.Nullable; +import com.google.common.base.Preconditions; + +import blusunrize.immersiveengineering.api.IEProperties; +import blusunrize.immersiveengineering.api.multiblocks.TemplateMultiblock; +import blusunrize.immersiveengineering.data.models.NongeneratedModels; +import blusunrize.immersiveengineering.data.models.NongeneratedModels.NongeneratedModel; +import blusunrize.immersiveengineering.data.models.SplitModelBuilder; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.data.DataGenerator; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; import net.minecraftforge.client.model.generators.BlockModelBuilder; import net.minecraftforge.client.model.generators.BlockStateProvider; +import net.minecraftforge.client.model.generators.ConfiguredModel; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.client.model.generators.VariantBlockStateBuilder; +import net.minecraftforge.client.model.generators.VariantBlockStateBuilder.PartialBlockstate; import net.minecraftforge.client.model.generators.loaders.OBJLoaderBuilder; import net.minecraftforge.common.data.ExistingFileHelper; import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.OEContent; +import twistedgate.overengineered.common.multiblock.UniversalMotorMultiblock; +@SuppressWarnings("unused") public class OEBlockStates extends BlockStateProvider{ final ExistingFileHelper exFileHelper; + private final NongeneratedModels nongeneratedModels; public OEBlockStates(DataGenerator gen, ExistingFileHelper exFileHelper){ super(gen, OverEngineered.MODID, exFileHelper); this.exFileHelper = exFileHelper; + this.nongeneratedModels = new NongeneratedModels(gen, exFileHelper); } @Override protected void registerStatesAndModels(){ + // Multiblocks + universalmotor(); + + // Blocks + //simpleBlockWithItem(OEContent.Blocks.CREATE_TEST.get()); + } + + private void universalmotor(){ + ResourceLocation texture = modLoc("multiblock/universal_motor"); + ResourceLocation modelNormal = modLoc("models/multiblock/obj/universal_motor.obj"); + ResourceLocation modelMirrored = modLoc("models/multiblock/obj/universal_motor_mirrored.obj"); + + BlockModelBuilder normal = multiblockModel(OEContent.Multiblock.UNIVERSAL_MOTOR.get(), modelNormal, texture, "", UniversalMotorMultiblock.INSTANCE, false); + BlockModelBuilder mirrored = multiblockModel(OEContent.Multiblock.UNIVERSAL_MOTOR.get(), modelMirrored, texture, "_mirrored", UniversalMotorMultiblock.INSTANCE, true); + + createMultiblock(OEContent.Multiblock.UNIVERSAL_MOTOR.get(), normal, mirrored, texture); + } + + /** + * From {@link blusunrize.immersiveengineering.common.data.BlockStates} + */ + private void createMultiblock(Block b, ModelFile masterModel, ModelFile mirroredModel, ResourceLocation particleTexture){ + createMultiblock(b, masterModel, mirroredModel, IEProperties.MULTIBLOCKSLAVE, IEProperties.FACING_HORIZONTAL, IEProperties.MIRRORED, 180, particleTexture); + } + + /** From {@link blusunrize.immersiveengineering.common.data.BlockStates} */ + private void createMultiblock(Block b, ModelFile masterModel, @Nullable ModelFile mirroredModel, Property isSlave, EnumProperty facing, @Nullable Property mirroredState, int rotationOffset, ResourceLocation particleTex){ + Preconditions.checkArgument((mirroredModel == null) == (mirroredState == null)); + VariantBlockStateBuilder builder = getVariantBuilder(b); + + boolean[] possibleMirrorStates; + if(mirroredState != null) + possibleMirrorStates = new boolean[]{false, true}; + else + possibleMirrorStates = new boolean[1]; + for(boolean mirrored:possibleMirrorStates) + for(Direction dir:facing.getPossibleValues()){ + final int angleY; + final int angleX; + if(facing.getPossibleValues().contains(Direction.UP)){ + angleX = -90 * dir.getStepY(); + if(dir.getAxis() != Direction.Axis.Y) + angleY = getAngle(dir, rotationOffset); + else + angleY = 0; + }else{ + angleY = getAngle(dir, rotationOffset); + angleX = 0; + } + + ModelFile model = mirrored ? mirroredModel : masterModel; + PartialBlockstate partialState = builder.partialState() +// .with(isSlave, false) + .with(facing, dir); + + if(mirroredState != null) + partialState = partialState.with(mirroredState, mirrored); + + partialState.setModels(new ConfiguredModel(model, angleX, angleY, true)); + } + } + + /** From {@link blusunrize.immersiveengineering.common.data.BlockStates} */ + private int getAngle(Direction dir, int offset){ + return (int) ((dir.toYRot() + offset) % 360); + } + + private BlockModelBuilder multiblockModel(Block block, ResourceLocation model, ResourceLocation texture, String add, TemplateMultiblock mb, boolean mirror){ + UnaryOperator transform = UnaryOperator.identity(); + if(mirror){ + Vec3i size = mb.getSize(null); + transform = p -> new BlockPos(size.getX() - p.getX() - 1, p.getY(), p.getZ()); + } + final Vec3i offset = mb.getMasterFromOriginOffset(); + + Stream partsStream = mb.getStructure(null).stream() + .filter(info -> !info.state.isAir()) + .map(info -> info.pos) + .map(transform) + .map(p -> p.subtract(offset)); + + String name = getMultiblockPath(block) + add; + NongeneratedModel base = nongeneratedModels.withExistingParent(name, mcLoc("block")) + .customLoader(OBJLoaderBuilder::begin).modelLocation(model).detectCullableFaces(false).flipV(true).end() + .texture("texture", texture) + .texture("particle", texture); + + BlockModelBuilder split = this.models().withExistingParent(name + "_split", mcLoc("block")) + .customLoader(SplitModelBuilder::begin) + .innerModel(base) + .parts(partsStream.collect(Collectors.toList())) + .dynamic(false).end(); + + return split; + } + + private String getMultiblockPath(Block b){ + return "multiblock/" + getPath(b); } private BlockModelBuilder objModel(Block b, String modelPath, @Nullable String postFix, ResourceLocation texture){ @@ -33,6 +157,23 @@ private BlockModelBuilder objModel(Block b, String modelPath, @Nullable String p return model; } + private void simpleBlockWithItem(Block block){ + ModelFile file = cubeAll(block); + + getVariantBuilder(block).partialState() + .setModels(new ConfiguredModel(file)); + itemModelWithParent(block, file); + } + + private void itemModelWithParent(Block block, ModelFile parent){ + getItemBuilder(block).parent(parent) + .texture("particle", modLoc("block/" + getPath(block))); + } + + private ItemModelBuilder getItemBuilder(Block block){ + return itemModels().getBuilder(modLoc("item/" + getPath(block)).toString()); + } + private String getPath(Block b){ return b.getRegistryName().getPath(); } diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockTags.java b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockTags.java index b0ef423..49a8aa1 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockTags.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockTags.java @@ -4,8 +4,10 @@ import net.minecraft.data.DataGenerator; import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.tags.BlockTags; import net.minecraftforge.common.data.ExistingFileHelper; import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.OEContent; public class OEBlockTags extends BlockTagsProvider{ public OEBlockTags(DataGenerator pGenerator, @Nullable ExistingFileHelper existingFileHelper){ @@ -14,6 +16,8 @@ public OEBlockTags(DataGenerator pGenerator, @Nullable ExistingFileHelper existi @Override protected void addTags(){ - + tag(BlockTags.MINEABLE_WITH_PICKAXE).add( + OEContent.Multiblock.UNIVERSAL_MOTOR.get() + ); } } diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEDataGenerator.java b/src/datagen/java/twistedgate/overengineered/common/data/OEDataGenerator.java index e9ab811..358e8e9 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEDataGenerator.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEDataGenerator.java @@ -3,6 +3,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import blusunrize.immersiveengineering.common.blocks.multiblocks.StaticTemplateManager; import net.minecraft.data.DataGenerator; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -10,6 +11,7 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; import net.minecraftforge.forge.event.lifecycle.GatherDataEvent; import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.data.loot.OELootGenerator; @EventBusSubscriber(modid = OverEngineered.MODID, bus = Bus.MOD) public class OEDataGenerator{ @@ -19,11 +21,13 @@ public class OEDataGenerator{ public static void generate(GatherDataEvent event){ DataGenerator generator = event.getGenerator(); ExistingFileHelper exhelper = event.getExistingFileHelper(); + StaticTemplateManager.EXISTING_HELPER = exhelper; if(event.includeServer()){ OEBlockTags blockTags = new OEBlockTags(generator, exhelper); generator.addProvider(blockTags); generator.addProvider(new OEItemTags(generator, blockTags, exhelper)); + generator.addProvider(new OELootGenerator(generator)); generator.addProvider(new OERecipes(generator)); } diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java b/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java index 8be649c..a7afdc3 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java @@ -7,21 +7,21 @@ import net.minecraft.client.renderer.block.model.ItemTransforms.TransformType; import net.minecraft.data.DataGenerator; import net.minecraft.world.level.ItemLike; -import net.minecraftforge.client.model.generators.ItemModelBuilder; -import net.minecraftforge.client.model.generators.ItemModelProvider; import net.minecraftforge.client.model.generators.ModelBuilder; +import net.minecraftforge.client.model.generators.ModelProvider; import net.minecraftforge.client.model.generators.loaders.OBJLoaderBuilder; import net.minecraftforge.common.data.ExistingFileHelper; import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.OEContent; - -public class OEItemModels extends ItemModelProvider{ +public class OEItemModels extends ModelProvider{ public OEItemModels(DataGenerator generator, ExistingFileHelper existingFileHelper){ - super(generator, OverEngineered.MODID, existingFileHelper); + super(generator, OverEngineered.MODID, ITEM_FOLDER, TRSRModelBuilder::new, existingFileHelper); } @Override protected void registerModels(){ + universalmotorItem(); // ModelBuilder.TransformsBuilder trans = model.transforms(); // doTransform(trans, TransformType.FIRST_PERSON_LEFT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); // doTransform(trans, TransformType.FIRST_PERSON_RIGHT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); @@ -33,6 +33,21 @@ protected void registerModels(){ // doTransform(trans, TransformType.FIXED, new Vector3f(0, 0, -7), new Vector3f(-90, 0, 0), 1.0F); } + private void universalmotorItem(){ + TRSRModelBuilder model = obj(OEContent.Multiblock.UNIVERSAL_MOTOR.get(), "multiblock/obj/universal_motor.obj") + .texture("texture", modLoc("multiblock/universal_motor")); + + ModelBuilder.TransformsBuilder trans = model.transforms(); + doTransform(trans, TransformType.FIRST_PERSON_LEFT_HAND, null, null, 0.03125F); + doTransform(trans, TransformType.FIRST_PERSON_RIGHT_HAND, null, null, 0.03125F); + doTransform(trans, TransformType.THIRD_PERSON_LEFT_HAND, new Vector3f(-0.75F, -5, -1.25F), new Vector3f(0, 90, 0), 0.03125F); + doTransform(trans, TransformType.THIRD_PERSON_RIGHT_HAND, new Vector3f(1.0F, -5, -1.75F), new Vector3f(0, 270, 0), 0.03125F); + doTransform(trans, TransformType.HEAD, new Vector3f(1.5F, 8, 1.5F), null, 0.2F); + doTransform(trans, TransformType.GUI, new Vector3f(-1, -6, 0), new Vector3f(30, 225, 0), 0.0625F); + doTransform(trans, TransformType.GROUND, new Vector3f(1, 0, 1), null, 0.0625F); + doTransform(trans, TransformType.FIXED, new Vector3f(0, -8, 0), null, 0.0625F); + } + private void doTransform(ModelBuilder.TransformsBuilder transform, TransformType type, @Nullable Vector3f translation, @Nullable Vector3f rotationAngle, float scale){ ModelBuilder.TransformsBuilder.TransformVecBuilder trans = transform.transform(type); if(translation != null) @@ -43,9 +58,14 @@ private void doTransform(ModelBuilder.TransformsBuilder transform, TransformT trans.end(); } - private ItemModelBuilder obj(ItemLike item, String model){ + private TRSRModelBuilder obj(ItemLike item, String model){ return getBuilder(item.asItem().getRegistryName().toString()) .customLoader(OBJLoaderBuilder::begin) .modelLocation(modLoc("models/" + model)).flipV(true).end(); } + + @Override + public String getName(){ + return "Item Models"; + } } diff --git a/src/datagen/java/twistedgate/overengineered/common/data/TRSRModelBuilder.java b/src/datagen/java/twistedgate/overengineered/common/data/TRSRModelBuilder.java new file mode 100644 index 0000000..dc72d6b --- /dev/null +++ b/src/datagen/java/twistedgate/overengineered/common/data/TRSRModelBuilder.java @@ -0,0 +1,43 @@ +package twistedgate.overengineered.common.data; + +import java.io.IOException; +import java.io.InputStreamReader; + +import com.google.common.io.CharStreams; +import com.google.gson.JsonObject; + +import blusunrize.immersiveengineering.data.models.TransformationMap; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.Resource; +import net.minecraftforge.client.model.generators.ModelBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +public class TRSRModelBuilder extends ModelBuilder{ + private final TransformationMap transforms = new TransformationMap(); + + protected TRSRModelBuilder(ResourceLocation outputLocation, ExistingFileHelper existingFileHelper){ + super(outputLocation, existingFileHelper); + } + + public TRSRModelBuilder transforms(ResourceLocation source){ + Resource transformFile; + try{ + transformFile = existingFileHelper.getResource(source, PackType.CLIENT_RESOURCES, ".json", "transformations"); + String jsonString = CharStreams.toString(new InputStreamReader(transformFile.getInputStream())); + transforms.addFromJson(jsonString); + return this; + }catch(IOException e){ + throw new RuntimeException("While loading transforms from " + source, e); + } + } + + @Override + public JsonObject toJson(){ + JsonObject ret = super.toJson(); + JsonObject transformJson = transforms.toJson(); + if(!transformJson.entrySet().isEmpty()) + ret.add("transform", transformJson); + return ret; + } +} \ No newline at end of file diff --git a/src/datagen/java/twistedgate/overengineered/common/data/loot/MBOriginalBlockLootEntry.java b/src/datagen/java/twistedgate/overengineered/common/data/loot/MBOriginalBlockLootEntry.java new file mode 100644 index 0000000..3230819 --- /dev/null +++ b/src/datagen/java/twistedgate/overengineered/common/data/loot/MBOriginalBlockLootEntry.java @@ -0,0 +1,58 @@ +package twistedgate.overengineered.common.data.loot; + +import java.util.function.Consumer; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; + +import blusunrize.immersiveengineering.common.util.Utils; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryType; +import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer; +import net.minecraft.world.level.storage.loot.functions.LootItemFunction; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import twistedgate.overengineered.common.blocks.tileentity.KineticMultiblockPartTileEntity; +import twistedgate.overengineered.utils.ResourceUtils; + +public class MBOriginalBlockLootEntry extends LootPoolSingletonContainer{ + public static final ResourceLocation ID = ResourceUtils.oe("multiblock_original_block"); + + protected MBOriginalBlockLootEntry(int pWeight, int pQuality, LootItemCondition[] pConditions, LootItemFunction[] pFunctions){ + super(pWeight, pQuality, pConditions, pFunctions); + } + + @Override + protected void createItemStack(Consumer pStackConsumer, LootContext pLootContext){ + if(pLootContext.hasParam(LootContextParams.BLOCK_ENTITY)) + { + BlockEntity te = pLootContext.getParamOrNull(LootContextParams.BLOCK_ENTITY); + if(te instanceof KineticMultiblockPartTileEntity mbTile){ + Utils.getDrops(mbTile.getOriginalBlock(), + new LootContext.Builder(pLootContext.getLevel()) + .withOptionalParameter(LootContextParams.TOOL, pLootContext.getParamOrNull(LootContextParams.TOOL)) + .withOptionalParameter(LootContextParams.ORIGIN, pLootContext.getParamOrNull(LootContextParams.ORIGIN)) + ).forEach(pStackConsumer); + } + } + } + + public static LootPoolSingletonContainer.Builder builder(){ + return simpleBuilder(MBOriginalBlockLootEntry::new); + } + + @Override + public LootPoolEntryType getType(){ + return OELootFunctions.multiblockOriginalBlock; + } + + public static class Serializer extends LootPoolSingletonContainer.Serializer{ + @Override + protected MBOriginalBlockLootEntry deserialize(JsonObject pObject, JsonDeserializationContext pContext, int pWeight, int pQuality, LootItemCondition[] pConditions, LootItemFunction[] pFunctions){ + return new MBOriginalBlockLootEntry(pWeight, pQuality, pConditions, pFunctions); + } + } +} diff --git a/src/datagen/java/twistedgate/overengineered/common/data/loot/OEBlockLoot.java b/src/datagen/java/twistedgate/overengineered/common/data/loot/OEBlockLoot.java new file mode 100644 index 0000000..df73926 --- /dev/null +++ b/src/datagen/java/twistedgate/overengineered/common/data/loot/OEBlockLoot.java @@ -0,0 +1,60 @@ +package twistedgate.overengineered.common.data.loot; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.LootTable.Builder; +import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition; +import twistedgate.overengineered.common.OEContent; + +public class OEBlockLoot implements Consumer>{ + private BiConsumer out; + + @Override + public void accept(BiConsumer out){ + this.out = out; + + registerMultiblock(OEContent.Multiblock.UNIVERSAL_MOTOR.get()); + } + + private void registerMultiblock(Block b){ + register(b, dropOriginalBlock()); + } + + private LootPool.Builder dropOriginalBlock(){ + return createPoolBuilder().add(MBOriginalBlockLootEntry.builder()); + } + + /* + private LootPool.Builder dropInv(){ + return createPoolBuilder().add(DropInventoryLootEntry.builder()); + } + */ + + private void register(Block b, LootPool.Builder... pools){ + LootTable.Builder builder = LootTable.lootTable(); + for(LootPool.Builder pool:pools) + builder.withPool(pool); + register(b, builder); + } + + private void register(Block b, LootTable.Builder table){ + register(b.getRegistryName(), table); + } + + private void register(ResourceLocation name, LootTable.Builder table){ + out.accept(toTableLoc(name), table); + } + + private LootPool.Builder createPoolBuilder(){ + return LootPool.lootPool().when(ExplosionCondition.survivesExplosion()); + } + + private ResourceLocation toTableLoc(ResourceLocation in){ + return new ResourceLocation(in.getNamespace(), "blocks/" + in.getPath()); + } +} diff --git a/src/datagen/java/twistedgate/overengineered/common/data/loot/OELootFunctions.java b/src/datagen/java/twistedgate/overengineered/common/data/loot/OELootFunctions.java new file mode 100644 index 0000000..41a2ad3 --- /dev/null +++ b/src/datagen/java/twistedgate/overengineered/common/data/loot/OELootFunctions.java @@ -0,0 +1,27 @@ +package twistedgate.overengineered.common.data.loot; + +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.Serializer; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryType; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import twistedgate.overengineered.OverEngineered; + +@EventBusSubscriber(modid = OverEngineered.MODID, bus = Bus.MOD) +public class OELootFunctions{ + public static LootPoolEntryType multiblockOriginalBlock; + + @SubscribeEvent + public static void register(RegistryEvent.Register event){ + multiblockOriginalBlock = registerEntry(MBOriginalBlockLootEntry.ID, new MBOriginalBlockLootEntry.Serializer()); + } + + private static LootPoolEntryType registerEntry(ResourceLocation id, Serializer serializer){ + return Registry.register(Registry.LOOT_POOL_ENTRY_TYPE, id, new LootPoolEntryType(serializer)); + } +} diff --git a/src/datagen/java/twistedgate/overengineered/common/data/loot/OELootGenerator.java b/src/datagen/java/twistedgate/overengineered/common/data/loot/OELootGenerator.java new file mode 100644 index 0000000..9bbd49e --- /dev/null +++ b/src/datagen/java/twistedgate/overengineered/common/data/loot/OELootGenerator.java @@ -0,0 +1,40 @@ +package twistedgate.overengineered.common.data.loot; + +import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import com.mojang.datafixers.util.Pair; + +import net.minecraft.data.DataGenerator; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.LootTable.Builder; +import net.minecraft.world.level.storage.loot.LootTables; +import net.minecraft.world.level.storage.loot.ValidationContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +public class OELootGenerator extends LootTableProvider{ + + public OELootGenerator(DataGenerator pGenerator){ + super(pGenerator); + } + + @Override + protected List>>, LootContextParamSet>> getTables(){ + return List.of( + Pair.of(OEBlockLoot::new, LootContextParamSets.BLOCK) + ); + } + + @Override + protected void validate(Map map, ValidationContext validationtracker){ + map.forEach((p_218436_2_, p_218436_3_) -> { + LootTables.validate(validationtracker, p_218436_2_, p_218436_3_); + }); + } +} diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache new file mode 100644 index 0000000..5385cf5 --- /dev/null +++ b/src/generated/resources/.cache/cache @@ -0,0 +1,6 @@ +25653b34e3c52483fcd8c27e9869a5840be0f105 assets/overengineered/blockstates/universal_motor.json +ad9c892823ca17a89e7a83e00e81977bbed3186f assets/overengineered/models/item/universal_motor.json +a7cc436670b3e3b5998a4565da4ad57254c0426b assets/overengineered/models/multiblock/universal_motor_mirrored_split.json +bd210bf65b62269477bac798b659190efaa3e705 assets/overengineered/models/multiblock/universal_motor_split.json +09393cf4a1c6326719b0cbaa91989e310dfa800b data/minecraft/tags/blocks/mineable/pickaxe.json +66b1aac1bfde046d0ecdadcb5427d2f2b9cb12dc data/overengineered/loot_tables/blocks/universal_motor.json diff --git a/src/generated/resources/assets/overengineered/blockstates/universal_motor.json b/src/generated/resources/assets/overengineered/blockstates/universal_motor.json new file mode 100644 index 0000000..8131d6c --- /dev/null +++ b/src/generated/resources/assets/overengineered/blockstates/universal_motor.json @@ -0,0 +1,42 @@ +{ + "variants": { + "facing=north,mirrored=false": { + "model": "overengineered:multiblock/universal_motor_split", + "uvlock": true + }, + "facing=south,mirrored=false": { + "model": "overengineered:multiblock/universal_motor_split", + "y": 180, + "uvlock": true + }, + "facing=west,mirrored=false": { + "model": "overengineered:multiblock/universal_motor_split", + "y": 270, + "uvlock": true + }, + "facing=east,mirrored=false": { + "model": "overengineered:multiblock/universal_motor_split", + "y": 90, + "uvlock": true + }, + "facing=north,mirrored=true": { + "model": "overengineered:multiblock/universal_motor_mirrored_split", + "uvlock": true + }, + "facing=south,mirrored=true": { + "model": "overengineered:multiblock/universal_motor_mirrored_split", + "y": 180, + "uvlock": true + }, + "facing=west,mirrored=true": { + "model": "overengineered:multiblock/universal_motor_mirrored_split", + "y": 270, + "uvlock": true + }, + "facing=east,mirrored=true": { + "model": "overengineered:multiblock/universal_motor_mirrored_split", + "y": 90, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/item/universal_motor.json b/src/generated/resources/assets/overengineered/models/item/universal_motor.json new file mode 100644 index 0000000..086aba9 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/item/universal_motor.json @@ -0,0 +1,111 @@ +{ + "display": { + "firstperson_lefthand": { + "scale": [ + 0.03125, + 0.03125, + 0.03125 + ] + }, + "firstperson_righthand": { + "scale": [ + 0.03125, + 0.03125, + 0.03125 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.75, + -5, + -1.25 + ], + "scale": [ + 0.03125, + 0.03125, + 0.03125 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 0, + 270, + 0 + ], + "translation": [ + 1, + -5, + -1.75 + ], + "scale": [ + 0.03125, + 0.03125, + 0.03125 + ] + }, + "head": { + "translation": [ + 1.5, + 8, + 1.5 + ], + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + -1, + -6, + 0 + ], + "scale": [ + 0.0625, + 0.0625, + 0.0625 + ] + }, + "ground": { + "translation": [ + 1, + 0, + 1 + ], + "scale": [ + 0.0625, + 0.0625, + 0.0625 + ] + }, + "fixed": { + "translation": [ + 0, + -8, + 0 + ], + "scale": [ + 0.0625, + 0.0625, + 0.0625 + ] + } + }, + "textures": { + "texture": "overengineered:multiblock/universal_motor" + }, + "loader": "forge:obj", + "model": "overengineered:models/multiblock/obj/universal_motor.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/multiblock/universal_motor_mirrored_split.json b/src/generated/resources/assets/overengineered/models/multiblock/universal_motor_mirrored_split.json new file mode 100644 index 0000000..27cada2 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/multiblock/universal_motor_mirrored_split.json @@ -0,0 +1,108 @@ +{ + "parent": "minecraft:block/block", + "loader": "immersiveengineering:basic_split", + "dynamic": false, + "inner_model": { + "parent": "minecraft:block/block", + "textures": { + "texture": "overengineered:multiblock/universal_motor", + "particle": "overengineered:multiblock/universal_motor" + }, + "loader": "forge:obj", + "model": "overengineered:models/multiblock/obj/universal_motor_mirrored.obj", + "detectCullableFaces": false, + "flip-v": true + }, + "split_parts": [ + [ + 1, + -1, + -1 + ], + [ + 1, + -1, + 0 + ], + [ + 1, + -1, + 1 + ], + [ + 0, + -1, + -1 + ], + [ + 0, + -1, + 0 + ], + [ + 0, + -1, + 1 + ], + [ + -1, + -1, + -1 + ], + [ + -1, + -1, + 0 + ], + [ + -1, + -1, + 1 + ], + [ + 1, + 0, + 0 + ], + [ + 1, + 0, + 1 + ], + [ + 0, + 0, + 0 + ], + [ + -1, + 0, + 0 + ], + [ + 1, + 1, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + -1, + 1, + 0 + ], + [ + 0, + 0, + -1 + ], + [ + 0, + 0, + 1 + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/multiblock/universal_motor_split.json b/src/generated/resources/assets/overengineered/models/multiblock/universal_motor_split.json new file mode 100644 index 0000000..c157be7 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/multiblock/universal_motor_split.json @@ -0,0 +1,108 @@ +{ + "parent": "minecraft:block/block", + "loader": "immersiveengineering:basic_split", + "dynamic": false, + "inner_model": { + "parent": "minecraft:block/block", + "textures": { + "texture": "overengineered:multiblock/universal_motor", + "particle": "overengineered:multiblock/universal_motor" + }, + "loader": "forge:obj", + "model": "overengineered:models/multiblock/obj/universal_motor.obj", + "detectCullableFaces": false, + "flip-v": true + }, + "split_parts": [ + [ + -1, + -1, + -1 + ], + [ + -1, + -1, + 0 + ], + [ + -1, + -1, + 1 + ], + [ + 0, + -1, + -1 + ], + [ + 0, + -1, + 0 + ], + [ + 0, + -1, + 1 + ], + [ + 1, + -1, + -1 + ], + [ + 1, + -1, + 0 + ], + [ + 1, + -1, + 1 + ], + [ + -1, + 0, + 0 + ], + [ + -1, + 0, + 1 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + -1, + 1, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 1, + 1, + 0 + ], + [ + 0, + 0, + -1 + ], + [ + 0, + 0, + 1 + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 0000000..504c273 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "overengineered:universal_motor" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/loot_tables/blocks/universal_motor.json b/src/generated/resources/data/overengineered/loot_tables/blocks/universal_motor.json new file mode 100644 index 0000000..09da081 --- /dev/null +++ b/src/generated/resources/data/overengineered/loot_tables/blocks/universal_motor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "overengineered:multiblock_original_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/java/twistedgate/overengineered/OverEngineered.java b/src/main/java/twistedgate/overengineered/OverEngineered.java index 728e977..2f2bb17 100644 --- a/src/main/java/twistedgate/overengineered/OverEngineered.java +++ b/src/main/java/twistedgate/overengineered/OverEngineered.java @@ -85,6 +85,7 @@ private void setup(final FMLCommonSetupEvent event){ proxy.preInit(); OEContent.init(event); + proxy.init(); proxy.postInit(); diff --git a/src/main/java/twistedgate/overengineered/client/ClientModBusEventHandlers.java b/src/main/java/twistedgate/overengineered/client/ClientModBusEventHandlers.java new file mode 100644 index 0000000..2ace0b8 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/client/ClientModBusEventHandlers.java @@ -0,0 +1,27 @@ +package twistedgate.overengineered.client; + +import java.util.function.Supplier; + +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent.RegisterRenderers; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.client.render.UniversalMotorRenderer; +import twistedgate.overengineered.common.OETileTypes; + +@Mod.EventBusSubscriber(modid = OverEngineered.MODID, value = Dist.CLIENT, bus = Bus.MOD) +public class ClientModBusEventHandlers{ + @SubscribeEvent + public static void registerRenders(RegisterRenderers ev){ + registerBERender(ev, OETileTypes.UNIVERSAL_MOTOR.master(), UniversalMotorRenderer::new); + } + + private static void registerBERender(RegisterRenderers ev, BlockEntityType type, Supplier> factory){ + ev.registerBlockEntityRenderer(type, ctx -> factory.get()); + } +} diff --git a/src/main/java/twistedgate/overengineered/client/render/UniversalMotorRenderer.java b/src/main/java/twistedgate/overengineered/client/render/UniversalMotorRenderer.java new file mode 100644 index 0000000..55c027f --- /dev/null +++ b/src/main/java/twistedgate/overengineered/client/render/UniversalMotorRenderer.java @@ -0,0 +1,86 @@ +package twistedgate.overengineered.client.render; + +import java.util.List; +import java.util.function.Function; + +import javax.annotation.Nonnull; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.PoseStack.Pose; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Quaternion; +import com.mojang.math.Vector3f; +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; +import com.simibubi.create.foundation.utility.AnimationTickHolder; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.client.model.ForgeModelBakery; +import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.blocks.tileentity.UniversalMotorTileEntity; +import twistedgate.overengineered.utils.ResourceUtils; + +@Mod.EventBusSubscriber(modid = OverEngineered.MODID, value = Dist.CLIENT, bus = Bus.MOD) +public class UniversalMotorRenderer implements BlockEntityRenderer{ + + static final ResourceLocation UM_ROTOR_RL = ResourceUtils.oe("multiblock/dyn/universal_motor_rotor"); + static final Function f = rl -> Minecraft.getInstance().getBlockRenderer().getBlockModelShaper().getModelManager().getModel(rl); + + @SubscribeEvent + public static void init(ModelRegistryEvent event){ + ForgeModelBakery.addSpecialModel(UM_ROTOR_RL); + } + + @Override + public boolean shouldRenderOffScreen(@Nonnull UniversalMotorTileEntity te){ + return true; + } + + @SuppressWarnings("deprecation") + @Override + public void render(UniversalMotorTileEntity te, float partialTicks, @Nonnull PoseStack matrix, @Nonnull MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn){ + if(te == null || !te.formed || te.isDummy() || !te.getLevelNonnull().hasChunkAt(te.getBlockPos())){ + return; + } + + renderRotor(matrix, bufferIn, te, partialTicks, combinedLightIn, combinedOverlayIn); + } + + static final Vector3f X_AXIS = new Vector3f(1.0F, 0.0F, 0.0F); + static final Vector3f Z_AXIS = new Vector3f(0.0F, 0.0F, 1.0F); + private void renderRotor(PoseStack matrix, MultiBufferSource buffer, UniversalMotorTileEntity master, float partialTicks, int light, int overlay){ + matrix.pushPose(); + { + float angle = ((AnimationTickHolder.getRenderTime(master.getLevel()) * KineticBlockEntity.convertToAngular(master.getSpeed()) + 22.5F) % 360); + + int dir = switch(master.getFacing()){ + case EAST -> -90; + case SOUTH -> 180; + case WEST -> 90; + default -> 0; + }; + + matrix.translate(0.5, 0.5, 0.5); + matrix.mulPose(new Quaternion(Vector3f.YP, dir, true)); + matrix.mulPose(new Quaternion(Vector3f.ZP, angle, true)); + List quads = f.apply(UM_ROTOR_RL).getQuads(null, null, null, EmptyModelData.INSTANCE); + Pose last = matrix.last(); + VertexConsumer solid = buffer.getBuffer(RenderType.solid()); + for(BakedQuad quad:quads){ + solid.putBulkData(last, quad, 0.80F, 0.80F, 0.80F, light, overlay); + } + } + matrix.popPose(); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/OEContent.java b/src/main/java/twistedgate/overengineered/common/OEContent.java index 140d27f..ea087bb 100644 --- a/src/main/java/twistedgate/overengineered/common/OEContent.java +++ b/src/main/java/twistedgate/overengineered/common/OEContent.java @@ -1,10 +1,22 @@ package twistedgate.overengineered.common; +import blusunrize.immersiveengineering.api.multiblocks.MultiblockHandler; import net.minecraftforge.fml.event.lifecycle.ParallelDispatchEvent; +import net.minecraftforge.registries.RegistryObject; +import twistedgate.overengineered.common.blocks.UniversalMotorBlock; +import twistedgate.overengineered.common.multiblock.UniversalMotorMultiblock; public class OEContent{ public static class Blocks{ - + /* + public static final BlockEntry CREATE_TEST = OERegisters.REGISTRATE.block("create_test", CreateTestBlock::new) + .initialProperties(Material.METAL) + .transform(BlockStressDefaults.setCapacity(64 / 256F)) + .transform(BlockStressDefaults.setGeneratorSpeed(() -> Couple.create(0, 256))) + //.item((b, u) -> new BlockItem(b, u.tab(OverEngineered.creativeTab))) + //.transform(ModelGen.customItemModel()) + .register(); + */ private static void forceClassLoad(){ } } @@ -15,9 +27,10 @@ private static void forceClassLoad(){ } } - // Not even sure OE is going to even have any MB at all public static class Multiblock{ + public static final RegistryObject UNIVERSAL_MOTOR = OERegisters.registerMultiblockBlock("universal_motor", UniversalMotorBlock::new); + private static void forceClassLoad(){ } } @@ -27,10 +40,9 @@ public static void modConstruction(){ Items.forceClassLoad(); Multiblock.forceClassLoad(); - - OETileTypes.forceClassLoad(); } public static void init(ParallelDispatchEvent event){ + MultiblockHandler.registerMultiblock(UniversalMotorMultiblock.INSTANCE); } } diff --git a/src/main/java/twistedgate/overengineered/common/OERegisters.java b/src/main/java/twistedgate/overengineered/common/OERegisters.java index 0503599..b2fe908 100644 --- a/src/main/java/twistedgate/overengineered/common/OERegisters.java +++ b/src/main/java/twistedgate/overengineered/common/OERegisters.java @@ -6,7 +6,11 @@ import javax.annotation.Nullable; import com.google.common.collect.ImmutableSet; +import com.simibubi.create.foundation.data.CreateRegistrate; +import blusunrize.immersiveengineering.api.IEProperties; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces; +import blusunrize.immersiveengineering.common.blocks.MultiblockBEType; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.EntityType; import net.minecraft.world.inventory.MenuType; @@ -33,6 +37,8 @@ public class OERegisters{ private static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, OverEngineered.MODID); private static final DeferredRegister MOB_EFFECT = DeferredRegister.create(ForgeRegistries.MOB_EFFECTS, OverEngineered.MODID); + protected static final CreateRegistrate REGISTRATE = CreateRegistrate.create(OverEngineered.MODID); + public static void addRegistersToEventBus(IEventBus eventBus){ BLOCK_REGISTER.register(eventBus); ITEM_REGISTER.register(eventBus); @@ -42,12 +48,18 @@ public static void addRegistersToEventBus(IEventBus eventBus){ MENU_REGISTER.register(eventBus); RECIPE_SERIALIZERS.register(eventBus); MOB_EFFECT.register(eventBus); + + REGISTRATE.registerEventListeners(eventBus); } protected static RegistryObject registerBlock(String name, Supplier blockConstructor){ return registerBlock(name, blockConstructor, null); } + protected static RegistryObject registerMultiblockBlock(String name, Supplier blockConstructor){ + return registerBlock(name, blockConstructor, block -> new BlockItem(block, new Item.Properties())); + } + protected static RegistryObject registerBlock(String name, Supplier blockConstructor, @Nullable Function blockItem){ RegistryObject block = BLOCK_REGISTER.register(name, blockConstructor); if(blockItem != null){ @@ -63,4 +75,8 @@ protected static RegistryObject registerItem(String name, Su protected static RegistryObject> registerTE(String name, BlockEntityType.BlockEntitySupplier factory, Supplier valid){ return TE_REGISTER.register(name, () -> new BlockEntityType<>(factory, ImmutableSet.of(valid.get()), null)); } + + protected static MultiblockBEType registerMultiblockTE(String name, MultiblockBEType.BEWithTypeConstructor factory, Supplier valid){ + return new MultiblockBEType<>(name, TE_REGISTER, factory, valid, state -> state.hasProperty(IEProperties.MULTIBLOCKSLAVE) && !state.getValue(IEProperties.MULTIBLOCKSLAVE)); + } } diff --git a/src/main/java/twistedgate/overengineered/common/OETileTypes.java b/src/main/java/twistedgate/overengineered/common/OETileTypes.java index e2acd34..2430d86 100644 --- a/src/main/java/twistedgate/overengineered/common/OETileTypes.java +++ b/src/main/java/twistedgate/overengineered/common/OETileTypes.java @@ -1,7 +1,12 @@ package twistedgate.overengineered.common; +import blusunrize.immersiveengineering.common.blocks.MultiblockBEType; +import twistedgate.overengineered.common.blocks.tileentity.UniversalMotorTileEntity; + public class OETileTypes{ + public static final MultiblockBEType UNIVERSAL_MOTOR = OERegisters.registerMultiblockTE("universal_motor", UniversalMotorTileEntity::new, OEContent.Multiblock.UNIVERSAL_MOTOR); + public static void forceClassLoad(){ } } diff --git a/src/main/java/twistedgate/overengineered/common/blocks/CustomHorizontalAxisKineticBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/CustomHorizontalAxisKineticBlock.java new file mode 100644 index 0000000..7041978 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/CustomHorizontalAxisKineticBlock.java @@ -0,0 +1,270 @@ +package twistedgate.overengineered.common.blocks; + +import java.util.List; +import java.util.function.BiFunction; + +import javax.annotation.Nullable; + +import com.google.common.collect.ImmutableList; +import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock; + +import blusunrize.immersiveengineering.api.IEProperties; +import blusunrize.immersiveengineering.api.IETags; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.ICollisionBounds; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IHasDummyBlocks; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.ISelectionBounds; +import blusunrize.immersiveengineering.common.blocks.IEEntityBlock; +import blusunrize.immersiveengineering.common.blocks.IEMultiblockBlock; +import blusunrize.immersiveengineering.common.blocks.MultiblockBEType; +import blusunrize.immersiveengineering.common.util.Utils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.NonNullList; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.common.util.LazyOptional; +import twistedgate.overengineered.common.blocks.tileentity.CustomKineticBlockEntity; +import twistedgate.overengineered.common.blocks.tileentity.KineticMultiblockPartTileEntity; + +/** + * This has a lot of things copied-pasted from {@link IEMultiblockBlock} and {@link IEEntityBlock}, but only the important bits. + * + * @author TwistedGate + */ +public abstract class CustomHorizontalAxisKineticBlock> extends HorizontalAxisKineticBlock implements EntityBlock{ + protected int lightOpacity; + private final BiFunction makeEntity; + protected final boolean notNormalBlock; + public CustomHorizontalAxisKineticBlock(MultiblockBEType entityType, Properties props){ + super(props); + this.makeEntity = entityType; + this.notNormalBlock = !defaultBlockState().canOcclude(); + + this.registerDefaultState(getInitDefaultState()); + } + + @Override + protected void createBlockStateDefinition(Builder builder){ + super.createBlockStateDefinition(builder); + builder.add(IEProperties.FACING_HORIZONTAL, IEProperties.MULTIBLOCKSLAVE); + } + + public CustomHorizontalAxisKineticBlock setLightOpacity(int opacity){ + this.lightOpacity = opacity; + return this; + } + + @Override + public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos){ + if(this.notNormalBlock) + return 0; + else if(state.isSolidRender(worldIn, pos)) + return this.lightOpacity; + else + return state.propagatesSkylightDown(worldIn, pos) ? 0 : 1; + } + + @SuppressWarnings("deprecation") + @Override + public float getShadeBrightness(BlockState state, BlockGetter world, BlockPos pos){ + return this.notNormalBlock ? 1 : super.getShadeBrightness(state, world, pos); + } + + @Override + public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos){ + return this.notNormalBlock || super.propagatesSkylightDown(state, reader, pos); + } + + @Override + @SuppressWarnings("deprecation") + public boolean triggerEvent(BlockState state, Level worldIn, BlockPos pos, int eventID, int eventParam){ + if(worldIn.isClientSide && eventID == 255){ + worldIn.sendBlockUpdated(pos, state, state, 3); + return true; + } + return super.triggerEvent(state, worldIn, pos, eventID, eventParam); + } + + @Override + @SuppressWarnings("deprecation") + public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit){ + ItemStack activeStack = player.getItemInHand(hand); + if(activeStack.is(IETags.hammers)) + return hammerUseSide(hit.getDirection(), player, hand, world, pos, hit); + if(activeStack.is(IETags.screwdrivers)) + return screwdriverUseSide(hit.getDirection(), player, hand, world, pos, hit); + return super.use(state, world, pos, player, hand, hit); + } + + public InteractionResult hammerUseSide(Direction side, Player player, InteractionHand hand, Level w, BlockPos pos, BlockHitResult hit){ + return InteractionResult.PASS; + } + + public InteractionResult screwdriverUseSide(Direction side, Player player, InteractionHand hand, Level w, BlockPos pos, BlockHitResult hit){ + return InteractionResult.PASS; + } + + @Override + public boolean isPathfindable(BlockState state, BlockGetter worldIn, BlockPos pos, PathComputationType type){ + return false; + } + + protected boolean canRotate(){ + // Basic heuristic: Multiblocks should not be rotated depending on state + return !getStateDefinition().getProperties().contains(IEProperties.MULTIBLOCKSLAVE); + } + + private static final List DEFAULT_OFF = ImmutableList.of(IEProperties.MULTIBLOCKSLAVE, IEProperties.ACTIVE, IEProperties.MIRRORED); + + protected BlockState getInitDefaultState(){ + BlockState ret = this.stateDefinition.any(); + + /*// ALL multiblocks i've seen thus far only have horizontal facing + if(ret.hasProperty(IEProperties.FACING_ALL)) + ret = ret.setValue(IEProperties.FACING_ALL, getDefaultFacing()); + else*/ + if(ret.hasProperty(IEProperties.FACING_HORIZONTAL)) + ret = ret.setValue(IEProperties.FACING_HORIZONTAL, getDefaultFacing()); + + if(ret.hasProperty(HorizontalAxisKineticBlock.HORIZONTAL_AXIS)) + ret = ret.setValue(HorizontalAxisKineticBlock.HORIZONTAL_AXIS, getDefaultFacing().getAxis()); + + for(BooleanProperty defaultOff:DEFAULT_OFF) + if(ret.hasProperty(defaultOff)) + ret = ret.setValue(defaultOff, false); + return ret; + } + + protected Direction getDefaultFacing(){ + return Direction.NORTH; + } + + @Override + public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving){ + if(state.getBlock() != newState.getBlock()){ + BlockEntity blockEntity = world.getBlockEntity(pos); + if(blockEntity instanceof CustomKineticBlockEntity baseTE) + baseTE.setOverrideState(state); + if(blockEntity instanceof KineticMultiblockPartTileEntity multiblockTE){ + // Remove the BE here before disassembling: The block is already gone, so setting the block state here + // to a block providing a BE will produce strange results otherwise + super.onRemove(state, world, pos, newState, isMoving); + multiblockTE.disassemble(); + return; + } + } + + { + BlockEntity te = world.getBlockEntity(pos); + if(state.getBlock() != newState.getBlock()){ + if(te instanceof CustomKineticBlockEntity custom) + custom.setOverrideState(state); + if(te instanceof IHasDummyBlocks hasDummyBlocks) + hasDummyBlocks.breakDummies(pos, state); + } + } + + super.onRemove(state, world, pos, newState, isMoving); + } + + @Override + public void neighborChanged(BlockState pState, Level pLevel, BlockPos pPos, Block pBlock, BlockPos pFromPos, boolean pIsMoving){ + if(!pLevel.isClientSide){ + BlockEntity te = pLevel.getBlockEntity(pPos); + if(te instanceof CustomKineticBlockEntity custom){ + custom.onNeighborBlockChange(pFromPos); + } + } + } + + @Override + public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGetter world, BlockPos pos, Player player){ + BlockEntity te = world.getBlockEntity(pos); + if(te instanceof KineticMultiblockPartTileEntity mb) + return Utils.getPickBlock(mb.getOriginalBlock(), target, player); + return ItemStack.EMPTY; + } + + @Override + @SuppressWarnings("deprecation") + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) + { + if(state.getBlock()==this) + { + BlockEntity te = world.getBlockEntity(pos); + if(te instanceof ISelectionBounds bounds) + return bounds.getSelectionShape(context); + } + return super.getShape(state, world, pos, context); + } + + private LazyOptional lazyCol; + private final boolean hasCustomCollisions(){ + if(this.lazyCol == null){ + this.lazyCol = LazyOptional.of(() -> { + T tmp = this.makeEntity.apply(BlockPos.ZERO, getInitDefaultState()); + return tmp instanceof IEBlockInterfaces.ICollisionBounds; + }); + } + return this.lazyCol.orElse(false); + } + + @Override + @SuppressWarnings("deprecation") + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) + { + if(hasCustomCollisions()) + { + BlockEntity te = world.getBlockEntity(pos); + if(te instanceof ICollisionBounds collisionBounds) + return collisionBounds.getCollisionShape(context); + else + // Temporary hack: The vanilla Entity#isInWall passes nonsense positions to this method (always the head + // center rather than the actual block). This stops our blocks from suffocating people when this happens + return Shapes.empty(); + } + return super.getCollisionShape(state, world, pos, context); + } + + @Override + @SuppressWarnings("deprecation") + public VoxelShape getInteractionShape(BlockState state, BlockGetter world, BlockPos pos) + { + if(world.getBlockState(pos).getBlock()==this) + { + BlockEntity te = world.getBlockEntity(pos); + if(te instanceof ISelectionBounds selectionBounds) + return selectionBounds.getSelectionShape(null); + } + return super.getInteractionShape(state, world, pos); + } + + @Override + public void fillItemCategory(CreativeModeTab group, NonNullList items){ + // Don't add multiblocks to the creative tab/JEI + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState){ + return this.makeEntity.apply(pPos, pState); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/OEMetalMultiblock.java b/src/main/java/twistedgate/overengineered/common/blocks/OEMetalMultiblock.java new file mode 100644 index 0000000..6817a95 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/OEMetalMultiblock.java @@ -0,0 +1,33 @@ +package twistedgate.overengineered.common.blocks; + +import blusunrize.immersiveengineering.api.IEProperties; +import blusunrize.immersiveengineering.common.blocks.MultiblockBEType; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import twistedgate.overengineered.common.blocks.ticking.OECommonTickableTile; +import twistedgate.overengineered.common.blocks.tileentity.KineticMultiblockPartTileEntity; + +public abstract class OEMetalMultiblock & OECommonTickableTile> extends CustomHorizontalAxisKineticBlock{ + private final MultiblockBEType multiblockBEType; + + public OEMetalMultiblock(MultiblockBEType entityType, Block.Properties props){ + super(entityType, props.strength(3, 15).requiresCorrectToolForDrops().isViewBlocking((state, blockReader, pos) -> false).noOcclusion()); + this.multiblockBEType = entityType; + } + + @Override + protected void createBlockStateDefinition(Builder builder){ + super.createBlockStateDefinition(builder); + builder.add(IEProperties.MIRRORED); + } + + @Override + public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type){ + return OEBlockBase.createTickerHelper(world.isClientSide, type, this.multiblockBEType.master()); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/UniversalMotorBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/UniversalMotorBlock.java new file mode 100644 index 0000000..aa33c5e --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/UniversalMotorBlock.java @@ -0,0 +1,13 @@ +package twistedgate.overengineered.common.blocks; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; +import twistedgate.overengineered.common.OETileTypes; +import twistedgate.overengineered.common.blocks.tileentity.UniversalMotorTileEntity; + +public class UniversalMotorBlock extends OEMetalMultiblock{ + public UniversalMotorBlock(){ + super(OETileTypes.UNIVERSAL_MOTOR, Block.Properties.of(Material.METAL).sound(SoundType.METAL)); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/ticking/OECommonTickableTile.java b/src/main/java/twistedgate/overengineered/common/blocks/ticking/OECommonTickableTile.java new file mode 100644 index 0000000..eccd518 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/ticking/OECommonTickableTile.java @@ -0,0 +1,5 @@ +package twistedgate.overengineered.common.blocks.ticking; + +public interface OECommonTickableTile extends OEServerTickableTile, OEClientTickableTile{ + +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BasicTileEntity.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BasicTileEntity.java index bf93561..a83264d 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BasicTileEntity.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BasicTileEntity.java @@ -42,7 +42,8 @@ public CompoundTag getUpdateTag(){ @Override public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt){ - load(pkt.getTag()); + if(pkt.getTag() != null) + load(pkt.getTag()); } @Override diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/CustomKineticBlockEntity.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/CustomKineticBlockEntity.java new file mode 100644 index 0000000..797a3ba --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/CustomKineticBlockEntity.java @@ -0,0 +1,244 @@ +package twistedgate.overengineered.common.blocks.tileentity; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; +import java.util.Objects; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.google.common.base.Preconditions; +import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; + +import blusunrize.immersiveengineering.api.energy.WrappingEnergyStorage; +import blusunrize.immersiveengineering.api.utils.DirectionUtils; +import blusunrize.immersiveengineering.api.utils.SafeChunkUtils; +import blusunrize.immersiveengineering.common.blocks.IEBaseBlockEntity; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.BlockstateProvider; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IGeneralMultiblock; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IRedstoneOutput; +import blusunrize.immersiveengineering.common.util.ResettableCapability; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RedStoneWireBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.energy.IEnergyStorage; + +/** + * Multiblock capable {@link KineticBlockEntity}
+ *
+ * A lot of this is copy-pasted from {@link IEBaseBlockEntity} + * + * @author TwistedGate + */ +public abstract class CustomKineticBlockEntity extends GeneratingKineticBlockEntity implements BlockstateProvider{ + + public CustomKineticBlockEntity(BlockEntityType typeIn, BlockPos pos, BlockState state){ + super(typeIn, pos, state); + } + + @Override + protected void read(CompoundTag compound, boolean clientPacket){ + readCustom(compound, clientPacket); + super.read(compound, clientPacket); + } + + @Override + protected void write(CompoundTag compound, boolean clientPacket){ + writeCustom(compound, clientPacket); + super.write(compound, clientPacket); + } + + public abstract void readCustom(CompoundTag tag, boolean clientPacket); + public abstract void writeCustom(CompoundTag tag, boolean clientPacket); + + // ------------------------------------------------------------ + // Everything copied from IEBaseBlockEntity is below this point + // ------------------------------------------------------------ + + /** + * Set by and for those instances of IGeneralMultiblock that need to drop their inventory + */ + protected IGeneralMultiblock tempMasterBE; + @Nullable + private BlockState overrideBlockState = null; + private final EnumMap redstoneBySide = new EnumMap<>(Direction.class); + // ^ These would normaly be above the Constructor, but i've put them down here instead. + + @Override + public void setState(BlockState state){ + if(getLevelNonnull().getBlockState(this.worldPosition) == getState()) + getLevelNonnull().setBlockAndUpdate(this.worldPosition, state); + } + + @Override + public BlockState getState(){ + return getBlockState(); + } + + public void setOverrideState(@Nullable BlockState state){ + this.overrideBlockState = state; + } + + @Override + public BlockState getBlockState(){ + if(this.overrideBlockState != null) + return this.overrideBlockState; + else + return super.getBlockState(); + } + + /** + * Most calls to {@link BlockEntity#setChanged} should be replaced by this. The vanilla mD also updates comparator states and re-caches the block + * state, while in most cases we just want to say "this needs to be saved to disk" + */ + @SuppressWarnings("deprecation") + protected void markChunkDirty(){ + if(this.level != null && this.level.hasChunkAt(this.worldPosition)) + this.level.getChunkAt(this.worldPosition).setUnsaved(true); + } + + public void markContainingBlockForUpdate(@Nullable BlockState newState){ + if(this.level != null) + markBlockForUpdate(getBlockPos(), newState); + } + + public void markBlockForUpdate(BlockPos pos, @Nullable BlockState newState){ + BlockState state = this.level.getBlockState(pos); + if(newState == null) + newState = state; + this.level.sendBlockUpdated(pos, state, newState, 3); + this.level.updateNeighborsAt(pos, newState.getBlock()); + } + + @Nonnull + public Level getLevelNonnull(){ + return Objects.requireNonNull(super.getLevel()); + } + + protected boolean isRSPowered(){ + for(Direction d:DirectionUtils.VALUES) + if(getRSInput(d) > 0) + return true; + return false; + } + + protected int getRSInput(Direction from){ + if(this.level.isClientSide || !this.redstoneBySide.containsKey(from)) + updateRSForSide(from); + return this.redstoneBySide.get(from); + } + + private void updateRSForSide(Direction side){ + int rsStrength = getLevelNonnull().getSignal(this.worldPosition.relative(side), side); + if(rsStrength == 0 && this instanceof IRedstoneOutput redOut && redOut.canConnectRedstone(side)){ + BlockState state = SafeChunkUtils.getBlockState(this.level, this.worldPosition.relative(side)); + if(state.getBlock() == Blocks.REDSTONE_WIRE && state.getValue(RedStoneWireBlock.POWER) > rsStrength) + rsStrength = state.getValue(RedStoneWireBlock.POWER); + } + this.redstoneBySide.put(side, rsStrength); + } + + public void onNeighborBlockChange(BlockPos otherPos){ + BlockPos delta = otherPos.subtract(worldPosition); + Direction side = Direction.getNearest(delta.getX(), delta.getY(), delta.getZ()); + Preconditions.checkNotNull(side); + updateRSForSide(side); + } + + @Override + public void setLevel(Level world){ + super.setLevel(world); + this.redstoneBySide.clear(); + } + + // Based on the super version, but works around a Forge patch to World#markChunkDirty causing duplicate comparator + // updates and only performs comparator updates if this TE actually has comparator behavior + @Override + public void setChanged(){ + if(this.level != null){ + markChunkDirty(); + BlockState state = getBlockState(); + if(state.hasAnalogOutputSignal()) + this.level.updateNeighbourForOutputSignal(this.worldPosition, state.getBlock()); + } + } + + @Override + public boolean triggerEvent(int id, int type){ + if(id == 0 || id == 255){ + markContainingBlockForUpdate(null); + return true; + }else if(id == 254){ + BlockState state = this.level.getBlockState(this.worldPosition); + this.level.sendBlockUpdated(this.worldPosition, state, state, 3); + return true; + } + return super.triggerEvent(id, type); + } + + private final List> caps = new ArrayList<>(); + private final List onCapInvalidate = new ArrayList<>(); + + protected ResettableCapability registerCapability(T val){ + ResettableCapability cap = new ResettableCapability<>(val); + this.caps.add(cap); + return cap; + } + + public void addCapInvalidateHook(Runnable hook){ + this.onCapInvalidate.add(hook); + } + + protected ResettableCapability registerEnergyInput(IEnergyStorage directStorage){ + return registerCapability(new WrappingEnergyStorage(directStorage, true, false, this::setChanged)); + } + + protected ResettableCapability registerEnergyOutput(IEnergyStorage directStorage){ + return registerCapability(new WrappingEnergyStorage(directStorage, false, true, this::setChanged)); + } + + @Override + public void invalidateCaps(){ + super.invalidateCaps(); + resetAllCaps(); + this.caps.clear(); + this.onCapInvalidate.forEach(Runnable::run); + this.onCapInvalidate.clear(); + } + + protected void resetAllCaps(){ + this.caps.forEach(ResettableCapability::reset); + } + + private boolean isUnloaded = false; + + @Override + public void onLoad(){ + super.onLoad(); + this.isUnloaded = false; + } + + @Override + public void onChunkUnloaded(){ + super.onChunkUnloaded(); + this.isUnloaded = true; + } + + @Override + public final void remove(){ + if(!this.isUnloaded) + setRemovedOE(); + super.remove(); + } + + public void setRemovedOE(){ + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/KineticMultiblockPartTileEntity.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/KineticMultiblockPartTileEntity.java new file mode 100644 index 0000000..7a403a3 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/KineticMultiblockPartTileEntity.java @@ -0,0 +1,273 @@ +package twistedgate.overengineered.common.blocks.tileentity; + +import java.util.Collection; +import java.util.Set; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.apache.commons.lang3.mutable.MutableInt; + +import com.mojang.datafixers.util.Pair; + +import blusunrize.immersiveengineering.api.IEProperties; +import blusunrize.immersiveengineering.api.Lib; +import blusunrize.immersiveengineering.api.client.IModelOffsetProvider; +import blusunrize.immersiveengineering.api.multiblocks.TemplateMultiblock; +import blusunrize.immersiveengineering.api.utils.SafeChunkUtils; +import blusunrize.immersiveengineering.api.utils.shapes.CachedShapesWithTransform; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IComparatorOverride; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IGeneralMultiblock; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IMirrorAble; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IReadOnPlacement; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IScrewdriverInteraction; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IStateBasedDirectional; +import blusunrize.immersiveengineering.common.blocks.PlacementLimitation; +import blusunrize.immersiveengineering.common.blocks.generic.MultiblockPartBlockEntity; +import blusunrize.immersiveengineering.common.blocks.multiblocks.IETemplateMultiblock; +import blusunrize.immersiveengineering.common.util.ChatUtils; +import blusunrize.immersiveengineering.common.util.compat.computers.generic.ComputerControlState; +import blusunrize.immersiveengineering.common.util.compat.computers.generic.ComputerControllable; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.common.util.Lazy; + +/** + * This a lot of things copy-pasted from {@link MultiblockPartBlockEntity}, im pretty sure just the important bits. + * + * @author TwistedGate + */ +public abstract class KineticMultiblockPartTileEntity> extends CustomKineticBlockEntity implements IStateBasedDirectional, IGeneralMultiblock, IScrewdriverInteraction, IMirrorAble, IModelOffsetProvider, ComputerControllable{ + + public boolean formed = false; + /** Position of this block according to the BlockInfo's returned by IMultiblock#getStructure */ + public BlockPos posInMultiblock = BlockPos.ZERO; + /** Offset from the master to this block (world coordinate system) */ + public BlockPos offsetToMaster = BlockPos.ZERO; + protected final IETemplateMultiblock multiblockInstance; + /** + * stores the world time at which this block can only be disassembled by breaking the block associated with this TE. This prevents half/duplicate + * disassembly when working with the drill or TCon hammers + */ + public long onlyLocalDissassembly = -1; + protected final Lazy structureDimensions; + protected final boolean hasRedstoneControl; + protected boolean redstoneControlInverted = false; + public final ComputerControlState computerControl = new ComputerControlState(); + + public KineticMultiblockPartTileEntity(IETemplateMultiblock multiblockInstance, BlockEntityType typeIn, boolean hasRSControl, BlockPos pos, BlockState state){ + super(typeIn, pos, state); + this.multiblockInstance = multiblockInstance; + this.structureDimensions = Lazy.of(() -> multiblockInstance.getSize(level)); + this.hasRedstoneControl = hasRSControl; + } + + @Override + public Direction getFacing(){ + return IStateBasedDirectional.super.getFacing(); + } + + @Override + public Property getFacingProperty(){ + return IEProperties.FACING_HORIZONTAL; + } + + @Override + public PlacementLimitation getFacingLimitation(){ + return PlacementLimitation.HORIZONTAL; + } + + @Override + public boolean canHammerRotate(Direction side, Vec3 hit, LivingEntity entity){ + return false; + } + + @Override + public void readCustom(CompoundTag tag, boolean clientPacket){ + this.formed = tag.getBoolean("formed"); + this.posInMultiblock = NbtUtils.readBlockPos(tag.getCompound("posInMultiblock")); + this.offsetToMaster = NbtUtils.readBlockPos(tag.getCompound("offset")); + this.redstoneControlInverted = tag.getBoolean("redstoneControlInverted"); + } + + @Override + public void writeCustom(CompoundTag tag, boolean clientPacket){ + tag.putBoolean("formed", this.formed); + tag.put("posInMultiblock", NbtUtils.writeBlockPos(new BlockPos(this.posInMultiblock))); + tag.put("offset", NbtUtils.writeBlockPos(new BlockPos(this.offsetToMaster))); + tag.putBoolean("redstoneControlInverted", this.redstoneControlInverted); + } + + @SuppressWarnings("unchecked") + @Override + public T master(){ + if(this.offsetToMaster.equals(Vec3i.ZERO)) + return (T) this; + // Used to provide tile-dependant drops after disassembly + if(this.tempMasterBE != null) + return (T) this.tempMasterBE; + return getEntityForPos(this.multiblockInstance.getMasterFromOriginOffset()); + } + + public void updateMasterBlock(BlockState state, boolean blockUpdate){ + T master = master(); + if(master != null){ + master.markChunkDirty(); + if(blockUpdate) + master.markContainingBlockForUpdate(state); + } + } + + @Override + public boolean isDummy(){ + return !this.offsetToMaster.equals(Vec3i.ZERO); + } + + public BlockState getOriginalBlock(){ + for(StructureBlockInfo block:this.multiblockInstance.getStructure(this.level)) + if(block.pos.equals(this.posInMultiblock)) + return block.state; + return Blocks.AIR.defaultBlockState(); + } + + public void disassemble(){ + if(this.formed && !this.level.isClientSide){ + this.tempMasterBE = master(); + BlockPos startPos = getOrigin(); + this.multiblockInstance.disassemble(this.level, startPos, getIsMirrored(), this.multiblockInstance.untransformDirection(getFacing())); + this.level.removeBlock(this.worldPosition, false); + } + } + + public BlockPos getOrigin(){ + return TemplateMultiblock.withSettingsAndOffset(this.worldPosition, BlockPos.ZERO.subtract(this.posInMultiblock), getIsMirrored(), this.multiblockInstance.untransformDirection(getFacing())); + } + + public BlockPos getBlockPosForPos(BlockPos targetPos){ + BlockPos origin = getOrigin(); + return TemplateMultiblock.withSettingsAndOffset(origin, targetPos, getIsMirrored(), this.multiblockInstance.untransformDirection(getFacing())); + } + + public void replaceStructureBlock(BlockPos pos, BlockState state, ItemStack stack, int h, int l, int w){ + if(state.getBlock() == this.getBlockState().getBlock()) + getLevelNonnull().removeBlock(pos, false); + + getLevelNonnull().setBlockAndUpdate(pos, state); + BlockEntity tile = getLevelNonnull().getBlockEntity(pos); + if(tile instanceof IReadOnPlacement readPlacement) + readPlacement.readOnPlacement(null, stack); + } + + // ================================= + // REDSTONE CONTROL + // ================================= + public Set getRedstonePos(){ + throw new UnsupportedOperationException("Tried to get RS position for a multiblock without RS control!"); + } + + public boolean isRedstonePos(){ + if(!this.hasRedstoneControl || getRedstonePos() == null) + return false; + for(BlockPos i:getRedstonePos()) + if(this.posInMultiblock.equals(i)) + return true; + return false; + } + + @Override + public InteractionResult screwdriverUseSide(Direction side, Player player, InteractionHand hand, Vec3 hitVec){ + if(this.isRedstonePos() && this.hasRedstoneControl){ + if(!this.level.isClientSide){ + KineticMultiblockPartTileEntity master = master(); + if(master != null){ + master.redstoneControlInverted = !master.redstoneControlInverted; + ChatUtils.sendServerNoSpamMessages(player, new TranslatableComponent(Lib.CHAT_INFO + "rsControl." + (master.redstoneControlInverted ? "invertedOn" : "invertedOff"))); + this.updateMasterBlock(null, true); + } + } + return InteractionResult.SUCCESS; + } + return InteractionResult.PASS; + } + + public boolean isRSDisabled(){ + Set rsPositions = getRedstonePos(); + if(rsPositions == null || rsPositions.isEmpty()) + return false; + KineticMultiblockPartTileEntity master = master(); + if(master == null) + master = this; + if(master.computerControl.isAttached()) + return !master.computerControl.isEnabled(); + for(BlockPos rsPos:rsPositions){ + T tile = this.getEntityForPos(rsPos); + if(tile != null){ + boolean b = tile.isRSPowered(); + if(this.redstoneControlInverted != b) + return true; + } + } + return false; + } + + @SuppressWarnings("unchecked") + @Nullable + public T getEntityForPos(BlockPos targetPosInMB){ + BlockPos target = getBlockPosForPos(targetPosInMB); + BlockEntity tile = SafeChunkUtils.getSafeBE(getLevelNonnull(), target); + if(this.getClass().isInstance(tile)) + return (T) tile; + return null; + } + + @Nonnull + @Override + public BlockPos getModelOffset(BlockState state, @Nullable Vec3i size){ + BlockPos mirroredPosInMB = this.posInMultiblock; + if(size == null) + size = this.multiblockInstance.getSize(this.level); + if(getIsMirrored()) + mirroredPosInMB = new BlockPos(size.getX() - mirroredPosInMB.getX() - 1, mirroredPosInMB.getY(), mirroredPosInMB.getZ()); + return this.multiblockInstance.multiblockToModelPos(mirroredPosInMB); + } + + public VoxelShape getShape(CachedShapesWithTransform> cache){ + return cache.get(this.posInMultiblock, Pair.of(getFacing(), getIsMirrored())); + } + + @Override + public Stream getAllComputerControlStates(){ + return Stream.of(this.computerControl); + } + + public static & IComparatorOverride> void updateComparators(T tile, Collection offsets, MutableInt cachedValue, int newValue){ + if(newValue == cachedValue.intValue()) + return; + cachedValue.setValue(newValue); + final Level world = tile.getLevelNonnull(); + for(BlockPos offset:offsets){ + final BlockPos worldPos = tile.getBlockPosForPos(offset); + final BlockState stateAt = world.getBlockState(worldPos); + world.updateNeighbourForOutputSignal(worldPos, stateAt.getBlock()); + } + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OEMultiblockPartTileEntity.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OEMultiblockPartTileEntity.java new file mode 100644 index 0000000..835bc10 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OEMultiblockPartTileEntity.java @@ -0,0 +1,22 @@ +package twistedgate.overengineered.common.blocks.tileentity; + +import blusunrize.immersiveengineering.api.energy.AveragingEnergyStorage; +import blusunrize.immersiveengineering.common.blocks.generic.MultiblockPartBlockEntity; +import blusunrize.immersiveengineering.common.blocks.multiblocks.IETemplateMultiblock; +import blusunrize.immersiveengineering.common.util.MultiblockCapability; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.energy.IEnergyStorage; + +public abstract class OEMultiblockPartTileEntity> extends MultiblockPartBlockEntity{ + + public final AveragingEnergyStorage energyStorage; + protected final MultiblockCapability energyCap; + + protected OEMultiblockPartTileEntity(IETemplateMultiblock multiblockInstance, int energyCapacity, boolean hasRSControl, BlockEntityType type, BlockPos pos, BlockState state){ + super(multiblockInstance, type, hasRSControl, pos, state); + this.energyStorage = new AveragingEnergyStorage(energyCapacity); + this.energyCap = MultiblockCapability.make(this, be -> be.energyCap, OEMultiblockPartTileEntity::master, registerEnergyInput(this.energyStorage)); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/UniversalMotorTileEntity.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/UniversalMotorTileEntity.java new file mode 100644 index 0000000..55c5ab7 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/UniversalMotorTileEntity.java @@ -0,0 +1,441 @@ +package twistedgate.overengineered.common.blocks.tileentity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.function.Supplier; + +import com.mojang.datafixers.util.Pair; +import com.simibubi.create.foundation.utility.Lang; + +import blusunrize.immersiveengineering.api.energy.AveragingEnergyStorage; +import blusunrize.immersiveengineering.api.energy.WrappingEnergyStorage; +import blusunrize.immersiveengineering.api.utils.shapes.CachedShapesWithTransform; +import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces; +import blusunrize.immersiveengineering.common.util.MultiblockCapability; +import blusunrize.immersiveengineering.common.util.ResettableCapability; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.util.Mth; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; +import twistedgate.overengineered.common.blocks.ticking.OECommonTickableTile; +import twistedgate.overengineered.common.multiblock.UniversalMotorMultiblock; +import twistedgate.overengineered.utils.AABBUtils; + +/** + * Warning: Highly Experimental and not finished in any way.
+ *
+ * Primary Generator Multiblock TileEntity.
+ *
+ * Communicates with {@link UniversalMotorSlaveTileEntity} and vice versa. + * + * @author TwistedGate + */ +public class UniversalMotorTileEntity extends KineticMultiblockPartTileEntity implements OECommonTickableTile, IEBlockInterfaces.IBlockBounds{ + public static final int maxSpeed = 256; + + public static final BlockPos AXLE_IO_A = new BlockPos(1, 1, 2); + public static final BlockPos AXLE_IO_B = new BlockPos(1, 1, 0); + + public static final Set REDSTONE_POS = Set.of(new BlockPos(0, 1, 2)); + public static final BlockPos ENERGY_POS = new BlockPos(0, 1, 2); + public static final BlockPos ENERGY_POS_STATOR = new BlockPos(2, 0, 2); + + protected Mode mode = Mode.MOTOR; + + /** Serves as both Input (Motor Mode) and Output (Generator Mode) */ + protected final AveragingEnergyStorage energyMain; + protected final MultiblockCapability energyMainCap; + + /** Only used when in Generator Mode */ + protected final AveragingEnergyStorage energyStator; + protected final MultiblockCapability energyStatorCap; + + public UniversalMotorTileEntity(BlockEntityType type, BlockPos pos, BlockState state){ + super(UniversalMotorMultiblock.INSTANCE, type, true, pos, state); + + this.energyMain = new AveragingEnergyStorage(4096); + this.energyMainCap = MultiblockCapability.make( + this, be -> be.energyMainCap, UniversalMotorTileEntity::master, registerEnergyIO(this.energyMain, this) + ); + + this.energyStator = new AveragingEnergyStorage(1024); + this.energyStatorCap = MultiblockCapability.make( + this, be -> be.energyStatorCap, UniversalMotorTileEntity::master, registerEnergyInput(this.energyStator) + ); + } + + private ResettableCapability registerEnergyIO(IEnergyStorage directStorage, UniversalMotorTileEntity te){ + final LazyOptional lazy = LazyOptional.of(te::master); + + Supplier isMotor = () -> { + UniversalMotorTileEntity master = lazy.orElseGet(null); + if(master == null) + return false; + return master.isMotor(); + }; + + return registerCapability(new ModeSupportedWrappingEnergyStorage(directStorage, isMotor, () -> false, this::setChanged)); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side){ + if(cap == CapabilityEnergy.ENERGY){ + if(isEnergyPos(ENERGY_POS, side)) return this.energyMainCap.getAndCast(); + if(isEnergyPos(ENERGY_POS_STATOR, side)) return this.energyStatorCap.getAndCast(); + } + return super.getCapability(cap, side); + } + + public boolean isEnergyPos(BlockPos pos, Direction side){ + return this.posInMultiblock.equals(pos) && (side == null || side == Direction.UP); + } + + @Override + public void readCustom(CompoundTag tag, boolean clientPacket){ + super.readCustom(tag, clientPacket); + + CompoundTag energy = tag.getCompound("energy"); + this.energyMain.deserializeNBT(energy.get("main")); + this.energyStator.deserializeNBT(energy.get("stator")); + this.lastEnergyUsed = energy.getFloat("lastused"); + + this.mode = Mode.values()[tag.getInt("mode")]; + this.generatedSpeed = tag.getInt("generatedspeed"); + } + + @Override + public void writeCustom(CompoundTag tag, boolean clientPacket){ + super.writeCustom(tag, clientPacket); + + CompoundTag energy = new CompoundTag(); + energy.put("main", this.energyMain.serializeNBT()); + energy.put("stator", this.energyStator.serializeNBT()); + energy.putFloat("lastused", this.lastEnergyUsed); + tag.put("energy", energy); + + tag.putInt("mode", this.mode.id()); + tag.putInt("generatedspeed", this.generatedSpeed); + } + + @Override + public Set getRedstonePos(){ + return REDSTONE_POS; + } + + public void changeMode(Mode newMode){ + if(newMode == null || newMode == this.mode) + return; + + if(this.mode == Mode.MOTOR && newMode == Mode.GENERATOR){ + if(this.generatedSpeed != 0){ + this.generatedSpeed = 0; + updateGeneratedRotation(); + } + } + + this.mode = newMode; + + // Dump energy on mode switch + this.energyMain.setStoredEnergy(0); + + setChanged(); + updateMasterBlock(null, true); + } + + public Mode getMode(){ + return this.mode; + } + + private boolean isGenerator(){ + return this.mode == Mode.GENERATOR; + } + + private boolean isMotor(){ + return this.mode == Mode.MOTOR; + } + + public boolean isMaster(){ + return this.offsetToMaster.equals(BlockPos.ZERO); + } + + @Override + public void tickClient(){ + } + + private int generatedSpeed = 0; + + @Override + public void tickServer(){ + switch(this.mode){ + case GENERATOR -> asGenerator(); + case MOTOR -> asMotor(); + } + + changeMode(isRSDisabled() ? Mode.GENERATOR : Mode.MOTOR); + } + + private int energyGeneration(float baseFE, float energyUsed){ + return Mth.floor(baseFE * (getSpeed() * energyUsed)); + } + + private float lastEnergyUsed = 0.0F; + private void asGenerator(){ + float energyUsed = this.energyStator.extractEnergy(this.energyStator.getMaxEnergyStored(), false) / (float) this.energyStator.getMaxEnergyStored(); + + int energy = energyGeneration(14F, energyUsed); + if(this.lastEnergyUsed != energyUsed){ + this.lastEnergyUsed = energyUsed; + setChanged(); + } + + BlockEntity te = getLevelNonnull().getBlockEntity(getBlockPosForPos(ENERGY_POS.relative(Direction.UP))); + if(te != null){ + te.getCapability(CapabilityEnergy.ENERGY, Direction.DOWN).ifPresent(s -> { + s.receiveEnergy(energy, false); + }); + } + } + + @Override + public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking){ + boolean superAdded = super.addToGoggleTooltip(tooltip, isPlayerSneaking); + + if(!isMaster() || !isGenerator()) + return superAdded; + + int energy = energyGeneration(14F, this.lastEnergyUsed); + + Lang.text("Energy Generation") + .style(ChatFormatting.GRAY) + .forGoggles(tooltip); + + Lang.number(energy) + .text("IF") + .space() + .style(ChatFormatting.AQUA) + .add(Lang.translate("gui.goggles.at_current_speed") + .style(ChatFormatting.DARK_GRAY)) + .forGoggles(tooltip, 1); + + return true; + } + + private void asMotor(){ + int amount = this.energyMain.extractEnergy(this.energyMain.getMaxEnergyStored(), false); + + int speed = (int) (maxSpeed * (amount / (float) this.energyMain.getMaxEnergyStored())); + if(this.generatedSpeed != speed){ + this.generatedSpeed = speed; + + updateGeneratedRotation(); + } + + setChanged(); + } + + public UniversalMotorTileEntity getAxleTileEntity(BlockPos axlePos){ + if(this.posInMultiblock.equals(axlePos)) + return this; + + return getEntityForPos(axlePos); + } + + @Override + public float getGeneratedSpeed(){ + if(!isMaster()) + return 0.0F; + + float generated = 0.0F; + + if(this.mode == Mode.MOTOR){ + generated = convertToDirection(this.generatedSpeed, this.getFacing()); + } + + return generated; + } + + /** Stress capacity added to kinetics in Motor-Mode */ + private static final float STRESS_CAPACITY = 16384 / 256F; + /** Stress impacted on kinetics in Generator-Mode */ + private static final float STRESS_IMPACT = 32768 / 256F; + + @Override + public float calculateAddedStressCapacity(){ + if(!isMaster()) + return 0.0F; + + float stress = switch(this.mode){ + case MOTOR -> STRESS_CAPACITY; + case GENERATOR -> 0.0F; + }; + + this.lastCapacityProvided = stress; + return stress; + } + + @Override + public float calculateStressApplied(){ + if(!isMaster()) + return 0.0F; + + float stress = switch(this.mode){ + case GENERATOR -> STRESS_IMPACT; + case MOTOR -> 0.0F; + }; + + this.lastStressApplied = stress; + return stress; + } + + private static CachedShapesWithTransform> SHAPES = CachedShapesWithTransform.createForMultiblock(UniversalMotorTileEntity::getShape); + + @Override + public VoxelShape getBlockBounds(CollisionContext ctx){ + return SHAPES.get(this.posInMultiblock, Pair.of(getFacing(), getIsMirrored())); + } + + public static List getShape(BlockPos posInMultiblock){ + final int x = posInMultiblock.getX(); + final int y = posInMultiblock.getY(); + final int z = posInMultiblock.getZ(); + + List main = new ArrayList<>(); + + if(y == 0){ + // Baseplate + if(!((x == 0 && z == 2) || (x == 2 && z == 2))){ + AABBUtils.box16(main, 0, 0, 0, 16, 8, 16); + } + } + + if(y == 1){ + // Axle + if(x == 1 && z >= 0 && z <= 2){ + AABBUtils.box16(main, 5, 5, 0, 11, 11, 16); + } + + if(x == 1){ + // Bearings + if(z == 0 || z == 2){ + AABBUtils.box16(main, 4, 4, 6, 12, 12, 10); + } + + // Carbon Brush holder + if(z == 0){ + AABBUtils.box16(main, 0, 6, 6, 4, 10, 16); + AABBUtils.box16(main, 12, 6, 6, 16, 10, 16); + } + } + } + + // Supports + if(y == 0 || y == 1){ + if(y == 0){ + if(x == 1 && (z == 0 || z == 2)){ + AABBUtils.box16(main, 2, 8, 6, 6, 16, 10); + AABBUtils.box16(main, 10, 8, 6, 14, 16, 10); + } + } + if(y == 1){ + if(x == 1 && (z == 0 || z == 2)){ + AABBUtils.box16(main, 3, 0, 6, 6, 4, 10); + AABBUtils.box16(main, 10, 0, 6, 13, 4, 10); + } + } + } + + // Stator + if(z == 1){ + if(!((x == 0 && y == 2) || (x == 2 && y == 2))){ + if(x == 1 && y == 2){ + AABBUtils.box16(main, 0, 0, 4, 16, 14, 12); + }else{ + AABBUtils.box16(main, 0, 0, 4, 16, 16, 12); + } + }else{ + AABBUtils.box16(main, 0, 0, 4, 16, 8, 12); + if(x == 0 && y == 2) AABBUtils.box16(main, 8, 8, 4, 16, 14, 12); + if(x == 2 && y == 2) AABBUtils.box16(main, 0, 8, 4, 8, 14, 12); + } + } + + // Use default cube shape if nessesary + if(main.isEmpty()){ + main.add(AABBUtils.FULL); + } + return main; + } + + // Static stuff (classes, methods and so on) + + public static enum Mode{ + /** Electrical -> Mechanical */ + MOTOR, + /** Mechanical -> Electrical */ + GENERATOR; + + public int id(){ + return this.ordinal(); + } + } + + + /** This is a modified variant of IE-{@link WrappingEnergyStorage} */ + public static record ModeSupportedWrappingEnergyStorage(IEnergyStorage storage, Supplier allowInsert, Supplier allowExtract, Runnable afterTransfer) implements IEnergyStorage{ + + @Override + public int receiveEnergy(int maxReceive, boolean simulate){ + if(!allowInsert.get()) + return 0; + + return postTransfer(storage.receiveEnergy(maxReceive, simulate), simulate); + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate){ + if(!allowExtract.get()) + return 0; + + return postTransfer(storage.extractEnergy(maxExtract, simulate), simulate); + } + + @Override + public int getEnergyStored(){ + return storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(){ + return storage.getMaxEnergyStored(); + } + + @Override + public boolean canExtract(){ + return allowExtract.get(); + } + + @Override + public boolean canReceive(){ + return allowInsert.get(); + } + + private int postTransfer(int transferred, boolean simulate){ + if(!simulate && transferred > 0) + afterTransfer.run(); + return transferred; + } + } +} diff --git a/src/main/java/twistedgate/overengineered/common/multiblock/OETemplateMultiblock.java b/src/main/java/twistedgate/overengineered/common/multiblock/OETemplateMultiblock.java new file mode 100644 index 0000000..89d9aa4 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/multiblock/OETemplateMultiblock.java @@ -0,0 +1,59 @@ +package twistedgate.overengineered.common.multiblock; + +import java.util.function.Supplier; + +import blusunrize.immersiveengineering.api.IEProperties; +import blusunrize.immersiveengineering.common.blocks.multiblocks.IETemplateMultiblock; +import blusunrize.immersiveengineering.common.register.IEBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.blocks.tileentity.KineticMultiblockPartTileEntity; + +public abstract class OETemplateMultiblock extends IETemplateMultiblock{ + private final Supplier baseState; + public OETemplateMultiblock(ResourceLocation loc, BlockPos masterFromOrigin, BlockPos triggerFromOrigin, BlockPos size, Supplier baseState){ + super(loc, masterFromOrigin, triggerFromOrigin, size, new IEBlocks.BlockEntry<>(baseState.get())); + this.baseState = baseState; + } + + @Override + protected void replaceStructureBlock(StructureBlockInfo info, Level world, BlockPos actualPos, boolean mirrored, Direction clickDirection, Vec3i offsetFromMaster){ + BlockState state = baseState.get().defaultBlockState(); + if(!offsetFromMaster.equals(Vec3i.ZERO)) + state = state.setValue(IEProperties.MULTIBLOCKSLAVE, true); + world.setBlockAndUpdate(actualPos, state); + BlockEntity curr = world.getBlockEntity(actualPos); + if(curr instanceof KineticMultiblockPartTileEntity tile){ + tile.formed = true; + tile.offsetToMaster = new BlockPos(offsetFromMaster); + tile.posInMultiblock = info.pos; + if(state.hasProperty(IEProperties.MIRRORED)) + tile.setMirrored(mirrored); + tile.setFacing(transformDirection(clickDirection.getOpposite())); + tile.setChanged(); + world.blockEvent(actualPos, world.getBlockState(actualPos).getBlock(), 255, 0); + }else + OverEngineered.log.error("Expected MB TE at {} during placement", actualPos); + } + + @Override + protected void prepareBlockForDisassembly(Level world, BlockPos pos){ + BlockEntity be = world.getBlockEntity(pos); + if(be instanceof KineticMultiblockPartTileEntity multiblockBE) + multiblockBE.formed = false; + else if(be != null) + OverEngineered.log.error("Expected multiblock TE at {}, got {}", pos, be); + } + + public Block getBaseBlock(){ + return this.baseState.get(); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/multiblock/UniversalMotorMultiblock.java b/src/main/java/twistedgate/overengineered/common/multiblock/UniversalMotorMultiblock.java new file mode 100644 index 0000000..961865e --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/multiblock/UniversalMotorMultiblock.java @@ -0,0 +1,32 @@ +package twistedgate.overengineered.common.multiblock; + +import java.util.function.Consumer; + +import blusunrize.immersiveengineering.api.multiblocks.ClientMultiblocks.MultiblockManualData; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import twistedgate.overengineered.common.OEContent; +import twistedgate.overengineered.utils.ResourceUtils; + +public class UniversalMotorMultiblock extends OETemplateMultiblock{ + public static final UniversalMotorMultiblock INSTANCE = new UniversalMotorMultiblock(); + + private UniversalMotorMultiblock(){ + super(ResourceUtils.oe("multiblocks/universal_motor"), new BlockPos(1, 1, 1), new BlockPos(0, 0, 2), new BlockPos(3, 3, 3), OEContent.Multiblock.UNIVERSAL_MOTOR); + } + + @Override + public float getManualScale(){ + return 1.0F; + } + + @Override + public void initializeClient(Consumer consumer){ + } + + @Override + public Component getDisplayName(){ + return new TextComponent("Universal Motor"); + } +} diff --git a/src/main/java/twistedgate/overengineered/utils/AABBUtils.java b/src/main/java/twistedgate/overengineered/utils/AABBUtils.java new file mode 100644 index 0000000..e56fe27 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/utils/AABBUtils.java @@ -0,0 +1,33 @@ +package twistedgate.overengineered.utils; + +import java.util.List; + +import net.minecraft.world.phys.AABB; + +public class AABBUtils{ + + public static final AABB FULL = new AABB(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + + /** Creates a 16p-Texture aligned {@link AABB} and adds it to the provided List */ + public static void box16(List list, double x0, double y0, double z0, double x1, double y1, double z1){ + list.add(box16(x0, y0, z0, x1, y1, z1)); + } + + /** Creates a 16p-Texture aligned {@link AABB} */ + public static AABB box16(double x0, double y0, double z0, double x1, double y1, double z1){ + return new AABB(x0 / 16D, y0 / 16D, z0 / 16D, x1 / 16D, y1 / 16D, z1 / 16D); + } + + /** Creates a {@link AABB} and adds it to the provided List */ + public static void box(List list, double x0, double y0, double z0, double x1, double y1, double z1){ + list.add(box(x0, y0, z0, x1, y1, z1)); + } + + /** Creates a {@link AABB} */ + public static AABB box(double x0, double y0, double z0, double x1, double y1, double z1){ + return new AABB(x0, y0, z0, x1, y1, z1); + } + + private AABBUtils(){ + } +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index c9dc2c9..8b14cec 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -25,6 +25,13 @@ Random bits and bobs, here and there. Possibly containing QoL things. ordering="BEFORE" side="BOTH" +[[dependencies.overengineered]] + modId="create" + mandatory=false + versionRange="[0.5.1.e,)" + ordering="NONE" + side="BOTH" + [[dependencies.overengineered]] modId="forge" mandatory=true diff --git a/src/main/resources/assets/overengineered/models/multiblock/dyn/universal_motor_rotor.json b/src/main/resources/assets/overengineered/models/multiblock/dyn/universal_motor_rotor.json new file mode 100644 index 0000000..4a819ee --- /dev/null +++ b/src/main/resources/assets/overengineered/models/multiblock/dyn/universal_motor_rotor.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/multiblock/obj/universal_motor_rotor.obj", + "textures": { + "texture": "overengineered:multiblock/universal_motor", + "particle": "overengineered:multiblock/universal_motor" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor.mtl b/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor.mtl new file mode 100644 index 0000000..ae6136b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor.mtl @@ -0,0 +1,2 @@ +newmtl None +map_Kd #texture diff --git a/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor.obj b/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor.obj new file mode 100644 index 0000000..78a9bbe --- /dev/null +++ b/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor.obj @@ -0,0 +1,2595 @@ +# Blender v2.79 (sub 0) OBJ File: 'generator.blend' +# www.blender.org +mtllib universal_motor.mtl +o Stator +v -1.000000 -0.500000 0.000000 +v -1.000000 -1.000000 0.000000 +v 2.000000 -0.500000 -0.000000 +v 2.000000 -1.000000 -0.000000 +v 2.000000 -0.500000 -1.000000 +v -1.000000 -0.500000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v 2.000000 -1.000000 -1.000000 +v -1.000000 -0.500000 1.000000 +v -1.000000 -1.000000 1.000000 +v 2.000000 -0.500000 1.000000 +v 2.000000 -1.000000 1.000000 +v 2.000000 -0.500000 2.000000 +v -1.000000 -0.500000 2.000000 +v -1.000000 -1.000000 2.000000 +v 2.000000 -1.000000 2.000000 +v -1.000000 -0.500000 1.000000 +v -1.000000 -1.000000 1.000000 +v -0.500000 -0.500000 1.000000 +v -0.500000 -1.000000 1.000000 +v -0.500000 -0.500000 0.000000 +v -1.000000 -0.500000 0.000000 +v -1.000000 -1.000000 0.000000 +v -0.500000 -1.000000 0.000000 +v 1.500000 -0.500000 1.000000 +v 1.500000 -1.000000 1.000000 +v 2.000000 -0.500000 1.000000 +v 2.000000 -1.000000 1.000000 +v 2.000000 -0.500000 -0.000000 +v 1.500000 -0.500000 -0.000000 +v 1.500000 -1.000000 -0.000000 +v 2.000000 -1.000000 -0.000000 +v 2.000000 -0.500000 1.000000 +v 2.000000 0.000000 1.000000 +v 2.000000 -0.500000 2.000000 +v 2.000000 0.000000 2.000000 +v 1.000000 -0.500000 1.000000 +v 1.000000 0.000000 1.000000 +v 1.000000 -0.500000 2.000000 +v 1.000000 0.000000 2.000000 +v 0.000000 -0.500000 1.000000 +v 0.000000 1.000000 1.000000 +v 0.000000 -0.500000 2.000000 +v 0.000000 1.000000 2.000000 +v -1.000000 -0.500000 1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -0.500000 2.000000 +v -1.000000 1.000000 2.000000 +v 0.750000 0.250000 -0.625000 +v 0.750000 0.250000 -0.375000 +v 0.250000 0.250000 -0.625000 +v 0.250000 0.250000 -0.375000 +v 0.750000 0.750000 -0.625000 +v 0.750000 0.750000 -0.375000 +v 0.250000 0.750000 -0.375000 +v 0.250000 0.750000 -0.625000 +v 0.875000 -0.500000 -0.625000 +v 0.750000 0.250000 -0.625000 +v 0.875000 -0.500000 -0.375000 +v 0.750000 0.250000 -0.375000 +v 0.750000 -0.500000 -0.625000 +v 0.625000 0.250000 -0.625000 +v 0.750000 -0.500000 -0.375000 +v 0.625000 0.250000 -0.375000 +v 0.125000 -0.500000 -0.375000 +v 0.250000 0.250000 -0.375000 +v 0.125000 -0.500000 -0.625000 +v 0.250000 0.250000 -0.625000 +v 0.250000 -0.500000 -0.375000 +v 0.375000 0.250000 -0.375000 +v 0.250000 -0.500000 -0.625000 +v 0.375000 0.250000 -0.625000 +v 0.750000 0.250000 1.625000 +v 0.750000 0.250000 1.375000 +v 0.250000 0.250000 1.625000 +v 0.250000 0.250000 1.375000 +v 0.750000 0.750000 1.625000 +v 0.750000 0.750000 1.375000 +v 0.250000 0.750000 1.375000 +v 0.250000 0.750000 1.625000 +v 0.875000 -0.500000 1.625000 +v 0.750000 0.250000 1.625000 +v 0.875000 -0.500000 1.375000 +v 0.750000 0.250000 1.375000 +v 0.750000 -0.500000 1.625000 +v 0.625000 0.250000 1.625000 +v 0.750000 -0.500000 1.375000 +v 0.625000 0.250000 1.375000 +v 0.125000 -0.500000 1.375000 +v 0.250000 0.250000 1.375000 +v 0.125000 -0.500000 1.625000 +v 0.250000 0.250000 1.625000 +v 0.250000 -0.500000 1.375000 +v 0.375000 0.250000 1.375000 +v 0.250000 -0.500000 1.625000 +v 0.375000 0.250000 1.625000 +v 0.238920 1.812536 0.748923 +v 0.238920 1.812536 0.251077 +v -0.243492 1.612714 0.748923 +v -0.243492 1.612714 0.251077 +v -0.612714 1.243492 0.748923 +v -0.612714 1.243492 0.251077 +v -0.812536 0.761080 0.748923 +v -0.812536 0.761080 0.251077 +v -0.812536 0.238920 0.748923 +v -0.812536 0.238920 0.251077 +v -0.612714 -0.243492 0.748923 +v -0.612714 -0.243492 0.251077 +v -0.243492 -0.612714 0.748923 +v -0.243492 -0.612714 0.251077 +v 0.238920 -0.812536 0.748923 +v 0.238920 -0.812536 0.251077 +v 0.761079 -0.812536 0.748923 +v 0.761079 -0.812536 0.251077 +v 1.243492 -0.612714 0.748923 +v 1.243492 -0.612714 0.251077 +v 1.612714 -0.243492 0.748923 +v 1.612714 -0.243492 0.251077 +v 1.812536 0.238920 0.748923 +v 1.812536 0.238920 0.251077 +v 1.812536 0.761080 0.748923 +v 1.812536 0.761080 0.251077 +v 1.612714 1.243492 0.748923 +v 1.612714 1.243492 0.251077 +v 1.243491 1.612714 0.748923 +v 1.243491 1.612714 0.251077 +v 0.761079 1.812536 0.748923 +v 0.761079 1.812536 0.251077 +v -0.279065 1.665954 0.748923 +v 0.226429 1.875336 0.748923 +v 0.226429 1.875336 0.251077 +v -0.279065 1.665954 0.251077 +v -0.665954 1.279065 0.748923 +v -0.665954 1.279065 0.251077 +v -0.875336 0.773571 0.748923 +v -0.875336 0.773571 0.251077 +v -0.875336 0.226429 0.748923 +v -0.875336 0.226429 0.251077 +v -0.665954 -0.279065 0.748923 +v -0.665954 -0.279066 0.251077 +v -0.279065 -0.665954 0.748923 +v -0.279065 -0.665954 0.251077 +v 0.226429 -0.875336 0.748923 +v 0.226429 -0.875336 0.251077 +v 0.773571 -0.875336 0.748923 +v 0.773571 -0.875336 0.251077 +v 1.279065 -0.665954 0.748923 +v 1.279065 -0.665954 0.251077 +v 1.665954 -0.279066 0.748923 +v 1.665954 -0.279066 0.251077 +v 1.875336 0.226429 0.748923 +v 1.875336 0.226428 0.251077 +v 1.875336 0.773571 0.748923 +v 1.875336 0.773571 0.251077 +v 1.665954 1.279066 0.748923 +v 1.665954 1.279066 0.251077 +v 1.279065 1.665954 0.748923 +v 1.279065 1.665954 0.251077 +v 0.773571 1.875336 0.748923 +v 0.773571 1.875336 0.251077 +v 0.687500 -0.750000 0.687500 +v 0.312500 -0.750000 0.312500 +v 0.687500 -0.750000 0.312500 +v 0.687500 -0.500000 0.687500 +v 0.687500 -0.500000 0.312500 +v 0.687500 -0.812500 0.687500 +v 0.312500 -0.812500 0.687500 +v 0.687500 -0.437500 0.687500 +v 0.312500 -0.437500 0.687500 +v 0.312500 -0.437500 0.312500 +v 0.312500 -0.500000 0.312500 +v 0.312500 -0.750000 0.687500 +v 0.687500 -0.437500 0.312500 +v 0.687500 -0.812500 0.312500 +v 0.312500 -0.500000 0.687500 +v 0.312500 -0.812500 0.312500 +v 0.625000 -0.750000 0.625000 +v 0.625000 -0.500000 0.375000 +v 0.375000 -0.750000 0.375000 +v 0.625000 -0.750000 0.375000 +v 0.375000 -0.500000 0.375000 +v 0.375000 -0.750000 0.625000 +v 0.375000 -0.500000 0.625000 +v 0.625000 -0.500000 0.625000 +v 1.151582 -0.583097 0.687500 +v 0.805127 -0.726603 0.312500 +v 1.151582 -0.583096 0.312500 +v 1.055911 -0.352126 0.687500 +v 1.055911 -0.352126 0.312500 +v 1.175499 -0.640839 0.687500 +v 0.829045 -0.784345 0.687500 +v 1.031993 -0.294384 0.687500 +v 0.685538 -0.437890 0.687500 +v 0.685538 -0.437890 0.312500 +v 0.709456 -0.495633 0.312500 +v 0.805127 -0.726603 0.687500 +v 1.031993 -0.294384 0.312500 +v 1.175499 -0.640839 0.312500 +v 0.709456 -0.495633 0.687500 +v 0.829045 -0.784345 0.312500 +v 1.093839 -0.607014 0.625000 +v 0.998168 -0.376044 0.375000 +v 0.862869 -0.702685 0.375000 +v 1.093839 -0.607014 0.375000 +v 0.767199 -0.471715 0.375000 +v 0.862869 -0.702685 0.625000 +v 0.767199 -0.471715 0.625000 +v 0.998168 -0.376044 0.625000 +v -0.151582 1.583096 0.687500 +v 0.194873 1.726602 0.312499 +v -0.151582 1.583096 0.312500 +v -0.055911 1.352126 0.687500 +v -0.055911 1.352126 0.312500 +v -0.175500 1.640838 0.687500 +v 0.170955 1.784345 0.687499 +v -0.031993 1.294384 0.687500 +v 0.314461 1.437890 0.687500 +v 0.314461 1.437890 0.312500 +v 0.290544 1.495632 0.312500 +v 0.194873 1.726602 0.687500 +v -0.031993 1.294383 0.312500 +v -0.175500 1.640838 0.312500 +v 0.290544 1.495632 0.687500 +v 0.170955 1.784345 0.312499 +v -0.093840 1.607014 0.625000 +v 0.001831 1.376044 0.375000 +v 0.137130 1.702685 0.375000 +v -0.093840 1.607014 0.375000 +v 0.232801 1.471715 0.375000 +v 0.137130 1.702685 0.625000 +v 0.232801 1.471715 0.625000 +v 0.001831 1.376044 0.625000 +v 1.583097 1.151581 0.687500 +v 1.726603 0.805126 0.312500 +v 1.583097 1.151581 0.312500 +v 1.352127 1.055910 0.687500 +v 1.352127 1.055910 0.312500 +v 1.640839 1.175498 0.687500 +v 1.784346 0.829043 0.687500 +v 1.294385 1.031992 0.687500 +v 1.437891 0.685537 0.687500 +v 1.437890 0.685537 0.312500 +v 1.495633 0.709455 0.312500 +v 1.726603 0.805126 0.687500 +v 1.294384 1.031992 0.312500 +v 1.640839 1.175498 0.312499 +v 1.495633 0.709455 0.687500 +v 1.784345 0.829043 0.312500 +v 1.607014 1.093838 0.625000 +v 1.376045 0.998168 0.375000 +v 1.702685 0.862868 0.375000 +v 1.607014 1.093838 0.375000 +v 1.471715 0.767197 0.375000 +v 1.702685 0.862868 0.625000 +v 1.471715 0.767198 0.625000 +v 1.376045 0.998168 0.625000 +v -0.583096 -0.151582 0.687500 +v -0.726603 0.194873 0.312500 +v -0.583096 -0.151582 0.312500 +v -0.352126 -0.055911 0.687500 +v -0.352126 -0.055911 0.312500 +v -0.640839 -0.175500 0.687500 +v -0.784345 0.170955 0.687500 +v -0.294384 -0.031993 0.687500 +v -0.437890 0.314462 0.687500 +v -0.437890 0.314461 0.312500 +v -0.495633 0.290544 0.312500 +v -0.726603 0.194873 0.687500 +v -0.294384 -0.031993 0.312500 +v -0.640839 -0.175500 0.312500 +v -0.495633 0.290544 0.687500 +v -0.784345 0.170955 0.312500 +v -0.607014 -0.093840 0.625000 +v -0.376044 0.001831 0.375000 +v -0.702685 0.137130 0.375000 +v -0.607014 -0.093839 0.375000 +v -0.471715 0.232801 0.375000 +v -0.702685 0.137130 0.625000 +v -0.471715 0.232801 0.625000 +v -0.376044 0.001832 0.625000 +v -0.726603 0.805126 0.687500 +v -0.583096 1.151581 0.312500 +v -0.726602 0.805126 0.312500 +v -0.495633 0.709456 0.687500 +v -0.495633 0.709456 0.312500 +v -0.784345 0.829044 0.687500 +v -0.640839 1.175499 0.687500 +v -0.437890 0.685538 0.687500 +v -0.294384 1.031993 0.687500 +v -0.294384 1.031993 0.312500 +v -0.352126 1.055910 0.312500 +v -0.583096 1.151581 0.687500 +v -0.437890 0.685538 0.312500 +v -0.784345 0.829044 0.312500 +v -0.352126 1.055911 0.687500 +v -0.640839 1.175499 0.312500 +v -0.702685 0.862869 0.625000 +v -0.471715 0.767198 0.375000 +v -0.607014 1.093839 0.375000 +v -0.702685 0.862869 0.375000 +v -0.376044 0.998168 0.375000 +v -0.607014 1.093839 0.625000 +v -0.376044 0.998168 0.625000 +v -0.471715 0.767198 0.625000 +v 1.726602 0.194872 0.687500 +v 1.583095 -0.151583 0.312500 +v 1.726602 0.194872 0.312500 +v 1.495632 0.290543 0.687500 +v 1.495632 0.290543 0.312500 +v 1.784345 0.170954 0.687500 +v 1.640838 -0.175501 0.687500 +v 1.437890 0.314461 0.687500 +v 1.294383 -0.031994 0.687500 +v 1.294383 -0.031994 0.312500 +v 1.352126 -0.055912 0.312500 +v 1.583096 -0.151583 0.687500 +v 1.437890 0.314461 0.312500 +v 1.784345 0.170954 0.312500 +v 1.352126 -0.055912 0.687500 +v 1.640838 -0.175501 0.312500 +v 1.702685 0.137129 0.625000 +v 1.471715 0.232800 0.375000 +v 1.607013 -0.093840 0.375000 +v 1.702684 0.137129 0.375000 +v 1.376044 0.001831 0.375000 +v 1.607013 -0.093841 0.625000 +v 1.376044 0.001831 0.625000 +v 1.471715 0.232800 0.625000 +v 0.805127 1.726603 0.687500 +v 1.151582 1.583096 0.312499 +v 0.805127 1.726603 0.312499 +v 0.709456 1.495633 0.687500 +v 0.709456 1.495632 0.312500 +v 0.829045 1.784345 0.687499 +v 1.175500 1.640839 0.687499 +v 0.685538 1.437890 0.687500 +v 1.031993 1.294384 0.687500 +v 1.031993 1.294384 0.312500 +v 1.055911 1.352126 0.312500 +v 1.151582 1.583096 0.687499 +v 0.685538 1.437890 0.312500 +v 0.829045 1.784345 0.312499 +v 1.055911 1.352126 0.687500 +v 1.175500 1.640839 0.312499 +v 0.862869 1.702685 0.625000 +v 0.767199 1.471715 0.375000 +v 1.093839 1.607014 0.375000 +v 0.862869 1.702685 0.374999 +v 0.998168 1.376044 0.375000 +v 1.093839 1.607014 0.624999 +v 0.998168 1.376044 0.625000 +v 0.767199 1.471715 0.625000 +v 0.194873 -0.726603 0.687500 +v -0.151582 -0.583096 0.312500 +v 0.194873 -0.726603 0.312500 +v 0.290544 -0.495633 0.687500 +v 0.290544 -0.495633 0.312500 +v 0.170956 -0.784345 0.687500 +v -0.175499 -0.640839 0.687500 +v 0.314462 -0.437890 0.687500 +v -0.031993 -0.294384 0.687500 +v -0.031993 -0.294384 0.312500 +v -0.055911 -0.352127 0.312500 +v -0.151582 -0.583096 0.687500 +v 0.314462 -0.437890 0.312500 +v 0.170956 -0.784345 0.312500 +v -0.055911 -0.352126 0.687500 +v -0.175499 -0.640839 0.312500 +v 0.137131 -0.702685 0.625000 +v 0.232802 -0.471715 0.375000 +v -0.093839 -0.607014 0.375000 +v 0.137131 -0.702685 0.375000 +v 0.001832 -0.376044 0.375000 +v -0.093839 -0.607014 0.625000 +v 0.001832 -0.376044 0.625000 +v 0.232802 -0.471715 0.625000 +v -0.251301 -0.516466 0.687500 +v -0.516466 -0.251301 0.312500 +v -0.251301 -0.516466 0.312500 +v -0.074524 -0.339689 0.687500 +v -0.074524 -0.339689 0.312500 +v -0.295495 -0.560660 0.687500 +v -0.560660 -0.295495 0.687500 +v -0.030330 -0.295495 0.687500 +v -0.295495 -0.030330 0.687500 +v -0.295495 -0.030330 0.312500 +v -0.339689 -0.074524 0.312500 +v -0.516466 -0.251301 0.687500 +v -0.030330 -0.295495 0.312500 +v -0.295495 -0.560660 0.312500 +v -0.339689 -0.074524 0.687500 +v -0.560660 -0.295495 0.312500 +v -0.295495 -0.472272 0.625000 +v -0.118718 -0.295495 0.375000 +v -0.472272 -0.295495 0.375000 +v -0.295495 -0.472272 0.375000 +v -0.295495 -0.118719 0.375000 +v -0.472272 -0.295495 0.625000 +v -0.295495 -0.118719 0.625000 +v -0.118718 -0.295495 0.625000 +v 1.251301 1.516466 0.687500 +v 1.516466 1.251301 0.312500 +v 1.251301 1.516466 0.312499 +v 1.074524 1.339689 0.687500 +v 1.074524 1.339689 0.312500 +v 1.295495 1.560660 0.687499 +v 1.560660 1.295495 0.687499 +v 1.030330 1.295495 0.687500 +v 1.295495 1.030330 0.687500 +v 1.295495 1.030330 0.312500 +v 1.339689 1.074524 0.312500 +v 1.516466 1.251301 0.687500 +v 1.030330 1.295495 0.312500 +v 1.295495 1.560660 0.312499 +v 1.339689 1.074524 0.687500 +v 1.560660 1.295495 0.312499 +v 1.295495 1.472272 0.625000 +v 1.118718 1.295495 0.375000 +v 1.472272 1.295495 0.375000 +v 1.295495 1.472272 0.375000 +v 1.295495 1.118718 0.375000 +v 1.472272 1.295495 0.625000 +v 1.295495 1.118718 0.625000 +v 1.118719 1.295495 0.625000 +v 1.516465 -0.251302 0.687500 +v 1.251300 -0.516467 0.312500 +v 1.516465 -0.251302 0.312500 +v 1.339689 -0.074525 0.687500 +v 1.339689 -0.074525 0.312500 +v 1.560660 -0.295496 0.687500 +v 1.295494 -0.560661 0.687500 +v 1.295495 -0.030331 0.687500 +v 1.030329 -0.295496 0.687500 +v 1.030329 -0.295496 0.312500 +v 1.074524 -0.339690 0.312500 +v 1.251300 -0.516467 0.687500 +v 1.295495 -0.030331 0.312500 +v 1.560660 -0.295496 0.312500 +v 1.074524 -0.339690 0.687500 +v 1.295494 -0.560661 0.312500 +v 1.472271 -0.295496 0.625000 +v 1.295495 -0.118719 0.375000 +v 1.295494 -0.472273 0.375000 +v 1.472271 -0.295496 0.375000 +v 1.118718 -0.295496 0.375000 +v 1.295494 -0.472273 0.625000 +v 1.118718 -0.295496 0.625000 +v 1.295495 -0.118719 0.625000 +v -0.516466 1.251301 0.687500 +v -0.251301 1.516466 0.312500 +v -0.516466 1.251300 0.312500 +v -0.339689 1.074524 0.687500 +v -0.339689 1.074524 0.312500 +v -0.560660 1.295495 0.687500 +v -0.295495 1.560660 0.687500 +v -0.295495 1.030330 0.687500 +v -0.030330 1.295495 0.687500 +v -0.030330 1.295495 0.312500 +v -0.074524 1.339689 0.312500 +v -0.251301 1.516466 0.687500 +v -0.295495 1.030330 0.312500 +v -0.560660 1.295495 0.312500 +v -0.074524 1.339689 0.687500 +v -0.295495 1.560660 0.312500 +v -0.472272 1.295495 0.625000 +v -0.295495 1.118718 0.375000 +v -0.295495 1.472271 0.375000 +v -0.472272 1.295495 0.375000 +v -0.118719 1.295495 0.375000 +v -0.295495 1.472271 0.625000 +v -0.118719 1.295495 0.625000 +v -0.295495 1.118718 0.625000 +v -0.750000 0.312500 0.687500 +v -0.750000 0.687500 0.312500 +v -0.750000 0.312500 0.312500 +v -0.500000 0.312500 0.687500 +v -0.500000 0.312500 0.312500 +v -0.812500 0.312500 0.687500 +v -0.812500 0.687500 0.687500 +v -0.437500 0.312500 0.687500 +v -0.437500 0.687500 0.687500 +v -0.437500 0.687500 0.312500 +v -0.500000 0.687500 0.312500 +v -0.750000 0.687500 0.687500 +v -0.437500 0.312500 0.312500 +v -0.812500 0.312500 0.312500 +v -0.500000 0.687500 0.687500 +v -0.812500 0.687500 0.312500 +v -0.750000 0.375000 0.625000 +v -0.500000 0.375000 0.375000 +v -0.750000 0.625000 0.375000 +v -0.750000 0.375000 0.375000 +v -0.500000 0.625000 0.375000 +v -0.750000 0.625000 0.625000 +v -0.500000 0.625000 0.625000 +v -0.500000 0.375000 0.625000 +v 1.750000 0.687499 0.687500 +v 1.750000 0.312499 0.312500 +v 1.750000 0.687499 0.312500 +v 1.500000 0.687499 0.687500 +v 1.500000 0.687499 0.312500 +v 1.812500 0.687499 0.687500 +v 1.812500 0.312499 0.687500 +v 1.437500 0.687499 0.687500 +v 1.437500 0.312499 0.687500 +v 1.437500 0.312499 0.312500 +v 1.500000 0.312499 0.312500 +v 1.750000 0.312499 0.687500 +v 1.437500 0.687499 0.312500 +v 1.812500 0.687499 0.312500 +v 1.500000 0.312499 0.687500 +v 1.812500 0.312499 0.312500 +v 1.750000 0.624999 0.625000 +v 1.500000 0.624999 0.375000 +v 1.750000 0.374999 0.375000 +v 1.750000 0.624999 0.375000 +v 1.500000 0.374999 0.375000 +v 1.750000 0.374999 0.625000 +v 1.500000 0.374999 0.625000 +v 1.500000 0.624999 0.625000 +v 0.312500 1.750000 0.687500 +v 0.687500 1.750000 0.312499 +v 0.312500 1.750000 0.312499 +v 0.312500 1.500000 0.687500 +v 0.312500 1.500000 0.312500 +v 0.312500 1.812500 0.687499 +v 0.687500 1.812500 0.687499 +v 0.312500 1.437500 0.687500 +v 0.687500 1.437500 0.687500 +v 0.687500 1.437500 0.312500 +v 0.687500 1.500000 0.312500 +v 0.687500 1.750000 0.687499 +v 0.312500 1.437500 0.312500 +v 0.312500 1.812500 0.312499 +v 0.687500 1.500000 0.687500 +v 0.687500 1.812500 0.312499 +v 0.375000 1.750000 0.625000 +v 0.375000 1.500000 0.375000 +v 0.625000 1.750000 0.374999 +v 0.375000 1.750000 0.375000 +v 0.625000 1.500000 0.375000 +v 0.625000 1.750000 0.624999 +v 0.625000 1.500000 0.625000 +v 0.375000 1.500000 0.625000 +v 0.750000 0.625000 0.000000 +v 0.750000 0.375000 0.000000 +v 0.750000 0.625000 -0.625000 +v 0.750000 0.375000 -0.625000 +v 1.000000 0.625000 -0.000000 +v 1.000000 0.375000 -0.000000 +v 1.000000 0.625000 -0.625000 +v 1.000000 0.375000 -0.625000 +v 0.250000 0.625000 0.000000 +v 0.250000 0.375000 0.000000 +v 0.250000 0.625000 -0.625000 +v 0.250000 0.375000 -0.625000 +v -0.000000 0.625000 0.000000 +v -0.000000 0.375000 0.000000 +v -0.000000 0.625000 -0.625000 +v -0.000000 0.375000 -0.625000 +v 0.750000 0.437500 -0.156250 +v 0.750000 0.562500 -0.156250 +v 0.750000 0.437500 -0.031250 +v 0.750000 0.562500 -0.031250 +v 0.250000 0.437500 -0.156250 +v 0.250000 0.562500 -0.156250 +v 0.250000 0.437500 -0.031250 +v 0.250000 0.562500 -0.031250 +v -0.875000 0.625000 0.375000 +v -0.875000 0.226562 0.750000 +v -0.875000 0.625000 0.625000 +v -1.000000 0.226562 0.250000 +v -0.937500 0.625000 0.375000 +v -1.000000 0.226562 0.750000 +v -0.937500 0.625000 0.625000 +v -0.875000 0.375000 0.375000 +v -0.875000 0.375000 0.625000 +v -1.000000 0.375000 0.625000 +v -1.000000 0.375000 0.375000 +v -0.875000 0.226562 0.250000 +v -0.665942 -0.279442 0.250000 +v -1.000000 -0.279442 0.250000 +v -0.665942 -0.279442 0.750000 +v -1.000000 -0.279442 0.750000 +v -0.665942 -0.501168 0.750000 +v -1.000000 -0.501168 0.750000 +v -1.000000 -0.501168 0.250000 +v -0.665942 -0.501168 0.250000 +v 1.875000 0.625000 0.375000 +v 1.875000 0.226562 0.750000 +v 1.875000 0.625000 0.625000 +v 2.000000 0.226562 0.250000 +v 1.937500 0.625000 0.375000 +v 2.000000 0.226562 0.750000 +v 1.937500 0.625000 0.625000 +v 1.875000 0.375000 0.375000 +v 1.875000 0.375000 0.625000 +v 2.000000 0.375000 0.625000 +v 2.000000 0.375000 0.375000 +v 1.875000 0.226562 0.250000 +v 1.665942 -0.279442 0.250000 +v 2.000000 -0.279442 0.250000 +v 1.665942 -0.279442 0.750000 +v 2.000000 -0.279442 0.750000 +v 1.665942 -0.501168 0.750000 +v 2.000000 -0.501168 0.750000 +v 2.000000 -0.501168 0.250000 +v 1.665942 -0.501168 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.250000 +vt 0.375000 0.750000 +vt 0.000000 0.750000 +vt 0.000000 0.625000 +vt 0.375000 0.625000 +vt 0.375000 0.250000 +vt 0.375000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.250000 +vt 0.625000 0.312500 +vt 0.625000 0.250000 +vt 0.000000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.625000 +vt 0.000000 0.625000 +vt 0.375000 0.250000 +vt 0.750000 0.250000 +vt 0.750000 0.312500 +vt 0.375000 0.312500 +vt 0.375000 0.875000 +vt 0.375000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.375000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.375000 +vt 0.375000 0.375000 +vt 0.500000 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.312500 +vt 0.500000 0.312500 +vt 0.625000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.375000 +vt 0.625000 0.375000 +vt 0.000000 0.375000 +vt 0.000000 0.250000 +vt 0.375000 0.375000 +vt 0.375000 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.750000 +vt 0.375000 0.750000 +vt 0.500000 0.250000 +vt 0.500000 0.312500 +vt 0.625000 0.312500 +vt 0.625000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.312500 +vt 0.500000 0.312500 +vt 0.500000 0.250000 +vt 0.312500 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.500000 +vt 0.312500 0.500000 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.750000 +vt 0.062500 0.750000 +vt 0.625000 0.250000 +vt 0.625000 0.312500 +vt 0.500000 0.312500 +vt 0.500000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.312500 +vt 0.500000 0.312500 +vt 0.500000 0.250000 +vt 0.000000 0.375000 +vt 0.062500 0.375000 +vt 0.062500 0.500000 +vt 0.000000 0.500000 +vt 0.750000 0.375000 +vt 0.750000 0.437500 +vt 0.625000 0.437500 +vt 0.625000 0.375000 +vt 0.750000 0.375000 +vt 0.750000 0.437500 +vt 0.625000 0.437500 +vt 0.625000 0.375000 +vt 0.750000 0.437500 +vt 0.750000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.437500 +vt 0.750000 0.437500 +vt 0.750000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.437500 +vt 0.375000 0.562500 +vt 0.500000 0.562500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.812500 +vt 0.875000 0.812500 +vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.812500 +vt 0.625000 1.000000 +vt 0.625000 0.812500 +vt 0.375000 0.562500 +vt 0.500000 0.562500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.531250 0.593750 +vt 0.593750 0.593750 +vt 0.593750 0.656250 +vt 0.531250 0.656250 +vt 0.500000 0.656250 +vt 0.500000 0.593750 +vt 0.531250 0.593750 +vt 0.531250 0.656250 +vt 0.531250 0.593750 +vt 0.593750 0.593750 +vt 0.593750 0.656250 +vt 0.531250 0.656250 +vt 0.531250 0.656250 +vt 0.500000 0.656250 +vt 0.500000 0.593750 +vt 0.531250 0.593750 +vt 0.500000 0.593750 +vt 0.500000 0.656250 +vt 0.531250 0.656250 +vt 0.500000 0.656250 +vt 0.500000 0.593750 +vt 0.531250 0.593750 +vt 0.812500 0.515625 +vt 0.812500 0.609375 +vt 0.843750 0.609375 +vt 0.843750 0.515625 +vt 0.796875 0.515625 +vt 0.796875 0.609375 +vt 0.812500 0.609375 +vt 0.812500 0.515625 +vt 0.843750 0.609375 +vt 0.843750 0.515625 +vt 0.812500 0.609375 +vt 0.812500 0.515625 +vt 0.796875 0.515625 +vt 0.796875 0.609375 +vt 0.796875 0.515625 +vt 0.796875 0.609375 +vt 0.812500 0.609375 +vt 0.812500 0.515625 +vt 0.812500 0.515625 +vt 0.812500 0.609375 +vt 0.843750 0.609375 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.843750 0.515625 +vt 0.812500 0.609375 +vt 0.812500 0.515625 +vt 0.796875 0.515625 +vt 0.796875 0.609375 +vt 0.531250 0.593750 +vt 0.531250 0.656250 +vt 0.593750 0.656250 +vt 0.593750 0.593750 +vt 0.500000 0.656250 +vt 0.531250 0.656250 +vt 0.531250 0.593750 +vt 0.500000 0.593750 +vt 0.531250 0.593750 +vt 0.531250 0.656250 +vt 0.593750 0.656250 +vt 0.593750 0.593750 +vt 0.531250 0.656250 +vt 0.531250 0.593750 +vt 0.500000 0.593750 +vt 0.500000 0.656250 +vt 0.500000 0.593750 +vt 0.500000 0.656250 +vt 0.531250 0.656250 +vt 0.531250 0.593750 +vt 0.500000 0.593750 +vt 0.500000 0.656250 +vt 0.812500 0.515625 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.812500 0.609375 +vt 0.796875 0.515625 +vt 0.812500 0.515625 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.796875 0.515625 +vt 0.812500 0.515625 +vt 0.796875 0.515625 +vt 0.812500 0.515625 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.812500 0.515625 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.812500 0.609375 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.796875 0.515625 +vt 0.812500 0.515625 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.843750 0.742188 +vt 0.812500 0.742188 +vt 0.812500 0.664062 +vt 0.843750 0.664062 +vt 0.843750 0.742188 +vt 0.812500 0.742188 +vt 0.812500 0.664062 +vt 0.843750 0.664062 +vt 0.812500 0.742188 +vt 0.843750 0.742188 +vt 0.843750 0.664062 +vt 0.812500 0.664062 +vt 0.875000 0.343750 +vt 0.843750 0.343750 +vt 0.843750 0.312500 +vt 0.875000 0.312500 +vt 0.875000 0.343750 +vt 0.843750 0.343750 +vt 0.843750 0.312500 +vt 0.875000 0.312500 +vt 0.843750 0.742188 +vt 0.843750 0.664062 +vt 0.812500 0.664062 +vt 0.812500 0.742188 +vt 0.843750 0.742188 +vt 0.843750 0.664062 +vt 0.812500 0.664062 +vt 0.812500 0.742188 +vt 0.812500 0.742188 +vt 0.812500 0.664062 +vt 0.843750 0.664062 +vt 0.843750 0.742188 +vt 0.875000 0.343750 +vt 0.875000 0.312500 +vt 0.843750 0.312500 +vt 0.843750 0.343750 +vt 0.875000 0.343750 +vt 0.875000 0.312500 +vt 0.843750 0.312500 +vt 0.843750 0.343750 +vt 0.875000 0.703125 +vt 0.875000 0.734375 +vt 0.843750 0.734375 +vt 0.843750 0.703125 +vt 0.843750 0.656250 +vt 0.875000 0.656250 +vt 0.875000 0.812500 +vt 0.843750 0.812500 +vt 0.875000 0.703125 +vt 0.875000 0.734375 +vt 0.843750 0.734375 +vt 0.843750 0.703125 +vt 0.843750 0.656250 +vt 0.875000 0.656250 +vt 0.875000 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.656250 +vt 0.875000 0.656250 +vt 0.875000 0.812500 +vt 0.875000 0.656250 +vt 0.875000 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.656250 +vt 0.177979 0.513854 +vt 0.177979 0.574789 +vt 0.162746 0.574789 +vt 0.147512 0.513854 +vt 0.178543 0.514716 +vt 0.178543 0.575988 +vt 0.239815 0.575988 +vt 0.239815 0.514716 +vt 0.147512 0.513854 +vt 0.162746 0.574789 +vt 0.177979 0.574789 +vt 0.177979 0.513854 +vt 0.177979 0.477674 +vt 0.147512 0.477674 +vt 0.147512 0.354341 +vt 0.228935 0.354341 +vt 0.178543 0.575988 +vt 0.239815 0.575988 +vt 0.147512 0.477674 +vt 0.177979 0.477674 +vt 0.147907 0.478336 +vt 0.270451 0.478336 +vt 0.270451 0.354319 +vt 0.147907 0.354319 +vt 0.228935 0.354341 +vt 0.147512 0.354341 +vt 0.270451 0.299977 +vt 0.147907 0.299976 +vt 0.147907 0.299977 +vt 0.270451 0.299976 +vt 0.270451 0.354319 +vt 0.147907 0.354319 +vt 0.228935 0.300297 +vt 0.147512 0.300297 +vt 0.147512 0.300297 +vt 0.228935 0.300297 +vt 0.177868 0.513854 +vt 0.147401 0.513854 +vt 0.162634 0.574789 +vt 0.177868 0.574789 +vt 0.178543 0.514716 +vt 0.239815 0.514716 +vt 0.239815 0.575988 +vt 0.178543 0.575988 +vt 0.147401 0.513854 +vt 0.177868 0.513854 +vt 0.177868 0.574789 +vt 0.162634 0.574789 +vt 0.177868 0.477674 +vt 0.228824 0.354341 +vt 0.147401 0.354341 +vt 0.147401 0.477674 +vt 0.239815 0.575988 +vt 0.178543 0.575988 +vt 0.147401 0.477674 +vt 0.177868 0.477674 +vt 0.147907 0.478336 +vt 0.270452 0.478336 +vt 0.147907 0.354319 +vt 0.270452 0.354319 +vt 0.147401 0.354341 +vt 0.228824 0.354341 +vt 0.270452 0.299977 +vt 0.147907 0.299976 +vt 0.147907 0.299977 +vt 0.147907 0.354319 +vt 0.270452 0.354319 +vt 0.270452 0.299976 +vt 0.147401 0.300297 +vt 0.228824 0.300297 +vt 0.228824 0.300297 +vt 0.147401 0.300297 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.9864 0.1644 -0.0000 +vn -0.9864 -0.1644 0.0000 +vn -0.9864 0.1644 0.0000 +vn 0.9864 -0.1644 0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.9239 -0.3827 0.0000 +vn 0.9239 0.3827 -0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.3827 0.9239 -0.0000 +vn -0.3827 0.9239 0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.9239 0.3827 -0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.9701 0.2425 0.0000 +vn 0.0000 0.6441 -0.7649 +vn 0.0000 0.6441 0.7649 +vn 0.9701 0.2425 0.0000 +usemtl None +s off +f 4/1/1 3/2/1 1/3/1 2/4/1 +f 1/5/2 3/6/2 5/7/2 6/8/2 +f 7/9/3 6/10/3 5/11/3 8/12/3 +f 2/13/4 1/14/4 6/15/4 7/16/4 +f 8/12/5 5/11/5 3/17/5 4/18/5 +f 4/19/6 2/20/6 7/21/6 8/22/6 +f 12/23/3 10/24/3 9/25/3 11/26/3 +f 9/27/2 14/28/2 13/29/2 11/30/2 +f 15/31/1 16/32/1 13/33/1 14/34/1 +f 10/35/4 15/36/4 14/37/4 9/38/4 +f 16/39/5 12/40/5 11/41/5 13/42/5 +f 12/43/6 16/44/6 15/36/6 10/45/6 +f 17/46/2 19/47/2 21/48/2 22/49/2 +f 18/50/4 17/51/4 22/52/4 23/53/4 +f 24/54/5 21/55/5 19/56/5 20/57/5 +f 20/58/6 18/59/6 23/60/6 24/61/6 +f 25/62/2 27/63/2 29/64/2 30/65/2 +f 26/66/4 25/67/4 30/68/4 31/69/4 +f 32/70/5 29/71/5 27/72/5 28/73/5 +f 28/74/6 26/75/6 31/76/6 32/77/6 +f 33/78/5 34/79/5 36/80/5 35/81/5 +f 35/82/1 36/83/1 40/84/1 39/85/1 +f 39/86/4 40/87/4 38/88/4 37/89/4 +f 37/90/3 38/91/3 34/92/3 33/93/3 +f 40/94/2 36/95/2 34/96/2 38/97/2 +f 41/98/5 42/99/5 44/100/5 43/101/5 +f 43/102/1 44/103/1 48/104/1 47/105/1 +f 47/105/4 48/104/4 46/106/4 45/107/4 +f 45/107/3 46/106/3 42/99/3 41/98/3 +f 48/108/2 44/109/2 42/110/2 46/111/2 +f 49/112/3 51/113/3 56/114/3 53/115/3 +f 55/116/2 54/117/2 53/118/2 56/119/2 +f 52/120/1 50/121/1 54/122/1 55/123/1 +f 51/124/4 52/125/4 55/126/4 56/127/4 +f 50/128/5 49/112/5 53/115/5 54/129/5 +f 49/130/6 50/131/6 52/132/6 51/133/6 +f 57/134/7 58/135/7 60/136/7 59/137/7 +f 59/138/1 60/139/1 64/140/1 63/141/1 +f 63/141/8 64/140/8 62/142/8 61/143/8 +f 61/144/3 62/145/3 58/146/3 57/147/3 +f 67/148/3 68/149/3 72/150/3 71/151/3 +f 65/152/9 66/153/9 68/154/9 67/155/9 +f 71/151/10 72/150/10 70/156/10 69/157/10 +f 69/158/1 70/159/1 66/160/1 65/161/1 +f 73/162/1 77/163/1 80/164/1 75/165/1 +f 79/166/2 80/167/2 77/168/2 78/169/2 +f 76/170/3 79/171/3 78/172/3 74/173/3 +f 75/174/4 80/175/4 79/176/4 76/177/4 +f 74/178/5 78/179/5 77/163/5 73/162/5 +f 73/180/6 75/181/6 76/182/6 74/183/6 +f 81/184/7 83/185/7 84/186/7 82/187/7 +f 83/188/3 87/189/3 88/190/3 84/191/3 +f 87/189/8 85/192/8 86/193/8 88/190/8 +f 85/194/1 81/195/1 82/196/1 86/197/1 +f 91/198/1 95/199/1 96/200/1 92/201/1 +f 89/202/9 91/203/9 92/204/9 90/205/9 +f 95/199/10 93/206/10 94/207/10 96/200/10 +f 93/208/3 89/209/3 90/210/3 94/211/3 +f 97/212/11 99/213/11 100/214/11 98/215/11 +f 99/216/12 101/217/12 102/218/12 100/219/12 +f 101/220/13 103/221/13 104/222/13 102/223/13 +f 103/224/5 105/225/5 106/226/5 104/227/5 +f 105/228/14 107/229/14 108/230/14 106/231/14 +f 107/232/15 109/233/15 110/234/15 108/235/15 +f 109/236/16 111/237/16 112/238/16 110/239/16 +f 111/240/2 113/241/2 114/242/2 112/243/2 +f 113/244/17 115/245/17 116/246/17 114/247/17 +f 115/248/18 117/249/18 118/250/18 116/251/18 +f 117/252/19 119/253/19 120/254/19 118/255/19 +f 119/256/4 121/257/4 122/258/4 120/259/4 +f 121/260/20 123/261/20 124/262/20 122/263/20 +f 123/264/21 125/265/21 126/266/21 124/267/21 +f 125/268/22 127/269/22 128/270/22 126/271/22 +f 127/272/6 97/273/6 98/274/6 128/275/6 +f 130/276/17 131/277/17 132/278/17 129/279/17 +f 129/280/18 132/281/18 134/282/18 133/283/18 +f 133/284/19 134/285/19 136/286/19 135/287/19 +f 135/288/4 136/289/4 138/290/4 137/291/4 +f 137/292/20 138/293/20 140/294/20 139/295/20 +f 139/296/21 140/297/21 142/298/21 141/299/21 +f 141/300/22 142/301/22 144/302/22 143/303/22 +f 143/304/6 144/305/6 146/306/6 145/307/6 +f 145/308/11 146/309/11 148/310/11 147/311/11 +f 147/312/12 148/313/12 150/314/12 149/315/12 +f 149/316/13 150/317/13 152/318/13 151/319/13 +f 151/320/5 152/321/5 154/322/5 153/323/5 +f 153/324/14 154/325/14 156/326/14 155/327/14 +f 155/328/15 156/329/15 158/330/15 157/331/15 +f 157/332/16 158/333/16 160/334/16 159/335/16 +f 159/336/2 160/337/2 131/338/2 130/339/2 +f 110/340/3 142/341/3 140/342/3 108/235/3 +f 128/343/3 160/344/3 158/345/3 126/271/3 +f 99/216/1 129/346/1 133/347/1 101/348/1 +f 117/252/1 149/349/1 151/350/1 119/351/1 +f 102/352/3 134/353/3 132/354/3 100/219/3 +f 120/355/3 152/356/3 150/357/3 118/255/3 +f 109/236/1 141/358/1 143/359/1 111/360/1 +f 127/272/1 159/361/1 130/362/1 97/363/1 +f 112/364/3 144/365/3 142/366/3 110/239/3 +f 98/367/3 131/368/3 160/369/3 128/275/3 +f 101/220/1 133/370/1 135/371/1 103/372/1 +f 119/256/1 151/373/1 153/374/1 121/375/1 +f 104/376/3 136/377/3 134/378/3 102/223/3 +f 122/379/3 154/380/3 152/381/3 120/259/3 +f 111/240/1 143/382/1 145/383/1 113/384/1 +f 114/385/3 146/386/3 144/387/3 112/243/3 +f 103/224/1 135/388/1 137/389/1 105/390/1 +f 121/260/1 153/391/1 155/392/1 123/393/1 +f 106/394/3 138/395/3 136/396/3 104/227/3 +f 124/397/3 156/398/3 154/399/3 122/263/3 +f 113/244/1 145/400/1 147/401/1 115/402/1 +f 116/403/3 148/404/3 146/405/3 114/247/3 +f 105/228/1 137/406/1 139/407/1 107/408/1 +f 123/264/1 155/409/1 157/410/1 125/411/1 +f 97/212/1 130/412/1 129/413/1 99/414/1 +f 108/415/3 140/416/3 138/417/3 106/231/3 +f 126/418/3 158/419/3 156/420/3 124/267/3 +f 115/248/1 147/421/1 149/422/1 117/423/1 +f 100/424/3 132/425/3 131/426/3 98/215/3 +f 118/427/3 150/428/3 148/429/3 116/251/3 +f 107/232/1 139/430/1 141/431/1 109/432/1 +f 125/268/1 157/433/1 159/434/1 127/435/1 +f 164/436/6 175/437/6 171/438/6 165/439/6 +f 166/440/6 167/441/6 176/442/6 174/443/6 +f 163/444/5 161/445/5 166/446/5 174/447/5 +f 175/448/1 164/436/1 168/449/1 169/450/1 +f 177/451/5 180/452/5 178/453/5 184/454/5 +f 173/455/2 170/456/2 169/457/2 168/458/2 +f 164/459/5 165/460/5 173/461/5 168/462/5 +f 184/463/1 183/464/1 182/465/1 177/466/1 +f 172/467/4 162/468/4 176/469/4 167/470/4 +f 179/471/4 182/472/4 183/473/4 181/474/4 +f 165/439/3 171/475/3 170/476/3 173/477/3 +f 161/478/1 172/479/1 167/480/1 166/440/1 +f 180/481/3 179/482/3 181/483/3 178/484/3 +f 163/485/2 162/486/2 172/487/2 161/488/2 +f 171/489/4 175/490/4 169/491/4 170/492/4 +f 162/493/3 163/494/3 174/443/3 176/495/3 +f 188/496/11 199/497/11 195/498/11 189/499/11 +f 190/500/11 191/501/11 200/502/11 198/503/11 +f 187/504/14 185/505/14 190/506/14 198/507/14 +f 199/508/1 188/496/1 192/509/1 193/510/1 +f 201/511/14 204/512/14 202/513/14 208/514/14 +f 197/515/17 194/516/17 193/517/17 192/518/17 +f 188/519/14 189/520/14 197/521/14 192/522/14 +f 208/523/1 207/524/1 206/525/1 201/526/1 +f 196/527/20 186/528/20 200/529/20 191/530/20 +f 203/531/20 206/532/20 207/533/20 205/534/20 +f 189/499/3 195/535/3 194/536/3 197/537/3 +f 185/538/1 196/539/1 191/540/1 190/500/1 +f 204/541/3 203/542/3 205/543/3 202/544/3 +f 187/545/17 186/546/17 196/547/17 185/548/17 +f 195/549/20 199/550/20 193/551/20 194/552/20 +f 186/553/3 187/554/3 198/503/3 200/555/3 +f 212/556/17 223/557/17 219/558/17 213/559/17 +f 214/560/17 215/561/17 224/562/17 222/563/17 +f 211/564/20 209/565/20 214/566/20 222/567/20 +f 223/568/1 212/556/1 216/569/1 217/570/1 +f 225/571/20 228/572/20 226/573/20 232/574/20 +f 221/575/11 218/576/11 217/577/11 216/578/11 +f 212/579/20 213/580/20 221/581/20 216/582/20 +f 232/583/1 231/584/1 230/585/1 225/586/1 +f 220/587/14 210/588/14 224/589/14 215/590/14 +f 227/591/14 230/592/14 231/593/14 229/594/14 +f 213/559/3 219/595/3 218/596/3 221/597/3 +f 209/598/1 220/599/1 215/600/1 214/560/1 +f 228/601/3 227/602/3 229/603/3 226/604/3 +f 211/605/11 210/606/11 220/607/11 209/608/11 +f 219/609/14 223/610/14 217/611/14 218/612/14 +f 210/613/3 211/614/3 222/563/3 224/615/3 +f 236/616/14 247/617/14 243/618/14 237/619/14 +f 238/620/14 239/621/14 248/622/14 246/623/14 +f 235/624/17 233/625/17 238/626/17 246/627/17 +f 247/628/1 236/616/1 240/629/1 241/630/1 +f 249/631/17 252/632/17 250/633/17 256/634/17 +f 245/635/20 242/636/20 241/637/20 240/638/20 +f 236/639/17 237/640/17 245/641/17 240/642/17 +f 256/643/1 255/644/1 254/645/1 249/646/1 +f 244/647/11 234/648/11 248/649/11 239/650/11 +f 251/651/11 254/652/11 255/653/11 253/654/11 +f 237/619/3 243/655/3 242/656/3 245/657/3 +f 233/658/1 244/659/1 239/660/1 238/620/1 +f 252/661/3 251/662/3 253/663/3 250/664/3 +f 235/665/20 234/666/20 244/667/20 233/668/20 +f 243/669/11 247/670/11 241/671/11 242/672/11 +f 234/673/3 235/674/3 246/623/3 248/675/3 +f 260/676/20 271/677/20 267/678/20 261/679/20 +f 262/680/20 263/681/20 272/682/20 270/683/20 +f 259/684/11 257/685/11 262/686/11 270/687/11 +f 271/688/1 260/676/1 264/689/1 265/690/1 +f 273/691/11 276/692/11 274/693/11 280/694/11 +f 269/695/14 266/696/14 265/697/14 264/698/14 +f 260/699/11 261/700/11 269/701/11 264/702/11 +f 280/703/1 279/704/1 278/705/1 273/706/1 +f 268/707/17 258/708/17 272/709/17 263/710/17 +f 275/711/17 278/712/17 279/713/17 277/714/17 +f 261/679/3 267/715/3 266/716/3 269/717/3 +f 257/718/1 268/719/1 263/720/1 262/680/1 +f 276/721/3 275/722/3 277/723/3 274/724/3 +f 259/725/14 258/726/14 268/727/14 257/728/14 +f 267/729/17 271/730/17 265/731/17 266/732/17 +f 258/733/3 259/734/3 270/683/3 272/735/3 +f 284/736/19 295/737/19 291/738/19 285/739/19 +f 286/740/19 287/741/19 296/742/19 294/743/19 +f 283/744/22 281/745/22 286/746/22 294/747/22 +f 295/748/1 284/736/1 288/749/1 289/750/1 +f 297/751/22 300/752/22 298/753/22 304/754/22 +f 293/755/13 290/756/13 289/757/13 288/758/13 +f 284/759/22 285/760/22 293/761/22 288/762/22 +f 304/763/1 303/764/1 302/765/1 297/766/1 +f 292/767/16 282/768/16 296/769/16 287/770/16 +f 299/771/16 302/772/16 303/773/16 301/774/16 +f 285/739/3 291/775/3 290/776/3 293/777/3 +f 281/778/1 292/779/1 287/780/1 286/740/1 +f 300/781/3 299/782/3 301/783/3 298/784/3 +f 283/785/13 282/786/13 292/787/13 281/788/13 +f 291/789/16 295/790/16 289/791/16 290/792/16 +f 282/793/3 283/794/3 294/743/3 296/795/3 +f 308/796/13 319/797/13 315/798/13 309/799/13 +f 310/800/13 311/801/13 320/802/13 318/803/13 +f 307/804/16 305/805/16 310/806/16 318/807/16 +f 319/808/1 308/796/1 312/809/1 313/810/1 +f 321/811/16 324/812/16 322/813/16 328/814/16 +f 317/815/19 314/816/19 313/817/19 312/818/19 +f 308/819/16 309/820/16 317/821/16 312/822/16 +f 328/823/1 327/824/1 326/825/1 321/826/1 +f 316/827/22 306/828/22 320/829/22 311/830/22 +f 323/831/22 326/832/22 327/833/22 325/834/22 +f 309/799/3 315/835/3 314/836/3 317/837/3 +f 305/838/1 316/839/1 311/840/1 310/800/1 +f 324/841/3 323/842/3 325/843/3 322/844/3 +f 307/845/19 306/846/19 316/847/19 305/848/19 +f 315/849/22 319/850/22 313/851/22 314/852/22 +f 306/853/3 307/854/3 318/803/3 320/855/3 +f 332/856/16 343/857/16 339/858/16 333/859/16 +f 334/860/16 335/861/16 344/862/16 342/863/16 +f 331/864/19 329/865/19 334/866/19 342/867/19 +f 343/868/1 332/856/1 336/869/1 337/870/1 +f 345/871/19 348/872/19 346/873/19 352/874/19 +f 341/875/22 338/876/22 337/877/22 336/878/22 +f 332/879/19 333/880/19 341/881/19 336/882/19 +f 352/883/1 351/884/1 350/885/1 345/886/1 +f 340/887/13 330/888/13 344/889/13 335/890/13 +f 347/891/13 350/892/13 351/893/13 349/894/13 +f 333/859/3 339/895/3 338/896/3 341/897/3 +f 329/898/1 340/899/1 335/900/1 334/860/1 +f 348/901/3 347/902/3 349/903/3 346/904/3 +f 331/905/22 330/906/22 340/907/22 329/908/22 +f 339/909/13 343/910/13 337/911/13 338/912/13 +f 330/913/3 331/914/3 342/863/3 344/915/3 +f 356/916/22 367/917/22 363/918/22 357/919/22 +f 358/920/22 359/921/22 368/922/22 366/923/22 +f 355/924/13 353/925/13 358/926/13 366/927/13 +f 367/928/1 356/916/1 360/929/1 361/930/1 +f 369/931/13 372/932/13 370/933/13 376/934/13 +f 365/935/16 362/936/16 361/937/16 360/938/16 +f 356/939/13 357/940/13 365/941/13 360/942/13 +f 376/943/1 375/944/1 374/945/1 369/946/1 +f 364/947/19 354/948/19 368/949/19 359/950/19 +f 371/951/19 374/952/19 375/953/19 373/954/19 +f 357/919/3 363/955/3 362/956/3 365/957/3 +f 353/958/1 364/959/1 359/960/1 358/920/1 +f 372/961/3 371/962/3 373/963/3 370/964/3 +f 355/965/16 354/966/16 364/967/16 353/968/16 +f 363/969/19 367/970/19 361/971/19 362/972/19 +f 354/973/3 355/974/3 366/923/3 368/975/3 +f 380/976/21 391/977/21 387/978/21 381/979/21 +f 382/980/21 383/981/21 392/982/21 390/983/21 +f 379/984/12 377/985/12 382/986/12 390/987/12 +f 391/988/1 380/976/1 384/989/1 385/990/1 +f 393/991/12 396/992/12 394/993/12 400/994/12 +f 389/995/15 386/996/15 385/997/15 384/998/15 +f 380/999/12 381/1000/12 389/1001/12 384/1002/12 +f 400/1003/1 399/1004/1 398/1005/1 393/1006/1 +f 388/1007/18 378/1008/18 392/1009/18 383/1010/18 +f 395/1011/18 398/1012/18 399/1013/18 397/1014/18 +f 381/979/3 387/1015/3 386/1016/3 389/1017/3 +f 377/1018/1 388/1019/1 383/1020/1 382/980/1 +f 396/1021/3 395/1022/3 397/1023/3 394/1024/3 +f 379/1025/15 378/1026/15 388/1027/15 377/1028/15 +f 387/1029/18 391/1030/18 385/1031/18 386/1032/18 +f 378/1033/3 379/1034/3 390/983/3 392/1035/3 +f 404/1036/15 415/1037/15 411/1038/15 405/1039/15 +f 406/1040/15 407/1041/15 416/1042/15 414/1043/15 +f 403/1044/18 401/1045/18 406/1046/18 414/1047/18 +f 415/1048/1 404/1036/1 408/1049/1 409/1050/1 +f 417/1051/18 420/1052/18 418/1053/18 424/1054/18 +f 413/1055/21 410/1056/21 409/1057/21 408/1058/21 +f 404/1059/18 405/1060/18 413/1061/18 408/1062/18 +f 424/1063/1 423/1064/1 422/1065/1 417/1066/1 +f 412/1067/12 402/1068/12 416/1069/12 407/1070/12 +f 419/1071/12 422/1072/12 423/1073/12 421/1074/12 +f 405/1039/3 411/1075/3 410/1076/3 413/1077/3 +f 401/1078/1 412/1079/1 407/1080/1 406/1040/1 +f 420/1081/3 419/1082/3 421/1083/3 418/1084/3 +f 403/1085/21 402/1086/21 412/1087/21 401/1088/21 +f 411/1089/12 415/1090/12 409/1091/12 410/1092/12 +f 402/1093/3 403/1094/3 414/1043/3 416/1095/3 +f 428/1096/12 439/1097/12 435/1098/12 429/1099/12 +f 430/1100/12 431/1101/12 440/1102/12 438/1103/12 +f 427/1104/15 425/1105/15 430/1106/15 438/1107/15 +f 439/1108/1 428/1096/1 432/1109/1 433/1110/1 +f 441/1111/15 444/1112/15 442/1113/15 448/1114/15 +f 437/1115/18 434/1116/18 433/1117/18 432/1118/18 +f 428/1119/15 429/1120/15 437/1121/15 432/1122/15 +f 448/1123/1 447/1124/1 446/1125/1 441/1126/1 +f 436/1127/21 426/1128/21 440/1129/21 431/1130/21 +f 443/1131/21 446/1132/21 447/1133/21 445/1134/21 +f 429/1099/3 435/1135/3 434/1136/3 437/1137/3 +f 425/1138/1 436/1139/1 431/1140/1 430/1100/1 +f 444/1141/3 443/1142/3 445/1143/3 442/1144/3 +f 427/1145/18 426/1146/18 436/1147/18 425/1148/18 +f 435/1149/21 439/1150/21 433/1151/21 434/1152/21 +f 426/1153/3 427/1154/3 438/1103/3 440/1155/3 +f 452/1156/18 463/1157/18 459/1158/18 453/1159/18 +f 454/1160/18 455/1161/18 464/1162/18 462/1163/18 +f 451/1164/21 449/1165/21 454/1166/21 462/1167/21 +f 463/1168/1 452/1156/1 456/1169/1 457/1170/1 +f 465/1171/21 468/1172/21 466/1173/21 472/1174/21 +f 461/1175/12 458/1176/12 457/1177/12 456/1178/12 +f 452/1179/21 453/1180/21 461/1181/21 456/1182/21 +f 472/1183/1 471/1184/1 470/1185/1 465/1186/1 +f 460/1187/15 450/1188/15 464/1189/15 455/1190/15 +f 467/1191/15 470/1192/15 471/1193/15 469/1194/15 +f 453/1159/3 459/1195/3 458/1196/3 461/1197/3 +f 449/1198/1 460/1199/1 455/1200/1 454/1160/1 +f 468/1201/3 467/1202/3 469/1203/3 466/1204/3 +f 451/1205/12 450/1206/12 460/1207/12 449/1208/12 +f 459/1209/15 463/1210/15 457/1211/15 458/1212/15 +f 450/1213/3 451/1214/3 462/1163/3 464/1215/3 +f 476/1216/4 487/1217/4 483/1218/4 477/1219/4 +f 478/1220/4 479/1221/4 488/1222/4 486/1223/4 +f 475/1224/6 473/1225/6 478/1226/6 486/1227/6 +f 487/1228/1 476/1216/1 480/1229/1 481/1230/1 +f 489/1231/6 492/1232/6 490/1233/6 496/1234/6 +f 485/1235/5 482/1236/5 481/1237/5 480/1238/5 +f 476/1239/6 477/1240/6 485/1241/6 480/1242/6 +f 496/1243/1 495/1244/1 494/1245/1 489/1246/1 +f 484/1247/2 474/1248/2 488/1249/2 479/1250/2 +f 491/1251/2 494/1252/2 495/1253/2 493/1254/2 +f 477/1219/3 483/1255/3 482/1256/3 485/1257/3 +f 473/1258/1 484/1259/1 479/1260/1 478/1220/1 +f 492/1261/3 491/1262/3 493/1263/3 490/1264/3 +f 475/1265/5 474/1266/5 484/1267/5 473/1268/5 +f 483/1269/2 487/1270/2 481/1271/2 482/1272/2 +f 474/1273/3 475/1274/3 486/1223/3 488/1275/3 +f 500/1276/5 511/1277/5 507/1278/5 501/1279/5 +f 502/1280/5 503/1281/5 512/1282/5 510/1283/5 +f 499/1284/2 497/1285/2 502/1286/2 510/1287/2 +f 511/1288/1 500/1276/1 504/1289/1 505/1290/1 +f 513/1291/2 516/1292/2 514/1293/2 520/1294/2 +f 509/1295/4 506/1296/4 505/1297/4 504/1298/4 +f 500/1299/2 501/1300/2 509/1301/2 504/1302/2 +f 520/1303/1 519/1304/1 518/1305/1 513/1306/1 +f 508/1307/6 498/1308/6 512/1309/6 503/1310/6 +f 515/1311/6 518/1312/6 519/1313/6 517/1314/6 +f 501/1279/3 507/1315/3 506/1316/3 509/1317/3 +f 497/1318/1 508/1319/1 503/1320/1 502/1280/1 +f 516/1321/3 515/1322/3 517/1323/3 514/1324/3 +f 499/1325/4 498/1326/4 508/1327/4 497/1328/4 +f 507/1329/6 511/1330/6 505/1331/6 506/1332/6 +f 498/1333/3 499/1334/3 510/1283/3 512/1335/3 +f 524/1336/2 535/1337/2 531/1338/2 525/1339/2 +f 526/1340/2 527/1341/2 536/1342/2 534/1343/2 +f 523/1344/4 521/1345/4 526/1346/4 534/1347/4 +f 535/1348/1 524/1336/1 528/1349/1 529/1350/1 +f 537/1351/4 540/1352/4 538/1353/4 544/1354/4 +f 533/1355/6 530/1356/6 529/1357/6 528/1358/6 +f 524/1359/4 525/1360/4 533/1361/4 528/1362/4 +f 544/1363/1 543/1364/1 542/1365/1 537/1366/1 +f 532/1367/5 522/1368/5 536/1369/5 527/1370/5 +f 539/1371/5 542/1372/5 543/1373/5 541/1374/5 +f 525/1339/3 531/1375/3 530/1376/3 533/1377/3 +f 521/1378/1 532/1379/1 527/1380/1 526/1340/1 +f 540/1381/3 539/1382/3 541/1383/3 538/1384/3 +f 523/1385/6 522/1386/6 532/1387/6 521/1388/6 +f 531/1389/5 535/1390/5 529/1391/5 530/1392/5 +f 522/1393/3 523/1394/3 534/1343/3 536/1395/3 +f 550/1396/6 546/1397/6 548/1398/6 552/1399/6 +f 545/1400/2 549/1401/2 551/1402/2 547/1403/2 +f 552/1404/5 551/1405/5 549/1406/5 550/1407/5 +f 550/1408/1 549/1409/1 545/1410/1 546/1411/1 +f 546/1397/4 545/1400/4 547/1403/4 548/1398/4 +f 548/1412/3 547/1413/3 551/1414/3 552/1415/3 +f 558/1416/6 560/1417/6 556/1418/6 554/1419/6 +f 553/1420/2 555/1421/2 559/1422/2 557/1423/2 +f 560/1424/4 558/1425/4 557/1426/4 559/1427/4 +f 558/1428/1 554/1429/1 553/1430/1 557/1431/1 +f 554/1419/5 556/1418/5 555/1421/5 553/1420/5 +f 556/1432/3 560/1433/3 559/1434/3 555/1435/3 +f 561/1436/5 562/1437/5 564/1438/5 563/1439/5 +f 563/1440/1 564/1441/1 568/1442/1 567/1443/1 +f 567/1444/4 568/1445/4 566/1446/4 565/1447/4 +f 565/1448/3 566/1449/3 562/1450/3 561/1451/3 +f 563/1452/6 567/1453/6 565/1454/6 561/1455/6 +f 568/1456/2 564/1457/2 562/1458/2 566/1459/2 +f 577/1460/1 571/1461/1 575/1462/1 578/1463/1 +f 578/1464/23 575/1465/23 573/1466/23 579/1467/23 +f 579/1468/3 573/1469/3 569/1470/3 576/1471/3 +f 570/1472/1 574/1473/1 584/1474/1 583/1475/1 +f 575/1465/2 571/1476/2 569/1477/2 573/1466/2 +f 572/1478/24 579/1468/24 576/1471/24 580/1479/24 +f 574/1480/4 578/1464/4 579/1467/4 572/1481/4 +f 570/1472/25 577/1460/25 578/1463/25 574/1473/25 +f 574/1480/4 572/1481/4 582/1482/4 584/1483/4 +f 572/1478/3 580/1479/3 581/1484/3 582/1485/3 +f 587/1486/4 586/1487/4 584/1483/4 582/1482/4 +f 585/1488/5 588/1489/5 581/1490/5 583/1491/5 +f 581/1484/3 588/1492/3 587/1493/3 582/1485/3 +f 584/1474/1 586/1494/1 585/1495/1 583/1475/1 +f 597/1496/1 598/1497/1 595/1498/1 591/1499/1 +f 598/1500/26 599/1501/26 593/1502/26 595/1503/26 +f 599/1504/3 596/1505/3 589/1506/3 593/1507/3 +f 590/1508/1 603/1509/1 604/1510/1 594/1511/1 +f 595/1503/2 593/1502/2 589/1512/2 591/1513/2 +f 592/1514/24 600/1515/24 596/1505/24 599/1504/24 +f 594/1516/5 592/1517/5 599/1501/5 598/1500/5 +f 590/1508/25 594/1511/25 598/1497/25 597/1496/25 +f 594/1516/5 604/1518/5 602/1519/5 592/1517/5 +f 592/1514/3 602/1520/3 601/1521/3 600/1515/3 +f 607/1522/5 602/1519/5 604/1518/5 606/1523/5 +f 605/1524/4 603/1525/4 601/1526/4 608/1527/4 +f 601/1521/3 602/1520/3 607/1528/3 608/1529/3 +f 604/1510/1 603/1509/1 605/1530/1 606/1531/1 diff --git a/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor_mirrored.obj b/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor_mirrored.obj new file mode 100644 index 0000000..3400f46 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor_mirrored.obj @@ -0,0 +1,2595 @@ +# Blender v2.79 (sub 0) OBJ File: 'generator.blend' +# www.blender.org +mtllib universal_motor.mtl +o Stator_mirrored +v 2.000000 -0.500000 0.000000 +v 2.000000 -1.000000 0.000000 +v -1.000000 -0.500000 -0.000000 +v -1.000000 -1.000000 -0.000000 +v -1.000000 -0.500000 -1.000000 +v 2.000000 -0.500000 -1.000000 +v 2.000000 -1.000000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v 2.000000 -0.500000 1.000000 +v 2.000000 -1.000000 1.000000 +v -1.000000 -0.500000 1.000000 +v -1.000000 -1.000000 1.000000 +v -1.000000 -0.500000 2.000000 +v 2.000000 -0.500000 2.000000 +v 2.000000 -1.000000 2.000000 +v -1.000000 -1.000000 2.000000 +v 2.000000 -0.500000 1.000000 +v 2.000000 -1.000000 1.000000 +v 1.500000 -0.500000 1.000000 +v 1.500000 -1.000000 1.000000 +v 1.500000 -0.500000 0.000000 +v 2.000000 -0.500000 0.000000 +v 2.000000 -1.000000 0.000000 +v 1.500000 -1.000000 0.000000 +v -0.500000 -0.500000 1.000000 +v -0.500000 -1.000000 1.000000 +v -1.000000 -0.500000 1.000000 +v -1.000000 -1.000000 1.000000 +v -1.000000 -0.500000 -0.000000 +v -0.500000 -0.500000 -0.000000 +v -0.500000 -1.000000 -0.000000 +v -1.000000 -1.000000 -0.000000 +v -1.000000 -0.500000 1.000000 +v -1.000000 0.000000 1.000000 +v -1.000000 -0.500000 2.000000 +v -1.000000 0.000000 2.000000 +v -0.000000 -0.500000 1.000000 +v -0.000000 0.000000 1.000000 +v -0.000000 -0.500000 2.000000 +v -0.000000 0.000000 2.000000 +v 1.000000 -0.500000 1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -0.500000 2.000000 +v 1.000000 1.000000 2.000000 +v 2.000000 -0.500000 1.000000 +v 2.000000 1.000000 1.000000 +v 2.000000 -0.500000 2.000000 +v 2.000000 1.000000 2.000000 +v 0.250000 0.250000 -0.625000 +v 0.250000 0.250000 -0.375000 +v 0.750000 0.250000 -0.625000 +v 0.750000 0.250000 -0.375000 +v 0.250000 0.750000 -0.625000 +v 0.250000 0.750000 -0.375000 +v 0.750000 0.750000 -0.375000 +v 0.750000 0.750000 -0.625000 +v 0.125000 -0.500000 -0.625000 +v 0.250000 0.250000 -0.625000 +v 0.125000 -0.500000 -0.375000 +v 0.250000 0.250000 -0.375000 +v 0.250000 -0.500000 -0.625000 +v 0.375000 0.250000 -0.625000 +v 0.250000 -0.500000 -0.375000 +v 0.375000 0.250000 -0.375000 +v 0.875000 -0.500000 -0.375000 +v 0.750000 0.250000 -0.375000 +v 0.875000 -0.500000 -0.625000 +v 0.750000 0.250000 -0.625000 +v 0.750000 -0.500000 -0.375000 +v 0.625000 0.250000 -0.375000 +v 0.750000 -0.500000 -0.625000 +v 0.625000 0.250000 -0.625000 +v 0.250000 0.250000 1.625000 +v 0.250000 0.250000 1.375000 +v 0.750000 0.250000 1.625000 +v 0.750000 0.250000 1.375000 +v 0.250000 0.750000 1.625000 +v 0.250000 0.750000 1.375000 +v 0.750000 0.750000 1.375000 +v 0.750000 0.750000 1.625000 +v 0.125000 -0.500000 1.625000 +v 0.250000 0.250000 1.625000 +v 0.125000 -0.500000 1.375000 +v 0.250000 0.250000 1.375000 +v 0.250000 -0.500000 1.625000 +v 0.375000 0.250000 1.625000 +v 0.250000 -0.500000 1.375000 +v 0.375000 0.250000 1.375000 +v 0.875000 -0.500000 1.375000 +v 0.750000 0.250000 1.375000 +v 0.875000 -0.500000 1.625000 +v 0.750000 0.250000 1.625000 +v 0.750000 -0.500000 1.375000 +v 0.625000 0.250000 1.375000 +v 0.750000 -0.500000 1.625000 +v 0.625000 0.250000 1.625000 +v 0.761080 1.812536 0.748923 +v 0.761080 1.812536 0.251077 +v 1.243492 1.612714 0.748923 +v 1.243492 1.612714 0.251077 +v 1.612714 1.243492 0.748923 +v 1.612714 1.243492 0.251077 +v 1.812536 0.761080 0.748923 +v 1.812536 0.761080 0.251077 +v 1.812536 0.238920 0.748923 +v 1.812536 0.238920 0.251077 +v 1.612714 -0.243492 0.748923 +v 1.612714 -0.243492 0.251077 +v 1.243492 -0.612714 0.748923 +v 1.243492 -0.612714 0.251077 +v 0.761080 -0.812536 0.748923 +v 0.761080 -0.812536 0.251077 +v 0.238921 -0.812536 0.748923 +v 0.238921 -0.812536 0.251077 +v -0.243492 -0.612714 0.748923 +v -0.243492 -0.612714 0.251077 +v -0.612714 -0.243492 0.748923 +v -0.612714 -0.243492 0.251077 +v -0.812536 0.238920 0.748923 +v -0.812536 0.238920 0.251077 +v -0.812536 0.761080 0.748923 +v -0.812536 0.761080 0.251077 +v -0.612714 1.243492 0.748923 +v -0.612714 1.243492 0.251077 +v -0.243491 1.612714 0.748923 +v -0.243491 1.612714 0.251077 +v 0.238921 1.812536 0.748923 +v 0.238921 1.812536 0.251077 +v 1.279065 1.665954 0.748923 +v 0.773571 1.875336 0.748923 +v 0.773571 1.875336 0.251077 +v 1.279065 1.665954 0.251077 +v 1.665954 1.279065 0.748923 +v 1.665954 1.279065 0.251077 +v 1.875336 0.773571 0.748923 +v 1.875336 0.773571 0.251077 +v 1.875336 0.226429 0.748923 +v 1.875336 0.226429 0.251077 +v 1.665954 -0.279065 0.748923 +v 1.665954 -0.279066 0.251077 +v 1.279065 -0.665954 0.748923 +v 1.279065 -0.665954 0.251077 +v 0.773571 -0.875336 0.748923 +v 0.773571 -0.875336 0.251077 +v 0.226429 -0.875336 0.748923 +v 0.226429 -0.875336 0.251077 +v -0.279065 -0.665954 0.748923 +v -0.279065 -0.665954 0.251077 +v -0.665954 -0.279066 0.748923 +v -0.665954 -0.279066 0.251077 +v -0.875336 0.226429 0.748923 +v -0.875336 0.226428 0.251077 +v -0.875336 0.773571 0.748923 +v -0.875336 0.773571 0.251077 +v -0.665954 1.279066 0.748923 +v -0.665954 1.279066 0.251077 +v -0.279065 1.665954 0.748923 +v -0.279065 1.665954 0.251077 +v 0.226429 1.875336 0.748923 +v 0.226429 1.875336 0.251077 +v 0.312500 -0.750000 0.687500 +v 0.687500 -0.750000 0.312500 +v 0.312500 -0.750000 0.312500 +v 0.312500 -0.500000 0.687500 +v 0.312500 -0.500000 0.312500 +v 0.312500 -0.812500 0.687500 +v 0.687500 -0.812500 0.687500 +v 0.312500 -0.437500 0.687500 +v 0.687500 -0.437500 0.687500 +v 0.687500 -0.437500 0.312500 +v 0.687500 -0.500000 0.312500 +v 0.687500 -0.750000 0.687500 +v 0.312500 -0.437500 0.312500 +v 0.312500 -0.812500 0.312500 +v 0.687500 -0.500000 0.687500 +v 0.687500 -0.812500 0.312500 +v 0.375000 -0.750000 0.625000 +v 0.375000 -0.500000 0.375000 +v 0.625000 -0.750000 0.375000 +v 0.375000 -0.750000 0.375000 +v 0.625000 -0.500000 0.375000 +v 0.625000 -0.750000 0.625000 +v 0.625000 -0.500000 0.625000 +v 0.375000 -0.500000 0.625000 +v -0.151582 -0.583097 0.687500 +v 0.194873 -0.726603 0.312500 +v -0.151582 -0.583096 0.312500 +v -0.055911 -0.352126 0.687500 +v -0.055911 -0.352126 0.312500 +v -0.175499 -0.640839 0.687500 +v 0.170955 -0.784345 0.687500 +v -0.031993 -0.294384 0.687500 +v 0.314462 -0.437890 0.687500 +v 0.314462 -0.437890 0.312500 +v 0.290544 -0.495633 0.312500 +v 0.194873 -0.726603 0.687500 +v -0.031993 -0.294384 0.312500 +v -0.175499 -0.640839 0.312500 +v 0.290544 -0.495633 0.687500 +v 0.170955 -0.784345 0.312500 +v -0.093839 -0.607014 0.625000 +v 0.001832 -0.376044 0.375000 +v 0.137131 -0.702685 0.375000 +v -0.093839 -0.607014 0.375000 +v 0.232801 -0.471715 0.375000 +v 0.137131 -0.702685 0.625000 +v 0.232801 -0.471715 0.625000 +v 0.001832 -0.376044 0.625000 +v 1.151582 1.583096 0.687500 +v 0.805127 1.726602 0.312499 +v 1.151582 1.583096 0.312500 +v 1.055911 1.352126 0.687500 +v 1.055911 1.352126 0.312500 +v 1.175500 1.640838 0.687500 +v 0.829045 1.784345 0.687499 +v 1.031993 1.294384 0.687500 +v 0.685539 1.437890 0.687500 +v 0.685539 1.437890 0.312500 +v 0.709456 1.495632 0.312500 +v 0.805127 1.726602 0.687500 +v 1.031993 1.294383 0.312500 +v 1.175500 1.640838 0.312500 +v 0.709456 1.495632 0.687500 +v 0.829045 1.784345 0.312499 +v 1.093840 1.607014 0.625000 +v 0.998169 1.376044 0.375000 +v 0.862870 1.702685 0.375000 +v 1.093840 1.607014 0.375000 +v 0.767199 1.471715 0.375000 +v 0.862870 1.702685 0.625000 +v 0.767199 1.471715 0.625000 +v 0.998169 1.376044 0.625000 +v -0.583097 1.151581 0.687500 +v -0.726603 0.805126 0.312500 +v -0.583097 1.151581 0.312500 +v -0.352127 1.055910 0.687500 +v -0.352127 1.055910 0.312500 +v -0.640839 1.175498 0.687500 +v -0.784346 0.829043 0.687500 +v -0.294385 1.031992 0.687500 +v -0.437891 0.685537 0.687500 +v -0.437890 0.685537 0.312500 +v -0.495633 0.709455 0.312500 +v -0.726603 0.805126 0.687500 +v -0.294384 1.031992 0.312500 +v -0.640839 1.175498 0.312499 +v -0.495633 0.709455 0.687500 +v -0.784345 0.829043 0.312500 +v -0.607014 1.093838 0.625000 +v -0.376045 0.998168 0.375000 +v -0.702685 0.862868 0.375000 +v -0.607014 1.093838 0.375000 +v -0.471715 0.767197 0.375000 +v -0.702685 0.862868 0.625000 +v -0.471715 0.767198 0.625000 +v -0.376045 0.998168 0.625000 +v 1.583096 -0.151582 0.687500 +v 1.726603 0.194873 0.312500 +v 1.583096 -0.151582 0.312500 +v 1.352126 -0.055911 0.687500 +v 1.352126 -0.055911 0.312500 +v 1.640839 -0.175500 0.687500 +v 1.784345 0.170955 0.687500 +v 1.294384 -0.031993 0.687500 +v 1.437890 0.314462 0.687500 +v 1.437890 0.314461 0.312500 +v 1.495633 0.290544 0.312500 +v 1.726603 0.194873 0.687500 +v 1.294384 -0.031993 0.312500 +v 1.640839 -0.175500 0.312500 +v 1.495633 0.290544 0.687500 +v 1.784345 0.170955 0.312500 +v 1.607014 -0.093840 0.625000 +v 1.376044 0.001831 0.375000 +v 1.702685 0.137130 0.375000 +v 1.607014 -0.093839 0.375000 +v 1.471715 0.232801 0.375000 +v 1.702685 0.137130 0.625000 +v 1.471715 0.232801 0.625000 +v 1.376044 0.001832 0.625000 +v 1.726603 0.805126 0.687500 +v 1.583096 1.151581 0.312500 +v 1.726602 0.805126 0.312500 +v 1.495633 0.709456 0.687500 +v 1.495633 0.709456 0.312500 +v 1.784345 0.829044 0.687500 +v 1.640839 1.175499 0.687500 +v 1.437890 0.685538 0.687500 +v 1.294384 1.031993 0.687500 +v 1.294384 1.031993 0.312500 +v 1.352126 1.055910 0.312500 +v 1.583096 1.151581 0.687500 +v 1.437890 0.685538 0.312500 +v 1.784345 0.829044 0.312500 +v 1.352126 1.055911 0.687500 +v 1.640839 1.175499 0.312500 +v 1.702685 0.862869 0.625000 +v 1.471715 0.767198 0.375000 +v 1.607014 1.093839 0.375000 +v 1.702685 0.862869 0.375000 +v 1.376044 0.998168 0.375000 +v 1.607014 1.093839 0.625000 +v 1.376044 0.998168 0.625000 +v 1.471715 0.767198 0.625000 +v -0.726602 0.194872 0.687500 +v -0.583095 -0.151583 0.312500 +v -0.726602 0.194872 0.312500 +v -0.495632 0.290543 0.687500 +v -0.495632 0.290543 0.312500 +v -0.784345 0.170954 0.687500 +v -0.640838 -0.175501 0.687500 +v -0.437890 0.314461 0.687500 +v -0.294383 -0.031994 0.687500 +v -0.294383 -0.031994 0.312500 +v -0.352126 -0.055912 0.312500 +v -0.583096 -0.151583 0.687500 +v -0.437890 0.314461 0.312500 +v -0.784345 0.170954 0.312500 +v -0.352126 -0.055912 0.687500 +v -0.640838 -0.175501 0.312500 +v -0.702685 0.137129 0.625000 +v -0.471715 0.232800 0.375000 +v -0.607013 -0.093840 0.375000 +v -0.702684 0.137129 0.375000 +v -0.376044 0.001831 0.375000 +v -0.607013 -0.093841 0.625000 +v -0.376044 0.001831 0.625000 +v -0.471715 0.232800 0.625000 +v 0.194873 1.726603 0.687500 +v -0.151582 1.583096 0.312499 +v 0.194873 1.726603 0.312499 +v 0.290544 1.495633 0.687500 +v 0.290544 1.495632 0.312500 +v 0.170955 1.784345 0.687499 +v -0.175500 1.640839 0.687499 +v 0.314462 1.437890 0.687500 +v -0.031993 1.294384 0.687500 +v -0.031993 1.294384 0.312500 +v -0.055911 1.352126 0.312500 +v -0.151582 1.583096 0.687499 +v 0.314462 1.437890 0.312500 +v 0.170955 1.784345 0.312499 +v -0.055911 1.352126 0.687500 +v -0.175500 1.640839 0.312499 +v 0.137131 1.702685 0.625000 +v 0.232801 1.471715 0.375000 +v -0.093839 1.607014 0.375000 +v 0.137131 1.702685 0.374999 +v 0.001832 1.376044 0.375000 +v -0.093839 1.607014 0.624999 +v 0.001832 1.376044 0.625000 +v 0.232801 1.471715 0.625000 +v 0.805127 -0.726603 0.687500 +v 1.151582 -0.583096 0.312500 +v 0.805127 -0.726603 0.312500 +v 0.709456 -0.495633 0.687500 +v 0.709456 -0.495633 0.312500 +v 0.829044 -0.784345 0.687500 +v 1.175499 -0.640839 0.687500 +v 0.685538 -0.437890 0.687500 +v 1.031993 -0.294384 0.687500 +v 1.031993 -0.294384 0.312500 +v 1.055911 -0.352127 0.312500 +v 1.151582 -0.583096 0.687500 +v 0.685538 -0.437890 0.312500 +v 0.829044 -0.784345 0.312500 +v 1.055911 -0.352126 0.687500 +v 1.175499 -0.640839 0.312500 +v 0.862869 -0.702685 0.625000 +v 0.767198 -0.471715 0.375000 +v 1.093839 -0.607014 0.375000 +v 0.862869 -0.702685 0.375000 +v 0.998168 -0.376044 0.375000 +v 1.093839 -0.607014 0.625000 +v 0.998168 -0.376044 0.625000 +v 0.767198 -0.471715 0.625000 +v 1.251301 -0.516466 0.687500 +v 1.516466 -0.251301 0.312500 +v 1.251301 -0.516466 0.312500 +v 1.074524 -0.339689 0.687500 +v 1.074524 -0.339689 0.312500 +v 1.295495 -0.560660 0.687500 +v 1.560660 -0.295495 0.687500 +v 1.030330 -0.295495 0.687500 +v 1.295495 -0.030330 0.687500 +v 1.295495 -0.030330 0.312500 +v 1.339689 -0.074524 0.312500 +v 1.516466 -0.251301 0.687500 +v 1.030330 -0.295495 0.312500 +v 1.295495 -0.560660 0.312500 +v 1.339689 -0.074524 0.687500 +v 1.560660 -0.295495 0.312500 +v 1.295495 -0.472272 0.625000 +v 1.118718 -0.295495 0.375000 +v 1.472272 -0.295495 0.375000 +v 1.295495 -0.472272 0.375000 +v 1.295495 -0.118719 0.375000 +v 1.472272 -0.295495 0.625000 +v 1.295495 -0.118719 0.625000 +v 1.118718 -0.295495 0.625000 +v -0.251301 1.516466 0.687500 +v -0.516466 1.251301 0.312500 +v -0.251301 1.516466 0.312499 +v -0.074524 1.339689 0.687500 +v -0.074524 1.339689 0.312500 +v -0.295495 1.560660 0.687499 +v -0.560660 1.295495 0.687499 +v -0.030330 1.295495 0.687500 +v -0.295495 1.030330 0.687500 +v -0.295495 1.030330 0.312500 +v -0.339689 1.074524 0.312500 +v -0.516466 1.251301 0.687500 +v -0.030330 1.295495 0.312500 +v -0.295495 1.560660 0.312499 +v -0.339689 1.074524 0.687500 +v -0.560660 1.295495 0.312499 +v -0.295495 1.472272 0.625000 +v -0.118718 1.295495 0.375000 +v -0.472272 1.295495 0.375000 +v -0.295495 1.472272 0.375000 +v -0.295495 1.118718 0.375000 +v -0.472272 1.295495 0.625000 +v -0.295495 1.118718 0.625000 +v -0.118719 1.295495 0.625000 +v -0.516465 -0.251302 0.687500 +v -0.251300 -0.516467 0.312500 +v -0.516465 -0.251302 0.312500 +v -0.339689 -0.074525 0.687500 +v -0.339689 -0.074525 0.312500 +v -0.560660 -0.295496 0.687500 +v -0.295494 -0.560661 0.687500 +v -0.295495 -0.030331 0.687500 +v -0.030330 -0.295496 0.687500 +v -0.030330 -0.295496 0.312500 +v -0.074524 -0.339690 0.312500 +v -0.251300 -0.516467 0.687500 +v -0.295495 -0.030331 0.312500 +v -0.560660 -0.295496 0.312500 +v -0.074524 -0.339690 0.687500 +v -0.295494 -0.560661 0.312500 +v -0.472271 -0.295496 0.625000 +v -0.295495 -0.118719 0.375000 +v -0.295494 -0.472273 0.375000 +v -0.472271 -0.295496 0.375000 +v -0.118718 -0.295496 0.375000 +v -0.295494 -0.472273 0.625000 +v -0.118718 -0.295496 0.625000 +v -0.295495 -0.118719 0.625000 +v 1.516466 1.251301 0.687500 +v 1.251301 1.516466 0.312500 +v 1.516466 1.251300 0.312500 +v 1.339689 1.074524 0.687500 +v 1.339689 1.074524 0.312500 +v 1.560660 1.295495 0.687500 +v 1.295495 1.560660 0.687500 +v 1.295495 1.030330 0.687500 +v 1.030330 1.295495 0.687500 +v 1.030330 1.295495 0.312500 +v 1.074524 1.339689 0.312500 +v 1.251301 1.516466 0.687500 +v 1.295495 1.030330 0.312500 +v 1.560660 1.295495 0.312500 +v 1.074524 1.339689 0.687500 +v 1.295495 1.560660 0.312500 +v 1.472272 1.295495 0.625000 +v 1.295495 1.118718 0.375000 +v 1.295495 1.472271 0.375000 +v 1.472272 1.295495 0.375000 +v 1.118719 1.295495 0.375000 +v 1.295495 1.472271 0.625000 +v 1.118719 1.295495 0.625000 +v 1.295495 1.118718 0.625000 +v 1.750000 0.312500 0.687500 +v 1.750000 0.687500 0.312500 +v 1.750000 0.312500 0.312500 +v 1.500000 0.312500 0.687500 +v 1.500000 0.312500 0.312500 +v 1.812500 0.312500 0.687500 +v 1.812500 0.687500 0.687500 +v 1.437500 0.312500 0.687500 +v 1.437500 0.687500 0.687500 +v 1.437500 0.687500 0.312500 +v 1.500000 0.687500 0.312500 +v 1.750000 0.687500 0.687500 +v 1.437500 0.312500 0.312500 +v 1.812500 0.312500 0.312500 +v 1.500000 0.687500 0.687500 +v 1.812500 0.687500 0.312500 +v 1.750000 0.375000 0.625000 +v 1.500000 0.375000 0.375000 +v 1.750000 0.625000 0.375000 +v 1.750000 0.375000 0.375000 +v 1.500000 0.625000 0.375000 +v 1.750000 0.625000 0.625000 +v 1.500000 0.625000 0.625000 +v 1.500000 0.375000 0.625000 +v -0.750000 0.687499 0.687500 +v -0.750000 0.312499 0.312500 +v -0.750000 0.687499 0.312500 +v -0.500000 0.687499 0.687500 +v -0.500000 0.687499 0.312500 +v -0.812500 0.687499 0.687500 +v -0.812500 0.312499 0.687500 +v -0.437500 0.687499 0.687500 +v -0.437500 0.312499 0.687500 +v -0.437500 0.312499 0.312500 +v -0.500000 0.312499 0.312500 +v -0.750000 0.312499 0.687500 +v -0.437500 0.687499 0.312500 +v -0.812500 0.687499 0.312500 +v -0.500000 0.312499 0.687500 +v -0.812500 0.312499 0.312500 +v -0.750000 0.624999 0.625000 +v -0.500000 0.624999 0.375000 +v -0.750000 0.374999 0.375000 +v -0.750000 0.624999 0.375000 +v -0.500000 0.374999 0.375000 +v -0.750000 0.374999 0.625000 +v -0.500000 0.374999 0.625000 +v -0.500000 0.624999 0.625000 +v 0.687500 1.750000 0.687500 +v 0.312500 1.750000 0.312499 +v 0.687500 1.750000 0.312499 +v 0.687500 1.500000 0.687500 +v 0.687500 1.500000 0.312500 +v 0.687500 1.812500 0.687499 +v 0.312500 1.812500 0.687499 +v 0.687500 1.437500 0.687500 +v 0.312500 1.437500 0.687500 +v 0.312500 1.437500 0.312500 +v 0.312500 1.500000 0.312500 +v 0.312500 1.750000 0.687499 +v 0.687500 1.437500 0.312500 +v 0.687500 1.812500 0.312499 +v 0.312500 1.500000 0.687500 +v 0.312500 1.812500 0.312499 +v 0.625000 1.750000 0.625000 +v 0.625000 1.500000 0.375000 +v 0.375000 1.750000 0.374999 +v 0.625000 1.750000 0.375000 +v 0.375000 1.500000 0.375000 +v 0.375000 1.750000 0.624999 +v 0.375000 1.500000 0.625000 +v 0.625000 1.500000 0.625000 +v 0.250000 0.625000 0.000000 +v 0.250000 0.375000 0.000000 +v 0.250000 0.625000 -0.625000 +v 0.250000 0.375000 -0.625000 +v 0.000000 0.625000 -0.000000 +v 0.000000 0.375000 -0.000000 +v 0.000000 0.625000 -0.625000 +v 0.000000 0.375000 -0.625000 +v 0.750000 0.625000 0.000000 +v 0.750000 0.375000 0.000000 +v 0.750000 0.625000 -0.625000 +v 0.750000 0.375000 -0.625000 +v 1.000000 0.625000 0.000000 +v 1.000000 0.375000 0.000000 +v 1.000000 0.625000 -0.625000 +v 1.000000 0.375000 -0.625000 +v 0.250000 0.437500 -0.156250 +v 0.250000 0.562500 -0.156250 +v 0.250000 0.437500 -0.031250 +v 0.250000 0.562500 -0.031250 +v 0.750000 0.437500 -0.156250 +v 0.750000 0.562500 -0.156250 +v 0.750000 0.437500 -0.031250 +v 0.750000 0.562500 -0.031250 +v 1.875000 0.625000 0.375000 +v 1.875000 0.226562 0.750000 +v 1.875000 0.625000 0.625000 +v 2.000000 0.226562 0.250000 +v 1.937500 0.625000 0.375000 +v 2.000000 0.226562 0.750000 +v 1.937500 0.625000 0.625000 +v 1.875000 0.375000 0.375000 +v 1.875000 0.375000 0.625000 +v 2.000000 0.375000 0.625000 +v 2.000000 0.375000 0.375000 +v 1.875000 0.226562 0.250000 +v 1.665942 -0.279442 0.250000 +v 2.000000 -0.279442 0.250000 +v 1.665942 -0.279442 0.750000 +v 2.000000 -0.279442 0.750000 +v 1.665942 -0.501168 0.750000 +v 2.000000 -0.501168 0.750000 +v 2.000000 -0.501168 0.250000 +v 1.665942 -0.501168 0.250000 +v -0.875000 0.625000 0.375000 +v -0.875000 0.226562 0.750000 +v -0.875000 0.625000 0.625000 +v -1.000000 0.226562 0.250000 +v -0.937500 0.625000 0.375000 +v -1.000000 0.226562 0.750000 +v -0.937500 0.625000 0.625000 +v -0.875000 0.375000 0.375000 +v -0.875000 0.375000 0.625000 +v -1.000000 0.375000 0.625000 +v -1.000000 0.375000 0.375000 +v -0.875000 0.226562 0.250000 +v -0.665942 -0.279442 0.250000 +v -1.000000 -0.279442 0.250000 +v -0.665942 -0.279442 0.750000 +v -1.000000 -0.279442 0.750000 +v -0.665942 -0.501168 0.750000 +v -1.000000 -0.501168 0.750000 +v -1.000000 -0.501168 0.250000 +v -0.665942 -0.501168 0.250000 +vt 0.375000 0.250000 +vt 0.750000 0.250000 +vt 0.750000 0.312500 +vt 0.375000 0.312500 +vt 0.375000 0.750000 +vt 0.375000 0.625000 +vt 0.000000 0.625000 +vt 0.000000 0.750000 +vt 0.375000 0.250000 +vt 0.750000 0.250000 +vt 0.750000 0.312500 +vt 0.375000 0.312500 +vt 0.625000 0.250000 +vt 0.750000 0.250000 +vt 0.750000 0.312500 +vt 0.625000 0.312500 +vt 0.625000 0.250000 +vt 0.625000 0.312500 +vt 0.000000 0.500000 +vt 0.000000 0.625000 +vt 0.375000 0.625000 +vt 0.375000 0.500000 +vt 0.375000 0.250000 +vt 0.375000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.250000 +vt 0.375000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.312500 +vt 0.375000 0.375000 +vt 0.750000 0.375000 +vt 0.750000 0.312500 +vt 0.500000 0.250000 +vt 0.500000 0.312500 +vt 0.375000 0.312500 +vt 0.375000 0.250000 +vt 0.625000 0.312500 +vt 0.625000 0.375000 +vt 0.750000 0.375000 +vt 0.750000 0.312500 +vt 0.000000 0.375000 +vt 0.375000 0.375000 +vt 0.000000 0.250000 +vt 0.375000 0.875000 +vt 0.375000 0.750000 +vt 0.312500 0.750000 +vt 0.312500 0.875000 +vt 0.500000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.312500 +vt 0.500000 0.312500 +vt 0.625000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.312500 +vt 0.625000 0.312500 +vt 0.312500 0.375000 +vt 0.312500 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.375000 +vt 0.062500 0.875000 +vt 0.062500 0.750000 +vt 0.000000 0.750000 +vt 0.000000 0.875000 +vt 0.625000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.312500 +vt 0.625000 0.312500 +vt 0.625000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.312500 +vt 0.625000 0.312500 +vt 0.000000 0.375000 +vt 0.000000 0.500000 +vt 0.062500 0.500000 +vt 0.062500 0.375000 +vt 0.750000 0.375000 +vt 0.625000 0.375000 +vt 0.625000 0.437500 +vt 0.750000 0.437500 +vt 0.750000 0.375000 +vt 0.625000 0.375000 +vt 0.625000 0.437500 +vt 0.750000 0.437500 +vt 0.750000 0.437500 +vt 0.625000 0.437500 +vt 0.625000 0.500000 +vt 0.750000 0.500000 +vt 0.750000 0.437500 +vt 0.625000 0.437500 +vt 0.625000 0.500000 +vt 0.750000 0.500000 +vt 0.375000 0.562500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.562500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 1.000000 +vt 0.500000 1.000000 +vt 0.875000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 1.000000 +vt 0.875000 1.000000 +vt 0.625000 0.812500 +vt 0.625000 1.000000 +vt 0.375000 0.562500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.562500 +vt 0.531250 0.593750 +vt 0.531250 0.656250 +vt 0.593750 0.656250 +vt 0.593750 0.593750 +vt 0.500000 0.656250 +vt 0.531250 0.656250 +vt 0.531250 0.593750 +vt 0.500000 0.593750 +vt 0.531250 0.593750 +vt 0.531250 0.656250 +vt 0.593750 0.656250 +vt 0.593750 0.593750 +vt 0.531250 0.656250 +vt 0.531250 0.593750 +vt 0.500000 0.593750 +vt 0.500000 0.656250 +vt 0.500000 0.593750 +vt 0.500000 0.656250 +vt 0.531250 0.656250 +vt 0.531250 0.593750 +vt 0.500000 0.593750 +vt 0.500000 0.656250 +vt 0.812500 0.515625 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.812500 0.609375 +vt 0.796875 0.515625 +vt 0.812500 0.515625 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.796875 0.515625 +vt 0.812500 0.515625 +vt 0.796875 0.515625 +vt 0.812500 0.515625 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.812500 0.515625 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.812500 0.609375 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.796875 0.515625 +vt 0.812500 0.515625 +vt 0.531250 0.593750 +vt 0.593750 0.593750 +vt 0.593750 0.656250 +vt 0.531250 0.656250 +vt 0.500000 0.656250 +vt 0.500000 0.593750 +vt 0.531250 0.593750 +vt 0.531250 0.656250 +vt 0.531250 0.593750 +vt 0.593750 0.593750 +vt 0.593750 0.656250 +vt 0.531250 0.656250 +vt 0.531250 0.656250 +vt 0.500000 0.656250 +vt 0.500000 0.593750 +vt 0.531250 0.593750 +vt 0.500000 0.593750 +vt 0.500000 0.656250 +vt 0.531250 0.656250 +vt 0.500000 0.656250 +vt 0.500000 0.593750 +vt 0.531250 0.593750 +vt 0.812500 0.515625 +vt 0.812500 0.609375 +vt 0.843750 0.609375 +vt 0.843750 0.515625 +vt 0.796875 0.515625 +vt 0.796875 0.609375 +vt 0.812500 0.609375 +vt 0.812500 0.515625 +vt 0.843750 0.609375 +vt 0.843750 0.515625 +vt 0.812500 0.609375 +vt 0.812500 0.515625 +vt 0.796875 0.515625 +vt 0.796875 0.609375 +vt 0.796875 0.515625 +vt 0.796875 0.609375 +vt 0.812500 0.609375 +vt 0.812500 0.515625 +vt 0.812500 0.515625 +vt 0.812500 0.609375 +vt 0.843750 0.609375 +vt 0.843750 0.515625 +vt 0.843750 0.609375 +vt 0.843750 0.515625 +vt 0.812500 0.609375 +vt 0.812500 0.515625 +vt 0.796875 0.515625 +vt 0.796875 0.609375 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.375000 0.687500 +vt 0.375000 0.812500 +vt 0.500000 0.812500 +vt 0.375000 0.687500 +vt 0.375000 0.695312 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.500000 0.687500 +vt 0.375000 0.695312 +vt 0.843750 0.742188 +vt 0.843750 0.664062 +vt 0.812500 0.664062 +vt 0.812500 0.742188 +vt 0.843750 0.742188 +vt 0.843750 0.664062 +vt 0.812500 0.664062 +vt 0.812500 0.742188 +vt 0.812500 0.742188 +vt 0.812500 0.664062 +vt 0.843750 0.664062 +vt 0.843750 0.742188 +vt 0.875000 0.343750 +vt 0.875000 0.312500 +vt 0.843750 0.312500 +vt 0.843750 0.343750 +vt 0.875000 0.343750 +vt 0.875000 0.312500 +vt 0.843750 0.312500 +vt 0.843750 0.343750 +vt 0.843750 0.742188 +vt 0.812500 0.742188 +vt 0.812500 0.664062 +vt 0.843750 0.664062 +vt 0.843750 0.742188 +vt 0.812500 0.742188 +vt 0.812500 0.664062 +vt 0.843750 0.664062 +vt 0.812500 0.742188 +vt 0.843750 0.742188 +vt 0.843750 0.664062 +vt 0.812500 0.664062 +vt 0.875000 0.343750 +vt 0.843750 0.343750 +vt 0.843750 0.312500 +vt 0.875000 0.312500 +vt 0.875000 0.343750 +vt 0.843750 0.343750 +vt 0.843750 0.312500 +vt 0.875000 0.312500 +vt 0.875000 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.734375 +vt 0.875000 0.734375 +vt 0.843750 0.656250 +vt 0.843750 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.656250 +vt 0.875000 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.734375 +vt 0.875000 0.734375 +vt 0.843750 0.656250 +vt 0.843750 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.656250 +vt 0.843750 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.656250 +vt 0.843750 0.656250 +vt 0.875000 0.656250 +vt 0.843750 0.656250 +vt 0.843750 0.812500 +vt 0.875000 0.812500 +vt 0.177979 0.513854 +vt 0.147512 0.513854 +vt 0.162746 0.574789 +vt 0.177979 0.574789 +vt 0.178543 0.514716 +vt 0.239815 0.514716 +vt 0.239815 0.575988 +vt 0.178543 0.575988 +vt 0.147512 0.513854 +vt 0.177979 0.513854 +vt 0.177979 0.574789 +vt 0.162746 0.574789 +vt 0.177979 0.477674 +vt 0.228935 0.354341 +vt 0.147512 0.354341 +vt 0.147512 0.477674 +vt 0.239815 0.575988 +vt 0.178543 0.575988 +vt 0.147512 0.477674 +vt 0.177979 0.477674 +vt 0.147907 0.478336 +vt 0.270451 0.478336 +vt 0.147907 0.354319 +vt 0.270451 0.354319 +vt 0.147512 0.354341 +vt 0.228935 0.354341 +vt 0.270451 0.299977 +vt 0.147907 0.299976 +vt 0.147907 0.299977 +vt 0.147907 0.354319 +vt 0.270451 0.354319 +vt 0.270451 0.299976 +vt 0.147512 0.300297 +vt 0.228935 0.300297 +vt 0.228935 0.300297 +vt 0.147512 0.300297 +vt 0.177868 0.513854 +vt 0.177868 0.574789 +vt 0.162634 0.574789 +vt 0.147401 0.513854 +vt 0.178543 0.514716 +vt 0.178543 0.575988 +vt 0.239815 0.575988 +vt 0.239815 0.514716 +vt 0.147401 0.513854 +vt 0.162634 0.574789 +vt 0.177868 0.574789 +vt 0.177868 0.513854 +vt 0.177868 0.477674 +vt 0.147401 0.477674 +vt 0.147401 0.354341 +vt 0.228824 0.354341 +vt 0.178543 0.575988 +vt 0.239815 0.575988 +vt 0.147401 0.477674 +vt 0.177868 0.477674 +vt 0.147907 0.478336 +vt 0.270452 0.478336 +vt 0.270452 0.354319 +vt 0.147907 0.354319 +vt 0.228824 0.354341 +vt 0.147401 0.354341 +vt 0.270452 0.299977 +vt 0.147907 0.299976 +vt 0.147907 0.299977 +vt 0.270452 0.299976 +vt 0.270452 0.354319 +vt 0.147907 0.354319 +vt 0.228824 0.300297 +vt 0.147401 0.300297 +vt 0.147401 0.300297 +vt 0.228824 0.300297 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.9864 0.1644 -0.0000 +vn 0.9864 -0.1644 0.0000 +vn 0.9864 0.1644 0.0000 +vn -0.9864 -0.1644 0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.9239 0.3827 -0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.3827 0.9239 -0.0000 +vn 0.3827 0.9239 0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.9239 0.3827 -0.0000 +vn 0.9239 -0.3827 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.9701 0.2425 0.0000 +vn 0.0000 0.6441 -0.7649 +vn 0.0000 0.6441 0.7649 +vn -0.9701 0.2425 0.0000 +usemtl None +s off +f 4/1/1 2/2/1 1/3/1 3/4/1 +f 1/5/2 6/6/2 5/7/2 3/8/2 +f 7/9/3 8/10/3 5/11/3 6/12/3 +f 2/13/4 7/14/4 6/15/4 1/16/4 +f 8/10/5 4/17/5 3/18/5 5/11/5 +f 4/19/6 8/20/6 7/21/6 2/22/6 +f 12/23/3 11/24/3 9/25/3 10/26/3 +f 9/27/2 11/28/2 13/29/2 14/30/2 +f 15/31/1 14/32/1 13/33/1 16/34/1 +f 10/35/4 9/36/4 14/37/4 15/38/4 +f 16/39/5 13/40/5 11/41/5 12/42/5 +f 12/43/6 10/44/6 15/38/6 16/45/6 +f 17/46/2 22/47/2 21/48/2 19/49/2 +f 18/50/4 23/51/4 22/52/4 17/53/4 +f 24/54/5 20/55/5 19/56/5 21/57/5 +f 20/58/6 24/59/6 23/60/6 18/61/6 +f 25/62/2 30/63/2 29/64/2 27/65/2 +f 26/66/4 31/67/4 30/68/4 25/69/4 +f 32/70/5 28/71/5 27/72/5 29/73/5 +f 28/74/6 32/75/6 31/76/6 26/77/6 +f 33/78/5 35/79/5 36/80/5 34/81/5 +f 35/82/1 39/83/1 40/84/1 36/85/1 +f 39/86/4 37/87/4 38/88/4 40/89/4 +f 37/90/3 33/91/3 34/92/3 38/93/3 +f 40/94/2 38/95/2 34/96/2 36/97/2 +f 41/98/5 43/99/5 44/100/5 42/101/5 +f 43/102/1 47/103/1 48/104/1 44/105/1 +f 47/103/4 45/106/4 46/107/4 48/104/4 +f 45/106/3 41/98/3 42/101/3 46/107/3 +f 48/108/2 46/109/2 42/110/2 44/111/2 +f 49/112/3 53/113/3 56/114/3 51/115/3 +f 55/116/2 56/117/2 53/118/2 54/119/2 +f 52/120/1 55/121/1 54/122/1 50/123/1 +f 51/124/4 56/125/4 55/126/4 52/127/4 +f 50/128/5 54/129/5 53/113/5 49/112/5 +f 49/130/6 51/131/6 52/132/6 50/133/6 +f 57/134/7 59/135/7 60/136/7 58/137/7 +f 59/138/1 63/139/1 64/140/1 60/141/1 +f 63/139/8 61/142/8 62/143/8 64/140/8 +f 61/144/3 57/145/3 58/146/3 62/147/3 +f 67/148/3 71/149/3 72/150/3 68/151/3 +f 65/152/9 67/153/9 68/154/9 66/155/9 +f 71/149/10 69/156/10 70/157/10 72/150/10 +f 69/158/1 65/159/1 66/160/1 70/161/1 +f 73/162/1 75/163/1 80/164/1 77/165/1 +f 79/166/2 78/167/2 77/168/2 80/169/2 +f 76/170/3 74/171/3 78/172/3 79/173/3 +f 75/174/4 76/175/4 79/176/4 80/177/4 +f 74/178/5 73/162/5 77/165/5 78/179/5 +f 73/180/6 74/181/6 76/182/6 75/183/6 +f 81/184/7 82/185/7 84/186/7 83/187/7 +f 83/188/3 84/189/3 88/190/3 87/191/3 +f 87/191/8 88/190/8 86/192/8 85/193/8 +f 85/194/1 86/195/1 82/196/1 81/197/1 +f 91/198/1 92/199/1 96/200/1 95/201/1 +f 89/202/9 90/203/9 92/204/9 91/205/9 +f 95/201/10 96/200/10 94/206/10 93/207/10 +f 93/208/3 94/209/3 90/210/3 89/211/3 +f 97/212/11 98/213/11 100/214/11 99/215/11 +f 99/216/12 100/217/12 102/218/12 101/219/12 +f 101/220/13 102/221/13 104/222/13 103/223/13 +f 103/224/5 104/225/5 106/226/5 105/227/5 +f 105/228/14 106/229/14 108/230/14 107/231/14 +f 107/232/15 108/233/15 110/234/15 109/235/15 +f 109/236/16 110/237/16 112/238/16 111/239/16 +f 111/240/2 112/241/2 114/242/2 113/243/2 +f 113/244/17 114/245/17 116/246/17 115/247/17 +f 115/248/18 116/249/18 118/250/18 117/251/18 +f 117/252/19 118/253/19 120/254/19 119/255/19 +f 119/256/4 120/257/4 122/258/4 121/259/4 +f 121/260/20 122/261/20 124/262/20 123/263/20 +f 123/264/21 124/265/21 126/266/21 125/267/21 +f 125/268/22 126/269/22 128/270/22 127/271/22 +f 127/272/6 128/273/6 98/274/6 97/275/6 +f 130/276/17 129/277/17 132/278/17 131/279/17 +f 129/280/18 133/281/18 134/282/18 132/283/18 +f 133/284/19 135/285/19 136/286/19 134/287/19 +f 135/288/4 137/289/4 138/290/4 136/291/4 +f 137/292/20 139/293/20 140/294/20 138/295/20 +f 139/296/21 141/297/21 142/298/21 140/299/21 +f 141/300/22 143/301/22 144/302/22 142/303/22 +f 143/304/6 145/305/6 146/306/6 144/307/6 +f 145/308/11 147/309/11 148/310/11 146/311/11 +f 147/312/12 149/313/12 150/314/12 148/315/12 +f 149/316/13 151/317/13 152/318/13 150/319/13 +f 151/320/5 153/321/5 154/322/5 152/323/5 +f 153/324/14 155/325/14 156/326/14 154/327/14 +f 155/328/15 157/329/15 158/330/15 156/331/15 +f 157/332/16 159/333/16 160/334/16 158/335/16 +f 159/336/2 130/337/2 131/338/2 160/339/2 +f 110/340/3 108/233/3 140/341/3 142/342/3 +f 128/343/3 126/269/3 158/344/3 160/345/3 +f 99/216/1 101/346/1 133/347/1 129/348/1 +f 117/252/1 119/349/1 151/350/1 149/351/1 +f 102/352/3 100/217/3 132/353/3 134/354/3 +f 120/355/3 118/253/3 150/356/3 152/357/3 +f 109/236/1 111/358/1 143/359/1 141/360/1 +f 127/272/1 97/361/1 130/362/1 159/363/1 +f 112/364/3 110/237/3 142/365/3 144/366/3 +f 98/367/3 128/273/3 160/368/3 131/369/3 +f 101/220/1 103/370/1 135/371/1 133/372/1 +f 119/256/1 121/373/1 153/374/1 151/375/1 +f 104/376/3 102/221/3 134/377/3 136/378/3 +f 122/379/3 120/257/3 152/380/3 154/381/3 +f 111/240/1 113/382/1 145/383/1 143/384/1 +f 114/385/3 112/241/3 144/386/3 146/387/3 +f 103/224/1 105/388/1 137/389/1 135/390/1 +f 121/260/1 123/391/1 155/392/1 153/393/1 +f 106/394/3 104/225/3 136/395/3 138/396/3 +f 124/397/3 122/261/3 154/398/3 156/399/3 +f 113/244/1 115/400/1 147/401/1 145/402/1 +f 116/403/3 114/245/3 146/404/3 148/405/3 +f 105/228/1 107/406/1 139/407/1 137/408/1 +f 123/264/1 125/409/1 157/410/1 155/411/1 +f 97/212/1 99/412/1 129/413/1 130/414/1 +f 108/415/3 106/229/3 138/416/3 140/417/3 +f 126/418/3 124/265/3 156/419/3 158/420/3 +f 115/248/1 117/421/1 149/422/1 147/423/1 +f 100/424/3 98/213/3 131/425/3 132/426/3 +f 118/427/3 116/249/3 148/428/3 150/429/3 +f 107/232/1 109/430/1 141/431/1 139/432/1 +f 125/268/1 127/433/1 159/434/1 157/435/1 +f 164/436/6 165/437/6 171/438/6 175/439/6 +f 166/440/6 174/441/6 176/442/6 167/443/6 +f 163/444/5 174/445/5 166/446/5 161/447/5 +f 175/448/1 169/449/1 168/450/1 164/436/1 +f 177/451/5 184/452/5 178/453/5 180/454/5 +f 173/455/2 168/456/2 169/457/2 170/458/2 +f 164/459/5 168/460/5 173/461/5 165/462/5 +f 184/463/1 177/464/1 182/465/1 183/466/1 +f 172/467/4 167/468/4 176/469/4 162/470/4 +f 179/471/4 181/472/4 183/473/4 182/474/4 +f 165/437/3 173/475/3 170/476/3 171/477/3 +f 161/478/1 166/440/1 167/479/1 172/480/1 +f 180/481/3 178/482/3 181/483/3 179/484/3 +f 163/485/2 161/486/2 172/487/2 162/488/2 +f 171/489/4 170/490/4 169/491/4 175/492/4 +f 162/493/3 176/494/3 174/441/3 163/495/3 +f 188/496/11 189/497/11 195/498/11 199/499/11 +f 190/500/11 198/501/11 200/502/11 191/503/11 +f 187/504/14 198/505/14 190/506/14 185/507/14 +f 199/508/1 193/509/1 192/510/1 188/496/1 +f 201/511/14 208/512/14 202/513/14 204/514/14 +f 197/515/17 192/516/17 193/517/17 194/518/17 +f 188/519/14 192/520/14 197/521/14 189/522/14 +f 208/523/1 201/524/1 206/525/1 207/526/1 +f 196/527/20 191/528/20 200/529/20 186/530/20 +f 203/531/20 205/532/20 207/533/20 206/534/20 +f 189/497/3 197/535/3 194/536/3 195/537/3 +f 185/538/1 190/500/1 191/539/1 196/540/1 +f 204/541/3 202/542/3 205/543/3 203/544/3 +f 187/545/17 185/546/17 196/547/17 186/548/17 +f 195/549/20 194/550/20 193/551/20 199/552/20 +f 186/553/3 200/554/3 198/501/3 187/555/3 +f 212/556/17 213/557/17 219/558/17 223/559/17 +f 214/560/17 222/561/17 224/562/17 215/563/17 +f 211/564/20 222/565/20 214/566/20 209/567/20 +f 223/568/1 217/569/1 216/570/1 212/556/1 +f 225/571/20 232/572/20 226/573/20 228/574/20 +f 221/575/11 216/576/11 217/577/11 218/578/11 +f 212/579/20 216/580/20 221/581/20 213/582/20 +f 232/583/1 225/584/1 230/585/1 231/586/1 +f 220/587/14 215/588/14 224/589/14 210/590/14 +f 227/591/14 229/592/14 231/593/14 230/594/14 +f 213/557/3 221/595/3 218/596/3 219/597/3 +f 209/598/1 214/560/1 215/599/1 220/600/1 +f 228/601/3 226/602/3 229/603/3 227/604/3 +f 211/605/11 209/606/11 220/607/11 210/608/11 +f 219/609/14 218/610/14 217/611/14 223/612/14 +f 210/613/3 224/614/3 222/561/3 211/615/3 +f 236/616/14 237/617/14 243/618/14 247/619/14 +f 238/620/14 246/621/14 248/622/14 239/623/14 +f 235/624/17 246/625/17 238/626/17 233/627/17 +f 247/628/1 241/629/1 240/630/1 236/616/1 +f 249/631/17 256/632/17 250/633/17 252/634/17 +f 245/635/20 240/636/20 241/637/20 242/638/20 +f 236/639/17 240/640/17 245/641/17 237/642/17 +f 256/643/1 249/644/1 254/645/1 255/646/1 +f 244/647/11 239/648/11 248/649/11 234/650/11 +f 251/651/11 253/652/11 255/653/11 254/654/11 +f 237/617/3 245/655/3 242/656/3 243/657/3 +f 233/658/1 238/620/1 239/659/1 244/660/1 +f 252/661/3 250/662/3 253/663/3 251/664/3 +f 235/665/20 233/666/20 244/667/20 234/668/20 +f 243/669/11 242/670/11 241/671/11 247/672/11 +f 234/673/3 248/674/3 246/621/3 235/675/3 +f 260/676/20 261/677/20 267/678/20 271/679/20 +f 262/680/20 270/681/20 272/682/20 263/683/20 +f 259/684/11 270/685/11 262/686/11 257/687/11 +f 271/688/1 265/689/1 264/690/1 260/676/1 +f 273/691/11 280/692/11 274/693/11 276/694/11 +f 269/695/14 264/696/14 265/697/14 266/698/14 +f 260/699/11 264/700/11 269/701/11 261/702/11 +f 280/703/1 273/704/1 278/705/1 279/706/1 +f 268/707/17 263/708/17 272/709/17 258/710/17 +f 275/711/17 277/712/17 279/713/17 278/714/17 +f 261/677/3 269/715/3 266/716/3 267/717/3 +f 257/718/1 262/680/1 263/719/1 268/720/1 +f 276/721/3 274/722/3 277/723/3 275/724/3 +f 259/725/14 257/726/14 268/727/14 258/728/14 +f 267/729/17 266/730/17 265/731/17 271/732/17 +f 258/733/3 272/734/3 270/681/3 259/735/3 +f 284/736/19 285/737/19 291/738/19 295/739/19 +f 286/740/19 294/741/19 296/742/19 287/743/19 +f 283/744/22 294/745/22 286/746/22 281/747/22 +f 295/748/1 289/749/1 288/750/1 284/736/1 +f 297/751/22 304/752/22 298/753/22 300/754/22 +f 293/755/13 288/756/13 289/757/13 290/758/13 +f 284/759/22 288/760/22 293/761/22 285/762/22 +f 304/763/1 297/764/1 302/765/1 303/766/1 +f 292/767/16 287/768/16 296/769/16 282/770/16 +f 299/771/16 301/772/16 303/773/16 302/774/16 +f 285/737/3 293/775/3 290/776/3 291/777/3 +f 281/778/1 286/740/1 287/779/1 292/780/1 +f 300/781/3 298/782/3 301/783/3 299/784/3 +f 283/785/13 281/786/13 292/787/13 282/788/13 +f 291/789/16 290/790/16 289/791/16 295/792/16 +f 282/793/3 296/794/3 294/741/3 283/795/3 +f 308/796/13 309/797/13 315/798/13 319/799/13 +f 310/800/13 318/801/13 320/802/13 311/803/13 +f 307/804/16 318/805/16 310/806/16 305/807/16 +f 319/808/1 313/809/1 312/810/1 308/796/1 +f 321/811/16 328/812/16 322/813/16 324/814/16 +f 317/815/19 312/816/19 313/817/19 314/818/19 +f 308/819/16 312/820/16 317/821/16 309/822/16 +f 328/823/1 321/824/1 326/825/1 327/826/1 +f 316/827/22 311/828/22 320/829/22 306/830/22 +f 323/831/22 325/832/22 327/833/22 326/834/22 +f 309/797/3 317/835/3 314/836/3 315/837/3 +f 305/838/1 310/800/1 311/839/1 316/840/1 +f 324/841/3 322/842/3 325/843/3 323/844/3 +f 307/845/19 305/846/19 316/847/19 306/848/19 +f 315/849/22 314/850/22 313/851/22 319/852/22 +f 306/853/3 320/854/3 318/801/3 307/855/3 +f 332/856/16 333/857/16 339/858/16 343/859/16 +f 334/860/16 342/861/16 344/862/16 335/863/16 +f 331/864/19 342/865/19 334/866/19 329/867/19 +f 343/868/1 337/869/1 336/870/1 332/856/1 +f 345/871/19 352/872/19 346/873/19 348/874/19 +f 341/875/22 336/876/22 337/877/22 338/878/22 +f 332/879/19 336/880/19 341/881/19 333/882/19 +f 352/883/1 345/884/1 350/885/1 351/886/1 +f 340/887/13 335/888/13 344/889/13 330/890/13 +f 347/891/13 349/892/13 351/893/13 350/894/13 +f 333/857/3 341/895/3 338/896/3 339/897/3 +f 329/898/1 334/860/1 335/899/1 340/900/1 +f 348/901/3 346/902/3 349/903/3 347/904/3 +f 331/905/22 329/906/22 340/907/22 330/908/22 +f 339/909/13 338/910/13 337/911/13 343/912/13 +f 330/913/3 344/914/3 342/861/3 331/915/3 +f 356/916/22 357/917/22 363/918/22 367/919/22 +f 358/920/22 366/921/22 368/922/22 359/923/22 +f 355/924/13 366/925/13 358/926/13 353/927/13 +f 367/928/1 361/929/1 360/930/1 356/916/1 +f 369/931/13 376/932/13 370/933/13 372/934/13 +f 365/935/16 360/936/16 361/937/16 362/938/16 +f 356/939/13 360/940/13 365/941/13 357/942/13 +f 376/943/1 369/944/1 374/945/1 375/946/1 +f 364/947/19 359/948/19 368/949/19 354/950/19 +f 371/951/19 373/952/19 375/953/19 374/954/19 +f 357/917/3 365/955/3 362/956/3 363/957/3 +f 353/958/1 358/920/1 359/959/1 364/960/1 +f 372/961/3 370/962/3 373/963/3 371/964/3 +f 355/965/16 353/966/16 364/967/16 354/968/16 +f 363/969/19 362/970/19 361/971/19 367/972/19 +f 354/973/3 368/974/3 366/921/3 355/975/3 +f 380/976/21 381/977/21 387/978/21 391/979/21 +f 382/980/21 390/981/21 392/982/21 383/983/21 +f 379/984/12 390/985/12 382/986/12 377/987/12 +f 391/988/1 385/989/1 384/990/1 380/976/1 +f 393/991/12 400/992/12 394/993/12 396/994/12 +f 389/995/15 384/996/15 385/997/15 386/998/15 +f 380/999/12 384/1000/12 389/1001/12 381/1002/12 +f 400/1003/1 393/1004/1 398/1005/1 399/1006/1 +f 388/1007/18 383/1008/18 392/1009/18 378/1010/18 +f 395/1011/18 397/1012/18 399/1013/18 398/1014/18 +f 381/977/3 389/1015/3 386/1016/3 387/1017/3 +f 377/1018/1 382/980/1 383/1019/1 388/1020/1 +f 396/1021/3 394/1022/3 397/1023/3 395/1024/3 +f 379/1025/15 377/1026/15 388/1027/15 378/1028/15 +f 387/1029/18 386/1030/18 385/1031/18 391/1032/18 +f 378/1033/3 392/1034/3 390/981/3 379/1035/3 +f 404/1036/15 405/1037/15 411/1038/15 415/1039/15 +f 406/1040/15 414/1041/15 416/1042/15 407/1043/15 +f 403/1044/18 414/1045/18 406/1046/18 401/1047/18 +f 415/1048/1 409/1049/1 408/1050/1 404/1036/1 +f 417/1051/18 424/1052/18 418/1053/18 420/1054/18 +f 413/1055/21 408/1056/21 409/1057/21 410/1058/21 +f 404/1059/18 408/1060/18 413/1061/18 405/1062/18 +f 424/1063/1 417/1064/1 422/1065/1 423/1066/1 +f 412/1067/12 407/1068/12 416/1069/12 402/1070/12 +f 419/1071/12 421/1072/12 423/1073/12 422/1074/12 +f 405/1037/3 413/1075/3 410/1076/3 411/1077/3 +f 401/1078/1 406/1040/1 407/1079/1 412/1080/1 +f 420/1081/3 418/1082/3 421/1083/3 419/1084/3 +f 403/1085/21 401/1086/21 412/1087/21 402/1088/21 +f 411/1089/12 410/1090/12 409/1091/12 415/1092/12 +f 402/1093/3 416/1094/3 414/1041/3 403/1095/3 +f 428/1096/12 429/1097/12 435/1098/12 439/1099/12 +f 430/1100/12 438/1101/12 440/1102/12 431/1103/12 +f 427/1104/15 438/1105/15 430/1106/15 425/1107/15 +f 439/1108/1 433/1109/1 432/1110/1 428/1096/1 +f 441/1111/15 448/1112/15 442/1113/15 444/1114/15 +f 437/1115/18 432/1116/18 433/1117/18 434/1118/18 +f 428/1119/15 432/1120/15 437/1121/15 429/1122/15 +f 448/1123/1 441/1124/1 446/1125/1 447/1126/1 +f 436/1127/21 431/1128/21 440/1129/21 426/1130/21 +f 443/1131/21 445/1132/21 447/1133/21 446/1134/21 +f 429/1097/3 437/1135/3 434/1136/3 435/1137/3 +f 425/1138/1 430/1100/1 431/1139/1 436/1140/1 +f 444/1141/3 442/1142/3 445/1143/3 443/1144/3 +f 427/1145/18 425/1146/18 436/1147/18 426/1148/18 +f 435/1149/21 434/1150/21 433/1151/21 439/1152/21 +f 426/1153/3 440/1154/3 438/1101/3 427/1155/3 +f 452/1156/18 453/1157/18 459/1158/18 463/1159/18 +f 454/1160/18 462/1161/18 464/1162/18 455/1163/18 +f 451/1164/21 462/1165/21 454/1166/21 449/1167/21 +f 463/1168/1 457/1169/1 456/1170/1 452/1156/1 +f 465/1171/21 472/1172/21 466/1173/21 468/1174/21 +f 461/1175/12 456/1176/12 457/1177/12 458/1178/12 +f 452/1179/21 456/1180/21 461/1181/21 453/1182/21 +f 472/1183/1 465/1184/1 470/1185/1 471/1186/1 +f 460/1187/15 455/1188/15 464/1189/15 450/1190/15 +f 467/1191/15 469/1192/15 471/1193/15 470/1194/15 +f 453/1157/3 461/1195/3 458/1196/3 459/1197/3 +f 449/1198/1 454/1160/1 455/1199/1 460/1200/1 +f 468/1201/3 466/1202/3 469/1203/3 467/1204/3 +f 451/1205/12 449/1206/12 460/1207/12 450/1208/12 +f 459/1209/15 458/1210/15 457/1211/15 463/1212/15 +f 450/1213/3 464/1214/3 462/1161/3 451/1215/3 +f 476/1216/4 477/1217/4 483/1218/4 487/1219/4 +f 478/1220/4 486/1221/4 488/1222/4 479/1223/4 +f 475/1224/6 486/1225/6 478/1226/6 473/1227/6 +f 487/1228/1 481/1229/1 480/1230/1 476/1216/1 +f 489/1231/6 496/1232/6 490/1233/6 492/1234/6 +f 485/1235/5 480/1236/5 481/1237/5 482/1238/5 +f 476/1239/6 480/1240/6 485/1241/6 477/1242/6 +f 496/1243/1 489/1244/1 494/1245/1 495/1246/1 +f 484/1247/2 479/1248/2 488/1249/2 474/1250/2 +f 491/1251/2 493/1252/2 495/1253/2 494/1254/2 +f 477/1217/3 485/1255/3 482/1256/3 483/1257/3 +f 473/1258/1 478/1220/1 479/1259/1 484/1260/1 +f 492/1261/3 490/1262/3 493/1263/3 491/1264/3 +f 475/1265/5 473/1266/5 484/1267/5 474/1268/5 +f 483/1269/2 482/1270/2 481/1271/2 487/1272/2 +f 474/1273/3 488/1274/3 486/1221/3 475/1275/3 +f 500/1276/5 501/1277/5 507/1278/5 511/1279/5 +f 502/1280/5 510/1281/5 512/1282/5 503/1283/5 +f 499/1284/2 510/1285/2 502/1286/2 497/1287/2 +f 511/1288/1 505/1289/1 504/1290/1 500/1276/1 +f 513/1291/2 520/1292/2 514/1293/2 516/1294/2 +f 509/1295/4 504/1296/4 505/1297/4 506/1298/4 +f 500/1299/2 504/1300/2 509/1301/2 501/1302/2 +f 520/1303/1 513/1304/1 518/1305/1 519/1306/1 +f 508/1307/6 503/1308/6 512/1309/6 498/1310/6 +f 515/1311/6 517/1312/6 519/1313/6 518/1314/6 +f 501/1277/3 509/1315/3 506/1316/3 507/1317/3 +f 497/1318/1 502/1280/1 503/1319/1 508/1320/1 +f 516/1321/3 514/1322/3 517/1323/3 515/1324/3 +f 499/1325/4 497/1326/4 508/1327/4 498/1328/4 +f 507/1329/6 506/1330/6 505/1331/6 511/1332/6 +f 498/1333/3 512/1334/3 510/1281/3 499/1335/3 +f 524/1336/2 525/1337/2 531/1338/2 535/1339/2 +f 526/1340/2 534/1341/2 536/1342/2 527/1343/2 +f 523/1344/4 534/1345/4 526/1346/4 521/1347/4 +f 535/1348/1 529/1349/1 528/1350/1 524/1336/1 +f 537/1351/4 544/1352/4 538/1353/4 540/1354/4 +f 533/1355/6 528/1356/6 529/1357/6 530/1358/6 +f 524/1359/4 528/1360/4 533/1361/4 525/1362/4 +f 544/1363/1 537/1364/1 542/1365/1 543/1366/1 +f 532/1367/5 527/1368/5 536/1369/5 522/1370/5 +f 539/1371/5 541/1372/5 543/1373/5 542/1374/5 +f 525/1337/3 533/1375/3 530/1376/3 531/1377/3 +f 521/1378/1 526/1340/1 527/1379/1 532/1380/1 +f 540/1381/3 538/1382/3 541/1383/3 539/1384/3 +f 523/1385/6 521/1386/6 532/1387/6 522/1388/6 +f 531/1389/5 530/1390/5 529/1391/5 535/1392/5 +f 522/1393/3 536/1394/3 534/1341/3 523/1395/3 +f 550/1396/6 552/1397/6 548/1398/6 546/1399/6 +f 545/1400/2 547/1401/2 551/1402/2 549/1403/2 +f 552/1404/5 550/1405/5 549/1406/5 551/1407/5 +f 550/1408/1 546/1409/1 545/1410/1 549/1411/1 +f 546/1399/4 548/1398/4 547/1401/4 545/1400/4 +f 548/1412/3 552/1413/3 551/1414/3 547/1415/3 +f 558/1416/6 554/1417/6 556/1418/6 560/1419/6 +f 553/1420/2 557/1421/2 559/1422/2 555/1423/2 +f 560/1424/4 559/1425/4 557/1426/4 558/1427/4 +f 558/1428/1 557/1429/1 553/1430/1 554/1431/1 +f 554/1417/5 553/1420/5 555/1423/5 556/1418/5 +f 556/1432/3 555/1433/3 559/1434/3 560/1435/3 +f 561/1436/5 563/1437/5 564/1438/5 562/1439/5 +f 563/1440/1 567/1441/1 568/1442/1 564/1443/1 +f 567/1444/4 565/1445/4 566/1446/4 568/1447/4 +f 565/1448/3 561/1449/3 562/1450/3 566/1451/3 +f 563/1452/6 561/1453/6 565/1454/6 567/1455/6 +f 568/1456/2 566/1457/2 562/1458/2 564/1459/2 +f 577/1460/1 578/1461/1 575/1462/1 571/1463/1 +f 578/1464/23 579/1465/23 573/1466/23 575/1467/23 +f 579/1468/3 576/1469/3 569/1470/3 573/1471/3 +f 570/1472/1 583/1473/1 584/1474/1 574/1475/1 +f 575/1467/2 573/1466/2 569/1476/2 571/1477/2 +f 572/1478/24 580/1479/24 576/1469/24 579/1468/24 +f 574/1480/4 572/1481/4 579/1465/4 578/1464/4 +f 570/1472/25 574/1475/25 578/1461/25 577/1460/25 +f 574/1480/4 584/1482/4 582/1483/4 572/1481/4 +f 572/1478/3 582/1484/3 581/1485/3 580/1479/3 +f 587/1486/4 582/1483/4 584/1482/4 586/1487/4 +f 585/1488/5 583/1489/5 581/1490/5 588/1491/5 +f 581/1485/3 582/1484/3 587/1492/3 588/1493/3 +f 584/1474/1 583/1473/1 585/1494/1 586/1495/1 +f 597/1496/1 591/1497/1 595/1498/1 598/1499/1 +f 598/1500/26 595/1501/26 593/1502/26 599/1503/26 +f 599/1504/3 593/1505/3 589/1506/3 596/1507/3 +f 590/1508/1 594/1509/1 604/1510/1 603/1511/1 +f 595/1501/2 591/1512/2 589/1513/2 593/1502/2 +f 592/1514/24 599/1504/24 596/1507/24 600/1515/24 +f 594/1516/5 598/1500/5 599/1503/5 592/1517/5 +f 590/1508/25 597/1496/25 598/1499/25 594/1509/25 +f 594/1516/5 592/1517/5 602/1518/5 604/1519/5 +f 592/1514/3 600/1515/3 601/1520/3 602/1521/3 +f 607/1522/5 606/1523/5 604/1519/5 602/1518/5 +f 605/1524/4 608/1525/4 601/1526/4 603/1527/4 +f 601/1520/3 608/1528/3 607/1529/3 602/1521/3 +f 604/1510/1 606/1530/1 605/1531/1 603/1511/1 diff --git a/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor_rotor.obj b/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor_rotor.obj new file mode 100644 index 0000000..33032bf --- /dev/null +++ b/src/main/resources/assets/overengineered/models/multiblock/obj/universal_motor_rotor.obj @@ -0,0 +1,2136 @@ +# Blender v2.79 (sub 0) OBJ File: 'generator.blend' +# www.blender.org +mtllib universal_motor.mtl +o Rotor_Rotor.Shaft +v 0.125000 -0.125000 1.500000 +v 0.125000 0.125000 1.500000 +v -0.125000 0.125000 1.500000 +v 0.125000 -0.125000 -1.500000 +v 0.125000 0.125000 -1.500000 +v -0.125000 -0.125000 -1.500000 +v -0.125000 0.125000 -1.500000 +v -0.125000 -0.125000 1.500000 +v -0.073934 0.178492 0.075000 +v -0.073934 0.178492 -0.075000 +v -0.178492 0.073934 0.075000 +v -0.178492 0.073934 -0.075000 +v -0.178492 -0.073934 0.075000 +v -0.178492 -0.073934 -0.075000 +v -0.073934 -0.178493 0.075000 +v -0.073934 -0.178493 -0.075000 +v 0.073934 -0.178492 0.075000 +v 0.073934 -0.178492 -0.075000 +v 0.178493 -0.073934 0.075000 +v 0.178493 -0.073934 -0.075000 +v 0.178492 0.073934 0.075000 +v 0.178492 0.073934 -0.075000 +v 0.073934 0.178493 0.075000 +v 0.073934 0.178493 -0.075000 +v -0.062500 -0.562500 -0.062500 +v 0.062500 -0.562500 -0.062500 +v -0.062500 -0.562500 0.062500 +v 0.062500 -0.562500 0.062500 +v -0.062500 0.563750 -0.062500 +v 0.062500 0.563750 -0.062500 +v -0.062500 0.563750 0.062500 +v 0.062500 0.563750 0.062500 +v -0.563125 0.063125 -0.062500 +v -0.563125 -0.061875 -0.062500 +v -0.563125 0.063125 0.062500 +v -0.563125 -0.061875 0.062500 +v 0.563125 0.063125 -0.062500 +v 0.563125 -0.061875 -0.062500 +v 0.563125 0.063125 0.062500 +v 0.563125 -0.061875 0.062500 +v 0.353996 -0.441759 -0.062500 +v 0.442384 -0.353370 -0.062500 +v 0.353996 -0.441759 0.062500 +v 0.442384 -0.353370 0.062500 +v -0.442384 0.354620 -0.062500 +v -0.353995 0.443008 -0.062500 +v -0.442384 0.354620 0.062500 +v -0.353995 0.443009 0.062500 +v -0.442384 -0.353370 -0.062500 +v -0.353995 -0.441759 -0.062500 +v -0.442384 -0.353370 0.062500 +v -0.353995 -0.441759 0.062500 +v 0.353995 0.443009 -0.062500 +v 0.442384 0.354620 -0.062500 +v 0.353995 0.443009 0.062500 +v 0.442384 0.354620 0.062500 +v 0.180264 -0.843750 0.187500 +v -0.180265 -0.843750 -0.187500 +v 0.180264 -0.843750 -0.187500 +v 0.118104 -0.593750 0.187500 +v 0.118104 -0.593750 -0.187500 +v 0.180264 -0.906250 0.187500 +v -0.180265 -0.906250 0.187500 +v 0.118104 -0.531250 0.187500 +v -0.118104 -0.531250 0.187500 +v -0.118104 -0.531250 -0.187500 +v -0.118104 -0.593750 -0.187500 +v -0.180264 -0.843750 0.187500 +v 0.118104 -0.531250 -0.187500 +v 0.180264 -0.906250 -0.187500 +v -0.118104 -0.593750 0.187500 +v -0.180265 -0.906250 -0.187500 +v 0.125000 -0.843750 0.125000 +v 0.125000 -0.593750 -0.125000 +v -0.125000 -0.843750 -0.125000 +v 0.125000 -0.843750 -0.125000 +v -0.125000 -0.593750 -0.125000 +v -0.125000 -0.843750 0.125000 +v -0.125000 -0.593750 0.125000 +v 0.125000 -0.593750 0.125000 +v 0.489432 -0.710539 0.187500 +v 0.156346 -0.848508 -0.187500 +v 0.489431 -0.710539 -0.187500 +v 0.336332 -0.503357 0.187500 +v 0.336332 -0.503357 -0.187500 +v 0.513349 -0.768282 0.187500 +v 0.180264 -0.906250 0.187500 +v 0.312415 -0.445615 0.187500 +v 0.094187 -0.536008 0.187500 +v 0.094187 -0.536008 -0.187500 +v 0.118104 -0.593750 -0.187500 +v 0.156347 -0.848508 0.187500 +v 0.312415 -0.445615 -0.187500 +v 0.513349 -0.768282 -0.187500 +v 0.118104 -0.593750 0.187500 +v 0.180264 -0.906250 -0.187500 +v 0.438374 -0.731688 0.125000 +v 0.342703 -0.500718 -0.125000 +v 0.207404 -0.827359 -0.125000 +v 0.438374 -0.731688 -0.125000 +v 0.111733 -0.596389 -0.125000 +v 0.207404 -0.827359 0.125000 +v 0.111733 -0.596389 0.125000 +v 0.342703 -0.500718 0.125000 +v -0.489432 0.710539 0.187500 +v -0.156347 0.848507 -0.187500 +v -0.489432 0.710539 -0.187500 +v -0.336332 0.503357 0.187500 +v -0.336332 0.503357 -0.187500 +v -0.513350 0.768282 0.187500 +v -0.180264 0.906250 0.187500 +v -0.312415 0.445615 0.187500 +v -0.094187 0.536008 0.187500 +v -0.094187 0.536007 -0.187500 +v -0.118104 0.593750 -0.187500 +v -0.156347 0.848508 0.187500 +v -0.312415 0.445614 -0.187500 +v -0.513349 0.768281 -0.187500 +v -0.118104 0.593750 0.187500 +v -0.180264 0.906250 -0.187500 +v -0.438374 0.731688 0.125000 +v -0.342703 0.500718 -0.125000 +v -0.207405 0.827359 -0.125000 +v -0.438374 0.731688 -0.125000 +v -0.111734 0.596389 -0.125000 +v -0.207404 0.827359 0.125000 +v -0.111734 0.596389 0.125000 +v -0.342703 0.500718 0.125000 +v 0.710539 0.489432 0.187500 +v 0.848507 0.156347 -0.187500 +v 0.710539 0.489432 -0.187500 +v 0.503357 0.336333 0.187500 +v 0.503357 0.336333 -0.187500 +v 0.768282 0.513350 0.187500 +v 0.906250 0.180264 0.187500 +v 0.445615 0.312415 0.187500 +v 0.536007 0.094187 0.187500 +v 0.536007 0.094187 -0.187500 +v 0.593750 0.118104 -0.187500 +v 0.848507 0.156347 0.187500 +v 0.445614 0.312415 -0.187500 +v 0.768282 0.513349 -0.187500 +v 0.593750 0.118104 0.187500 +v 0.906250 0.180264 -0.187500 +v 0.731688 0.438374 0.125000 +v 0.500718 0.342703 -0.125000 +v 0.827359 0.207404 -0.125000 +v 0.731688 0.438374 -0.125000 +v 0.596389 0.111734 -0.125000 +v 0.827359 0.207404 0.125000 +v 0.596389 0.111734 0.125000 +v 0.500718 0.342704 0.125000 +v -0.710539 -0.489432 0.187500 +v -0.848508 -0.156347 -0.187500 +v -0.710539 -0.489432 -0.187500 +v -0.503357 -0.336332 0.187500 +v -0.503357 -0.336332 -0.187500 +v -0.768282 -0.513349 0.187500 +v -0.906250 -0.180264 0.187500 +v -0.445615 -0.312415 0.187500 +v -0.536008 -0.094187 0.187500 +v -0.536008 -0.094187 -0.187500 +v -0.593750 -0.118104 -0.187500 +v -0.848508 -0.156347 0.187500 +v -0.445614 -0.312415 -0.187500 +v -0.768282 -0.513349 -0.187500 +v -0.593750 -0.118104 0.187500 +v -0.906250 -0.180264 -0.187500 +v -0.731688 -0.438374 0.125000 +v -0.500718 -0.342703 -0.125000 +v -0.827359 -0.207404 -0.125000 +v -0.731688 -0.438374 -0.125000 +v -0.596389 -0.111733 -0.125000 +v -0.827359 -0.207404 0.125000 +v -0.596389 -0.111733 0.125000 +v -0.500718 -0.342703 0.125000 +v -0.848508 0.156347 0.187500 +v -0.710539 0.489432 -0.187500 +v -0.848508 0.156347 -0.187500 +v -0.593750 0.118104 0.187500 +v -0.593750 0.118104 -0.187500 +v -0.906250 0.180264 0.187500 +v -0.768282 0.513350 0.187500 +v -0.536008 0.094187 0.187500 +v -0.445615 0.312415 0.187500 +v -0.445615 0.312415 -0.187500 +v -0.503357 0.336332 -0.187500 +v -0.710539 0.489432 0.187500 +v -0.536008 0.094187 -0.187500 +v -0.906250 0.180265 -0.187500 +v -0.503357 0.336333 0.187500 +v -0.768282 0.513350 -0.187500 +v -0.827359 0.207404 0.125000 +v -0.596389 0.111733 -0.125000 +v -0.731688 0.438374 -0.125000 +v -0.827359 0.207404 -0.125000 +v -0.500718 0.342703 -0.125000 +v -0.731688 0.438374 0.125000 +v -0.500718 0.342703 0.125000 +v -0.596389 0.111733 0.125000 +v 0.848508 -0.156347 0.187500 +v 0.710539 -0.489432 -0.187500 +v 0.848508 -0.156347 -0.187500 +v 0.593750 -0.118104 0.187500 +v 0.593750 -0.118104 -0.187500 +v 0.906250 -0.180265 0.187500 +v 0.768281 -0.513349 0.187500 +v 0.536008 -0.094186 0.187500 +v 0.445615 -0.312414 0.187500 +v 0.445614 -0.312414 -0.187500 +v 0.503357 -0.336332 -0.187500 +v 0.710539 -0.489432 0.187500 +v 0.536008 -0.094186 -0.187500 +v 0.906250 -0.180265 -0.187500 +v 0.503357 -0.336332 0.187500 +v 0.768281 -0.513349 -0.187500 +v 0.827359 -0.207404 0.125000 +v 0.596389 -0.111733 -0.125000 +v 0.731688 -0.438374 -0.125000 +v 0.827359 -0.207404 -0.125000 +v 0.500718 -0.342703 -0.125000 +v 0.731688 -0.438374 0.125000 +v 0.500718 -0.342703 0.125000 +v 0.596389 -0.111733 0.125000 +v 0.156347 0.848508 0.187500 +v 0.489432 0.710539 -0.187500 +v 0.156347 0.848507 -0.187500 +v 0.118104 0.593750 0.187500 +v 0.118104 0.593750 -0.187500 +v 0.180264 0.906250 0.187500 +v 0.513349 0.768282 0.187500 +v 0.094186 0.536008 0.187500 +v 0.312414 0.445615 0.187500 +v 0.312414 0.445615 -0.187500 +v 0.336332 0.503357 -0.187500 +v 0.489432 0.710539 0.187500 +v 0.094186 0.536008 -0.187500 +v 0.180264 0.906250 -0.187500 +v 0.336332 0.503357 0.187500 +v 0.513349 0.768282 -0.187500 +v 0.207404 0.827359 0.125000 +v 0.111733 0.596389 -0.125000 +v 0.438374 0.731688 -0.125000 +v 0.207404 0.827359 -0.125000 +v 0.342703 0.500718 -0.125000 +v 0.438374 0.731688 0.125000 +v 0.342703 0.500718 0.125000 +v 0.111733 0.596389 0.125000 +v -0.156347 -0.848507 0.187500 +v -0.489432 -0.710539 -0.187500 +v -0.156347 -0.848507 -0.187500 +v -0.118104 -0.593750 0.187500 +v -0.118104 -0.593750 -0.187500 +v -0.180264 -0.906250 0.187500 +v -0.513350 -0.768282 0.187500 +v -0.094187 -0.536008 0.187500 +v -0.312415 -0.445615 0.187500 +v -0.312415 -0.445615 -0.187500 +v -0.336332 -0.503357 -0.187500 +v -0.489432 -0.710539 0.187500 +v -0.094187 -0.536008 -0.187500 +v -0.180265 -0.906250 -0.187500 +v -0.336332 -0.503357 0.187500 +v -0.513350 -0.768282 -0.187500 +v -0.207404 -0.827359 0.125000 +v -0.111733 -0.596389 -0.125000 +v -0.438374 -0.731688 -0.125000 +v -0.207404 -0.827359 -0.125000 +v -0.342703 -0.500718 -0.125000 +v -0.438374 -0.731688 0.125000 +v -0.342703 -0.500718 0.125000 +v -0.111733 -0.596389 0.125000 +v -0.469155 -0.724087 0.187500 +v -0.724088 -0.469155 -0.187500 +v -0.469155 -0.724087 -0.187500 +v -0.336332 -0.503357 0.187500 +v -0.336332 -0.503357 -0.187500 +v -0.513350 -0.768282 0.187500 +v -0.768282 -0.513349 0.187500 +v -0.292138 -0.459163 0.187500 +v -0.459163 -0.292138 0.187500 +v -0.459163 -0.292138 -0.187500 +v -0.503357 -0.336332 -0.187500 +v -0.724088 -0.469155 0.187500 +v -0.292138 -0.459163 -0.187500 +v -0.513350 -0.768282 -0.187500 +v -0.503357 -0.336332 0.187500 +v -0.768282 -0.513349 -0.187500 +v -0.508233 -0.685010 0.125000 +v -0.331456 -0.508233 -0.125000 +v -0.685010 -0.508233 -0.125000 +v -0.508233 -0.685010 -0.125000 +v -0.508233 -0.331456 -0.125000 +v -0.685010 -0.508233 0.125000 +v -0.508233 -0.331456 0.125000 +v -0.331456 -0.508233 0.125000 +v 0.469155 0.724087 0.187500 +v 0.724087 0.469155 -0.187500 +v 0.469155 0.724087 -0.187500 +v 0.336332 0.503357 0.187500 +v 0.336332 0.503357 -0.187500 +v 0.513349 0.768282 0.187500 +v 0.768282 0.513350 0.187500 +v 0.292138 0.459163 0.187500 +v 0.459163 0.292138 0.187500 +v 0.459163 0.292138 -0.187500 +v 0.503357 0.336333 -0.187500 +v 0.724087 0.469155 0.187500 +v 0.292138 0.459163 -0.187500 +v 0.513349 0.768281 -0.187500 +v 0.503357 0.336333 0.187500 +v 0.768282 0.513350 -0.187500 +v 0.508233 0.685010 0.125000 +v 0.331456 0.508233 -0.125000 +v 0.685009 0.508233 -0.125000 +v 0.508233 0.685010 -0.125000 +v 0.508233 0.331456 -0.125000 +v 0.685009 0.508233 0.125000 +v 0.508233 0.331457 0.125000 +v 0.331456 0.508233 0.125000 +v 0.724087 -0.469155 0.187500 +v 0.469155 -0.724087 -0.187500 +v 0.724087 -0.469155 -0.187500 +v 0.503357 -0.336332 0.187500 +v 0.503357 -0.336332 -0.187500 +v 0.768282 -0.513350 0.187500 +v 0.513349 -0.768282 0.187500 +v 0.459163 -0.292138 0.187500 +v 0.292138 -0.459163 0.187500 +v 0.292138 -0.459162 -0.187500 +v 0.336332 -0.503357 -0.187500 +v 0.469155 -0.724087 0.187500 +v 0.459163 -0.292138 -0.187500 +v 0.768282 -0.513350 -0.187500 +v 0.336332 -0.503357 0.187500 +v 0.513349 -0.768282 -0.187500 +v 0.685010 -0.508233 0.125000 +v 0.508233 -0.331456 -0.125000 +v 0.508233 -0.685010 -0.125000 +v 0.685010 -0.508233 -0.125000 +v 0.331456 -0.508233 -0.125000 +v 0.508233 -0.685010 0.125000 +v 0.331456 -0.508233 0.125000 +v 0.508233 -0.331456 0.125000 +v -0.724087 0.469155 0.187500 +v -0.469155 0.724087 -0.187500 +v -0.724087 0.469155 -0.187500 +v -0.503357 0.336333 0.187500 +v -0.503357 0.336332 -0.187500 +v -0.768282 0.513350 0.187500 +v -0.513350 0.768282 0.187500 +v -0.459163 0.292138 0.187500 +v -0.292138 0.459163 0.187500 +v -0.292138 0.459163 -0.187500 +v -0.336332 0.503357 -0.187500 +v -0.469155 0.724088 0.187500 +v -0.459163 0.292138 -0.187500 +v -0.768282 0.513350 -0.187500 +v -0.336332 0.503357 0.187500 +v -0.513349 0.768282 -0.187500 +v -0.685010 0.508233 0.125000 +v -0.508233 0.331456 -0.125000 +v -0.508233 0.685010 -0.125000 +v -0.685010 0.508233 -0.125000 +v -0.331456 0.508233 -0.125000 +v -0.508233 0.685010 0.125000 +v -0.331456 0.508233 0.125000 +v -0.508233 0.331456 0.125000 +v -0.843750 -0.180264 0.187500 +v -0.843750 0.180264 -0.187500 +v -0.843750 -0.180264 -0.187500 +v -0.593750 -0.118104 0.187500 +v -0.593750 -0.118104 -0.187500 +v -0.906250 -0.180264 0.187500 +v -0.906250 0.180264 0.187500 +v -0.531250 -0.118104 0.187500 +v -0.531250 0.118104 0.187500 +v -0.531250 0.118104 -0.187500 +v -0.593750 0.118104 -0.187500 +v -0.843750 0.180264 0.187500 +v -0.531250 -0.118104 -0.187500 +v -0.906250 -0.180264 -0.187500 +v -0.593750 0.118104 0.187500 +v -0.906250 0.180264 -0.187500 +v -0.843750 -0.125000 0.125000 +v -0.593750 -0.125000 -0.125000 +v -0.843750 0.125000 -0.125000 +v -0.843750 -0.125000 -0.125000 +v -0.593750 0.125000 -0.125000 +v -0.843750 0.125000 0.125000 +v -0.593750 0.125000 0.125000 +v -0.593750 -0.125000 0.125000 +v 0.843750 0.180264 0.187500 +v 0.843750 -0.180264 -0.187500 +v 0.843750 0.180264 -0.187500 +v 0.593750 0.118104 0.187500 +v 0.593750 0.118104 -0.187500 +v 0.906250 0.180264 0.187500 +v 0.906250 -0.180264 0.187500 +v 0.531250 0.118104 0.187500 +v 0.531250 -0.118104 0.187500 +v 0.531250 -0.118104 -0.187500 +v 0.593750 -0.118104 -0.187500 +v 0.843750 -0.180264 0.187500 +v 0.531250 0.118104 -0.187500 +v 0.906250 0.180264 -0.187500 +v 0.593750 -0.118104 0.187500 +v 0.906250 -0.180264 -0.187500 +v 0.843750 0.125000 0.125000 +v 0.593750 0.125000 -0.125000 +v 0.843750 -0.125000 -0.125000 +v 0.843750 0.125000 -0.125000 +v 0.593750 -0.125000 -0.125000 +v 0.843750 -0.125000 0.125000 +v 0.593750 -0.125000 0.125000 +v 0.593750 0.125000 0.125000 +v -0.180264 0.843750 0.187500 +v 0.180264 0.843750 -0.187500 +v -0.180264 0.843750 -0.187500 +v -0.118104 0.593750 0.187500 +v -0.118104 0.593750 -0.187500 +v -0.180264 0.906250 0.187500 +v 0.180264 0.906250 0.187500 +v -0.118104 0.531250 0.187500 +v 0.118104 0.531250 0.187500 +v 0.118104 0.531250 -0.187500 +v 0.118104 0.593750 -0.187500 +v 0.180264 0.843750 0.187500 +v -0.118104 0.531250 -0.187500 +v -0.180264 0.906250 -0.187500 +v 0.118104 0.593750 0.187500 +v 0.180264 0.906250 -0.187500 +v -0.125000 0.843750 0.125000 +v -0.125000 0.593750 -0.125000 +v 0.125000 0.843750 -0.125000 +v -0.125000 0.843750 -0.125000 +v 0.125000 0.593750 -0.125000 +v 0.125000 0.843750 0.125000 +v 0.125000 0.593750 0.125000 +v -0.125000 0.593750 0.125000 +v -0.035458 0.178260 -0.500000 +v 0.035458 0.178260 -0.500000 +v 0.100976 0.151121 -0.500000 +v 0.151121 0.100976 -0.500000 +v 0.178260 0.035458 -0.500000 +v 0.178260 -0.035458 -0.500000 +v 0.151121 -0.100976 -0.500000 +v 0.100976 -0.151121 -0.500000 +v 0.035458 -0.178260 -0.500000 +v -0.035458 -0.178260 -0.500000 +v -0.100976 -0.151121 -0.500000 +v -0.151121 -0.100976 -0.500000 +v -0.178260 -0.035458 -0.500000 +v -0.178260 0.035458 -0.500000 +v -0.151121 0.100976 -0.500000 +v -0.100976 0.151121 -0.500000 +v -0.035458 0.178260 -0.687500 +v 0.035458 0.178260 -0.687500 +v 0.100976 0.151121 -0.687500 +v 0.151121 0.100976 -0.687500 +v 0.178260 0.035458 -0.687500 +v 0.178260 -0.035458 -0.687500 +v 0.151121 -0.100976 -0.687500 +v 0.100976 -0.151121 -0.687500 +v 0.035458 -0.178260 -0.687500 +v -0.035458 -0.178260 -0.687500 +v -0.100976 -0.151121 -0.687500 +v -0.151121 -0.100976 -0.687500 +v -0.178260 -0.035458 -0.687500 +v -0.178260 0.035458 -0.687500 +v -0.151121 0.100976 -0.687500 +v -0.100976 0.151121 -0.687500 +v -0.021070 0.105925 -0.750000 +v 0.021070 0.105925 -0.750000 +v 0.060002 0.089799 -0.750000 +v 0.089799 0.060002 -0.750000 +v 0.105925 0.021070 -0.750000 +v 0.105925 -0.021070 -0.750000 +v 0.089799 -0.060002 -0.750000 +v 0.060002 -0.089799 -0.750000 +v 0.021070 -0.105925 -0.750000 +v -0.021070 -0.105925 -0.750000 +v -0.060002 -0.089799 -0.750000 +v -0.089799 -0.060002 -0.750000 +v -0.105925 -0.021070 -0.750000 +v -0.105925 0.021070 -0.750000 +v -0.089799 0.060002 -0.750000 +v -0.060002 0.089799 -0.750000 +v -0.021070 0.105925 -0.437500 +v 0.021070 0.105925 -0.437500 +v 0.060002 0.089799 -0.437500 +v 0.089799 0.060002 -0.437500 +v 0.105925 0.021070 -0.437500 +v 0.105925 -0.021070 -0.437500 +v 0.089799 -0.060002 -0.437500 +v 0.060002 -0.089799 -0.437500 +v 0.021070 -0.105925 -0.437500 +v -0.021070 -0.105925 -0.437500 +v -0.060002 -0.089799 -0.437500 +v -0.089799 -0.060002 -0.437500 +v -0.105925 -0.021070 -0.437500 +v -0.105925 0.021070 -0.437500 +v -0.089799 0.060002 -0.437500 +v -0.060002 0.089799 -0.437500 +v 0.012500 0.143750 -0.504991 +v 0.012500 0.168750 -0.504991 +v 0.012500 0.143750 -0.084845 +v 0.012500 0.168750 -0.084845 +v -0.012500 0.143750 -0.504991 +v -0.012500 0.168750 -0.504991 +v -0.012500 0.143750 -0.084845 +v -0.012500 0.168750 -0.084845 +v 0.012500 0.532838 -0.109845 +v 0.012500 0.532838 -0.084845 +v 0.012500 0.168750 -0.109845 +v 0.012500 0.168750 -0.084845 +v -0.012500 0.532838 -0.109845 +v -0.012500 0.532838 -0.084845 +v -0.012500 0.168750 -0.109845 +v -0.012500 0.168750 -0.084845 +v 0.143750 -0.012500 -0.504991 +v 0.168750 -0.012500 -0.504991 +v 0.143750 -0.012500 -0.084845 +v 0.168750 -0.012500 -0.084845 +v 0.143750 0.012500 -0.504991 +v 0.168750 0.012500 -0.504991 +v 0.143750 0.012500 -0.084845 +v 0.168750 0.012500 -0.084845 +v 0.532838 -0.012500 -0.109845 +v 0.532838 -0.012500 -0.084845 +v 0.168750 -0.012500 -0.109845 +v 0.168750 -0.012500 -0.084845 +v 0.532838 0.012500 -0.109845 +v 0.532838 0.012500 -0.084845 +v 0.168750 0.012500 -0.109845 +v 0.168750 0.012500 -0.084845 +v -0.143750 0.012500 -0.504991 +v -0.168750 0.012500 -0.504991 +v -0.143750 0.012500 -0.084845 +v -0.168750 0.012500 -0.084845 +v -0.143750 -0.012500 -0.504991 +v -0.168750 -0.012500 -0.504991 +v -0.143750 -0.012500 -0.084845 +v -0.168750 -0.012500 -0.084845 +v -0.532838 0.012500 -0.109845 +v -0.532838 0.012500 -0.084845 +v -0.168750 0.012500 -0.109845 +v -0.168750 0.012500 -0.084845 +v -0.532838 -0.012500 -0.109845 +v -0.532838 -0.012500 -0.084845 +v -0.168750 -0.012500 -0.109845 +v -0.168750 -0.012500 -0.084845 +v -0.012500 -0.143750 -0.504991 +v -0.012500 -0.168750 -0.504991 +v -0.012500 -0.143750 -0.084845 +v -0.012500 -0.168750 -0.084845 +v 0.012500 -0.143750 -0.504991 +v 0.012500 -0.168750 -0.504991 +v 0.012500 -0.143750 -0.084845 +v 0.012500 -0.168750 -0.084845 +v -0.012500 -0.532838 -0.109845 +v -0.012500 -0.532838 -0.084845 +v -0.012500 -0.168750 -0.109845 +v -0.012500 -0.168750 -0.084845 +v 0.012500 -0.532838 -0.109845 +v 0.012500 -0.532838 -0.084845 +v 0.012500 -0.168750 -0.109845 +v 0.012500 -0.168750 -0.084845 +vt 0.843750 0.750000 +vt 0.812500 0.750000 +vt 0.812500 0.375000 +vt 0.843750 0.375000 +vt 0.843750 0.750000 +vt 0.812500 0.750000 +vt 0.812500 0.375000 +vt 0.843750 0.375000 +vt 0.843750 0.750000 +vt 0.812500 0.750000 +vt 0.812500 0.375000 +vt 0.843750 0.375000 +vt 0.843750 0.750000 +vt 0.812500 0.750000 +vt 0.812500 0.375000 +vt 0.843750 0.375000 +vt 0.875000 0.312500 +vt 0.875000 0.343750 +vt 0.843750 0.343750 +vt 0.843750 0.312500 +vt 0.875000 0.312500 +vt 0.875000 0.343750 +vt 0.843750 0.343750 +vt 0.843750 0.312500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.499289 0.775594 +vt 0.463094 0.811789 +vt 0.411906 0.811789 +vt 0.375711 0.775594 +vt 0.375711 0.724406 +vt 0.411906 0.688211 +vt 0.463094 0.688211 +vt 0.499289 0.724406 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.463094 0.811789 +vt 0.499289 0.775594 +vt 0.499289 0.724406 +vt 0.463094 0.688211 +vt 0.411906 0.688211 +vt 0.375711 0.724406 +vt 0.375711 0.775594 +vt 0.411906 0.811789 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.812500 0.687500 +vt 0.812500 0.437500 +vt 0.843750 0.437500 +vt 0.843750 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.375000 0.687500 +vt 0.375000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.500000 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.687500 +vt 0.500000 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.687500 +vt 0.500000 0.695312 +vt 0.375000 0.695312 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.500000 0.687500 +vt 0.500000 0.656250 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.843750 0.703125 +vt 0.843750 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.812500 0.703125 +vt 0.812500 0.718750 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.710938 +vt 0.843750 0.812500 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.710938 +vt 0.843750 0.812500 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.710938 +vt 0.843750 0.812500 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.710938 +vt 0.843750 0.812500 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.710938 +vt 0.843750 0.812500 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.710938 +vt 0.843750 0.812500 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.710938 +vt 0.843750 0.812500 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.843750 0.710938 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.812500 +vt 0.851562 0.710938 +vt 0.851562 0.812500 +vt 0.843750 0.710938 +vt 0.843750 0.812500 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 -0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.9239 0.3827 -0.0000 +vn -0.3827 0.9239 0.0000 +vn -0.9239 -0.3827 -0.0000 +vn -0.9239 0.3827 -0.0000 +vn -0.3827 -0.9239 -0.0000 +vn 0.9239 -0.3827 0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.2502 0.6040 -0.7567 +vn 0.0000 -0.6538 -0.7567 +vn 0.2502 0.6040 -0.7567 +vn -0.2502 -0.6040 -0.7567 +vn 0.4623 0.4623 -0.7567 +vn -0.4623 -0.4623 -0.7567 +vn 0.6040 0.2502 -0.7567 +vn -0.6040 -0.2502 -0.7567 +vn 0.6538 0.0000 -0.7567 +vn -0.6538 0.0000 -0.7567 +vn 0.6040 -0.2502 -0.7567 +vn -0.6040 0.2502 -0.7567 +vn 0.4623 -0.4623 -0.7567 +vn -0.4623 0.4623 -0.7567 +vn 0.2502 -0.6040 -0.7567 +vn 0.0000 0.6538 -0.7567 +vn -0.2502 -0.6040 0.7567 +vn 0.4623 0.4623 0.7567 +vn -0.4623 -0.4623 0.7567 +vn 0.6040 0.2502 0.7567 +vn -0.6040 -0.2502 0.7567 +vn 0.6538 0.0000 0.7567 +vn -0.6538 0.0000 0.7567 +vn 0.6040 -0.2502 0.7567 +vn -0.6040 0.2502 0.7567 +vn 0.4623 -0.4623 0.7567 +vn -0.4623 0.4623 0.7567 +vn 0.2502 -0.6040 0.7567 +vn 0.0000 0.6538 0.7567 +vn -0.2502 0.6040 0.7567 +vn 0.0000 -0.6538 0.7567 +vn 0.2502 0.6040 0.7567 +usemtl None +s off +f 2/1/1 1/2/1 4/3/1 5/4/1 +f 1/5/2 8/6/2 6/7/2 4/8/2 +f 3/9/3 2/10/3 5/11/3 7/12/3 +f 8/13/4 3/14/4 7/15/4 6/16/4 +f 6/17/5 7/18/5 5/19/5 4/20/5 +f 1/21/6 2/22/6 3/23/6 8/24/6 +f 9/25/7 10/26/7 12/27/7 11/28/7 +f 11/29/4 12/30/4 14/31/4 13/32/4 +f 13/33/8 14/34/8 16/35/8 15/36/8 +f 15/37/2 16/38/2 18/39/2 17/40/2 +f 17/41/9 18/42/9 20/43/9 19/44/9 +f 19/45/1 20/46/1 22/47/1 21/48/1 +f 12/49/5 10/50/5 24/51/5 22/52/5 20/53/5 18/54/5 16/55/5 14/56/5 +f 21/57/10 22/58/10 24/59/10 23/60/10 +f 23/61/3 24/62/3 10/63/3 9/64/3 +f 9/65/6 11/66/6 13/67/6 15/68/6 17/69/6 19/70/6 21/71/6 23/72/6 +f 27/73/6 28/74/6 32/75/6 31/76/6 +f 29/77/5 30/78/5 26/79/5 25/80/5 +f 27/81/4 31/82/4 29/83/4 25/84/4 +f 32/85/1 28/86/1 26/87/1 30/88/1 +f 35/89/6 36/90/6 40/91/6 39/92/6 +f 37/93/5 38/94/5 34/95/5 33/96/5 +f 35/97/3 39/98/3 37/99/3 33/100/3 +f 40/101/2 36/102/2 34/103/2 38/104/2 +f 43/105/6 44/106/6 48/107/6 47/108/6 +f 45/109/5 46/110/5 42/111/5 41/112/5 +f 43/113/8 47/114/8 45/115/8 41/116/8 +f 48/117/10 44/118/10 42/119/10 46/120/10 +f 51/121/6 52/122/6 56/123/6 55/124/6 +f 53/125/5 54/126/5 50/127/5 49/128/5 +f 51/129/7 55/130/7 53/131/7 49/132/7 +f 56/133/9 52/134/9 50/135/9 54/136/9 +f 60/137/2 71/138/2 67/139/2 61/140/2 +f 62/141/2 63/142/2 72/143/2 70/144/2 +f 71/145/6 60/146/6 64/147/6 65/148/6 +f 73/149/1 76/150/1 74/151/1 80/152/1 +f 69/153/3 66/154/3 65/155/3 64/147/3 +f 80/156/6 79/157/6 78/158/6 73/159/6 +f 75/160/4 78/161/4 79/162/4 77/163/4 +f 61/164/5 67/165/5 66/166/5 69/153/5 +f 57/167/6 68/168/6 63/169/6 62/170/6 +f 76/171/5 75/172/5 77/173/5 74/174/5 +f 59/175/3 58/176/3 68/177/3 57/167/3 +f 58/178/5 59/175/5 70/179/5 72/180/5 +f 84/181/11 95/182/11 91/183/11 85/184/11 +f 86/185/11 87/186/11 96/187/11 94/188/11 +f 95/189/6 84/190/6 88/191/6 89/192/6 +f 97/193/12 100/194/12 98/195/12 104/196/12 +f 93/197/13 90/198/13 89/199/13 88/191/13 +f 104/200/6 103/201/6 102/202/6 97/203/6 +f 99/204/14 102/205/14 103/206/14 101/207/14 +f 85/208/5 91/209/5 90/210/5 93/197/5 +f 81/211/6 92/212/6 87/213/6 86/214/6 +f 100/215/5 99/216/5 101/217/5 98/218/5 +f 83/219/13 82/220/13 92/221/13 81/211/13 +f 82/222/5 83/219/5 94/223/5 96/224/5 +f 108/225/13 119/226/13 115/227/13 109/228/13 +f 110/229/13 111/230/13 120/231/13 118/232/13 +f 119/233/6 108/234/6 112/235/6 113/236/6 +f 121/237/14 124/238/14 122/239/14 128/240/14 +f 117/241/11 114/242/11 113/243/11 112/235/11 +f 128/244/6 127/245/6 126/246/6 121/247/6 +f 123/248/12 126/249/12 127/250/12 125/251/12 +f 109/252/5 115/253/5 114/254/5 117/241/5 +f 105/255/6 116/256/6 111/257/6 110/258/6 +f 124/259/5 123/260/5 125/261/5 122/262/5 +f 107/263/11 106/264/11 116/265/11 105/255/11 +f 106/266/5 107/263/5 118/267/5 120/268/5 +f 132/269/12 143/270/12 139/271/12 133/272/12 +f 134/273/12 135/274/12 144/275/12 142/276/12 +f 143/277/6 132/278/6 136/279/6 137/280/6 +f 145/281/13 148/282/13 146/283/13 152/284/13 +f 141/285/14 138/286/14 137/287/14 136/279/14 +f 152/288/6 151/289/6 150/290/6 145/291/6 +f 147/292/11 150/293/11 151/294/11 149/295/11 +f 133/296/5 139/297/5 138/298/5 141/285/5 +f 129/299/6 140/300/6 135/301/6 134/302/6 +f 148/303/5 147/304/5 149/305/5 146/306/5 +f 131/307/14 130/308/14 140/309/14 129/299/14 +f 130/310/5 131/307/5 142/311/5 144/312/5 +f 156/313/14 167/314/14 163/315/14 157/316/14 +f 158/317/14 159/318/14 168/319/14 166/320/14 +f 167/321/6 156/322/6 160/323/6 161/324/6 +f 169/325/11 172/326/11 170/327/11 176/328/11 +f 165/329/12 162/330/12 161/331/12 160/323/12 +f 176/332/6 175/333/6 174/334/6 169/335/6 +f 171/336/13 174/337/13 175/338/13 173/339/13 +f 157/340/5 163/341/5 162/342/5 165/329/5 +f 153/343/6 164/344/6 159/345/6 158/346/6 +f 172/347/5 171/348/5 173/349/5 170/350/5 +f 155/351/12 154/352/12 164/353/12 153/343/12 +f 154/354/5 155/351/5 166/355/5 168/356/5 +f 180/357/15 191/358/15 187/359/15 181/360/15 +f 182/361/15 183/362/15 192/363/15 190/364/15 +f 191/365/6 180/366/6 184/367/6 185/368/6 +f 193/369/16 196/370/16 194/371/16 200/372/16 +f 189/373/17 186/374/17 185/375/17 184/367/17 +f 200/376/6 199/377/6 198/378/6 193/379/6 +f 195/380/18 198/381/18 199/382/18 197/383/18 +f 181/384/5 187/385/5 186/386/5 189/373/5 +f 177/387/6 188/388/6 183/389/6 182/390/6 +f 196/391/5 195/392/5 197/393/5 194/394/5 +f 179/395/17 178/396/17 188/397/17 177/387/17 +f 178/398/5 179/395/5 190/399/5 192/400/5 +f 204/401/17 215/402/17 211/403/17 205/404/17 +f 206/405/17 207/406/17 216/407/17 214/408/17 +f 215/409/6 204/410/6 208/411/6 209/412/6 +f 217/413/18 220/414/18 218/415/18 224/416/18 +f 213/417/15 210/418/15 209/419/15 208/411/15 +f 224/420/6 223/421/6 222/422/6 217/423/6 +f 219/424/16 222/425/16 223/426/16 221/427/16 +f 205/428/5 211/429/5 210/430/5 213/417/5 +f 201/431/6 212/432/6 207/433/6 206/434/6 +f 220/435/5 219/436/5 221/437/5 218/438/5 +f 203/439/15 202/440/15 212/441/15 201/431/15 +f 202/442/5 203/439/5 214/443/5 216/444/5 +f 228/445/18 239/446/18 235/447/18 229/448/18 +f 230/449/18 231/450/18 240/451/18 238/452/18 +f 239/453/6 228/454/6 232/455/6 233/456/6 +f 241/457/15 244/458/15 242/459/15 248/460/15 +f 237/461/16 234/462/16 233/463/16 232/455/16 +f 248/464/6 247/465/6 246/466/6 241/467/6 +f 243/468/17 246/469/17 247/470/17 245/471/17 +f 229/472/5 235/473/5 234/474/5 237/461/5 +f 225/475/6 236/476/6 231/477/6 230/478/6 +f 244/479/5 243/480/5 245/481/5 242/482/5 +f 227/483/16 226/484/16 236/485/16 225/475/16 +f 226/486/5 227/483/5 238/487/5 240/488/5 +f 252/489/16 263/490/16 259/491/16 253/492/16 +f 254/493/16 255/494/16 264/495/16 262/496/16 +f 263/497/6 252/498/6 256/499/6 257/500/6 +f 265/501/17 268/502/17 266/503/17 272/504/17 +f 261/505/18 258/506/18 257/507/18 256/499/18 +f 272/508/6 271/509/6 270/510/6 265/511/6 +f 267/512/15 270/513/15 271/514/15 269/515/15 +f 253/516/5 259/517/5 258/518/5 261/505/5 +f 249/519/6 260/520/6 255/521/6 254/522/6 +f 268/523/5 267/524/5 269/525/5 266/526/5 +f 251/527/18 250/528/18 260/529/18 249/519/18 +f 250/530/5 251/527/5 262/531/5 264/532/5 +f 276/533/8 287/534/8 283/535/8 277/536/8 +f 278/537/8 279/538/8 288/539/8 286/540/8 +f 287/541/6 276/542/6 280/543/6 281/544/6 +f 289/545/9 292/546/9 290/547/9 296/548/9 +f 285/549/10 282/550/10 281/551/10 280/543/10 +f 296/552/6 295/553/6 294/554/6 289/555/6 +f 291/556/7 294/557/7 295/558/7 293/559/7 +f 277/560/5 283/561/5 282/562/5 285/549/5 +f 273/563/6 284/564/6 279/565/6 278/566/6 +f 292/567/5 291/568/5 293/569/5 290/570/5 +f 275/571/10 274/572/10 284/573/10 273/563/10 +f 274/574/5 275/571/5 286/575/5 288/576/5 +f 300/577/10 311/578/10 307/579/10 301/580/10 +f 302/581/10 303/582/10 312/583/10 310/584/10 +f 311/585/6 300/586/6 304/587/6 305/588/6 +f 313/589/7 316/590/7 314/591/7 320/592/7 +f 309/593/8 306/594/8 305/595/8 304/587/8 +f 320/596/6 319/597/6 318/598/6 313/599/6 +f 315/600/9 318/601/9 319/602/9 317/603/9 +f 301/604/5 307/605/5 306/606/5 309/593/5 +f 297/607/6 308/608/6 303/609/6 302/610/6 +f 316/611/5 315/612/5 317/613/5 314/614/5 +f 299/615/8 298/616/8 308/617/8 297/607/8 +f 298/618/5 299/615/5 310/619/5 312/620/5 +f 324/621/9 335/622/9 331/623/9 325/624/9 +f 326/625/9 327/626/9 336/627/9 334/628/9 +f 335/629/6 324/630/6 328/631/6 329/632/6 +f 337/633/10 340/634/10 338/635/10 344/636/10 +f 333/637/7 330/638/7 329/639/7 328/631/7 +f 344/640/6 343/641/6 342/642/6 337/643/6 +f 339/644/8 342/645/8 343/646/8 341/647/8 +f 325/648/5 331/649/5 330/650/5 333/637/5 +f 321/651/6 332/652/6 327/653/6 326/654/6 +f 340/655/5 339/656/5 341/657/5 338/658/5 +f 323/659/7 322/660/7 332/661/7 321/651/7 +f 322/662/5 323/659/5 334/663/5 336/664/5 +f 348/665/7 359/666/7 355/667/7 349/668/7 +f 350/669/7 351/670/7 360/671/7 358/672/7 +f 359/673/6 348/674/6 352/675/6 353/676/6 +f 361/677/8 364/678/8 362/679/8 368/680/8 +f 357/681/9 354/682/9 353/683/9 352/675/9 +f 368/684/6 367/685/6 366/686/6 361/687/6 +f 363/688/10 366/689/10 367/690/10 365/691/10 +f 349/692/5 355/693/5 354/694/5 357/681/5 +f 345/695/6 356/696/6 351/697/6 350/698/6 +f 364/699/5 363/700/5 365/701/5 362/702/5 +f 347/703/9 346/704/9 356/705/9 345/695/9 +f 346/706/5 347/703/5 358/707/5 360/708/5 +f 372/709/4 383/710/4 379/711/4 373/712/4 +f 374/713/4 375/714/4 384/715/4 382/716/4 +f 383/717/6 372/718/6 376/719/6 377/720/6 +f 385/721/2 388/722/2 386/723/2 392/724/2 +f 381/725/1 378/726/1 377/727/1 376/719/1 +f 392/728/6 391/729/6 390/730/6 385/731/6 +f 387/732/3 390/733/3 391/734/3 389/735/3 +f 373/736/5 379/737/5 378/738/5 381/725/5 +f 369/739/6 380/740/6 375/741/6 374/742/6 +f 388/743/5 387/744/5 389/745/5 386/746/5 +f 371/747/1 370/748/1 380/749/1 369/739/1 +f 370/750/5 371/747/5 382/751/5 384/752/5 +f 396/753/1 407/754/1 403/755/1 397/756/1 +f 398/757/1 399/758/1 408/759/1 406/760/1 +f 407/761/6 396/762/6 400/763/6 401/764/6 +f 409/765/3 412/766/3 410/767/3 416/768/3 +f 405/769/4 402/770/4 401/771/4 400/763/4 +f 416/772/6 415/773/6 414/774/6 409/775/6 +f 411/776/2 414/777/2 415/778/2 413/779/2 +f 397/780/5 403/781/5 402/782/5 405/769/5 +f 393/783/6 404/784/6 399/785/6 398/786/6 +f 412/787/5 411/788/5 413/789/5 410/790/5 +f 395/791/4 394/792/4 404/793/4 393/783/4 +f 394/794/5 395/791/5 406/795/5 408/796/5 +f 420/797/3 431/798/3 427/799/3 421/800/3 +f 422/801/3 423/802/3 432/803/3 430/804/3 +f 431/805/6 420/806/6 424/807/6 425/808/6 +f 433/809/4 436/810/4 434/811/4 440/812/4 +f 429/813/2 426/814/2 425/815/2 424/807/2 +f 440/816/6 439/817/6 438/818/6 433/819/6 +f 435/820/1 438/821/1 439/822/1 437/823/1 +f 421/824/5 427/825/5 426/826/5 429/813/5 +f 417/827/6 428/828/6 423/829/6 422/830/6 +f 436/831/5 435/832/5 437/833/5 434/834/5 +f 419/835/2 418/836/2 428/837/2 417/827/2 +f 418/838/5 419/835/5 430/839/5 432/840/5 +f 450/841/16 451/842/16 467/843/16 466/844/16 +f 443/845/10 444/846/10 460/847/10 459/848/10 +f 451/849/8 452/850/8 468/851/8 467/852/8 +f 444/853/12 445/854/12 461/855/12 460/856/12 +f 452/857/14 453/858/14 469/859/14 468/860/14 +f 445/861/1 446/862/1 462/863/1 461/864/1 +f 453/865/4 454/866/4 470/867/4 469/868/4 +f 446/869/17 447/870/17 463/871/17 462/872/17 +f 454/873/15 455/874/15 471/875/15 470/876/15 +f 447/877/9 448/878/9 464/879/9 463/880/9 +f 455/881/7 456/882/7 472/883/7 471/884/7 +f 448/885/11 449/886/11 465/887/11 464/888/11 +f 441/889/3 442/890/3 458/891/3 457/892/3 +f 456/893/13 441/894/13 457/895/13 472/896/13 +f 449/897/2 450/898/2 466/899/2 465/900/2 +f 442/901/18 443/902/18 459/903/18 458/904/18 +f 472/905/19 457/906/19 473/907/19 488/908/19 +f 465/909/20 466/910/20 482/911/20 481/912/20 +f 458/913/21 459/914/21 475/915/21 474/916/21 +f 466/917/22 467/918/22 483/919/22 482/920/22 +f 459/921/23 460/922/23 476/923/23 475/924/23 +f 467/925/24 468/926/24 484/927/24 483/928/24 +f 460/929/25 461/930/25 477/931/25 476/932/25 +f 468/933/26 469/934/26 485/935/26 484/936/26 +f 461/937/27 462/938/27 478/939/27 477/940/27 +f 469/941/28 470/942/28 486/943/28 485/944/28 +f 462/945/29 463/946/29 479/947/29 478/948/29 +f 470/949/30 471/950/30 487/951/30 486/952/30 +f 463/953/31 464/954/31 480/955/31 479/956/31 +f 471/957/32 472/958/32 488/959/32 487/960/32 +f 464/961/33 465/962/33 481/963/33 480/964/33 +f 457/965/34 458/966/34 474/967/34 473/968/34 +f 451/969/35 450/970/35 498/971/35 499/972/35 +f 444/973/36 443/974/36 491/975/36 492/976/36 +f 452/977/37 451/978/37 499/979/37 500/980/37 +f 445/981/38 444/982/38 492/983/38 493/984/38 +f 453/985/39 452/986/39 500/987/39 501/988/39 +f 446/989/40 445/990/40 493/991/40 494/992/40 +f 454/993/41 453/994/41 501/995/41 502/996/41 +f 447/997/42 446/998/42 494/999/42 495/1000/42 +f 455/1001/43 454/1002/43 502/1003/43 503/1004/43 +f 448/1005/44 447/1006/44 495/1007/44 496/1008/44 +f 456/1009/45 455/1010/45 503/1011/45 504/1012/45 +f 449/1013/46 448/1014/46 496/1015/46 497/1016/46 +f 442/1017/47 441/1018/47 489/1019/47 490/1020/47 +f 441/1021/48 456/1022/48 504/1023/48 489/1024/48 +f 450/1025/49 449/1026/49 497/1027/49 498/1028/49 +f 443/1029/50 442/1030/50 490/1031/50 491/1032/50 +f 505/1033/1 506/1034/1 508/1035/1 507/1036/1 +f 507/1037/6 508/1038/6 512/1039/6 511/1040/6 +f 511/1041/4 512/1042/4 510/1043/4 509/1044/4 +f 509/1045/5 510/1046/5 506/1047/5 505/1048/5 +f 507/1037/2 511/1049/2 509/1050/2 505/1048/2 +f 512/1051/3 508/1038/3 506/1047/3 510/1052/3 +f 513/1053/1 514/1054/1 516/1055/1 515/1056/1 +f 515/1057/2 516/1058/2 520/1059/2 519/1060/2 +f 519/1061/4 520/1062/4 518/1063/4 517/1064/4 +f 517/1065/3 518/1066/3 514/1067/3 513/1068/3 +f 515/1057/5 519/1069/5 517/1070/5 513/1068/5 +f 520/1071/6 516/1058/6 514/1067/6 518/1072/6 +f 521/1073/2 522/1074/2 524/1075/2 523/1076/2 +f 523/1077/6 524/1078/6 528/1079/6 527/1080/6 +f 527/1081/3 528/1082/3 526/1083/3 525/1084/3 +f 525/1085/5 526/1086/5 522/1087/5 521/1088/5 +f 523/1077/4 527/1089/4 525/1090/4 521/1088/4 +f 528/1091/1 524/1078/1 522/1087/1 526/1092/1 +f 529/1093/2 530/1094/2 532/1095/2 531/1096/2 +f 531/1097/4 532/1098/4 536/1099/4 535/1100/4 +f 535/1101/3 536/1102/3 534/1103/3 533/1104/3 +f 533/1105/1 534/1106/1 530/1107/1 529/1108/1 +f 531/1097/5 535/1109/5 533/1110/5 529/1108/5 +f 536/1111/6 532/1098/6 530/1107/6 534/1112/6 +f 537/1113/3 538/1114/3 540/1115/3 539/1116/3 +f 539/1117/6 540/1118/6 544/1119/6 543/1120/6 +f 543/1121/2 544/1122/2 542/1123/2 541/1124/2 +f 541/1125/5 542/1126/5 538/1127/5 537/1128/5 +f 539/1117/1 543/1129/1 541/1130/1 537/1128/1 +f 544/1131/4 540/1118/4 538/1127/4 542/1132/4 +f 545/1133/3 546/1134/3 548/1135/3 547/1136/3 +f 547/1137/1 548/1138/1 552/1139/1 551/1140/1 +f 551/1141/2 552/1142/2 550/1143/2 549/1144/2 +f 549/1145/4 550/1146/4 546/1147/4 545/1148/4 +f 547/1137/5 551/1149/5 549/1150/5 545/1148/5 +f 552/1151/6 548/1138/6 546/1147/6 550/1152/6 +f 553/1153/4 554/1154/4 556/1155/4 555/1156/4 +f 555/1157/6 556/1158/6 560/1159/6 559/1160/6 +f 559/1161/1 560/1162/1 558/1163/1 557/1164/1 +f 557/1165/5 558/1166/5 554/1167/5 553/1168/5 +f 555/1157/3 559/1169/3 557/1170/3 553/1168/3 +f 560/1171/2 556/1158/2 554/1167/2 558/1172/2 +f 561/1173/4 562/1174/4 564/1175/4 563/1176/4 +f 563/1177/3 564/1178/3 568/1179/3 567/1180/3 +f 567/1181/1 568/1182/1 566/1183/1 565/1184/1 +f 565/1185/2 566/1186/2 562/1187/2 561/1188/2 +f 563/1177/5 567/1189/5 565/1190/5 561/1188/5 +f 568/1191/6 564/1178/6 562/1187/6 566/1192/6 diff --git a/src/main/resources/assets/overengineered/textures/multiblock/universal_motor.png b/src/main/resources/assets/overengineered/textures/multiblock/universal_motor.png new file mode 100644 index 0000000..6ae23b7 Binary files /dev/null and b/src/main/resources/assets/overengineered/textures/multiblock/universal_motor.png differ diff --git a/src/main/resources/data/overengineered/structures/multiblocks/universal_motor.nbt b/src/main/resources/data/overengineered/structures/multiblocks/universal_motor.nbt new file mode 100644 index 0000000..c4cc384 Binary files /dev/null and b/src/main/resources/data/overengineered/structures/multiblocks/universal_motor.nbt differ