From 3a280a3dc40ec98b170a29c861e07137952aaadc Mon Sep 17 00:00:00 2001 From: Me <135455255+IcarussOne@users.noreply.github.com> Date: Tue, 13 Aug 2024 09:33:28 -0500 Subject: [PATCH] Remove Disjunction Cloth A similar item is already added by Thaumic Tinkerer --- gradle.properties | 2 +- .../recipes/RecipeDisjunctionClothUse.java | 82 ------------------ .../common/events/CraftingEvents.java | 38 -------- .../thaumicwonders/common/init/InitItems.java | 2 - .../common/init/InitRecipes.java | 8 -- .../thaumicwonders/common/items/ItemsTW.java | 1 - .../items/misc/ItemDisjunctionCloth.java | 34 -------- .../assets/thaumicwonders/lang/en_us.lang | 5 -- .../assets/thaumicwonders/lang/ru_ru.lang | 5 -- .../models/item/disjunction_cloth.json | 6 -- .../thaumicwonders/research/alchemy.json | 29 +------ .../textures/items/disjunction_cloth.png | Bin 904 -> 0 bytes 12 files changed, 2 insertions(+), 210 deletions(-) delete mode 100644 src/main/java/com/verdantartifice/thaumicwonders/common/crafting/recipes/RecipeDisjunctionClothUse.java delete mode 100644 src/main/java/com/verdantartifice/thaumicwonders/common/events/CraftingEvents.java delete mode 100644 src/main/java/com/verdantartifice/thaumicwonders/common/items/misc/ItemDisjunctionCloth.java delete mode 100644 src/main/resources/assets/thaumicwonders/models/item/disjunction_cloth.json delete mode 100644 src/main/resources/assets/thaumicwonders/textures/items/disjunction_cloth.png diff --git a/gradle.properties b/gradle.properties index f2a00a4a..e8a0eb0e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ org.gradle.jvmargs = -Xmx3G mod_id = thaumicwonders mod_version = 1.8.4 maven_group = com.verdantartifice.thaumicwonders -archives_base_name = Thaumic-Wonders +archives_base_name = Thaumic-Wonders-1.12.2 # If any properties changes below this line, run `gradlew setupDecompWorkspace` and refresh gradle again to ensure everything is working correctly. diff --git a/src/main/java/com/verdantartifice/thaumicwonders/common/crafting/recipes/RecipeDisjunctionClothUse.java b/src/main/java/com/verdantartifice/thaumicwonders/common/crafting/recipes/RecipeDisjunctionClothUse.java deleted file mode 100644 index 1531f95f..00000000 --- a/src/main/java/com/verdantartifice/thaumicwonders/common/crafting/recipes/RecipeDisjunctionClothUse.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.verdantartifice.thaumicwonders.common.crafting.recipes; - -import javax.annotation.Nonnull; - -import com.verdantartifice.thaumicwonders.ThaumicWonders; -import com.verdantartifice.thaumicwonders.common.items.ItemsTW; - -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.world.World; -import net.minecraftforge.registries.IForgeRegistryEntry; - -public class RecipeDisjunctionClothUse extends IForgeRegistryEntry.Impl implements IRecipe { - public RecipeDisjunctionClothUse() { - super(); - setRegistryName(ThaumicWonders.MODID, "disenchant"); - } - - @Override - public boolean matches(@Nonnull InventoryCrafting inv, @Nonnull World worldIn) { - return RecipeDisjunctionClothUse.matches(inv); - } - - public static boolean matches(@Nonnull IInventory inv) { - boolean foundCloth = false; - boolean foundTarget = false; - - for (int index = 0; index < inv.getSizeInventory(); index++) { - ItemStack stack = inv.getStackInSlot(index); - if (!stack.isEmpty()) { - if (stack.getItem() == ItemsTW.DISJUNCTION_CLOTH && !foundCloth) { - foundCloth = true; - } else if (stack.getItem() != ItemsTW.DISJUNCTION_CLOTH && !foundTarget && stack.isItemEnchanted()) { - foundTarget = true; - } else { - // Invalid item, abort - return false; - } - } - } - - return foundCloth && foundTarget; - } - - @Override - @Nonnull - public ItemStack getCraftingResult(@Nonnull InventoryCrafting inv) { - ItemStack stackToDisenchant = ItemStack.EMPTY; - - for (int index = 0; index < inv.getSizeInventory(); index++) { - ItemStack stack = inv.getStackInSlot(index); - if (!stack.isEmpty() && stack.getItem() != ItemsTW.DISJUNCTION_CLOTH && stack.isItemEnchanted()) { - stackToDisenchant = stack.copy(); - break; - } - } - if (!stackToDisenchant.isEmpty()) { - stackToDisenchant.getTagCompound().removeTag("ench"); - } - - return stackToDisenchant; - } - - @Override - public boolean canFit(int width, int height) { - return (width >= 2) || (height >= 2); - } - - @Override - @Nonnull - public ItemStack getRecipeOutput() { - // Recipe is dynamic, so return empty stack - return ItemStack.EMPTY; - } - - @Override - public boolean isDynamic() { - return true; - } -} diff --git a/src/main/java/com/verdantartifice/thaumicwonders/common/events/CraftingEvents.java b/src/main/java/com/verdantartifice/thaumicwonders/common/events/CraftingEvents.java deleted file mode 100644 index c7a4081d..00000000 --- a/src/main/java/com/verdantartifice/thaumicwonders/common/events/CraftingEvents.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.verdantartifice.thaumicwonders.common.events; - -import com.verdantartifice.thaumicwonders.ThaumicWonders; -import com.verdantartifice.thaumicwonders.common.crafting.recipes.RecipeDisjunctionClothUse; -import com.verdantartifice.thaumicwonders.common.items.ItemsTW; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.PlayerEvent; -import thaumcraft.api.aura.AuraHelper; - -@Mod.EventBusSubscriber(modid = ThaumicWonders.MODID) -public class CraftingEvents { - @SubscribeEvent - public static void onCrafting(PlayerEvent.ItemCraftedEvent event) { - // If this was a disenchantment using a Disjunction Cloth, disperse vis into the aura - if (!event.player.world.isRemote && RecipeDisjunctionClothUse.matches(event.craftMatrix)) { - for (int index = 0; index < event.craftMatrix.getSizeInventory(); index++) { - ItemStack stack = event.craftMatrix.getStackInSlot(index); - if (!stack.isEmpty() && stack.getItem() != ItemsTW.DISJUNCTION_CLOTH && stack.isItemEnchanted()) { - NBTTagList tagList = stack.getEnchantmentTagList(); - int totalLevels = 0; - for (int tagIndex = 0; tagIndex < tagList.tagCount(); tagIndex++) { - NBTTagCompound tag = tagList.getCompoundTagAt(tagIndex); - totalLevels += tag.getInteger("lvl"); - } - if (totalLevels > 0) { - AuraHelper.addVis(event.player.world, event.player.getPosition(), (totalLevels * 5.0F)); - } - break; - } - } - } - } -} diff --git a/src/main/java/com/verdantartifice/thaumicwonders/common/init/InitItems.java b/src/main/java/com/verdantartifice/thaumicwonders/common/init/InitItems.java index cf40e2f1..fa18e4ee 100644 --- a/src/main/java/com/verdantartifice/thaumicwonders/common/init/InitItems.java +++ b/src/main/java/com/verdantartifice/thaumicwonders/common/init/InitItems.java @@ -14,7 +14,6 @@ import com.verdantartifice.thaumicwonders.common.items.consumables.ItemLetheWater; import com.verdantartifice.thaumicwonders.common.items.consumables.ItemPanacea; import com.verdantartifice.thaumicwonders.common.items.entities.ItemFlyingCarpet; -import com.verdantartifice.thaumicwonders.common.items.misc.ItemDisjunctionCloth; import com.verdantartifice.thaumicwonders.common.items.misc.ItemStructureDiviner; import com.verdantartifice.thaumicwonders.common.items.misc.ItemTimewinder; import com.verdantartifice.thaumicwonders.common.items.plants.ItemCinderpearlSeed; @@ -31,7 +30,6 @@ public class InitItems { public static final Set ITEM_VARIANT_HOLDERS = new HashSet(); public static void initItems(IForgeRegistry forgeRegistry) { - registerItem(forgeRegistry, new ItemDisjunctionCloth()); registerItem(forgeRegistry, new ItemPrimalDestroyer()); registerItem(forgeRegistry, new ItemFlyingCarpet()); registerItem(forgeRegistry, new ItemTimewinder()); diff --git a/src/main/java/com/verdantartifice/thaumicwonders/common/init/InitRecipes.java b/src/main/java/com/verdantartifice/thaumicwonders/common/init/InitRecipes.java index 1e5efc3d..f0bfb70a 100644 --- a/src/main/java/com/verdantartifice/thaumicwonders/common/init/InitRecipes.java +++ b/src/main/java/com/verdantartifice/thaumicwonders/common/init/InitRecipes.java @@ -8,7 +8,6 @@ import com.verdantartifice.thaumicwonders.ThaumicWonders; import com.verdantartifice.thaumicwonders.common.blocks.BlocksTW; -import com.verdantartifice.thaumicwonders.common.crafting.recipes.RecipeDisjunctionClothUse; import com.verdantartifice.thaumicwonders.common.crafting.recipes.RecipeFlyingCarpetDyes; import com.verdantartifice.thaumicwonders.common.fluids.FluidQuicksilver; import com.verdantartifice.thaumicwonders.common.items.ItemsTW; @@ -193,7 +192,6 @@ private static void initCoalescencePlatform() { } private static void initNormalRecipes(IForgeRegistry forgeRegistry) { - forgeRegistry.register(new RecipeDisjunctionClothUse()); forgeRegistry.register(new RecipeFlyingCarpetDyes()); ResourceLocation qsGroup = new ResourceLocation(ThaumicWonders.MODID, "quicksilver_bucket_group"); @@ -364,12 +362,6 @@ private static void initCrucibleRecipes() { new ItemStack(Items.ENDER_PEARL), new AspectList().add(Aspect.MOTION, 15).add(Aspect.ELDRITCH, 10) )); - ThaumcraftApi.addCrucibleRecipe(new ResourceLocation(ThaumicWonders.MODID, "disjunction_cloth"), new CrucibleRecipe( - "TWOND_DISJUNCTION_CLOTH", - new ItemStack(ItemsTW.DISJUNCTION_CLOTH), - new ItemStack(ItemsTC.fabric), - new AspectList().add(Aspect.MAGIC, 40).add(Aspect.VOID, 40).add(Aspect.AURA, 20) - )); ThaumcraftApi.addCrucibleRecipe(new ResourceLocation(ThaumicWonders.MODID, "alchemist_stone"), new CrucibleRecipe( "TWOND_CATALYZATION_CHAMBER", new ItemStack(ItemsTW.ALCHEMIST_STONE), diff --git a/src/main/java/com/verdantartifice/thaumicwonders/common/items/ItemsTW.java b/src/main/java/com/verdantartifice/thaumicwonders/common/items/ItemsTW.java index 723f0208..1da7a6dd 100644 --- a/src/main/java/com/verdantartifice/thaumicwonders/common/items/ItemsTW.java +++ b/src/main/java/com/verdantartifice/thaumicwonders/common/items/ItemsTW.java @@ -9,7 +9,6 @@ @GameRegistry.ObjectHolder(ThaumicWonders.MODID) public class ItemsTW { - public static final Item DISJUNCTION_CLOTH = null; public static final ItemSword PRIMAL_DESTROYER = null; public static final Item FLYING_CARPET = null; public static final Item TIMEWINDER = null; diff --git a/src/main/java/com/verdantartifice/thaumicwonders/common/items/misc/ItemDisjunctionCloth.java b/src/main/java/com/verdantartifice/thaumicwonders/common/items/misc/ItemDisjunctionCloth.java deleted file mode 100644 index 5d705428..00000000 --- a/src/main/java/com/verdantartifice/thaumicwonders/common/items/misc/ItemDisjunctionCloth.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.verdantartifice.thaumicwonders.common.items.misc; - -import javax.annotation.Nonnull; - -import com.verdantartifice.thaumicwonders.common.items.base.ItemTW; - -import net.minecraft.item.ItemStack; - -public class ItemDisjunctionCloth extends ItemTW { - public ItemDisjunctionCloth() { - super("disjunction_cloth"); - setMaxDamage(50); - setMaxStackSize(1); - setNoRepair(); - } - - @Override - public boolean isBookEnchantable(ItemStack stack, ItemStack book) { - return false; - } - - @Override - public boolean hasContainerItem(ItemStack stack) { - return true; - } - - @Nonnull - @Override - public ItemStack getContainerItem(@Nonnull ItemStack itemStack) { - ItemStack newStack = itemStack.copy(); - newStack.setItemDamage(itemStack.getItemDamage() + 1); - return newStack; - } -} diff --git a/src/main/resources/assets/thaumicwonders/lang/en_us.lang b/src/main/resources/assets/thaumicwonders/lang/en_us.lang index a300ef29..449a2e13 100644 --- a/src/main/resources/assets/thaumicwonders/lang/en_us.lang +++ b/src/main/resources/assets/thaumicwonders/lang/en_us.lang @@ -41,7 +41,6 @@ tile.thaumicwonders.cinderpearl_crop.name=Cinderpearl tile.thaumicwonders.vishroom_crop.name=Vishroom // Items -item.thaumicwonders.disjunction_cloth.name=Disjunction Cloth item.thaumicwonders.primal_destroyer.name=Primal Destroyer item.thaumicwonders.flying_carpet.name=Flying Carpet item.thaumicwonders.timewinder.name=Timewinder @@ -99,10 +98,6 @@ thaumicwonders.research.everburning_urn.title=Everburning Urn thaumicwonders.research.everburning_urn.text.stage.1=The Everfull Urn is an incredibly useful device, but I'm convinced that I can do better. Something similar, but for other types of fluids. Fluids like, say... lava? thaumicwonders.research.everburning_urn.text.stage.2=By infusing the Everfull Urn with a series of microscopic portals to the Nether, I'm able to siphon all the lava that I could ever need. The process is not perfect, however.
For one thing, it's slow. Whereas its watery brethren fills up in moments, this device, which I've dubbed the Everburning Urn, takes about a minute to generate a single bucket.
The process is much more draining to the aura, as well. My calculations indicate that maintaining the portal mesh consumes about 25 points of vis from the aura.
Finally, for safety's sake, I've disabled the urn's ability to automatically fill nearby vessels. Can't have liquid hot magma just flying around the place. -thaumicwonders.research.disjunction_cloth.title=Disjunction Cloth -thaumicwonders.research.disjunction_cloth.text.stage.1=Augh! This enchantment table is so incredibly frustrating at times. It's so... random! And then when I don't get what I want, I have to craft a new item from scratch! There has to be a better way to do this.
I believe that alchemy may hold the solution to this problem. I just need something to soak up the magical energy bound to these enchanted items. Of course, I'll need an enchanted item to test on. It doesn't need to be anything too advanced, a simple Protection enchantment should serve my needs nicely. -thaumicwonders.research.disjunction_cloth.text.stage.2=My research has borne fruit! It may not solve the problem of randomized enchantment, but this new Disjunction Cloth will get rid of any unwanted enchantments beautifully.
As a bonus, it doesn't just soak up enchantment energy, it unbinds it! The unbound energy is then dispersed into the aura as vis. My calculations indicate that the cloth will release 5 points of vis into the aura for every level of enchantment that it unbinds. - thaumicwonders.research.dimensional_ripper.title=Dimensional Ripper thaumicwonders.research.dimensional_ripper.text.stage.1=I can't believe I'm seriously considering this, but...
If I'm going to continue to study these flux rifts, I'll need better tools. Right now, I just dump a bunch of flux into the aura and hope a rift forms somewhere nearby. That's far too haphazard.
I need something more precise, more controlled.
Less costly would be nice, too. thaumicwonders.research.dimensional_ripper.text.stage.2=I do believe I've outdone myself. By channeling the destructive power of an Arcane Bore through a Primordial Pearl, I'm able to breach the walls of reality itself!
A single Dimensional Ripper isn't enough, however, nor could it ever be. The energies required would be completely infeasible. Rather, a pair of the devices must be used. By placing them precisely ten blocks apart and facing each other, the machines can resonate together, amplifying their power enough to serve my needs. When so placed, small amounts of energy will flit between them, confirming that they are connected.
Each of the two devices must be fueled with at least fifty Vitium essentia to reach critical mass. Applying a redstone signal to either ripper will disable the pair and prevent any reaction from taking place. Rippers disabled in this way can be fed additional essentia, beyond the minimum of fifty, to result in a larger rift once they're finally activated.
If a rift already exists at the target point, the rippers will enlarge it when activated. This is subject to diminishing returns, however, and the process will significantly destabilize the rift.
Finally, as a safety measure, the Rippers will not activate if they sense another rift already open nearby, but not at the target point. The veil between us and the void can only take so much tampering before it fails completely, and I'm not *that* crazy. diff --git a/src/main/resources/assets/thaumicwonders/lang/ru_ru.lang b/src/main/resources/assets/thaumicwonders/lang/ru_ru.lang index c6f8a12d..5c0cb304 100644 --- a/src/main/resources/assets/thaumicwonders/lang/ru_ru.lang +++ b/src/main/resources/assets/thaumicwonders/lang/ru_ru.lang @@ -42,7 +42,6 @@ tile.thaumicwonders.cinderpearl_crop.name=Тлеющая Жемчужина tile.thaumicwonders.vishroom_crop.name=Висомор // Items -item.thaumicwonders.disjunction_cloth.name=Ткань Дизъюнкции item.thaumicwonders.primal_destroyer.name=Первобытный Разрушитель item.thaumicwonders.flying_carpet.name=Летающий Ковер item.thaumicwonders.timewinder.name=Маховик Времени @@ -101,10 +100,6 @@ thaumicwonders.research.everburning_urn.title=Вечнопылающая Урн thaumicwonders.research.everburning_urn.text.stage.1=The Everfull Urn is an incredibly useful device, but I'm convinced that I can do better. Something similar, but for other types of fluids. Fluids like, say... lava? thaumicwonders.research.everburning_urn.text.stage.2=By infusing the Everfull Urn with a series of microscopic portals to the Nether, I'm able to siphon all the lava that I could ever need. The process is not perfect, however.
For one thing, it's slow. Whereas its watery brethren fills up in moments, this device, which I've dubbed the Everburning Urn, takes about a minute to generate a single bucket.
The process is much more draining to the aura, as well. My calculations indicate that maintaining the portal mesh consumes about 25 points of vis from the aura.
Finally, for safety's sake, I've disabled the urn's ability to automatically fill nearby vessels. Can't have liquid hot magma just flying around the place. -thaumicwonders.research.disjunction_cloth.title=Ткань Дизъюнкции -thaumicwonders.research.disjunction_cloth.text.stage.1=Augh! This enchantment table is so incredibly frustrating at times. It's so... random! And then when I don't get what I want, I have to craft a new item from scratch! There has to be a better way to do this.
I believe that alchemy may hold the solution to this problem. I just need something to soak up the magical energy bound to these enchanted items. Of course, I'll need an enchanted item to test on. It doesn't need to be anything too advanced, a simple Protection enchantment should serve my needs nicely. -thaumicwonders.research.disjunction_cloth.text.stage.2=My research has borne fruit! It may not solve the problem of randomized enchantment, but this new Ткань Дизъюнкции will get rid of any unwanted enchantments beautifully.
As a bonus, it doesn't just soak up enchantment energy, it unbinds it! The unbound energy is then dispersed into the aura as vis. My calculations indicate that the cloth will release 5 points of vis into the aura for every level of enchantment that it unbinds. - thaumicwonders.research.dimensional_ripper.title=Пространственный Потрошитель thaumicwonders.research.dimensional_ripper.text.stage.1=I can't believe I'm seriously considering this, but...
If I'm going to continue to study these flux rifts, I'll need better tools. Right now, I just dump a bunch of flux into the aura and hope a rift forms somewhere nearby. That's far too haphazard.
I need something more precise, more controlled.
Less costly would be nice, too. thaumicwonders.research.dimensional_ripper.text.stage.2=I do believe I've outdone myself. By channeling the destructive power of an Arcane Bore through a Primordial Pearl, I'm able to breach the walls of reality itself!
A single Dimensional Ripper isn't enough, however, nor could it ever be. The energies required would be completely infeasible. Rather, a pair of the devices must be used. By placing them precisely ten blocks apart and facing each other, the machines can resonate together, amplifying their power enough to serve my needs. When so placed, small amounts of energy will flit between them, confirming that they are connected.
Each of the two devices must be fueled with at least fifty Vitium essentia to reach critical mass. Applying a redstone signal to either ripper will disable the pair and prevent any reaction from taking place. Rippers disabled in this way can be fed additional essentia, beyond the minimum of fifty, to result in a larger rift once they're finally activated.
If a rift already exists at the target point, the rippers will enlarge it when activated. This is subject to diminishing returns, however, and the process will significantly destabilize the rift.
Finally, as a safety measure, the Rippers will not activate if they sense another rift already open nearby, but not at the target point. The veil between us and the void can only take so much tampering before it fails completely, and I'm not *that* crazy. diff --git a/src/main/resources/assets/thaumicwonders/models/item/disjunction_cloth.json b/src/main/resources/assets/thaumicwonders/models/item/disjunction_cloth.json deleted file mode 100644 index 93754c65..00000000 --- a/src/main/resources/assets/thaumicwonders/models/item/disjunction_cloth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "thaumicwonders:items/disjunction_cloth" - } -} diff --git a/src/main/resources/assets/thaumicwonders/research/alchemy.json b/src/main/resources/assets/thaumicwonders/research/alchemy.json index ac9fb6cf..05546751 100644 --- a/src/main/resources/assets/thaumicwonders/research/alchemy.json +++ b/src/main/resources/assets/thaumicwonders/research/alchemy.json @@ -56,33 +56,6 @@ ], "addenda": [] }, - { - "key": "TWOND_DISJUNCTION_CLOTH", - "name": "thaumicwonders.research.disjunction_cloth.title", - "icons": ["thaumicwonders:disjunction_cloth"], - "category": "THAUMIC_WONDERS", - "parents": ["TWOND_BASE"], - "siblings": [], - "meta": [], - "location": [2, 0], - "reward_item": [], - "reward_knowledge": [], - "stages": [ - { - "text": "thaumicwonders.research.disjunction_cloth.text.stage.1", - "required_knowledge": ["THEORY;ALCHEMY;1","THEORY;AUROMANCY;1"], - "required_research":["!auram"], - "required_item": ["thaumcraft:enchanted_placeholder;1;0;{ench:[{id:0s,lvl:1s}]}"] - }, - { - "text": "thaumicwonders.research.disjunction_cloth.text.stage.2", - "recipes": [ - "thaumicwonders:disjunction_cloth" - ] - } - ], - "addenda": [] - }, { "key": "TWOND_CATALYZATION_CHAMBER", "name": "thaumicwonders.research.catalyzation_chamber.title", @@ -210,7 +183,7 @@ "name": "thaumicwonders.research.lethe_water.title", "icons": ["thaumicwonders:lethe_water"], "category": "THAUMIC_WONDERS", - "parents": ["TWOND_DISJUNCTION_CLOTH"], + "parents": ["TWOND_BASE"], "siblings": [], "meta": [], "location": [4, 0], diff --git a/src/main/resources/assets/thaumicwonders/textures/items/disjunction_cloth.png b/src/main/resources/assets/thaumicwonders/textures/items/disjunction_cloth.png deleted file mode 100644 index 19d8efb1907cb7369c8e0be4f04d7c56310a389f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 904 zcmV;319$w1P)KLZ*U+=)p!fv7f#TG` zAxLl%!EgG`&*5<32cu%worY0{L9A7~=}6b}76Isk~1IN~P)K3@?4 z&zpALY4A7Z!>t0&I7qECf*j`WHIYAjW_h^ivJu4lvb8y9VL`DD`rG0ZKvcZ$L@8 zo)6*!Fng}&gE0q~LGCMnsiR8`P)pL0I_sTkS+y)n+TA3GttW)1&9=uM{p@L#3)6fr&wcMsNGbUrmC{DPK9sF)6aD)&u7A40(dwA;&7ax1;`l=`XHZCs9mB==dXy{n zbq_%Nji8Y2G&UV&(APbBR|D~{EfjjyQze80==i$FA$%o+KjrHlPu@Qg{rXS>cx|7? zri0yTD|wVm%~DoRb#WQ+)|yKMoXCgR)izXjV=q5HmediizMZKVENgRx;?0j2IEIVe zY7+-V;$XLGtK0mYL6n35lozH_Y-$#FYxihuI{U(N+b0f+^sWZ9x=jgCFf~g6#CF7& z%14&9IdM>A5S}qvjrZF+w|!>YY5o+VBqT~gX4`3w;@M`T6g!5CXAOyiA{Upz?siEj z>DPxuNhnRt!ZBRMWU?BQ{=dEG@w{@1saZrxh`%0*0zj06n3^S0lJv`Jww9(77rUYNYAyvARTgvh?e)Fdm%aG9*eGHY}zJOSW=yrUYVCWi