From d88a9c690a3684887caef118404458375f36dec4 Mon Sep 17 00:00:00 2001 From: Ranzu <66495944+Ranzuu@users.noreply.github.com> Date: Mon, 15 Jun 2026 20:08:03 +0200 Subject: [PATCH 1/5] fix inv background --- src/main/java/serverutils/lib/gui/GuiContainerWrapper.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/serverutils/lib/gui/GuiContainerWrapper.java b/src/main/java/serverutils/lib/gui/GuiContainerWrapper.java index c1f099bc..5181f0f5 100644 --- a/src/main/java/serverutils/lib/gui/GuiContainerWrapper.java +++ b/src/main/java/serverutils/lib/gui/GuiContainerWrapper.java @@ -105,8 +105,6 @@ protected void drawGuiContainerBackgroundLayer(float f, int mx, int my) { Theme theme = wrappedGui.getTheme(); GuiHelper.setupDrawing(); - drawDefaultBackground(); - GuiHelper.setupDrawing(); wrappedGui.draw(theme, guiLeft, guiTop, xSize, ySize); if (drawSlots) { From e63f5aa661e876c560bdabbe42d9c63c76010b74 Mon Sep 17 00:00:00 2001 From: Ranzu <66495944+Ranzuu@users.noreply.github.com> Date: Mon, 15 Jun 2026 20:08:49 +0200 Subject: [PATCH 2/5] Add Inventory slot texture and switch the ugly button to texture --- .../invsee/GuiInvseeContainer.java | 9 ++++++--- .../serverutils/invsee/InvseeContainer.java | 9 +++++++++ .../invsee/inventories/MainInventory.java | 2 +- src/main/java/serverutils/lib/gui/Theme.java | 8 +++++++- .../serverutilities/textures/gui/widgets.png | Bin 11032 -> 14929 bytes 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/serverutils/invsee/GuiInvseeContainer.java b/src/main/java/serverutils/invsee/GuiInvseeContainer.java index 5fc0d680..da53648c 100644 --- a/src/main/java/serverutils/invsee/GuiInvseeContainer.java +++ b/src/main/java/serverutils/invsee/GuiInvseeContainer.java @@ -26,7 +26,6 @@ public class GuiInvseeContainer extends GuiBase { - private static final Icon BUTTON_BACKGROUND = Color4I.GRAY.withBorder(Color4I.DARK_GRAY, true); private final Map inventories; private final InvseeContainer container; private final String playerName; @@ -95,7 +94,11 @@ public void drawBackground(Theme theme, int x, int y, int w, int h) { for (int i = 0; i < container.inventorySlots.size(); i++) { Slot slot = container.inventorySlots.get(i); - theme.drawContainerSlot(x + slot.xDisplayPosition, y + slot.yDisplayPosition, 16, 16); + if (i >= container.getNonPlayerSlots()) { + theme.drawInventorySlot(x + slot.xDisplayPosition, y + slot.yDisplayPosition, 16, 16); + } else { + theme.drawContainerSlot(x + slot.xDisplayPosition, y + slot.yDisplayPosition, 16, 16); + } if (i >= container.getNonPlayerSlots() || slot.getHasStack()) continue; Icon overlay = container.getActiveInventory().getInventory().getSlotOverlay(slot); if (overlay != null) { @@ -124,7 +127,7 @@ public int getY() { @Override public void drawBackground(Theme theme, int x, int y, int w, int h) { - BUTTON_BACKGROUND.draw(x, y, w, h); + theme.drawWidget(x, y, w, h, getWidgetType()); } @Override diff --git a/src/main/java/serverutils/invsee/InvseeContainer.java b/src/main/java/serverutils/invsee/InvseeContainer.java index bf3efd91..9571bda1 100644 --- a/src/main/java/serverutils/invsee/InvseeContainer.java +++ b/src/main/java/serverutils/invsee/InvseeContainer.java @@ -30,6 +30,7 @@ public class InvseeContainer extends ContainerBase { private final Set modifiedInventories = new HashSet<>(); private InvSeeInventories activeInventory; private int playerSlotStart; + private int armorSlotStart = -1; public InvseeContainer(Map moddedInventories, EntityPlayer player, @Nullable ForgePlayer otherPlayer) { @@ -64,8 +65,12 @@ public InvseeContainer(Map moddedInventories, Ent public void setActiveInventory(InvSeeInventories inventory) { activeInventory = inventory; inventorySlots.clear(); + armorSlotStart = -1; for (Slot slot : moddedInventorySlots.get(inventory)) { addSlotToContainer(slot); + if (slot.yDisplayPosition < 0 && armorSlotStart == -1) { + armorSlotStart = slot.slotNumber; + } } playerSlotStart = inventorySlots.size(); @@ -73,6 +78,10 @@ public void setActiveInventory(InvSeeInventories inventory) { detectAndSendChanges(); } + public boolean isArmorSlot(int containerIndex) { + return armorSlotStart >= 0 && containerIndex >= armorSlotStart && containerIndex < playerSlotStart; + } + public InvSeeInventories getActiveInventory() { return activeInventory; } diff --git a/src/main/java/serverutils/invsee/inventories/MainInventory.java b/src/main/java/serverutils/invsee/inventories/MainInventory.java index 3dde1bff..381005fd 100644 --- a/src/main/java/serverutils/invsee/inventories/MainInventory.java +++ b/src/main/java/serverutils/invsee/inventories/MainInventory.java @@ -95,7 +95,7 @@ public int getArmorSlotIndex(int index, IInventory inventory) { return inventory.getSizeInventory() - 4; } - private static class SlotArmor extends Slot { + public static class SlotArmor extends Slot { private final int armorSlot; private final EntityPlayer player; diff --git a/src/main/java/serverutils/lib/gui/Theme.java b/src/main/java/serverutils/lib/gui/Theme.java index dd267ddf..c38895a3 100644 --- a/src/main/java/serverutils/lib/gui/Theme.java +++ b/src/main/java/serverutils/lib/gui/Theme.java @@ -51,9 +51,11 @@ public class Theme { private static final Icon WIDGET_MOUSE_OVER = new PartIcon(TEXTURE_SERVERUTILS_WIDGETS, 36, 60, 18, 18, 3); private static final Icon WIDGET_DISABLED = WIDGET.withTint(Color4I.BLACK.withAlpha(100)); - private static final Icon SLOT = new PartIcon(TEXTURE_SERVERUTILS_WIDGETS, 18, 78, 18, 18, 3); + private static final Icon SLOT = new PartIcon(TEXTURE_SERVERUTILS_WIDGETS, 36, 78, 18, 18, 3); private static final Icon SLOT_MOUSE_OVER = SLOT.combineWith(Color4I.WHITE.withAlpha(33)); + private static final Icon INV_SLOT = new PartIcon(TEXTURE_SERVERUTILS_WIDGETS, 18, 78, 18, 18, 3); + private static final Icon SCROLL_BAR_BG = new PartIcon(TEXTURE_SERVERUTILS_WIDGETS, 0, 60, 18, 18, 3); private static final Icon SCROLL_BAR_BG_DISABLED = SCROLL_BAR_BG.withTint(Color4I.BLACK.withAlpha(100)); @@ -87,6 +89,10 @@ public void drawContainerSlot(int x, int y, int w, int h) { SLOT.draw(x - 1, y - 1, w + 2, h + 2); } + public void drawInventorySlot(int x, int y, int w, int h) { + INV_SLOT.draw(x - 1, y - 1, w + 2, h + 2); + } + public void drawButton(int x, int y, int w, int h, WidgetType type) { (type == WidgetType.MOUSE_OVER ? BUTTON_MOUSE_OVER : type == WidgetType.DISABLED ? BUTTON_DISABLED : BUTTON) .draw(x, y, w, h); diff --git a/src/main/resources/assets/serverutilities/textures/gui/widgets.png b/src/main/resources/assets/serverutilities/textures/gui/widgets.png index abab5135c82eb37dc6ec9004d75e7846a7fa74b7..edd451c3350a5daaaf87e49eed2bce9feaafbd70 100644 GIT binary patch delta 12131 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 delta 8203 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 From bb4a1b6d07ac3df66c3b527646bd1c8c927a062d Mon Sep 17 00:00:00 2001 From: Ranzu <66495944+Ranzuu@users.noreply.github.com> Date: Mon, 15 Jun 2026 20:20:00 +0200 Subject: [PATCH 3/5] Localize some things --- .../java/serverutils/invsee/GuiInvseeContainer.java | 11 +++++++++-- .../invsee/inventories/AdventureBackpackInv.java | 3 ++- .../invsee/inventories/BattlegearInventory.java | 3 ++- .../invsee/inventories/BaublesInventory.java | 3 ++- .../invsee/inventories/EnderInventory.java | 3 ++- .../invsee/inventories/GalacticraftInventory.java | 5 +++-- .../invsee/inventories/MainInventory.java | 3 ++- .../invsee/inventories/MinecraftBackpackInv.java | 3 ++- .../serverutils/invsee/inventories/TiCInventory.java | 3 ++- .../resources/assets/serverutilities/lang/en_US.lang | 12 ++++++++++++ 10 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/main/java/serverutils/invsee/GuiInvseeContainer.java b/src/main/java/serverutils/invsee/GuiInvseeContainer.java index da53648c..236bce38 100644 --- a/src/main/java/serverutils/invsee/GuiInvseeContainer.java +++ b/src/main/java/serverutils/invsee/GuiInvseeContainer.java @@ -7,6 +7,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; +import net.minecraft.util.StatCollector; import serverutils.invsee.inventories.IModdedInventory; import serverutils.invsee.inventories.InvSeeInventories; @@ -41,7 +42,10 @@ public GuiInvseeContainer(Map inventories, String this.playerName = playerName; this.playerIcon = new PlayerHeadIcon(StringUtils.fromString(playerId)); this.wrapper = new GuiWrapper(this, container).disableSlotDrawing(); - this.inventoryName = playerName + "'s " + InvSeeInventories.MAIN.getInventory().getInventoryName(); + this.inventoryName = StatCollector.translateToLocalFormatted( + "serverutilities.invsee.title", + playerName, + InvSeeInventories.MAIN.getInventory().getInventoryName()); } @Override @@ -141,7 +145,10 @@ public int getY() { public void switchInventory(InvSeeInventories inventory) { if (container.getActiveInventory() == inventory) return; container.setActiveInventory(inventory); - inventoryName = playerName + "'s " + inventory.getInventory().getInventoryName(); + inventoryName = StatCollector.translateToLocalFormatted( + "serverutilities.invsee.title", + playerName, + inventory.getInventory().getInventoryName()); alignWidgets(); new MessageInvseeSwitch(inventory).sendToServer(); } diff --git a/src/main/java/serverutils/invsee/inventories/AdventureBackpackInv.java b/src/main/java/serverutils/invsee/inventories/AdventureBackpackInv.java index b37d02aa..22c8caaa 100644 --- a/src/main/java/serverutils/invsee/inventories/AdventureBackpackInv.java +++ b/src/main/java/serverutils/invsee/inventories/AdventureBackpackInv.java @@ -6,6 +6,7 @@ import net.minecraft.inventory.InventoryBasic; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -54,7 +55,7 @@ public class AdventureBackpackInv implements IModdedInventory { @Override public @NotNull String getButtonText() { - return "Adventure Backpack"; + return StatCollector.translateToLocal("serverutilities.invsee.adventure_backpack"); } @Override diff --git a/src/main/java/serverutils/invsee/inventories/BattlegearInventory.java b/src/main/java/serverutils/invsee/inventories/BattlegearInventory.java index 152da0a4..558d142d 100644 --- a/src/main/java/serverutils/invsee/inventories/BattlegearInventory.java +++ b/src/main/java/serverutils/invsee/inventories/BattlegearInventory.java @@ -13,6 +13,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.Constants; import org.jetbrains.annotations.NotNull; @@ -55,7 +56,7 @@ public class BattlegearInventory implements IModdedInventory { @Override public @NotNull String getButtonText() { - return "Battlegear"; + return StatCollector.translateToLocal("serverutilities.invsee.battlegear"); } @Override diff --git a/src/main/java/serverutils/invsee/inventories/BaublesInventory.java b/src/main/java/serverutils/invsee/inventories/BaublesInventory.java index 0f185b7a..f0fa2068 100644 --- a/src/main/java/serverutils/invsee/inventories/BaublesInventory.java +++ b/src/main/java/serverutils/invsee/inventories/BaublesInventory.java @@ -8,6 +8,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -82,7 +83,7 @@ public void syncSlotToClients(int slot) {} @Override public @NotNull String getButtonText() { - return "Baubles"; + return StatCollector.translateToLocal("serverutilities.invsee.baubles"); } @Override diff --git a/src/main/java/serverutils/invsee/inventories/EnderInventory.java b/src/main/java/serverutils/invsee/inventories/EnderInventory.java index f57ba662..66815ad2 100644 --- a/src/main/java/serverutils/invsee/inventories/EnderInventory.java +++ b/src/main/java/serverutils/invsee/inventories/EnderInventory.java @@ -6,6 +6,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryEnderChest; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.Constants; import org.jetbrains.annotations.NotNull; @@ -43,7 +44,7 @@ public class EnderInventory implements IModdedInventory { @Override public @NotNull String getButtonText() { - return "Ender Chest"; + return StatCollector.translateToLocal("serverutilities.invsee.ender_chest"); } @Override diff --git a/src/main/java/serverutils/invsee/inventories/GalacticraftInventory.java b/src/main/java/serverutils/invsee/inventories/GalacticraftInventory.java index 62d5831c..7f6098d7 100644 --- a/src/main/java/serverutils/invsee/inventories/GalacticraftInventory.java +++ b/src/main/java/serverutils/invsee/inventories/GalacticraftInventory.java @@ -9,6 +9,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.Constants; import org.jetbrains.annotations.NotNull; @@ -72,12 +73,12 @@ public class GalacticraftInventory implements IModdedInventory { @Override public @NotNull String getButtonText() { - return "Galacticraft"; + return StatCollector.translateToLocal("serverutilities.invsee.galacticraft"); } @Override public String getInventoryName() { - return "GC Items"; + return StatCollector.translateToLocal("serverutilities.invsee.gc_items"); } @Override diff --git a/src/main/java/serverutils/invsee/inventories/MainInventory.java b/src/main/java/serverutils/invsee/inventories/MainInventory.java index 381005fd..0d94cbf9 100644 --- a/src/main/java/serverutils/invsee/inventories/MainInventory.java +++ b/src/main/java/serverutils/invsee/inventories/MainInventory.java @@ -11,6 +11,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.Constants; import org.jetbrains.annotations.NotNull; @@ -51,7 +52,7 @@ public class MainInventory implements IModdedInventory { @Override public @NotNull String getButtonText() { - return "Main Inventory"; + return StatCollector.translateToLocal("serverutilities.invsee.main"); } @Override diff --git a/src/main/java/serverutils/invsee/inventories/MinecraftBackpackInv.java b/src/main/java/serverutils/invsee/inventories/MinecraftBackpackInv.java index 31570843..6e924197 100644 --- a/src/main/java/serverutils/invsee/inventories/MinecraftBackpackInv.java +++ b/src/main/java/serverutils/invsee/inventories/MinecraftBackpackInv.java @@ -5,6 +5,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryBasic; import net.minecraft.inventory.Slot; +import net.minecraft.util.StatCollector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,7 +45,7 @@ public class MinecraftBackpackInv implements IModdedInventory { @Override public @NotNull String getButtonText() { - return "Personal Backpack"; + return StatCollector.translateToLocal("serverutilities.invsee.personal_backpack"); } @Override diff --git a/src/main/java/serverutils/invsee/inventories/TiCInventory.java b/src/main/java/serverutils/invsee/inventories/TiCInventory.java index b5d907d3..20f750f7 100644 --- a/src/main/java/serverutils/invsee/inventories/TiCInventory.java +++ b/src/main/java/serverutils/invsee/inventories/TiCInventory.java @@ -9,6 +9,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -80,7 +81,7 @@ public class TiCInventory implements IModdedInventory { @Override public @NotNull String getButtonText() { - return "TiC Bag & Accessories"; + return StatCollector.translateToLocal("serverutilities.invsee.tic_bag"); } @Override diff --git a/src/main/resources/assets/serverutilities/lang/en_US.lang b/src/main/resources/assets/serverutilities/lang/en_US.lang index 6d99f9f6..053ef1a2 100644 --- a/src/main/resources/assets/serverutilities/lang/en_US.lang +++ b/src/main/resources/assets/serverutilities/lang/en_US.lang @@ -814,3 +814,15 @@ serverutilities.jm.own_team=Your Team serverutilities.jm.claim=Double click an empty chunk to claim. serverutilities.jm.load_hint=Double click a claimed chunk to load/unload serverutilities.jm.unclaim_hint=Press %s to unclaim + +# Invsee GUI +serverutilities.invsee.title=%s's %s +serverutilities.invsee.main=Main Inventory +serverutilities.invsee.ender_chest=Ender Chest +serverutilities.invsee.personal_backpack=Personal Backpack +serverutilities.invsee.baubles=Baubles +serverutilities.invsee.adventure_backpack=Adventure Backpack +serverutilities.invsee.battlegear=Battlegear +serverutilities.invsee.tic_bag=TiC Bag & Accessories +serverutilities.invsee.galacticraft=Galacticraft +serverutilities.invsee.gc_items=GC Items From d7a7a58afb0f472ee2bf6348fd460d86b2d0a1bc Mon Sep 17 00:00:00 2001 From: Ranzu <66495944+Ranzuu@users.noreply.github.com> Date: Mon, 15 Jun 2026 21:00:55 +0200 Subject: [PATCH 4/5] Move GC Slot render --- .../serverutils/invsee/inventories/GalacticraftInventory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/serverutils/invsee/inventories/GalacticraftInventory.java b/src/main/java/serverutils/invsee/inventories/GalacticraftInventory.java index 7f6098d7..daa754b8 100644 --- a/src/main/java/serverutils/invsee/inventories/GalacticraftInventory.java +++ b/src/main/java/serverutils/invsee/inventories/GalacticraftInventory.java @@ -42,7 +42,7 @@ public class GalacticraftInventory implements IModdedInventory { case 2, 3 -> new PartIcon(icon, 116, 53, 16, 16, 4); case 4 -> new PartIcon(icon, 143, 17, 16, 16, 4); case 5 -> new PartIcon(icon, 107, 17, 16, 16, 4); - case 6, 7, 8, 9 -> new PartIcon(icon, 79, 8 + ((i - 6) * 18), 16, 16, 4); + case 6, 7, 8, 9 -> new PartIcon(icon, 80, 8 + ((i - 6) * 18), 16, 16, 4); default -> ItemIcon.EMPTY; }; } From 05a9928e53c7a66b84642b1e1e8f403f9f38692c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 21:03:25 +0200 Subject: [PATCH 5/5] Optimising images contained in Stuff for #315 (#316) Co-authored-by: GitHub GTNH Actions <66495944+Ranzuu@users.noreply.github.com> --- .../serverutilities/textures/gui/widgets.png | Bin 14929 -> 11048 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/serverutilities/textures/gui/widgets.png b/src/main/resources/assets/serverutilities/textures/gui/widgets.png index edd451c3350a5daaaf87e49eed2bce9feaafbd70..307a1c09e59c5c4929a2bdf0d6a1a5fb438a20d7 100644 GIT binary patch delta 8193 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 aV4pu!phDWOwJ!NzGsA~w56W~NMgJEYcoLWZ delta 12105 zcmb_>_gB-)w>H>NQBahkR10zx5m5*|5m68j;;|t$3LF7LK%^6rkAliUI*2GOVv7od zPH0I$BoLJ@1Og;NFc3lyA*6D>@BIVryT0qrnjdD(+B18vJ+q&^p1nWb>9p?o|GdLuBuAsr^lA)3<+i99otY3uO>7TQ+^&ZnviK$ZyA%FPo8HAMRD^ zd||aLv+dI9dvELHw2lt0c{txtYcTlx_%c@$iX|OqF%gB!CBF?7 zrWlzb9EDNiP0sJ4a$}U*m*gg{21Np^i<~7fw?~_&hlzWzs_!M|hM2Z^mJJ|v3+MXs z6;Mq?30-aFQdDDiSlU?jN<}5v`uI&Y(Rf;K*^c zkJ^w*kc!&i=K4Jb=W8l-FC-6aD&X`5H?OI@zi8NyLLEB4kc=%81?g_Ad^gmVF9L+A z)E5O{ZdfXr#l(@|CYpZ0%vmjMK)h@Og5)KD+J{#^VBst6=VFuu=M25H(?i4k4Qotc6$UTDaWV5dn!~MMTy$z z=%2m*HWcFeWODkx8_svBn^AN342_PaAm@=)f3e5dXnsjMdXd1_(sPY;e2U{5sApW! z4RN^Mgbce<-Ju7f0~-?Cbg)ILVCHSQR)`Ej@J(S!NJf6sQm zn0xf!pxW(-&$Dyt95AXFqmBIX`-sQtQqQpUNUOgDn5w~>k6{PY8i(~t=+hrF-ogU4 zo)K9k^z6?_a4!bo`^!B@+ba5gP3Bt|q7+^a?a`_hJCWnYO4w=QEAXE5A$o)_I~21J zlyzg~VI+Dg*XWtlFS1F;-rqbM9h<7`8xgtsr~rwc2^sgy-s?dfS1&)MpsBJ`bCul` zr4GEY?Am)VTTwo0%Wc~$j=QQ13VsoUvnA;XpP#>brgu^PZLhD*47NNAw>qb0Pro&z zw@5$VhC+;7jVI}3FFNLb3|$yVC@K{{DD!&oX3B+b_1XZSyad9|@WWE{sE0BTy-b6L zm$`wPuXm0bDxyX5bnJ zsp6Rk44O;WmNtI$Qb7M!+(Y2fX?giGTd%@=qmDkTj4!=(vno6z3eoEBXW_J6y`KQ) z`yu`kb|1<%EP6h*cJTvt%atDq;9h&8kzh3UoFLiS!SPtlr~ViPOsBE`e#Q4{`cpH( zMM2^9_r7aC5H)9~uPSqBGi!B`rxY8z4v2(V26r73U6y-EqdK5j9y;1#>dXPhd%<<6mZ(SP?5>b;#aj{!`7ea)tMsQE6jQWgyk|+W097QL;ALp#k?T zPlt-?Su}TLl9&WayL>uE{=Lc``I}i6T8|72yf@;>8{ex|1IPi`?B?70x(Z$kcMhf2 z?oiHfNbIu5f*ypg?T?D?g}NNyI|G%=&kYDp)rHpS)r+i;g~NP8pjf5wTjxVBV-2K=^Q1jeu|5*NA%k$M|U2hGx zBo|yvd^~V0fLzoc{4$3ZlP1`gh6v!QsoN>%^zJyFKQKDmKjG?+sz?CLFB)dqPw&L)kf7%_E7@*$R zuoRfyKmBy? zB=s_oe6XqLc0xf{iz?d2;89~D2PBbRNOIz{k2k#T?jiS;xqIGPYv*|wb-|vXfvT0ABQD#zt`!1033C)EmD5i*(OhQuQMpdDo2wnFTV$LXCP|Ebp4|2%q9(P4u z($mg%!uZkm)lM1bS_e;6+uJ7^%*^0M#4n6eYLODUxlw!)(7~WWq2MTDD%m$lJRlEe^see(^4=|bs@D;b(67rYEh&2TcKOT5ld+>C9dLi!d^q?O7pD)Q)%=$GdJZYLL?33s3*wB* zSGMAkbI_p9C}4f|JHM%WZ>Gvcuf5wJ)%~SgeD21od_Z~RvpSXcsd?TKl@E1O1_f(D z2dO@`U1-UaSBb$(sy)bQ{}U@Wgi5|RW+mtJl*gP<@Dj87+)6mGo9TE8B_4^$%wE@w z6XgEz&Suk1%%$r1(SZ*`hBt#$N#aGCS?&59B77xT0idD^_C-l{7Fv?yo0V{yW^sXM zYmaj+wX3{FgKbGj2@5}}lV2`c=QfXZyi5n33HJy=H-zklhXjWwVWnPFFV^~W3u#H7 zbbk>lor0!4g_4l&V(3s$dgvDBt7|JjWBkzo-5JIBiw_gNz9d(2m)m$3wwgP93aFpYX3g3Ettl5)OCxxWJl`iX~V|@4bVw{zsV{$Sg{4pC_>QD!*M5peQly1 zOp$R<`B&Zrh|=887jwba5DGpSiqpLbM-;G9P=;-%MkBWA9ewn6!BIKU)UX1P*%uW; z^5kU1tWw@~a95gE!uyK5i#S7*Bhy1R13>ICf31%Ce2u^CYp~dLwQL}fo*fi6GSYF_ z!!Ow*-y?7V$}|PIrWEPzBMIaK*=2zgMj~#YaTa8|Y zZ4sCaLi0C+@*aAqT~bJPfbA&Vknrgc1$nTplWTGWu|d(rCoc2(>eITox8F?w5*xet zL}aKDxqiH%#$i?ba~tu!Jw^a`VvXtXvz*5lwZj9@D*@I|(uNCy`X=ZmuY#CXIDwq7 z{khBh>Z@cpc%)SD`SD8)iC%sVjlCa&HuaaFf5r@3I}fmOkA&;T{nM0?V1UjHv@)+K zhKY(d{E|;<(nef8vAN?kBrw`OJpw8DnzAxc6P?XLp-ohMY-#J*z_M= z`OLpD1P915#?R<1h$S|ij-}4$=kFu0w5e-(@S&0sx@d+a#{j^@82PdJ19DsoA=Ed7 zZVY+5xyjqu{%(GW1!N6g(1ADe^r7x$K@*Jx{T9v9Ty=tWOf`g;oGX}PrmGbQ^Y>|r z4>>JNIBXPi!x6)JSolT?SW|%XP6(D3=A~7NAwCg}BfkF*jEeX*k4no?E||}0MC+TD zi3{0j16Ux-)-D(WeiU~XSDY$#MT_u@5)L51FN)RwhvzM`+1!mN=-vjveIyav$!oYb zJ#y`5=i?ra^>yEkr(>!?DpbgiWpjq=HOyex261^xa$?y%Cs9$di;;T~n*(W8M5Mdu zU+R%IbWJxbaCHTy^l0{~Ti>+kw>Hchh;B73TVI)vM2CZ8Yy8qKK)McT8+uhc7;3k( z+6U5BMpoJsss2|nHiFOTT~L=1DJ3w`ia#cdOSKN}fk5fg-mq}gTK-yCo*{uu5G{1* zZJ?g6F{|DyHfgg~zsRGLI-tHoV~1GnuOJ+5{o;;b-WDXejOPI<+>;z$1@I=5d$f%L zyoc7N$VNlrwOS=)vv@^y0k!l929AyX8ro5BA}6GpS!jdBr2wr0Kd|w{aNVUf-514p zFc50Xr96#k<`+RqS7zuKDSM-l|9fK9wK|G zx77NXq=nE9^2KZ;d=|B*gL;fin`2F@2SbF7z+z4=%uH$BlHo@33P8ubaSi&>UfZB1 zw=A7mU9Ww0Zi9A?^ZhKpym?MFajZO~w9AIj155D+z$2=@R92@8{M?Hk5U|p<7eq=( zf`Dpx3p$S@jb0C!5u4ZY44FgtRYk41@b#@6?yuIo>=<>uA)Szuog80PAN*ucHGPZl zab4{(v{my1viQfL{^N=JL-p^rKbE4pi_2n`y-t}GjL^bXPlfsQ2QJuG1QqcN*zRii zzr=upj;uk&#p@8Wt*$Lc^T4fjGb)RPQ4p(f5s1+3myTF2WXCmb3bdX~_Z?P*a{4r~rB zYxA1^R~opGp6OTAQgM6FeyF~z#}2$otAprBh;T$=G0w|*r?NOWFhJY3&*^u~hmK>; z7@s2!+aF}Po^eXMl{_0YPmM2?@|e2$T2mvr&!Pi=U7cp)qx+v?Y`bqItP00q!-v$+v=|0Nys!ZEVT`9&qJ() zkR+{p<&#L$Weo?h<1cHAhxTZlB+l-;Y)X+WE`X5$nj}?!L5yT>KyGGobfrF7( zRQBDH_Z`;vpIyu$7Wj%lEDqy#G{W_E5liQVknP)PK~IxzQOn}KD6~sCwsOq4qKvh6P7t) z79#z2A~XzNiU))|SA?x>2?M@f`kW#xC(l=23AB|5)hSW3T-0(`4RR zUvRS|%`}Dg?6`{lqapwCI3Qt-3ged_p*9a6vj2c}tzp-cx%Q2!Ju5WduXu*lq6Z?x zB2UcbR!jzl4Y-LB3d~^y8h)hIc@OKS`jgEmUMpjJo8E^I+{+Vak1B#9J~n_pRFd1X zJhY(}f6>7RE5(N<*ij&QC{{WDFEZ;I&iwK354@;{_d@1ZmwkVK1%$T-%qsL*@Ki!E z&g9p&25wwKiN;8@`}fUBJ0IPj9EIzf-;6Kzv!g_$QEgfcGm3WVuF|$}oQ#q;CCv`@ zd>MVtbGyzA`oqzSVOcaYg=|xAKDHxxUq@0;k!w`GpXOgB>BK*fyG)0d6QgI0{2lmo zit8H1#NXk&0&E8O_S9J>bl43VpiT}sfYS>&6ZCK5q)zd*;$(t?8MtTQn4!*b7vzV8nHqfB}p&qL7d38## zO6H(1#+EsSZ26sC|K48f&3fPa*D(h-hCHON`2LEaO9Q~zjB@&F(pw*^@u3>q$*Z{W z8(RM9PjWAJ9ElGf7W9ySPM#Y-O+DHz@6MOp5tsz`r@rvDrA!Fa5%6zzCV!YT}FLc zFZt4atP>!ce^&)i|I$Zym)>swZlB6~dbMEco+R+z!Lv$Jr z-=Q2fC-^(fEqTSEQ~*Wu%JCnSvvblKdsF3cazIXySy157 z@IW+LM*R{hV`e5wsa2Y-hTKhfEnl>L$&BKEE#eIR(w^(3snrTQeTR}bPDGQU)QI?U z>~=T#B_W%=G^@{P+T3{bqx0C)to!1OTOrNTFUx}~Rt0r2 zVEO_kM)C%ETXT_rYCSq(JBV9HIXO}7TgceAJ>ST~dk~K59qy&O!$n?>F@ZmX=Yt65 zpAg}dr=ONPKA05!dC7>|A&T&}7>_fih8^5*bBhv_rfyHg5SK9kCB?0b=~kT-TaTW)eKL?$CKM` zaY<70brcdAMm3LoT)+KYi0-s-p2*s$TT3F#5KK|9o*O?XXXcjg%`?qN?mi$%Gs&kq z=EQ(UmbvkdKa=HmYH4`G^M>F-}v@+O6vyI6P5 z!eNy)-kiZ&{O+oSuIz$zvy5KrtrJIR3E4mL7*&jXg&E~sA3SZyBU6q4e0Bd|4@R68 z5xpFusc|nvPT>J`7JRrK4J@^|mv5$fy0D;}Swyhrw@W0WnJc&QQGza2W-#@h^_H7j zxURwiQ}bF41?G&B_QomZ!CP`IfuR;Al9@mRnfIzEKF3PwX2y^{J63tfj+M_?g;@xu z3phEa3uZvF2Rbz=8$vkev8gxW(2(R%o^;N`5--Oa!4 z5v|>^S4vIJ0zj#4tmebXkCCtI`q-W^wRCjs?7-W4yq3>w5oxX$D&-AWv^CERPk+Te zaQjpURtrfnB`G8~b+^0i{1^L1Ms+{Mx6**-g#86XAMJ~EUU{E-IAHQvps#h|O`r1Y z7+s+~7VE;0pIK!0awfBfp`p*!41Dq@3UXSo>8jWSpyQ5hnjv}QA;=F6FJFCpiFAQ; z{HrSL3Q_pka4c9+RsFdl%O}|9Ph6iY3`+9nz8+A`m~2%=JzLJ`q_L}BJ-LJOXHpu$ zO1*t{(euVoUR49QzZo4nPqiB&L=RuV3GSo~xsTf=;c86*UyV!TrAI{Np4wLGF__{D zMFoH)z>}kAxm_=*F3X&GGWlkl=ef{D#1qZfn;Jt=n&_0-R9&|)PrknE*JdNX^_t0A zvT0Pn^r*7bxkXuK_}?NW!t9QB7i&**gaT$5e(TeRnfCdYvea>vEnBn=4tgOD@`2Y0)=W>QH&Jw6J{%nxCpzGXL?QchS~PiDX;LhEqU8_97^GsrU@7q)Ad+Zb;XI_^ond*>buDhI{z-XG5K zn@zk}^U=@1vmB^I-wb->2tt>I@Ti76-s3NN63f~igDHoXkvp>nUFZY3sVLj1uA-?{ zS~Dk1_zbH3&rsB1rDx8Szo21ZWzh*44;`6D(G?dJF@xf&Bwa3^G~ZL{@bmr8ZM79M|6Db(H$S6 zw%5D}>izr29dBYnC@EbJTaH&I1^s3OzbmOd+y?ROveeXH;4~>P8Y&Q__-$zZkZ_ib zs5O)=!!!&}p)yCUENhw%tga#dB#rg1gP3C^@5C)OI*6}m)p4I&*KKlE{kD#o{!;m< zLo-tXuHW9Op%RU9@l;p8=P&{}cBgGJ`kAGtyIlP;eRk5l^%Yv~p_tQ_oXyKH;m8|60%w-n`T? z^5V%*4}5FdsPDdHteJYQwFFV>-A>&%zxEwCpAluaZF1O-N>qsFT~yT+FNby?s|*&V z?qd}C*wdTa2-*`PwC~ zG1aaaVBu055*EEIw=qDGxYUx8@G46nSuMKw_!%L_(wg8M8$%cp27b{q1%x}v6(K48 ztxCdm@m%Tx7aex4jtBQ;SYaT7^*M^1oR-(l1K_^Vu}p1YwqX4TiCqs`cf={%qKdwW zV>ia57Olgw%ojrZ21ks$UjnKdpMib7m~V|qdQA+%tFSX&<7Q#tI%;6|)HB5y9LR2Y znjj7|C7xiN>%i*0dhj+B=OOP4ixs^0JqgJ=tH|{9@Ry!P#-=z&Ni$7)SXI^O7wbAz zOu_l(=6)N2acqd#YLo$=QwY8A!I1jvdpeaK%?$1R8UIP8CKu)gVEVT7pw3L+GFE>J z`)DRz8x7p$^}5ZcfBKxcHx(*bB#7t)Ic(dc1F&x?tIT#`DtRkCI{~1W%Ebyr%X8Y` zA_bEjpPjQlQKGh+f9-#3$jCP5QwV6D+#kNo>J4g3atgEhQ-VQHZ2S({RKya#BJBuJ z(9^^Tj#9WhE8rM!^kWd!Tdc4VqHsd8NUW9~(>XAoh{3MKDce#{7iq=(Tpza+wi~-y zG~%oYaf2VsGzMui#?!u9ro=fvc}i!AMCX}xx0ia@?jMXT8c(tJEzB0A>Mf^tQ7OyY zmY5JJv%|SO#T)aS_Ie!teA48T)M+N9fX2CA{=Ap~AgSJ6Y3Z_9>e+c-Wi}WEjR(m5 z6N)Qc@4o==@a6|f=qN<@oy!kK%o0;Vg{7SkuQ4f;^Q2`yQJt{Hc(jqDPMywqoyhJPob>`D{YLJW&k-xKz4I@_@|_*Df>!xU`t1o_;ZMu4`+G05g7gtzElb!z`J+fLZ(2z@V*XqWL4>j$80e zoDY8*U|)B>ZXe!Ts(!Y7x>b}qE^6k-w9@uf)qV50bi)t9paTMOzkX&-18%pt6Wi-Lcdk4Om>SRq$a>je zs^H^P*ovi)eUdmemRKiFY&6uqGq0Qx(PhVF?HhKm=XSdASw*{MdklLCJ%d4MsS$yL*^0P6jT9<%Z2x>}@sV*HMK5tKQ50v*-@&$AWJ1A> zE-sqv8*9$@9T?^!wOCq#*xKGwAhxMXNN;zclxzB~)!(eqZ(=kVj+oxe=S=m>fgeYn zLA&?K+64nIQS)#ZlT!%ZL7bNPYkU0f#$WohohNq&C5Ih1e~mf$3dp+PaS5k%Vf_60 z@i&LP?mZw6xsbpsynjqlmO;yUu&PXF<{;Vf<=Rwdde}HF3MG8|l`(qza%dk$do^5# zl?bLbEv62Zqx67-CEaNBms)fLwJ8X-YEy==-_YV0hJTpWKr|8bGQDbJvR(7>oN>~^ zz^8?S0;CLJp5Ut$xJ}8`^le*2xNSH@R+Vh zfOUBqOuf%w7cHDl)9}buQW17Xyg{}{fORa%AUjf>-(iVPzGoG?Pl4KtLy(|&5H+=r zpO9f-OegrH3EPh!kTxE}GI+rp@%@{5*+$cf2Wq9^KqG?}2v4iz{O%#9u^;CV=4=5I zNLATgc|hC&Twdg9$RJPuiCnJ?Wt-9sB_Ur17JDLqq1v`7(;OBT*-!oA`6pl(q3o=? zhGP5J{OrovaVkrLd^9&TtW)iex&`^M>PLd(E&gG;k#4-0jWl#`b@`xfKhiIN_RC$AT686oR7$*Bvy@Q)0Ric;nI!h`nEGc+%K zGrTPxj+k)o!?+l`6oUCpQYSyIL+{=uj3cVcaP(fjgOz8L*?c1{oNRZ7@=tlhpbJbo z+fx)vjYv`m5>{|_g8K8dpGYy9$v?St8(rMRnb1~-tJIId7QH=Ph)VlK0` zD5LWWS<$_>g1aR!bM?R|%BD_@wpyaTs5Nz1Q)SESxOQVdM?J7{%+*%gk}^~$Dub~P z&OMhIDK)H;7^hHz!*fG;x&;%?}< zl8F;W)f^Wl`+{bAT|L*QK%jBT@VRv%=E*bUqyj9lWaG`HiT3GlCSs>ylK13 zqrFGvubsZHb>GD80d(g_Bibqz>tb(Vi+nJR>Mi#giHO%09n*0lYaDIjgrSD#jahN0 z{8my+4W|#f7F0=&YUTpHP^i&6TXoHFDyD3KXFFbtW-1H!SCQXc>mza^y4G;2sgLsL zEH6x>6xT+`3jWysOzYoFX2 z-i$kyu`s&2v*x&;duhDeLw3L+cb()LP5lwRhM9#^z?D-Jfcm04t{sg6*NMoV`7u$@ zM0jn(mk8de4dc#?8#7&ooY&4)i0t?5OR-+g zlgC?rZmR-Bo9Y)FZZ$nICAM%}-FvZ>hIE&t(4v2Bic(x*7Fh!<_fg%^5huv2sebHS zWb)Pq)|2pmN;dCVKVWND_{3(tj5>C3x-P z9~z2D7x@1m3MjlQofvD(xelBjNw)O? zV((gAysONSnE9<TM0mTme`N$}{$rz&6QO@!&(9036Hr!k> z8qu7mxax6=v~lq2z}Ul$3~EAY&x7wDQp3r6s&nExo z8M6(A*XQQz4J)Q)#}XXv=DnM)Dt$6=wCFtXw+N?Rn~CTf$7;{&rAC#Fum8z`)%ba8 zQy1;9mm{dlz_Jq^V$J@WDF!1eWY@7U52|HToMfcio1fX`S3Uk{GE9K;#g9mWRgoTz z0w$WO3-$>GgR?>qT!a3>buR$@!4=8$P>qd(aVdl>g(Yq3l4gs)!oy7`&KZ2T$hlD= zvj{!lFhKgE|8i3av=SG9MW} zge=i3RBweS0G08vNp2gi(<|PXy+B_1pb#35#R&h1@*cDyI5-?V2b}%3|0|(Oj@EMztY)&>OS1y0-1Nd#Kk2n5D5s0e;=1%dkvkr%h$yZ!HTg zn|=%gEU;ceXTO0J=ctw6Klg~DRuhU)Wv4RfPQu}S97)g_!J9oUt*NUn@J!N*{A!wR-VaU;rqaIDzJU}56j-1Zq9nPUtnAlEA|W}#JXqZz zC_B1-;XW+_sAZ?5`el9h=6o(BiU%>)JRCii~>1xd=;5YR~y(~YIIdhMsc#NiIv+nWI`ni#Y+Jz+ zxq_8kQfVGwd)jk1b#3pj1NmZyiyMbbcDa5rLCf9FhJ4!9cEbp^Nuf=d`@?W!#Sjp- z34OJs)*I8mL!@QE12IzC^IZ&BKfJRpwc_?{EHgI7NFpg|qvwwY1X01kU^(e&iXwAQ z@pLYlo%`R`Ew+Wq47Xqs%OyP!0$=C>Fo&Ztav_Hyk^zXswl7RP7NYhPdxr6+U#)yr zuI03+QJBpCvIPEDiT@|S{Q+4=!o)vG(;Lm=x0nsp4pQ4j^ZNJmkX_bXzRc4*YX9K` z{^OJXHwS_L)bRfs^=iO>=(qnP^-pd7KQC%(BOo_aU)~JgWPIsioy?!%aM9%g?)>fe F{{nZiV^jbD