From 64bb024e61a0976aa99dd2c332035268b6b9d115 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 18 Feb 2025 18:48:56 -0500 Subject: [PATCH] Change Inventory Tab Handling --- build.gradle | 2 +- .../kamkeel/npcs/addon/client/DBCClient.java | 3 - .../network/packets/data/ChatAlertPacket.java | 2 +- .../noppes/npcs/client/ClientTickHandler.java | 19 +----- .../player/inventory/GuiCNPCInventory.java | 59 +++++++----------- .../gui/player/inventory/GuiFaction.java | 2 +- .../client/gui/player/inventory/GuiParty.java | 2 +- .../gui/player/inventory/GuiQuestLog.java | 2 +- .../gui/player/inventory/GuiSettings.java | 2 +- .../client/tabs/InventoryTabCustomNpc.java | 41 ++++++------ .../assets/customnpcs/textures/gui/icons.png | Bin 10888 -> 4653 bytes 11 files changed, 51 insertions(+), 83 deletions(-) diff --git a/build.gradle b/build.gradle index c13a3e25d..478bd6638 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { id 'idea' } -version = "1.9.4-beta2.9" +version = "1.9.4-beta3.1" group= "kamkeel.customnpc-plus" archivesBaseName = "CustomNPC-Plus" diff --git a/src/main/java/kamkeel/npcs/addon/client/DBCClient.java b/src/main/java/kamkeel/npcs/addon/client/DBCClient.java index 5fdc75d7e..7dd94ef6a 100644 --- a/src/main/java/kamkeel/npcs/addon/client/DBCClient.java +++ b/src/main/java/kamkeel/npcs/addon/client/DBCClient.java @@ -34,7 +34,4 @@ public class DBCClient { public GuiNPCInterface2 manageCustomForms(EntityNPCInterface npcInterface){ return null; } // Manage Custom Forms public GuiNPCInterface2 manageCustomAuras(EntityNPCInterface npcInterface){ return null; } - - // Inventory GUI - public GuiCNPCInventory inventoryGUI(){ return null; } } diff --git a/src/main/java/kamkeel/npcs/network/packets/data/ChatAlertPacket.java b/src/main/java/kamkeel/npcs/network/packets/data/ChatAlertPacket.java index 67574442a..fd47a6287 100644 --- a/src/main/java/kamkeel/npcs/network/packets/data/ChatAlertPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/data/ChatAlertPacket.java @@ -64,7 +64,7 @@ public final class ChatAlertPacket extends AbstractPacket { while ((part = ByteBufUtils.readString(in)) != null && !part.isEmpty()) { parts.add(part); } - + StringBuilder finalMessage = new StringBuilder(); for (String s : parts) { finalMessage.append(StatCollector.translateToLocal(s)); diff --git a/src/main/java/noppes/npcs/client/ClientTickHandler.java b/src/main/java/noppes/npcs/client/ClientTickHandler.java index 038ea5177..7c9e627e6 100644 --- a/src/main/java/noppes/npcs/client/ClientTickHandler.java +++ b/src/main/java/noppes/npcs/client/ClientTickHandler.java @@ -23,6 +23,7 @@ import noppes.npcs.client.renderer.RenderNPCInterface; import noppes.npcs.constants.EnumPlayerPacket; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; +import tconstruct.client.tabs.InventoryTabCustomNpc; import static noppes.npcs.client.ClientEventHandler.renderCNPCPlayer; @@ -94,23 +95,7 @@ public class ClientTickHandler{ if(ClientProxy.NPCButton.isPressed()){ Minecraft mc = Minecraft.getMinecraft(); if(mc.currentScreen == null){ - switch (GuiCNPCInventory.activeTab){ - case 0: - NoppesUtil.openGUI(mc.thePlayer, new GuiQuestLog()); - break; - case 1: - NoppesUtil.openGUI(mc.thePlayer, new GuiParty()); - break; - case 2: - NoppesUtil.openGUI(mc.thePlayer, new GuiFaction()); - break; - case 3: - NoppesUtil.openGUI(mc.thePlayer, new GuiSettings()); - break; - case 4: - NoppesUtil.openGUI(mc.thePlayer, DBCClient.Instance.inventoryGUI()); - break; - } + InventoryTabCustomNpc.tabHelper(); } else if(mc.currentScreen instanceof GuiCNPCInventory) mc.setIngameFocus(); diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiCNPCInventory.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiCNPCInventory.java index 3ab43c14e..2509837a8 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiCNPCInventory.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiCNPCInventory.java @@ -15,7 +15,7 @@ import tconstruct.client.tabs.TabRegistry; public class GuiCNPCInventory extends GuiNPCInterface { public static final ResourceLocation specialIcons = new ResourceLocation("customnpcs","textures/gui/icons.png"); - public static int activeTab = 0; + public static int activeTab = -100; protected Minecraft mc = Minecraft.getMinecraft(); public GuiCNPCInventory() { @@ -34,54 +34,43 @@ public class GuiCNPCInventory extends GuiNPCInterface { int y = 3; - GuiMenuSideButton questsButton = new GuiMenuSideButton(100, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); + GuiMenuSideButton questsButton = new GuiMenuSideButton(-100, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); questsButton.rightSided = true; - questsButton.active = activeTab == 0; + questsButton.active = activeTab == -100; questsButton.renderIconPosX = 32; questsButton.renderResource = specialIcons; addButton(questsButton); y += 21; - GuiMenuSideButton partyButton = new GuiMenuSideButton(101, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); + GuiMenuSideButton partyButton = new GuiMenuSideButton(-101, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); partyButton.rightSided = true; - partyButton.active = activeTab == 1; + partyButton.active = activeTab == -101; partyButton.renderResource = specialIcons; addButton(partyButton); if(ConfigClient.enableFactionTab){ y += 21; - GuiMenuSideButton factionButton = new GuiMenuSideButton(102, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); + GuiMenuSideButton factionButton = new GuiMenuSideButton(-102, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); factionButton.rightSided = true; - factionButton.active = activeTab == 2; + factionButton.active = activeTab == -102; factionButton.renderIconPosX = 48; factionButton.renderResource = specialIcons; addButton(factionButton); } - - if(Loader.isModLoaded("npcdbc")){ - y += 21; - GuiMenuSideButton dbcButton = new GuiMenuSideButton(104, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); - dbcButton.rightSided = true; - dbcButton.active = activeTab == 4; - dbcButton.renderIconPosX = 64; - dbcButton.renderResource = specialIcons; - addButton(dbcButton); - } - if(ConfigMain.EnableProfiles){ y += 21; - GuiMenuSideButton profileButton = new GuiMenuSideButton(105, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); + GuiMenuSideButton profileButton = new GuiMenuSideButton(-104, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); profileButton.rightSided = true; - profileButton.active = activeTab == 5; + profileButton.active = activeTab == -104; profileButton.renderIconPosX = 80; profileButton.renderResource = specialIcons; addButton(profileButton); } y += 21; - GuiMenuSideButton clientButton = new GuiMenuSideButton(103, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); + GuiMenuSideButton clientButton = new GuiMenuSideButton(-103, guiLeft + xSize + 37, this.guiTop + y, 22, 22, ""); clientButton.rightSided = true; - clientButton.active = activeTab == 3; + clientButton.active = activeTab == -103; clientButton.renderIconPosX = 16; clientButton.renderResource = specialIcons; addButton(clientButton); @@ -89,29 +78,25 @@ public class GuiCNPCInventory extends GuiNPCInterface { @Override protected void actionPerformed(GuiButton guibutton){ - if (guibutton.id >= 100) { - if (guibutton.id == 100 && activeTab != 0) { - activeTab = 0; + if (guibutton.id <= -100) { + if (guibutton.id == -100 && activeTab != 0) { + activeTab = -100; mc.displayGuiScreen(new GuiQuestLog()); } - if (guibutton.id == 101 && activeTab != 1) { - activeTab = 1; + if (guibutton.id == -101 && activeTab != 1) { + activeTab = -101; mc.displayGuiScreen(new GuiParty()); } - if (guibutton.id == 102 && activeTab != 2) { - activeTab = 2; + if (guibutton.id == -102 && activeTab != 2) { + activeTab = -102; mc.displayGuiScreen(new GuiFaction()); } - if (guibutton.id == 103 && activeTab != 3) { - activeTab = 3; + if (guibutton.id == -103 && activeTab != 3) { + activeTab = -103; mc.displayGuiScreen(new GuiSettings()); } - if (guibutton.id == 104 && activeTab != 4) { - activeTab = 4; - mc.displayGuiScreen(DBCClient.Instance.inventoryGUI()); - } - if (guibutton.id == 105 && activeTab != 5) { - activeTab = 5; + if (guibutton.id == -104 && activeTab != 4) { + activeTab = -104; mc.displayGuiScreen(new GuiProfiles()); } } diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiFaction.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiFaction.java index 9e7b39cf6..ff7dcbb7a 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiFaction.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiFaction.java @@ -133,7 +133,7 @@ public class GuiFaction extends GuiCNPCInventory implements IGuiData { if(guibutton instanceof AbstractTab) return; - if (guibutton.id >= 100 && guibutton.id <= 105) { + if (guibutton.id <= -100) { super.actionPerformed(guibutton); return; } diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java index 07af473b1..a6c1a4dc6 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiParty.java @@ -226,7 +226,7 @@ public class GuiParty extends GuiCNPCInventory implements ITextfieldListener,ICu return; Party party = ClientCacheHandler.party; - if (guibutton.id >= 100 && guibutton.id <= 105) { + if (guibutton.id <= -100) { super.actionPerformed(guibutton); return; } diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiQuestLog.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiQuestLog.java index 1ab495627..6091ce220 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiQuestLog.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiQuestLog.java @@ -171,7 +171,7 @@ public class GuiQuestLog extends GuiCNPCInventory implements ICustomScrollListen if(guibutton instanceof AbstractTab) return; - if (guibutton.id >= 100 && guibutton.id <= 105) { + if (guibutton.id <= -100) { super.actionPerformed(guibutton); return; } diff --git a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiSettings.java b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiSettings.java index f85d95c00..e702e59cb 100644 --- a/src/main/java/noppes/npcs/client/gui/player/inventory/GuiSettings.java +++ b/src/main/java/noppes/npcs/client/gui/player/inventory/GuiSettings.java @@ -122,7 +122,7 @@ public class GuiSettings extends GuiCNPCInventory implements ITextfieldListener, if(btn instanceof AbstractTab) return; - if (btn.id >= 100 && btn.id <= 105) { + if (btn.id <= -100) { super.actionPerformed(btn); return; } diff --git a/src/main/java/tconstruct/client/tabs/InventoryTabCustomNpc.java b/src/main/java/tconstruct/client/tabs/InventoryTabCustomNpc.java index 888bc77f1..39f9f1761 100644 --- a/src/main/java/tconstruct/client/tabs/InventoryTabCustomNpc.java +++ b/src/main/java/tconstruct/client/tabs/InventoryTabCustomNpc.java @@ -17,8 +17,6 @@ public class InventoryTabCustomNpc extends AbstractTab { @Override public void onTabClicked() { - - Thread t = new Thread(){ @Override public void run(){ @@ -27,24 +25,7 @@ public class InventoryTabCustomNpc extends AbstractTab { } catch (InterruptedException e) { e.printStackTrace(); } - Minecraft mc = Minecraft.getMinecraft(); - switch (GuiCNPCInventory.activeTab){ - case 0: - mc.displayGuiScreen(new GuiQuestLog()); - break; - case 1: - mc.displayGuiScreen(new GuiParty()); - break; - case 2: - mc.displayGuiScreen(new GuiFaction()); - break; - case 3: - mc.displayGuiScreen(new GuiSettings()); - break; - case 4: - mc.displayGuiScreen(DBCClient.Instance.inventoryGUI()); - break; - } + tabHelper(); } }; t.start(); @@ -54,4 +35,24 @@ public class InventoryTabCustomNpc extends AbstractTab { public boolean shouldAddToList() { return true; } + + public static void tabHelper(){ + Minecraft mc = Minecraft.getMinecraft(); + int tab = GuiCNPCInventory.activeTab; + if(tab == -100){ + mc.displayGuiScreen(new GuiQuestLog()); + } + if(tab == -101){ + mc.displayGuiScreen(new GuiParty()); + } + if(tab == -102){ + mc.displayGuiScreen(new GuiFaction()); + } + if(tab == -103){ + mc.displayGuiScreen(new GuiSettings()); + } + if(tab == -104){ + // Profile Tab + } + } } diff --git a/src/main/resources/assets/customnpcs/textures/gui/icons.png b/src/main/resources/assets/customnpcs/textures/gui/icons.png index a0bd71c262c6ba8c9057a4cbd66f83c9bec698dc..bcfb3ba65e65c136dd12360329e2cb7c6466f3b9 100644 GIT binary patch literal 4653 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 SQf=?s4y??qP3!RP3I7EXbbpZm literal 10888 zcmeHtcT^KW`|c+6UZq3ms3<6?AT@MCFCqw1l_Ju6Cx9S`^d`LtA|RkhF9}_G2c<@e z^xh%BUB2IU&;9S7bN|14&SZD9+04v4Gw<`h&odEP8cJluOvC^HkRg=ibpQYYUP1su zeDL(rrO4{$&Q(WA7APBFSpxue03k2)%qwGS*4K;ns7ZSFgg5pbPdYP#E8skpgeJl8VK(S zJ7vv3zu-JCj&iQybl4kB14=KwE_1H2>&TkEp2UgLI#@@C5&);}ZTIoKpbUapMaY<1 zms_2MRtsdzX)o+gS<;bc85Vn^+7N{67y=d|^P&spzOYu_H@n|n+V@3U$mW?3s{_uF z*~vO|elYq5BM4w@UnLr775ciw4Td`ap#Z=dhNh=WN;NgIpbfL+Btkq*+z*!L?C$hY z=S!T3;NM1|6It%iscy%^Jza&T?4JPW5aiNZYA2#Y49l5s7u(4+>F74;^AWj;i1=Pg9ffl>yDU)*IO7I5k#qAa zR&jdO*HUf8Ea%nNLm2}vp&Kjmi)#ytmX|f0m%DFVr2(_c3>$SJcBZ>EL~xeN<*sv? zk|$2`De}A7((^&Z#exvP$~Eza@rxICHd$HgTNWKjch93rA~5tyfdC;1@%~rhp~Op^ zmh3oR;_>lYHiGYYIX)`7=3IV%`P$O5)rJ(_y`>vO;{imYQ%c@hm8RX%CwV-pMGYO+ zI*TBCjJwqv$K2X-M=jO6*iMhK^AMEKE#kkEYXtLmrpY7obGXDR@QSKzYl5 z#R3@Bz`&a6`;`W};KYe2Z#ga@-~2eE`>Ur%-Y^Z1PSb0^SaHDU-Yj4_w;LCKXPRp)_{>SVS*$w`y_Ev3vu5zyJt|9Y-IiA zJUHmMC@=f9Va|}RVg@|}ChvYeA^~zrOP{%v;mYrxxF0VR&(FLY3_LC?#1bIqk~L;2 z@}$m7jOl3>^-xHY7dtGmS=Fp%v8Jf^_D04_V;Wt z%ibcL^nLY@>CkrdmQOia0DKwVl~w;Hhd1~ddqzHcgg^+J3#FRX)a2@pHwYfOAKQvu z9(pljO_lds=ITu0k4VOPO@2<3r5#_xyG*-%BZ_&^I^M7JOwr1GLC0M#=8y2%#eJ!W z9kV~28aB8r(U+dXvTc5K0zH)3ZdZLWzwdf7bZVyYh4S4S`UqXM=kws4x&~r1B=EYs zb+wF*b6NhXx3r9;JwC~=*k$kOQGuZCrI8{&&mu6JORw#ujSD1987Ywy+YayW@E}gy z1aY)wkrCR-jxdH?C$?jpC0-=quh=oapGK~acFeg$P=(B=00L>*T$aOI_uvkoaSuS4;ufu&`CiqKGkq;>SuQxsM= zSLP$M$oMEdJ+W&&A9dh|)Ybkj>ik13fQ^n3@@3$`aoq-g;7wmnQ)PJWTv zLkRb8%6RmnlD_4&&>eN0hS}(!k0Ko|=3h9f^7V*pD;T}y|0nI9{-d!=T^N3<^tR;h zd}}NB%UYzx5piH(QOehl`AHWONx7lvNiVKBLfW6dA^k zP_t?oFm`~Wi0<6H9rB5&wraR0y2)Q8?I}@sm;wTr(>PtTEg8?GXFrD&m++hItUmY@ z98xeaVB+S{BZoYWCYO7WDq%c1J8a4gLdeGlobGMZ;9@1n5x?bCdw322Ik~w+;L3I| z71oi?t~^`Sc?cj6YOhWa2LP~c4sTk{D#XW$-n+_mJB_Hj4sJkaOWjwut*QCD`De(X$m=Tm>a7*+VH&gs-Omu3b7U*?Vt>qJp-nh8%%Cx(yn|9<2Rw?`U%jL&c% zAaRwl+it! zY3AjJ*Hhe(J&_OL;Z863pv_=?^@%Ozp8Q9u-s%ce*w)GWM7N2|QagfAR8=4IE8XQ_ z5%*Bjxz=UuigInRx7MfMKREE$fc_PhijB9{AOK#j7I&yO5q>QUmG70mO_OUE!`2QZ-L)+YcB_tD6AWjQ&4~h z#AaocF)#U)*U=)(u>2aOfE|6y{w}a>aNI^R=7N$R|6Xm@iUKb2 z4B`Uh^!2uJu@7K?mhLDKXtEz=FCyBmgA1uw@0)@qhp%7s{J0sH(T`GYHOE{BK~A(S z&Ro=^d9I=j(}cd(%ytuO?^q-x?`Hcy7)a7rRgI)xwP^AZsJ4IeX80Svg@pxaN--6!7-0xZT z2<{3e&yYuHCn^TMgWpD)>K^tSq@DW!Xw-aQ%;+HYe5UFJ0^mFyuNkEl8D;r;7lShO zc{9|NufR>{p2VJo1DBQkraD5opM9r&Bydm>77)H~(G?|rjNSfhev~2q)ouMwMk%o1 z+KIMm3a>zz7mr+X4jldDd?*B&%vU`Bb=SY3g*({TPak%vfJyJy{v_&5J?HZ_eZT(m z=hU0{qG7gdW?@T*51NAMLicNXh$wr19sZ>ng|B#rC>)bbn+^b?y81XduqYe^{L?G8 zki4)+uFFNGeg@!lWF9tI_XnK*(8T1sN*{B1Lk7wO3W#n-0?1)G>iD6a{)EhOl5N)a z3zne4_W2{a0TGM&APrz&^5o}W{@&T}=;>Ca*d+w8^sbGrGu~X)ro99X? z{AOKmChkRrR;W7^3FUmkO}*k{=i9%fNuW|C7{ZiO+@!4FWC!TT=lc17fyvr6FIKrD&l8ZLVp*cWLPu z@;5c*`rfU_FWZ@8=F2ZCC+DQP3j{3>Ob1_%d@gM2zZ+)2 zj5o0=O_`k_SiX(SKRvy!*b-$MP=x@GQg*tk{wnPzynhb;EpRKlDO}{L&3{+Ac4Tjc zh}lKRp zwnc47+aUL}`#F-x3JKD+(7}Qx2Ril2=yKlk40oCc7RetEX*p|Qwh&dJ4 zSsAnl-YuweT`AT_G=nar+4sN`mHr-y1nj1d>3L4SO)!C7!3D-9CtF_=-}3ZU^f>11 z@~4&*J-E(td)o8jt#Kggz{G2KBW*|R_y>Y{6g z?uzl9F&*C9i{|SR1OTDYu2;PY-2$k}@fdx79)vk5kdc}3aqCM703-+9^6pJ=x@shQ zVk8b=bRU`brSESwlt;#i%Yp&D-Of1b&zDLNJ(xi-;U%-qm`@-vt|BBP)%Q6*n%EJi z{3d~q^d}H&A`U=nLuhG#$*@BMWz86Di_;*9X3J?jqCabJ!BH&ar@(;NjD za(A&|`S_~!YytI}9Kamphfs|E*;uNnk+`pxMtM8M={v{1^lXPBW@wJO&p18^CJ|rU zSeVzy^8Pp(!}WF;15;Vfyl5@Zm3C~&3(^*S`{gCRBfn!i);*zO7eo;Ws-SL^J>=h+ zZzk^C@AJF=tgUfk9p|N-7q|hqVpztx0yX7wv)FD&eGd&EB@NADJI@7y~Jw zvP<#42ujzkRL>nm7OJlE@+Vd}<2~VG6yV3g`HTQ{`^-_(5i+8?``*4Q$uhx$#;LFj zf3Ug2pZ&DyS%dzS0CkX;K=Sx@hh)sXuI%hUygxO~Aw+T7pD3xqVKd&S6X`b9SBG>T z{*xYkqLiYm&By5oJW$$03z>$PCSHNTq|Wo_g@uw|1zeB9o1qWYYC-FDr>n>wLb$mZ z_I7cED_r{T+{6lwrofz!e{L~F4q^?*>ABWW*x1v*1}9xoW@?0EE!h^^iZc|Ba$7J@ zC}34sxNx*mW3e4i+NY-8k=w-MwV9#~mR{~77N}+;(N&rQI~81pz#_w5AaD&fb7 zh=(^3i;7BG#QHjMfxjTNjA9rbnCumf?QCx9K?D7q7zR9RQId_qafI#K(x?Sow%Wfw zz;-%uQos6X%W-CXcAGKv?@z3j2BJemMI!RG>~k01P#@L+>vh}R2>T}vnvU8kf#0!z z=&QNr;v+LJ#FPF7O^yZaG}^HfVV(M^u?r{BL_TjFvmfR8;|Bmkv$LVcLDJ{lx)2AE z0i!J3-s?BI&3*;s1|@n%QctVwjTyS4LY!wr<>lp9HT3Wf#dmPQ*x6?QIrsK34R7P> z_j{rs^G}ovVZURQc}~UY(zUg#DIhfkII%IO^vpq9f?Em--cQ*sENMaPf9TN()2{Mv z&AByj&KNNAHM@qLLzx^KOlQBV8GzFC7LYKW3CBT+hky$bfA*TSWIJql^^`e=f?Q5c zjz&dAMO#PbLs%GZVp7sw)4T&s+(0n-%u>Nhy z=o3GM=d{Z+@G0Ci-E(&SRcHI;>Y#pOHXu6ck9OGQ^E%VJf{&Tj(es}9e{O<@&nCxi z&Rn+jL3n#{J=NQ*?x(ZW=x|ND%HfyIFl7FwKI{xOpgPQrugNrc3(a^7;<<>hp=@3P4I@fB3r0;%R=Zrr%6hFu5WVZW42AC;a zO8oQ(pV_n-$h`@N9%C~3ZhehF)0dSUb)7j5DlPs|=~Iqw*>2*&*;tMr^Cl0P`zTxR zO;Cb|Pjq-501gP6`N&JBb9@BYUTNQ^yC3`voUbiuxOv0?va_%f3<+ixDsD{YHYPti zS@NE4+@$^~Jy}e77lX97P+wQc4nFWqWO{e? zO*o#jEz`4v<8Dx`jS>(0#BxE;r9_^X)*y|6beBJ0p4jQN&plb!pN?}VQ}0rNi^cnO z8VAtEd=2O@4fJvE_#le7{s!NSl3zGYUbqnLkBPg`1*$tdc_n*lfOYG~>z6JUA!-4A znh+C?JVj-1?1&Q|=~uqPq7?{$zP^&8h2K7AjqSQDZ(^#oO|FKapK@eqC0znbf1851 zwO;7OMA!OTsU{);sn1aFBQCP)7F^I;!236Svnau5)dJJLi+@vAoFoVA>dBq6< zTr6zt#5R;EwP}*%Vvn|AzJ#Ub^(mdNYBGdLW>qArMeVp5jlc z$PIztI&^xbxXuo<`w{E9D+0y>upU;)ONx~OjGA$j>aO(BCS6;bx29^ICOVy)Qj$X} z0gxYxv|MN~;H7S@ql4WgfPI7@J$%#SFH1J8|5jxxEmtA-MS6uu(i+mu-=yO*~*HvE+JrW+T-?lU{CHJ3F1?#i{#ztz=+g4y1Qcw${7IzVM;>J%|;8=e@Umr z7?s!IIc`sd8adYC#b8~?vb+|EB=&nv&B5nhhr>#H?KGMgebo6a@WCq}(oI_KieSfV zt;P|boez?5XY9KR`|t5_8F%+kA!4oPyf8v?S~@7w0k6XCpW8>W$WB(0{9*4xM$k37 zoL$#>G;|-6qvvv2E+I~0%gO2U zs(r1jB(kdH+SAk5#|&qeb`)BR@b@ZM=N65PjE>G;1&l3T5Wsx244dx}ASF0=w~ZQ{ z+FH*T9Em*|;YYvgWOtKmB(Z7SIis{-8WQsUK<8P4e>4uVYc9b1;u2o(c?*g0`|N45 zok6P@IV}aq;DRh64qVHC(!>_8OnM};m1|$Xk1POW0!OFs`4o4!dVaxGkeByrv_dwV zVT0?1wfs)TyoUfpbrhg3%D#--BOj?r23RepJL3eg`R(phpnQrPBI*>uLY)ZzPv z1l)VQ_fA*+kB)HseDlf3)CFiXXR7!^?;BMsyRHnlGh^4^0^y^`qkj<5e*i%7jfvz; z0_eK%)ZlbXsbWh0A|opvYmppdz)AG+8Ut_&<;6Z5$$JKX6!B>+?@$K|RJT;dn-soQ zDm;E^d_IXj^F9M}~(J z)~xKOgT#~iphNO}d5o^Vuzshi!t}Sa$v)q|3T+$wjtM}Wap1Kl3P(;!q7(j&a0kXb65b}0iFQ0khi6twFyJ$}M4F_)hSxo|T1 zFk+4Ar8JY%E%CWqp+E36D(_>W3_k$(J=Bk^6X^WDEu(x)-z2V-b7&Jc8OU(-j^kmv zmZSJl-8FKN6BaFnTsw6#eb^Zt+2&ea-+U#jKbkX+!|n-y83ml^wAiO{oDvsql49vX z<`zfVF616TejBplGBJzZQ7IN}esSr0;2{n)n>H@q%=nnVL$2(97xeZuOgF;~av`&? zG2PegDbVK_felqJ$pwMU?`(U^TX)A0n6uDful74c_gFqtz%y}isjxoNk(kL$x=lr} zGyAi;)RY^7-ZWquTOha;Xtoj%lvBZuk+Baue8N$iFJi8|BLM{onvC*88n(>bx)Dvi z4k9q5d`u68ynK(%Fy$*M0a86YjEox=PvY=wf>DjNu&+2P;VJYdT<+0VXA9fVfu}i5 zvkte}F1rmaHNr%V4V*;m_WHLVP*YRCRQ)+f0YmG(IC$LKt`{_8 zOs(cmj;wT*+=scHcX-@0>9T>tr@E)#Eh=NrTy~ z9qIFB8w8dDfP0oa8476)b_-1YvPG&(X48mr{)K|6yTUtkcYWK=^4M*&it%K2+F_2g ztghVAaT!FnYotR$lHy06Lfkw(|F(Av;Q;S0jXsTu6i~>R%REqXZv@%#_8)PC0Wv!o zkeXJJ^W$FDT8*6TeVK51cG2uRo=2ix0%J0QFQZ!o!>`|ie1;13ZX!U}*aW9;YtNz% z5+4YHu~A3=%2D1lZ4NX*>{%&x#lC9?Jbf|Ks@}$9es(EiI;mU95AiPH<+Cb|P0R zSW46yQ#bSCP569EK9hgGcM<@qFGG^HS##P#oRGr-|G)8fCLY|?L%Qz1%J4g4cH0bk zZOrkIXhdNK_*q^_e_U*(2DZd|^d2P- z%8T@ub@!hQ?nH3fpVXxX>6;|bv{E|!FbkhI*Al~Ks0LPHSdIyXMA97GQscSIRifR9 z0sum?1U|IiVTg3DBgWAAsuTDW--OzpZcNAC#Be(^^a9ILp28r-1F~8CBD1R{Z`#2G zUo}o-slJJ+TzHnt%PE@Wbf85rIjVQ;5uU{M+luV@qtwq=`$tFeDZ#vuqL`~i-q7`C zc#JY`3xa0GgP|B~oz zxiAz&7-u7F&L5ANszDFkbHs^r9Cl8s-MwdIvguPkc<^eZJnmphBzZ;Xf`+mER-BvI z2mtgD2%%<9P5s^EC9kwrPmisU9k174PcTF0tToKW{Et!E$IUh+$JJUT-2YTU;+|F_QmYuKVQ#jN?b!=_y z=UUU7`ACqcpr#D6uc>LV{njGqIM8wM<;UacB>EEypF@I-us!+mz|r!@7X&#?goU=u zN6JCva=~mTnr@7)Ujcc79M`k*GU%96U{w|ei0%d~Pcvh3=5SHHR7PK*PBnp^<$G1c z3~v9eR9g>_Tbn)6YnzT6NvF``KgrT1&;&KvXggAQ@H-Q{JnD*dHY|oEu`y-U<9cgZ zwTd+mr=0cPY0?w_u~)bM_$(&(Z~*`@%gtVZ_RA}hhQwyPW1OL7WmmV%Mou|mjWi^Z zkP90H3E_pT{6KvvprN0t_Y*@Xzuc9Z`3xPJ%Nd#Oefh@fl8Dte78HB4j!pMX^4{*C z-bceN`vQ^r7xZ~-IPdY+To%9uY1!zyds6MTaFE>;smX?g%^o)kE~6};7rq8vc4}}4 zkMovy{zJI%M|@CTrd4ZciN7Oi;L&~JmhyA|+>z}p{=+bErCQAfk#%rJ zK-V#_iK}_l*F5kPvYJU8%AhUvo#yh)z;z5&i$&GM?G`R5e(dzfx`{`O#StXdDDj}yy!Jno-h)7+mC*`9x@}6Dk6_qRz6MGe zv?)>Gx$ZxuYGca4aF=C0DQNS!TBfVNiSfDX;Z!zL>gD?xX!i%1a=J%4JK3u`dtQhK zo)Kv8rW#QGOB5d|EO?>y{CV+VR^)Ujj>}MZZq*I@)91mgw$*@)HB$7r*3d&2H3#OY zwwJtxMvqlp;~qsxf$wq;JJ2n4Mcae&FV9N!R+oD%lzp{*Zdu%4=PSHL8|8eAOCL_uzk8wh`1>!=l+!bvy1{q%)9ceOTGb~Bkall zN1oJArit6Zf)5$gK)nz^j=NIxP+`?~!nioNpoNV7rTF1t=6wYLINM90teI+cnA=bV zOQm?1Px!<#^Ud(nj9L44O_gL%-crbtXEnduNnG97_)!iFY(L2Zf4JtI3m`!q6aq*l zyfv>pM(=l6UQ>k&7^S#hc>hOzvXutdrL0LyeFZq*m@u5nikX!kzVDw3`MvLm-4VK{>ZN#v|m~|CS5o&R>+QaI1Xhi1U&zrUEG0V1(&a1OTPW?jyBAErYyx z?Wt#Y4NXx95!mS)l*d!6W@WAOI~iJyuxC} zUdkw1R}n1|v>;^{b8xJXG%k43nw;yy@G(JC@ZB61?#>v9>ecAa-taqk1irJ2S=VYD zAg(&+?!Uh+xUJ-PCWLr~J7Tlh>2KZA#>i%-I@W9u!KNn#G)WS8al;^hg&ar} zfqbW&uj&I&1b)D-a`6v)koY9uy5FKS!C5|+LU;u_!2T74YUKkkT#L^ZJMA@!zRf=; zUUh37BPeP3+Q!C47K9fGJeBc(MDc;LKV5#(w@?5eXJsz#ZE)g#BlE0aG#`3$t?1W* z>dvdQTxMZi-M#YzBW-OHa<~R@hoxSv)Evf@(Xna*?cjKDWGSytTR@T1xJ(F+r}=MD z|MxNy&mC>R&N4+*d)(7l%)oaTm?!2^)_Sk!l?;-#;Zg1g-`D(KIOeG}iH#KcotCNnXh zwU?F4$^A4DH#3~E`{AcJmXMOSmp4tPqFLf-=qdKGWX>%!-o~L+he)pP1w6!BKf*`b zMF;<33BB11b#n;wnAx zKiA6WiDc#!O+k_cG&KM!7xxp>fyjOpJTPm4Ke{Eqt4T=e`erop-^X!7ocxCXNI6pP z0-&6W1nV0axz{5GLM17U3TVpT_j35tw%5>a-q5KFV>(;E>VUO9tI@CRV;ssSb9%~H zOLAV*Ye?2R%AU)r{Ez_0i92Wy#sZgDq>WcGOvKO!nNH4?5(RixLdM(tId6nVo>M)D zpuS|WHZ+faHfIt?i$Iz^6v#m$kj-5$7VMYetuNC;J2f5!ng!u!Sf zctc@`WStA;b>;D*r0e8WO%0jY_Mo}Uc_FwZ5#(=*%F48|dJ%w*ZTlt_ncrg`BEX3o zO0dFpW!7S9YzzU-!>e2LX+09m5rHKQ^ya1lu#`hD7XohAQ4tR6Mm7`q5&w&m(ECl} zEEJ2m!!Vmk_?nnJS^hyJ71{T`I%;rp;mc}ml!I4x*y{e#HALG