From 0cc1e1faa7eaf9ccf174448ea79ee8dc79e072be Mon Sep 17 00:00:00 2001 From: Vasco Lavos Date: Tue, 21 Jan 2014 20:56:06 +0000 Subject: [PATCH] Getting started with the Petal Apothecary. --- .../client/core/proxy/ClientProxy.java | 23 ++++- .../botania/client/lib/LibRenderIDs.java | 18 ++++ .../botania/client/lib/LibResources.java | 6 +- .../botania/client/model/ModelAltar.java | 89 ++++++++++++++++++ .../client/render/block/RenderAltar.java | 50 ++++++++++ .../client/render/tile/RenderTileAltar.java | 44 +++++++++ .../botania/common/block/BlockAltar.java | 50 ++++++++++ .../common/block/BlockModContainer.java | 8 ++ .../botania/common/block/ModBlocks.java | 12 ++- .../botania/common/block/tile/TileAltar.java | 18 ++++ .../common/core/BotaniaCreativeTab.java | 2 + .../botania/common/lib/LibBlockIDs.java | 1 + .../botania/common/lib/LibBlockNames.java | 1 + resources/assets/botania/lang/en_US.lang | 1 + .../assets/botania/textures/model/altar.png | Bin 0 -> 2683 bytes 15 files changed, 319 insertions(+), 4 deletions(-) create mode 100644 MODSRC/vazkii/botania/client/lib/LibRenderIDs.java create mode 100644 MODSRC/vazkii/botania/client/model/ModelAltar.java create mode 100644 MODSRC/vazkii/botania/client/render/block/RenderAltar.java create mode 100644 MODSRC/vazkii/botania/client/render/tile/RenderTileAltar.java create mode 100644 MODSRC/vazkii/botania/common/block/BlockAltar.java create mode 100644 MODSRC/vazkii/botania/common/block/tile/TileAltar.java create mode 100644 resources/assets/botania/textures/model/altar.png diff --git a/MODSRC/vazkii/botania/client/core/proxy/ClientProxy.java b/MODSRC/vazkii/botania/client/core/proxy/ClientProxy.java index 3ade404f6..7e8dc9162 100644 --- a/MODSRC/vazkii/botania/client/core/proxy/ClientProxy.java +++ b/MODSRC/vazkii/botania/client/core/proxy/ClientProxy.java @@ -12,17 +12,38 @@ package vazkii.botania.client.core.proxy; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.world.World; import vazkii.botania.api.LexiconEntry; import vazkii.botania.client.fx.FXSparkle; import vazkii.botania.client.gui.GuiLexicon; import vazkii.botania.client.gui.GuiLexiconEntry; import vazkii.botania.client.gui.GuiLexiconIndex; +import vazkii.botania.client.lib.LibRenderIDs; +import vazkii.botania.client.render.block.RenderAltar; +import vazkii.botania.client.render.tile.RenderTileAltar; +import vazkii.botania.common.block.tile.TileAltar; import vazkii.botania.common.core.proxy.CommonProxy; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.event.FMLInitializationEvent; public class ClientProxy extends CommonProxy { + @Override + public void init(FMLInitializationEvent event) { + super.init(event); + + initRenderers(); + } + + private void initRenderers() { + LibRenderIDs.idAltar = RenderingRegistry.getNextAvailableRenderId(); + + RenderingRegistry.registerBlockHandler(new RenderAltar()); + + ClientRegistry.bindTileEntitySpecialRenderer(TileAltar.class, new RenderTileAltar()); + } + @Override public void setEntryToOpen(LexiconEntry entry) { GuiLexicon.currentOpenLexicon = new GuiLexiconEntry(entry, new GuiLexiconIndex(entry.category)); diff --git a/MODSRC/vazkii/botania/client/lib/LibRenderIDs.java b/MODSRC/vazkii/botania/client/lib/LibRenderIDs.java new file mode 100644 index 000000000..4c7ee8943 --- /dev/null +++ b/MODSRC/vazkii/botania/client/lib/LibRenderIDs.java @@ -0,0 +1,18 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Jan 21, 2014, 8:03:06 PM (GMT)] + */ +package vazkii.botania.client.lib; + +public final class LibRenderIDs { + + public static int idAltar = -1; + +} diff --git a/MODSRC/vazkii/botania/client/lib/LibResources.java b/MODSRC/vazkii/botania/client/lib/LibResources.java index 167af3ec4..17b878ac2 100644 --- a/MODSRC/vazkii/botania/client/lib/LibResources.java +++ b/MODSRC/vazkii/botania/client/lib/LibResources.java @@ -18,9 +18,9 @@ public final class LibResources { public static final String PREFIX_LANG = "/assets/botania/lang/"; public static final String PREFIX_GUI = PREFIX_MOD + "textures/gui/"; - public static final String PREFIX_ENTRIES = PREFIX_GUI + "entries/"; - public static final String PREFIX_MISC = PREFIX_MOD + "textures/misc/"; + public static final String PREFIX_ENTRIES = PREFIX_GUI + "entries/"; public static final String PREFIX_MODEL = PREFIX_MOD + "textures/model/"; + public static final String PREFIX_MISC = PREFIX_MOD + "textures/misc/"; public static final String EMTPY_TEXTURE = "emptyTexture"; @@ -29,6 +29,8 @@ public final class LibResources { public static final String ENTRY_FLOWERS = PREFIX_ENTRIES + "flowers.png"; + public static final String MODEL_ALTAR = PREFIX_MODEL + "altar.png"; + public static final String MISC_PARTICLES = PREFIX_MISC + "particles.png"; public static final String MISC_WISP_LARGE = PREFIX_MISC + "wispLarge.png"; public static final String MISC_WISP_SMALL = PREFIX_MISC + "wispSmall.png"; diff --git a/MODSRC/vazkii/botania/client/model/ModelAltar.java b/MODSRC/vazkii/botania/client/model/ModelAltar.java new file mode 100644 index 000000000..32afa59cb --- /dev/null +++ b/MODSRC/vazkii/botania/client/model/ModelAltar.java @@ -0,0 +1,89 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Jan 21, 2014, 7:56:15 PM (GMT)] + */ +package vazkii.botania.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelAltar extends ModelBase { + + ModelRenderer gobletBase; + ModelRenderer gobletBase2; + ModelRenderer gobletBase3; + ModelRenderer gobletStand; + ModelRenderer kelkBase; + ModelRenderer kelkBase2; + ModelRenderer kelkWall1; + ModelRenderer kelkWall2; + ModelRenderer kelkWall3; + ModelRenderer kelkWall4; + + public ModelAltar() { + textureWidth = 256; + textureHeight = 128; + + gobletBase = new ModelRenderer(this, 0, 0); + gobletBase.addBox(0F, 0F, 0F, 16, 2, 16); + gobletBase.setRotationPoint(-8F, 22F, -8F); + gobletBase.setTextureSize(256, 128); + gobletBase2 = new ModelRenderer(this, 0, 18); + gobletBase2.addBox(0F, 0F, 0F, 14, 1, 14); + gobletBase2.setRotationPoint(-7F, 21F, -7F); + gobletBase2.setTextureSize(256, 128); + gobletStand = new ModelRenderer(this, 68, 0); + gobletStand.addBox(0F, 0F, 0F, 6, 8, 6); + gobletStand.setRotationPoint(-3F, 12F, -3F); + gobletStand.setTextureSize(256, 128); + gobletBase3 = new ModelRenderer(this, 0, 33); + gobletBase3.addBox(0F, 0F, 0F, 12, 1, 12); + gobletBase3.setRotationPoint(-6F, 20F, -6F); + gobletBase3.setTextureSize(256, 128); + kelkBase = new ModelRenderer(this, 72, 45); + kelkBase.addBox(0F, 0F, 0F, 8, 1, 8); + kelkBase.setRotationPoint(-4F, 11F, -4F); + kelkBase.setTextureSize(256, 128); + kelkBase2 = new ModelRenderer(this, 72, 34); + kelkBase2.addBox(0F, 0F, 0F, 10, 1, 10); + kelkBase2.setRotationPoint(-5F, 10F, -5F); + kelkBase2.setTextureSize(256, 128); + kelkWall1 = new ModelRenderer(this, 72, 18); + kelkWall1.addBox(0F, 0F, 0F, 1, 6, 10); + kelkWall1.setRotationPoint(5F, 4F, -5F); + kelkWall1.setTextureSize(256, 128); + kelkWall2 = new ModelRenderer(this, 72, 18); + kelkWall2.addBox(0F, 0F, 0F, 1, 6, 10); + kelkWall2.setRotationPoint(-6F, 4F, -5F); + kelkWall2.setTextureSize(256, 128); + kelkWall3 = new ModelRenderer(this, 94, 18); + kelkWall3.addBox(0F, 0F, 0F, 10, 6, 1); + kelkWall3.setRotationPoint(-5F, 4F, 5F); + kelkWall3.setTextureSize(256, 128); + kelkWall4 = new ModelRenderer(this, 94, 18); + kelkWall4.addBox(0F, 0F, 0F, 10, 6, 1); + kelkWall4.setRotationPoint(-5F, 4F, -6F); + kelkWall4.setTextureSize(256, 128); + } + + public void render() { + float f = 1F / 16F; + gobletBase.render(f); + gobletBase2.render(f); + gobletBase3.render(f); + gobletStand.render(f); + kelkBase.render(f); + kelkBase2.render(f); + kelkWall1.render(f); + kelkWall2.render(f); + kelkWall3.render(f); + kelkWall4.render(f); + } +} diff --git a/MODSRC/vazkii/botania/client/render/block/RenderAltar.java b/MODSRC/vazkii/botania/client/render/block/RenderAltar.java new file mode 100644 index 000000000..4e0551659 --- /dev/null +++ b/MODSRC/vazkii/botania/client/render/block/RenderAltar.java @@ -0,0 +1,50 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Jan 21, 2014, 8:02:01 PM (GMT)] + */ +package vazkii.botania.client.render.block; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.client.lib.LibRenderIDs; +import vazkii.botania.common.block.tile.TileAltar; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class RenderAltar implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + GL11.glPushMatrix(); + GL11.glTranslatef(-0.5F, -0.6F, -0.5F); + GL11.glScalef(0.9F, 0.9F, 0.9F); + TileEntityRenderer.instance.renderTileEntityAt(new TileAltar(), 0.0D, 0.0D, 0.0D, 0.0F); + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + return false; + } + + @Override + public boolean shouldRender3DInInventory() { + return true; + } + + @Override + public int getRenderId() { + return LibRenderIDs.idAltar; + } +} diff --git a/MODSRC/vazkii/botania/client/render/tile/RenderTileAltar.java b/MODSRC/vazkii/botania/client/render/tile/RenderTileAltar.java new file mode 100644 index 000000000..af44e14c3 --- /dev/null +++ b/MODSRC/vazkii/botania/client/render/tile/RenderTileAltar.java @@ -0,0 +1,44 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Jan 21, 2014, 7:55:47 PM (GMT)] + */ +package vazkii.botania.client.render.tile; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import vazkii.botania.client.lib.LibResources; +import vazkii.botania.client.model.ModelAltar; + +public class RenderTileAltar extends TileEntitySpecialRenderer { + + private static final ResourceLocation texture = new ResourceLocation(LibResources.MODEL_ALTAR); + ModelAltar model = new ModelAltar(); + + @Override + public void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float f) { + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1F, 1F, 1F, 1F); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); + + GL11.glTranslated(d0 + 0.5, d1 + 1.5, d2 + 0.5); + GL11.glScalef(1F, -1F, -1F); + model.render(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + +} diff --git a/MODSRC/vazkii/botania/common/block/BlockAltar.java b/MODSRC/vazkii/botania/common/block/BlockAltar.java new file mode 100644 index 000000000..c239a17fd --- /dev/null +++ b/MODSRC/vazkii/botania/common/block/BlockAltar.java @@ -0,0 +1,50 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Jan 21, 2014, 7:48:54 PM (GMT)] + */ +package vazkii.botania.common.block; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import vazkii.botania.client.lib.LibRenderIDs; +import vazkii.botania.common.block.tile.TileAltar; +import vazkii.botania.common.lib.LibBlockIDs; +import vazkii.botania.common.lib.LibBlockNames; + +public class BlockAltar extends BlockModContainer { + + protected BlockAltar() { + super(LibBlockIDs.idAltar, Material.rock); + setHardness(3.5F); + setStepSound(soundStoneFootstep); + setUnlocalizedName(LibBlockNames.ALTAR); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return LibRenderIDs.idAltar; + } + + @Override + public TileEntity createNewTileEntity(World world) { + return new TileAltar(); + } + +} diff --git a/MODSRC/vazkii/botania/common/block/BlockModContainer.java b/MODSRC/vazkii/botania/common/block/BlockModContainer.java index 0dd4008b3..ee63142a4 100644 --- a/MODSRC/vazkii/botania/common/block/BlockModContainer.java +++ b/MODSRC/vazkii/botania/common/block/BlockModContainer.java @@ -11,6 +11,7 @@ */ package vazkii.botania.common.block; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; @@ -18,6 +19,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import vazkii.botania.client.core.helper.IconHelper; import vazkii.botania.common.core.BotaniaCreativeTab; +import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -29,6 +31,12 @@ public abstract class BlockModContainer extends BlockConta setCreativeTab(BotaniaCreativeTab.INSTANCE); } + @Override + public Block setUnlocalizedName(String par1Str) { + GameRegistry.registerBlock(this, par1Str); + return super.setUnlocalizedName(par1Str); + } + @Override @SideOnly(Side.CLIENT) public void registerIcons(IconRegister par1IconRegister) { diff --git a/MODSRC/vazkii/botania/common/block/ModBlocks.java b/MODSRC/vazkii/botania/common/block/ModBlocks.java index 272cb24e9..6da5ff8dc 100644 --- a/MODSRC/vazkii/botania/common/block/ModBlocks.java +++ b/MODSRC/vazkii/botania/common/block/ModBlocks.java @@ -11,20 +11,30 @@ */ package vazkii.botania.common.block; -import vazkii.botania.common.lib.LibOreDict; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; +import vazkii.botania.common.block.tile.TileAltar; +import vazkii.botania.common.lib.LibBlockNames; +import vazkii.botania.common.lib.LibOreDict; +import cpw.mods.fml.common.registry.GameRegistry; public final class ModBlocks { public static Block flower; + public static Block altar; public static void init() { flower = new BlockModFlower(); + altar = new BlockAltar(); for(int i = 0; i < 16; i++) OreDictionary.registerOre(LibOreDict.FLOWER[i], new ItemStack(flower.blockID, 1, i)); + + initTileEntities(); } + private static void initTileEntities() { + GameRegistry.registerTileEntity(TileAltar.class, LibBlockNames.ALTAR); + } } diff --git a/MODSRC/vazkii/botania/common/block/tile/TileAltar.java b/MODSRC/vazkii/botania/common/block/tile/TileAltar.java new file mode 100644 index 000000000..a14bb838a --- /dev/null +++ b/MODSRC/vazkii/botania/common/block/tile/TileAltar.java @@ -0,0 +1,18 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Jan 21, 2014, 7:51:36 PM (GMT)] + */ +package vazkii.botania.common.block.tile; + +import net.minecraft.tileentity.TileEntity; + +public class TileAltar extends TileEntity { + +} diff --git a/MODSRC/vazkii/botania/common/core/BotaniaCreativeTab.java b/MODSRC/vazkii/botania/common/core/BotaniaCreativeTab.java index 46fb7ce68..d51d4c769 100644 --- a/MODSRC/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/MODSRC/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -46,6 +46,8 @@ public final class BotaniaCreativeTab extends CreativeTabs { addItem(ModItems.pestleAndMortar); addItem(ModItems.dye); addItem(ModItems.twigWand); + + addBlock(ModBlocks.altar); } private void addItem(Item item) { diff --git a/MODSRC/vazkii/botania/common/lib/LibBlockIDs.java b/MODSRC/vazkii/botania/common/lib/LibBlockIDs.java index a302ee351..3a83cb2f2 100644 --- a/MODSRC/vazkii/botania/common/lib/LibBlockIDs.java +++ b/MODSRC/vazkii/botania/common/lib/LibBlockIDs.java @@ -14,5 +14,6 @@ package vazkii.botania.common.lib; public final class LibBlockIDs { public static int idFlower = 1955; + public static int idAltar = 1956; } diff --git a/MODSRC/vazkii/botania/common/lib/LibBlockNames.java b/MODSRC/vazkii/botania/common/lib/LibBlockNames.java index bf04bcd1d..9113b7017 100644 --- a/MODSRC/vazkii/botania/common/lib/LibBlockNames.java +++ b/MODSRC/vazkii/botania/common/lib/LibBlockNames.java @@ -16,5 +16,6 @@ import vazkii.botania.client.lib.LibResources; public final class LibBlockNames { public static final String FLOWER = LibResources.PREFIX_MOD + "flower"; + public static final String ALTAR = LibResources.PREFIX_MOD + "altar"; } diff --git a/resources/assets/botania/lang/en_US.lang b/resources/assets/botania/lang/en_US.lang index 500299f75..e227f05e3 100644 --- a/resources/assets/botania/lang/en_US.lang +++ b/resources/assets/botania/lang/en_US.lang @@ -24,6 +24,7 @@ tile.botania:flower12.name=Mystical Brown Flower tile.botania:flower13.name=Mystical Green Flower tile.botania:flower14.name=Mystical Red Flower tile.botania:flower15.name=Mystical Black Flower +tile.botania:altar.name=Petal Apothecary # ITEM NAMES item.botania:lexicon.name=Lexica Botania diff --git a/resources/assets/botania/textures/model/altar.png b/resources/assets/botania/textures/model/altar.png new file mode 100644 index 0000000000000000000000000000000000000000..b60811ff849a7cf7c49a0cbdf6446a87151c756a GIT binary patch literal 2683 zcmeHIXH-+!7QUf~pdy1HKE*Pkl%XgHQUn4>S3(tn2_>ZGrrmTPkbo2;9i%e^WYmRX z5DSWqjLtKnf(=xPVsvmUC?Erh2$*-#_hWv(fA7b8d#!uV-sk)FK6`&>-F0PQsDKrE zYxMvCSP>NH8vy_a*af6ZHQ{$37~ldgT4e7KZvbd3S~ic<1^`VUY;Tkwyzk)Puyf~5 zXJ=K$+#U~~v;&8a6 z#3b18cszkXAQFiL5`jb_k;!Btoe3L4nhnXA9g7W4v)#>GWa4Pi_E97Qdl5FV?#_fhsA}MJOPED%1nhgG%lOP<+21K znwSH!*=z`cI2;a_%Vl$gYylVI^B|#+2M0XZH2-;(rF1)#x=ZEG+vPe83jza{( za8xGG4&@iMNwCAt$zTQ!y__3P7)F-}1%Cb_UqYclC2hNw}oHh!~ zywho9a~jP!J=jRc=~$D512WTq0c!Y=W9_J&nqGWlgh1L7lXGw7$ldu3ub%Ci`Eu=b z+1B;3nyJfeyA*5B3cBr=AE&lr=ml*COYmmSCn1S4dZU5CRr=bzx6OwJu}-7lpE-9P zuUYnEa%)Am{+xCD7pW9@7k%Y$T}vw_Ix@kr#Rh}7$$HTj`a-bhNbCb-mgCX^*z&_x3RMGpkS8`$LWuG5*|Z#ten- z(nQR$`de?RlgwNzs<48AwRodLH8BropC8)U52s4rp_&G68~eAhhjXn9d>|EB@ zkW0S@ZW(gjVt17G(`9Q;Rt@yN;zZsuuI;)1 zQo~=WIWti$DO)U^?Q&hlMV2()(#{8T;Ca->iv^t&`jeJx5cbYdVQv#?jxW5Ps@OpN0v~S&>xmUS84?4}~Rexpe)(zu*QtPUm zk%U4)WmeqE`+pb&16`9n^08$3>guN9tu=F}Mka&(%oI8lXz5ldV@$oO9=cK#^ok-3 zYF=G*@`N=4^6<*rZHX9q)%DTS*dgHZp5TucPgv4^^~ZiICvBgFu7v*F^I*I*d1h{< z{v|zwe$8_(S%y-_Z>QF=mU(?=0=@Iau0wHWFrOqEeP6~$9|~swP!*VVsSSHI3>KRn zH{{+%>W*Hbnz#4wJzGC&f(V@24R<1IX0$3t_#rAsYpXtbRdYwk-|GJo(R?J?q2mg3 z18H#tfSP{ObPW9KacJoLS7lz&@a)Ylr1vBK;`ss=AK!!G^$&I_=n+rk$5m5&5)FpUM2k~l0ifX>}B zq5UDjBxdM`Cr^7*5%c}Z@^6HAK+T7au5Y_zdj+YxVGt%WzLO0;I(&Z8-Rdb;#}#$X z+<&)hWhYzJitJ3gHzpKMbu~|TE