From 5c99de382e193eba8cde5b25fc0dee50f10b5d7d Mon Sep 17 00:00:00 2001 From: Drullkus Date: Sat, 7 Feb 2015 14:36:53 -0800 Subject: [PATCH 1/2] Fix the patterning on variation. It will now properly please your eyes! --- .../com/cricketcraft/chisel/Features.java | 4 +- .../chisel/carving/CarvableHelper.java | 153 ++++++++++++------ ...{arcaneRunes-v9.png => arcaneRunes-r9.png} | Bin ...unesGlow-v9.png => arcaneRunesGlow-r9.png} | Bin .../arcane/{runes-v16.png => runes-r16.png} | Bin .../arcane/{runes-v9.png => runes-r9.png} | Bin .../{runesGlow-v16.png => runesGlow-r16.png} | Bin ...Plates-v9.png => rustyBoltedPlates-r9.png} | Bin .../thaumium/{totem-v4.png => totem-r4.png} | Bin 9 files changed, 102 insertions(+), 55 deletions(-) rename src/main/resources/assets/chisel/textures/blocks/arcane/{arcaneRunes-v9.png => arcaneRunes-r9.png} (100%) rename src/main/resources/assets/chisel/textures/blocks/arcane/{arcaneRunesGlow-v9.png => arcaneRunesGlow-r9.png} (100%) rename src/main/resources/assets/chisel/textures/blocks/arcane/{runes-v16.png => runes-r16.png} (100%) rename src/main/resources/assets/chisel/textures/blocks/arcane/{runes-v9.png => runes-r9.png} (100%) rename src/main/resources/assets/chisel/textures/blocks/arcane/{runesGlow-v16.png => runesGlow-r16.png} (100%) rename src/main/resources/assets/chisel/textures/blocks/technical/{rustyBoltedPlates-v9.png => rustyBoltedPlates-r9.png} (100%) rename src/main/resources/assets/chisel/textures/blocks/thaumium/{totem-v4.png => totem-r4.png} (100%) diff --git a/src/main/java/com/cricketcraft/chisel/Features.java b/src/main/java/com/cricketcraft/chisel/Features.java index 7dc20134..5703695d 100644 --- a/src/main/java/com/cricketcraft/chisel/Features.java +++ b/src/main/java/com/cricketcraft/chisel/Features.java @@ -146,8 +146,8 @@ public enum Features { arcane.carverHelper.addVariation("tile.arcane.0.desc", 0, "arcane/moonEngrave"); arcane.carverHelper.addVariation("tile.arcane.1.desc", 1, "arcane/moonGlowAnim"); arcane.carverHelper.addVariation("tile.arcane.2.desc", 2, "arcane/arcaneTile"); - arcane.carverHelper.addVariation("tile.arcane.3.desc", 3, "arcane/arcaneRunes"); - arcane.carverHelper.addVariation("tile.arcane.4.desc", 4, "arcane/arcaneRunesGlow"); + arcane.carverHelper.addVariation("tile.arcane.3.desc", 3, "arcane/runes"); + arcane.carverHelper.addVariation("tile.arcane.4.desc", 4, "arcane/runesGlow"); arcane.carverHelper.addVariation("tile.arcane.5.desc", 5, "arcane/bigBrick"); arcane.carverHelper.addVariation("tile.arcane.6.desc", 6, "arcane/conduitGlowAnim"); arcane.carverHelper.addVariation("tile.arcane.7.desc", 7, "arcane/BorderBrain"); diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java b/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java index 0ec02d2b..10b431cb 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java +++ b/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java @@ -1,10 +1,14 @@ package com.cricketcraft.chisel.carving; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - +import com.cricketcraft.chisel.Chisel; +import com.cricketcraft.chisel.carving.CarvableVariation.CarvableVariationCTM; +import com.cricketcraft.chisel.client.render.CTM; +import com.cricketcraft.chisel.client.render.TextureSubmap; +import com.cricketcraft.chisel.compat.FMPIntegration; +import com.cricketcraft.chisel.config.Configurations; +import com.cricketcraft.chisel.item.ItemCarvable; +import com.cricketcraft.chisel.utils.GeneralClient; +import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.block.BlockPane; import net.minecraft.block.material.Material; @@ -15,16 +19,7 @@ import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraftforge.oredict.OreDictionary; -import com.cricketcraft.chisel.Chisel; -import com.cricketcraft.chisel.carving.CarvableVariation.CarvableVariationCTM; -import com.cricketcraft.chisel.client.render.CTM; -import com.cricketcraft.chisel.client.render.TextureSubmap; -import com.cricketcraft.chisel.compat.FMPIntegration; -import com.cricketcraft.chisel.config.Configurations; -import com.cricketcraft.chisel.item.ItemCarvable; -import com.cricketcraft.chisel.utils.GeneralClient; - -import cpw.mods.fml.common.registry.GameRegistry; +import java.util.*; public class CarvableHelper { @@ -36,7 +31,12 @@ public class CarvableHelper { public static final int CTMH = 5; public static final int V9 = 6; public static final int V4 = 7; - public static final int CTMX = 8; + public static final int CTMX = 8; + public static final int R16 = 9; + public static final int R9 = 10; + public static final int R4 = 11; + + private static final Random rand = new Random(); public ArrayList variations = new ArrayList(); CarvableVariation[] map = new CarvableVariation[16]; @@ -88,6 +88,9 @@ public class CarvableHelper { boolean v9 = Chisel.class.getResource(path + "-v9.png") != null; boolean v4 = Chisel.class.getResource(path + "-v4.png") != null; boolean ctmx = Chisel.class.getResource(path + "-ctm.png") != null; + boolean r16 = Chisel.class.getResource(path + "-r16.png") != null; + boolean r9 = Chisel.class.getResource(path + "-r9.png") != null; + boolean r4 = Chisel.class.getResource(path + "-r4.png") != null; if (ctm3) { variation.kind = 3; @@ -105,7 +108,13 @@ public class CarvableHelper { variation.kind = V4; } else if (any && ctmx && !Configurations.disableCTM) { variation.kind = CTMX; - } else if (any) { + } else if (r16) { + variation.kind = R16; + } else if (r9) { + variation.kind = R9; + } else if (r4) { + variation.kind = R4; + } else if (any) { variation.kind = 0; } else { throw new RuntimeException("No valid textures found for chisel block variation '" + description + "' (" + variation.texture + ")"); @@ -140,38 +149,44 @@ public class CarvableHelper { return GeneralClient.getMissingIcon(); switch (variation.kind) { - case NORMAL: - return variation.icon; - case TOPSIDE: - if (side == 0 || side == 1) - return variation.iconTop; - else - return variation.icon; - case TOPBOTSIDE: - if (side == 1) - return variation.iconTop; - else if (side == 0) - return variation.iconBot; - else - return variation.icon; - case CTM3: - return variation.ctm.seams[0].icons[0]; - case CTMV: - if (side < 2) - return variation.iconTop; - else - return variation.seamsCtmVert.icons[0]; - case CTMH: - if (side < 2) - return variation.iconTop; - else - return variation.seamsCtmVert.icons[0]; - case V9: - return variation.variations9.icons[4]; - case V4: - return variation.variations9.icons[0]; - case CTMX: - return variation.icon; + case NORMAL: + return variation.icon; + case TOPSIDE: + if (side == 0 || side == 1) + return variation.iconTop; + else + return variation.icon; + case TOPBOTSIDE: + if (side == 1) + return variation.iconTop; + else if (side == 0) + return variation.iconBot; + else + return variation.icon; + case CTM3: + return variation.ctm.seams[0].icons[0]; + case CTMV: + if (side < 2) + return variation.iconTop; + else + return variation.seamsCtmVert.icons[0]; + case CTMH: + if (side < 2) + return variation.iconTop; + else + return variation.seamsCtmVert.icons[0]; + case V9: + return variation.variations9.icons[4]; + case V4: + return variation.variations9.icons[0]; + case CTMX: + return variation.icon; + case R16: + return variation.variations9.icons[5]; + case R9: + return variation.variations9.icons[4]; + case R4: + return variation.variations9.icons[0]; } return GeneralClient.getMissingIcon(); @@ -242,15 +257,38 @@ public class CarvableHelper { return variation.seamsCtmVert.icons[0]; case V9: case V4: - int index = x + y * 606731 + z * 571163 + side * 555491; - if (index < 0) - index = -index; + int index = x + y + z; + if ((side==2)||(side==5)) + { + index=-index; + } + while (index < 0) + { + index = index+10000; + } return variation.variations9.icons[index % ((variation.kind == V9) ? 9 : 4)]; case CTMX: return variation.icon; + case R16: + case R9: + case R4: + + int indexRan = x + y + z; + if ((side==2)||(side==5)) { + indexRan = -indexRan; + } + while (indexRan < 0) { + indexRan = indexRan+10000; + } + + //rand.setSeed(indexRan); // Broken + + return variation.variations9.icons[ /*rand*/ indexRan % ((variation.kind == R9) ? 9 : 4)]; } + + return GeneralClient.getMissingIcon(); } @@ -356,6 +394,15 @@ public class CarvableHelper { variation.submap = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-ctm"), 4, 4); variation.submapSmall = new TextureSubmap(variation.icon, 2, 2); break; + case R16: + variation.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-r16"), 4, 4); + break; + case R9: + variation.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-r9"), 3, 3); + break; + case R4: + variation.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-r4"), 2, 2); + break; } } } @@ -368,7 +415,7 @@ public class CarvableHelper { } public void setChiselBlockName(String name) { - blockName = name; + blockName = name; } public static Set getChiselBlockSet() { diff --git a/src/main/resources/assets/chisel/textures/blocks/arcane/arcaneRunes-v9.png b/src/main/resources/assets/chisel/textures/blocks/arcane/arcaneRunes-r9.png similarity index 100% rename from src/main/resources/assets/chisel/textures/blocks/arcane/arcaneRunes-v9.png rename to src/main/resources/assets/chisel/textures/blocks/arcane/arcaneRunes-r9.png diff --git a/src/main/resources/assets/chisel/textures/blocks/arcane/arcaneRunesGlow-v9.png b/src/main/resources/assets/chisel/textures/blocks/arcane/arcaneRunesGlow-r9.png similarity index 100% rename from src/main/resources/assets/chisel/textures/blocks/arcane/arcaneRunesGlow-v9.png rename to src/main/resources/assets/chisel/textures/blocks/arcane/arcaneRunesGlow-r9.png diff --git a/src/main/resources/assets/chisel/textures/blocks/arcane/runes-v16.png b/src/main/resources/assets/chisel/textures/blocks/arcane/runes-r16.png similarity index 100% rename from src/main/resources/assets/chisel/textures/blocks/arcane/runes-v16.png rename to src/main/resources/assets/chisel/textures/blocks/arcane/runes-r16.png diff --git a/src/main/resources/assets/chisel/textures/blocks/arcane/runes-v9.png b/src/main/resources/assets/chisel/textures/blocks/arcane/runes-r9.png similarity index 100% rename from src/main/resources/assets/chisel/textures/blocks/arcane/runes-v9.png rename to src/main/resources/assets/chisel/textures/blocks/arcane/runes-r9.png diff --git a/src/main/resources/assets/chisel/textures/blocks/arcane/runesGlow-v16.png b/src/main/resources/assets/chisel/textures/blocks/arcane/runesGlow-r16.png similarity index 100% rename from src/main/resources/assets/chisel/textures/blocks/arcane/runesGlow-v16.png rename to src/main/resources/assets/chisel/textures/blocks/arcane/runesGlow-r16.png diff --git a/src/main/resources/assets/chisel/textures/blocks/technical/rustyBoltedPlates-v9.png b/src/main/resources/assets/chisel/textures/blocks/technical/rustyBoltedPlates-r9.png similarity index 100% rename from src/main/resources/assets/chisel/textures/blocks/technical/rustyBoltedPlates-v9.png rename to src/main/resources/assets/chisel/textures/blocks/technical/rustyBoltedPlates-r9.png diff --git a/src/main/resources/assets/chisel/textures/blocks/thaumium/totem-v4.png b/src/main/resources/assets/chisel/textures/blocks/thaumium/totem-r4.png similarity index 100% rename from src/main/resources/assets/chisel/textures/blocks/thaumium/totem-v4.png rename to src/main/resources/assets/chisel/textures/blocks/thaumium/totem-r4.png From 6d689a486b2ff4bd8d69b7f448529dabc6a99a43 Mon Sep 17 00:00:00 2001 From: Drullkus Date: Sat, 7 Feb 2015 14:44:05 -0800 Subject: [PATCH 2/2] Thing --- .../textures/blocks/arcane/runesGlow-r9.png | Bin 0 -> 6931 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/chisel/textures/blocks/arcane/runesGlow-r9.png diff --git a/src/main/resources/assets/chisel/textures/blocks/arcane/runesGlow-r9.png b/src/main/resources/assets/chisel/textures/blocks/arcane/runesGlow-r9.png new file mode 100644 index 0000000000000000000000000000000000000000..91e177a267c0ab14480ca9b3dae7c2664ee7215a GIT binary patch literal 6931 zcmV+u8|>tXP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000m^Nkl8$R`y!Sgd#aCZ_<-;&!JRak{XD}GxoI@$aa=AnZ z!Sreh9V9BD5*1}tf`BJao^XDC&Mn?Llvb>+RtPVct!8w-BZ?xruA?kVgb=rR=NV)J zthMMw|9$=G6l?9By!PIcWf@XR0LJ4naU27X=Q&kTk;{zHivfvCcyoBhYxNpyEz9MS zyZ9)KXr>L>MS^pV>}kf}Xn@p``Fzgl>FJ%k=mhEO7?~=fVN73KBfR$*V^B(w1PR;i7Ox$`2~-d;%0?)y==FMRHk&*7=Chjl`5d7nqtC`@rFWmx zyX~U2zQu=m#5&n9Y6Bj)BkDIbi^T%1}dwo>@90-b)zojmh(z^?J>Ryg-oT3GJXG*o$b+YSw>Sv8lGyz9xtQ z#^c-k;gdtualn=>)wX2l28_*w`fbH>x};VOm8;NNU-PVIYrT7&4w|~5+!*Rt zHRb7+)Fl*2Nl<7&koHo-FvMERU3^{C2rKB`wFKvy!)_nt72mnJadNKsrfL6uU$8BOgT(ZQVi(tM8Vi?_wUf2Lv*p4jXi*@Wvy&Kx=&`UoK1Hml0z* z;^OKO@kFxfty!O~QEQ1AT4EXAydxIY<=wufXYK_YmqUXyeQ-eoAQ>7_YEThg|-`SzkkD}nTi z$#NIp>@_ct!U+hd7it z>uE)Yjx=cS-cu9>?|Ex2LI`~8i3nNvB`-&>D4tbRR45cdqzS?hxSNmmBbwiJoQzMI zsX3WQdD1;$axy}_5rl+DCvWhwZClE+q-h%_U+(cnz2&>!_iTS#5`B^2rNbJ7l?Lk! zK@!k34NcP^gy5QQ8us?~5WkYVdvZ?kZ#C(^=Fk^(zS}M8AW9t~l~O3BP?4hlppX2Ifb{vB9i5_||h+?;{mxsd1fWvAn`f?5=YP z!B6?cazPYD6h(mw6ha7$Fes-THU-toEw}lpq1xd0CUYpH^P=#!d6{W9elMdkpZLc8|A+GO13D%1> z^Z6WW?QQ-D(0 zy24t^U@*XYkM|ziS+ZV+tu5Yp;!(_`KS64V4)ygyTI)M`V+?to;N0KEwUP!e5 z8N7Db`EI+sKkPr{#V36L!QyHGEd+5uV;i>h_U=6Yp$|-#pas*}{dxYQ{KX1^V78uN zoFR&UJ&Im`C(3yB=`EjPkq9uj@0F(DyAD-@==c@Pd@GgNs!Qsa@KD* zbpO-vtaw61L@jG-QInFPq-Hc4q00Mxpe5CpSIb(gW z;ouL4=tT4O#cPBRU_D8i5NGk7J|Kj^3X3V#yNmR6+=86y5RxB^AkO z%v1jvQV6!9zW2m)5C6~YO4>lrTlL^5QaEFj$Fox6M>)B#2t=ItDVr4l7N)^yS! zkf>H-=KAR!>l6;gA2N^|GT>FUp zX&(2jr`lFXD^X5?-*rt}TZ9)_?~tiP1oB=VsOuUf6y{aS!}_U{66tct%hZ6E8e{gW{breNNBuSo7 zsfzVxP3ls{Vobb=D9e(}WDG=~OLvLcw>aTiOc>=B57W?SO| z4*FP6>jY5Y=?6W;JUJOU55w+1ts;Wrca-q?-5P|=4OdY z9h+iv9iuWjR0ng`Mr7kzC16TWVK!){uv)I4k;w-)oSMxKlgqh3L|V~3Ezh3g(5pj z8T?{|lpmk(0}S&a{?g*E9MN8cNzHD)KfHUs{~_PkJ^VWlfhRpoX?^?i?*|l$&DDkn zmxrVx+=obD3n z`#H}0yMUka2m1$XFSf`^G897&+I_?otm`$&B*8mJ(=;G%^SvY|6B%Y^=!u<3$*G{c zED?Q4I!G~{p=q1z_5bbz-t+9)Ga?z14RVx~v|UG{Vst-Xwb=!*_s!>4p8wGYq97s^ zAO&Hrvi56ca!#>V;E%;F&+FT~_8Qel>K`idcNrr_NFjJD&e-l1_y=G^ zOArMg_<+`ASw?YMu>IzY>{mI1<00ud!+Vc&yC?wMn9twk1I{|?d4=ptW_wG5iw)9B zhIT-79`e!+H(%>IMbyD$|V}@qH+7^`6j+YPFznstLaH5|$Vob+@_OLx+;&pst3=`Zu${lY!GwHDi0g3Evh z{)pjbK&eWW2P-O9;T2e6Z{H7CYj;DdF9R08UU4E{(h9?|IOfUKBlMpo-Rl_F{({OZrL^OyPelbG-XUN5~OHO$WQgY}H@qe-S%2O59?L1#KOokKWsbC@}w6etx z4BmQHZq0dk!QeLok}SE`2M!JnuyaH9*95&*lus+#FAY{XwAKhOh;j;JMLF=k-1{q1*o@dUSq9{mwN+?27pAw3Qm0MCz z8aiR__JQm9yp>2JC``drPw5T~ZBu?S&kG@T4>Z;=k-T~Rj`TcXY=@Ldg~1ZYkK8Ya z4WSNE2a0CW^8Kq93>O3T+ypNife8^pUh`@^9)As7ch>cKy(@FJMUB+1dk!m1Vo0;} zx>hfjORlc2Xxo+#d1K6O#G)mYuBmzzi*!ZwS&R|plYD17+O9>0k}9m(_6z22&Qh#c z#cR~QWL2!Vy1M#=4`eykTU_l(xI2%3$_L(GA0=^uM*ma1H@j)z_%nfUf*=doT<-Y) Z9{_PsM6AwZo;d&j002ovPDHLkV1oVmN%jB$ literal 0 HcmV?d00001