From 66ab022c95f718c6578b61b4c37f8352afa2565a Mon Sep 17 00:00:00 2001 From: PrototypeTrousers Date: Wed, 8 Feb 2023 21:18:51 -0300 Subject: [PATCH] package patterns --- src/api/java/appeng/api/config/Packaging.java | 5 + .../crafting/ICraftingPatternDetails.java | 132 +++++++++--------- .../GuiExpandedProcessingPatternTerm.java | 50 ++++--- .../gui/implementations/GuiPatternTerm.java | 29 ++++ .../client/gui/widgets/GuiImgButton.java | 3 + .../ContainerPatternEncoder.java | 69 ++++++--- .../ContainerWirelessPatternTerminal.java | 3 +- .../core/localization/ButtonToolTips.java | 5 + .../appeng/core/localization/GuiText.java | 1 + .../core/sync/packets/PacketJEIRecipe.java | 16 ++- .../core/sync/packets/PacketPatternSlot.java | 1 - .../core/sync/packets/PacketValueConfig.java | 4 +- .../java/appeng/helpers/PatternHelper.java | 7 + .../appeng/items/misc/ItemEncodedPattern.java | 6 + .../implementations/CraftingCPUCluster.java | 10 +- .../parts/reporting/AbstractPartEncoder.java | 9 ++ .../parts/reporting/PartPatternTerminal.java | 3 +- .../appliedenergistics2/lang/en_us.lang | 4 + .../textures/guis/states.png | Bin 13804 -> 35202 bytes 19 files changed, 243 insertions(+), 114 deletions(-) create mode 100644 src/api/java/appeng/api/config/Packaging.java diff --git a/src/api/java/appeng/api/config/Packaging.java b/src/api/java/appeng/api/config/Packaging.java new file mode 100644 index 000000000..d3642d2cd --- /dev/null +++ b/src/api/java/appeng/api/config/Packaging.java @@ -0,0 +1,5 @@ +package appeng.api.config; + +public enum Packaging { + ENABLED, DISABLED; +} diff --git a/src/api/java/appeng/api/networking/crafting/ICraftingPatternDetails.java b/src/api/java/appeng/api/networking/crafting/ICraftingPatternDetails.java index 11e4ee367..f7ce84924 100644 --- a/src/api/java/appeng/api/networking/crafting/ICraftingPatternDetails.java +++ b/src/api/java/appeng/api/networking/crafting/ICraftingPatternDetails.java @@ -37,82 +37,86 @@ import java.util.List; /** * do not implement provided by {@link ICraftingPatternItem} - * + *

* caching this INSTANCE will increase performance of validation and checks. */ -public interface ICraftingPatternDetails -{ +public interface ICraftingPatternDetails { - /** - * @return source item. - */ - ItemStack getPattern(); + /** + * @return source item. + */ + ItemStack getPattern(); - /** - * @param slotIndex specific slot index - * @param itemStack item in slot - * @param world crafting world - * - * @return if an item can be used in the specific slot for this pattern. - */ - boolean isValidItemForSlot( int slotIndex, ItemStack itemStack, World world ); + /** + * @param slotIndex specific slot index + * @param itemStack item in slot + * @param world crafting world + * @return if an item can be used in the specific slot for this pattern. + */ + boolean isValidItemForSlot(int slotIndex, ItemStack itemStack, World world); - /** - * @return if this pattern is a crafting pattern ( work bench ) - */ - boolean isCraftable(); + /** + * @return if this pattern is a crafting pattern ( work bench ) + */ + boolean isCraftable(); - /** - * @return a list of the inputs, will include nulls. - */ - IAEItemStack[] getInputs(); + /** + * @return a list of the inputs, will include nulls. + */ + IAEItemStack[] getInputs(); - /** - * @return a list of the inputs, will be clean - */ - IAEItemStack[] getCondensedInputs(); + /** + * @return a list of the inputs, will be clean + */ + IAEItemStack[] getCondensedInputs(); - /** - * @return a list of the outputs, will be clean - */ - IAEItemStack[] getCondensedOutputs(); + /** + * @return a list of the outputs, will be clean + */ + IAEItemStack[] getCondensedOutputs(); - /** - * @return a list of the outputs, will include nulls. - */ - IAEItemStack[] getOutputs(); + /** + * @return a list of the outputs, will include nulls. + */ + IAEItemStack[] getOutputs(); - /** - * @return if this pattern is enabled to support substitutions. - */ - boolean canSubstitute(); + /** + * @return if this pattern is enabled to support substitutions. + */ + boolean canSubstitute(); - default List getSubstituteInputs( int slot ) - { - return Collections.emptyList(); - } + default List getSubstituteInputs(int slot) { + return Collections.emptyList(); + } - /** - * Allow using this INSTANCE of the pattern details to preform the crafting action with performance enhancements. - * - * @param craftingInv inventory - * @param world crafting world - * - * @return the crafted ( work bench ) item. - */ - ItemStack getOutput( InventoryCrafting craftingInv, World world ); + /** + * Allow using this INSTANCE of the pattern details to preform the crafting action with performance enhancements. + * + * @param craftingInv inventory + * @param world crafting world + * @return the crafted ( work bench ) item. + */ + ItemStack getOutput(InventoryCrafting craftingInv, World world); - /** - * Get the priority of this pattern - * - * @return the priority of this pattern - */ - int getPriority(); + /** + * Get the priority of this pattern + * + * @return the priority of this pattern + */ + int getPriority(); - /** - * Set the priority the of this pattern. - * - * @param priority priority of pattern - */ - void setPriority( int priority ); + /** + * Set the priority the of this pattern. + * + * @param priority priority of pattern + */ + void setPriority(int priority); + + /** + * @return if this pattern is a packaging pattern. + */ + + default boolean isPackage() { + return false; + } } diff --git a/src/main/java/appeng/client/gui/implementations/GuiExpandedProcessingPatternTerm.java b/src/main/java/appeng/client/gui/implementations/GuiExpandedProcessingPatternTerm.java index 2ea395213..3ca3a4d36 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiExpandedProcessingPatternTerm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiExpandedProcessingPatternTerm.java @@ -1,7 +1,7 @@ package appeng.client.gui.implementations; import appeng.api.config.ActionItems; -import appeng.api.config.ItemSubstitution; +import appeng.api.config.Packaging; import appeng.api.config.Settings; import appeng.api.storage.ITerminalHost; import appeng.client.gui.widgets.GuiImgButton; @@ -36,6 +36,9 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement private static final String SUBSITUTION_DISABLE = "0"; private static final String SUBSITUTION_ENABLE = "1"; + private static final String PACKAGING_DISABLE = "0"; + private static final String PACKAGING_ENABLE = "1"; + private static final String CRAFTMODE_CRFTING = "1"; private static final String CRAFTMODE_PROCESSING = "0"; @@ -52,10 +55,14 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement private GuiImgButton divThreeBtn; private GuiImgButton minusOneBtn; private GuiImgButton maxCountBtn; + private GuiImgButton packagingEnabledBtn; + private GuiImgButton packagingDisabledBtn; public Map, Object> mapTargetSlot = new HashMap<>(); + private ContainerExpandedProcessingPatternTerm container; public GuiExpandedProcessingPatternTerm(final InventoryPlayer inventoryPlayer, final ITerminalHost te) { super(inventoryPlayer, te, new ContainerExpandedProcessingPatternTerm(inventoryPlayer, te)); + this.container = (ContainerExpandedProcessingPatternTerm) this.inventorySlots; this.setReservedSpace(81); } @@ -112,6 +119,13 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement if (this.substitutionsEnabledBtn == btn || this.substitutionsDisabledBtn == btn) { NetworkHandler.instance().sendToServer(new PacketValueConfig("PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSITUTION_DISABLE : SUBSITUTION_ENABLE)); } + + if (this.packagingEnabledBtn == btn || this.packagingDisabledBtn == btn) { + NetworkHandler.instance() + .sendToServer( + new PacketValueConfig("PatternTerminal.Package", this.packagingEnabledBtn == btn ? PACKAGING_DISABLE : PACKAGING_ENABLE)); + } + } catch (final IOException e) { AELog.error(e); } @@ -121,29 +135,26 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement public void initGui() { super.initGui(); - this.tabCraftButton = new GuiTabButton(this.guiLeft + 173, this.guiTop + this.ySize - 177, new ItemStack(Blocks.CRAFTING_TABLE), GuiText.CraftingPattern.getLocal(), this.itemRender); - this.buttonList.add(this.tabCraftButton); - this.tabProcessButton = new GuiTabButton(this.guiLeft + 173, this.guiTop + this.ySize - 177, new ItemStack(Blocks.FURNACE), GuiText.ProcessingPattern.getLocal(), this.itemRender); this.buttonList.add(this.tabProcessButton); - this.substitutionsEnabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, ItemSubstitution.ENABLED); - this.substitutionsEnabledBtn.setHalfSize(true); - this.buttonList.add(this.substitutionsEnabledBtn); + this.packagingEnabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, Packaging.ENABLED); + this.packagingEnabledBtn.setHalfSize(true); + this.buttonList.add(this.packagingEnabledBtn); - this.substitutionsDisabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, ItemSubstitution.DISABLED); - this.substitutionsDisabledBtn.setHalfSize(true); - this.buttonList.add(this.substitutionsDisabledBtn); + this.packagingDisabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, Packaging.DISABLED); + this.packagingDisabledBtn.setHalfSize(true); + this.buttonList.add(this.packagingDisabledBtn); this.clearBtn = new GuiImgButton(this.guiLeft + 74, this.guiTop + this.ySize - 163, Settings.ACTIONS, ActionItems.CLOSE); this.clearBtn.setHalfSize(true); this.buttonList.add(this.clearBtn); - this.x3Btn = new GuiImgButton(this.guiLeft + 131, this.guiTop + this.ySize - 158, Settings.ACTIONS, ActionItems.MULTIPLY_BY_THREE); + this.x3Btn = new GuiImgButton(this.guiLeft + 131, this.guiTop + this.ySize - 154, Settings.ACTIONS, ActionItems.MULTIPLY_BY_THREE); this.x3Btn.setHalfSize(true); this.buttonList.add(this.x3Btn); - this.x2Btn = new GuiImgButton(this.guiLeft + 131, this.guiTop + this.ySize - 148, Settings.ACTIONS, ActionItems.MULTIPLY_BY_TWO); + this.x2Btn = new GuiImgButton(this.guiLeft + 131, this.guiTop + this.ySize - 144, Settings.ACTIONS, ActionItems.MULTIPLY_BY_TWO); this.x2Btn.setHalfSize(true); this.buttonList.add(this.x2Btn); @@ -151,11 +162,11 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement this.plusOneBtn.setHalfSize(true); this.buttonList.add(this.plusOneBtn); - this.divThreeBtn = new GuiImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 158, Settings.ACTIONS, ActionItems.DIVIDE_BY_THREE); + this.divThreeBtn = new GuiImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 154, Settings.ACTIONS, ActionItems.DIVIDE_BY_THREE); this.divThreeBtn.setHalfSize(true); this.buttonList.add(this.divThreeBtn); - this.divTwoBtn = new GuiImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 148, Settings.ACTIONS, ActionItems.DIVIDE_BY_TWO); + this.divTwoBtn = new GuiImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 144, Settings.ACTIONS, ActionItems.DIVIDE_BY_TWO); this.divTwoBtn.setHalfSize(true); this.buttonList.add(this.divTwoBtn); @@ -173,16 +184,21 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement @Override public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.tabCraftButton.visible = false; this.tabProcessButton.visible = true; - this.substitutionsEnabledBtn.visible = false; - this.substitutionsDisabledBtn.visible = false; this.x2Btn.visible = true; this.x3Btn.visible = true; this.divTwoBtn.visible = true; this.divThreeBtn.visible = true; this.plusOneBtn.visible = true; this.minusOneBtn.visible = true; + + if (this.container.packaging) { + this.packagingEnabledBtn.visible = true; + this.packagingDisabledBtn.visible = false; + } else { + this.packagingEnabledBtn.visible = false; + this.packagingDisabledBtn.visible = true; + } //this.maxCountBtn.visible = true; super.drawFG(offsetX, offsetY, mouseX, mouseY); diff --git a/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java b/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java index 456dcca52..4be15088b 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java @@ -21,6 +21,7 @@ package appeng.client.gui.implementations; import appeng.api.config.ActionItems; import appeng.api.config.ItemSubstitution; +import appeng.api.config.Packaging; import appeng.api.config.Settings; import appeng.api.storage.ITerminalHost; import appeng.client.gui.widgets.GuiImgButton; @@ -60,6 +61,9 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi private static final String SUBSITUTION_DISABLE = "0"; private static final String SUBSITUTION_ENABLE = "1"; + private static final String PACKAGING_DISABLE = "0"; + private static final String PACKAGING_ENABLE = "1"; + private static final String CRAFTMODE_CRFTING = "1"; private static final String CRAFTMODE_PROCESSING = "0"; @@ -78,6 +82,8 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi private GuiImgButton divThreeBtn; private GuiImgButton minusOneBtn; private GuiImgButton maxCountBtn; + private GuiImgButton packagingEnabledBtn; + private GuiImgButton packagingDisabledBtn; public Map, Object> mapTargetSlot = new HashMap<>(); public GuiPatternTerm(final InventoryPlayer inventoryPlayer, final ITerminalHost te) { @@ -149,6 +155,12 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi .sendToServer( new PacketValueConfig("PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSITUTION_DISABLE : SUBSITUTION_ENABLE)); } + + if (this.packagingEnabledBtn == btn || this.packagingDisabledBtn == btn) { + NetworkHandler.instance() + .sendToServer( + new PacketValueConfig("PatternTerminal.Package", this.packagingEnabledBtn == btn ? PACKAGING_DISABLE : PACKAGING_ENABLE)); + } } catch (final IOException e) { AELog.error(e); } @@ -174,6 +186,14 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi this.substitutionsDisabledBtn.setHalfSize(true); this.buttonList.add(this.substitutionsDisabledBtn); + this.packagingEnabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, Packaging.ENABLED); + this.packagingEnabledBtn.setHalfSize(true); + this.buttonList.add(this.packagingEnabledBtn); + + this.packagingDisabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, Packaging.DISABLED); + this.packagingDisabledBtn.setHalfSize(true); + this.buttonList.add(this.packagingDisabledBtn); + this.clearBtn = new GuiImgButton(this.guiLeft + 74, this.guiTop + this.ySize - 163, Settings.ACTIONS, ActionItems.CLOSE); this.clearBtn.setHalfSize(true); this.buttonList.add(this.clearBtn); @@ -221,6 +241,8 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi this.divThreeBtn.visible = false; this.plusOneBtn.visible = false; this.minusOneBtn.visible = false; + this.packagingEnabledBtn.visible = false; + this.packagingDisabledBtn.visible = false; //this.maxCountBtn.visible = false; if (this.container.substitute) { @@ -231,6 +253,13 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi this.substitutionsDisabledBtn.visible = true; } } else { + if (this.container.packaging) { + this.packagingEnabledBtn.visible = true; + this.packagingDisabledBtn.visible = false; + } else { + this.packagingEnabledBtn.visible = false; + this.packagingDisabledBtn.visible = true; + } this.tabCraftButton.visible = false; this.tabProcessButton.visible = true; this.substitutionsEnabledBtn.visible = false; diff --git a/src/main/java/appeng/client/gui/widgets/GuiImgButton.java b/src/main/java/appeng/client/gui/widgets/GuiImgButton.java index a72ac2e9b..5cc0dd6ef 100644 --- a/src/main/java/appeng/client/gui/widgets/GuiImgButton.java +++ b/src/main/java/appeng/client/gui/widgets/GuiImgButton.java @@ -125,6 +125,9 @@ public class GuiImgButton extends GuiButton implements ITooltip { this.registerApp(4 + 3 * 16, Settings.ACTIONS, ItemSubstitution.ENABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescEnabled); this.registerApp(7 + 3 * 16, Settings.ACTIONS, ItemSubstitution.DISABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescDisabled); + this.registerApp(8 + 3 * 16, Settings.ACTIONS, Packaging.ENABLED, ButtonToolTips.Packaging, ButtonToolTips.PackagingDescEnabled); + this.registerApp(9 + 3 * 16, Settings.ACTIONS, Packaging.DISABLED, ButtonToolTips.Packaging, ButtonToolTips.PackagingDescDisabled); + this.registerApp(16, Settings.VIEW_MODE, ViewItems.STORED, ButtonToolTips.View, ButtonToolTips.StoredItems); this.registerApp(18, Settings.VIEW_MODE, ViewItems.ALL, ButtonToolTips.View, ButtonToolTips.StoredCraftable); this.registerApp(19, Settings.VIEW_MODE, ViewItems.CRAFTABLE, ButtonToolTips.View, ButtonToolTips.Craftable); diff --git a/src/main/java/appeng/container/implementations/ContainerPatternEncoder.java b/src/main/java/appeng/container/implementations/ContainerPatternEncoder.java index 783150105..15858c8a3 100644 --- a/src/main/java/appeng/container/implementations/ContainerPatternEncoder.java +++ b/src/main/java/appeng/container/implementations/ContainerPatternEncoder.java @@ -12,14 +12,7 @@ import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import appeng.container.ContainerNull; import appeng.container.guisync.GuiSync; -import appeng.container.slot.AppEngSlot; -import appeng.container.slot.IOptionalSlotHost; -import appeng.container.slot.OptionalSlotFake; -import appeng.container.slot.SlotFakeCraftingMatrix; -import appeng.container.slot.SlotPatternTerm; -import appeng.container.slot.SlotPlayerHotBar; -import appeng.container.slot.SlotPlayerInv; -import appeng.container.slot.SlotRestrictedInput; +import appeng.container.slot.*; import appeng.core.sync.packets.PacketPatternSlot; import appeng.helpers.IContainerCraftingPacket; import appeng.items.storage.ItemViewCell; @@ -74,6 +67,8 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp public boolean craftingMode = true; @GuiSync(96) public boolean substitute = false; + @GuiSync(95) + public boolean packaging = false; protected ContainerPatternEncoder(InventoryPlayer ip, ITerminalHost monitorable, boolean bindInventory) { super(ip, monitorable, bindInventory); @@ -254,8 +249,12 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp encodedValue.setTag("in", tagIn); encodedValue.setTag("out", tagOut); - encodedValue.setBoolean("crafting", this.isCraftingMode()); - encodedValue.setBoolean("substitute", this.isSubstitute()); + if (this.isCraftingMode()) { + encodedValue.setBoolean("crafting", this.isCraftingMode()); + encodedValue.setBoolean("substitute", this.isSubstitute()); + } else { + encodedValue.setBoolean("packaging", this.isPackaging()); + } output.setTagCompound(encodedValue); @@ -532,6 +531,14 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp } public void setSubstitute(final boolean substitute) { + if (getPart() != null) { + getPart().setSubstitution(substitute); + } else if (iGuiItemObject != null) { + NBTTagCompound nbtTagCompound = iGuiItemObject.getItemStack().getTagCompound(); + if (nbtTagCompound != null) { + nbtTagCompound.setBoolean("isSubstitute", substitute); + } + } this.substitute = substitute; if (getPart() != null) { getPart().setSubstitution(substitute); @@ -543,6 +550,22 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp } } + public boolean isPackaging() { + return this.packaging; + } + + public void setPackaging(boolean packaging) { + if (getPart() != null) { + getPart().setPackaging(packaging); + } else if (iGuiItemObject != null) { + NBTTagCompound nbtTagCompound = iGuiItemObject.getItemStack().getTagCompound(); + if (nbtTagCompound != null) { + nbtTagCompound.setBoolean("isPackaging", packaging); + } + } + this.packaging = packaging; + } + @Override public void detectAndSendChanges() { super.detectAndSendChanges(); @@ -552,6 +575,7 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp this.setCraftingMode(this.getPart().isCraftingRecipe()); this.updateOrderOfOutputSlots(); } + this.packaging = this.getPart().isPackaging(); this.substitute = this.getPart().isSubstitution(); } else if (iGuiItemObject != null) { NBTTagCompound nbtTagCompound = iGuiItemObject.getItemStack().getTagCompound(); @@ -570,20 +594,23 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp nbtTagCompound.setBoolean("isCraftingMode", false); iGuiItemObject.getItemStack().setTagCompound(nbtTagCompound); } - nbtTagCompound = iGuiItemObject.getItemStack().getTagCompound(); - if (nbtTagCompound != null) { - if (nbtTagCompound.hasKey("isSubstitute")) { - boolean substitute = nbtTagCompound.getBoolean("isSubstitute"); - if (this.isSubstitute() != substitute) { - this.setSubstitute(substitute); - } - } else { - nbtTagCompound.setBoolean("isSubstitute", false); + + if (nbtTagCompound.hasKey("isSubstitute")) { + boolean substitute = nbtTagCompound.getBoolean("isSubstitute"); + if (this.isSubstitute() != substitute) { + this.setSubstitute(substitute); } } else { - nbtTagCompound = new NBTTagCompound(); nbtTagCompound.setBoolean("isSubstitute", false); - iGuiItemObject.getItemStack().setTagCompound(nbtTagCompound); + } + + if (nbtTagCompound.hasKey("isPackaging")) { + boolean packaging = nbtTagCompound.getBoolean("isPackaging"); + if (this.isPackaging() != packaging) { + this.setPackaging(packaging); + } + } else { + nbtTagCompound.setBoolean("isPackaging", false); } } } diff --git a/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java b/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java index 8b760b636..047978d92 100644 --- a/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java +++ b/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java @@ -224,7 +224,7 @@ public class ContainerWirelessPatternTerminal extends ContainerPatternEncoder im this.output.writeToNBT(tag, "output"); this.pattern.writeToNBT(tag, "patterns"); this.upgrades.writeToNBT(tag, "upgrades"); - + tag.setBoolean("isPackaging", this.packaging); this.wirelessTerminalGUIObject.saveChanges(tag); } } @@ -236,6 +236,7 @@ public class ContainerWirelessPatternTerminal extends ContainerPatternEncoder im this.output.readFromNBT(data, "output"); this.pattern.readFromNBT(data, "patterns"); upgrades.readFromNBT(wirelessTerminalGUIObject.getItemStack().getTagCompound().getCompoundTag("upgrades")); + this.packaging = data.getBoolean("isPackaging"); } } diff --git a/src/main/java/appeng/core/localization/ButtonToolTips.java b/src/main/java/appeng/core/localization/ButtonToolTips.java index ecbe17a65..f3aa25101 100644 --- a/src/main/java/appeng/core/localization/ButtonToolTips.java +++ b/src/main/java/appeng/core/localization/ButtonToolTips.java @@ -116,6 +116,11 @@ public enum ButtonToolTips { SubstitutionsOff, SubstitutionsDescEnabled, SubstitutionsDescDisabled, + Packaging, + PackagingOn, + PackagingOff, + PackagingDescEnabled, + PackagingDescDisabled, CraftOnly, CraftEither, diff --git a/src/main/java/appeng/core/localization/GuiText.java b/src/main/java/appeng/core/localization/GuiText.java index 56cc91c8a..176b7cd83 100644 --- a/src/main/java/appeng/core/localization/GuiText.java +++ b/src/main/java/appeng/core/localization/GuiText.java @@ -119,6 +119,7 @@ public enum GuiText { And, With, Substitute, + Package, Yes, No, diff --git a/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java b/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java index bdfab5900..d2f0d8c70 100644 --- a/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java +++ b/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java @@ -255,14 +255,16 @@ public class PacketJEIRecipe extends AppEngPacket { if (this.output != null && ((con instanceof ContainerPatternEncoder && !((ContainerPatternEncoder) con).isCraftingMode()))) { IItemHandler outputSlots = cct.getInventoryByName("output"); - for (int i = 0; i < outputSlots.getSlots(); ++i) { - ItemHandlerUtil.setStackInSlot(outputSlots, i, ItemStack.EMPTY); - } - for (int i = 0; i < this.output.size() && i < outputSlots.getSlots(); ++i) { - if (this.output.get(i) == null || this.output.get(i) == ItemStack.EMPTY) { - continue; + if (outputSlots != null) { + for (int i = 0; i < outputSlots.getSlots(); ++i) { + ItemHandlerUtil.setStackInSlot(outputSlots, i, ItemStack.EMPTY); + } + for (int i = 0; i < this.output.size() && i < outputSlots.getSlots(); ++i) { + if (this.output.get(i) == null || this.output.get(i) == ItemStack.EMPTY) { + continue; + } + ItemHandlerUtil.setStackInSlot(outputSlots, i, this.output.get(i)); } - ItemHandlerUtil.setStackInSlot(outputSlots, i, this.output.get(i)); } } } diff --git a/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java b/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java index 678bb3f57..57ccafd43 100644 --- a/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java +++ b/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java @@ -23,7 +23,6 @@ import appeng.api.AEApi; import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.data.IAEItemStack; import appeng.container.implementations.ContainerPatternEncoder; -import appeng.container.implementations.ContainerPatternTerm; import appeng.core.sync.AppEngPacket; import appeng.core.sync.network.INetworkInfo; import appeng.util.item.AEItemStack; diff --git a/src/main/java/appeng/core/sync/packets/PacketValueConfig.java b/src/main/java/appeng/core/sync/packets/PacketValueConfig.java index ef9156931..691667337 100644 --- a/src/main/java/appeng/core/sync/packets/PacketValueConfig.java +++ b/src/main/java/appeng/core/sync/packets/PacketValueConfig.java @@ -157,7 +157,9 @@ public class PacketValueConfig extends AppEngPacket { } else if (this.Name.equals("PatternTerminal.MaximizeCount")) { cpt.maximizeCount(); } else if (this.Name.equals("PatternTerminal.Substitute")) { - cpt.getPart().setSubstitution(this.Value.equals("1")); + cpt.setSubstitute(this.Value.equals("1")); + } else if (this.Name.equals("PatternTerminal.Package")) { + cpt.setPackaging(this.Value.equals("1")); } } } else if (this.Name.startsWith("StorageBus.")) { diff --git a/src/main/java/appeng/helpers/PatternHelper.java b/src/main/java/appeng/helpers/PatternHelper.java index 888195676..d05ef54e5 100644 --- a/src/main/java/appeng/helpers/PatternHelper.java +++ b/src/main/java/appeng/helpers/PatternHelper.java @@ -68,6 +68,7 @@ public class PatternHelper implements ICraftingPatternDetails, Comparable failCache = new HashSet<>(); private final Set passCache = new HashSet<>(); private final IAEItemStack pattern; + private final boolean isPackaging; private int priority = 0; public PatternHelper(final ItemStack is, final World w) { @@ -80,6 +81,7 @@ public class PatternHelper implements ICraftingPatternDetails, Comparable^X_+~x z3MG{VsS2qTnQ06R6}R5b&735&^HS{pWYPOV2K=WFW-OD<_-Q2`dDVB*$vPF|GfUEw z_+?ftQeym3qW_@4{CEBT^~wL9*Z({I{KBfvl~?W*ZTlk}owM(Adsh7aFTYoB{`l|L z&;H*(zOG(Bd;h-|KW#r$SJW08KX!fl*!AH4eGl#8F2rBnwDanxry|Gd{_e9=kBa{<{a5Jtaq+*ex7YvK zyP-<^{cn|Jp6ZleZu<*Y9i|ePF^-})5ae8!JC5dOhvfInx4WZ%EuiMJu}59t|6Py0GZI_7a-NG;^ZZ-C zamVkCXZ?!p*M2&A`s0f7J!d{D@Bg#@=T&(N_hk>}tgT-w`uI~^_gMoK%fF|RJ&w%n zcl9lAwEzG2oBT;rg@a2%r*)c$mFy)aEtbf1I?ZHww1CyTWeu*XhiYY10svj@@@hJQrINv7TtVTAyO=ZKH zfC;|bvWZ7$T$nGUZFMEs!*J=8U{BMnSBg&hz$j%%#@@l6_6D z2W97OHNVf~XT0@}*Xp%f@BKV;Znm}k-O2^uAG%8vsu+LLSlnm!%cVALPUf@7w7I$8 zo`y&K=${%MS-SP=_S-8i^;y5&b9&wGw{-zqh0k=V&#gJNa{1hU)34Ya`PE-v@0j(@ zIqRR77yq>VOOAzm|Ey`9Z0$KolIgRWl}elnlgKUav~9a2_Nu7QyxI1f`=s#+m6^Kg zor(u{%=JHBd+OYe=`N}}w?9eq`s0=NuUs`NZG87Q$?K8SGp&xOZPTDWs~}WtA57ydCLtSmY$N^tu!<1RNMjS zDeF(}K7K9ovR(6M1(`j1^HRLdiz#neYVoJ&fphqs6`z$njvRG(J?EI>uRR}}_14}{ z*MC~uo6#V>N;=nJZ%n#l#e2uHt-s>TX1x->HS4&Z_LM7aoykYGZ9Dv0*wL+gq3#sJ z-H{)9Hf}W0@xQBnv-DchwY3Jj9zVCa;rzv?-a;n&UFlc3Tl2&(h`1h#^FNnyg_G0t z_TwD$-zQ7gl+AeZGI{>x&g|W7?=DQ7wpudrY*e*WyX&i<&o_+bKi*(p?zBNC@P<3r zlbG9~f{WMbe)X9B^xnrOQ(qeyEu52n#=kFKjZl(e+)j>5LcV_v=QlLbmY{|wV(a53|LF3nzU?4~F8HOs8@+KKhHfxO$F zMFoA!NH@2gck}JB96!w$tJXf>wIP!4{r;+5e$i+7r%7=p8>cSW{M_!FLavRdSM;Wb zA8#DWT$63f^~pt~y*o1^Lq>G|*nPK^q57upOJWd_?dd%(bRjJ+iN)gRYz>u@~BfmdxrK6 zgX6;GiY7@hLaCVNvUjpZt$+>~vZ4g=JCpF{#5Wo(CGr941~qP{88) z`D$A9a!KRm$I5GueEKw#xpb9N^@a(-*%wzUSvAMbl{5Th?h*@3 zecKz8j>Bla2$HJ7B&BwGwc(3uUs_?K8Hp~+ePt!SJe^Ajs?^D|XvpE<3 z2CJVFcys;GoFCQ4K2>pWEP1%-o00=xQ>Jul#=B)xGTt=k_G~nKH1i;j>bGV~19PX` zV=WtFrquJk(B=v?(k^u})zM*DeN)lpapJ>sqtRyf=?WbdDR&b#r@ zOtT*+Gru=EJh)&pFOI9@f=$~w>p2_ls`UtoFF!2GkQF;e@b@9bD>9~KYxWx{OEXm^ zE??4c-qJ^w_vp_L&9}FkXodN{d0wfJ_r8m}cmvx?Wh-+rC8LB*nng;ccbI)sbk@8( z5)e5nxby!F*$qw)6B<8Ws7-n1KW~Q#j~K6A=Ar9W+XU1;@Lm--Yr*QnA|1Ctq~l7< zTGq9i`?x}k+23?AU*QMpcfO=B8^y>{W9<8kFV#+EVXYIn?7x8cs6YnRuQ z*~v-pl=Lph=-*^vE2~;JZ{K=7u0DDG-CWypd)s}#ls=w5?OyHtyzf_kq}bN7Khj;d zb*uFRHPeHK1^<4IdTPp^G|5=~<<<3_+x9v{bKPfrZq4yv@is<%y&nsDuDtchkl8l- zoJ+h=Mn~!)!BiWSH3yVGhA`Hqx0MyBG0fR~-sd`dNJ#m#8G1=&HR9_}cl|E)>;31j zXro)USrOxWfytduYU)g8~Oai{s7y+`Hwr>wuX_2#dwo{hU?gsz>h{;^Tz_k|q?Zz^0XezG{5GyQWX zcMadWL-`EL_c-5gs7n;GoZ+gvXraKg6P?vXdmAP@ti654`GWEk$M~bY6SiNMoARSs zNj#f-T3K`>)B1PQ>`t>DtxgFunU=cMKV8eAL!yhPL+P6CGv|oRt4c333a1O{?F(p5 zaXKLSAUyW+FWVN|!*k>u4_@!MaG};EdwtIW*P2A(>jy;zJ>+Jesdae9_OHwQz@Gz& zFG2--XWo$dR?l=5`WyUgN^x9T09Sw{dN_ui27scwM*m}gS=?q$k=&%JXBnyFOlr0cJzwLYN<7gBrh@7GjHzrS$1@z=w3kvhN?x6 z&+yFK)wW<|npoQ5pR79?xSwU&u{`ZCX`IY|%G}Gz^x>(f-w(N-aM}0o6*3eNS*T(V z#8`61S^IpIbV-*h+to(C1U^Kp~0Ik)A#jP+jxF04D6 zAvsZyYvcNkOUBU)W;bX?_1MQ+)8{zHQE{Zl&+)d{ zV~>|j)l5$gK6}8bkoBOJ$nAINo7% zf%5fr{;ZbMrWG7v%Rl*{bDnpLP=xI?mI$kDx#n$L%KS;&dM-YEqjN#@Ov5k16AxE3 z)R?G>GfN!kDSjOg%3*6KzI9ep)PuE+(<2rz+~DyR->~QOsV^IpYWN={h_kjYdYHLF z!tnTEmx^2MeQy~iM3;5Gj9j$z>g7FBC1vtrcQfWb_**3rF?rX?^~+V47u;XF+;oD{ z?F*OJH!gT|i+Kn0!4=FmdRM3x&AB!+U1HBWfk(fX3U2=Qs)*U|bo|?~x_ur8e3b|wWA!Dt58ZTs7H&Sv#-X*4vi`q{d$gx{YG&^&1wFYo;?@S z*PD0O=jM9u;Ch>UhwnHM&*MJXD)x9UU{5HH}w%`-YotN3<1i^Ou`!tGdD*1>^3>A*nc?q zVt>zv7$)PT4e^R9Lc1CwzdGMD-fYIQWl3x|)9MtpHc#z0JRWTG7avyS|8?-48_RDN zd83E77M=|L-FNrphgtKFE(p@FnfgN|OmVgjTaN66-W_^Y{n2(zY`;?8&d``4q_6(* zYV73JFjf6s(;H45Zah4*!th1Fx0mm%1s6&hF1oeDH&p+yDjKc7ns@o(_J1;A_#J*K)@(ce3 zSM1mtY#c8Yu66%?x+5>CNBYIYKr5TmUb&_X`IpqxEvk3#_T<}{G^M8Rf%20FT^53R zM^-GDU|8~YUc}Lcl&$KM*^0Lw5#5sNa)*Phd7?wXIX->=J>Rair!Xlf_H#(Y1vjT8 z99f`r(BdqwMvP&cY+0k*qEe4NeQ!T0apf~v54mA4s1?;=czXS&fXj5zPltI=EWA2z!Z{wnGNq^;;TG?2YP>llQL?Og`F5%FZk=x; zl07@78Lf4B&>8+CFeCY`!mL!*Syp-Ss}JUy9-idH@$6mOt;qQ%7i@4c>n5Y z^GEy0+bY~r{W9fszJYgymrZ=|mqAo5GJ2{@q-yoFrj>qf0T&j>Ucag+G4l~&&vJzG3RXgvft60P4CZqxBhI{N$!U5U}Z&7qbFO- z>&{==lw)+$%I2M*!1E5d-R?h3jjz6&v7a+9Iw8iur)$FMleb_0F4`O^(AUVmn%A5A zNI*{OhgT7K?}a$!9lt$Nocr-p^`G=oJs}pK=6#h4^K%;I^=|J=kQ1{k<SzF{KKWD!__juU``MJV}))d@7vdAjZ zEo@ErvCMuW*=5EO3;X`eU|e09D`rp_^D`xNy)RX7vV|vSFctlBy78=h$=c7eKlko9 zd;aw7girc^PXC$E@K@=-k-bX7{uBGp@Sj(I7xm{4W9!f9!d>xJ3k?1jIeqkI7kL)% zr%~6bKl}UBuR_x+WGdE=x77ar&~D9uU9%Jx~wyypAa zH!ChNKILN&?{|<(*w(myp_k*Fvb&$9xQh-gV=0w?`3 z(qAr|tnS&cU9ji6WBrw7G6J$OOnj4)b~9XW742oa$J4VXs_~MtN$AHZ>m0+jynO!f zp@Nx6in`^Sh{bPMKIq2jpL2h4(Qf9XentHW#t{rEQ7rBG3m$N%<`nD|G!Sg-JMOY` zf`8z)>DCO3mVLI7)fS9c)ikAt&sWXv=1i#o2jtN$Nq1n%lw42 zLPWQE3o~3?c;Ne&_wUvwcWM0gy=vU@aP5NQ%N=!fPV>p#-o~?^EDtG5QS0`}Ssu_6}YhJ+DkAKgY8Tt{TM* z+qm8_Z`Tb}Kk%gYk+`C_PVMG9?4|9@2UcYJJo><>dNoW?Q9AwQ=b1_TV!a734?bRb z%|XPktuwPf{$_7OOm6*Rr3I0Dypq-$2rfJG{DJ;KcF~)M9Gwp-Pjzxhv1?9b33&UZ zhhfrb6^>5HLZjjjbxk{jvty6>@@d-W2oxy_m0imaJ)LyI_qP6lDp$eTiXK64MRK!! zcQ$CKPPrW|t9JOWl}+eLmKiN~m5dFNoGhKr-b!_xzuNdJqtlG(X0I1DN1tu1-Ywzv z+rW!AY?lAaAG-XDKVQ{emLq$l>G*c{C#RZ?Eo}CM?l~8GkfZzKqNakce9MKn1(_z^ zo+^BB`n%b0SPeZ}XDkd^zlWRI@YEERi6&1qt^TTRslHQm)rx)PRvXRsrBCMmA!`vjplAO8Qu?tyyDZd9Ew_VqoGm#}B^Q6Z59?GQT|gA@}7rS-w+? zdG~pD71XgSJ?~ibg0Exas|}h)ObbLzPUWXEGDdUmFHl<1d(w6-L(rYxsUO#c^1RZr zKO+6zpnp$L#F6A_>*OYCM93S>OJtXsz{J`X!s8OULQ$JrXxD;fxrbLu1*AX7KYVb4 zHKhNWzOc6L_SLe22f1@6v#@SRE)hCva=kF|tqEtJj$_}g@6sM8g?wa~XM2?%416c` zBPp=$`4{h>>It8!XR+SY+?jqT`pO$Md(QnK@BS(NXudbyZ_?UJj**;O;(iC%zE+v_ zpvNxhu(mjRhr$|nyLmqr&SltN>a)DZf9cx?VN)M5z0nP`Jl=9Uu1jTF&YDv(D+~hP z?3n2#vA3|HG|=evmN-FXBi6*UO6fJF`-H;y9h+0%d+ok>&taPOg~-yQMQ7hHo&87n z%*^}V=0DYE7~49w~=-8pkzGxw5Q#_GEF z5$iRz_j1h3ao!o-y&=lRAfHJf;nLaE0Ov5L2^U}Tp4hD3^1M_>=l>EPnV9rrhY``>6vQta03$k^a42Dy_lfBxP|K67fx1nJo`R|+}mBq~(up552E?$&O0 zap6GO_^Ut5POX>skUPS*ntiE>%~Z3tufo6O?2;2Q8n#_2z0JT;YJbQ}YQ6jitL78y z`!&?ExZ5YJxDv$XYE%1{$TR;%kq4>q?o$Cf!2~` zkA6(<_;vEfg%u@&vd6bdbzTVTJmKxV$o9Kq4CAa11rb(9BaZe=sL~ToJ@2{4B}Ga6 z5Nn~O#vQpU+RGL&ySp6}I4(QGWlabB&4!o*zmq!yPoBEebgW${rDJ!V=5$tBA)|;> zt-OC)8_QVRW0Mlx=81Ri*>mZ0t>&%-2MdJ+?Uh`SpC`V4yk(`}{f*WYS--vJvhaS8k5lMuPSUaoP*RFmf)djeEf z>KJq{d~Gnj)!s34hhx~RKM2c{jzajjeJ2d50M~Y#Z6b zn_MH7=D+yUy!2pZg}_?@t*>l$Yv!;m5;`CGH1WU@hMo-{(6;J@nW9L?{_uo z+a7k;I4Mb(GZboB=fBdr%DL1u!L(x9j->8MZrg({Ol4^GHr0M~V)Li2Z4r}MXB#;! zeWf0o9Vj=Y$@ET8xo3fkqvw-cP3}ESPeRjAT=<(e z)80VT`$_vuc@r+przOFQjf;h@9=DWmXgwFy9$t3HHg^3(4gFvj+og-{yl%X9z+vXq zCbql{3$H64EtvUr_AQ&U#}#HA;JBC^b7@WV8F$UeyLT1+oRJs8@ToJ*`K426`P@f4 z7408PE3u7O`7AAN{Q}{}HFxvApGv!6`YQhSU73xK*%M~(-0_z2Mw%Vlr}+uDb>bhI z-Q9cH?8E(z0}Pz2l&v%w^;kF@F39RHZGE|7(F-5v>6IUC%d)k1-YY0Q@H%PwMx%)w z93RuHHyS6#&7E$_eq2wc|50CZ z=cUgp1JV4_&kVe-iE+{Ts+rr{k3T-^yR$mY^v)W+Gc2qP{V!G(yqDlzESMJ=wsO;p z{e32zCRy`OENc=iwD$V_g1glEy;bZmYp9fXnLwgZr41fvj>lg+6gPK`Jo!SQn;l#;!(wg zD{JQ}G`Syp-Eg|%$G!U!-oK6AqVwjqvN64$#@S`CrP_FExyf%E_t{0eBE%RHPIBA6 znHV$ckM^X>Db|aXGgyM9?auBK`c%SL&+_J1ID6JU$(Px4;(3c-$m|v<{%|MNXCaS0?Y!&kT)ZzGVO_opHBQ@)e3kw`6StA^^Z+h6m?WGTn zJ1B=X@E(7bel~i?0r$C|ndKc^x~_fRXP;Kj@!!ybTO`LaGriKgGl%Qc72~M_+h=T$ z-66EpJLk{YkCmOz9P+jac|?@8@A41#zOZkR2GfB+#=VTI%hsI}n7nCG%en0zUKePn zO8PH4rSRwBZFh?nH#Xkrd%L#mVC2xq4QR4+JYHsyqQ6XAwfpF0)m$fEt?zmERbub@ zGz#9b-4|W6PU7k>uT>WqMYtH8op#0XT{&Rv@}cwMCVq#vu0ngn?4{c`^#$+S$M;6E z&=5EVu7b}=Dq287IVr=g9jQRZ2k9>ZccH+Lsxg{$6 z(+)E1WEAIKVX&r0*omp5*|yQ3{d#KD+sBSS_FS@@bd1Ms7aFd7=)D!f zI79RAwo0GK?<+rTi8!`m*SRAG54Ap=Ydums@2Y0@c797Q28YY%o|+t4wQ2i0x5l3v zf^#`FSDSh(t#Fty-^WYKZio0><;^|fxk;I_D%}}XpU#DtY+ie-^7esgkFWTBx$|(@ zUWU7ZNpVHJhj#8#;$RGPYjRn>XS<3>|1_z{hI8_-85;6WFm;En$~&ZyYQ=oFvFOPE zOYfiVJ-6t!-MxL9n!hw_?_6_~J;sGC(YB3P*R;<+0PfZtjuk+Sh z_;|y+>PJsza-5Foa-7W(S$2Jqx8C*n%KEYY?7Y?oZMnT`qqL;Se`oPY?`)GhVlD4y zOelWAr89f`VRsuw1ufT8>ms+-E_lShK;`0Z)|TTpUp`a%!I}L4JptZI$d>lT=ws_&54_In49=`bM_($=|&xYjeYb99Mk* zz-fKqCR{T;?TtFh7Ej^dW0qj_CDG+Ng^kxv87t)u4~WK z9%k)M=Wsbg*7}<*u6Cx4mb3-8msGB}CofbP!xPEn2{OO5i_x&gR`zn+9`LD{$`125Mk@ffI z8I3>B-`;8O&V8o--nqX!@5X$dzrDCV&;0tIIIW}h<;7>;FAe%r4CV5kZfRd9H{;)h ztIWmoc2;aS<1Eg=(=*zoud&ZosX5b_g0 z`X!GkpRilF(stDo4v#a>il+Ika%($s!?}jtulm_Jp%qbG&+Qv_YRz^q+r@X(Hi3N| z%aoJuzl&`aExGeTOv_Mg)p{8Q(c3{ito#hC6`f`r@0-!Aca}4qzl5>)+Bd^DQR;J& z4mS5QKd#uZ?v>Sxp4jbK#j}1fUkZ7Zb@8vmgZEbpPJH~(u)&nCVByAn>(_R#Jj0qR zmE^RbTbf{ zWQ}6R&#U})Y_&hB(D`K*>k<{I?zN0-CuJ>Nv5jfc1zt<07kh)2xty60I!|GBgwz{Z z!Fxf>M?)Qok`iaiDB8{Bmf~D$ZoPNf_3)oc#?C+Ar=R}tr}1}cZ0}vi=(*Jo`x%{A zIH%f*^p&i3G!@wLQIx6pLSWvNV~lrB9Ainib!uj4nI=O9k-`UIRuOpZ(cAUbixN&hXXeE3A6r{Zn8Sw`V&;0dK+NZQDAsSM7Urv59d@ zve&6PnN>N4lO(JQP9QM+;D($wPm@0lvIFKyYLVV@Vh z`ktq({ftxFjSYh?>^U~W@Yr9iNvd5-)|4-_kIiJ|d7w9Y+f!u^@oVLq?}i$(?R#_} z{LBRb^S&U4l%>RTq- zKll|;9~SbuGUxJHcHgXncOTsA^$hhcND8ug+UIpOY>v@+8HdI0=VcteC;Ut13DG(r z?mnxv;va8<<9(xvVc}Lk9qq!{6XZ&txi_4+vGtFo$FB_=jN+GnQhwaVvHktNd1;Gl zc~V_OtG{PG5dM)d_28w{G$obGdaI%&L*AduY?iZI?xHNSX&HCKoWMQ2%moXICa<4w zb)niME%R_GPtCCpn|AhY(~sO}l&ENK;S=N8=bY(j@ptLjU(1pPg6s`TSns^YhHvKT{X~YV@5MZ?;PQ#uO-LyU~OF8#F(MvHcM@OTBlh z;s2p!XQHK*;%`i;%yxdlJ=ccj0d1ix7ErhLHTml-yTYi}!H! z9laoYqJHZ#)!U~$)%6Y+h5QROpP+VLJ5zK?`r36(LN}*wkWD%&RNkquWKs16Gm*tz zXATrMJk#c8Q8JjjS87F)@UGQYnonOlXz)(*+S=&VtJhh-cyVK61?z>3SH2Ipz4nJP z{kQFO+gPe&d{og)Vqz+bLdN#W`@786rC+VS{k5rj$^MYS1M3)fS#kV{MZr7G9S!DY`rbutW&FDYwvtPLi z?4G}fOCtN`f;%l?4bJYW1yZMPzB=YIEO9`Ej%SxC#?!_?OOjye${-Q zd zH9c}y{FI82=SqiGuevT)`Z9X=w*{qBW3)_PT??OZ+jrHyXSG_#wUaCJmh`_|mC|it zU21N&o^gTJ)vP{iez9cVC(*kmuYOuNy|C}!nKe~PtIQ{bhIoga z;3;ij_$>MR{&wFp%8tIXb^2LMk0r*jnoZIC;u?{y<^4VT-6fmCgRiIZOU}D#Z}vWM z!hXe$%9Pg;;jQvFt=O7oxNqy*Xz}^PHADW{?%Vnr6`oC8n|$q(&8AWx7nA-RS!4Fk zC$4=wZhL}#)wLU0^HxSJo;)kvtiQW5q2KjId5Oh zz8^95Cn|-aB6TxH!iVI7$^`ybx28bIpS`v#gkm;2B&nY8U)?nOV`xehqiMW(`L}@B z9cx77Q=5Ax9qjYs`M77+!9`2+?w|b?y<6+$l(aj)+OCOc8i;s$PSC1bx2omLxnsP4 z56zOXKY9Gqnp-M6R`IY#^!HEHH}~~Ex_0?3k(Em_B0b%98aA?;)Qe8}`e9wHcbZsa zsaWi{hKkz@Y|lC~Bsyu?KGf(H?(S{BG`xoDg-XkVzzHWyq?)1x(wnn}>YO zaO?J67R^$K?;d*1n7Keg21 zoU`cPnGJppE^B0cw3jXJlG`K2zVy`P=$Aj=RV7Lo7qz?#nYxQt%uxF_-@$udUf&Ik zicXKazJArc4x=ieHR-Q9R_0`{$vX0j*}Uv^soUa9UKg$|d16)Z@6CpAi?ZJubK9~+ ze#meyv8@oFyz6_y-{kMcN7SYVS(RQ7YVGeonkp)?BdyYQ>3sIs4_9>Wu8nOfnQgb> zk>-76-}E;;iXyW^wzzM9Cb{>kd+VL;uhRL}rg7CNMx|bzy285s!s7s;Rri-#d$tF6 z%op5p!RXAtkh!-~Vxt1ydRbInv;DO0)Sgq^VpD?!O`k;hU0eD-=8B^WYvb89TtTa< z>lU4>U29?5we~jiE|*1IzOn3{r!sDNJv!2?AN%{_qTU%%hkifJxWKl)Mt7RtJk!*# zOJ9a>@lEI1wQlW%RaGApqmI?DS@z&|V3_>8FxRIS-<0^rEALuSrulotO7{@MzFVQ6 zPWz>bi#-aEjo27mDRkHF!p(5!N5NK$yQ1Av8@6pqSiNpTdg=?!wwGUSx&P^R`W2>j z$Hnr^l`!`?-*o2gURWpFyxFrhtB)(%ed_N+B6EUl_VO1B^)cPE*4gvp;|{N>ajITC zr%#pK-E#g+y!hAJ-3mu+iqzOR4EyJFe$4v(Iz8$Co~bwWq$(eTEn}Kf`3Oord;Q`= zr?H_*f}ExB?%l`v@0=3JF!6_xS1iuFUwmx6t?BS z@}_mU!7$G2C!eg%Qt#;*e@P5}_SVQ*9>H02nSZuXe)`70c z)O+{L|7_6u{B7UE_RyKzzw_F!IkjhR{*S~^HJi(EOJ=v<>UQ}YP(3kuUyi=f)hFKD z{kL%}PUk%sx^+9n32yRT`Geo)%<;?Z)n8Y1yu7#Qa;@*` zU3HFgInU*(o-T8hIuaaWXL~L*ge_~;w!3Q^9!u`hTD2lzNzkh)y=(%p%f)u&20K<( zXq0H)^LG`R5ER<^@kWI|>xuQ-{Cc*pF6vHQT5|mRJRz^B+PSsDKd;0%nj4;)w=100 z{p6}B*262)SBPEm+`IqP#w6`B{#cRi8S8UBTZ7yAniiEhx~_3idK)MyBNoBhel}3m zU8I_%>C=L=cv!N}HOsG5`l2-Q=N?~`m6hA8c<-3;+8&`p*Gyko zJPz9J(%-kLFq8k0pXXU&-<4LP*S4Kn>wEY?&aSCTFKk&9J=JH)>KP_-UcE~cv@QgE zy&_=jRQB=&SKps{+m*577TqVKu9kL|fE(<|zF`Pi?gR)5s&LfY^DsblcWICQ`6WXGp1pUVUUt*cZzSUv{` za6Vh8P$aB9pF=62BfY6()%?BXKfZ9DJ+r&rfBuCtd#d4_X{q;YYkqCf`TXwT<>jF> z1?FqMOOabCbie|vH0*2q_P3uu_Z$c5$P9gU_waK6)kg2->}qdKsr>%o<>h5yWo8gV zG{J`W&MfDjZd(R%~GuL#w4-II1DocnuZh~cX;rIvj= z%tEByUAwkVQcixO<;CCp!pmW1^HHz0cciTRGJAQK{64jJj{EoHu^zibl!c0RN8eR8 z3Y$ASau z=Zzn1aSy+KOxN>G#2zWeACF(P_dBaCN_I=L=vvja@|x2jzdIQfiZ51pXK}J+ngp6E z=9}MKX`LO}9ZWfGOf6DjNosWC0g(AM2<-9JM%(uO;@8pF&>6`XHQafwx z`XheBvxzdkpWoR|^nZ~kx9i^eM+eS7$(Yr??z{iz3t#Kf<#yfMf7bc>@7qReH*ksUwe01 zTwP)rb6n(VwVze1mD|=hdA>8-E%B;Jm0{&+SxbXuJ919%b5odRba=|WZPR{rtv<5n z@Qg|CdMZ*3=dLPj>f5{So&MC!9kngoKQ=P&{ShLnu=Q7nX!+jxQOmWC^p;BRYfO(5 zmDskw_P`azgq7{iQK3;A(s#FVu*7WDUgdY`o1E>F40l$!%_*UC?@w)AT*dH8scg1L zL$=lVmW!KDSYa^ z9$s+`t5uk4Ehf1`=>L_x4bxWUeF#mx@+&t+_t=BWd-=DPyyo;N&)+K|dx=5!@*dyS zD%NXUb0wk^m*ziaols)FVnv@}O#JaxZOz9OJ~U@dt^6x|BBu6ih)JaAgob3FXx6De z&hme~9pe47^i0Wyb~CH6i={h{9W=Wl674#>Dp37tY`^UCbrY|&_b-)OwQr5kirkft z-kc3!zRG8#$gpSi>DYX~nQebx>{0AB4mz56Zsq1y)df*@lS&Q+RTmd754_TLz*RQw zUXYYx*6D2Rv-IY*cKjOKs`mHZ2c0>InYE|6yG%}8 z6*rZ-s};6eAhU7W$~8`PTYW)p|5M}E-^KRL%R&AZX zcy-tHS=?nyzIC~O=T3j`T7Jc#Y-QBkfA_ZB?(Jw6ZjricH|gB6I`3br@*eB{xsmVZ z66BP_G2=du*5ZgON;xa;-MPdse)YSyYx|5J>RUgSta!V{@W=JJM=Go>ncS8}@6wj= zQ&n)_+c>#N_tooHw+>i;_}Fo6RoAv4HElkHDh=(t1sZStdtdhkA3U@>bAjLDOaB;R zv!5SLx*8MQdOSei^w2RjgUc0HDkoiC^Ha?9hViPUe@<@K?+RD74$;hixmByZZ9&ti z6Y7t|KITVW?b&F(^ykAZx=NwSd0|Y!ui2a%=DXDi-0w^l%Rig6QR|3d=;OlG&(?co zu9&8GfFY~4`xlo($P*_Q_y4{vYhJG4i=7z1VHIzu^12|kmbGqt1zva8L}wicYc#mG zatd#p?W)W>A>GR=&L~7&SzBkPvCHb1*81`lJ-uR@IW=efADVwYaxZX4^cwy*vWAb7 z_pPj%R%gz8)TX3XcV_##^)CbdOnjYv)uyC27sM_7eBtZXG`U^-rk!=Zetlczi(j{l z_+#TgKNHM45`IQ``t=Q(pHDnB%{gULRO#Ev+#eHndp;|ZyoJ3x2V z#eZ-M%xj1eJ)M8^*BY@KFSki(yE*8#(1;VET6{2sj>W{OK3>msr+o= z4|mmLTyvJb=22j9(tW-EYKrudn3|1l75~cKhRvJ3ivQ7ywW~ZLY}{HV$=rwvK5u-r z+2WPR^UteojJ;z^KP(Wsd+^R_m(SN^cCx+}JR9`CV(t>&uQRWlY(1B6uwqu``DYAOSo=-zs~&7ZnmA=jL^SNa^+5~Efm#% z7|;B{bg}e&W{;mH4S$X^7#xWRVZQn5L#k$|z)G1UA-VmEb!$p>Ig$=95oq3j`l-51 zbU0IIUD$PT-FIE`8!O}wDR&)mN`0E__q9FHkac;k_?$?FPpg&eZ&h+jzhVmak)3wD z-Ra%6r5%x~Ruk`kFkKa$*_V~Ea$lrnc8jf#*qQ3sCL7}e|F*Cnnc`aBsK%AJ+;{4R zgU@!K`*SStY1-79o2MR{SR@3RE|0rx;Wh229Gj5-S+DiG17{Ro*WJ9VZ|Mw?5KFC#W}6FUE)>x=Q#sWmU1!Pv)*v*soX>Pu zYou#PwD0zVyptP35_U%3NPMLbl*&`ecQZ!HaXYX2s?^Kpe9c@Z9C*C4XnEO|52v_R z-I&%LRxA35FWOxBYGl;5<-eBfexPS|PF%W;|FNHe$ektEy8gHHANtK1<#Eeq(t^_0 zE`L(qE&ly%+x0(cUoW0%pS0ynordS>E$x%G_*7_kp1uNN)M$8~-qAj3OHZ|i=jlIY zCw{f*L`u7aj}MvN&lZo{9fNB@>~Sw zhUbgiU1#w*X$J3P0riB$y|}S7lC%+GrhoweN{ZL65EX&#>&( z{}^X1YnF7}vvJiI#;(c(#WPl1DvdMmSYU0XvP!Y}70;IS+3%%0{MDx`Ufazr1+IevaXyGmToD!x9g>_h;&<@ z*4vwBmtMg8!W<;@PqvcC1^r=+})a$y)#JU3oM+toOnU)oTfkub1B|I`J~= z`;BP~l6|XWQm*V+JvT&P$Gp%kfj2AUnjSO!Wc<+gjN#s2b{iM_1LTfcp~J~RG$nA_$9Kdye*{b&cXG57Xs-FniA zZaaiSG~1u-(fAv3{$%gGhd11g`@iVfv?}%170U}3=5a66v3nYF&~eSe6gl{+_Ah_&xK7z&GP>if__CIo~+{q(3~-ZkT|j#GKp_U(=Pdva<^=E3%}j2F8%)ixY? zQ62X9dvItx|DM<>|BtTphM8gQ;fEq!K2|JQ5t;mK zFVovlhP_x`4Pq9+c&T^}=7@A;g^R}O`4ee-bchp6k1g18r5 z`Wx7N>(YYAUGqyW$z9x49oP78{iE+Go>McAu}m~}@fLlruwl{7q)U!duUJht_%C+z)p`U3ji*IiGG;M9Ky5Ehn&MS|f z{u`_KW`v z|CT??;kCXlX0tza?qZK3JuA&4al3C6hGgZv%X=Gm|F&4jj)!MVyi4YXN2{7?TMS_!^?|7TYEui$qX^IrN_t`D}qIDb~QsTcIdOl zRnxDpI>Q{Qzdm#(`>MFO)kgdwd-sH;-rKqP+tH`9*hF)8ipNU4So|bf@A~&u+S*a` zL)P*hZ47)KVYp<=lsA{Xw!PL7z4vL;<;UU1&Zhn1Y)k$uerT|wRl(iQ;g0aZP3g<) zgp<6Esuab!i%T9_mHBPom8&Ib^L0!1MlN5qPy7Bnr{^EO{byb>vHs6-hv4N542&(A z&dvdz&d#v2G8h;t=G0EK^*HPxb2L79sjF5~nLy!*fVnzN@fO##L>4-&6pbo1*!hKf zmWhg{USCu8!GrxrS2cHUUdOktN#O_MqgRiXyiij8r?0uCGt~Z~gpD#Mhbe>0g<`|OO{#-th)=`7$9o%ERffAjsjvszDbnrn)%?~2d)oy@}VhUx6C+Rcq=kP zB1$5BeXNr6bM+Ea@{>~aDsl@LK)}Ynq98FjJGDe1DK$Ma&sORE?)^#%nJKnP;ikR@ zz6H*y8JQkcMXAA6ej&+K*~ykEO7?bKHWgMCxdpkYC5Z|ZxjA{oRu#5NU~{eVimgDx z`br95B_-LmN)f&R3eNdOsR|}~CVB?Ct`(VOMoM;E3N}S4X;wilZcrnNQqpXdGD=Dc ztn~HE%ggo3jrH=2()A53EiLs8jP#9+bc<5bbc-wVN)jt{^NN*0MnKGPNi9w;$}A|! z%+FH*nVFcBUs__Tq{OA5pa3jTz^4nQ4ZKUDarb&IjOm+c_qdAhI)o5 zR=Ruo2EcWIf*?IJw*aiGBDVlVWl3flBCt?=1CjxI2iYMNxdm`@QB=eH4ps~fBP*Bu z?w$%d&$hRJ5S$tjj;x+clVX1YnHmgc&~1}Vu&MoB4Y zDXA7nMtSBHmn7yTr-F>C$Su&z%uKOLGqA8QG&C{PO*A%0(KRtLx71BCH8IvTH8W2( zFf=huOf^VCGQz(oGd(jeF$dXIAfr+;Q>>DWQ!P`IOe}QMjFMAzO-#%UbrX{;Qgsb1 zOcE{9lFbYaO;W)|r6gOqKEjtgC#%#Zsi!@X{%(UXMhk1$Vn_o z%P-2cRr1NqE3H6Cgk+jC3&rOdsM!8+}lj0rRnqK1P^8 z6d)Bcc3cV&u^<;WJ1!f2a7hO$^&kd3IUQ7kESlF1s4~hJC&N3VyjfHWN&xVeCi$s1_rhyZ+91l{~)+v@AAnE3=EtF z9+AZi41CK#n6drN%6tX}2KEw9Usv|$OdP`e7AK{ha~T*E7(87ZLn>~)t*x#Ixw`Y; z?zBl0COC*Nx`r%KI?~0FcIdlK1G`w`#+iNfa{{7%oc}ntei+9@O34Dw(@krOxPpo5>$XSB9)T+>RR@-~QFB zH(&oTZe#ItKRyQW*b>3+tNKRpv+Xybe^=W+c1U*SIWtLuMnuMd98-v9Kc?40XY z7*9MAHxOow-_t2mk}=UD{>Wd3$4`3;_t^N1DW) zp-{qBaU#FQR#@_}@L{f;s+@Ss2i4mqp4iwk-BZ0|`KG&^KhN8KkC{{bZfAgH-{rrz zrSf*a-4=2Cx0>bpeNW^qi&PjEY}gRs%{hhjz`JGJloy}km2b5_%M(4B$Dpuonqb%w zf!Ue43okKTTe+|!R_!Ra;tn|n_0K=nmW8dmuk?UXZhM9CrK4RvCr_R%ygUEGo(q%r zZ`dHv+S)ozDd9E4wyKl)Ie8V%zyB@x`Lp(X)a|-5?uOTlaZDdN6E9ADd{fK7Y}Lj* z2e)Is(;uGc-Zfk9KK}-R*`3=ZjJJG;v$>!$&Lhiaa;d_d^6K7ZChYG6ORh#7VWMyR)2po_;dGdhaf@fc) z81iq2J$ZSu{=or8h6}G4TR3JcWpdIvlD&PxWsbr)hFf0+qQtzsy_GrgrZRPWU*zAg zlp*KuFM&NvB77y^TXTw4iO;#ub}p>dyIk;mSkp)A10UrM_)C;?2(?6hx|Vi5>8Wa5 zy^iJc?Wf;9tzx#kmsNi?nRCSzM}eq$939u)o@^IwaI8IlaGPv`?;*9;C*Ds%alhU8;?;o`JZP}4h?})z}JN~Qw#aVG{2$J z7C%7)rTuFe_H5a9=Cb_#n2-A=Cs^E6V9AJYZe%G;c8pT0do9Lje0#kP!&=$5r6LKF zh0809j|=m-E(qmkS2N+ARc&Lxuu`y`vBEZ=XMgdz=oHmxqgjA}*aOK*8NFmSLiF-TRjzG`hSW&N4D!;@XE;sImbn;V8YvAaz2Hfk;X z-EVKk*Kp z+~mxBFK2yXlE=*H^N-vA%8?HiopgSco=d-+?Utacog6kF4lu`r{#)`-WQmp**@`TL_nHAj{!1pnM!{-Q)J%U|Z`?f$xR|9{>;_n7nC+ykpZ zS4VAmZ6wsna#bcSltt>+yPsF5f9?8}b257N!FM^FE@{rzV1oz)yEHh+vxJ@;p4I`_!B#7g-8oXz~o^*5zk|L;Cs zXmfBU$Ci*qvk!{DmihN?WAl%z)4v`%9{;9O>HieNaHY?mKJU=_$(V4sjrYy${Cx-S z?XAAJ*qwh);W5cmKetYg*gWZe$Dh3K!J>=|8gGs7hW>eHXa8U~-&Ko$+)^hl%PADq zUp-&rS5zS?Sdp14DXcnuMeFdi&pveZGUCC_Qd)o z`T9SGuN0quiF@#^B91-yuAOmz*5BKlM;^>~P!Mpfvwiurj)7Ba=|j9?t}x` zHPOHSt=-G#T*j~}`_IaV>hnwqSKeOd>}37PI;X2aVZTGPFk=zJ#-IOkT^YVOSFKGj zJ>1VT)$72FepUk|dxn-z_k;SbPnKsm_hvi8=hMZvUCx`We`4CTeHCw*WAL%+z5lN1 z)RhUumbpHc{kiw5gS_&m(~}!CtQjhexRh^{zWRB%R=M)}^RrXmd~JMwRQKPu+j+$$ z!t0~9b_LeF?#s{SbKrS#k^hb1tTTtZ{w!U(RPeZAx8WKVk-HVWC)PLlALBg~nth7r zWH$T%y?+b0EVBQ?=dgq^`5#lwl#K^W{;gWQuBeDPutvH&zq`-j-SK?$Yw`2FP6Rhe zb~e1MVQ@=k3@N-i%c#aEFF@qy`#Zb*HRD45ygZq&!o`yO=WTv{cZIIpTh)DQ53cCn zFZ%QA%O)Gk6_XfFC_P9!=pD&2XTp6CmX1H?PS!u}HFpzyc1$`yNBm>%&b$NXzHx_y zhr4q$zF|ob+%Q-4#_1H1@U@!G2fzN6ooK(KAi9M^Bu0KF-=43l%{w3Rc?Xz3$$a}U zcj1xkRr%t=T&;_?NpgCG$R1d%FA~+~yj}Xn=NH_qZ{GcF-VrI=;PvNEwRAM&x?k@n zGHlEAd$9QYo7qhAbw3`i$o>5MeEuf;^*hh&b1dF|F=_XXeeQCVM?!0|E$X8+KCZpD z`kM5O&W=RY1vgVf{GKr%*x?}{K@aO0Z~KOypPwiH{q;5QwtK(aU6uN{;`#9t zT>j^j*RJ}g`}a@o!YAdg7@mYSo{i$~nZ~hQ<;vY;_K%B?`#(M~F}c8a$@T0#ciydc z`d9h+S>fVK*Li-4%4+QUdNkPoz>8fB6JMV;kQU1EUIoe_`j0Qpww`xk+r?=t3ezrh zch1ZZ*vO&6kQ=}d;`o_SAj&?&j#-Go>Ga_r_a18A4SR1?K5K2QO?@^yCxfH%sspcL z1Lq&^JK=Wx&AdxLZW(Rc+W$QN=x4?sFTRBzzH{(FG5g}H)54V9dLDpq+LQP5F8$c? zeEG!RYwn5OTPMzC{Yjp$+^tx|JHwGr!QOtpxy|miIwJK}*;|)bMzJtRRKK@<*vlRN zWb-zO`uUZgpMCuFspxcaSXkJiB}-KFKDu4kkMo~v75dx1tE)@t(eC98`gNJLIxma! zzSf^o-TzN!n_oi$*VK)FfBl`V6UoFd!zi^YGp0%O=jYF#85s_@@jgC!^yt}N$4z7S zixnNtXueFn^ygLh`-eZa{l97_U%h@O$CT;QlTYsduU=PoUFFOiOXEkIUAx5|Hvdjn zT>WXk&-u5e_kR4UZ|&;hdeNfb#gg=K_pFKW`b_0tSo8E06a!Rk1uTzlpUW}hD^tiT zt~KiR3?ky<=DRtbJb!L2%J^>Hm;Fovad9zf_6&3WZkE<{bx>O)Zqd1YSKZ7%3)%%Iu-atuKilkw^wewDD|bkpkiD?OzOzB(LYt_I~#{j%0(i;i5K?6!J!)i1rbrTgpBlfxbe%#W6<6|Oh9-?Hcas;xh* zI?Idx*8jRZf6MjSUtb(ULq+dz$qZ&W`1H=*o+Cw_`>Vun#BV;hTdn=%-UpvgB+IPJ ztIl1X0Vcr^MRsN1=*cSML!-rdbI3^ z?hbLm3<1rlk260Sr=L5r$hF&`=0}0|rSJP5&FVOBR`+Y#SM#6OlGXW-R;+$K-P1nd zKtsp*Z8GevGd*(itMr7p{^~lZna^MUW}I=AeMJYu z#QSqOb~JAIQ*~Q^IrBD62cCo-E0!z$)LmG`!z{Sr$n5-mot(mI5_M|A``=wD%=xpW zFf)JgAA7kKmW7AD{bF2@e}CV!Ble}QLR#M5-;ybOyXD4~i_)D3WNR0n%nuK|5%=)( z&n=!dYZA6zSU$(?#J2iVQ#6+aw;t7I?GR{Orm{a+Fe8KSu~B2nr7uhYpDtd1wdDVs z&ntZ0`{hFaFJk-HuJc24-TzzJ>s?b*mnLS$2L%Z^R{b@U%KE&sfO*lQb1SY)kLKYE zci+`&u620H`&oB9%KlcrVo%Uz3R_~Xyl>yR17{pH%$bjQv9$3@A7ho=D|hCsVMua{ z;DyO*FOOV5rCOVsni^tV%Mq~cZ`wzMx-;j|-TcPD=k4>Kes`%Wo-%D( z(vc294K1xA*DBFPv(IX{)OWN9D!YAHwMt8UNoMhN{c_&05(Xc6{iLUA4#uChe|xwm z?(tbQmd>Z2;=>k%HN2R#B{u&5tJs9c)y=cNvQF48Ju&LYX(b2M{kw!SvM$IwcW{Ta zF=g{DkZo3D=~Qmxd3BsIAvuzjGgjDn>y`8w7gqhBeN8W+P`u&#=VJxSy_@+Zuk=@| zzMbIs_eZR;RG4_wo&%pMf|vOeeo?oQoammx-f_8x!OxxHRN*Q^&W~#Qg9RmwR>*&! zJH1n}AzQFR!MSESymXh$4w>arlLhiWS(h?NpVqn|(D47)(V_?Qc#bP6Os+rLCCbn+XO4`j zU_wu0aem*ref#8YZ_7Qr%y;&dvPy;>e?FZyEO_AX<^BEpZ+)d-&Y5j??~O(7+h02m zSw7NJ_~dnvK}IlY4gUfyiG9ly_TMeDj2D-f^Jwjp_>D=dMMXsuCQn|>c`(+vXz@AW zkLS%M%r|7KJXQ5E%DlH$&Z2nKR7u<({3L-TvoKO-#{A)r!w& z%{P|54%@Ce?azb4p67D;HFA$XSO5LD>iT)nbAsP%?q}sPTrFj`xz6~)`a{QerZCx@ zHPb|y8_t|Q|M-`yQ_5|AhV%R4#@WX9&&{6X8{O6q|Hmt96{0CSLAGgX^adFo75`rg=QFsZ zI!)MpobOS1{55X*`i<rQLgs7hV!PMH?oRsk<>ie{soY`f zVme=5UOqdFruww#KQ9Ptc*ho2gjYs2Nw!69{#Ix$5i=x0Lzyr+gGz}Ira5yOTzzu ze_!0(yj+cKbJ|&_+FILPB`+888r|AkZ5|X9WTMy+`0~lJl&klzoJr0+ZWCw!x#I7} z0{$~DK5Jj8Cb0!>I?Xceq*ni@%jZ8NyOjL>!<5F{BD6+lzW|eZaN|qa1IOdvTs)Eg zl;Mm_qd?<9-mgs2s|25NtXjR#Sd@{`_UBUxWA+Cuhi-LWvQ<=M3=Iv{(9${-nLfAG zL7}1F{-4D4*z&nqoKL1q(N$&baIbYMUUc#jV_>sBi{p)d4hjjDJQ4hVxekYY=GNHG z#3OCi)7?IodBVx}M;IkK56pj`IcMLCgVx3$o>v<^u+}$TWLBRX$y%NJu}MSFK>2@m zxA=iILIF0jZA0c9Y+z*m@caIMx$NufT+`Cjw6wJ+&Y$1kCu{wvOM9Jx7vm0B&L>m; zxP3g!xxVG0Z^hh_m*i4mgmD2_lL6=+)SPRu$kZPKnkdXTK?VB~R zdD)`*A;o87Zd9)G$Xe!+bhTpnb$;>d`sWr#`3n_`E2#a_(b2iWau zDr1T}xqs=cMe7{4$Ljq|ed53W_LM)14)=+(8zdZHSh8fvgQ?+h2gBoQMO`aqb2(UZ zXMOol#Irr@##zIt(_gFq+C1}1cyeOmGN%Mqe?En4N(*LvzI~N-MH&A!YsN|7(y6EhwQ=iWGXd=-eaE^74Z$^@tOvL?|u$o-|(ckosl zOVeJ43WwtJ><&jZ6bgow@|B%9ckUTOKtR9&omYHHc?(vp(ps{7x%9j2FOeITah*Kr z*=sr1epl3TI|-vZaixz${@Bf5{$qXFpNV->(pth9Ju_A>>0KpWP&j8Nw-_@++S79d zHd=<(*0b|9c-L2#I+vMk7iv5?Sv`Awzl>#5-rZf2@3vQdPK&90I`!7?rQXw(bWJ7A z?@W69YI{}sTO*Ypweub^F0eiS^19L^PX;N^-@C8QUzC0Lm*sPXmhia$`3(6M>+E-A zozrG$VrW?XY!A~D-(Wj84PKdOt^;oE_wzNh7%m;CRX-~mo|m`o8n>afwKOX$tKeec zquWwXPir)6W92@yR(4@Pg?!~sbGQLV|5g7e;B%_zC_QGqw{dn^ ztLp>t;JU>sOur`mZ{^-}h^b&p#7WK#CJm)b57_Nyg*DxpYt6_Ye^+|mVteBmtpDU1 zk|$RFeRg)X@-fAf^mO+gyDRz0J&E7m++4A0l~YpHq}S5R>?A&w9IotDKO$zdF*I6` zCzxS#RPoNtvs`hH_wO+~U+{ZgyHSFu{+j>tKMU_{S#2z5v4{8m9NBdyn}r!`PyRo| z8u`PW`Qv))Vu^RRqmy2;IAuO~GtJ;8vIK_0P}EeQ{wSv)!*;PNTn(9BcD^ z*e_kaT=;Zq_@j3Dx&tc$7f+ZwSND~GLDm(Gw_Eqvuxt`R&6cgReCPI^zZKX`=kYpvaYOHQOnS9dyV>W zOZMk?3T|qyz7ZZ*se0+|6+@oWa?51=GbEi7+-e%dG#^H49^)64Y2m*wceC4X?%^fx zuUN`md|f&OlIHr?^pKadA*K#GXGy43SWHA{_DM!Z68~%_3q#} z!2SQxofj8H;$O_&}uCi~IfI(w^<7Y$36sHmu^&H9&?_VMyE-@{j` zmnYrYk~zaHSITf{@1YGs7qVXEh}u-7v(3`3OO9kcoV@sFuK(KWE(>=2{y8I7Uhk*& zU(IKQm6w0qXbY-)*K~A-aeCjks<)kPh6Y)#ALg=f@8zB+dFIfmjoKhDKHm9!9(R33 zJ*Uy+O%2}}>Xi1Z?^wNR)uD;X?u)d3oUvl+tUYJ-S|=nl^x+)6lY#eLH{nI&#i zsDErRd&bb!-92&Ay~AG;+n@DKpX)H6J1AhzMfUe!*yj1|7GNk)Tfe<$^4tcwUz6;) z)EWN8S%?Z$+B2l+o#Xm0WX1Sl@xbBxg-w&a}DXI&e7j%`6n|ez!qtufUweIy+jXng9q_Ye>RflANO#|hh0D2Wxf`xm zIDK|Lqn_YWwRqV9v-`7ezkQ&f{+UxkG0EV|R ze_ds8zHR&A*r|Ju)W>{N;XRgltYZCQ#!QQL);;Ic6~uV9MsZwuUGU)7tHmC#XYj}~ z7#=ym-={Fc%+F!lD;b`H0uR13DxM3BjeV?H_xZX1#okLj3XB|le5}C5keHOm8 zo#BE?=|+d1E}zqQkpBR?nyu3P`|aM6kr`d;j2X^5B;J1zuz2=>D{bp}<{ce% zI!v4n(aQg?@91pZF!T1?$A_n<{N)S`m??3kz>Zfo4;EQ74E6wVQAClu0A+f zkx^mAg!nR6H*K!q@O5Gh3-Vs>o^UXzs_L{qlfwpY#)cEA2XkZ{Dl2z>vr^s59`r8z z&l>HvoAV<2rpK4>UB7yHh4$_BQu_OX_rI>%(bvD6xub@kd1=~`J1p)KuCtj$%jr0t z+8q7WqG6f|-@)As6POh$+!X{isMNbSDqU~tzMf|K*zNY$+dX~HRqnltnsY>2_PFn! z+qHL>Fx-66xj#|Ap1u0V?HgyWCz^k6P88kuu>PRmJ|=4mPKJZ4_#DI-7r$-Obg=1M zSR@lFbi8}UMzw9bm@|$Xt!TgB@OkkKTfX<7Z+{S0`zCm{k)J$YL{w2Vb^6y=5lE#B^}qlj+qA%a$$6I@>sHHM4&7ww}&To$Yydr8X`W zU|G$nm+bmazMjW_`Q6`E3KxV|SpT&2JHw$=dqkl}+J4?-4grpDs{7^K{1miUZ|o}7 zX5*8Qc*@Y@a*%7&?0`~`^B(_GTy6M8?m_)}R;KxS7woKi1TFS_DCUXZKFg)SAwcIR zV}upsWye&bn{x%?C)8hB;#u)*X8MOK!TvL^X-Yh7b#GWSJ?_{O-G|@Z1DcdI9KS}p zGBlL@TF=>{@o9H&=g$>Ej{oBSeVQJzDTOmDE6X7Bl1j9ogn6FK{>raeJ~Dh)bZ7Uq z<}lhl+4-VP=SsqKHKx~je`U)9qRLI zgoM?64xF27{qdajdyS*LP8QGkYj!cX2Q+2hWSa6hW=_BLmfA^|*b+qk-e+mb?8|S9 z&fhEg`r6v=8)D*&7PY^&xc$?O-uB?e#$>O;_ewDj)j#Oob7*_Q614t=>#Khs>R6Z@ z?{d!I<>=bUpcB2V$M)NeJN3PBf1kYn*+v#8X3#V*+wT{18}>b!uFd%PlJJJcH!=-EKT|_YcQky7 zf6i2&cV}OT!H3iQ%OCHn{L(JW;igpZdhK?%vn)Dsr;`$H@^DC8|7D%aS#UWr-etqQtW5am?ecD07#ZIXq7?+QnS9qmgQS}q+j{kd;)Zp||VseZqYYc20B`BH8x z@1VgebCN;&;)i`4GNvEJn>2%$X-q%nJxwQZW1qUfEv7a;St-XKmo8mek=w>3z+&Oe zd_$M_TUF$Y4>d_QI9u+q9_KtD{zZZ1{z}SC_50aOX7ej7QdjV1j!IoVQ3rz|j z3pXxBymA*P7L|~`8e#rm#-Ej*53e^`J@~`*tmS|cPfB2cl7ic9j+SjFDV6 z2s9oOQP|n2k>BvK^Fd8=1j`LC=H2so9xP%1G(Y;>8xEar$JA8SO`A3qyxn?T>t^}h zf{qHNg=;6>UmN`)bLsyMx7+8#nl>sn2sCmOtz$`6mf6A3{=~e9LB8(C!fy->lO_p8 zGfwpWJ!z8A+l4~@3R}!NWbUtdBL05rbLI^~jTKY>xRu@SEuH?FTjRU>7IBHEKgvp3 z>=f?oIo|E#RXvyE!|j8W6W4hboIfhlUUy30<_q_`sed*qYzSvm6u31@c*A`D1#Sm9 z?_5+6_*GkLr(nr=JSh9(>mM5P{yjEbchaA)!J#1T)9Kp(U;P~7KS}#>y|U&!cAxb} zF5A}s+6N=V8oo39+veE5;Ip;_Q>lfRO`q+)<`rJ6%6#jJ7+9Lhf9ua_*!Sdmw_}Rz z0nUc~;@f@~Sslpd*AGAK&v0kWxBqvF+8ksBcv|K4PWmedBt2&NvSBX&0dbbYh6-Ek z?ubU5{>^=8+x>0YA9gVOQs^4y1SI?03PI&^y6t^#ICfYxFSsnb? z3pP1&JSgC4;C{qikvnhkGh3#GbI-Cr5H*pRabecQch8v>n1nf=`5oZXjbm8mKmS~O z-OtqQhkHIgR-)P#xpmbuj5|dNII*XmGlhyosEY2!VwO`Xepm5f10*1HSH;iN@$-RSH*cceBF_EcXu-~>@I(Q?9){3 zkD0d;ejVpvVg0TDjLl#c^MPxOJ6xSJ*YCOO$MSC9@4U57((mUV+H1>~T%7CwtDUn& zLh;~@SNq?*N~kV-+f~Gnv|E}(u;S&?=@U#p)G!>lI{o5&H-#gi40jeN9)G^K>U*C6 zW8(d}S01@@1l)S?;di`Eg8W%iZaN*y-e4f#}m*y-VTpS*d(FNW;tzm)}4CA|mZ$ z*zsbahcT zuTZZb(D5T?jkw0{1{Q1XJ99K0bUa>vsXDXISaAM@SqhWyd+_iCH%yCoWMSHR$|50&Vb> z|Gm3`L{G)r@4pKR*XM0JZt&~xn>uSI#cNNl?>7@_oDs^@H7S0-)rVH`xDHQYb+;v~ zt2kJgZtO1Culn+W@ga*&?*9dKH76F-{keJlbZkBU{`>q4D^{;=zW=`c{(JY>SlOn7 z3RziMFZ7hRaNW*lQ)Ds}XJA;gCH!7qE3dTK2IqD@&CUbIHgSpF`Yu@aH_0;P6KGz9 z2Q)z=$Q1bL_uo2DSu)oxhrfBTXpD!o4rah_;ez_j{mFK5d#5yssjijH5|!ghAHa-3Mpa5{V) z%kR3$i$fb(e{O$oBNXTLW^?V1hi%e3Ja|L;6d^<5D-TY~im+mO$iVW`^`E}W0nIr& zYyA|CM6tYi#V(XoE6go8;eL8t-Mmki9t1v_{)%PJKLOBizWg3z<(Q9&7yTbx>aM;d z>ylxtq_CV}9qWNqs|Aj0xN_8)(w_9Q%Iz_B-u%z)$^DJV?U}##$yt}Z39!@G&G*ab z3%bwqt5#^%E46LHjTMvXy|=o?Ix_b?fByJe?g8h&jrLkL&!4-`Z=Ytaz9mI)!&{D& zQs(22)WnoF)IOiM;`}4mx`}KzO8M;$Kin*LW$*M0lUxt@NZdN>dpn4o<6@74hVM+oE(?Jv24bHPg8h*duKi~fQonqf-c{cp4YTP~_;~v>M z2sePr$W4pB->Y7)dGOPxPg|1D&NMzQEI7a75$C@rll_gDa2 z|Jc&PqN1*@ZOLeRGnDt!=JPHdBBVB?i~ z@~fI-Q@fMmkD7-UFD(qvh}l)VRj2b3qm#GNe$gZ=`G%XEp~cyf=WRaotX{kJs*8f9 zrKFOq!KS}kw{G3><&wAZ3H?h9+np3V&P!aD^E)8lRVToq+xll2(}vR5VTapS)rQ^8 zYuAh2b)b_Y=l(v~)YMcBZEfe+SlLOFCdqU+XuNF|7FfDZfQf0LDQHEpf!$}uGc%3b zpFVy1@yeAe9VQEQ?UMTa{eAfzDTDHNF>#@xqK3TTrKP5?UcXKZ6IZy-*wN*nEVyBn z#Fw8nf=8x%*IyNBaLC{c(5&EPeK5&e&+yLA)$8{K2{G;z1x-t>SiSo2ot?!$*Fi2ELqA{T3R}7E%U+v5ABzd$sDatf|(7% z7tT1eOmq9QYnRoU`2BK=-TU1#Ggr=HUa@A4%l&<|vX+cL|K`{Kj@IkQRcCU0B3{bm zSI?oy)buAcHI;#3bsbY?W~Sk9<%~21CvS(?*ty2+0^KDJb^rf-KCj)`Ao(-7anmNF zv%jP#+6!<*Y%hWi-j-g3B;w<}u zCKe@u#tU_VstlHvmfKpQHYU0H%xykpsk^>eN9E}D=M}=Q^TXT|UNeNPiC9=#H*vnY z@2r+~`8o;hur(b!g=WsZ{K8UQT|Mu*qr#T56V44^1EhF0zSmEmpBy?%+LB{)v6QX< zER)WEsZ5T7Va`pwtOwS7`5HAV+LB}Hr1&xh7N&zYzV*vk1{E`YI-qdTHeQS|evNFy z?Fx0i1_uR~+jSo=O#kDS=WrnX8AH#!(1&Vv_hbt>TDIkVK6;q*(IbXWpFbO>pPREH zy@-LusYZZ8*KVT(#VRvgs)Ap^arFq%awxn9F0E^S-gFy`EUR>){ zH)>OE=Rba3a{}v5L9Pv)m3E#!0v3KB}UllPlz)oOg+MtJ$E)q)n^lqXDUdlkI=fQ0jd z5L1xUks~g3zrJLqx&NEESUutQ^!Ox>1D-4#Ek6$D8BBOt@ZiW1mn&DUB)p$zYw_c5 z`3g%}m!Kdap+9vW1deZ9>>em<(K)5>V&t3!Z#Pd~;q4(bxJ9}}xdi^>u zI{Nkmz8^X#`5A8S`@zC6p+@cSvOk#?b$=|>{v2l#Vq{vV%HGNwxFU zwqLf9C}UkH@M_iSgO=_=K|+%z2Tz#rVEdN8xA*@MinjkH@lt$#_k4S6=9B40CGYM? zvS!B}ow(|<3KNS{cQM1ksw*Mk*`ll~Ps$#&6yR!QV33_O`JiP$czCvz-h!&H#Xr8a z&t+(6Y-W4-Al>@I!RGFdKkdyHRsX*y@!h_E@$sj%FT&LY9i_&Ibe(?FH zKoh^tk-*?s-u?I4&;4bv@VkDM@eKR^^X&l|85N%vYliOl_44G8if=(7Z|ynfShY6a z-ha^W3Pb#xBhty~k9VIhTM%8P^f#ErspsJqeTNo?Id-*C(z(yyPw4qo#dprqX`#X- zs}ctd2^Ry2mixyAc-*)_ZM!zr)0PY}e{$Fv7HqTYxNBYhu*WacqV$o#_;%J z-mL6wUd}xm*EH2`O0lf7`N5m@y7@-&7nLCE<&Up)PJS_Mp2rh)fhY;3Dkd>eQ9}j^ zORd@U5q}sbO`a^s^D7`cy#34>pFRKo{a*88?{^)34Gy~$fr{&GcNQgADGAPZ=rDHc zlX>aOV50pokCD0I%o(3^5{Ikb?>+wJ+8%RZCZBJCdJ3!>i+JQG~vO7l(KE}v?tA| zRH(hYRE)(*Tl?$U6Zuoveu!|KiJ34*a!*=U%5%LK_QnhE5?u-wPl~U5zgf{>vjEd( zi^UR)w=~?AX}`_E)#zZLP+wbHEAsN}C5HJ)n(vORD|WqP#LcMqNtnaXgEi%K{uH$z zNfmkT6s88Obx*KzTsWn{A)tggO|)qfw?_x_&!@RQ-*0)cDqX(HYS4V0h3R0+gEY}5 zElq~-J84sY8w;mDSRyphvOt2xY4_H@X_osh?)#L^X|{CT?Olv{2{(5ty-Y0hWnnsa z=-cgy@kbdA#8pa_`10OZGl#MXacp~HuDmBRO2B!N)X`VkACnlB>>Cp%3stOT?of^3 zwiRou=@9(LGZCba>MnvEuiB^JYD@<);T3K0RWMK BGsXY_ literal 13804 zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc4mJh`hM1xiX$%YuY)RhkE)4%caKYZ?lNlHo zI14-?iy0XBmVq#1`<<2f3=9nHC7!;n?9W&^gmjhX6s=TdU{GN2ba4!+xb?QSxM7Jt z;ko{E?Y!$8$;Wye6B88~67K9M+@&Ni^~eXNJ8O5Dt<7ya;?EKh_E|oJWx>6j0u{5b z-pl=5UM%%qgq=_30Ykyf)ae@w-k#ssxP2*ufe-6*ng4&D+aLZF{rC0$f2(!uD=g0E zKisp6&%v{f(N?g)b=HZvZn4hKqIY-=;w}mu*Z%Y5c@3+%^?ZHSId|DMM&a&7b;tmG{5G$Hy2MxVX8QH5<1u%(#0cEoI8iht40CSJq`uVpBVJ z{?ebW7s;P{bVIlf>@pGGm@V?ri6f8cf~)<$J7-Su#xdF)P!?P7zN=uOp`oGSqTj-| z#Iin#i-|4Tu;D@gi;t|s&dGm{J!!kXe!w=bw`& zPkQ+InTaquGaBq(*_-gRjXy|bpHjl_qd%En9$?nyiMZ_Z$^77rjE472*Zy{8$M0vG zuD558_#I8ow(H+6IY<6@ykXz0`If!nJHLH=d^|8dUS5FF@!zjsRWkN)E??BcMF9Tmn9D8P{e;`uoMmPW0NAC{X zH!VH5-*>s{f$2==HvQQq|Ka(+8YzqWtbdZflqax@9MAuEW;<_8q~?pFof9S`_#`Z@ zopVgv)gks(v}(OOQ*uvK#Vqf#t#8AvnVx1ph?c9PdJBpC|%@o%#ao|P}-l#rBHm>&9`Q6SZT^ar3SJwy(+N=KnhBy0G{66?a$8uE-A&RJW_v$ya*y`gI}Gf!Up%2QnA@ z>#btQpB?sO<;nU#KMEN*t}t^5UhrmZiRidqw$MlUNF^i7x^{tB4P9Mcr5%A>3irD0 z7~7Zv{)L*(SrV~U^1T)Jvug1<_ZiQb{qimsJb$hEncx`md_}de$G2Z!c8VS6sh%_N_^rr=6+i*KM-}uj?gVJ+AcW_%aTSiF4-k z7$zTU`NC!*(y(cjaGy?1_VL|&5-fOsZ2P&J>Hg%cvfux3AK(_4w(h`MM&+hx)jX9W z9RjnJ7P!_0Ggef3&s=Q3Z|$Sl^n(T4A~`N>WMk%h)YiPk<U5K^7r=|gRXXQ*nBv^9Ag&d8D$(29`1cK z`>lHS-1+jyO2fY&m#!49JbFnvqE)s=?b6cy)ywtnUI?h>%D4X}`Tux*WWRbuIg_+` zUQgEbrK((on=JRN;V{{L_w(y@@8mz-T(!OIFxOAU1)DYrJwHF+eSh6wo$iLI5i^s| z%`j{Z4-ZfN{q5};jkulni_hC0pWEed>+t#oNiSs%BF%jVr@jco_8I?jeWJ&zkj`6U-;yN z;FouIrNv_k8cXWls)Vh7a$RZv-M=ZW3=CfEXE%!0XI$X_u`O8k+@CpYpGsId?!O+d+D2B(v`wH??!BW%l~}7O7WiKaXKYWw@-Zp zIseR&8yw~5PA6xF=`31yfNvJlilYvzzg+iaZ0X(ZRkzo~;o86KxzXR|xILMEu;2cl z#HWB~U;GljSNO39-?h~5&-!c4apZw~|8ZfbI@6a^|1vyE@k-Wy!tcIkBDZ0)>?h`1 zYZ=_O{wwRteO{rTubCXYxvgOJeRoZ!`XA?AZOqN5A6YQhspPY$lEOW1#ei*pwe8JC z7*qw{-mCF@jdH%y_ow?=!~eNNfArQas@#6?bipbkasK7H$!}Z#JlZNNWYL?Sf8YMv zYlA6#4rRUelG*Pg7`E*C8>P5WVShuYpuiLHjC>^rJ_Vcm`}cA*RC%ly>`D6(=(J48 z;7u~)mJ|F8`~GZS^7!f#_J+LX>4}-HdAncSd^TlI)JM0i2aPh$RxH0RfBI26+r`xI zl6!&s%%xr|cCCA=qHu}N!BVnS?2OgdKM(g6?m5o=%j?^*5BmhW_do8l*13B`+B`2s zME>^2w`UnU7;RrQ+D1*Tl$f}G%NCOt7FC9`rZy~+UN81D^~1#{f;-BJXR1}6eK60S zWw}5fOYBWtQlSWeabNlX5Fb!AJDmw~R}g}M9= z**Xn6>+Z(1^{e%BDE^Oq>b~@m>(TkM{zNTuxNt1~|F7!{u0OgM_~^FumR~=lC&tg! z(@^<5cfJUxl@g@F*mzS2_*p?f8;v1*1+LlxEuU~sEt`cZJJ9d6f z&6fH5ZKwPRlWiypP1t*ld9CUpUe40vO(OSNuOo)q6+S z%hl{(yZA)pt3O^5HrS%)@Z^`*3tmn$)vH(5DBd|)@nu_|`j-4H>Wm!fSCST~OS$MU zaXMIwFhpLcVQ9I*em32K$)O;iNytjagMnkC{k(b4m^bi>-~C$@VIx%Y(c?%?=FF*6 zk8a+yX~h=x6V?rX{?y$2le2wOz?}k}G|%Ey91I4T|MvdtJstmu`&&l+d{yshAG*4@ z4kw3&hAv#PL`CUi)OG#1^RrB~Kg<^q6%Blv-{Y8;v%l(p=;|;=hO~2YR!WPfyZrm} zr-s2HElo{dPcQHC>}5ZzX7Dm5g?X-5IlI2@tK7LafA1f7KKa?}ZUmQ_- z`yby^`MJq1dSeo+-Hv)jqgDTczu)nDymkHm@D*#;w0LoNuq1VSarhu|KTT=Db?$&w z+8bv5VF-wcx${hE!u$M7-}(1J7J%BX~_bia9^p$@AG$Bf2jKKpnJoC;Irc4 zEnNrLy-QF0?v0tferkpG_5aK5|7w1yy0E};#mbcr7nC|L?)u?&xry`Bv}x1YN?u+S z>Yr(x&eqx1@bHv_RuSvd4@Zw4UHdV*KwasAPLR=Y?jz@CoAYajtvPUGV=}L&{fAkv zo9%9YJsExM{uAl;xi%_~d)LK#{#xkV&Q`lE{k&XK+>{CNXC5qeuiAV`)0&MHdg%q``xhY%?*W1XF?~+G4zGLnQZs&{JeOXFZa?v?n-(5 zbzQt~6~m4F_4a=s2C_Z<5*z06USy&G!@BLd#>T=znk>dvd1-0O5?8wv78(ZcWVk%V zHR9R3yStO`?kYXF#IpR5(aWnZuC5kmcyMK9a7ISP2ATi=?QgdKx)l}D{J68{;(}VC9og*v^sack*t9);~|E#uC}Tt^EqxNXLK|un&sSRSQ)%Lt8SS}-Q%6cH@971m#a4TrbNsb0htRpF`+FSLGAvZpjJ02Qc8)`KbKVR- zJ}JIC+ZJ#-Ds@~`W-Dg65gO*{v^<*0XX*WA%-k7ASReH6>Adsm(u2kBJkR_*t*eeC z)P2A6>}qS6p0UlnGc%2K|8|DCJrT5GP%@EkxGLCi%HrmX9UhbKuj1&DGn}#e*Ro`j zglLwg6Z{X}?cBLc>BFt;^`7$ak+=00#N6GsawTVBVPWHS2B!C{a+OaeMu-ZWR@Qm> zYpwInGt=J`J%Ae~d?PgMq#N^}>-wP#-2x@c4Kd5^W5s!$6m`W-y3T`-NO9{tIN(H0|xIF zvDeHexY|~mp2*)8J99mEk55t9r}fd>`7A9hPnnlao|WoIihjYIs~Hue8~MJ$vrtbuO*> zz;Ud&-Q14<^Ut|;^*3KX7kb`Nu`hp%S;L!MjD4>euE;n1k9Q*-lrUtjoaZO)-2Fmjml`)*Wz^tY zFUD*NYE3bGfH!8d*9k1y^7quFcr#vu-D;+jf~u8`H*f!Phs`J{AUL@B)2AYvZ#R-x ztXz38{@*9@ny**GcRcFSK45v=*Zgja_WC_W8?sg(JG*QT=hXExpPXGQe*aoas-cp} zDWQ9v675I7X>0#K)+4Drl}|&qX=1d249}7|Uz}|jJI=HyeD{$$xPJF8`?9(^2`|Bj zuh;U<%(38N*fEde!9A0I>8wB9)fgv;G|rhLvu9tChfL2Mjq3hWmbAs?K#r5(*PV}2yhCo@Y?#95(9xi=UFYr-lAGtMT@dG62HE@6c%V^pkt4RZ75 z66pNZv(07oQszZ$@f=MX{>t?qFOb+E^-8p@_nG*FJk}Fu&OCXP_>5u7lkJZfwzxbv z|9zWJ{Feu@nLj@7%`Eup%fIUE{m`(Jaq&BKTv)!G`2Xuv>V?%TBIm34CDRQ`UIhI4 z_kI8IX}Zx9=FRI{wMy&B^XH3;pP$?DY*zM`AcnjErbyNOVKvc*G!rYd{>}+NPdn(q%kl6W{j7 zPxipo@c3SSyB`eZ_bQa@KF_|-Qd{d4f8@MOztm)>&=Q~wa&Q$44 zeY`f#J|||sMSG5|=Z)Bg880?(*kGW*5!EvNF(}golS+;Xz4zCm4R@@V@vu^qP z_Pd-t(&m2Q96b+CFt$Xqq!ia}-oUh$&-{bvrM_=YrhC` zadCb4^?E&f?Y}d|=Wi(5FKl*v$uecbrTzE2m^)_L-3?>s=#?{^p}zDRU&s&1qiHEA z5otEOY)U_h8PkPVz2IdJGrxXvLi{$%z{)jcwZiR*xz0=nV;E!>tbNX`kThcl$6_mX zcp@DU0v2MTDnRDl!-S*~YU@%WlFIEK8Ys`=9+=_WoXP;9@t{d+X!&N@jU4@U)itgRf#r;GZegC6yCV!=B48wmNq2& zGu~kN|NE^gs{_}L*K77YK6Umi?-!>t=gzq~Iyzo>;j%IJ>@3rSp2V9*_1W#`pWk=i zd1o?@mX_9ov~!O+FS765#jv)jMS*dGY{=s4`U`X)yZ1|+nSXbSwD{rscfJX{?y~=6 zJfrsd|Ll9tek@U5b^6<`>|$h?ysN@6^QKp@`U6%AZ^j$B|GvLg|M6SVr+I(N*S*|* zQ3sy#iZVTISp4zvarRQru>8k!9`AfUkC|adjBb0>&Z4DPc#X>6#q8g(BgRoYNqwHc z+#}bcEJCu|6xSYfNPA-ZXOHgV{q5Z1huhmD!uJ>p?D)DMo~6$2vw4ux0==K{Z>B#K zZwNjbj>2P^-+ySuyjm|{wLI(x5O zNPcop;=@C&D^{*_tjTJ6E4}RG>*A8bmc8mN;$BIow<%>TW2oBt?9?(-WsBbbkJ@a` zzHOKHY7X49;a~le^n%w1*Ht{&z4ym2rTV2aXL79Y{wMxB^}+kINA_=wR(oe1l=On7 zM)ScNGy9*FoD=TNU^Ef_f1r{1#g&!9Wq;POynM&=W82mx%qv%}lrYT_sr&Jey+__& z?&i&#i})BHAMfYi6P9=S+&Q=N^K2*1n$=}d{$i1GGaK)vKebo1*)l`lv?|ZLuuX5l zmMtOWJ2q5R?|wV;(}D8pi%YY$vQ}po+;d@>b57kL^^{28Bj10Q>dH7TNgE$1XMA~r zW6D2A50+&;^ADNl-V)itHt}=!rGIzJ@AGm=+Sk>buwyvjdu{ULInBlEcD|Vs_-6I` zeNu1oq$G_t8!vs#c~Oz2>WFxU7w378OLZq6u*Cd$_C&DcFZW@tY61j^Y8P_ z{f@_U_w#1zo;ZE_aMPWgH-cUtTcQ{D=WmE%-kWKi(z{b1yZz>oKv3%|Swd^01S$xNzFFk)WgX}#S%wZFd|y|~!j@Lz~o#58-i^?V8{ zTQgF2{eJQE;hf?(_xH=k*M6Ovciv6^dS89+&uqo#^G)lgrP(NM6BJ~u_&9$~wr$j7 z?!Ccbt)JwD1FM&{e#sKNaCmEX+)?++&CKuLTL(4$?%Oiuf&A06->x&iNI2Fb8L_vj zRN;Mi7sG@6ZNX+gB^@WsGd23a^4fl`#?Rg~qf47VY<_lrl9l~Z1{H=`5;K?l?MV5v zZj;xy7gGXv>?jUrxFFiNZtJ}X5l`V!Zx^h$vMqkh1^BYUs*Ahp4_ico)_?ZQBxCBTNS7JhgJ7E z7uannU$Cjk|H+@5`@iG|hp}mWXZ(`==x(05Rq3mimKK&H$B)1Mmsa(0bNcyXYkqDv zsQ#97W}fZr8JGMPMsjADly2jZ+oR2!E4qL6nn@2oa{lRCzMa)&!H(-oBW^s=|GD~( z=dZ%b%|Dks3#$9LX==oljKBw9r`-}WypZKuFqif7UhaAC&K~&X`TD~VVgCm|pU?kZ zUs2C_N!Y02J44*-`{75fUb*t%$;ruzqBT{rjYsUn<0=%hva$*azaN?Ke$l$M=6e`T za`sHEaI!9DIC}J`hu7P+zYUzDk8968u%OOU!%w=UoQ>)H5*`MIlE=PngD5=hp5Te+1D~JU))zkc=gj+m=IH-!j3UKUy4p6!7V~ zIj_2CpcP}PRKm5%7oM^n&OET4SElp8F`ar}d;Jf$>lUv&5N6HPx$eNJsG5t;{$j7h z7?yu*+15V8-=X_UlyBqPedgQm9&`+QCVau^Lc#*Wo4b^m+WBNpP1R+7#c1!ff}Lw^ z++HcqcWk$tE4S@``+n6MmAdqs!6p*Rc^}X1V_Wi2hONMAenW)8l?=sz<%b(*zw%RD zTC5bqa72LF++t5cVT?Gld}YiNfACnQwDfD=qw@N1CU-S*IfNR_+Aeb{N-W#7 z&BlIVGB<;7kT_pUrOkJxnnRKjcNk(4y4*kf{#_ud%lPnx@BYK^VDgRQ zzE{mzWHqh}2CTPS5f^N5f>C36tJdwW=Oh{5oxDTpc7==t z*9Td*Wb6KHwO!mig$Wvmb}+n-RbgOZ*6>`v^@GMzhCmj1i+x907#7PPb^j9?BYosU zp$1Qph6)3V-OO$LEIIx|)>uUN5yV~?NL z+ukL=qwHQc`dk*)emr%3^_}a71NTgPJH1!@e&&bXy}8HTFEO(0Z*L1S4$5m%)ws@f zC0b6$Z({oKFBT0MQtc077)~$>%sKq{qr@cp6$*jZn!2x7nLduXef9R1zI4@lFQV2Q z$(B9tx94u{+a(M)Uo`K3#8J=Q{`0oQk?oHJ%9|6F_dTmW$heR1wQ^|gz>GVgw{gTt$HdGtkdtUxP-RF(+EM`uYwN?zJt_wDK z23WCfNb2tWHr2B4rk$U?`E7lvAO_{6Zjpu){u{KIs(c$1`5G>meQ263beq-fiF$+| zea2c<_f;v@utOg{7(T^Z$>1}Ik*zp8%hbmwB{D8fZp&f;mc^WUhh6{4 z*MIR}Zu`OQz-9Ifo8OXI&#NZRGG&^)+~=VR6WD;ZX~GpOp&nGt>NWZVheP8!KPxAIWB|!xN74JHRHa~~*fSHrt zgmvhju&@19V)OgW=89i0mzTa4+4A9$vctvG>l2R2{r^2#F*s=bz0Tsq z@$>DmmfDb&3jg)%K60;#+RF9y>(?1}wYyew_{_7J`M>D0nvXQM$-0@%Pje*gp6qZR)|9ur+ zJo{0#JdKddc`wz>$gR?z?EgGL>7fq}= zvtPc^VL~}m6?4-eJ%;RSYZCkI|5Yq_^8Zn{{)4jJzS>OY`S;HJOFt!YXJ4sCQ2kr= z8YMQiIR|Ryb+=f@AN=*b@&8Pt)>+J)EooDxO=IKz7HG{_dUE|5mL3oP18JLz8G@dK zFIsk!b;&;~@gK#fzg<;sjIXg^|E{~xevZQhp~l$$CF`S;GK`OiG0e}5OJscR}j5hKINV` zTGpGZOY(cy9dKgV#c-qilgK0cFXyk?7ZsI0DE_sYlf_bfLHH+WtA=auKCf40awwjj zpk&whV1?g-41<6(le^k33t1WUJY#+#aJVtkiI?f19S`e)>5tZ*ET5bE+?f4hMM+ox z(~7y5?tiOc*e6n;!lbkMXRV;cD`kBa#wkdy+_hmt>eSerArlW zo3I|>E||u&;r6VzU#09H{xsPy`~lL8E>&Q;&-2Wqfcfk5#((jxGS9bOkK^W?X__q- zwl<3OoTWtai4!Lbl(tRVz>;g;r7n;(_s^my;eBjZX7ekoP*?C~j1XsdC-#Y%A)5c# zwdRep8A=KZN{?T**j2_P^q66Kox01hhzEivu3GX}nVorU$#2uMO_1a5&L`o{7L2}( zAC@+3zRhrl<-??DLG~Rpqz~TsF>M#)=_mevANGGUVVWLhq|G9hv_OPan`zP3UWbf) z)%`a!4jejkNI@{elTm1P=O;CZ`E2LPf4VlTy}sdhC&M`_h5xFeXL=5J8Ln8h%E`@* zEpNv|HqGDb#P|gL6}E(bx?Re>&f(?!t4Y6aRvDN{2`CA;oco%fbGnIpgGZe%`-g|^ z@@#Sp0YO1YS_-Ew?OU=$<->$db%7*arQ_GNe;%!V`IDi?MIlIa|FpZ?lkZOb$~xt@ zuoc&qqMFTCOyUpn?>%<4TDsSZ<;UCydpxeHRQxFFdsY9Cc~$+nxs&W=Sjw~%Se&Yh znVx-Syy9)qc;Ae>r7C_pw@1(6mrvNf*c;DV{;y(h?x)Gj3Ic1U|2ehqf0p_Jy`QG) ztfg~VAHQe%!`FN3|JMW^<^$CX_0fx+FD#wPGtX_#w|NH>uXA2expGs@-jado;Lg9| zeh#spRv%T^!M8x{!TXU6urN@ZcJbkJW(6i;j$eKU zcmnkqil3c%xPH&4u8qM9A*H#jf&#;A^ZacgllFMdwY7hGS z`#06H`z1Yp-u}_;p36(Mg9USDJ1BTqFkC$R{^jzm)xUb#WCQ~&7;S&&mDDYNt|nl` zwMC81@GaM!sJq!;-&mKvR~0y<&1BS3dFf(7f|GmO#Ttfb!3_~Chp)^KGZZp#x^jh4 z;1-98+`LC~k61T!-*8tbiJ8D4!0}cj`B;x(tVM`1D`<%9=+UD-KjVJx{A64@r^rL zi8*tmIY_}t$1$6y!ARC%EptZxw7DKW3hECy3t8Gq8N$|XJX2TZnW64?x9EbHE+>nV z$qt4<`GhTQ3KJLg9^BX%93IiNUHbk*aduS!j$e5Pc&>=faCmWGfrx@s5ChXewK?b5 z9rzj?GL~}-|96+Wp{W(n*#Stu8{qt9nNkxS2$p=&34J2XCH#~Sh7-G z6?D(cFl=5Qw|7>g;{Mh7R&LDGToml>=krUMcx2uG`}@1Hy}kX58)0?!v;I#IcsVKF z^T(x2L9v1yMGQ%m@9s`NbJ6C*ipT#{cOQAPx9UmwIv$pjOAmfMQGbwCJVK~3Hg#%_ z$$|R6L97M&v$k;XNSScx|NE%9^7XFw3)M}xOaHAi+ArHE;P**;HseR;{F(B9 zmh(%_uQ@lzvgYBT*2b-j>^u?*VQkxUn9T3j82kJAxxK%)cj=slTi^P9nEvHFW?%E; z7YoCIw`GT4e`VWSw)^gmJ@x*VlQaI-rGd=O`?NYfyVK!@7NhIQ^>MNl2O1b>*yTnA zL@99hA8%H6?*pw%5%4>3;ak7N8Sr3K_2NU{z8CDi%g}J_nA?uKc{}drnV6X!di{0L zzJ2rF89DjfsI%n|zVZ~=KXamnY=#z|Fx70 zG~Hq?$Q1Z#_uafB$B$p0>(-GaxM7$7oNZU@k6vSyv8ymR!r1Y)%;4)SzZ)L{P4#xY zP?E7MV)^^)>t$c|vZ9q#)Pimj$&X;$4Tln87$%(~Aj{nOm zrY4WNe5rOX7L)J6ii(Pg4mA&1rZg!qFTUE#*>X*UakGe`-#4~tJ3CuBG@===t&8XX z_V@U-FjlcA_sbtFsn^`--~Z^@?EGg+rV}jN3Rs+2+{~7W{WN+BdG& zd+%H>u<&k2gAwZnT?VtujSNRt9Y|AJ;Qp`R!NJ{^n6AZl|M~s>{q@}Y;mQC1{k`;j z>C>~Exq+`)BBaiE3`9?&HPhyXQy~Y2FC~Y&gXyrT=;z9)3cTg zF~-Y%4sPZJ7I{gEOuzZ&@ch&XdLo|L5c&N9w~pOv$Gg>>7j>Ab4qZshyOklU;9|@a zSfi50614sM>zzzmTNgPpaInl?pm~skr76!Up{-1l;rso1`}%)BpGTj)Yaz$wBQ^t6 zQaLy`ztFarwUd)o0-1j zOjK4w{e(-0TDhD1e4QIPFLI>DHe~uAc=aml|1pc)urRdQKKk_OQ^kC{TBg&2 zPoF+5+^zKC$z=aeKYmnrD}DI$`TXYJ@AuD-FTEN%%|*e|Qj(odX2Py@r}cLG*e_qc z@IZ@((*6i(h6{1B5tCm!xA9!GNvN#c`H=JTr%yjb!($qkEKy-_2nrIKG|415KXHHJR#8=5=s(|Xn+s?nrnI!QG5J+z186#}Lr^)V zp5L)-{(1K4r|qL|J^%dEyIgO&YM_-vhuSA;#WkN9U(5|K+aC7lX8Qb8US3{CK@T6F z77z9ZP>);5WwYes0?I;tves?Kj=AZ??U|t;v7sSS zasTnh2f6k49AKzln&9lrJg@d!bQU7Mn~@LZHb3kI5l*2rxr7WhK7Qs{d6oDpZ>o8_g#66z-=FvEhqF}v8?$g z;Kai6^Yp1x3=D36S%QLs4t;aKaK@n}!y!3&u_?PiUx~xdf34zi6NDITKeaQbrlvB! zUhi7he?0ldzWikybhrMxb$4?{nu1gG5GE58i-mdw$p{c_HwAw}|YKz8`nKBHG z0+JOr^9~&5QVL?9Fn#*+owdKdyo}gYqPb?ygw(MayAjg&rhB5 zvibAju!LpNl6Cy&Po8|}Hnky2m%;71$!@+^Ufv&N_iAsr_GZ7EF>|HOJO|Z;m>pgP z%Qai>SY7x;m%$`&X$O_Fn)*rU)PPY#RFzCIwIr+G8+vNMT z;*rZ8#3nq_yjNGVgEis6fkqjINx?w}B%IfG>pfE6_gBom=D)4!UO|pPj?H)C*Xt>G zFjRecaqu_4OvmHneTs^Tj9-22O8h#UYin(Ts!QCHl9cT4-{^R+B75+KV6!E|8?DtU z4;2KIcov_u|9V78fq|2gbI#5fi}H6eyGmcT6_=KNnDbB2!_)EZ&fSo!}B&ftyjyY&sE9;h&}I6X-;lkh0FD5$Bi0j-#R@*#1~k8jae=6_dG zRAem7GvCqw_{+-R6`$w020eG#aYyg+r20qGxHha4U$kcpPiSBhYmTG8F#K+ zVVQrueaR7(18<$~&b(~#^KQ9C$p?jf{~uNx90M&Q-!YT>%!020Q~s3Bo_GA-TvdsA zhGO<->qU8OI$atZI>Hz~=y$$tzWvtCD~KybPyEs2#}CVPU)0p(^!4@4$jHd>V~=Tj z!rriVemx6=$D3mx3jgKIu`Ff_{$DHE$X%dMMc5Tkh8Eb&-wQL_ucvd`;ygz^!KyaSLf*o?KUiVdrOpccKqR!vp$0Y z<%%UkzVNHpub4zxPj=2dX!+ptPX>m$Lc#|vFWk7Xz*=uX-sR6fp0zVGG(1#xdvIj= z?~ezYwLjjxU%v4AgvJ?v?)xwJzQOU!YGDq+rlKr^we3=kVGL{so)#Ts7oX9;c;7m{ zyzSg`b~6^t$T5*|79U^MF*rC+7H{X1Il>wnRIu)w&bwc4|K9i@zw?TIgF^?y z5gmslIflLIO9NPf8rs^}%Km=6e)wroqaoY+?VNLVHaxTXzigSB0b5M@->(@N85dMO zfF^h@uG;$JdGQxwdk>ItvSv;-?93+19wto;;mb zX2;6j+}fJW`<(d!AM2saJvJFOmPgAU{Med(UFzMnD_2@}>+((9TXUVONqv?J`~`kMDfiU!64OnWWXO03<| zFk7a5HV0Ru!v%%<;NW16mtQY2Oi$6wJG!pe^O6xWqv9uFjzkaEDc9n)eG6JY-nrwX zr5N3RAf(Ajld)0ZCEFJ*mZ^FQdQ4Bk^O9Fx57QEuxk|4gbB~$;hZW29)dEvI8FxG} zTYP8!OABW0sU2sU4l4*)t$BO>^v|u|LhHoRgI?WQEB!!f+Fb8Ra%|UK6a;v3_DlXu zm0{TI7^M9u;rKq|fK-LX1g|>VL$8;yCaSCqTeC|@Uq<1RFo&9E<7KOcf+p9O8#!9| w9&>$(Vd7<16G)Qqo-X6&=-Bx7$A9MEpNd{=w{yS1z`(%Z>FVdQ&MBb@0AKV1ga7~l