From 860d0c61a3d945d73243313c2b06be7baf0b1441 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 6 May 2022 13:42:02 +0200 Subject: [PATCH] the ferocious muncher --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../EntityMinecartContainerBase.java | 2 +- .../{item => cart}/EntityMinecartCrate.java | 7 +- .../entity/cart/EntityMinecartDestroyer.java | 48 +++++++++++ src/main/java/com/hbm/handler/GUIHandler.java | 18 ++-- .../java/com/hbm/inventory/SlotPattern.java | 22 +++++ .../container/ContainerCartDestroyer.java | 79 ++++++++++++++++++ .../hbm/inventory/gui/GUICartDestroyer.java | 50 +++++++++++ src/main/java/com/hbm/items/ModItems.java | 1 + .../com/hbm/items/tool/ItemModMinecart.java | 6 +- src/main/java/com/hbm/main/ClientProxy.java | 2 + .../java/com/hbm/main/CraftingManager.java | 3 +- src/main/java/com/hbm/main/MainRegistry.java | 6 +- .../hbm/textures/gui/cart/gui_destroyer.png | Bin 0 -> 2223 bytes .../hbm/textures/items/cart.destroyer.png | Bin 0 -> 494 bytes 15 files changed, 223 insertions(+), 23 deletions(-) rename src/main/java/com/hbm/entity/{item => cart}/EntityMinecartContainerBase.java (99%) rename src/main/java/com/hbm/entity/{item => cart}/EntityMinecartCrate.java (92%) create mode 100644 src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java create mode 100644 src/main/java/com/hbm/inventory/SlotPattern.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUICartDestroyer.java create mode 100644 src/main/resources/assets/hbm/textures/gui/cart/gui_destroyer.png create mode 100644 src/main/resources/assets/hbm/textures/items/cart.destroyer.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 58bb93a40..ea6a2722f 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -633,7 +633,7 @@ public class ModBlocks { public static Block machine_difurnace_rtg_off; public static Block machine_difurnace_rtg_on; public static final int guiID_test_difurnace = 1; - public static final int guiID_rtg_difurnace = 2001; + public static final int guiID_rtg_difurnace = 125; public static Block machine_centrifuge; public static final int guiID_centrifuge = 5; diff --git a/src/main/java/com/hbm/entity/item/EntityMinecartContainerBase.java b/src/main/java/com/hbm/entity/cart/EntityMinecartContainerBase.java similarity index 99% rename from src/main/java/com/hbm/entity/item/EntityMinecartContainerBase.java rename to src/main/java/com/hbm/entity/cart/EntityMinecartContainerBase.java index cb50e9d93..226d28bf3 100644 --- a/src/main/java/com/hbm/entity/item/EntityMinecartContainerBase.java +++ b/src/main/java/com/hbm/entity/cart/EntityMinecartContainerBase.java @@ -1,4 +1,4 @@ -package com.hbm.entity.item; +package com.hbm.entity.cart; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/entity/item/EntityMinecartCrate.java b/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java similarity index 92% rename from src/main/java/com/hbm/entity/item/EntityMinecartCrate.java rename to src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java index b70c26e0a..cdd3e2aa4 100644 --- a/src/main/java/com/hbm/entity/item/EntityMinecartCrate.java +++ b/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java @@ -1,4 +1,4 @@ -package com.hbm.entity.item; +package com.hbm.entity.cart; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; @@ -39,9 +39,4 @@ public class EntityMinecartCrate extends EntityMinecartContainerBase { public int getSizeInventory() { return 9 * 6; } - - @Override - public int getMinecartType() { - return -1; - } } diff --git a/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java b/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java new file mode 100644 index 000000000..150412292 --- /dev/null +++ b/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java @@ -0,0 +1,48 @@ +package com.hbm.entity.cart; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class EntityMinecartDestroyer extends EntityMinecartContainerBase { + + public EntityMinecartDestroyer(World p_i1712_1_) { + super(p_i1712_1_); + } + + public EntityMinecartDestroyer(World world, double x, double y, double z) { + super(world, x, y, z); + } + + @Override + public boolean interactFirst(EntityPlayer player) { + if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, player))) + return true; + if(!this.worldObj.isRemote) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, ModItems.guiID_cart_destroyer, worldObj, this.getEntityId(), 0, 0); + } + + return true; + } + + @Override + public Block func_145817_o() { + return ModBlocks.machine_shredder; + } + + @Override + public int getSizeInventory() { + return 18; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + return false; + } +} diff --git a/src/main/java/com/hbm/handler/GUIHandler.java b/src/main/java/com/hbm/handler/GUIHandler.java index a598a69e0..37f742247 100644 --- a/src/main/java/com/hbm/handler/GUIHandler.java +++ b/src/main/java/com/hbm/handler/GUIHandler.java @@ -3,7 +3,8 @@ package com.hbm.handler; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; import com.hbm.blocks.machine.NTMAnvil; -import com.hbm.entity.item.EntityMinecartCrate; +import com.hbm.entity.cart.EntityMinecartCrate; +import com.hbm.entity.cart.EntityMinecartDestroyer; import com.hbm.interfaces.Spaghetti; import com.hbm.inventory.container.*; import com.hbm.inventory.gui.*; @@ -859,12 +860,10 @@ public class GUIHandler implements IGuiHandler { // NON-TE CONTAINERS switch(ID) { - case ModItems.guiID_item_box: - return new ContainerLeadBox(player, player.inventory, new InventoryLeadBox(player.getHeldItem())); - case ModItems.guiID_item_book: - return new ContainerBook(player.inventory); - case ModItems.guiID_cart_crate: - return new ContainerCrateSteel(player.inventory, (EntityMinecartCrate)player.worldObj.getEntityByID(x)); + case ModItems.guiID_item_box: return new ContainerLeadBox(player, player.inventory, new InventoryLeadBox(player.getHeldItem())); + case ModItems.guiID_item_book: return new ContainerBook(player.inventory); + case ModItems.guiID_cart_crate: return new ContainerCrateSteel(player.inventory, (EntityMinecartCrate)player.worldObj.getEntityByID(x)); + case ModItems.guiID_cart_destroyer: return new ContainerCartDestroyer(player.inventory, (EntityMinecartDestroyer)player.worldObj.getEntityByID(x)); } return null; @@ -1728,8 +1727,9 @@ public class GUIHandler implements IGuiHandler { return new GUIScreenHolotape(); case ModItems.guiID_item_fluid: return new GUIScreenFluid(player); - case ModItems.guiID_cart_crate: - return new GUICrateSteel(player.inventory, (EntityMinecartCrate) player.worldObj.getEntityByID(x)); + + case ModItems.guiID_cart_crate: return new GUICrateSteel(player.inventory, (EntityMinecartCrate) player.worldObj.getEntityByID(x)); + case ModItems.guiID_cart_destroyer: return new GUICartDestroyer(player.inventory, (EntityMinecartDestroyer) player.worldObj.getEntityByID(x)); } return null; } diff --git a/src/main/java/com/hbm/inventory/SlotPattern.java b/src/main/java/com/hbm/inventory/SlotPattern.java new file mode 100644 index 000000000..637930fea --- /dev/null +++ b/src/main/java/com/hbm/inventory/SlotPattern.java @@ -0,0 +1,22 @@ +package com.hbm.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; + +public class SlotPattern extends Slot { + + public SlotPattern(IInventory inv, int index, int x, int y) { + super(inv, index, x, y); + } + + @Override + public boolean canTakeStack(EntityPlayer player) { + return false; + } + + @Override + public int getSlotStackLimit() { + return 1; + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java b/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java new file mode 100644 index 000000000..356a97d92 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java @@ -0,0 +1,79 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotPattern; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerCartDestroyer extends Container { + + private IInventory diFurnace; + + public ContainerCartDestroyer(InventoryPlayer invPlayer, IInventory tedf) { + diFurnace = tedf; + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 3; j++) { + this.addSlotToContainer(new SlotPattern(tedf, j + i * 3, 10 + j * 18, 17 + i * 18)); + this.addSlotToContainer(new SlotPattern(tedf, j + i * 3 + 9, 114 + j * 18, 17 + i * 18)); + } + } + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot) { + return null; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return diFurnace.isUseableByPlayer(player); + } + + @Override + public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { + + //L/R: 0 + //M3: 3 + //SHIFT: 1 + //DRAG: 5 + //System.out.println("Mode " + mode); + //System.out.println("Slot " + index); + + if(index < 0 || index >= diFurnace.getSizeInventory()) { + return super.slotClick(index, button, mode, player); + } + + Slot slot = this.getSlot(index); + + ItemStack ret = null; + ItemStack held = player.inventory.getItemStack(); + + if(slot.getHasStack()) + ret = slot.getStack().copy(); + + slot.putStack(held != null ? held.copy() : null); + + if(slot.getHasStack()) { + slot.getStack().stackSize = 1; + } + + slot.onSlotChanged(); + + return ret; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUICartDestroyer.java b/src/main/java/com/hbm/inventory/gui/GUICartDestroyer.java new file mode 100644 index 000000000..69782888a --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUICartDestroyer.java @@ -0,0 +1,50 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerCartDestroyer; +import com.hbm.lib.RefStrings; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; + +public class GUICartDestroyer extends GuiContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/cart/gui_destroyer.png"); + private IInventory cart; + + public GUICartDestroyer(InventoryPlayer invPlayer, IInventory inv) { + super(new ContainerCartDestroyer(invPlayer, inv)); + cart = inv; + + this.xSize = 176; + this.ySize = 166; + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.cart.hasCustomInventoryName() ? this.cart.getInventoryName() : I18n.format(this.cart.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int time = (int) (System.currentTimeMillis() % 1000); + int index = time / 128; + + if(index == 1 || index == 7) drawTexturedModalRect(guiLeft + 66, guiTop + 35, 0, 166, 44, 16); + if(index == 2 || index == 6) drawTexturedModalRect(guiLeft + 66, guiTop + 35, 0, 182, 44, 16); + if(index == 3 || index == 5) drawTexturedModalRect(guiLeft + 66, guiTop + 35, 0, 198, 44, 16); + if(index == 4) drawTexturedModalRect(guiLeft + 66, guiTop + 35, 0, 214, 44, 16); + } +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index daad5739e..2f03660e5 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2555,6 +2555,7 @@ public class ModItems { public static final int guiID_item_holo_image = 10108; public static final int guiID_cart_crate = 2000; + public static final int guiID_cart_destroyer = 2001; public static Item mysteryshovel; public static Item memory; diff --git a/src/main/java/com/hbm/items/tool/ItemModMinecart.java b/src/main/java/com/hbm/items/tool/ItemModMinecart.java index a670d1c2f..ca467843c 100644 --- a/src/main/java/com/hbm/items/tool/ItemModMinecart.java +++ b/src/main/java/com/hbm/items/tool/ItemModMinecart.java @@ -1,6 +1,6 @@ package com.hbm.items.tool; -import com.hbm.entity.item.EntityMinecartCrate; +import com.hbm.entity.cart.*; import com.hbm.items.ItemEnumMulti; import net.minecraft.block.Block; @@ -21,7 +21,8 @@ import net.minecraft.world.World; public class ItemModMinecart extends ItemEnumMulti { public static enum EnumMinecart { - CRATE + CRATE, + DESTROYER } public ItemModMinecart() { @@ -95,6 +96,7 @@ public class ItemModMinecart extends ItemEnumMulti { public static EntityMinecart createMinecart(World world, double x, double y, double z, EnumMinecart type) { switch(type) { case CRATE: return new EntityMinecartCrate(world, x, y, z); + case DESTROYER: return new EntityMinecartDestroyer(world, x, y, z); default: return new EntityMinecartEmpty(world, x, y, z); } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index e065d1db5..3988acbf4 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -41,6 +41,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; +import com.hbm.entity.cart.*; import com.hbm.entity.effect.*; import com.hbm.entity.grenade.*; import com.hbm.entity.item.*; @@ -624,6 +625,7 @@ public class ClientProxy extends ServerProxy { //minecarts RenderingRegistry.registerEntityRenderingHandler(EntityMinecartTest.class, new RenderMinecartTest()); RenderingRegistry.registerEntityRenderingHandler(EntityMinecartCrate.class, new RenderMinecart()); + RenderingRegistry.registerEntityRenderingHandler(EntityMinecartDestroyer.class, new RenderMinecart()); //items RenderingRegistry.registerEntityRenderingHandler(EntityMovingItem.class, new RenderMovingItem()); RenderingRegistry.registerEntityRenderingHandler(EntityTNTPrimedBase.class, new RenderTNTPrimedBase()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 715faea01..caffbb06e 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -883,7 +883,8 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.HADRON.ordinal()), new Object[] { Items.book, ModItems.fuse }); addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.STARTER.ordinal()), new Object[] { Items.book, Items.iron_ingot }); - addRecipeAuto(new ItemStack(ModBlocks.charger), new Object[] { "IGI", "ICI", "PDP", 'I', STEEL.ingot(), 'G', Items.glowstone_dust, 'C', ModBlocks.red_wire_coated, 'P', IRON.plate(), 'D', ModItems.coil_copper }); + addRecipeAuto(new ItemStack(ModBlocks.charger), new Object[] { "G", "S", "C", 'G', Items.glowstone_dust, 'S', STEEL.ingot(), 'C', ModItems.coil_copper }); + addRecipeAuto(new ItemStack(ModBlocks.charger, 16), new Object[] { "G", "S", "C", 'G', Blocks.glowstone, 'S', STEEL.block(), 'C', ModItems.coil_copper_torus }); addRecipeAuto(new ItemStack(ModBlocks.press_preheater), new Object[] { "CCC", "SLS", "TST", 'C', ModItems.board_copper, 'S', Blocks.stone, 'L', Fluids.LAVA.getDict(1000), 'T', W.ingot() }); addShapelessAuto(new ItemStack(ModItems.holotape_image, 1, EnumHoloImage.HOLO_RESTORED.ordinal()), new Object[] { new ItemStack(ModItems.holotape_image, 1, EnumHoloImage.HOLO_DIGAMMA.ordinal()), KEY_TOOL_SCREWDRIVER, ModItems.ducttape, ModItems.armor_polish }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 046ee640e..b9629e6e6 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -14,7 +14,6 @@ import net.minecraft.stats.Achievement; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.common.AchievementPage; import net.minecraftforge.common.ChestGenHooks; import net.minecraftforge.common.ForgeChunkManager; @@ -41,9 +40,9 @@ import org.apache.logging.log4j.Logger; import com.google.common.collect.ImmutableList; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockMotherOfAllOres; -import com.hbm.blocks.generic.BlockNTMFlower.EnumFlowerType; import com.hbm.config.*; import com.hbm.creativetabs.*; +import com.hbm.entity.cart.*; import com.hbm.entity.effect.*; import com.hbm.entity.grenade.*; import com.hbm.entity.item.*; @@ -491,7 +490,8 @@ public class MainRegistry { EntityRegistry.registerModEntity(EntityTNTPrimedBase.class, "entity_ntm_tnt_primed", 166, this, 1000, 1, true); EntityRegistry.registerModEntity(EntityGrenadeBouncyGeneric.class, "entity_grenade_bouncy_generic", 168, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeImpactGeneric.class, "entity_grenade_impact_generic", 169, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityMinecartCrate.class, "entity_ntm_cart_crate", 170, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityMinecartCrate.class, "entity_ntm_cart_crate", 170, this, 250, 1, false); + EntityRegistry.registerModEntity(EntityMinecartDestroyer.class, "entity_ntm_cart_crate", 171, this, 250, 1, false); EntityRegistry.registerGlobalEntityID(EntityNuclearCreeper.class, "entity_mob_nuclear_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x204131, 0x75CE00); EntityRegistry.registerGlobalEntityID(EntityTaintedCreeper.class, "entity_mob_tainted_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x813b9b, 0xd71fdd); diff --git a/src/main/resources/assets/hbm/textures/gui/cart/gui_destroyer.png b/src/main/resources/assets/hbm/textures/gui/cart/gui_destroyer.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ca9d54d476baa1b5ee7e52d5b788db3085dcc0 GIT binary patch literal 2223 zcmb7GX;hO}8omi32?zwC5|JewTb5J=20bUfr22iMn#cDz!FedKSnK8tDyxE zMIah67RplDG;Cq$fQ(?MEE17`2L=dXvp@oYkohQ1d(K#Y%suCxyS?9Y@AKUEeeZYG zlj^FfyiFMZpnCAYJ}&?ea2ElvXt)Xd`tfPFLB%;AJc5NwGB)&E0I;VI?sGbF;okIM zQ*?l<7H0VV_X#>lh$d+B)>sj@V(VGFX@%49_Ag(}Zu$xFERdFjj}R-?SZWYmt^u@{ zwxtX9+z##)jukQL;lW!cs;_jI?tRZQ3^SVzESObLx%$~f`u)()V0n(KK_7I@ZkN~L()N=vECHss2S-7^sJ{#m3 zw%;+iuu&=s;WU1C<86xMiOBuTpm3>e;XPhHCACcGdj$>R)u5JsD>`~q}?$gUJ;&-kE3wS5x?~R2EQ}x9pd^w6T z5QTK6-3SA9lL8sWCnh0vrSr9r5F#rTy`Z^X!9m%Rf{A)T+GbF-7bM3ni?9xX5SJR=?8w2!Qgh2?dCZGP6D=LT;dC6|ToG;xBZ%mJ!VPj8 z3`?tgGdXol*5DcrQ?@&rA+}bAUXRRAnb~Ji$=1F6E$pyye$WM@{N#w@IJ*+$;R)d8)WS`Aewt>l&en8mnBksZe|U9O`Ydz?YlFT-ryJq165^TRjyv#fO0 zx?}g;3vjpaRM-V+9Y!y6L@E7RyC6lkD5O~cI{QuNWnCmK{Vk$40>_0Op>x2_zscA* z6y^G5P^}4e{^n&+U5Tln{Fs$kLd8b=6Wr9nrac%63O0O#p-guGtynb(+X4JfC}hHV z{Qfl^B{ewDG)qdos_y5@s-coe$iw;|1it;d_v;612rExM4!7 z!L)`|PLYhs-VRg}*iGbRo7pv=+M|OQ!(2qwM0<-Ju}Fki9etNS*;ClzzaP`C^)4<}n-16pScFE8+cD-f z@jHJK(pOKCN|$_;Cv6T8gWyt>?X`{3HW;jG6-%eXaV=b0+EXNwXYex*Q~oE0KMHU6 zp-poO!tSY<*x1-iDwW#vRoDor<();H+I(rU&2V$GQ=iQqd;3Gi#>SJ6E6?f8eihCz z{B(}^2!A7e^uJ047z{=@H)pYu_n4&??=Nk0ibr{|zadrXrLUgr`kD?8q$Coux=sK8 zMu$b5JQ9*2p1?k&F2>VQ5wK^&6RxgIalZn@{luBpQ`%oGb#Fe9KPl=eDAG%3?k6E{ zomBcG7rNUZ;uU?@4;_?FbUjLoFD^eB$8pHn$d7*o_91nCw8TM{c&F&SVePPJVC{&t z{R5%F^3Ixft1GdnnP%~nWM?2U~`P7 zI%ganoyGxVoEkvR2g6Zl3$RhbA;sLVtaP%hx_#c5popTgpQ~^a^`%5RpprUKzI`0j zXd_=DD7G#+;4r3Uk=%1?It~f&$A#PL!41QjCTUib zHhobwd67aMhaaURSm!vnN{|#93`V=Lg2+Czbl)8G7)GKigv@GPh!mx}&NZaZ7BX|@ z+5!{fNF`6Hxst*_?~*R%rATgDZK}<5(2*#ZILK_ej<4(vM&_>VmGfagxd+$X0+gx4 z(pls`#I_ia{@>Yp{083uK90GM0G;CX;sK}fR~2TD0la5)sUE!N)Xf_&5%dj~Iy(_= zGI5O{Bf8WcwS17bMr=eIxHM#B5XD$0 o_ejcz^^V-->e6@lUOv9(_dM?lpTQ&5 zZXi*=)y2qqlX)2lt2K-3+hqX0A2c%|xwNp|K&my1r4@(k+hx}4O@=>zv(-%|%5**a zW=YR=q~|&Uh;7>fB>FTYkzmmGVn={htA%ab02H3)=(!Hnnw3bB15jGWGq)Sr!nyo0 zYcHA%`X1vN1E5$k#rH?}`#wiMECzj#r4c{p>_E3HLoEuD8CBuX$9&2lrm;{C@@=*kBEz6Ujn&bAjjcK6`* zdL5-^2!c_(w-_*6n4f^W+6#qmHZ}=@Q7l$!W)g5SyqbWFJEqSB;Oz9o09RJm>M_JD zmovp*cU&$nE_itOWh4@$AwWXB+j9Z9zq{x8;v#3KC&>}g5Fpd>?>io?V#$@g5Tvj6}907*qoM6N<$f&ydV!T