From d7edb43de47abd1e911b5665dbd4ed58b63b792c Mon Sep 17 00:00:00 2001 From: nicksettler Date: Sun, 14 Jul 2024 20:46:28 +0200 Subject: [PATCH] feat: add new silicon wafer types * add purified silicon wafer item * add polished silicon wafer item * add workbench item translations for wafer types * add new wafer types item textures --- .../projectred_fabrication/lang/en_us.json | 5 ++++ .../models/item/polished_silicon_wafer.json | 6 +++++ .../models/item/purified_silicon_wafer.json | 6 +++++ .../recipes/polished_silicon_wafer.json | 19 +++++++++++++++ .../recipes/purified_silicon_wafer.json | 14 +++++++++++ .../data/FabricationItemModelProvider.java | 2 ++ .../data/FabricationLanguageProvider.java | 2 ++ .../data/FabricationRecipeProvider.java | 15 ++++++++++-- .../fabrication/gui/PipelineDiagramNode.java | 6 +++-- .../gui/screen/ICWorkbenchInfoTab.java | 2 +- .../init/FabricationCreativeModeTab.java | 2 ++ .../fabrication/init/FabricationItems.java | 6 +++++ .../fabrication/init/FabricationUnlocal.java | 21 ++++++++++------- .../item/PolishedSiliconWaferItem.java | 10 ++++++++ .../item/PurifiedSiliconWaferItem.java | 10 ++++++++ .../fabrication/lithography/WaferType.java | 22 ++++++++++-------- .../textures/item/polished_silicon_wafer.png | Bin 0 -> 1400 bytes .../textures/item/purified_silicon_wafer.png | Bin 0 -> 1385 bytes 18 files changed, 124 insertions(+), 24 deletions(-) create mode 100644 fabrication/src/main/generated/assets/projectred_fabrication/models/item/polished_silicon_wafer.json create mode 100644 fabrication/src/main/generated/assets/projectred_fabrication/models/item/purified_silicon_wafer.json create mode 100644 fabrication/src/main/generated/data/projectred_fabrication/recipes/polished_silicon_wafer.json create mode 100644 fabrication/src/main/generated/data/projectred_fabrication/recipes/purified_silicon_wafer.json create mode 100644 fabrication/src/main/java/mrtjp/projectred/fabrication/item/PolishedSiliconWaferItem.java create mode 100644 fabrication/src/main/java/mrtjp/projectred/fabrication/item/PurifiedSiliconWaferItem.java create mode 100644 fabrication/src/main/resources/assets/projectred_fabrication/textures/item/polished_silicon_wafer.png create mode 100644 fabrication/src/main/resources/assets/projectred_fabrication/textures/item/purified_silicon_wafer.png diff --git a/fabrication/src/main/generated/assets/projectred_fabrication/lang/en_us.json b/fabrication/src/main/generated/assets/projectred_fabrication/lang/en_us.json index 76bce5331..ad5804b2a 100644 --- a/fabrication/src/main/generated/assets/projectred_fabrication/lang/en_us.json +++ b/fabrication/src/main/generated/assets/projectred_fabrication/lang/en_us.json @@ -10,6 +10,8 @@ "item.projectred_fabrication.invalid_die": "Invalid Die", "item.projectred_fabrication.photomask_set": "Photomask Set", "item.projectred_fabrication.rough_silicon_wafer": "Rough Silicon Wafer", + "item.projectred_fabrication.purified_silicon_wafer": "Purified Silicon Wafer", + "item.projectred_fabrication.polished_silicon_wafer": "Polished Silicon Wafer", "item.projectred_fabrication.valid_die": "Valid Die", "itemGroup.projectred_fabrication": "Project Red: Fabrication", "projectred_fabrication.compile.stack": "Stack", @@ -150,6 +152,9 @@ "projectred_fabrication.ui.single_layer_yield": "Single layer yield", "projectred_fabrication.ui.wafer_size": "Wafer size", "projectred_fabrication.ui.wafer_type": "Wafer type", + "projectred_fabrication.ui.wafer_type.rough": "Rough", + "projectred_fabrication.ui.wafer_type.purified": "Purified", + "projectred_fabrication.ui.wafer_type.polished": "Polished", "projectred_fabrication.ui.yield": "Yield", "projectred_fabrication.ui.yield_calculator": "Yield Calculator", "projectred_fabrication.unit.gates": "gates", diff --git a/fabrication/src/main/generated/assets/projectred_fabrication/models/item/polished_silicon_wafer.json b/fabrication/src/main/generated/assets/projectred_fabrication/models/item/polished_silicon_wafer.json new file mode 100644 index 000000000..5a7894f7b --- /dev/null +++ b/fabrication/src/main/generated/assets/projectred_fabrication/models/item/polished_silicon_wafer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "projectred_fabrication:item/polished_silicon_wafer" + } +} \ No newline at end of file diff --git a/fabrication/src/main/generated/assets/projectred_fabrication/models/item/purified_silicon_wafer.json b/fabrication/src/main/generated/assets/projectred_fabrication/models/item/purified_silicon_wafer.json new file mode 100644 index 000000000..60d2e4cfe --- /dev/null +++ b/fabrication/src/main/generated/assets/projectred_fabrication/models/item/purified_silicon_wafer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "projectred_fabrication:item/purified_silicon_wafer" + } +} \ No newline at end of file diff --git a/fabrication/src/main/generated/data/projectred_fabrication/recipes/polished_silicon_wafer.json b/fabrication/src/main/generated/data/projectred_fabrication/recipes/polished_silicon_wafer.json new file mode 100644 index 000000000..d8e5d5ccf --- /dev/null +++ b/fabrication/src/main/generated/data/projectred_fabrication/recipes/polished_silicon_wafer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "key": { + "c": { + "item": "projectred_core:woven_cloth" + }, + "p": { + "item": "projectred_fabrication:purified_silicon_wafer" + } + }, + "pattern": [ + " c ", + "cpc", + " c " + ], + "result": { + "item": "projectred_fabrication:polished_silicon_wafer" + } +} \ No newline at end of file diff --git a/fabrication/src/main/generated/data/projectred_fabrication/recipes/purified_silicon_wafer.json b/fabrication/src/main/generated/data/projectred_fabrication/recipes/purified_silicon_wafer.json new file mode 100644 index 000000000..a4d939075 --- /dev/null +++ b/fabrication/src/main/generated/data/projectred_fabrication/recipes/purified_silicon_wafer.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "projectred_fabrication:rough_silicon_wafer" + }, + { + "item": "minecraft:water_bucket" + } + ], + "result": { + "item": "projectred_fabrication:purified_silicon_wafer" + } +} \ No newline at end of file diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationItemModelProvider.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationItemModelProvider.java index 8d9a7408f..dba2b1ea6 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationItemModelProvider.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationItemModelProvider.java @@ -28,6 +28,8 @@ protected void registerModels() { generated(BLANK_PHOTOMASK_ITEM); generated(PHOTOMASK_SET_ITEM); generated(ROUGH_SILICON_WAFER_ITEM); + generated(PURIFIED_SILICON_WAFER_ITEM); + generated(POLISHED_SILICON_WAFER_ITEM); generated(ETCHED_SILICON_WAFER_ITEM); generated(VALID_DIE_ITEM); generated(INVALID_DIE_ITEM); diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationLanguageProvider.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationLanguageProvider.java index dce49f27e..a3baa917c 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationLanguageProvider.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationLanguageProvider.java @@ -35,6 +35,8 @@ protected void addTranslations() { add(BLANK_PHOTOMASK_ITEM.get(), "Blank Photomask"); add(PHOTOMASK_SET_ITEM.get(), "Photomask Set"); add(ROUGH_SILICON_WAFER_ITEM.get(), "Rough Silicon Wafer"); + add(PURIFIED_SILICON_WAFER_ITEM.get(), "Purified Silicon Wafer"); + add(POLISHED_SILICON_WAFER_ITEM.get(), "Polished Silicon Wafer"); add(ETCHED_SILICON_WAFER_ITEM.get(), "Etched Silicon Wafer"); add(VALID_DIE_ITEM.get(), "Valid Die"); add(INVALID_DIE_ITEM.get(), "Invalid Die"); diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationRecipeProvider.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationRecipeProvider.java index 145702403..a37cb1254 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationRecipeProvider.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationRecipeProvider.java @@ -7,8 +7,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraftforge.common.Tags; -import static mrtjp.projectred.core.init.CoreItems.PLATE_ITEM; -import static mrtjp.projectred.core.init.CoreItems.SILICON_ITEM; +import static mrtjp.projectred.core.init.CoreItems.*; import static mrtjp.projectred.core.init.CoreTags.ELECTROTINE_ALLOY_INGOT_TAG; import static mrtjp.projectred.core.init.CoreTags.SAPPHIRE_GEM_TAG; import static mrtjp.projectred.fabrication.ProjectRedFabrication.MOD_ID; @@ -81,5 +80,17 @@ protected void registerRecipes() { smelting(ROUGH_SILICON_WAFER_ITEM.get()) .ingredient(SILICON_ITEM.get()); + + shapelessRecipe(PURIFIED_SILICON_WAFER_ITEM.get()) + .addIngredient(ROUGH_SILICON_WAFER_ITEM.get()) + .addIngredient(Items.WATER_BUCKET); + + shapedRecipe(POLISHED_SILICON_WAFER_ITEM.get()) + .key('c', WOVEN_CLOTH_ITEM.get()) + .key('p', PURIFIED_SILICON_WAFER_ITEM.get()) + .enableUnlocking() + .patternLine(" c ") + .patternLine("cpc") + .patternLine(" c "); } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/PipelineDiagramNode.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/PipelineDiagramNode.java index add20254b..1c9dc0237 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/PipelineDiagramNode.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/PipelineDiagramNode.java @@ -93,9 +93,11 @@ public void update() { case ROUGH_WAFER: node.setItemStack(new ItemStack(ROUGH_SILICON_WAFER_ITEM.get())); break; - case POLISHED_WAFER: case PURIFIED_WAFER: - node.setItemStack(ItemStack.EMPTY); //TODO + node.setItemStack(new ItemStack(PURIFIED_SILICON_WAFER_ITEM.get())); + break; + case POLISHED_WAFER: + node.setItemStack(new ItemStack(POLISHED_SILICON_WAFER_ITEM.get())); break; } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/ICWorkbenchInfoTab.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/ICWorkbenchInfoTab.java index f444b3111..31f6b357b 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/ICWorkbenchInfoTab.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/ICWorkbenchInfoTab.java @@ -182,7 +182,7 @@ private ButtonArrayNode createWaferTypeButtons() { ButtonArrayNode.Listener listener = new ButtonArrayNode.Listener() { @Override public String getButtonText(int index) { - return WaferType.values()[index].getUnlocalizedName(); + return Component.translatable(WaferType.values()[index].getLocalizedNameKey()).getString(); } @Override diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationCreativeModeTab.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationCreativeModeTab.java index 4e4b6d5de..ec5c43eff 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationCreativeModeTab.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationCreativeModeTab.java @@ -31,6 +31,8 @@ public static void register() { output.accept(BLANK_PHOTOMASK_ITEM.get()); output.accept(PHOTOMASK_SET_ITEM.get()); output.accept(ROUGH_SILICON_WAFER_ITEM.get()); + output.accept(PURIFIED_SILICON_WAFER_ITEM.get()); + output.accept(POLISHED_SILICON_WAFER_ITEM.get()); output.accept(ETCHED_SILICON_WAFER_ITEM.get()); output.accept(VALID_DIE_ITEM.get()); output.accept(INVALID_DIE_ITEM.get()); diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationItems.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationItems.java index ec0eb3563..3194e8ef9 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationItems.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationItems.java @@ -12,6 +12,8 @@ public class FabricationItems { public static final String ID_BLANK_PHOTOMASK = "blank_photomask"; public static final String ID_PHOTOMASK_SET = "photomask_set"; public static final String ID_ROUGH_SILICON_WAFER = "rough_silicon_wafer"; + public static final String ID_PURIFIED_SILICON_WAFER = "purified_silicon_wafer"; + public static final String ID_POLISHED_SILICON_WAFER = "polished_silicon_wafer"; public static final String ID_ETCHED_SILICON_WAFER = "etched_silicon_wafer"; public static final String ID_VALID_DIE = "valid_die"; public static final String ID_INVALID_DIE = "invalid_die"; @@ -20,6 +22,8 @@ public class FabricationItems { public static RegistryObject BLANK_PHOTOMASK_ITEM; public static RegistryObject PHOTOMASK_SET_ITEM; public static RegistryObject ROUGH_SILICON_WAFER_ITEM; + public static RegistryObject PURIFIED_SILICON_WAFER_ITEM; + public static RegistryObject POLISHED_SILICON_WAFER_ITEM; public static RegistryObject ETCHED_SILICON_WAFER_ITEM; public static RegistryObject VALID_DIE_ITEM; public static RegistryObject INVALID_DIE_ITEM; @@ -31,6 +35,8 @@ public static void register() { BLANK_PHOTOMASK_ITEM = ITEMS.register(ID_BLANK_PHOTOMASK, BlankPhotomaskItem::new); PHOTOMASK_SET_ITEM = ITEMS.register(ID_PHOTOMASK_SET, PhotomaskSetItem::new); ROUGH_SILICON_WAFER_ITEM = ITEMS.register(ID_ROUGH_SILICON_WAFER, RoughSiliconWaferItem::new); + PURIFIED_SILICON_WAFER_ITEM = ITEMS.register(ID_PURIFIED_SILICON_WAFER, PurifiedSiliconWaferItem::new); + POLISHED_SILICON_WAFER_ITEM = ITEMS.register(ID_POLISHED_SILICON_WAFER, PolishedSiliconWaferItem::new); ETCHED_SILICON_WAFER_ITEM = ITEMS.register(ID_ETCHED_SILICON_WAFER, EtchedSiliconWaferItem::new); VALID_DIE_ITEM = ITEMS.register(ID_VALID_DIE, ValidDieItem::new); INVALID_DIE_ITEM = ITEMS.register(ID_INVALID_DIE, InvalidDieItem::new); diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationUnlocal.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationUnlocal.java index e4d990e4a..68e394507 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationUnlocal.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationUnlocal.java @@ -109,15 +109,18 @@ public class FabricationUnlocal { public static final String UL_AUTO_COMPILE_DISABLED = PREFIX + "ui.auto_compile_disabled"; public static final String UL_SIM_RUNNING = PREFIX + "ui.sim_running"; - public static final String UL_YIELD_CALCULATOR = PREFIX + "ui.yield_calculator"; - public static final String UL_LITHOGRAPHY_PIPELINE = PREFIX + "ui.lithography_pipeline"; - public static final String UL_PROCESS_NODE = PREFIX + "ui.process_node"; - public static final String UL_WAFER_TYPE = PREFIX + "ui.wafer_type"; - public static final String UL_DIE_SIZE = PREFIX + "ui.die_size"; - public static final String UL_WAFER_SIZE = PREFIX + "ui.wafer_size"; - public static final String UL_DIES_PER_WAFER = PREFIX + "ui.dies_per_wafer"; - public static final String UL_SINGLE_LAYER_YIELD = PREFIX + "ui.single_layer_yield"; - public static final String UL_YIELD = PREFIX + "ui.yield"; + public static final String UL_YIELD_CALCULATOR = PREFIX + "ui.yield_calculator"; + public static final String UL_LITHOGRAPHY_PIPELINE = PREFIX + "ui.lithography_pipeline"; + public static final String UL_PROCESS_NODE = PREFIX + "ui.process_node"; + public static final String UL_WAFER_TYPE = PREFIX + "ui.wafer_type"; + public static final String UL_WAFER_TYPE_ROUGH = PREFIX + "ui.wafer_type.rough"; + public static final String UL_WAFER_TYPE_PURIFIED = PREFIX + "ui.wafer_type.purified"; + public static final String UL_WAFER_TYPE_POLISHED = PREFIX + "ui.wafer_type.polished"; + public static final String UL_DIE_SIZE = PREFIX + "ui.die_size"; + public static final String UL_WAFER_SIZE = PREFIX + "ui.wafer_size"; + public static final String UL_DIES_PER_WAFER = PREFIX + "ui.dies_per_wafer"; + public static final String UL_SINGLE_LAYER_YIELD = PREFIX + "ui.single_layer_yield"; + public static final String UL_YIELD = PREFIX + "ui.yield"; // IC Tiles public static final String UL_IO_GATE_TILE = PREFIX + "tiles.io_gate"; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/item/PolishedSiliconWaferItem.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/item/PolishedSiliconWaferItem.java new file mode 100644 index 000000000..d54ad7f61 --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/item/PolishedSiliconWaferItem.java @@ -0,0 +1,10 @@ +package mrtjp.projectred.fabrication.item; + +import mrtjp.projectred.fabrication.lithography.WaferType; + +public class PolishedSiliconWaferItem extends BaseSiliconWaferItem { + + public PolishedSiliconWaferItem() { + super(WaferType.POLISHED_WAFER); + } +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/item/PurifiedSiliconWaferItem.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/item/PurifiedSiliconWaferItem.java new file mode 100644 index 000000000..ec21ce472 --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/item/PurifiedSiliconWaferItem.java @@ -0,0 +1,10 @@ +package mrtjp.projectred.fabrication.item; + +import mrtjp.projectred.fabrication.lithography.WaferType; + +public class PurifiedSiliconWaferItem extends BaseSiliconWaferItem { + + public PurifiedSiliconWaferItem() { + super(WaferType.PURIFIED_WAFER); + } +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/lithography/WaferType.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/lithography/WaferType.java index 0093e84a3..d156d7697 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/lithography/WaferType.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/lithography/WaferType.java @@ -1,27 +1,29 @@ package mrtjp.projectred.fabrication.lithography; +import static mrtjp.projectred.fabrication.init.FabricationUnlocal.*; + public enum WaferType { //@formatter:off - ROUGH_WAFER (4096, 0.5, "roughWafer"), - PURIFIED_WAFER (4096, 0.1, "purifiedWafer"), - POLISHED_WAFER (4096, 0.01, "polishedWafer"); + ROUGH_WAFER (4096, 0.5, UL_WAFER_TYPE_ROUGH), + PURIFIED_WAFER (4096, 0.1, UL_WAFER_TYPE_PURIFIED), + POLISHED_WAFER (4096, 0.01, UL_WAFER_TYPE_POLISHED); //@formatter:on - private final String unlocalizedName; - private final int waferLen; - private final int waferArea; + private final String localizedNameKey; + private final int waferLen; + private final int waferArea; private final double defectRatePerUnitArea; // Note: standard die defect rate is rate of defect of 16x16 design in 64nm process - WaferType(int waferLen, double standardDieDefectRate, String unlocalizedName) { + WaferType(int waferLen, double standardDieDefectRate, String localizedNameKey) { this.waferLen = waferLen; this.waferArea = waferLen * waferLen; // square wafers only atm // back-calculate standard die defect rate to defect per unit area this.defectRatePerUnitArea = standardDieDefectRate / (Math.pow(64 * 16, 2)); - this.unlocalizedName = unlocalizedName; + this.localizedNameKey = localizedNameKey; } public int getWaferArea() { @@ -40,7 +42,7 @@ public double getDefectRatePerUnitArea() { return defectRatePerUnitArea; } - public String getUnlocalizedName() { - return unlocalizedName; + public String getLocalizedNameKey() { + return this.localizedNameKey; } } diff --git a/fabrication/src/main/resources/assets/projectred_fabrication/textures/item/polished_silicon_wafer.png b/fabrication/src/main/resources/assets/projectred_fabrication/textures/item/polished_silicon_wafer.png new file mode 100644 index 0000000000000000000000000000000000000000..91f7bb45c83de67a977fc23e0fbdcb6871fb80f9 GIT binary patch literal 1400 zcmV-;1&8{HP)EX>4Tx04R}tkv&MmKp2MKrbi|{P(xNRA);4}SO7EY3{3Nx>M<`(oQ46F^`WXf(d0egat9cF(j`N3BtI>oSOnhB=$rDu$Su&n=Ju_9j?)JqOTAjY0S*p< z$r5F+d%U}^yKn#2wEOo1LWOdZr2)1C00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=m!oC6#};zGF|`x19eG6K~zY`?UY?e-E|zsKi}`~ z@A1r) zr480Dez*Dd0lOB?e0;L&>!8TLW?-?PiJ3gJ4H9a76Nv$^A#baf54Or4v2Vfbd$ae= z^a0~`j4?Ppd@?zFXn8|&D`CBCT$2tf&ihOKcSBxfZb?oy41GRwVRSbP6b&Xte_!C4 zkDMMyfw2A3eg@M`)2UNu;B%n`$7TAZtjk#aBM;9`(7`pi9 zzFuE(VkJC0lzVT^{qWP%9T`8@Kti?Cnc#tQ%9(O9z^2s!!Z5>N z)NC<(z;nDluMHBTiF^GGP~5V;rZjIMQ_hk!cM-9jF!)lmKl&}0FHFSz2s*798UtoI zL?zgetd?}J<&;wfGKz}>QbjEd;HJf|#e0Bi@~H)O%0W2-gy^=lH^hQ}VL)r-gtoxY zr=#Cp9R#z*Y&AQ;zR7+SMm@Tq}pniQ)cY=G^ec7!5O*Ofu0PHR= z;`IU%syPZk*`M{C#XWY;IgXPCvS0iX10J*i0$?ijgwBFjVT0aYkUHCJFM_;c#*F|6 z*~2dIKj*LY{|au7JK{Ejw~kF@foU-*W;4Xr$C$o+vliUBJz83A?TT$l!%0Dq8M#B! zKsTD*<}ldf-aFoFAT`>mT|hTK&;mN9t8@dzi{bn9@D5B!}L ztd>kNfj6X5s=y1|I{PkouJ?=gJ!qyDnHNFUNS0)Sbjx)Sn0s~ZvAKHy2L}fIU-my(!ueJtr{3jDIR+Atpp-y-W4t%s1ip2?_kC?JQyM!PdmXgRs96izsn=A& zIp8!p7vZEX>4Tx04R}tkv&MmKpe$i(@I6E4((9HAwzYti;6gwDi*;)X)CnqU~=gfG%+M8 zE{=k0!NHHks)LKOt`4q(Aou~|?BJy6A|?JWDYS_3;J6>}?mh0_0Ya)J&;^Mfxh}i>#<}9Kz%wI8K08MoAr>n=EcY<08Y=NLaZFJ)$`=YQ zE1b7DtMvx!+>^gBRMM7nT&FpT6c&+21|noMP(vLS;NmLUR1zfAG6ovphBFCWVqf--~U3i~+%2pxw0X?_=9;p8)=6;7aTIH(J2#C+W?u z7CQolw}Ff6t|spRmpef8NtX=Ck^D4;av69(qi-q#;agx})$OgbkJASrPhBnD00)P_ zc!jdpJl@^k+uOfqI{p0sXR>mlxB}Wq00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=m!o27a!}sxzhju17=A?K~zY`?UY|g-DMocKi}`~ zJ;&0aOG2DDTOzXTI8W~AL?jN&R8$ULtRZU*8PtVTtPv3;vWp>75<{em(S->uDH)+| zOOp}NKGXTMnFzYGSOnelT)yz-d3c`pdEh^WJnBJhVWSE4 zS-bt+25f=NgV76@=7)kJ|C)g9gig%yId$Oa@!m}-0^8zNy8*CgZJT`u;^*S~?kxhV zHcAvmRxYIvo=PrA{*G9uoP?7NqVlBVg6yYAe4trcsUaXrlsj8@POrIT6d1G@?Pstt zypg#+3L^`{iNO;)g=kXZuXWW)1zBQE;vhBDO9)t$HR2$zNr!X;)zr}l_&9(cY^&Sk z27z_fS%2Z*K5|AL+t4!H2$e)s>dq4){vb+!Ws14e~fEO=b zaLa9_tpe$_)%JOCW9}DjH`q#BU{3=J%s>5kv2 z290U9`oO<>aH#AnnC+jOp11;~jpc_bUIOjZJ{<&Ur-S!)Ms2qD*nDG*$pX10Q3(V2 zwva+_+I2wV;GVES_aw-9`=uR+XM_H|rGLOo(PZs-F_bo!jZ^@U;u}M=VbG`bMQsLW z%-QW!K&&vv#?(Vr?k|tT8WzKQuO|T!j@4Bypuh;)f=@T$J zI{D+oG(1;R_SB(+5Khd#JpBrAfKmdW{ras&;P;R2-u$g~XB~G$K#t^+3%o7uau(b{ zd)|HkZo>V+y#|`Ahn=JFeNN=NaK;vKB>%>R*=vBoU_b|TPH%&^%NzCP|AQsmY(;uz zhIe-tNRb4k9vHS48G!wLzMqOeg>Y!*