From 4af52fc7cf93deb47531edb36490c5b235e713c5 Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Thu, 3 Apr 2025 21:50:50 +0800 Subject: [PATCH 01/25] refactor(General): rename onHideGUIPost method --- .../net/skymoe/enchaddons/impl/mixin/MinecraftMixin.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/net/skymoe/enchaddons/impl/mixin/MinecraftMixin.java b/src/main/java/net/skymoe/enchaddons/impl/mixin/MinecraftMixin.java index 854855d..c6a7c23 100644 --- a/src/main/java/net/skymoe/enchaddons/impl/mixin/MinecraftMixin.java +++ b/src/main/java/net/skymoe/enchaddons/impl/mixin/MinecraftMixin.java @@ -3,17 +3,12 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.settings.GameSettings; -import net.skymoe.enchaddons.impl.EnchAddonsImpl; -import net.skymoe.enchaddons.impl.EnchAddonsImplKt; -import net.skymoe.enchaddons.impl.config.EnchAddonsConfig; -import net.skymoe.enchaddons.impl.config.EnchAddonsConfigKt; import net.skymoe.enchaddons.impl.mixincallback.MinecraftMixinCallbackKt; import org.spongepowered.asm.lib.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) @@ -38,7 +33,7 @@ private void onUnloadWorldPre(CallbackInfo ci) { } @Inject(method = "runTick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/settings/GameSettings;hideGUI:Z", opcode = Opcodes.PUTFIELD, shift = At.Shift.AFTER)) - private void runTickRedirect(CallbackInfo ci) { + private void onHideGUIPost(CallbackInfo ci) { MinecraftMixinCallbackKt.onHideGUIKeyDetect(gameSettings); } } From 8a8cfc19d17b0a03b168b72a1b3b63376070c7d3 Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Sat, 5 Apr 2025 19:10:26 +0800 Subject: [PATCH 02/25] feat(AwesomeMap): init --- .../impl/mixin/EntityLivingBaseMixin.java | 17 + .../impl/mixin/ForgeHooksClientMixin.java | 17 + .../impl/mixin/NetHandlerPlayClientMixin.java | 14 + .../enchaddons/event/minecraft/ChatEvent.kt | 9 +- .../event/minecraft/LivingEntityEvent.kt | 14 + .../enchaddons/event/minecraft/RenderEvent.kt | 10 +- .../event/minecraft/TabListEvent.kt | 12 + .../enchaddons/event/minecraft/TeamEvent.kt | 28 + .../feature/awesomemap/AwesomeMap.kt | 159 ++ .../feature/awesomemap/AwesomeMapConfig.kt | 109 ++ .../skymoe/enchaddons/impl/EnchAddonsImpl.kt | 3 + .../config/feature/AwesomeMapConfigImpl.kt | 735 +++++++++ .../impl/config/subcategory/DungeonConfig.kt | 4 + .../awesomemap/commands/FunnyMapCommands.kt | 77 + .../feature/awesomemap/core/DungeonPlayer.kt | 67 + .../impl/feature/awesomemap/core/RoomData.kt | 16 + .../impl/feature/awesomemap/core/map/Door.kt | 31 + .../feature/awesomemap/core/map/DoorType.kt | 21 + .../feature/awesomemap/core/map/Puzzle.kt | 26 + .../impl/feature/awesomemap/core/map/Room.kt | 38 + .../feature/awesomemap/core/map/RoomState.kt | 10 + .../feature/awesomemap/core/map/RoomType.kt | 27 + .../impl/feature/awesomemap/core/map/Tile.kt | 10 + .../feature/awesomemap/core/map/UniqueRoom.kt | 139 ++ .../feature/awesomemap/core/map/Unknown.kt | 11 + .../awesomemap/features/dungeon/Dungeon.kt | 148 ++ .../awesomemap/features/dungeon/DungeonMap.kt | 111 ++ .../features/dungeon/DungeonScan.kt | 191 +++ .../awesomemap/features/dungeon/MapRender.kt | 321 ++++ .../features/dungeon/MapRenderList.kt | 246 ++++ .../awesomemap/features/dungeon/MapUpdate.kt | 241 +++ .../features/dungeon/MimicDetector.kt | 78 + .../features/dungeon/PlayerTracker.kt | 157 ++ .../features/dungeon/RunInformation.kt | 218 +++ .../awesomemap/features/dungeon/ScanUtils.kt | 81 + .../features/dungeon/ScoreCalculation.kt | 144 ++ .../features/dungeon/WitherDoorESP.kt | 41 + .../feature/awesomemap/ui/CornerButton.kt | 26 + .../feature/awesomemap/ui/EditLocationGui.kt | 104 ++ .../impl/feature/awesomemap/ui/GuiRenderer.kt | 65 + .../impl/feature/awesomemap/ui/MapElement.kt | 32 + .../awesomemap/ui/MovableGuiElement.kt | 151 ++ .../feature/awesomemap/ui/ScoreElement.kt | 175 +++ .../impl/feature/awesomemap/utils/APIUtils.kt | 48 + .../feature/awesomemap/utils/CheckmarkSet.kt | 32 + .../feature/awesomemap/utils/JsonUtils.kt | 18 + .../feature/awesomemap/utils/KotlinAdapter.kt | 33 + .../impl/feature/awesomemap/utils/Location.kt | 108 ++ .../impl/feature/awesomemap/utils/MapUtils.kt | 97 ++ .../feature/awesomemap/utils/RenderUtils.kt | 427 ++++++ .../feature/awesomemap/utils/RenderUtilsGL.kt | 157 ++ .../feature/awesomemap/utils/Scoreboard.kt | 18 + .../awesomemap/utils/SimpleFontRenderer.kt | 166 +++ .../impl/feature/awesomemap/utils/TabList.kt | 37 + .../impl/feature/awesomemap/utils/Utils.kt | 22 + .../EntityLivingBaseMixinCallback.kt | 15 + .../ForgeHooksClientMixinCallback.kt | 16 + .../NetHandlerPlayClientCallback.kt | 22 + .../net/skymoe/enchaddons/util/ColorUtil.kt | 25 +- .../skymoe/enchaddons/util/MinecraftUtil.kt | 7 +- .../net/skymoe/enchaddons/util/ModMessage.kt | 25 + .../assets/enchaddons/awesomemap/rooms.json | 1309 +++++++++++++++++ src/main/resources/mixins.enchaddons.json | 2 + 63 files changed, 6703 insertions(+), 15 deletions(-) create mode 100644 src/main/java/net/skymoe/enchaddons/impl/mixin/EntityLivingBaseMixin.java create mode 100644 src/main/java/net/skymoe/enchaddons/impl/mixin/ForgeHooksClientMixin.java create mode 100644 src/main/kotlin/net/skymoe/enchaddons/event/minecraft/LivingEntityEvent.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/event/minecraft/TabListEvent.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/event/minecraft/TeamEvent.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMapConfig.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/config/feature/AwesomeMapConfigImpl.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/commands/FunnyMapCommands.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/DungeonPlayer.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/RoomData.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Door.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/DoorType.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Puzzle.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Room.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/RoomState.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/RoomType.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Tile.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/UniqueRoom.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Unknown.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/Dungeon.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/DungeonMap.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/DungeonScan.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapUpdate.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MimicDetector.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/PlayerTracker.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/RunInformation.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScanUtils.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/CornerButton.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/EditLocationGui.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MapElement.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MovableGuiElement.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/ScoreElement.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/APIUtils.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/CheckmarkSet.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/JsonUtils.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/KotlinAdapter.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Location.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/MapUtils.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtilsGL.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Scoreboard.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/SimpleFontRenderer.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/TabList.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Utils.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/EntityLivingBaseMixinCallback.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/ForgeHooksClientMixinCallback.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/util/ModMessage.kt create mode 100644 src/main/resources/assets/enchaddons/awesomemap/rooms.json diff --git a/src/main/java/net/skymoe/enchaddons/impl/mixin/EntityLivingBaseMixin.java b/src/main/java/net/skymoe/enchaddons/impl/mixin/EntityLivingBaseMixin.java new file mode 100644 index 0000000..61b78f6 --- /dev/null +++ b/src/main/java/net/skymoe/enchaddons/impl/mixin/EntityLivingBaseMixin.java @@ -0,0 +1,17 @@ +package net.skymoe.enchaddons.impl.mixin; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.DamageSource; +import net.skymoe.enchaddons.impl.mixincallback.EntityLivingBaseMixinCallbackKt; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(EntityLivingBase.class) +public class EntityLivingBaseMixin { + @Inject(method = "onDeath", at = @At("HEAD")) + private void onDeathPre(DamageSource cause, CallbackInfo ci) { + EntityLivingBaseMixinCallbackKt.onLivingEntityDeathPre((EntityLivingBase) (Object) this, cause); + } +} diff --git a/src/main/java/net/skymoe/enchaddons/impl/mixin/ForgeHooksClientMixin.java b/src/main/java/net/skymoe/enchaddons/impl/mixin/ForgeHooksClientMixin.java new file mode 100644 index 0000000..cddc30d --- /dev/null +++ b/src/main/java/net/skymoe/enchaddons/impl/mixin/ForgeHooksClientMixin.java @@ -0,0 +1,17 @@ +package net.skymoe.enchaddons.impl.mixin; + +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraftforge.client.ForgeHooksClient; +import net.skymoe.enchaddons.impl.mixincallback.ForgeHooksClientMixinCallback; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ForgeHooksClient.class) +public class ForgeHooksClientMixin { + @Inject(method = "dispatchRenderLast", at = @At("HEAD"), remap = false) + private static void onRenderWorldLast(RenderGlobal context, float partialTicks, CallbackInfo ci) { + ForgeHooksClientMixinCallback.INSTANCE.onRenderWorldLast(context, partialTicks); + } +} diff --git a/src/main/java/net/skymoe/enchaddons/impl/mixin/NetHandlerPlayClientMixin.java b/src/main/java/net/skymoe/enchaddons/impl/mixin/NetHandlerPlayClientMixin.java index 9882aa3..57d7382 100644 --- a/src/main/java/net/skymoe/enchaddons/impl/mixin/NetHandlerPlayClientMixin.java +++ b/src/main/java/net/skymoe/enchaddons/impl/mixin/NetHandlerPlayClientMixin.java @@ -4,6 +4,8 @@ import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.network.play.server.S02PacketChat; import net.minecraft.network.play.server.S32PacketConfirmTransaction; +import net.minecraft.network.play.server.S38PacketPlayerListItem; +import net.minecraft.network.play.server.S3EPacketTeams; import net.skymoe.enchaddons.impl.mixincallback.NetHandlerPlayClientCallback; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -26,4 +28,16 @@ public void processPacket(S32PacketConfirmTransaction packetIn, CallbackInfo ci) // if (!gameController.isCallingFromMinecraftThread()) return; NetHandlerPlayClientCallback.INSTANCE.onS32PacketConfirmTransactionPre(packetIn); } + + @Inject(method = "handlePlayerListItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketThreadUtil;checkThreadAndEnqueue(Lnet/minecraft/network/Packet;Lnet/minecraft/network/INetHandler;Lnet/minecraft/util/IThreadListener;)V", shift = At.Shift.AFTER)) + public void processPacket(S38PacketPlayerListItem packetIn, CallbackInfo ci) { +// if (!gameController.isCallingFromMinecraftThread()) return; + NetHandlerPlayClientCallback.INSTANCE.onS38PacketPlayerListItemPre(packetIn); + } + + @Inject(method = "handleTeams", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketThreadUtil;checkThreadAndEnqueue(Lnet/minecraft/network/Packet;Lnet/minecraft/network/INetHandler;Lnet/minecraft/util/IThreadListener;)V", shift = At.Shift.AFTER)) + public void processPacket(S3EPacketTeams packetIn, CallbackInfo ci) { +// if (!gameController.isCallingFromMinecraftThread()) return; + NetHandlerPlayClientCallback.INSTANCE.onS3ETeamsPre(packetIn); + } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/ChatEvent.kt b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/ChatEvent.kt index 5408438..0870ea7 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/ChatEvent.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/ChatEvent.kt @@ -1,15 +1,18 @@ package net.skymoe.enchaddons.event.minecraft +import net.minecraft.util.IChatComponent import net.skymoe.enchaddons.event.Event sealed interface ChatEvent : Event { - sealed interface Normal : ChatEvent { - val message: String - val messageRaw: String + val message: String + val messageRaw: String + val component: IChatComponent + sealed interface Normal : ChatEvent { data class Pre( override val message: String, override val messageRaw: String, + override val component: IChatComponent, ) : Normal } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/LivingEntityEvent.kt b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/LivingEntityEvent.kt new file mode 100644 index 0000000..6ac3762 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/LivingEntityEvent.kt @@ -0,0 +1,14 @@ +package net.skymoe.enchaddons.event.minecraft + +import net.minecraft.entity.EntityLivingBase +import net.minecraft.util.DamageSource +import net.skymoe.enchaddons.event.Event + +sealed interface LivingEntityEvent : Event { + val entity: EntityLivingBase + + data class Death( + override val entity: EntityLivingBase, + val cause: DamageSource, + ) : LivingEntityEvent +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/RenderEvent.kt b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/RenderEvent.kt index e3352ab..e333795 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/RenderEvent.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/RenderEvent.kt @@ -2,6 +2,7 @@ package net.skymoe.enchaddons.event.minecraft import net.minecraft.block.state.IBlockState import net.minecraft.client.gui.GuiScreen +import net.minecraft.client.renderer.RenderGlobal import net.minecraft.tileentity.TileEntity import net.minecraft.world.IBlockAccess import net.skymoe.enchaddons.event.Event @@ -9,6 +10,13 @@ import net.skymoe.enchaddons.util.asBlockPos import net.skymoe.enchaddons.util.math.Vec3I sealed interface RenderEvent : Event { + sealed interface World : RenderEvent { + data class Last( + val context: RenderGlobal, + val partialTicks: Float, + ) : World + } + sealed interface Render : RenderEvent { data object Pre : Render } @@ -43,4 +51,4 @@ sealed interface RenderEvent : Event { var mutableTileEntity: TileEntity? = tileEntity, ) : Block } -} \ No newline at end of file +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/TabListEvent.kt b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/TabListEvent.kt new file mode 100644 index 0000000..994a7de --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/TabListEvent.kt @@ -0,0 +1,12 @@ +package net.skymoe.enchaddons.event.minecraft + +import net.minecraft.network.play.server.S38PacketPlayerListItem +import net.skymoe.enchaddons.event.Event + +sealed interface TabListEvent : Event { + val packet: S38PacketPlayerListItem + + data class Pre( + override val packet: S38PacketPlayerListItem, + ) : TabListEvent +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/TeamEvent.kt b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/TeamEvent.kt new file mode 100644 index 0000000..8506ce7 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/TeamEvent.kt @@ -0,0 +1,28 @@ +package net.skymoe.enchaddons.event.minecraft + +import net.minecraft.network.play.server.S3EPacketTeams +import net.skymoe.enchaddons.event.Event + +sealed interface TeamEvent : Event { + sealed interface Pre : TeamEvent { + data class Create( + val packet: S3EPacketTeams, + ) : Pre + + data class Remove( + val packet: S3EPacketTeams, + ) : Pre + + data class Update( + val packet: S3EPacketTeams, + ) : Pre + + data class AddPlayer( + val packet: S3EPacketTeams, + ) : Pre + + data class RemovePlayer( + val packet: S3EPacketTeams, + ) : Pre + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt b/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt new file mode 100644 index 0000000..0586e0d --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt @@ -0,0 +1,159 @@ +package net.skymoe.enchaddons.feature.awesomemap + +import kotlinx.coroutines.CoroutineScope +import net.minecraft.client.gui.GuiScreen +import net.minecraft.client.settings.KeyBinding +import net.minecraftforge.client.ClientCommandHandler +import net.minecraftforge.common.MinecraftForge +import net.minecraftforge.fml.client.registry.ClientRegistry +import net.minecraftforge.fml.common.gameevent.InputEvent +import net.skymoe.enchaddons.event.RegistryEventDispatcher +import net.skymoe.enchaddons.event.minecraft.* +import net.skymoe.enchaddons.event.register +import net.skymoe.enchaddons.feature.FeatureBase +import net.skymoe.enchaddons.feature.ensureEnabled +import net.skymoe.enchaddons.feature.ensureSkyBlockMode +import net.skymoe.enchaddons.feature.featureInfo +import net.skymoe.enchaddons.impl.feature.awesomemap.commands.FunnyMapCommands +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.Dungeon +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.WitherDoorESP +import net.skymoe.enchaddons.impl.feature.awesomemap.ui.GuiRenderer +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils +import net.skymoe.enchaddons.impl.nanovg.GUIEvent +import net.skymoe.enchaddons.util.MC +import net.skymoe.enchaddons.util.scope.longrun +import org.lwjgl.input.Keyboard +import kotlin.coroutines.EmptyCoroutineContext + +val AWESOME_MAP_INFO = featureInfo("awesome_map", "Awesome Map") + +object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { + var display: GuiScreen? = null + private val toggleLegitKey = KeyBinding("Legit Peek", Keyboard.KEY_NONE, "Funny Map") + val scope = CoroutineScope(EmptyCoroutineContext) + + private fun onInit() { + ClientCommandHandler.instance.registerCommand((FunnyMapCommands())) + listOf( + this, + Dungeon, + GuiRenderer, + Location, + RunInformation, + WitherDoorESP, + ).forEach(MinecraftForge.EVENT_BUS::register) + RenderUtils + ClientRegistry.registerKeyBinding(toggleLegitKey) + } + + fun onTick() { + MC.mcProfiler.startSection("awesome_map") + + if (display != null) { + MC.displayGuiScreen(display) + display = null + } + + if (config.peekMode == 1) { + MapRender.legitPeek = toggleLegitKey.isKeyDown + } + + Dungeon.onTick() + GuiRenderer.onTick() + Location.onTick() + + MC.mcProfiler.endSection() + } + + fun onKey(event: InputEvent.KeyInputEvent) { + if (config.peekMode == 0 && toggleLegitKey.isPressed) { + MapRender.legitPeek = !MapRender.legitPeek + } + } + + override fun registerEvents(dispatcher: RegistryEventDispatcher) { + dispatcher.run { + register { + onInit() + } + + register { + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + onTick() + } + } + + register { event -> + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + Dungeon.onChat(event) + Location.onChat(event) + RunInformation.onChat(event) + } + } + + register { event -> + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + GuiRenderer.onOverlay(event) + } + } + + register { event -> + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + Location.onWorldUnload(event) + Dungeon.onWorldLoad(event) + } + } + + register { event -> + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + RunInformation.onTabList(event) + } + } + + register { event -> + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + RunInformation.onEntityDeath(event) + } + } + + register { event -> + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + RunInformation.onScoreboard(event) + } + } + + register { event -> + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + WitherDoorESP.onRender(event) + } + } + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMapConfig.kt b/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMapConfig.kt new file mode 100644 index 0000000..9bd3251 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMapConfig.kt @@ -0,0 +1,109 @@ +package net.skymoe.enchaddons.feature.awesomemap + +import cc.polyfrost.oneconfig.config.core.OneColor +import net.skymoe.enchaddons.feature.config.FeatureConfig + +interface AwesomeMapConfig : FeatureConfig { + var autoScan: Boolean + var scanChatInfo: Boolean + + var legitMode: Boolean + var peekMode: Int + + var mapEnabled: Boolean + var mapRotate: Boolean + var mapCenter: Boolean + var mapDynamicRotate: Boolean + var mapHideInBoss: Boolean + var playerHeads: Int + var mapVanillaMarker: Boolean + + var mapX: Int + var mapY: Int + var mapScale: Float + var textScale: Float + var playerHeadScale: Float + var playerNameScale: Float + + var mapBackground: OneColor + var mapBorder: OneColor + var mapBorderWidth: Float + + var mapDarkenUndiscovered: Boolean + var mapDarkenPercent: Float + var mapGrayUndiscovered: Boolean + + var mapRoomNames: Int + var mapRoomSecrets: Int + var mapCenterRoomName: Boolean + var mapColorText: Boolean + var mapCheckmark: Int + var mapCenterCheckmark: Boolean + + var colorBloodDoor: OneColor + var colorEntranceDoor: OneColor + var colorRoomDoor: OneColor + var colorWitherDoor: OneColor + var colorOpenWitherDoor: OneColor + var colorUnopenedDoor: OneColor + + var colorBlood: OneColor + var colorEntrance: OneColor + var colorFairy: OneColor + var colorMiniboss: OneColor + var colorRoom: OneColor + var colorRoomMimic: OneColor + var colorPuzzle: OneColor + var colorRare: OneColor + var colorTrap: OneColor + var colorUnopened: OneColor + + var colorTextCleared: OneColor + var colorTextUncleared: OneColor + var colorTextGreen: OneColor + var colorTextFailed: OneColor + + var scoreElementEnabled: Boolean + var scoreAssumeSpirit: Boolean + var scoreMinimizedName: Boolean + var scoreHideInBoss: Boolean + + var scoreX: Int + var scoreY: Int + var scoreScale: Float + + var scoreTotalScore: Int + var scoreSecrets: Int + var scoreCrypts: Boolean + var scoreMimic: Boolean + var scoreDeaths: Boolean + var scorePuzzles: Int + var scoreMessage: Int + var scoreTitle: Int + var message270: String + var message300: String + var timeTo300: Boolean + + var mapShowRunInformation: Boolean + var runInformationScore: Boolean + var runInformationSecrets: Int + var runInformationCrypts: Boolean + var runInformationMimic: Boolean + var runInformationDeaths: Boolean + + var apiKey: String + var teamInfo: Boolean + + var mimicMessageEnabled: Boolean + var mimicMessage: String + var witherDoorESP: Int + var witherDoorNoKeyColor: OneColor + var witherDoorKeyColor: OneColor + var witherDoorOutlineWidth: Float + var witherDoorOutline: Float + var witherDoorFill: Float + var forceSkyblock: Boolean + var paulBonus: Boolean + var renderBeta: Boolean + var customPrefix: String +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/EnchAddonsImpl.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/EnchAddonsImpl.kt index f5c1a44..f03cc92 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/EnchAddonsImpl.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/EnchAddonsImpl.kt @@ -3,6 +3,7 @@ package net.skymoe.enchaddons.impl import net.skymoe.enchaddons.EnchAddons import net.skymoe.enchaddons.event.minecraft.MinecraftEvent import net.skymoe.enchaddons.event.register +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap import net.skymoe.enchaddons.feature.config.FeatureConfig import net.skymoe.enchaddons.feature.dungeon.fastdraft.FastDraft import net.skymoe.enchaddons.feature.dynamickeybind.DynamicKeyBinding @@ -72,6 +73,8 @@ class EnchAddonsImpl : EnchAddons { FastDraft + AwesomeMap + eventDispatcher.register { loadHypixelModAPI } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/config/feature/AwesomeMapConfigImpl.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/config/feature/AwesomeMapConfigImpl.kt new file mode 100644 index 0000000..fae1376 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/config/feature/AwesomeMapConfigImpl.kt @@ -0,0 +1,735 @@ +package net.skymoe.enchaddons.impl.config.feature + +import cc.polyfrost.oneconfig.config.annotations.* +import cc.polyfrost.oneconfig.config.annotations.Number +import cc.polyfrost.oneconfig.config.core.OneColor +import net.skymoe.enchaddons.feature.awesomemap.AWESOME_MAP_INFO +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMapConfig +import net.skymoe.enchaddons.impl.config.ConfigImpl + +class AwesomeMapConfigImpl : + ConfigImpl(AWESOME_MAP_INFO), + AwesomeMapConfig { + @Switch( + name = "Auto Scan", + description = "Automatically scans when entering dungeon. Manual scan can be done with /fmap scan.", + category = "General", + subcategory = "Scanning", + ) + override var autoScan = true + + @Switch( + name = "Chat Info", + description = "Show dungeon overview information after scanning.", + category = "General", + subcategory = "Scanning", + ) + override var scanChatInfo = true + + @Button( + name = "Map Position", + category = "General", + subcategory = "Size", + text = "Edit", + ) + fun openMoveMapGui() { +// AwesomeMap.display = EditLocationGui() + } + + @Button( + name = "Reset Map Position", + category = "General", + subcategory = "Size", + text = "Reset", + ) + fun resetMapLocation() { + mapX = 10 + mapY = 10 + } + + @Switch( + name = "Legit Mode", + description = "Hides unopened rooms. Still uses scanning to identify all rooms.", + category = "General", + subcategory = "Legit Mode", + ) + override var legitMode = false + + @Dropdown( + name = "Peek Mode", + description = "Shows cheater map while in legit mode.", + options = ["Toggle", "Hold"], + category = "General", + subcategory = "Legit Mode", + ) + override var peekMode = 0 + + @Switch( + name = "Map Enabled", + description = "Render the map!", + category = "Map", + subcategory = "Toggle", + ) + override var mapEnabled = true + + @Switch( + name = "Rotate Map", + description = "Rotates map to follow the player.", + category = "Map", + subcategory = "Toggle", + ) + override var mapRotate = false + + @Switch( + name = "Center Map", + description = "Centers the map on the player if Rotate Map is enabled.", + category = "Map", + subcategory = "Toggle", + ) + override var mapCenter = false + + @Switch( + name = "Dynamic Rotate", + description = "Keeps the entrance room at the bottom. Does not work with rotate map.", + category = "Map", + subcategory = "Toggle", + ) + override var mapDynamicRotate = false + + @Switch( + name = "Hide In Boss", + description = "Hides the map in boss.", + category = "Map", + subcategory = "Toggle", + ) + override var mapHideInBoss = false + + @Dropdown( + name = "Show Player Names", + description = "Show player name under player head", + category = "Map", + subcategory = "Toggle", + options = ["Off", "Holding Leap", "Always"], + ) + override var playerHeads = 0 + + @Switch( + name = "Vanilla Head Marker", + description = "Uses the vanilla head marker for yourself.", + category = "Map", + subcategory = "Toggle", + ) + override var mapVanillaMarker = false + + @Number( + name = "Map X", + category = "Map", + subcategory = "Size", + min = 0F, + max = 1000F, + ) + override var mapX = 10 + + @Number( + name = "Map Y", + category = "Map", + subcategory = "Size", + min = 0F, + max = 1000F, + ) + override var mapY = 10 + + @Slider( + name = "Map Size", + category = "Map", + subcategory = "Size", + min = 0.1F, + max = 4F, + ) + override var mapScale = 1.25f + + @Slider( + name = "Map Text Scale", + description = "Scale of room names and secret counts relative to map size.", + category = "Map", + subcategory = "Size", + min = 0F, + max = 2F, + ) + override var textScale = 0.75f + + @Slider( + name = "Player Heads Scale", + description = "Scale of player heads relative to map size.", + category = "Map", + subcategory = "Size", + min = 0F, + max = 2F, + ) + override var playerHeadScale = 1f + + @Slider( + name = "Player Name Scale", + description = "Scale of player names relative to head size.", + category = "Map", + subcategory = "Size", + min = 0F, + max = 2F, + ) + override var playerNameScale = .8f + + @Color( + name = "Map Background Color", + category = "Map", + subcategory = "Render", + allowAlpha = true, + ) + override var mapBackground = OneColor(0, 0, 0, 100) + + @Color( + name = "Map Border Color", + category = "Map", + subcategory = "Render", + allowAlpha = true, + ) + override var mapBorder = OneColor(0, 0, 0, 255) + + @Slider( + name = "Border Thickness", + category = "Map", + subcategory = "Render", + min = 0F, + max = 10F, + ) + override var mapBorderWidth = 3f + + @Switch( + name = "Dark Undiscovered Rooms", + description = "Darkens unentered rooms.", + category = "Rooms", + subcategory = "Render", + ) + override var mapDarkenUndiscovered = true + + @Slider( + name = "Darken Multiplier", + description = "How much to darken undiscovered rooms.", + category = "Rooms", + subcategory = "Render", + min = 0F, + max = 1F, + ) + override var mapDarkenPercent = 0.4f + + @Switch( + name = "Gray Undiscovered Rooms", + description = "Grayscale unentered rooms.", + category = "Rooms", + subcategory = "Render", + ) + override var mapGrayUndiscovered = false + + @Dropdown( + name = "Room Names", + description = "Shows names of rooms on map.", + category = "Rooms", + subcategory = "Text", + options = ["None", "Puzzles / Trap", "All"], + ) + override var mapRoomNames = 2 + + @Dropdown( + name = "Room Secrets", + description = "Shows total secrets of rooms on map.", + category = "Rooms", + subcategory = "Text", + options = ["Off", "On", "Replace Checkmark"], + ) + override var mapRoomSecrets = 0 + + @Switch( + name = "Center Room Names", + description = "Center room names.", + subcategory = "Text", + category = "Rooms", + ) + override var mapCenterRoomName = true + + @Switch( + name = "Color Text", + description = "Colors name and secret count based on room state.", + subcategory = "Text", + category = "Rooms", + ) + override var mapColorText = true + + @Dropdown( + name = "Room Checkmarks", + description = "Adds room checkmarks based on room state.", + category = "Rooms", + subcategory = "Checkmarks", + options = ["None", "Default", "NEU", "Legacy"], + ) + override var mapCheckmark = 1 + + @Switch( + name = "Center Room Checkmarks", + description = "Center room checkmarks.", + subcategory = "Checkmarks", + category = "Rooms", + ) + override var mapCenterCheckmark = true + + @Color( + name = "Blood Door", + category = "Colors", + subcategory = "Doors", + allowAlpha = true, + ) + override var colorBloodDoor = OneColor(231, 0, 0) + + @Color( + name = "Entrance Door", + category = "Colors", + subcategory = "Doors", + allowAlpha = true, + ) + override var colorEntranceDoor = OneColor(20, 133, 0) + + @Color( + name = "Normal Door", + category = "Colors", + subcategory = "Doors", + allowAlpha = true, + ) + override var colorRoomDoor = OneColor(92, 52, 14) + + @Color( + name = "Wither Door", + category = "Colors", + subcategory = "Doors", + allowAlpha = true, + ) + override var colorWitherDoor = OneColor(0, 0, 0) + + @Color( + name = "Opened Wither Door", + category = "Colors", + subcategory = "Doors", + allowAlpha = true, + ) + override var colorOpenWitherDoor = OneColor(92, 52, 14) + + @Color( + name = "Unopened Door", + category = "Colors", + subcategory = "Doors", + allowAlpha = true, + ) + override var colorUnopenedDoor = OneColor(65, 65, 65) + + @Color( + name = "Blood Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorBlood = OneColor(255, 0, 0) + + @Color( + name = "Entrance Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorEntrance = OneColor(20, 133, 0) + + @Color( + name = "Fairy Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorFairy = OneColor(224, 0, 255) + + @Color( + name = "Miniboss Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorMiniboss = OneColor(254, 223, 0) + + @Color( + name = "Normal Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorRoom = OneColor(107, 58, 17) + + @Color( + name = "Mimic Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorRoomMimic = OneColor(186, 66, 52) + + @Color( + name = "Puzzle Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorPuzzle = OneColor(117, 0, 133) + + @Color( + name = "Rare Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorRare = OneColor(255, 203, 89) + + @Color( + name = "Trap Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorTrap = OneColor(216, 127, 51) + + @Color( + name = "Unopened Room", + category = "Colors", + subcategory = "Rooms", + allowAlpha = true, + ) + override var colorUnopened = OneColor(65, 65, 65) + + @Color( + name = "Cleared Room Text", + category = "Colors", + subcategory = "Text", + allowAlpha = true, + ) + override var colorTextCleared = OneColor(255, 255, 255) + + @Color( + name = "Uncleared Room Text", + category = "Colors", + subcategory = "Text", + allowAlpha = true, + ) + override var colorTextUncleared = OneColor(170, 170, 170) + + @Color( + name = "Green Room Text", + category = "Colors", + subcategory = "Text", + allowAlpha = true, + ) + override var colorTextGreen = OneColor(85, 255, 85) + + @Color( + name = "Failed Room Text", + category = "Colors", + subcategory = "Text", + allowAlpha = true, + ) + override var colorTextFailed = OneColor(255, 255, 255) + + @Switch( + name = "Show Score", + description = "Shows separate score element.", + category = "Score", + subcategory = "Toggle", + ) + override var scoreElementEnabled = false + + @Switch( + name = "Assume Spirit", + description = "Assume everyone has a legendary spirit pet.", + category = "Score", + subcategory = "Toggle", + ) + override var scoreAssumeSpirit = true + + @Switch( + name = "Minimized Text", + description = "Shortens description for score elements.", + category = "Score", + subcategory = "Toggle", + ) + override var scoreMinimizedName = false + + @Switch( + name = "Hide in Boss", + category = "Score", + subcategory = "Toggle", + ) + override var scoreHideInBoss = false + + @Number( + name = "Score Calc X", + category = "Score", + subcategory = "Size", + min = 0F, + max = 100F, + ) + override var scoreX = 10 + + @Number( + name = "Score Calc Y", + category = "Score", + subcategory = "Size", + min = 0F, + max = 100F, + ) + override var scoreY = 10 + + @Slider( + name = "Score Calc Size", + category = "Score", + subcategory = "Size", + min = 0.1F, + max = 4F, + ) + override var scoreScale = 1f + + @Dropdown( + name = "Score", + category = "Score", + subcategory = "Elements", + options = ["Off", "On", "Separate"], + ) + override var scoreTotalScore = 2 + + @Dropdown( + name = "Secrets", + category = "Score", + subcategory = "Elements", + options = ["Off", "Total", "Total and Missing"], + ) + override var scoreSecrets = 1 + + @Switch( + name = "Crypts", + category = "Score", + subcategory = "Elements", + ) + override var scoreCrypts = false + + @Switch( + name = "Mimic", + category = "Score", + subcategory = "Elements", + ) + override var scoreMimic = false + + @Switch( + name = "Deaths", + category = "Score", + subcategory = "Elements", + ) + override var scoreDeaths = false + + @Dropdown( + name = "Puzzles", + category = "Score", + subcategory = "Elements", + options = ["Off", "Total", "Completed and Total"], + ) + override var scorePuzzles = 0 + + @Dropdown( + name = "Score Messages", + category = "Score", + subcategory = "Message", + options = ["Off", "300", "270 and 300"], + ) + override var scoreMessage = 0 + + @Dropdown( + name = "Score Title", + description = "Shows score messages as a title notification.", + category = "Score", + subcategory = "Message", + options = ["Off", "300", "270 and 300"], + ) + override var scoreTitle = 0 + + @Text( + name = "270 Message", + category = "Score", + subcategory = "Message", + ) + override var message270 = "270 Score" + + @Text( + name = "300 Message", + category = "Score", + subcategory = "Message", + ) + override var message300 = "300 Score" + + @Switch( + name = "300 Time", + description = "Shows time to reach 300 score.", + category = "Score", + subcategory = "Message", + ) + override var timeTo300 = false + + @Switch( + name = "Show Run Information", + description = "Shows run information under map.", + category = "Run Information", + subcategory = "Toggle", + ) + override var mapShowRunInformation = true + + @Switch( + name = "Score", + category = "Run Information", + subcategory = "Elements", + ) + override var runInformationScore = true + + @Dropdown( + name = "Secrets", + category = "Run Information", + subcategory = "Elements", + options = ["Off", "Total", "Total and Missing"], + ) + override var runInformationSecrets = 1 + + @Switch( + name = "Crypts", + category = "Run Information", + subcategory = "Elements", + ) + override var runInformationCrypts = true + + @Switch( + name = "Mimic", + category = "Run Information", + subcategory = "Elements", + ) + override var runInformationMimic = true + + @Switch( + name = "Deaths", + category = "Run Information", + subcategory = "Elements", + ) + override var runInformationDeaths = true + + @Text( + name = "Hypixel API Key", + category = "Other Features", + secure = true, + ) + override var apiKey = "" + + @Switch( + name = "Show Team Info", + description = "Shows team member secrets and room times at end of run. Requires a valid API key.", + category = "Other Features", + ) + override var teamInfo = false + + @Switch( + name = "Mimic Message", + description = "Sends party message when a mimic is killed. Detects most instant kills.", + category = "Other Features", + subcategory = "Mimic Message", + ) + override var mimicMessageEnabled = false + + @Text( + name = "Mimic Message Text", + category = "Other Features", + subcategory = "Mimic Message", + ) + override var mimicMessage = "Mimic Killed!" + + @Dropdown( + name = "Wither Door ESP", + description = "Boxes unopened wither doors.", + category = "Other Features", + subcategory = "Wither Door", + options = ["Off", "First", "All"], + ) + override var witherDoorESP = 0 + + @Color( + name = "No Key Color", + category = "Other Features", + subcategory = "Wither Door", + allowAlpha = true, + ) + override var witherDoorNoKeyColor = OneColor(255, 0, 0) + + @Color( + name = "Has Key Color", + category = "Other Features", + subcategory = "Wither Door", + allowAlpha = true, + ) + override var witherDoorKeyColor = OneColor(0, 255, 0) + + @Slider( + name = "Door Outline Width", + category = "Other Features", + subcategory = "Wither Door", + min = 1f, + max = 10f, + ) + override var witherDoorOutlineWidth = 3f + + @Slider( + name = "Door Outline Opacity", + category = "Other Features", + subcategory = "Wither Door", + min = 0F, + max = 10F, + ) + override var witherDoorOutline = 1f + + @Slider( + name = "Door Fill Opacity", + category = "Other Features", + subcategory = "Wither Door", + min = 0F, + max = 10F, + ) + override var witherDoorFill = 0.25f + + @Switch( + name = "Force Skyblock", + description = "Disables in skyblock and dungeon checks. Don't enable unless you know what you're doing.", + category = "Debug", + ) + override var forceSkyblock = false + + @Switch( + name = "Paul Score", + description = "Assumes paul perk is active to give 10 bonus score.", + category = "Debug", + ) + override var paulBonus = false + + @Switch( + name = "Beta Rendering", + category = "Debug", + ) + override var renderBeta = false + + @Text( + name = "Custom Prefix", + category = "Other Features", + ) + override var customPrefix = "" +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/config/subcategory/DungeonConfig.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/config/subcategory/DungeonConfig.kt index ff02de7..f3a88ee 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/config/subcategory/DungeonConfig.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/config/subcategory/DungeonConfig.kt @@ -5,6 +5,7 @@ import net.skymoe.enchaddons.feature.config.FeatureConfig import net.skymoe.enchaddons.feature.featureInfo import net.skymoe.enchaddons.impl.config.ConfigCategory import net.skymoe.enchaddons.impl.config.ConfigImpl +import net.skymoe.enchaddons.impl.config.feature.AwesomeMapConfigImpl import net.skymoe.enchaddons.impl.config.feature.FastDraftConfigImpl import kotlin.reflect.KClass @@ -17,6 +18,9 @@ class DungeonConfig : @SubConfig var fastDraft = FastDraftConfigImpl() + @SubConfig + var awesomeMapConfig = AwesomeMapConfigImpl() + init { initializeMembers() } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/commands/FunnyMapCommands.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/commands/FunnyMapCommands.kt new file mode 100644 index 0000000..2febff7 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/commands/FunnyMapCommands.kt @@ -0,0 +1,77 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.commands + +import net.minecraft.client.gui.GuiScreen +import net.minecraft.command.CommandBase +import net.minecraft.command.ICommandSender +import net.minecraft.util.BlockPos +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.Dungeon +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.DungeonScan +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.ScanUtils +import net.skymoe.enchaddons.util.LogLevel +import net.skymoe.enchaddons.util.MC +import net.skymoe.enchaddons.util.modMessage + +class FunnyMapCommands : CommandBase() { + private val commands = listOf("help", "scan", "roomdata") + + override fun getCommandName(): String = "funnymap" + + override fun getCommandAliases(): List = listOf("fmap", "fm") + + override fun getCommandUsage(sender: ICommandSender): String = "/$commandName" + + override fun getRequiredPermissionLevel(): Int = 0 + + override fun processCommand( + sender: ICommandSender, + args: Array, + ) { + if (args.isEmpty()) { +// display = Config.gui() + return + } + when (args[0]) { + // Help command + "help" -> { +// UChat.chat( +// """ +// #§b§l<§fFunnyMap Commands§b§l> +// # §b/funnymap §9> §3Opens the main mod GUI. §7(Alias: fm, fmap) +// # §b/§ffunnymap §bscan §9> §3Rescans the map. +// # §b/§ffunnymap §broomdata §9> §3Copies current room data or room core to clipboard. +// """.trimMargin("#"), +// ) + } + // Scans the dungeon + "scan" -> { + Dungeon.reset() + DungeonScan.scan() + } + // Copies room data or room core to clipboard + "roomdata" -> { + val pos = ScanUtils.getRoomCentre(MC.thePlayer.posX.toInt(), MC.thePlayer.posZ.toInt()) + val data = ScanUtils.getRoomData(pos.first, pos.second) + if (data != null) { + GuiScreen.setClipboardString(data.toString()) + modMessage("§aCopied room data to clipboard.", LogLevel.INFO) + } else { + GuiScreen.setClipboardString(ScanUtils.getCore(pos.first, pos.second).toString()) + modMessage("§cExisting room data not found. §aCopied room core to clipboard.", LogLevel.WARN) + } + } + // Unknown command help message + else -> modMessage("§cUnknown command. Use §b/§ffunnymap help §cfor a list of commands.", LogLevel.WARN) + } + } + + override fun addTabCompletionOptions( + sender: ICommandSender, + args: Array, + pos: BlockPos, + ): MutableList { + if (args.size == 1) { + return getListOfStringsMatchingLastWord(args, commands) + } + return mutableListOf() + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/DungeonPlayer.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/DungeonPlayer.kt new file mode 100644 index 0000000..7a1709c --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/DungeonPlayer.kt @@ -0,0 +1,67 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.entity.player.EnumPlayerModelParts +import net.minecraft.util.ResourceLocation +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.Room +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.Dungeon +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.APIUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils + +data class DungeonPlayer( + val skin: ResourceLocation, +) { + var name = "" + + /** Minecraft formatting code for the player's name */ + var colorPrefix = 'f' + + /** The player's name with formatting code */ + val formattedName: String + get() = "§$colorPrefix$name" + + var mapX = 0 + var mapZ = 0 + var yaw = 0f + + /** Has information from player entity been loaded */ + var playerLoaded = false + var icon = "" + var renderHat = false + var dead = false + var uuid = "" + var isPlayer = false + + /** Stats for compiling player tracker information */ + var startingSecrets = 0 + var lastRoom = "" + var lastTime = 0L + var roomVisits: MutableList> = mutableListOf() + + /** Set player data that requires entity to be loaded */ + fun setData(player: EntityPlayer) { + renderHat = player.isWearing(EnumPlayerModelParts.HAT) + uuid = player.uniqueID.toString() + playerLoaded = true + AwesomeMap.scope.launch(Dispatchers.IO) { + val secrets = APIUtils.getSecrets(uuid) + Utils.runMinecraftThread { + startingSecrets = secrets + } + } + } + + /** Gets the player's room, used for room tracker */ + fun getCurrentRoom(): String { + if (dead) return "Dead" + if (Location.inBoss) return "Boss" + val x = (mapX - MapUtils.startCorner.first) / (MapUtils.roomSize + MapUtils.connectorSize) + val z = (mapZ - MapUtils.startCorner.second) / (MapUtils.roomSize + MapUtils.connectorSize) + return (Dungeon.Info.dungeonList.getOrNull(x * 2 + z * 22) as? Room)?.data?.name ?: "Error" + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/RoomData.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/RoomData.kt new file mode 100644 index 0000000..dbb3a50 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/RoomData.kt @@ -0,0 +1,16 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core + +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomType + +data class RoomData( + val name: String, + var type: RoomType, + val cores: List, + val crypts: Int, + val secrets: Int, + val trappedChests: Int, +) { + companion object { + fun createUnknown(type: RoomType) = RoomData("Unknown", type, emptyList(), 0, 0, 0) + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Door.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Door.kt new file mode 100644 index 0000000..06c5824 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Door.kt @@ -0,0 +1,31 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender +import java.awt.Color + +class Door( + override val x: Int, + override val z: Int, + var type: DoorType, +) : Tile { + var opened = false + override var state: RoomState = RoomState.UNDISCOVERED + override val color: Color + get() = + if (MapRender.legitRender && state == RoomState.UNOPENED) { + AwesomeMap.config.colorUnopenedDoor.toJavaColor() + } else { + when (type) { + DoorType.BLOOD -> AwesomeMap.config.colorBloodDoor.toJavaColor() + DoorType.ENTRANCE -> AwesomeMap.config.colorEntranceDoor.toJavaColor() + DoorType.WITHER -> + if (opened) { + AwesomeMap.config.colorOpenWitherDoor.toJavaColor() + } else { + AwesomeMap.config.colorWitherDoor.toJavaColor() + } + else -> AwesomeMap.config.colorRoomDoor.toJavaColor() + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/DoorType.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/DoorType.kt new file mode 100644 index 0000000..3252bfe --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/DoorType.kt @@ -0,0 +1,21 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +enum class DoorType { + BLOOD, + ENTRANCE, + NORMAL, + WITHER, + ; + + companion object { + fun fromMapColor(color: Int): DoorType? = + when (color) { + 18 -> BLOOD + 30 -> ENTRANCE + // Champion, Fairy, Puzzle, Trap, Unopened doors render as normal doors + 74, 82, 66, 62, 85, 63 -> NORMAL + 119 -> WITHER + else -> null + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Puzzle.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Puzzle.kt new file mode 100644 index 0000000..64adc21 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Puzzle.kt @@ -0,0 +1,26 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf + +enum class Puzzle( + val roomDataName: String, + val tabName: String = roomDataName, +) { + BOMB_DEFUSE("Bomb Defuse"), + BOULDER("Boulder"), + CREEPER_BEAMS("Creeper Beams"), + HIGHER_BLAZE("Higher Blaze", "Higher Or Lower"), + ICE_FILL("Ice Fill"), + ICE_PATH("Ice Path"), + LOWER_BLAZE("Lower Blaze", "Higher Or Lower"), + QUIZ("Quiz"), + TELEPORT_MAZE("Teleport Maze"), + THREE_WEIRDOS("Three Weirdos"), + TIC_TAC_TOE("Tic Tac Toe"), + WATER_BOARD("Water Board"), + ; + + companion object { + fun fromName(name: String): Puzzle? = entries.find { name.equalsOneOf(it.roomDataName, it.tabName) } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Room.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Room.kt new file mode 100644 index 0000000..1096b8d --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Room.kt @@ -0,0 +1,38 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.RoomData +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender +import java.awt.Color + +class Room( + override val x: Int, + override val z: Int, + var data: RoomData, +) : Tile { + var core = 0 + var isSeparator = false + var uniqueRoom: UniqueRoom? = null + override var state: RoomState = RoomState.UNDISCOVERED + override val color: Color + get() = + if (MapRender.legitRender && state == RoomState.UNOPENED) { + AwesomeMap.config.colorUnopened.toJavaColor() + } else { + when (data.type) { + RoomType.BLOOD -> AwesomeMap.config.colorBlood.toJavaColor() + RoomType.CHAMPION -> AwesomeMap.config.colorMiniboss.toJavaColor() + RoomType.ENTRANCE -> AwesomeMap.config.colorEntrance.toJavaColor() + RoomType.FAIRY -> AwesomeMap.config.colorFairy.toJavaColor() + RoomType.PUZZLE -> AwesomeMap.config.colorPuzzle.toJavaColor() + RoomType.RARE -> AwesomeMap.config.colorRare.toJavaColor() + RoomType.TRAP -> AwesomeMap.config.colorTrap.toJavaColor() + else -> + if (uniqueRoom?.hasMimic == true) { + AwesomeMap.config.colorRoomMimic.toJavaColor() + } else { + AwesomeMap.config.colorRoom.toJavaColor() + } + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/RoomState.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/RoomState.kt new file mode 100644 index 0000000..1bca042 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/RoomState.kt @@ -0,0 +1,10 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +enum class RoomState { + GREEN, + CLEARED, + FAILED, + DISCOVERED, + UNOPENED, + UNDISCOVERED, +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/RoomType.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/RoomType.kt new file mode 100644 index 0000000..4cc6d11 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/RoomType.kt @@ -0,0 +1,27 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +enum class RoomType { + BLOOD, + CHAMPION, + ENTRANCE, + FAIRY, + NORMAL, + PUZZLE, + RARE, + TRAP, + ; + + companion object { + fun fromMapColor(color: Int): RoomType? = + when (color) { + 18 -> BLOOD + 74 -> CHAMPION + 30 -> ENTRANCE + 82 -> FAIRY + 63, 85 -> NORMAL + 66 -> PUZZLE + 62 -> TRAP + else -> null + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Tile.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Tile.kt new file mode 100644 index 0000000..ed8678a --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Tile.kt @@ -0,0 +1,10 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +import java.awt.Color + +interface Tile { + val x: Int + val z: Int + var state: RoomState + val color: Color +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/UniqueRoom.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/UniqueRoom.kt new file mode 100644 index 0000000..218ccd2 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/UniqueRoom.kt @@ -0,0 +1,139 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.Dungeon +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender + +class UniqueRoom( + arrX: Int, + arrY: Int, + room: Room, +) { + var name: String + var topLeft = Pair(arrX, arrY) + private var center = Pair(arrX, arrY) + var mainRoom = room + get() = Dungeon.Info.dungeonList[topLeft.second * 11 + topLeft.first] as? Room ?: field + val tiles = mutableListOf(room to Pair(arrX, arrY)) + var hasMimic = false + + init { + if (room.data.name == "Unknown") { + name = "Unknown_${arrX}_$arrY" + } else { + name = room.data.name + init(arrX, arrY, room) + } + room.uniqueRoom = this + Dungeon.Info.uniqueRooms.add(this) + } + + fun init( + arrX: Int, + arrY: Int, + room: Room, + ) { + Dungeon.Info.cryptCount += room.data.crypts + Dungeon.Info.secretCount += room.data.secrets + when (room.data.type) { + RoomType.ENTRANCE -> + MapRender.dynamicRotation = + when { + arrY == 0 -> 180f + arrX == 0 -> -90f + arrX > arrY -> 90f + else -> 0f + } + + RoomType.TRAP -> Dungeon.Info.trapType = room.data.name.split(" ")[0] + RoomType.PUZZLE -> Puzzle.fromName(room.data.name)?.let { Dungeon.Info.puzzles.putIfAbsent(it, false) } + + else -> {} + } + } + + fun addTile( + x: Int, + y: Int, + tile: Room, + ) { + addToTiles(x, y, tile) + calculateCenter() + } + + fun addTiles(tiles: Iterable>) { + tiles.forEach { (x, y) -> + val room = Dungeon.Info.dungeonList[y * 11 + x] as? Room ?: return@forEach + if (room.uniqueRoom !== this) { + Dungeon.Info.uniqueRooms.remove(room.uniqueRoom) + addToTiles(x, y, room) + } + } + calculateCenter() + } + + private fun addToTiles( + x: Int, + y: Int, + tile: Room, + ) { + if (mainRoom.data.name == "Unknown") { + if (tile.data.name != "Unknown") { + init(x, y, tile) + name = tile.data.name + mainRoom.data = tile.data + } + } else if (tile.data.name == "Unknown") { + tile.data = mainRoom.data + } + + tile.uniqueRoom = this + + tiles.removeIf { it.first.x == tile.x && it.first.z == tile.z } + tiles.add(tile to Pair(x, y)) + + if (x < topLeft.first || (x == topLeft.first && y < topLeft.second)) { + topLeft = Pair(x, y) + mainRoom = tile + if (name.startsWith("Unknown")) { + name = "Unknown_${x}_$y" + } + } + } + + private fun calculateCenter() { + if (tiles.size == 1) { + center = tiles.first().second + return + } + + val positions = + tiles.mapNotNull { + it.second.takeIf { (arrX, arrZ) -> + arrX % 2 == 0 && arrZ % 2 == 0 + } + } + + if (positions.isEmpty()) return + + val xRooms = positions.groupBy { it.first }.entries.sortedByDescending { it.value.size } + val zRooms = positions.groupBy { it.second }.entries.sortedByDescending { it.value.size } + + center = + when { + zRooms.size == 1 || zRooms[0].value.size != zRooms[1].value.size -> { + xRooms.sumOf { it.key } / xRooms.size to zRooms[0].key + } + + xRooms.size == 1 || xRooms[0].value.size != xRooms[1].value.size -> { + xRooms[0].key to zRooms.sumOf { it.key } / zRooms.size + } + + else -> (xRooms[0].key + xRooms[1].key) / 2 to (zRooms[0].key + zRooms[1].key) / 2 + } + } + + fun getNamePosition(): Pair = if (AwesomeMap.config.mapCenterRoomName) center else topLeft + + fun getCheckmarkPosition(): Pair = if (AwesomeMap.config.mapCenterCheckmark) center else topLeft +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Unknown.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Unknown.kt new file mode 100644 index 0000000..d59fc78 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/core/map/Unknown.kt @@ -0,0 +1,11 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.core.map + +import java.awt.Color + +class Unknown( + override val x: Int, + override val z: Int, +) : Tile { + override val color: Color = Color(0, 0, 0, 0) + override var state: RoomState = RoomState.UNDISCOVERED +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/Dungeon.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/Dungeon.kt new file mode 100644 index 0000000..a7a202b --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/Dungeon.kt @@ -0,0 +1,148 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.minecraft.event.ClickEvent +import net.skymoe.enchaddons.event.minecraft.ChatEvent +import net.skymoe.enchaddons.event.minecraft.MinecraftEvent +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.Dungeon.Info.ended +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inDungeons +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.TabList +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.util.printChat + +object Dungeon { + val dungeonTeammates = mutableMapOf() + val espDoors = mutableListOf() + + private val keyGainRegex = + listOf( + Regex(".+ §r§ehas obtained §r§a§r§.+ Key§r§e!§r"), + Regex("§r§eA §r§a§r§.+ Key§r§e was picked up!§r"), + ) + private val keyUseRegex = + listOf( + Regex("§r§cThe §r§c§lBLOOD DOOR§r§c has been opened!§r"), + Regex("§r§a.+§r§a opened a §r§8§lWITHER §r§adoor!§r"), + ) + + fun onTick() { + if (!inDungeons) return + + if (shouldSearchMimic()) { + MimicDetector.findMimic()?.let { + if (AwesomeMap.config.scanChatInfo) printChat("&7Mimic Room: &c$it") + Info.mimicFound = true + } + } + + if (!MapUtils.calibrated) { + MapUtils.calibrated = MapUtils.calibrateMap() + } + + if (MapUtils.mapDataUpdated) { + MapUpdate.updateRooms() + MapUtils.mapDataUpdated = false + } + + if (Location.dungeonFloor.equalsOneOf(6, 7)) { + MimicDetector.checkMimicDead() + } + ScoreCalculation.updateScore() + + TabList.getDungeonTabList()?.let { + MapUpdate.updatePlayers(it) + RunInformation.updatePuzzleCount(it) + } + + if (DungeonScan.shouldScan) { +// scope.launch { DungeonScan.scan() } + DungeonScan.scan() + } + } + + fun onChat(event: ChatEvent) { + if (event.component.siblings.any { + it.chatStyle?.chatClickEvent?.run { + action == ClickEvent.Action.RUN_COMMAND && value == "/showextrastats" + } == true + } + ) { + ended = true + if (AwesomeMap.config.teamInfo) { + PlayerTracker.onDungeonEnd() + } + } + + if (keyGainRegex.any { it.matches(event.component.formattedText) }) { + Info.keys++ + } + + if (keyUseRegex.any { it.matches(event.component.formattedText) }) { + Info.keys-- + } + + when (event.message) { + "Starting in 4 seconds." -> MapUpdate.preloadHeads() + "[NPC] Mort: Here, I found this map when I first entered the dungeon." -> { + MapUpdate.getPlayers() + Info.startTime = System.currentTimeMillis() + } + } + } + + fun onWorldLoad(event: MinecraftEvent.World.Unload) { + reset() + } + + fun reset() { + Info.reset() + dungeonTeammates.clear() + espDoors.clear() + PlayerTracker.roomClears.clear() + MapUtils.calibrated = false + MapUtils.mapData = null + DungeonScan.hasScanned = false + RunInformation.reset() + } + + private fun shouldSearchMimic() = !Info.mimicFound && Location.dungeonFloor.equalsOneOf(6, 7) && !AwesomeMap.config.legitMode + + object Info { + // 6 x 6 room grid, 11 x 11 with connections + val dungeonList = Array(121) { Unknown(0, 0) } + val uniqueRooms = mutableSetOf() + var roomCount = 0 + val puzzles = mutableMapOf() + + var trapType = "" + var witherDoors = 0 + var cryptCount = 0 + var secretCount = 0 + var mimicFound = false + + var startTime = 0L + var ended = false + var keys = 0 + + fun reset() { + dungeonList.fill(Unknown(0, 0)) + uniqueRooms.clear() + roomCount = 0 + puzzles.clear() + + trapType = "" + witherDoors = 0 + cryptCount = 0 + secretCount = 0 + mimicFound = false + + startTime = 0L + ended = false + keys = 0 + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/DungeonMap.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/DungeonMap.kt new file mode 100644 index 0000000..59a01db --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/DungeonMap.kt @@ -0,0 +1,111 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.skymoe.enchaddons.impl.feature.awesomemap.core.RoomData +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils + +class DungeonMap( + mapColors: ByteArray, +) { + private var centerColors: ByteArray = ByteArray(121) + private var sideColors: ByteArray = ByteArray(121) + private val cacheTiles: Array = Array(121) { null } + + init { + val halfRoom = MapUtils.roomSize / 2 + val halfTile = halfRoom + 2 + val startX = MapUtils.startCorner.first + halfRoom + val startY = MapUtils.startCorner.second + halfRoom + + for (y in 0..10) { + for (x in 0..10) { + val mapX = startX + x * halfTile + val mapY = startY + y * halfTile + + if (mapX >= 128 || mapY >= 128) continue + + centerColors[y * 11 + x] = mapColors[mapY * 128 + mapX] + + val sideIndex = + if (x % 2 == 0 && y % 2 == 0) { + val topX = mapX - halfRoom + val topY = mapY - halfRoom + topY * 128 + topX + } else { + val horizontal = y % 2 == 1 + if (horizontal) { + mapY * 128 + mapX - 4 + } else { + (mapY - 4) * 128 + mapX + } + } + + sideColors[y * 11 + x] = mapColors[sideIndex] + } + } + } + + fun getTile( + arrayX: Int, + arrayY: Int, + ): Tile { + val index = arrayY * 11 + arrayX + if (index !in cacheTiles.indices) return Unknown(0, 0) + if (cacheTiles[index] == null) { + val xPos = DungeonScan.START_X + arrayX * (DungeonScan.ROOM_SIZE shr 1) + val zPos = DungeonScan.START_Z + arrayY * (DungeonScan.ROOM_SIZE shr 1) + cacheTiles[index] = scanTile(arrayX, arrayY, xPos, zPos) + } + return cacheTiles[index] ?: Unknown(0, 0) + } + + private fun scanTile( + arrayX: Int, + arrayY: Int, + worldX: Int, + worldZ: Int, + ): Tile { + val centerColor = centerColors[arrayY * 11 + arrayX].toInt() + val sideColor = sideColors[arrayY * 11 + arrayX].toInt() + + if (centerColor == 0) return Unknown(worldX, worldZ) + + return if (arrayX % 2 == 0 && arrayY % 2 == 0) { + val type = RoomType.fromMapColor(sideColor) ?: return Unknown(worldX, worldZ) + Room(worldX, worldZ, RoomData.createUnknown(type)).apply { + state = + when (centerColor) { + 18 -> + when (type) { + RoomType.BLOOD -> RoomState.DISCOVERED + RoomType.PUZZLE -> RoomState.FAILED + else -> state + } + + 30 -> + when (type) { + RoomType.ENTRANCE -> RoomState.DISCOVERED + else -> RoomState.GREEN + } + + 34 -> RoomState.CLEARED + 85, 119 -> RoomState.UNOPENED + else -> RoomState.DISCOVERED + } + } + } else { + if (sideColor == 0) { + val type = DoorType.fromMapColor(centerColor) ?: return Unknown(worldX, worldZ) + Door(worldX, worldZ, type).apply { + state = if (centerColor == 85) RoomState.UNOPENED else RoomState.DISCOVERED + } + } else { + val type = RoomType.fromMapColor(sideColor) ?: return Unknown(worldX, worldZ) + Room(worldX, worldZ, RoomData.createUnknown(type)).apply { + state = RoomState.DISCOVERED + isSeparator = true + } + } + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/DungeonScan.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/DungeonScan.kt new file mode 100644 index 0000000..da6d0fe --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/DungeonScan.kt @@ -0,0 +1,191 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.minecraft.init.Blocks +import net.minecraft.util.BlockPos +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.DungeonScan.scan +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.dungeonFloor +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.util.LogLevel +import net.skymoe.enchaddons.util.MC +import net.skymoe.enchaddons.util.modMessage +import kotlin.math.ceil + +/** + * Handles everything related to scanning the dungeon. Running [scan] will update the instance of [Dungeon]. + */ +object DungeonScan { + /** + * The size of each dungeon room in blocks. + */ + const val ROOM_SIZE = 32 + + /** + * The starting coordinates to start scanning (the north-west corner). + */ + const val START_X = -185 + const val START_Z = -185 + + private var lastScanTime = 0L + var isScanning = false + var hasScanned = false + + val shouldScan: Boolean + get() = + AwesomeMap.config.autoScan && + !isScanning && + !hasScanned && + System.currentTimeMillis() - lastScanTime >= 250 && + dungeonFloor != -1 + + fun scan() { + isScanning = true + var allChunksLoaded = true + + // Scans the dungeon in a 11x11 grid. + for (x in 0..10) { + for (z in 0..10) { + // Translates the grid index into world position. + val xPos = START_X + x * (ROOM_SIZE shr 1) + val zPos = START_Z + z * (ROOM_SIZE shr 1) + + if (!MC.theWorld.getChunkFromChunkCoords(xPos shr 4, zPos shr 4).isLoaded) { + // The room being scanned has not been loaded in. + allChunksLoaded = false + continue + } + + // This room has already been added in a previous scan. + if (Dungeon.Info.dungeonList[x + z * 11].run { + this !is Unknown && (this as? Room)?.data?.name != "Unknown" + } + ) { + continue + } + + scanRoom(xPos, zPos, z, x)?.let { + val prev = Dungeon.Info.dungeonList[z * 11 + x] + if (it is Room) { + if ((prev as? Room)?.uniqueRoom != null) { + prev.uniqueRoom?.addTile(x, z, it) + } else if (Dungeon.Info.uniqueRooms.none { unique -> unique.name == it.data.name }) { + UniqueRoom(x, z, it) + } + MapUpdate.roomAdded = true + } + Dungeon.Info.dungeonList[z * 11 + x] = it + MapRenderList.renderUpdated = true + } + } + } + + if (MapUpdate.roomAdded) { + MapUpdate.updateUniques() + } + + if (allChunksLoaded) { + if (AwesomeMap.config.scanChatInfo) { + val maxSecrets = ceil(Dungeon.Info.secretCount * ScoreCalculation.getSecretPercent()) + var maxBonus = 5 + if (dungeonFloor.equalsOneOf(6, 7)) maxBonus += 2 + if (ScoreCalculation.paul) maxBonus += 10 + val minSecrets = ceil(maxSecrets * (40 - maxBonus) / 40).toInt() + + val lines = + mutableListOf( + "&aScan Finished!", + "&aPuzzles (&c${Dungeon.Info.puzzles.size}&a):", + Dungeon.Info.puzzles.entries.joinToString( + separator = "\n&b- &d", + prefix = "&b- &d", + ) { it.key.roomDataName }, + "&6Trap: &a${Dungeon.Info.trapType}", + "&8Wither Doors: &7${Dungeon.Info.witherDoors - 1}", + "&7Total Crypts: &6${Dungeon.Info.cryptCount}", + "&7Total Secrets: &b${Dungeon.Info.secretCount}", + "&7Minimum Secrets: &e$minSecrets", + ) + modMessage(lines.joinToString(separator = "\n"), LogLevel.INFO) + } + Dungeon.Info.roomCount = + Dungeon.Info.dungeonList + .filter { it is Room && !it.isSeparator } + .size + hasScanned = true + } + + lastScanTime = System.currentTimeMillis() + isScanning = false + } + + private fun scanRoom( + x: Int, + z: Int, + row: Int, + column: Int, + ): Tile? { + val height = MC.theWorld.getChunkFromChunkCoords(x shr 4, z shr 4).getHeightValue(x and 15, z and 15) + if (height == 0) return null + + val rowEven = row and 1 == 0 + val columnEven = column and 1 == 0 + + return when { + // Scanning a room + rowEven && columnEven -> { + val roomCore = ScanUtils.getCore(x, z) + Room(x, z, ScanUtils.getRoomData(roomCore) ?: return null).apply { + core = roomCore + } + } + + // Can only be the center "block" of a 2x2 room. + !rowEven && !columnEven -> { + Dungeon.Info.dungeonList[column - 1 + (row - 1) * 11].let { + if (it is Room) { + Room(x, z, it.data).apply { + isSeparator = true + } + } else { + null + } + } + } + + // Doorway between rooms + // Old trap has a single block at 82 + height.equalsOneOf(74, 82) -> { + Door( + x, + z, + // Finds door type from door block + type = + when (MC.theWorld.getBlockState(BlockPos(x, 69, z)).block) { + Blocks.coal_block -> { + Dungeon.Info.witherDoors++ + DoorType.WITHER + } + + Blocks.monster_egg -> DoorType.ENTRANCE + Blocks.stained_hardened_clay -> DoorType.BLOOD + else -> DoorType.NORMAL + }, + ) + } + + // Connection between large rooms + else -> { + Dungeon.Info.dungeonList[if (rowEven) row * 11 + column - 1 else (row - 1) * 11 + column].let { + if (it !is Room) { + null + } else if (it.data.type == RoomType.ENTRANCE) { + Door(x, z, DoorType.ENTRANCE) + } else { + Room(x, z, it.data).apply { isSeparator = true } + } + } + } + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt new file mode 100644 index 0000000..8ee7a62 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt @@ -0,0 +1,321 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.minecraft.client.gui.ScaledResolution +import net.minecraft.client.renderer.GlStateManager +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* +import net.skymoe.enchaddons.impl.feature.awesomemap.ui.ScoreElement +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inBoss +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.connectorSize +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.halfRoomSize +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.roomSize +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.darken +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.grayScale +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.util.MC +import org.lwjgl.opengl.GL11 +import java.awt.Color + +object MapRender { + var dynamicRotation = 0f + var legitPeek = false + set(value) { + if (field != value && AwesomeMap.config.legitMode) { + MapRenderList.renderUpdated = true + } + field = value + } + + val legitRender: Boolean + get() = AwesomeMap.config.legitMode && !legitPeek + + fun renderMap() { + MC.mcProfiler.startSection("border") + + RenderUtils.renderRect( + 0.0, + 0.0, + 128.0, + if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, + AwesomeMap.config.mapBackground.toJavaColor(), + ) + + RenderUtils.renderRectBorder( + 0.0, + 0.0, + 128.0, + if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, + AwesomeMap.config.mapBorderWidth.toDouble(), + AwesomeMap.config.mapBorder.toJavaColor(), + ) + + MC.mcProfiler.endSection() + + if (AwesomeMap.config.mapRotate) { + GlStateManager.pushMatrix() + setupRotate() + } else if (AwesomeMap.config.mapDynamicRotate) { + GlStateManager.translate(64.0, 64.0, 0.0) + GlStateManager.rotate(dynamicRotation, 0f, 0f, 1f) + GlStateManager.translate(-64.0, -64.0, 0.0) + } + + MC.mcProfiler.startSection("rooms") + renderRooms() + MC.mcProfiler.endStartSection("text") + renderText() + if (!inBoss) { + MC.mcProfiler.endStartSection("heads") + renderPlayerHeads() + } + MC.mcProfiler.endSection() + + if (AwesomeMap.config.mapRotate) { + GL11.glDisable(GL11.GL_SCISSOR_TEST) + GlStateManager.popMatrix() + } else if (AwesomeMap.config.mapDynamicRotate) { + GlStateManager.translate(64.0, 64.0, 0.0) + GlStateManager.rotate(-dynamicRotation, 0f, 0f, 1f) + GlStateManager.translate(-64.0, -64.0, 0.0) + } + + if (AwesomeMap.config.mapShowRunInformation) { + MC.mcProfiler.startSection("footer") + renderRunInformation() + MC.mcProfiler.endSection() + } + } + + fun setupRotate() { + val scale = ScaledResolution(MC).scaleFactor + GL11.glEnable(GL11.GL_SCISSOR_TEST) + GL11.glScissor( + (AwesomeMap.config.mapX * scale), + (MC.displayHeight - AwesomeMap.config.mapY * scale - 128 * scale * AwesomeMap.config.mapScale).toInt(), + (128 * scale * AwesomeMap.config.mapScale).toInt(), + (128 * scale * AwesomeMap.config.mapScale).toInt(), + ) + GlStateManager.translate(64.0, 64.0, 0.0) + GlStateManager.rotate(-MC.thePlayer.rotationYaw + 180f, 0f, 0f, 1f) + + if (AwesomeMap.config.mapCenter) { + GlStateManager.translate( + -((MC.thePlayer.posX - DungeonScan.START_X + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.first - 2), + -((MC.thePlayer.posZ - DungeonScan.START_Z + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.second - 2), + 0.0, + ) + } else { + GlStateManager.translate(-64.0, -64.0, 0.0) + } + } + + private fun renderRooms() { + GlStateManager.pushMatrix() + GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) + + for (y in 0..10) { + for (x in 0..10) { + val tile = Dungeon.Info.dungeonList[y * 11 + x] + if (tile is Unknown) continue + if (legitRender && tile.state == RoomState.UNDISCOVERED) continue + + val xOffset = (x shr 1) * (roomSize + connectorSize) + val yOffset = (y shr 1) * (roomSize + connectorSize) + + val xEven = x and 1 == 0 + val yEven = y and 1 == 0 + + var color = tile.color + + if (tile.state.equalsOneOf( + RoomState.UNDISCOVERED, + RoomState.UNOPENED, + ) && + !legitRender && + Dungeon.Info.startTime != 0L + ) { + if (AwesomeMap.config.mapDarkenUndiscovered) { + color = color.darken(1 - AwesomeMap.config.mapDarkenPercent) + } + if (AwesomeMap.config.mapGrayUndiscovered) { + color = color.grayScale() + } + } + + when { + xEven && yEven -> + if (tile is Room) { + RenderUtils.renderRect( + xOffset, + yOffset, + roomSize, + roomSize, + color, + ) + + if (legitRender && tile.state == RoomState.UNOPENED) { + RenderUtils.drawCheckmark(xOffset.toFloat(), yOffset.toFloat(), tile.state) + } + } + + !xEven && !yEven -> { + RenderUtils.renderRect( + xOffset, + yOffset, + (roomSize + connectorSize), + (roomSize + connectorSize), + color, + ) + } + + else -> + drawRoomConnector( + xOffset, + yOffset, + connectorSize, + tile is Door, + !xEven, + color, + ) + } + } + } + GlStateManager.popMatrix() + } + + private fun renderText() { + GlStateManager.pushMatrix() + GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) + + Dungeon.Info.uniqueRooms.forEach { unique -> + val room = unique.mainRoom + if (legitRender && room.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED)) return@forEach + val checkPos = unique.getCheckmarkPosition() + val namePos = unique.getNamePosition() + val xOffsetCheck = (checkPos.first / 2f) * (roomSize + connectorSize) + val yOffsetCheck = (checkPos.second / 2f) * (roomSize + connectorSize) + val xOffsetName = (namePos.first / 2f) * (roomSize + connectorSize) + val yOffsetName = (namePos.second / 2f) * (roomSize + connectorSize) + + if (AwesomeMap.config.mapCheckmark != 0 && AwesomeMap.config.mapRoomSecrets != 2) { + RenderUtils.drawCheckmark(xOffsetCheck, yOffsetCheck, room.state) + } + + val color = + ( + if (AwesomeMap.config.mapColorText) { + when (room.state) { + RoomState.GREEN -> AwesomeMap.config.colorTextGreen + RoomState.CLEARED -> AwesomeMap.config.colorTextCleared + RoomState.FAILED -> AwesomeMap.config.colorTextFailed + else -> AwesomeMap.config.colorTextUncleared + } + } else { + AwesomeMap.config.colorTextCleared + } + ).rgb + + if (AwesomeMap.config.mapRoomSecrets == 2) { + GlStateManager.pushMatrix() + GlStateManager.translate( + xOffsetCheck + halfRoomSize, + yOffsetCheck + 2 + halfRoomSize, + 0f, + ) + GlStateManager.scale(2f, 2f, 1f) + RenderUtils.renderCenteredText(listOf(room.data.secrets.toString()), 0, 0, color) + GlStateManager.popMatrix() + } + + val name = mutableListOf() + + if (AwesomeMap.config.mapRoomNames != 0 && + room.data.type.equalsOneOf( + RoomType.PUZZLE, + RoomType.TRAP, + ) || + AwesomeMap.config.mapRoomNames == 2 && + room.data.type.equalsOneOf( + RoomType.NORMAL, + RoomType.RARE, + RoomType.CHAMPION, + ) + ) { + name.addAll(room.data.name.split(" ")) + } + if (room.data.type == RoomType.NORMAL && AwesomeMap.config.mapRoomSecrets == 1) { + name.add(room.data.secrets.toString()) + } + // Offset + half of roomsize + RenderUtils.renderCenteredText( + name, + xOffsetName.toInt() + halfRoomSize, + yOffsetName.toInt() + halfRoomSize, + color, + ) + } + GlStateManager.popMatrix() + } + + fun renderPlayerHeads() { + try { + if (Dungeon.dungeonTeammates.isEmpty()) { + RenderUtils.drawPlayerHead( + MC.thePlayer.name, + DungeonPlayer(MC.thePlayer.locationSkin).apply { + yaw = MC.thePlayer.rotationYaw + }, + ) + } else { + Dungeon.dungeonTeammates.forEach { (name, teammate) -> + if (!teammate.dead) { + RenderUtils.drawPlayerHead(name, teammate) + } + } + } + } catch (_: ConcurrentModificationException) { + } + } + + private fun drawRoomConnector( + x: Int, + y: Int, + doorWidth: Int, + doorway: Boolean, + vertical: Boolean, + color: Color, + ) { + val doorwayOffset = if (roomSize == 16) 5 else 6 + val width = if (doorway) 6 else roomSize + var x1 = if (vertical) x + roomSize else x + var y1 = if (vertical) y else y + roomSize + if (doorway) { + if (vertical) y1 += doorwayOffset else x1 += doorwayOffset + } + RenderUtils.renderRect( + x1, + y1, + if (vertical) doorWidth else width, + if (vertical) width else doorWidth, + color, + ) + } + + fun renderRunInformation() { + GlStateManager.pushMatrix() + GlStateManager.translate(64f, 128f, 0f) + GlStateManager.scale(2.0 / 3.0, 2.0 / 3.0, 1.0) + val lines = ScoreElement.runInformationLines() + + val lineOne = lines.takeWhile { it != "split" }.joinToString(separator = " ") + val lineTwo = lines.takeLastWhile { it != "split" }.joinToString(separator = " ") + + MC.fontRendererObj.drawString(lineOne, -MC.fontRendererObj.getStringWidth(lineOne) / 2f, 0f, 0xffffff, true) + MC.fontRendererObj.drawString(lineTwo, -MC.fontRendererObj.getStringWidth(lineTwo) / 2f, 9f, 0xffffff, true) + + GlStateManager.popMatrix() + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt new file mode 100644 index 0000000..a355553 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt @@ -0,0 +1,246 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.minecraft.client.renderer.GlStateManager +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender.dynamicRotation +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender.legitRender +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inBoss +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.connectorSize +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.halfRoomSize +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.roomSize +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.darken +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.grayScale +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtilsGL +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.util.MC +import org.lwjgl.opengl.GL11 + +object MapRenderList { + var renderUpdated = false + private var borderGlList = -1 + private var roomGlList = -1 + + fun updateRenderMap() { + if (borderGlList == -1) { + borderGlList = GL11.glGenLists(1) + GL11.glNewList(borderGlList, GL11.GL_COMPILE) + RenderUtilsGL.renderRect( + 0.0, + 0.0, + 128.0, + if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, + AwesomeMap.config.mapBackground.toJavaColor(), + ) + RenderUtilsGL.renderRectBorder( + 0.0, + 0.0, + 128.0, + if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, + AwesomeMap.config.mapBorderWidth.toDouble(), + AwesomeMap.config.mapBorder.toJavaColor(), + ) + GL11.glEndList() + } + + if (renderUpdated && AwesomeMap.config.renderBeta) { + if (roomGlList >= 0) { + GL11.glDeleteLists(roomGlList, 1) + roomGlList = -1 + } + roomGlList = GL11.glGenLists(1) + renderUpdated = false + + GL11.glNewList(roomGlList, GL11.GL_COMPILE) + renderRooms() + renderText() + GL11.glEndList() + } + } + + fun renderMap() { + if (roomGlList == -1 || borderGlList == -1 || renderUpdated) { + updateRenderMap() + } + + GlStateManager.pushMatrix() + RenderUtils.preDraw() + RenderUtilsGL.preDraw() + + MC.mcProfiler.startSection("border") + + if (borderGlList != -1) GL11.glCallList(borderGlList) + + MC.mcProfiler.endSection() + + if (AwesomeMap.config.mapRotate) { + GlStateManager.pushMatrix() + MapRender.setupRotate() + } else if (AwesomeMap.config.mapDynamicRotate) { + GlStateManager.translate(64.0, 64.0, 0.0) + GlStateManager.rotate(dynamicRotation, 0f, 0f, 1f) + GlStateManager.translate(-64.0, -64.0, 0.0) + } + + MC.mcProfiler.startSection("rooms") + + if (roomGlList != -1) GL11.glCallList(roomGlList) + + RenderUtilsGL.unbindTexture() + RenderUtils.postDraw() + RenderUtilsGL.postDraw() + GlStateManager.popMatrix() + + if (!inBoss) { + MC.mcProfiler.endStartSection("heads") + MapRender.renderPlayerHeads() + } + + MC.mcProfiler.endSection() + + if (AwesomeMap.config.mapRotate) { + GL11.glDisable(GL11.GL_SCISSOR_TEST) + GlStateManager.popMatrix() + } else if (AwesomeMap.config.mapDynamicRotate) { + GlStateManager.translate(64.0, 64.0, 0.0) + GlStateManager.rotate(-dynamicRotation, 0f, 0f, 1f) + GlStateManager.translate(-64.0, -64.0, 0.0) + } + + if (AwesomeMap.config.mapShowRunInformation) { + MC.mcProfiler.startSection("footer") + MapRender.renderRunInformation() + MC.mcProfiler.endSection() + } + } + + private fun renderRooms() { + GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) + + var yPos = 0 + var yStep = 0 + + for (y in 0..10) { + val yEven = y % 2 == 0 + yPos += yStep + yStep = if (yEven) roomSize else connectorSize + var xPos = 0 + var xStep = 0 + for (x in 0..10) { + val xEven = x % 2 == 0 + xPos += xStep + xStep = if (xEven) roomSize else connectorSize + + val tile = Dungeon.Info.dungeonList[y * 11 + x] + if (tile is Unknown) continue + if (legitRender && tile.state == RoomState.UNDISCOVERED) continue + + var color = tile.color + + if (tile.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED) && + !legitRender && + Dungeon.Info.startTime != 0L + ) { + if (AwesomeMap.config.mapDarkenUndiscovered) { + color = color.darken(1 - AwesomeMap.config.mapDarkenPercent) + } + if (AwesomeMap.config.mapGrayUndiscovered) { + color = color.grayScale() + } + } + + when (tile) { + is Room -> { + RenderUtilsGL.renderRect(xPos, yPos, xStep, yStep, color) + if (legitRender && tile.state == RoomState.UNOPENED) { + RenderUtilsGL.drawCheckmark(xPos.toFloat(), yPos.toFloat(), tile.state) + } + } + + is Door -> { + val doorOffset = if (roomSize == 16) 5 else 6 + if (xEven) { + RenderUtilsGL.renderRect(xPos + doorOffset, yPos, xStep - doorOffset * 2, yStep, color) + } else { + RenderUtilsGL.renderRect(xPos, yPos + doorOffset, xStep, yStep - doorOffset * 2, color) + } + } + } + } + } + GlStateManager.translate(-MapUtils.startCorner.first.toFloat(), -MapUtils.startCorner.second.toFloat(), 0f) + } + + private fun renderText() { + GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) + + Dungeon.Info.uniqueRooms.forEach { unique -> + val room = unique.mainRoom + if (legitRender && room.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED)) return@forEach + val checkPos = unique.getCheckmarkPosition() + val namePos = unique.getNamePosition() + val xPosCheck = (checkPos.first / 2f) * (roomSize + connectorSize) + val yPosCheck = (checkPos.second / 2f) * (roomSize + connectorSize) + val xPosName = (namePos.first / 2f) * (roomSize + connectorSize) + val yPosName = (namePos.second / 2f) * (roomSize + connectorSize) + + if (AwesomeMap.config.mapCheckmark != 0 && AwesomeMap.config.mapRoomSecrets != 2) { + RenderUtilsGL.drawCheckmark(xPosCheck, yPosCheck, room.state) + } + + val color = + if (AwesomeMap.config.mapColorText) { + when (room.state) { + RoomState.GREEN -> AwesomeMap.config.colorTextGreen + RoomState.CLEARED -> AwesomeMap.config.colorTextCleared + RoomState.FAILED -> AwesomeMap.config.colorTextFailed + else -> AwesomeMap.config.colorTextUncleared + } + } else { + AwesomeMap.config.colorTextCleared + } + + if (AwesomeMap.config.mapRoomSecrets == 2) { + GlStateManager.pushMatrix() + GlStateManager.translate( + xPosCheck + halfRoomSize, + yPosCheck + 2 + halfRoomSize, + 0f, + ) + GlStateManager.scale(2f, 2f, 1f) + RenderUtilsGL.renderCenteredText(listOf(room.data.secrets.toString()), 0, 0, color.toJavaColor()) + GlStateManager.popMatrix() + } + + val name = mutableListOf() + + if (AwesomeMap.config.mapRoomNames != 0 && + room.data.type.equalsOneOf( + RoomType.PUZZLE, + RoomType.TRAP, + ) || + AwesomeMap.config.mapRoomNames == 2 && + room.data.type.equalsOneOf( + RoomType.NORMAL, + RoomType.RARE, + RoomType.CHAMPION, + ) + ) { + name.addAll(room.data.name.split(" ")) + } + if (room.data.type == RoomType.NORMAL && AwesomeMap.config.mapRoomSecrets == 1) { + name.add(room.data.secrets.toString()) + } + // Offset + half of roomsize + RenderUtilsGL.renderCenteredText( + name, + xPosName.toInt() + halfRoomSize, + yPosName.toInt() + halfRoomSize, + color.toJavaColor(), + ) + } + GlStateManager.translate(-MapUtils.startCorner.first.toFloat(), -MapUtils.startCorner.second.toFloat(), 0f) + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapUpdate.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapUpdate.kt new file mode 100644 index 0000000..275a590 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapUpdate.kt @@ -0,0 +1,241 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.minecraft.client.network.NetworkPlayerInfo +import net.minecraft.init.Blocks +import net.minecraft.util.BlockPos +import net.minecraft.util.StringUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.mapX +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.mapZ +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.yaw +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.TabList +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.util.MC +import kotlin.math.roundToInt + +object MapUpdate { + var roomAdded = false + + fun preloadHeads() { + val tabEntries = TabList.getDungeonTabList() ?: return + for (i in listOf(5, 9, 13, 17, 1)) { + // Accessing the skin locations to load in skin + tabEntries[i].first.locationSkin + } + } + + fun getPlayers() { + val tabEntries = TabList.getDungeonTabList() ?: return + Dungeon.dungeonTeammates.clear() + var iconNum = 0 + for (i in listOf(5, 9, 13, 17, 1)) { + with(tabEntries[i]) { + val name = + StringUtils + .stripControlCodes(second) + .trim() + .substringAfterLast("] ") + .split(" ")[0] + if (name != "") { + Dungeon.dungeonTeammates[name] = + DungeonPlayer(first.locationSkin).apply { + MC.theWorld.getPlayerEntityByName(name)?.let { setData(it) } + colorPrefix = second.substringBefore(name, "f").last() + this.name = name + icon = "icon-$iconNum" + } + iconNum++ + } + } + } + } + + fun updatePlayers(tabEntries: List>) { + if (Dungeon.dungeonTeammates.isEmpty()) return + // Update map icons + val time = System.currentTimeMillis() - Dungeon.Info.startTime + var iconNum = 0 + for (i in listOf(5, 9, 13, 17, 1)) { + val tabText = StringUtils.stripControlCodes(tabEntries[i].second).trim() + val name = tabText.substringAfterLast("] ").split(" ")[0] + if (name == "") continue + Dungeon.dungeonTeammates[name]?.run { + dead = tabText.contains("(DEAD)") + if (dead) { + icon = "" + } else { + icon = "icon-$iconNum" + iconNum++ + } + if (!playerLoaded) { + MC.theWorld.getPlayerEntityByName(name)?.let { setData(it) } + } + + val room = getCurrentRoom() + if (room != "Error" || time > 1000) { + if (lastRoom == "") { + lastRoom = room + } else if (lastRoom != room) { + roomVisits.add(Pair(time - lastTime, lastRoom)) + lastTime = time + lastRoom = room + } + } + } + } + + val decor = MapUtils.mapData?.mapDecorations ?: return + Dungeon.dungeonTeammates.forEach { (name, player) -> + decor.entries.find { (icon, _) -> icon == player.icon }?.let { (_, vec4b) -> + player.isPlayer = vec4b.func_176110_a().toInt() == 1 + player.mapX = vec4b.mapX + player.mapZ = vec4b.mapZ + player.yaw = vec4b.yaw + } + if (player.isPlayer || name == MC.thePlayer.name) { + player.yaw = MC.thePlayer.rotationYaw + player.mapX = + ((MC.thePlayer.posX - DungeonScan.START_X + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.first).roundToInt() + player.mapZ = + ((MC.thePlayer.posZ - DungeonScan.START_Z + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.second).roundToInt() + } + } + } + + fun updateRooms() { + if (Dungeon.Info.ended) return + val map = DungeonMap(MapUtils.mapData?.colors ?: return) + Dungeon.espDoors.clear() + + for (x in 0..10) { + for (z in 0..10) { + val room = Dungeon.Info.dungeonList[z * 11 + x] + val mapTile = map.getTile(x, z) + + if (room is Unknown) { + MapRenderList.renderUpdated = true + roomAdded = true + Dungeon.Info.dungeonList[z * 11 + x] = mapTile + continue + } + + if (mapTile.state.ordinal < room.state.ordinal) { + MapRenderList.renderUpdated = true + PlayerTracker.roomStateChange(room, room.state, mapTile.state) + if (room is Room && room.data.type == RoomType.BLOOD && mapTile.state == RoomState.GREEN) { + RunInformation.bloodDone = true + } + room.state = mapTile.state + } + + if (mapTile is Room && room is Room) { + if (room.data.type != mapTile.data.type && mapTile.data.type != RoomType.NORMAL) { + MapRenderList.renderUpdated = true + room.data.type = mapTile.data.type + } + } + + if (mapTile is Door && room is Door) { + if (mapTile.type == DoorType.WITHER && room.type != DoorType.WITHER) { + MapRenderList.renderUpdated = true + room.type = mapTile.type + } + } + + if (room is Door && room.type.equalsOneOf(DoorType.ENTRANCE, DoorType.WITHER, DoorType.BLOOD)) { + if (mapTile is Door && mapTile.type == DoorType.WITHER) { + if (room.opened) { + MapRenderList.renderUpdated = true + room.opened = false + } + } else if (!room.opened && + MC.theWorld + .getChunkFromChunkCoords( + room.x shr 4, + room.z shr 4, + ).isLoaded && + MC.theWorld.getBlockState(BlockPos(room.x, 69, room.z)).block == Blocks.air + ) { + MapRenderList.renderUpdated = true + room.opened = true + } + + if (!room.opened) { + Dungeon.espDoors.add(room) + } + } + } + } + + if (roomAdded) { + updateUniques() + } + } + + fun updateUniques() { + val visited = BooleanArray(121) + for (x in 0..10) { + for (z in 0..10) { + val index = z * 11 + x + if (visited[index]) continue + visited[index] = true + + val room = Dungeon.Info.dungeonList[index] + if (room !is Room) continue + + val connected = getConnectedIndices(x, z) + var unique = room.uniqueRoom + if (unique == null || unique.name.startsWith("Unknown")) { + unique = connected + .firstOrNull { + (Dungeon.Info.dungeonList[it.second * 11 + it.first] as? Room)?.uniqueRoom?.name?.startsWith("Unknown") == false + }?.let { + (Dungeon.Info.dungeonList[it.second * 11 + it.first] as? Room)?.uniqueRoom + } ?: unique + } + + val finalUnique = unique ?: UniqueRoom(x, z, room) + + finalUnique.addTiles(connected) + + connected.forEach { + visited[it.second * 11 + it.first] = true + } + } + } + roomAdded = false + } + + private fun getConnectedIndices( + arrayX: Int, + arrayY: Int, + ): List> { + val tile = Dungeon.Info.dungeonList[arrayY * 11 + arrayX] + if (tile !is Room) return emptyList() + val directions = + listOf( + Pair(0, 1), + Pair(1, 0), + Pair(0, -1), + Pair(-1, 0), + ) + val connected = mutableListOf>() + val queue = mutableListOf(Pair(arrayX, arrayY)) + while (queue.isNotEmpty()) { + val current = queue.removeFirst() + if (connected.contains(current)) continue + connected.add(current) + directions.forEach { + val x = current.first + it.first + val y = current.second + it.second + if (x !in 0..10 || y !in 0..10) return@forEach + if (Dungeon.Info.dungeonList[y * 11 + x] is Room) { + queue.add(Pair(x, y)) + } + } + } + return connected + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MimicDetector.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MimicDetector.kt new file mode 100644 index 0000000..c3d4f33 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MimicDetector.kt @@ -0,0 +1,78 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.minecraft.block.state.IBlockState +import net.minecraft.entity.Entity +import net.minecraft.entity.monster.EntityZombie +import net.minecraft.init.Blocks +import net.minecraft.tileentity.TileEntityChest +import net.minecraft.util.BlockPos +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.ScanUtils.getRoomFromPos +import net.skymoe.enchaddons.util.MC + +object MimicDetector { + var mimicOpenTime = 0L + var mimicPos: BlockPos? = null + + fun onBlockChange( + pos: BlockPos, + old: IBlockState, + new: IBlockState, + ) { + if (old.block == Blocks.trapped_chest && new.block == Blocks.air) { + mimicOpenTime = System.currentTimeMillis() + mimicPos = pos + } + } + + fun checkMimicDead() { + if (RunInformation.mimicKilled) return + if (mimicOpenTime == 0L) return + if (System.currentTimeMillis() - mimicOpenTime < 750) return + if (MC.thePlayer.getDistanceSq(mimicPos) < 400) { + if (MC.theWorld.loadedEntityList.none { + it is EntityZombie && + it.isChild && + it + .getCurrentArmor(3) + ?.getSubCompound("SkullOwner", false) + ?.getString("Id") == "bcb486a4-0cb5-35db-93f0-039fbdde03f0" + } + ) { + setMimicKilled() + } + } + } + + fun setMimicKilled() { + RunInformation.mimicKilled = true + // TODO MIMIC KILLED +// if (AwesomeMap.config.mimicMessageEnabled) UChat.say("/pc ${Config.mimicMessage}") + } + + fun isMimic(entity: Entity): Boolean { + if (entity is EntityZombie && entity.isChild) { + for (i in 0..3) { + if (entity.getCurrentArmor(i) != null) return false + } + return true + } + return false + } + + fun findMimic(): String? { + MC.theWorld.loadedTileEntityList + .filter { it is TileEntityChest && it.chestType == 1 } + .groupingBy { getRoomFromPos(it.pos)?.data?.name } + .eachCount() + .forEach { (room, trappedChests) -> + Dungeon.Info.uniqueRooms + .find { it.name == room && it.mainRoom.data.trappedChests < trappedChests } + ?.let { + it.hasMimic = true + MapRenderList.renderUpdated = true + return it.name + } + } + return null + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/PlayerTracker.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/PlayerTracker.kt new file mode 100644 index 0000000..9ad2385 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/PlayerTracker.kt @@ -0,0 +1,157 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.launch +import net.minecraft.event.HoverEvent +import net.minecraft.util.ChatComponentText +import net.minecraft.util.ChatStyle +import net.minecraft.util.IChatComponent +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer +import net.skymoe.enchaddons.impl.feature.awesomemap.core.RoomData +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.Room +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomType +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.Tile +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.APIUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.util.LogLevel +import net.skymoe.enchaddons.util.MC +import kotlin.time.Duration.Companion.milliseconds + +object PlayerTracker { + val roomClears: MutableMap> = mutableMapOf() + + fun roomStateChange( + room: Tile, + state: RoomState, + newState: RoomState, + ) { + if (room !is Room) return + if (newState.equalsOneOf(RoomState.CLEARED, RoomState.GREEN) && state != RoomState.CLEARED) { + val currentRooms = + Dungeon.dungeonTeammates.map { Pair(it.value.formattedName, it.value.getCurrentRoom()) } + roomClears[room.data] = + currentRooms.filter { it.first != "" && it.second == room.data.name }.map { it.first }.toSet() + } + } + + fun onDungeonEnd() { + val time = System.currentTimeMillis() - Dungeon.Info.startTime + Dungeon.dungeonTeammates.forEach { + it.value.roomVisits.add(Pair(time - it.value.lastTime, it.value.lastRoom)) + } + + AwesomeMap.scope.launch { + Dungeon.dungeonTeammates + .map { (_, player) -> + async(Dispatchers.IO) { + Triple( + player.formattedName, + player, + APIUtils.getSecrets(player.uuid), + ) + } + }.map { + val (name, player, secrets) = it.await() + getStatMessage(name, player, secrets) + }.forEach { + MC.thePlayer.addChatMessage(it) + } + } + } + + fun getStatMessage( + name: String, + player: DungeonPlayer, + secrets: Int, + ): IChatComponent { + val secretsComponent = ChatComponentText("§b${secrets - player.startingSecrets} §3secrets") + + val allClearedRooms = roomClears.filter { it.value.contains(name) } + val soloClearedRooms = allClearedRooms.filter { it.value.size == 1 } + val max = allClearedRooms.size + val min = soloClearedRooms.size + + val roomComponent = + ChatComponentText( + "§b${if (soloClearedRooms.size != allClearedRooms.size) "$min-$max" else max} §3rooms cleared", + ).apply { + chatStyle = + ChatStyle().setChatHoverEvent( + HoverEvent( + HoverEvent.Action.SHOW_TEXT, + ChatComponentText( + roomClears.entries + .filter { + !it.key.type.equalsOneOf(RoomType.BLOOD, RoomType.ENTRANCE, RoomType.FAIRY) && + it.value.contains(name) + }.joinToString( + separator = "\n", + prefix = "$name's §eRooms Cleared:\n", + ) { (room, players) -> + if (players.size == 1) { + "§6${room.name}" + } else { + "§6${room.name} §7with ${ + players.filter { it != name }.joinToString(separator = "§r, ") + }" + } + }, + ), + ), + ) + } + + var lastTime = 0L + + val splitsComponent = + ChatComponentText("§3Splits").apply { + chatStyle = + ChatStyle().setChatHoverEvent( + HoverEvent( + HoverEvent.Action.SHOW_TEXT, + ChatComponentText( + player.roomVisits.joinToString( + separator = "\n", + prefix = "$name's §eRoom Splits:\n", + ) { (elapsed, room) -> + val start = lastTime.milliseconds + lastTime += elapsed + val end = lastTime.milliseconds + "§b$start §7- §b$end §6$room" + }, + ), + ), + ) + } + + val roomTimeComponent = + ChatComponentText("§3Times").apply { + chatStyle = + ChatStyle().setChatHoverEvent( + HoverEvent( + HoverEvent.Action.SHOW_TEXT, + ChatComponentText( + player.roomVisits.groupBy { it.second }.entries.joinToString( + separator = "\n", + prefix = "$name's §eRoom Times:\n", + ) { (room, times) -> + "§6$room §a- §b${times.sumOf { it.first }.milliseconds}" + }, + ), + ), + ) + } + + return LogLevel.INFO.component + .appendSibling(secretsComponent) + .appendText(" §6| ") + .appendSibling(roomComponent) + .appendText(" §6| ") + .appendSibling(splitsComponent) + .appendText(" §6| ") + .appendSibling(roomTimeComponent) + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/RunInformation.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/RunInformation.kt new file mode 100644 index 0000000..f4723c8 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/RunInformation.kt @@ -0,0 +1,218 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.minecraft.client.network.NetworkPlayerInfo +import net.minecraft.entity.monster.EntityZombie +import net.minecraft.network.play.server.S38PacketPlayerListItem +import net.skymoe.enchaddons.event.minecraft.ChatEvent +import net.skymoe.enchaddons.event.minecraft.LivingEntityEvent +import net.skymoe.enchaddons.event.minecraft.TabListEvent +import net.skymoe.enchaddons.event.minecraft.TeamEvent +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.Puzzle +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.Room +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MimicDetector.setMimicKilled +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.ScoreCalculation.getBonusScore +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.removeFormatting +import kotlin.math.ceil + +/** + * Many parts of this code are modified from [Skytils](https://github.com/Skytils/SkytilsMod/blob/1.x/src/main/kotlin/gg/skytils/skytilsmod/features/impl/dungeons/ScoreCalculation.kt). + */ +object RunInformation { + var deathCount = 0 + val completedPuzzles: Int + get() = Dungeon.Info.puzzles.count { it.value } + var totalPuzzles = 0 + var cryptsCount = 0 + var secretsFound = 0 + var secretPercentage = 0f + val secretTotal: Int + get() = (secretsFound / (secretPercentage + 0.0001f) + 0.5).toInt() + var minSecrets = 0 + var mimicKilled = false + private var completedRooms = 0 + val completedRoomsPercentage + get() = + (completedRooms + (if (!Location.inBoss) 1 else 0) + (if (!bloodDone) 1 else 0)) / + (if (totalRooms == 0) 36 else totalRooms).toFloat() + var bloodDone = false + private val totalRooms: Int + get() = (completedRooms / (clearedPercentage + 0.0001f) + 0.4).toInt() + private var clearedPercentage = 0f + var timeElapsed = 0 + + private val deathsRegex = Regex("§r§a§lTeam Deaths: §r§f(?\\d+)§r") + private val puzzleCountRegex = Regex("§r§b§lPuzzles: §r§f\\((?\\d)\\)§r") + private val failedPuzzleRegex = Regex("§r (?.+): §r§7\\[§r§c§l✖§r§7] §.+") + private val solvedPuzzleRegex = Regex("§r (?.+): §r§7\\[§r§a§l✔§r§7] §.+") + private val cryptsPattern = Regex("§r Crypts: §r§6(?\\d+)§r") + private val secretsFoundPattern = Regex("§r Secrets Found: §r§b(?\\d+)§r") + private val secretsFoundPercentagePattern = Regex("§r Secrets Found: §r§[ae](?[\\d.]+)%§r") + private val roomCompletedPattern = Regex("§r Completed Rooms: §r§d(?\\d+)§r") + private val dungeonClearedPattern = Regex("Cleared: (?\\d+)% \\(\\d+\\)") + private val timeElapsedPattern = Regex("Time Elapsed: (?:(?\\d+)h )?(?:(?\\d+)m )?(?:(?\\d+)s)?") + + fun reset() { + deathCount = 0 + totalPuzzles = 0 + cryptsCount = 0 + secretsFound = 0 + secretPercentage = 0f + mimicKilled = false + completedRooms = 0 + bloodDone = false + clearedPercentage = 0f + timeElapsed = 0 + + ScoreCalculation.message270 = false + ScoreCalculation.message300 = false + + MimicDetector.mimicPos = null + MimicDetector.mimicOpenTime = 0L + } + + fun onScoreboard(event: TeamEvent.Pre.Update) { + val maxSecrets = ceil(secretTotal * ScoreCalculation.getSecretPercent()) + + minSecrets = + ceil(maxSecrets * (40 - getBonusScore() + ScoreCalculation.getDeathDeduction()) / 40).toInt() + + val line = + event.packet.players + .joinToString( + " ", + prefix = event.packet.prefix, + postfix = event.packet.suffix, + ).removeFormatting() + + if (line.startsWith("Cleared: ")) { + val match = dungeonClearedPattern.matchEntire(line)?.groups ?: return + clearedPercentage = (match["percentage"]?.value?.toFloatOrNull()?.div(100f)) ?: clearedPercentage + } else if (line.startsWith("Time Elapsed:")) { + val match = timeElapsedPattern.matchEntire(line)?.groups ?: return + val hours = match["hrs"]?.value?.toIntOrNull() ?: 0 + val minutes = match["min"]?.value?.toIntOrNull() ?: 0 + val seconds = match["sec"]?.value?.toIntOrNull() ?: 0 + timeElapsed = hours * 3600 + minutes * 60 + seconds + } + } + + fun onChat(event: ChatEvent) { + if (mimicKilled) return + if (event.message.startsWith("Party > ") || (event.message.contains(":") && !event.message.contains(">"))) { + listOf("\$SKYTILS-DUNGEON-SCORE-MIMIC\$", "mimic dead", "mimic killed").forEach { + if (event.message.contains(it, true)) { + mimicKilled = true + return + } + } + + listOf("blaze done", "blaze puzzle finished").forEach { + if (event.message.contains(it, true)) { + val puzzle = + Dungeon.Info.puzzles.keys + .find { puzzle -> puzzle.tabName == "Higher Or Lower" } ?: return + Dungeon.Info.puzzles[puzzle] = true + val room = + Dungeon.Info.dungeonList.firstOrNull { tile -> + tile is Room && tile.data.name.equalsOneOf("Lower Blaze", "Higher Blaze") + } ?: return + PlayerTracker.roomStateChange(room, room.state, RoomState.CLEARED) + room.state = RoomState.CLEARED + } + } + } + } + + fun onEntityDeath(event: LivingEntityEvent) { + if (event.entity !is EntityZombie || mimicKilled) return + if (MimicDetector.isMimic(event.entity)) { + setMimicKilled() + } + } + + fun onTabList(event: TabListEvent.Pre) { + if (event.packet.action !in + arrayOf( + S38PacketPlayerListItem.Action.UPDATE_DISPLAY_NAME, + S38PacketPlayerListItem.Action.ADD_PLAYER, + ) + ) { + return + } + event.packet.entries.forEach { + val text = it?.displayName?.formattedText ?: it?.profile?.name ?: return@forEach + updateFromTabList(text) + } + } + + private fun updateFromTabList(text: String) { + when { + text.contains("Team Deaths:") -> { + deathCount = deathsRegex.firstResult(text)?.toIntOrNull() ?: deathCount + } + + text.contains("✔") -> { + val puzzleName = solvedPuzzleRegex.firstResult(text) ?: return + if (puzzleName == "???") return + val puzzle = + Dungeon.Info.puzzles.keys + .find { it.tabName == puzzleName } + if (puzzle == null) { + if (Dungeon.Info.puzzles.size < totalPuzzles) { + Puzzle.fromName(puzzleName)?.let { Dungeon.Info.puzzles.putIfAbsent(it, true) } + } + } else { + Dungeon.Info.puzzles[puzzle] = true + } + } + + text.contains("✖") -> { + val puzzleName = failedPuzzleRegex.firstResult(text) ?: return + if (puzzleName == "???") return + val puzzle = + Dungeon.Info.puzzles.keys + .find { it.tabName == puzzleName } + if (puzzle == null) { + if (Dungeon.Info.puzzles.size < totalPuzzles) { + Puzzle.fromName(puzzleName)?.let { Dungeon.Info.puzzles.putIfAbsent(it, false) } + } + } else { + Dungeon.Info.puzzles[puzzle] = false + } + } + + text.contains("Crypts:") -> { + cryptsCount = cryptsPattern.firstResult(text)?.toIntOrNull() ?: cryptsCount + } + + text.contains("Secrets Found:") -> { + if (text.contains("%")) { + secretPercentage = + secretsFoundPercentagePattern.firstResult(text)?.toFloatOrNull()?.div(100f) ?: secretPercentage + } else { + secretsFound = secretsFoundPattern.firstResult(text)?.toIntOrNull() ?: secretsFound + } + } + + text.contains("Completed Rooms") -> { + completedRooms = roomCompletedPattern.firstResult(text)?.toIntOrNull() ?: completedRooms + } + } + } + + fun updatePuzzleCount(tabList: List>) { + if (totalPuzzles != 0) return + val puzzleCount = tabList.find { it.second.contains("Puzzles:") }?.second ?: return + totalPuzzles = puzzleCountRegex.firstResult(puzzleCount)?.toIntOrNull() ?: totalPuzzles + } + + private fun Regex.firstResult(input: CharSequence): String? = + this + .matchEntire(input) + ?.groups + ?.get(1) + ?.value +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScanUtils.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScanUtils.kt new file mode 100644 index 0000000..33d3bdd --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScanUtils.kt @@ -0,0 +1,81 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import com.google.gson.Gson +import com.google.gson.JsonIOException +import com.google.gson.JsonSyntaxException +import com.google.gson.reflect.TypeToken +import net.minecraft.block.Block +import net.minecraft.util.BlockPos +import net.skymoe.enchaddons.impl.MOD_ID +import net.skymoe.enchaddons.impl.feature.awesomemap.core.RoomData +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.Room +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.util.MC +import kotlin.math.roundToInt + +object ScanUtils { + val roomList: Set = + try { + Gson().fromJson( + javaClass.getResource("/assets/$MOD_ID/awesomemap/rooms.json")!!.readBytes().toString(Charsets.UTF_8), + object : TypeToken>() {}.type, + ) + } catch (e: JsonSyntaxException) { + println("Error parsing FunnyMap room data.") + setOf() + } catch (e: JsonIOException) { + println("Error reading FunnyMap room data.") + setOf() + } + + fun getRoomData( + x: Int, + z: Int, + ): RoomData? = getRoomData(getCore(x, z)) + + fun getRoomData(hash: Int): RoomData? = roomList.find { hash in it.cores } + + fun getRoomCentre( + posX: Int, + posZ: Int, + ): Pair { + val roomX = ((posX - DungeonScan.START_X) / 32f).roundToInt() + val roomZ = ((posZ - DungeonScan.START_Z) / 32f).roundToInt() + return Pair(roomX * 32 + DungeonScan.START_X, roomZ * 32 + DungeonScan.START_Z) + } + + fun getRoomFromPos(pos: BlockPos): Room? { + val x = ((pos.x - DungeonScan.START_X + 15) shr 5) + val z = ((pos.z - DungeonScan.START_Z + 15) shr 5) + val room = Dungeon.Info.dungeonList.getOrNull(x * 2 + z * 22) + return if (room is Room) room else null + } + + fun getCore( + x: Int, + z: Int, + ): Int { + val sb = StringBuilder(150) + val chunk = MC.theWorld.getChunkFromChunkCoords(x shr 4, z shr 4) + val height = chunk.getHeightValue(x and 15, z and 15).coerceIn(11..140) + sb.append(CharArray(140 - height) { '0' }) + var bedrock = 0 + for (y in height downTo 12) { + val id = Block.getIdFromBlock(chunk.getBlock(BlockPos(x, y, z))) + if (id == 0 && bedrock >= 2 && y < 69) { + sb.append(CharArray(y - 11) { '0' }) + break + } + + if (id == 7) { + bedrock++ + } else { + bedrock = 0 + if (id.equalsOneOf(5, 54, 146)) continue + } + + sb.append(id) + } + return sb.toString().hashCode() + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt new file mode 100644 index 0000000..0e9e0dd --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt @@ -0,0 +1,144 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.completedRoomsPercentage +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.mimicKilled +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.secretPercentage +import net.skymoe.enchaddons.impl.feature.awesomemap.ui.GuiRenderer +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.APIUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location +import net.skymoe.enchaddons.util.LogLevel +import net.skymoe.enchaddons.util.MC +import net.skymoe.enchaddons.util.modMessage +import kotlin.math.roundToInt +import kotlin.time.DurationUnit +import kotlin.time.toDuration + +object ScoreCalculation { + val paul = APIUtils.hasBonusPaulScore() + get() = field || AwesomeMap.config.paulBonus + var score = 0 + var message300 = false + var message270 = false + + fun updateScore() { + score = getSkillScore() + getExplorationScore() + getSpeedScore(RunInformation.timeElapsed) + getBonusScore() + if (score >= 300 && !message300) { + message300 = true + message270 = true + if (AwesomeMap.config.scoreMessage != 0) { + // TODO 300 MESSAGE +// UChat.say("/pc ${AwesomeMap.config.message300}") + } + if (AwesomeMap.config.scoreTitle != 0) { + MC.thePlayer.playSound("random.orb", 1f, 0.5.toFloat()) + GuiRenderer.displayTitle(AwesomeMap.config.message300, 40) + } + if (AwesomeMap.config.timeTo300) { + modMessage("§3300 Score§7: §a${RunInformation.timeElapsed.toDuration(DurationUnit.SECONDS)}", LogLevel.INFO) + } + } else if (score >= 270 && !message270) { + message270 = true + if (AwesomeMap.config.scoreMessage == 2) { +// UChat.say("/pc ${AwesomeMap.config.message270}") + } + if (AwesomeMap.config.scoreTitle == 2) { + MC.thePlayer.playSound("random.orb", 1f, 0.5.toFloat()) + GuiRenderer.displayTitle(AwesomeMap.config.message270, 40) + } + } + } + + fun getSkillScore(): Int { + val puzzleDeduction = (RunInformation.totalPuzzles - RunInformation.completedPuzzles) * 10 + val roomPercent = completedRoomsPercentage.coerceAtMost(1f) + return 20 + ((80 * roomPercent).toInt() - puzzleDeduction - getDeathDeduction()).coerceAtLeast(0) + } + + fun getDeathDeduction(): Int { + var deathDeduction = RunInformation.deathCount * 2 + if (AwesomeMap.config.scoreAssumeSpirit) deathDeduction -= 1 + return deathDeduction.coerceAtLeast(0) + } + + fun getExplorationScore(): Int { + val secretPercent = (secretPercentage / getSecretPercent()).coerceAtMost(1f) + val roomPercent = completedRoomsPercentage.coerceAtMost(1f) + return (60 * roomPercent + 40 * secretPercent).toInt() + } + + fun getSpeedScore(timeElapsed: Int): Int { + var score = 100 + val limit = getTimeLimit() + if (timeElapsed < limit) return score + val percentageOver = (timeElapsed - limit) * 100f / limit + score -= getSpeedDeduction(percentageOver).toInt() + return if (Location.dungeonFloor == 0) (score * 0.7).roundToInt() else score + } + + fun getBonusScore(): Int { + var score = 0 + score += RunInformation.cryptsCount.coerceAtMost(5) + if (mimicKilled) score += 2 + if (paul) score += 10 + return score + } + + fun getSecretPercent(): Float { + if (Location.masterMode) return 1f + return when (Location.dungeonFloor) { + 0 -> .3f + 1 -> .3f + 2 -> .4f + 3 -> .5f + 4 -> .6f + 5 -> .7f + 6 -> .85f + else -> 1f + } + } + + private fun getTimeLimit(): Int = + if (Location.masterMode) { + when (Location.dungeonFloor) { + 1, 2, 3, 4, 5 -> 480 + 6 -> 600 + else -> 840 + } + } else { + when (Location.dungeonFloor) { + 0 -> 1320 + 1, 2, 3, 5 -> 600 + 4, 6 -> 720 + else -> 840 + } + } + + /** + * This is a very ugly function, but it works. + * The formula on the wiki doesn't seem to work, this variation should never be more than 2 points off. + */ + private fun getSpeedDeduction(percentage: Float): Float { + var percentageOver = percentage + var deduction = 0f + + deduction += (percentageOver.coerceAtMost(20f) / 2f) + percentageOver -= 20f + if (percentageOver <= 0) return deduction + + deduction += (percentageOver.coerceAtMost(20f) / 3.5f) + percentageOver -= 20f + if (percentageOver <= 0) return deduction + + deduction += (percentageOver.coerceAtMost(10f) / 4f) + percentageOver -= 10f + if (percentageOver <= 0) return deduction + + deduction += (percentageOver.coerceAtMost(10f) / 5f) + percentageOver -= 10f + if (percentageOver <= 0) return deduction + + deduction += (percentageOver / 6f) + return deduction + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt new file mode 100644 index 0000000..243296b --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt @@ -0,0 +1,41 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon + +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.util.AxisAlignedBB +import net.skymoe.enchaddons.event.minecraft.RenderEvent +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inBoss +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.getInterpolatedPosition +import net.skymoe.enchaddons.util.MC + +object WitherDoorESP { + fun onRender(event: RenderEvent.World.Last) { + if (inBoss || AwesomeMap.config.witherDoorESP == 0) return + + MC.mcProfiler.startSection("funnymap-3d") + + val (x, y, z) = MC.renderViewEntity.getInterpolatedPosition(event.partialTicks) + GlStateManager.translate(-x, -y, -z) + Dungeon.espDoors.forEach { door -> + if (AwesomeMap.config.witherDoorESP == 1 && door.state == RoomState.UNDISCOVERED) return@forEach + val aabb = AxisAlignedBB(door.x - 1.0, 69.0, door.z - 1.0, door.x + 2.0, 73.0, door.z + 2.0) + RenderUtils.drawBox( + aabb, + if (Dungeon.Info.keys > 0) { + AwesomeMap.config.witherDoorKeyColor.toJavaColor() + } else { + AwesomeMap.config.witherDoorNoKeyColor.toJavaColor() + }, + AwesomeMap.config.witherDoorOutlineWidth, + AwesomeMap.config.witherDoorOutline, + AwesomeMap.config.witherDoorFill, + true, + ) + } + GlStateManager.translate(x, y, z) + + MC.mcProfiler.endSection() + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/CornerButton.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/CornerButton.kt new file mode 100644 index 0000000..fb08b61 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/CornerButton.kt @@ -0,0 +1,26 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.ui + +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils +import java.awt.Color + +class CornerButton( + var x: Double, + var y: Double, + val corner: Corner, +) { + fun isHovered( + mouseX: Int, + mouseY: Int, + ) = mouseX.toDouble() in x..x + 6.0 && mouseY.toDouble() in y..y + 6.0 + + fun draw() { + RenderUtils.renderRect(x, y, 6.0, 6.0, Color(255, 255, 255)) + } + + enum class Corner { + TOP_LEFT, + TOP_RIGHT, + BOTTOM_LEFT, + BOTTOM_RIGHT, + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/EditLocationGui.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/EditLocationGui.kt new file mode 100644 index 0000000..c779efd --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/EditLocationGui.kt @@ -0,0 +1,104 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.ui + +import net.minecraft.client.gui.GuiScreen +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.ui.GuiRenderer.elements +import org.lwjgl.input.Keyboard +import org.lwjgl.input.Mouse + +class EditLocationGui : GuiScreen() { + private var hovered: MovableGuiElement? = null + private var startOffsetX = 0 + private var startOffsetY = 0 + private var isDragging = false + private var resizingCorner: CornerButton? = null + + override fun initGui() { + Keyboard.enableRepeatEvents(true) + super.initGui() + } + + override fun drawScreen( + mouseX: Int, + mouseY: Int, + partialTicks: Float, + ) { + this.drawDefaultBackground() + elements.forEach { + it.draw(mouseX, mouseY) + } + if (!isDragging && resizingCorner == null) { + hovered = elements.find { it.isHovered(mouseX, mouseY) } + } + mouseDrag(mouseX, mouseY) + super.drawScreen(mouseX, mouseY, partialTicks) + } + + fun mouseDrag( + mouseX: Int, + mouseY: Int, + ) { + if (hovered == null) return + if (isDragging) { + hovered?.setLocation((mouseX - startOffsetX), (mouseY - startOffsetY)) + } else { + resizingCorner?.corner?.let { + hovered?.cornerDrag(mouseX, mouseY, it) + } + } + } + + override fun mouseClicked( + mouseX: Int, + mouseY: Int, + mouseButton: Int, + ) { + if (mouseButton == 0) { + resizingCorner = null + elements + .firstOrNull { guiElement -> + resizingCorner = guiElement.corners.find { it.isHovered(mouseX, mouseY) } + resizingCorner != null + }?.let { hovered = it } + + if (resizingCorner == null) { + hovered?.let { + startOffsetX = (mouseX - it.x) + startOffsetY = (mouseY - it.y) + isDragging = true + } + } + } + super.mouseClicked(mouseX, mouseY, mouseButton) + } + + override fun mouseReleased( + mouseX: Int, + mouseY: Int, + state: Int, + ) { + isDragging = false + resizingCorner = null + super.mouseReleased(mouseX, mouseY, state) + } + + override fun handleMouseInput() { + val i = Mouse.getEventDWheel().coerceIn(-1..1) + hovered?.mouseScroll(i) + super.handleMouseInput() + } + + override fun keyTyped( + typedChar: Char, + keyCode: Int, + ) { + hovered?.keyTyped(keyCode) + super.keyTyped(typedChar, keyCode) + } + + override fun onGuiClosed() { + Keyboard.enableRepeatEvents(false) + AwesomeMap.config.save() + super.onGuiClosed() + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt new file mode 100644 index 0000000..d391d56 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt @@ -0,0 +1,65 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.ui + +import net.minecraft.client.gui.ScaledResolution +import net.minecraft.client.renderer.GlStateManager +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils +import net.skymoe.enchaddons.impl.nanovg.GUIEvent +import net.skymoe.enchaddons.util.MC + +object GuiRenderer { + val elements = + mutableListOf( + MapElement(), + ScoreElement(), + ) + private var displayTitle = "" + private var titleTicks = 0 + + fun displayTitle( + title: String, + ticks: Int, + ) { + displayTitle = title + titleTicks = ticks + } + + fun clearTitle() { + displayTitle = "" + titleTicks = 0 + } + + fun onOverlay(event: GUIEvent.HUD) { + if (MC.currentScreen is EditLocationGui) return + + MC.mcProfiler.startSection("awesomemap-2d") + + MC.entityRenderer.setupOverlayRendering() + + elements.forEach { + if (!it.shouldRender()) return@forEach + GlStateManager.pushMatrix() + GlStateManager.translate(it.x.toFloat(), it.y.toFloat(), 0f) + GlStateManager.scale(it.scale, it.scale, 1f) + it.render() + GlStateManager.popMatrix() + } + + if (titleTicks > 0) { + val sr = ScaledResolution(MC) + RenderUtils.drawText( + text = displayTitle, + x = sr.scaledWidth / 2f, + y = sr.scaledHeight / 4f, + scale = 4.0, + color = 0xFF5555, + center = true, + ) + } + + MC.mcProfiler.endSection() + } + + fun onTick() { + if (titleTicks > 0) titleTicks-- + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MapElement.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MapElement.kt new file mode 100644 index 0000000..464dd69 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MapElement.kt @@ -0,0 +1,32 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.ui + +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRenderList +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location + +class MapElement : MovableGuiElement() { + override var x: Int by AwesomeMap.config::mapX + override var y: Int by AwesomeMap.config::mapY + override val h: Int + get() = if (AwesomeMap.config.mapShowRunInformation) 142 else 128 + override val w: Int + get() = 128 + override var scale: Float by AwesomeMap.config::mapScale + override var x2: Int = (x + w * scale).toInt() + override var y2: Int = (y + h * scale).toInt() + + override fun render() { + if (AwesomeMap.config.renderBeta) { + MapRenderList.renderMap() + } else { + MapRender.renderMap() + } + } + + override fun shouldRender(): Boolean { + if (!AwesomeMap.config.mapEnabled) return false + if (AwesomeMap.config.mapHideInBoss && Location.inBoss) return false + return super.shouldRender() + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MovableGuiElement.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MovableGuiElement.kt new file mode 100644 index 0000000..20bb89c --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MovableGuiElement.kt @@ -0,0 +1,151 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.ui + +import net.minecraft.client.gui.GuiScreen +import net.minecraft.client.renderer.GlStateManager +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils +import net.skymoe.enchaddons.util.MC +import org.lwjgl.input.Keyboard +import java.awt.Color +import kotlin.math.max +import kotlin.math.min + +abstract class MovableGuiElement { + val corners = + arrayOf( + CornerButton(0.0, 0.0, CornerButton.Corner.TOP_LEFT), + CornerButton(0.0, 0.0, CornerButton.Corner.TOP_RIGHT), + CornerButton(0.0, 0.0, CornerButton.Corner.BOTTOM_LEFT), + CornerButton(0.0, 0.0, CornerButton.Corner.BOTTOM_RIGHT), + ) + abstract var x: Int + abstract var y: Int + abstract var x2: Int + abstract var y2: Int + abstract val w: Int + abstract val h: Int + open var scale: Float = 1f + + open fun draw( + mouseX: Int, + mouseY: Int, + ) { + GlStateManager.pushMatrix() + GlStateManager.translate(x.toFloat(), y.toFloat(), 0f) + GlStateManager.scale(scale, scale, 1f) + render() + GlStateManager.popMatrix() + + RenderUtils.renderRectBorder( + x.toDouble(), + y.toDouble(), + w * scale.toDouble(), + h * scale.toDouble(), + 0.5, + Color(255, 255, 255), + ) + updateCorners() + corners.forEach { it.draw() } + } + + open fun render() {} + + open fun shouldRender(): Boolean = true + + fun isHovered( + mouseX: Int, + mouseY: Int, + ) = mouseX in x..x2 && mouseY in y..y2 + + private fun updateCorners() { + corners[0].x = x - 3.0 + corners[0].y = y - 3.0 + corners[1].x = x2 - 3.0 + corners[1].y = y - 3.0 + corners[2].x = x - 3.0 + corners[2].y = y2 - 3.0 + corners[3].x = x2 - 3.0 + corners[3].y = y2 - 3.0 + } + + fun setLocation( + x: Int, + y: Int, + ) { + this.x = x.coerceIn(0, ((MC.displayWidth - w * scale).toInt())) + this.y = y.coerceIn(0, (MC.displayHeight - h * scale).toInt()) + x2 = (x + w * scale).toInt() + y2 = (y + h * scale).toInt() + } + + fun mouseScroll(direction: Int) { + if (direction != 0) { + var increment = direction * 0.01f + if (!GuiScreen.isShiftKeyDown()) increment *= 5 + scale = (scale + increment).coerceAtLeast(0.1f) + x2 = (x + w * scale).toInt() + y2 = (y + h * scale).toInt() + } + } + + fun cornerDrag( + mouseX: Int, + mouseY: Int, + corner: CornerButton.Corner, + ) { + val maxScaleLeft = x2 / w.toFloat() + val maxScaleTop = y2 / h.toFloat() + val maxScaleRight = (MC.displayWidth - x) / w.toFloat() + val maxScaleBottom = (MC.displayHeight - y) / h.toFloat() + when (corner) { + CornerButton.Corner.TOP_LEFT -> { + var s = + max((x2 - mouseX) / w.toFloat(), (y2 - mouseY) / h.toFloat()) + .coerceIn(0.1f..min(maxScaleTop, maxScaleLeft)) + s = (s * 100).toInt() / 100f + x = (x2 - w * s).toInt() + y = (y2 - h * s).toInt() + scale = s + } + + CornerButton.Corner.TOP_RIGHT -> { + var s = + max((mouseX - x) / w.toFloat(), (y2 - mouseY) / h.toFloat()) + .coerceIn(0.1f..min(maxScaleTop, maxScaleRight)) + s = (s * 100).toInt() / 100f + x2 = (x + w * s).toInt() + y = (y2 - h * s).toInt() + scale = s + } + + CornerButton.Corner.BOTTOM_LEFT -> { + var s = + max((x2 - mouseX) / w.toFloat(), (mouseY - y) / h.toFloat()) + .coerceIn(0.1f..min(maxScaleBottom, maxScaleLeft)) + s = (s * 100).toInt() / 100f + x = (x2 - w * s).toInt() + y2 = (y + h * s).toInt() + scale = s + } + + CornerButton.Corner.BOTTOM_RIGHT -> { + var s = + max((mouseX - x) / w.toFloat(), (mouseY - y) / h.toFloat()) + .coerceIn(0.1f..min(maxScaleBottom, maxScaleRight)) + s = (s * 100).toInt() / 100f + x2 = (x + w * s).toInt() + y2 = (y + h * s).toInt() + scale = s + } + } + } + + fun keyTyped(keyCode: Int) { + val increment = if (GuiScreen.isShiftKeyDown()) 5 else 1 + when (keyCode) { + Keyboard.KEY_LEFT -> setLocation(x - increment, y) + Keyboard.KEY_RIGHT -> setLocation(x + increment, y) + Keyboard.KEY_UP -> setLocation(x, y - increment) + Keyboard.KEY_DOWN -> setLocation(x, y + increment) + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/ScoreElement.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/ScoreElement.kt new file mode 100644 index 0000000..6ac8910 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/ScoreElement.kt @@ -0,0 +1,175 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.ui + +import net.minecraft.client.gui.FontRenderer +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.ScoreCalculation +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location +import net.skymoe.enchaddons.util.MC + +class ScoreElement : MovableGuiElement() { + override var x: Int by AwesomeMap.config::scoreX + override var y: Int by AwesomeMap.config::scoreY + override val h: Int + get() = fr.FONT_HEIGHT * elementLines + override val w: Int = fr.getStringWidth("Score: 100/100/100/7 : (300)") + override var scale: Float by AwesomeMap.config::scoreScale + override var x2: Int = (x + w * scale).toInt() + override var y2: Int = (y + h * scale).toInt() + + private var elementLines = 1 + set(value) { + if (field != value) { + field = value + y2 = (y + h * scale).toInt() + } + } + + override fun render() { + var y = 0f + val lines = getScoreLines() + elementLines = lines.size + lines.forEach { + fr.drawString(it, 0f, y, 0xffffff, true) + y += fr.FONT_HEIGHT + } + } + + override fun shouldRender(): Boolean { + if (!AwesomeMap.config.scoreElementEnabled) return false + if (AwesomeMap.config.scoreHideInBoss && Location.inBoss) return false + return super.shouldRender() + } + + companion object { + val fr: FontRenderer = MC.fontRendererObj + + fun getScoreLines(): List { + val list: MutableList = mutableListOf() + + when (AwesomeMap.config.scoreTotalScore) { + 1 -> list.add(getScore(AwesomeMap.config.scoreMinimizedName, false)) + 2 -> list.add(getScore(AwesomeMap.config.scoreMinimizedName, true)) + } + + when (AwesomeMap.config.scoreSecrets) { + 1 -> list.add(getSecrets(AwesomeMap.config.scoreMinimizedName, false)) + 2 -> list.add(getSecrets(AwesomeMap.config.scoreMinimizedName, true)) + } + + if (AwesomeMap.config.scoreCrypts) { + list.add(getCrypts(AwesomeMap.config.scoreMinimizedName)) + } + + if (AwesomeMap.config.scoreMimic) { + list.add(getMimic(AwesomeMap.config.scoreMinimizedName)) + } + + if (AwesomeMap.config.scoreDeaths) { + list.add(getDeaths(AwesomeMap.config.scoreMinimizedName)) + } + + when (AwesomeMap.config.scorePuzzles) { + 1 -> list.add(getPuzzles(AwesomeMap.config.scoreMinimizedName, false)) + 2 -> list.add(getPuzzles(AwesomeMap.config.scoreMinimizedName, true)) + } + + return list + } + + fun runInformationLines(): List { + val list: MutableList = mutableListOf() + + if (AwesomeMap.config.runInformationScore) { + list.add(getScore(minimized = false, expanded = false)) + } + + when (AwesomeMap.config.runInformationSecrets) { + 1 -> list.add(getSecrets(minimized = false, missing = false)) + 2 -> list.add(getSecrets(minimized = false, missing = true)) + } + + list.add("split") + + if (AwesomeMap.config.runInformationCrypts) { + list.add(getCrypts()) + } + + if (AwesomeMap.config.runInformationMimic) { + list.add(getMimic()) + } + + if (AwesomeMap.config.runInformationDeaths) { + list.add(getDeaths()) + } + + return list + } + + private fun getScore( + minimized: Boolean = false, + expanded: Boolean, + ): String { + val scoreColor = + when { + ScoreCalculation.score < 270 -> "§c" + ScoreCalculation.score < 300 -> "§e" + else -> "§a" + } + var line = if (minimized) "" else "§7Score: " + if (expanded) { + line += "§b${ScoreCalculation.getSkillScore()}§7/" + + "§a${ScoreCalculation.getExplorationScore()}§7/" + + "§3${ScoreCalculation.getSpeedScore(RunInformation.timeElapsed)}§7/" + + "§d${ScoreCalculation.getBonusScore()} §7: " + } + line += "$scoreColor${ScoreCalculation.score}" + + return line + } + + private fun getSecrets( + minimized: Boolean = false, + missing: Boolean, + ): String { + var line = if (minimized) "" else "§7Secrets: " + line += "§b${RunInformation.secretsFound}§7/" + if (missing) { + val missingSecrets = (RunInformation.minSecrets - RunInformation.secretsFound).coerceAtLeast(0) + line += "§e$missingSecrets§7/" + } + line += "§c${RunInformation.secretTotal}" + + return line + } + + private fun getCrypts(minimized: Boolean = false): String { + var line = if (minimized) "§7C: " else "§7Crypts: " + line += if (RunInformation.cryptsCount >= 5) "§a${RunInformation.cryptsCount}" else "§c${RunInformation.cryptsCount}" + return line + } + + private fun getMimic(minimized: Boolean = false): String { + var line = if (minimized) "§7M: " else "§7Mimic: " + line += if (RunInformation.mimicKilled) "§a✔" else "§c✘" + return line + } + + private fun getDeaths(minimized: Boolean = false): String { + var line = if (minimized) "§7D: " else "§7Deaths: " + line += "§c${RunInformation.deathCount}" + return line + } + + private fun getPuzzles( + minimized: Boolean = false, + total: Boolean, + ): String { + val color = if (RunInformation.completedPuzzles == RunInformation.totalPuzzles) "§a" else "§c" + var line = if (minimized) "§7P: " else "§7Puzzles: " + line += "$color${RunInformation.completedPuzzles}" + if (total) line += "§7/$color${RunInformation.totalPuzzles}" + return line + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/APIUtils.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/APIUtils.kt new file mode 100644 index 0000000..91a425e --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/APIUtils.kt @@ -0,0 +1,48 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import com.google.gson.JsonParser +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import org.apache.http.client.methods.HttpGet +import org.apache.http.impl.client.HttpClients +import org.apache.http.util.EntityUtils + +object APIUtils { + fun fetch(uri: String): String? { + HttpClients.createMinimal().use { + try { + val httpGet = HttpGet(uri) + return EntityUtils.toString(it.execute(httpGet).entity) + } catch (e: Exception) { + return null + } + } + } + + fun getSecrets(uuid: String): Int { + val response = fetch("https://api.hypixel.net/player?key=${AwesomeMap.config.apiKey}&uuid=$uuid") ?: return 0 + val jsonObject = JsonParser().parse(response).toJsonObject() ?: return 0 + if (jsonObject.getJsonPrimitive("success")?.asBoolean == true) { + return jsonObject + .getJsonObject("player") + ?.getJsonObject("achievements") + ?.getJsonPrimitive("skyblock_treasure_hunter") + ?.asInt ?: return 0 + } + return 0 + } + + fun hasBonusPaulScore(): Boolean { + val response = fetch("https://api.hypixel.net/resources/skyblock/election") ?: return false + val jsonObject = JsonParser().parse(response).toJsonObject() ?: return false + if (jsonObject.getJsonPrimitive("success")?.asBoolean == true) { + val mayor = jsonObject.getJsonObject("mayor") ?: return false + val name = mayor.getJsonPrimitive("name")?.asString + if (name == "Paul") { + return mayor.getJsonArray("perks")?.any { + it.toJsonObject()?.getJsonPrimitive("name")?.asString == "EZPZ" + } ?: false + } + } + return false + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/CheckmarkSet.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/CheckmarkSet.kt new file mode 100644 index 0000000..273ecd0 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/CheckmarkSet.kt @@ -0,0 +1,32 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraft.client.renderer.texture.SimpleTexture +import net.minecraft.util.ResourceLocation +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender +import net.skymoe.enchaddons.util.MC + +class CheckmarkSet( + val size: Int, + location: String, +) { + private val crossResource = ResourceLocation("funnymap", "$location/cross.png") + private val greenResource = ResourceLocation("funnymap", "$location/green_check.png") + private val questionResource = ResourceLocation("funnymap", "$location/question.png") + private val whiteResource = ResourceLocation("funnymap", "$location/white_check.png") + + init { + listOf(crossResource, greenResource, questionResource, whiteResource).forEach { + MC.textureManager.loadTexture(it, SimpleTexture(it)) + } + } + + fun getCheckmark(state: RoomState): ResourceLocation? = + when (state) { + RoomState.CLEARED -> whiteResource + RoomState.GREEN -> greenResource + RoomState.FAILED -> crossResource + RoomState.UNOPENED -> if (MapRender.legitRender) questionResource else null + else -> null + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/JsonUtils.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/JsonUtils.kt new file mode 100644 index 0000000..75159fe --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/JsonUtils.kt @@ -0,0 +1,18 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import com.google.gson.JsonArray +import com.google.gson.JsonElement +import com.google.gson.JsonObject +import com.google.gson.JsonPrimitive + +fun JsonElement.toJsonArray(): JsonArray? = this as? JsonArray + +fun JsonElement.toJsonObject(): JsonObject? = this as? JsonObject + +fun JsonElement.toJsonPrimitive(): JsonPrimitive? = this as? JsonPrimitive + +fun JsonObject.getJsonArray(member: String): JsonArray? = this.get(member)?.toJsonArray() + +fun JsonObject.getJsonObject(member: String): JsonObject? = this.get(member)?.toJsonObject() + +fun JsonObject.getJsonPrimitive(member: String): JsonPrimitive? = this.get(member)?.toJsonPrimitive() diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/KotlinAdapter.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/KotlinAdapter.kt new file mode 100644 index 0000000..fb18e53 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/KotlinAdapter.kt @@ -0,0 +1,33 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraftforge.fml.common.FMLModContainer +import net.minecraftforge.fml.common.ILanguageAdapter +import net.minecraftforge.fml.common.ModContainer +import net.minecraftforge.fml.relauncher.Side +import java.lang.reflect.Field +import java.lang.reflect.Method + +class KotlinAdapter : ILanguageAdapter { + override fun supportsStatics(): Boolean = false + + override fun getNewInstance( + container: FMLModContainer?, + objectClass: Class<*>, + classLoader: ClassLoader?, + factoryMarkedAnnotation: Method?, + ): Any = objectClass.kotlin.objectInstance ?: objectClass.getDeclaredConstructor().newInstance() + + override fun setProxy( + target: Field, + proxyTarget: Class<*>, + proxy: Any?, + ) { + target.set(proxyTarget.kotlin.objectInstance, proxy) + } + + override fun setInternalProxies( + mod: ModContainer?, + side: Side?, + loader: ClassLoader?, + ) {} +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Location.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Location.kt new file mode 100644 index 0000000..0e9d0a3 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Location.kt @@ -0,0 +1,108 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.skymoe.enchaddons.event.minecraft.ChatEvent +import net.skymoe.enchaddons.event.minecraft.MinecraftEvent +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.util.MC + +object Location { + private var onHypixel = false + var inSkyblock = false + var island = Island.Unknown + val inDungeons + get() = island == Island.Dungeon + var dungeonFloor = -1 + var masterMode = false + var inBoss = false + + private var islandRegex = Regex("^§r§b§l(?:Area|Dungeon): §r§7(.+)§r\$") + + private val entryMessages = + listOf( + "[BOSS] Bonzo: Gratz for making it this far, but I'm basically unbeatable.", + "[BOSS] Scarf: This is where the journey ends for you, Adventurers.", + "[BOSS] The Professor: I was burdened with terrible news recently...", + "[BOSS] Thorn: Welcome Adventurers! I am Thorn, the Spirit! And host of the Vegan Trials!", + "[BOSS] Livid: Welcome, you've arrived right on time. I am Livid, the Master of Shadows.", + "[BOSS] Sadan: So you made it all the way here... Now you wish to defy me? Sadan?!", + ) + + private var tickCount = 0 + + fun onTick() { + if (MC.theWorld == null) return + tickCount++ + if (tickCount % 20 != 0) return + if (AwesomeMap.config.forceSkyblock) { + inSkyblock = true + island = Island.Dungeon + dungeonFloor = 7 + return + } + + inSkyblock = onHypixel && + MC.theWorld.scoreboard + ?.getObjectiveInDisplaySlot(1) + ?.name == "SBScoreboard" + + if (island == Island.Unknown) { + TabList + .getTabList() + .firstNotNullOfOrNull { islandRegex.find(it.second) } + ?.groupValues + ?.getOrNull(1) + ?.let { areaName -> + Island.entries.find { it.displayName == areaName }?.let { island = it } + } + } + + if (island == Island.Dungeon && dungeonFloor == -1) { + Scoreboard + .getLines() + .find { + Scoreboard.cleanLine(it).run { + contains("The Catacombs (") && !contains("Queue") + } + }?.let { + val line = it.substringBefore(")") + dungeonFloor = line.lastOrNull()?.digitToIntOrNull() ?: 0 + masterMode = line[line.length - 2] == 'M' + } + } + } + + fun onChat(event: ChatEvent) { + if (event.message.startsWith("[BOSS] Maxor: ")) inBoss = true + if (entryMessages.any { it == event.message }) inBoss = true + } + + fun onWorldUnload(event: MinecraftEvent.World.Unload) { + island = Island.Unknown + dungeonFloor = -1 + inBoss = false + } + + enum class Island( + val displayName: String, + ) { + PrivateIsland("Private Island"), + Garden("Garden"), + SpiderDen("Spider's Den"), + CrimsonIsle("Crimson Isle"), + TheEnd("The End"), + GoldMine("Gold Mine"), + DeepCaverns("Deep Caverns"), + DwarvenMines("Dwarven Mines"), + GlaciteMineshaft("Mineshaft"), + CrystalHollows("Crystal Hollows"), + FarmingIsland("The Farming Islands"), + ThePark("The Park"), + Dungeon("Catacombs"), + DungeonHub("Dungeon Hub"), + Hub("Hub"), + DarkAuction("Dark Auction"), + JerryWorkshop("Jerry's Workshop"), + Kuudra("Kuudra"), + Unknown("(Unknown)"), + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/MapUtils.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/MapUtils.kt new file mode 100644 index 0000000..23646c4 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/MapUtils.kt @@ -0,0 +1,97 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraft.item.ItemMap +import net.minecraft.item.ItemStack +import net.minecraft.network.play.server.S34PacketMaps +import net.minecraft.util.Vec4b +import net.minecraft.world.storage.MapData +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.DungeonScan +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inDungeons +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.util.MC + +object MapUtils { + val Vec4b.mapX + get() = (this.func_176112_b() + 128) shr 1 + + val Vec4b.mapZ + get() = (this.func_176113_c() + 128) shr 1 + + val Vec4b.yaw + get() = this.func_176111_d() * 22.5f + + var mapData: MapData? = null + var startCorner = Pair(5, 5) + var coordMultiplier = 0.625 + var roomSize = 16 + var halfRoomSize = roomSize / 2 + val connectorSize = 4 + var calibrated = false + var mapDataUpdated = false + + private fun getMapItem(): ItemStack? { + val map = MC.thePlayer?.inventory?.getStackInSlot(8) ?: return null + if (map.item !is ItemMap || !map.displayName.contains("Magical Map")) return null + return map + } + + fun updateMapData(packet: S34PacketMaps) { + if (!inDungeons) return + Utils.runMinecraftThread { + val map = getMapItem() + if (map != null) { + mapData = (map.item as ItemMap).getMapData(map, MC.theWorld) + } + if (mapData == null) { + mapData = MapData("map_${packet.mapId}") + } + packet.setMapdataTo(mapData) + mapDataUpdated = true + } + } + + /** + * Calibrates map metrics based on the size and location of the entrance room. + */ + fun calibrateMap(): Boolean { + val (start, size) = findEntranceCorner() + if (size.equalsOneOf(16, 18)) { + roomSize = size + halfRoomSize = roomSize / 2 + startCorner = + when (Location.dungeonFloor) { + 0 -> Pair(22, 22) + 1 -> Pair(22, 11) + 2, 3 -> Pair(11, 11) + else -> { + val startX = start and 127 + val startZ = start shr 7 + Pair(startX % (roomSize + 4), startZ % (roomSize + 4)) + } + } + coordMultiplier = (roomSize + connectorSize).toDouble() / DungeonScan.ROOM_SIZE + return true + } + return false + } + + /** + * Finds the starting index of the entrance room as well as the size of the room. + */ + private fun findEntranceCorner(): Pair { + var start = 0 + var currLength = 0 + mapData?.colors?.forEachIndexed { index, byte -> + if (byte.toInt() == 30) { + if (currLength == 0) start = index + currLength++ + } else { + if (currLength >= 16) { + return Pair(start, currLength) + } + currLength = 0 + } + } + return Pair(start, currLength) + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils.kt new file mode 100644 index 0000000..7578fba --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils.kt @@ -0,0 +1,427 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraft.client.gui.Gui +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.vertex.DefaultVertexFormats +import net.minecraft.entity.Entity +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.ResourceLocation +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.DungeonScan +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.itemID +import net.skymoe.enchaddons.util.MC +import net.skymoe.enchaddons.util.withAlpha +import org.lwjgl.opengl.GL11 +import org.lwjgl.opengl.GL11.GL_LINE_STRIP +import org.lwjgl.opengl.GL11.GL_QUADS +import java.awt.Color +import kotlin.math.roundToInt + +object RenderUtils { + private val tessellator: Tessellator = Tessellator.getInstance() + private val worldRenderer: WorldRenderer = tessellator.worldRenderer + val neuCheckmarks = CheckmarkSet(10, "neu") + val defaultCheckmarks = CheckmarkSet(16, "default") + val legacyCheckmarks = CheckmarkSet(8, "legacy") + private val mapIcons = ResourceLocation("funnymap", "marker.png") + + fun preDraw() { + GlStateManager.enableAlpha() + GlStateManager.enableBlend() + GlStateManager.disableDepth() + GlStateManager.disableLighting() + GlStateManager.disableTexture2D() + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) + } + + fun postDraw() { + GlStateManager.disableBlend() + GlStateManager.enableDepth() + GlStateManager.enableTexture2D() + } + + fun addQuadVertices( + x: Double, + y: Double, + w: Double, + h: Double, + ) { + worldRenderer.pos(x, y + h, 0.0).endVertex() + worldRenderer.pos(x + w, y + h, 0.0).endVertex() + worldRenderer.pos(x + w, y, 0.0).endVertex() + worldRenderer.pos(x, y, 0.0).endVertex() + } + + fun drawTexturedQuad( + x: Double, + y: Double, + width: Double, + height: Double, + ) { + worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION_TEX) + worldRenderer.pos(x, y + height, 0.0).tex(0.0, 1.0).endVertex() + worldRenderer.pos(x + width, y + height, 0.0).tex(1.0, 1.0).endVertex() + worldRenderer.pos(x + width, y, 0.0).tex(1.0, 0.0).endVertex() + worldRenderer.pos(x, y, 0.0).tex(0.0, 0.0).endVertex() + tessellator.draw() + } + + fun drawBox( + aabb: AxisAlignedBB, + color: Color, + width: Float, + outline: Float, + fill: Float, + ignoreDepth: Boolean, + ) { + GlStateManager.pushMatrix() + preDraw() + GlStateManager.depthMask(!ignoreDepth) + GL11.glLineWidth(width) + + drawOutlinedAABB(aabb, color) + + drawFilledAABB(aabb, color.withAlpha(fill)) + + GlStateManager.depthMask(true) + postDraw() + GlStateManager.popMatrix() + } + + fun renderRect( + x: Number, + y: Number, + w: Number, + h: Number, + color: Color, + ) { + if (color.alpha == 0) return + preDraw() + color.bind() + + worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) + addQuadVertices(x.toDouble(), y.toDouble(), w.toDouble(), h.toDouble()) + tessellator.draw() + + postDraw() + } + + fun renderRectBorder( + x: Double, + y: Double, + w: Double, + h: Double, + thickness: Double, + color: Color, + ) { + if (color.alpha == 0) return + preDraw() + color.bind() + + worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) + addQuadVertices(x - thickness, y, thickness, h) + addQuadVertices(x - thickness, y - thickness, w + thickness * 2, thickness) + addQuadVertices(x + w, y, thickness, h) + addQuadVertices(x - thickness, y + h, w + thickness * 2, thickness) + tessellator.draw() + + postDraw() + } + + fun renderCenteredText( + text: List, + x: Int, + y: Int, + color: Int, + ) { + if (text.isEmpty()) return + GlStateManager.pushMatrix() + GlStateManager.translate(x.toFloat(), y.toFloat(), 0f) + GlStateManager.scale(AwesomeMap.config.textScale, AwesomeMap.config.textScale, 1f) + + if (AwesomeMap.config.mapRotate) { + GlStateManager.rotate(MC.thePlayer.rotationYaw + 180f, 0f, 0f, 1f) + } else if (AwesomeMap.config.mapDynamicRotate) { + GlStateManager.rotate(-MapRender.dynamicRotation, 0f, 0f, 1f) + } + + val fontHeight = MC.fontRendererObj.FONT_HEIGHT + 1 + val yTextOffset = text.size * fontHeight / -2f + + text.withIndex().forEach { (index, text) -> + MC.fontRendererObj.drawString( + text, + MC.fontRendererObj.getStringWidth(text) / -2f, + yTextOffset + index * fontHeight, + color, + true, + ) + } + + if (AwesomeMap.config.mapDynamicRotate) { + GlStateManager.rotate(MapRender.dynamicRotation, 0f, 0f, 1f) + } + + GlStateManager.popMatrix() + } + + fun drawCheckmark( + x: Float, + y: Float, + state: RoomState, + ) { + val (checkmark, size) = + when (AwesomeMap.config.mapCheckmark) { + 1 -> defaultCheckmarks.getCheckmark(state) to defaultCheckmarks.size.toDouble() + 2 -> neuCheckmarks.getCheckmark(state) to neuCheckmarks.size.toDouble() + 3 -> legacyCheckmarks.getCheckmark(state) to legacyCheckmarks.size.toDouble() + else -> return + } + if (checkmark != null) { + GlStateManager.enableAlpha() + GlStateManager.color(1f, 1f, 1f, 1f) + MC.textureManager.bindTexture(checkmark) + + drawTexturedQuad( + x + (MapUtils.roomSize - size) / 2, + y + (MapUtils.roomSize - size) / 2, + size, + size, + ) + GlStateManager.disableAlpha() + } + } + + fun drawPlayerHead( + name: String, + player: DungeonPlayer, + ) { + GlStateManager.pushMatrix() + try { + // Translates to the player's location which is updated every tick. + if (player.isPlayer || name == MC.thePlayer.name) { + GlStateManager.translate( + (MC.thePlayer.posX - DungeonScan.START_X + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.first, + (MC.thePlayer.posZ - DungeonScan.START_Z + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.second, + 0.0, + ) + } else { + GlStateManager.translate(player.mapX.toFloat(), player.mapZ.toFloat(), 0f) + } + + // Apply head rotation and scaling + GlStateManager.rotate(player.yaw + 180f, 0f, 0f, 1f) + GlStateManager.scale(AwesomeMap.config.playerHeadScale, AwesomeMap.config.playerHeadScale, 1f) + GlStateManager.enableAlpha() + + if (AwesomeMap.config.mapVanillaMarker && (player.isPlayer || name == MC.thePlayer.name)) { + GlStateManager.rotate(180f, 0f, 0f, 1f) + GlStateManager.color(1f, 1f, 1f, 1f) + MC.textureManager.bindTexture(mapIcons) + worldRenderer.begin(7, DefaultVertexFormats.POSITION_TEX) + worldRenderer.pos(-6.0, 6.0, 0.0).tex(0.0, 0.0).endVertex() + worldRenderer.pos(6.0, 6.0, 0.0).tex(1.0, 0.0).endVertex() + worldRenderer.pos(6.0, -6.0, 0.0).tex(1.0, 1.0).endVertex() + worldRenderer.pos(-6.0, -6.0, 0.0).tex(0.0, 1.0).endVertex() + tessellator.draw() + GlStateManager.rotate(-180f, 0f, 0f, 1f) + } else { + // Render black border around the player head + renderRectBorder(-6.0, -6.0, 12.0, 12.0, 1.0, Color(0, 0, 0, 255)) + + preDraw() + GlStateManager.enableTexture2D() + GlStateManager.color(1f, 1f, 1f, 1f) + + MC.textureManager.bindTexture(player.skin) + + Gui.drawScaledCustomSizeModalRect(-6, -6, 8f, 8f, 8, 8, 12, 12, 64f, 64f) + if (player.renderHat) { + Gui.drawScaledCustomSizeModalRect(-6, -6, 40f, 8f, 8, 8, 12, 12, 64f, 64f) + } + + postDraw() + } + + // Handle player names + if (AwesomeMap.config.playerHeads == 2 || + AwesomeMap.config.playerHeads == 1 && + MC.thePlayer.heldItem?.itemID.equalsOneOf( + "SPIRIT_LEAP", + "INFINITE_SPIRIT_LEAP", + "HAUNT_ABILITY", + ) + ) { + if (!AwesomeMap.config.mapRotate) { + GlStateManager.rotate(-player.yaw + 180f, 0f, 0f, 1f) + } + GlStateManager.translate(0f, 10f, 0f) + GlStateManager.scale(AwesomeMap.config.playerNameScale, AwesomeMap.config.playerNameScale, 1f) + MC.fontRendererObj.drawString( + name, + -MC.fontRendererObj.getStringWidth(name) / 2f, + 0f, + 0xffffff, + true, + ) + } + } catch (e: Exception) { + e.printStackTrace() + } + GlStateManager.popMatrix() + } + + fun Color.bind() { + GlStateManager.color(this.red / 255f, this.green / 255f, this.blue / 255f, this.alpha / 255f) + } + + fun Color.grayScale(): Color { + val gray = (red * 0.299 + green * 0.587 + blue * 0.114).roundToInt() + return Color(gray, gray, gray, alpha) + } + + fun Color.darken(factor: Float): Color = + Color((red * factor).roundToInt(), (green * factor).roundToInt(), (blue * factor).roundToInt(), alpha) + + fun Entity.getInterpolatedPosition(partialTicks: Float): Triple = + Triple( + this.lastTickPosX + (this.posX - this.lastTickPosX) * partialTicks, + this.lastTickPosY + (this.posY - this.lastTickPosY) * partialTicks, + this.lastTickPosZ + (this.posZ - this.lastTickPosZ) * partialTicks, + ) + + fun drawText( + text: String, + x: Float, + y: Float, + scale: Double = 1.0, + color: Int = 0xFFFFFF, + shadow: Boolean = true, + center: Boolean = false, + ) { + GlStateManager.pushMatrix() + GlStateManager.enableBlend() + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) + GlStateManager.translate(x, y, 0f) + GlStateManager.scale(scale, scale, scale) + var yOffset = y - MC.fontRendererObj.FONT_HEIGHT + text.split("\n").forEach { + yOffset += MC.fontRendererObj.FONT_HEIGHT + val xOffset = + if (center) { + MC.fontRendererObj.getStringWidth(it) / -2f + } else { + 0f + } + MC.fontRendererObj.drawString( + it, + xOffset, + 0f, + color, + shadow, + ) + } + GlStateManager.disableBlend() + GlStateManager.popMatrix() + } + + fun drawFilledAABB( + aabb: AxisAlignedBB, + color: Color, + ) { + color.bind() + + worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + tessellator.draw() + } + + fun drawOutlinedAABB( + aabb: AxisAlignedBB, + color: Color, + ) { + color.bind() + + worldRenderer.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION) + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + + tessellator.draw() + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtilsGL.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtilsGL.kt new file mode 100644 index 0000000..d1cb647 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtilsGL.kt @@ -0,0 +1,157 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.texture.SimpleTexture +import net.minecraft.client.renderer.vertex.DefaultVertexFormats +import net.minecraft.util.ResourceLocation +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender +import net.skymoe.enchaddons.util.MC +import org.lwjgl.opengl.GL11 +import org.lwjgl.opengl.GL11.GL_QUADS +import java.awt.Color + +object RenderUtilsGL { + private val tessellator: Tessellator = Tessellator.getInstance() + private val worldRenderer: WorldRenderer = tessellator.worldRenderer + private var currentTexture = 0 + + fun preDraw() { + GL11.glEnable(GL11.GL_ALPHA_TEST) + GL11.glEnable(GL11.GL_BLEND) + GL11.glDisable(GL11.GL_DEPTH_TEST) + GL11.glDisable(GL11.GL_LIGHTING) + GL11.glDisable(GL11.GL_TEXTURE_2D) + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA) + } + + fun postDraw() { + GL11.glDisable(GL11.GL_BLEND) + GL11.glEnable(GL11.GL_DEPTH_TEST) + GL11.glEnable(GL11.GL_TEXTURE_2D) + } + + fun renderRect( + x: Number, + y: Number, + w: Number, + h: Number, + color: Color, + ) { + if (color.alpha == 0) return + preDraw() + color.bind() + + worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) + RenderUtils.addQuadVertices(x.toDouble(), y.toDouble(), w.toDouble(), h.toDouble()) + tessellator.draw() + + postDraw() + } + + fun renderRectBorder( + x: Double, + y: Double, + w: Double, + h: Double, + thickness: Double, + color: Color, + ) { + if (color.alpha == 0) return + preDraw() + color.bind() + + worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) + RenderUtils.addQuadVertices(x - thickness, y, thickness, h) + RenderUtils.addQuadVertices(x - thickness, y - thickness, w + thickness * 2, thickness) + RenderUtils.addQuadVertices(x + w, y, thickness, h) + RenderUtils.addQuadVertices(x - thickness, y + h, w + thickness * 2, thickness) + tessellator.draw() + + postDraw() + } + + fun renderCenteredText( + text: List, + x: Int, + y: Int, + color: Color, + ) { + if (text.isEmpty()) return + GlStateManager.pushMatrix() + GlStateManager.translate(x.toFloat(), y.toFloat(), 0f) + GlStateManager.scale(AwesomeMap.config.textScale, AwesomeMap.config.textScale, 1f) + + if (AwesomeMap.config.mapRotate) { + GlStateManager.rotate(MC.thePlayer.rotationYaw + 180f, 0f, 0f, 1f) + } else if (AwesomeMap.config.mapDynamicRotate) { + GlStateManager.rotate(-MapRender.dynamicRotation, 0f, 0f, 1f) + } + + val fontHeight = SimpleFontRenderer.FONT_HEIGHT + 1 + val yTextOffset = text.size * fontHeight / -2f + + text.withIndex().forEach { (index, text) -> + SimpleFontRenderer.drawString( + text, + SimpleFontRenderer.getStringWidth(text) / -2f, + yTextOffset + index * fontHeight, + color, + true, + ) + } + + GlStateManager.popMatrix() + } + + fun drawCheckmark( + x: Float, + y: Float, + state: RoomState, + ) { + val (checkmark, size) = + when (AwesomeMap.config.mapCheckmark) { + 1 -> RenderUtils.defaultCheckmarks.getCheckmark(state) to RenderUtils.defaultCheckmarks.size.toDouble() + 2 -> RenderUtils.neuCheckmarks.getCheckmark(state) to RenderUtils.neuCheckmarks.size.toDouble() + 3 -> RenderUtils.legacyCheckmarks.getCheckmark(state) to RenderUtils.legacyCheckmarks.size.toDouble() + else -> return + } + if (checkmark != null) { + GL11.glColor4f(1f, 1f, 1f, 1f) + GL11.glEnable(GL11.GL_ALPHA_TEST) + GL11.glEnable(GL11.GL_TEXTURE_2D) + checkmark.bind() + + RenderUtils.drawTexturedQuad( + x + (MapUtils.roomSize - size) / 2, + y + (MapUtils.roomSize - size) / 2, + size, + size, + ) + } + } + + private fun Color.bind() { + GL11.glColor4f(this.red / 255f, this.green / 255f, this.blue / 255f, this.alpha / 255f) + } + + fun ResourceLocation.bind() { + var tex = MC.textureManager.getTexture(this) + if (tex == null) { + tex = SimpleTexture(this) + MC.textureManager.loadTexture(this, tex) + } + if (tex.glTextureId != currentTexture) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, tex.glTextureId) + currentTexture = tex.glTextureId + } + } + + fun unbindTexture() { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0) + currentTexture = 0 + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Scoreboard.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Scoreboard.kt new file mode 100644 index 0000000..2b57e69 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Scoreboard.kt @@ -0,0 +1,18 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraft.scoreboard.ScorePlayerTeam +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.removeFormatting +import net.skymoe.enchaddons.util.MC + +object Scoreboard { + fun cleanLine(scoreboard: String): String = scoreboard.removeFormatting().filter { it.code in 32..126 } + + fun getLines(): List { + return MC.theWorld?.scoreboard?.run { + getSortedScores(getObjectiveInDisplaySlot(1) ?: return emptyList()) + .filter { it?.playerName?.startsWith("#") == false } + .let { if (it.size > 15) it.drop(15) else it } + .map { ScorePlayerTeam.formatPlayerName(getPlayersTeam(it.playerName), it.playerName) } + } ?: emptyList() + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/SimpleFontRenderer.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/SimpleFontRenderer.kt new file mode 100644 index 0000000..77d9b34 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/SimpleFontRenderer.kt @@ -0,0 +1,166 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraft.client.renderer.texture.SimpleTexture +import net.minecraft.client.renderer.texture.TextureUtil +import net.minecraft.client.resources.IResourceManager +import net.minecraft.client.resources.IResourceManagerReloadListener +import net.minecraft.util.ResourceLocation +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtilsGL.bind +import net.skymoe.enchaddons.util.MC +import org.lwjgl.opengl.GL11 +import java.awt.Color +import java.awt.image.BufferedImage +import java.io.IOException +import kotlin.math.max + +object SimpleFontRenderer : IResourceManagerReloadListener { + private val locationFontTexture = ResourceLocation("textures/font/ascii.png") + private var charWidth: IntArray = IntArray(256) + private var posX: Float = 0f + private var posY: Float = 0f + const val FONT_HEIGHT: Int = 9 + private const val VALID_CHARS = + "\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000" + + init { + readFontTexture() + } + + override fun onResourceManagerReload(resourceManager: IResourceManager) { + readFontTexture() + } + + private fun readFontTexture() { + val bufferedImage: BufferedImage = + try { + TextureUtil.readBufferedImage(MC.resourceManager.getResource(locationFontTexture).inputStream) + } catch (e: IOException) { + throw RuntimeException(e) + } + val w = bufferedImage.width + val h = bufferedImage.height + val arr = IntArray(w * h) + bufferedImage.getRGB(0, 0, w, h, arr, 0, w) + val charHeight = h / 16 + val charWidth = w / 16 + val scale = 8.0f / charWidth.toFloat() + charIndex@ for (charIndex in 0..255) { + if (charIndex == 32) { + SimpleFontRenderer.charWidth[charIndex] = 4 + } + val column = charIndex % 16 + val row = charIndex / 16 + for (scanX in charWidth - 1 downTo 0) { + val x = column * charWidth + scanX + var found = false + for (scanY in 0 until charHeight) { + val y = row * charHeight + scanY + if ((arr[x + y * w] shr 24 and 0xFF) != 0) { + found = true + break + } + } + if (found) { + SimpleFontRenderer.charWidth[charIndex] = (0.5 + (scanX + 1) * scale).toInt() + 1 + continue@charIndex + } + } + SimpleFontRenderer.charWidth[charIndex] = (0.5 + scale).toInt() + 1 + } + + if (MC.textureManager.getTexture(locationFontTexture) == null) { + MC.textureManager.loadTexture(locationFontTexture, SimpleTexture(locationFontTexture)) + } + } + + private fun renderChar(ch: Char): Int { + if (ch == ' ') return 4 + val i = VALID_CHARS.indexOf(ch) + return if (i != -1) renderDefaultChar(i) else 0 + } + + private fun renderDefaultChar(ch: Int): Int { + val texX = (ch % 16 * 8) / 128.0f + val texY = (ch / 16 * 8) / 128.0f + val width = charWidth[ch] - 1.01f + val height = 7.99f + val texWidth = width / 128.0f + val texHeight = height / 128.0f + + GL11.glBegin(GL11.GL_TRIANGLE_STRIP) + GL11.glTexCoord2f(texX, texY) + GL11.glVertex3f(posX, posY, 0.0f) + GL11.glTexCoord2f(texX, texY + texHeight) + GL11.glVertex3f(posX, posY + height, 0.0f) + GL11.glTexCoord2f(texX + texWidth, texY) + GL11.glVertex3f(posX + width, posY, 0.0f) + GL11.glTexCoord2f(texX + texWidth, texY + texHeight) + GL11.glVertex3f(posX + width, posY + height, 0.0f) + GL11.glEnd() + + return charWidth[ch] + } + + fun drawString( + text: String, + x: Float, + y: Float, + color: Color, + dropShadow: Boolean, + ): Int { + var i: Int + GL11.glEnable(GL11.GL_ALPHA_TEST) + GL11.glEnable(GL11.GL_TEXTURE_2D) + locationFontTexture.bind() + + if (dropShadow) { + i = renderString(text, x + 1.0f, y + 1.0f, color, true) + i = max(i, renderString(text, x, y, color, false)) + } else { + i = renderString(text, x, y, color, false) + } + + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f) + return i + } + + private fun renderStringAtPos(text: String) { + text.forEach { + posX += renderChar(it) + } + } + + private fun renderString( + text: String, + x: Float, + y: Float, + color: Color, + dropShadow: Boolean, + ): Int { + if (dropShadow) { + GL11.glColor4f( + color.red * .25f / 255f, + color.green * .25f / 255f, + color.blue * .25f / 255f, + color.alpha / 255f, + ) + } else { + GL11.glColor4f(color.red / 255f, color.green / 255f, color.blue / 255f, color.alpha / 255f) + } + posX = x + posY = y + renderStringAtPos(text) + return posX.toInt() + } + + fun getStringWidth(text: String): Int = text.sumOf { getCharWidth(it) } + + fun getCharWidth(character: Char): Int { + if (character == ' ') return 4 + val i = VALID_CHARS.indexOf(character) + if (character > '\u0000' && i != -1) { + return charWidth[i] + } + return 0 + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/TabList.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/TabList.kt new file mode 100644 index 0000000..96a6a1e --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/TabList.kt @@ -0,0 +1,37 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import com.google.common.collect.ComparisonChain +import com.google.common.collect.Ordering +import net.minecraft.client.network.NetworkPlayerInfo +import net.minecraft.world.WorldSettings +import net.skymoe.enchaddons.util.MC + +object TabList { + private val tabListOrder = + Ordering.from { o1, o2 -> + if (o1 == null) return@from -1 + if (o2 == null) return@from 0 + return@from ComparisonChain + .start() + .compareTrueFirst( + o1.gameType != WorldSettings.GameType.SPECTATOR, + o2.gameType != WorldSettings.GameType.SPECTATOR, + ).compare( + o1.playerTeam?.registeredName ?: "", + o2.playerTeam?.registeredName ?: "", + ).compare(o1.gameProfile.name, o2.gameProfile.name) + .result() + } + + fun getTabList(): List> = + MC.thePlayer + ?.sendQueue + ?.playerInfoMap + ?.let { tabListOrder.immutableSortedCopy(it) } + ?.map { Pair(it, MC.ingameGUI.tabList.getPlayerName(it)) } ?: emptyList() + + fun getDungeonTabList(): List>? = + getTabList().let { + if (it.size > 18 && it[0].second.contains("§r§b§lParty §r§f(")) it else null + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Utils.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Utils.kt new file mode 100644 index 0000000..257be65 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/Utils.kt @@ -0,0 +1,22 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraft.item.ItemStack +import net.minecraft.util.StringUtils +import net.skymoe.enchaddons.util.MC + +object Utils { + fun Any?.equalsOneOf(vararg other: Any): Boolean = other.any { this == it } + + fun runMinecraftThread(run: () -> Unit) { + if (!MC.isCallingFromMinecraftThread) { + MC.addScheduledTask(run) + } else { + run() + } + } + + fun String.removeFormatting(): String = StringUtils.stripControlCodes(this) + + val ItemStack.itemID: String + get() = this.getSubCompound("ExtraAttributes", false)?.getString("id") ?: "" +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/EntityLivingBaseMixinCallback.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/EntityLivingBaseMixinCallback.kt new file mode 100644 index 0000000..0e59f24 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/EntityLivingBaseMixinCallback.kt @@ -0,0 +1,15 @@ +package net.skymoe.enchaddons.impl.mixincallback + +import net.minecraft.entity.EntityLivingBase +import net.minecraft.util.DamageSource +import net.skymoe.enchaddons.EA +import net.skymoe.enchaddons.event.minecraft.LivingEntityEvent + +fun onLivingEntityDeathPre( + entity: EntityLivingBase, + cause: DamageSource, +) { + LivingEntityEvent + .Death(entity, cause) + .also(EA.eventDispatcher) +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/ForgeHooksClientMixinCallback.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/ForgeHooksClientMixinCallback.kt new file mode 100644 index 0000000..b5ab058 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/ForgeHooksClientMixinCallback.kt @@ -0,0 +1,16 @@ +package net.skymoe.enchaddons.impl.mixincallback + +import net.minecraft.client.renderer.RenderGlobal +import net.skymoe.enchaddons.EA +import net.skymoe.enchaddons.event.minecraft.RenderEvent + +object ForgeHooksClientMixinCallback { + fun onRenderWorldLast( + context: RenderGlobal, + partialTicks: Float, + ) { + RenderEvent.World + .Last(context, partialTicks) + .also(EA.eventDispatcher) + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/NetHandlerPlayClientCallback.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/NetHandlerPlayClientCallback.kt index 0478046..1472d81 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/NetHandlerPlayClientCallback.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/NetHandlerPlayClientCallback.kt @@ -2,9 +2,13 @@ package net.skymoe.enchaddons.impl.mixincallback import net.minecraft.network.play.server.S02PacketChat import net.minecraft.network.play.server.S32PacketConfirmTransaction +import net.minecraft.network.play.server.S38PacketPlayerListItem +import net.minecraft.network.play.server.S3EPacketTeams import net.skymoe.enchaddons.EA import net.skymoe.enchaddons.event.hypixel.SkyblockEvent import net.skymoe.enchaddons.event.minecraft.ChatEvent +import net.skymoe.enchaddons.event.minecraft.TabListEvent +import net.skymoe.enchaddons.event.minecraft.TeamEvent import net.skymoe.enchaddons.util.math.int import net.skymoe.enchaddons.util.trimStyle @@ -17,6 +21,7 @@ object NetHandlerPlayClientCallback { .Pre( packet.chatComponent.formattedText.trimStyle, packet.chatComponent.formattedText, + packet.chatComponent, ).also(EA.eventDispatcher) } } @@ -26,4 +31,21 @@ object NetHandlerPlayClientCallback { SkyblockEvent.ServerTick .also(EA.eventDispatcher) } + + fun onS38PacketPlayerListItemPre(packet: S38PacketPlayerListItem) { + TabListEvent + .Pre(packet) + .also(EA.eventDispatcher) + } + + fun onS3ETeamsPre(packet: S3EPacketTeams) { + when (packet.action) { + 0 -> TeamEvent.Pre.Create(packet) + 1 -> TeamEvent.Pre.Remove(packet) + 2 -> TeamEvent.Pre.Update(packet) + 3 -> TeamEvent.Pre.AddPlayer(packet) + 4 -> TeamEvent.Pre.RemovePlayer(packet) + else -> null + }?.also(EA.eventDispatcher) + } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/util/ColorUtil.kt b/src/main/kotlin/net/skymoe/enchaddons/util/ColorUtil.kt index 331aa33..b32d698 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/util/ColorUtil.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/util/ColorUtil.kt @@ -1,9 +1,24 @@ package net.skymoe.enchaddons.util import net.skymoe.enchaddons.util.math.int +import java.awt.Color import kotlin.math.abs import kotlin.math.min +fun Color.withAlpha(alpha: Int) = Color(this.red, this.green, this.blue, alpha) + +fun Color.withAlpha(alpha: Float) = Color(this.red, this.green, this.blue, (alpha * 255).toInt()) + +fun Color.invisible() = withAlpha(0) + +operator fun Color.component1() = this.red + +operator fun Color.component2() = this.green + +operator fun Color.component3() = this.blue + +operator fun Color.component4() = this.alpha + fun convertRGBToHSL(vararg rgb: Double): DoubleArray { val hsl = DoubleArray(if (rgb.size >= 4) 4 else 3) val maxRGB = maxOf(0.0, *rgb) @@ -57,14 +72,13 @@ fun convertHSLToRGB(vararg hsl: Double): DoubleArray { }.normalizeColor } -fun convertARGBToDoubleArray(argb: Int): DoubleArray { - return doubleArrayOf( +fun convertARGBToDoubleArray(argb: Int): DoubleArray = + doubleArrayOf( (argb ushr 16 and 0xFF) / 255.0, (argb ushr 8 and 0xFF) / 255.0, (argb and 0xFF) / 255.0, (argb ushr 24 and 0xFF) / 255.0, ).normalizeColor -} fun convertRGBToDoubleArray(argb: Int) = convertARGBToDoubleArray(argb or 0xFF000000.int) @@ -97,8 +111,7 @@ infix fun DoubleArray.blendColor(rgbaSrc: DoubleArray): DoubleArray { ).normalizeColor } -infix fun Int.blendColor(argbSrc: Int): Int { - return convertDoubleArrayToARGB( +infix fun Int.blendColor(argbSrc: Int): Int = + convertDoubleArrayToARGB( *convertARGBToDoubleArray(this) blendColor convertARGBToDoubleArray(argbSrc), ) -} diff --git a/src/main/kotlin/net/skymoe/enchaddons/util/MinecraftUtil.kt b/src/main/kotlin/net/skymoe/enchaddons/util/MinecraftUtil.kt index 2d0c066..5569cd7 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/util/MinecraftUtil.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/util/MinecraftUtil.kt @@ -11,7 +11,6 @@ import net.minecraft.item.Item import net.minecraft.scoreboard.ScoreObjective import net.minecraft.scoreboard.ScorePlayerTeam import net.minecraft.util.BlockPos -import net.minecraft.util.ChatComponentText import net.minecraft.util.IChatComponent import net.minecraft.util.ResourceLocation import net.minecraft.util.Vec3i @@ -73,16 +72,14 @@ fun WorldRenderer.tex(vec: Vec2D): WorldRenderer = tex(vec.x, vec.y) fun WorldRenderer.color(color: Color): WorldRenderer = color(color.r.float, color.g.float, color.b.float, color.a.float) fun printChat(message: IChatComponent) { + logger.info("[PRINT CHAT] $message") MC.theWorld?.let { MC.ingameGUI.chatGUI.printChatMessage(message) } } fun printChat(message: String = "") { - logger.info("[PRINT CHAT] $message") - MC.theWorld?.let { - MC.ingameGUI.chatGUI.printChatMessage(ChatComponentText(message)) - } + printChat(message.asComponent()) } fun printChat(throwable: Throwable) = printChat(throwable.stackTraceMessage) diff --git a/src/main/kotlin/net/skymoe/enchaddons/util/ModMessage.kt b/src/main/kotlin/net/skymoe/enchaddons/util/ModMessage.kt new file mode 100644 index 0000000..a1785f3 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/util/ModMessage.kt @@ -0,0 +1,25 @@ +package net.skymoe.enchaddons.util + +import net.minecraft.util.IChatComponent + +enum class LogLevel( + val component: IChatComponent, +) { + INFO("§bEA§r §7»§r ".asComponent()), + WARN("§6EA§r §7»§r ".asComponent()), + ERROR("§cEA§r §7»§r ".asComponent()), +} + +fun modMessage( + message: String, + logLevel: LogLevel, +) { + modMessage(message.asComponent(), logLevel) +} + +fun modMessage( + message: IChatComponent, + logLevel: LogLevel, +) { + printChat(logLevel.component.createCopy().appendSibling(message)) +} diff --git a/src/main/resources/assets/enchaddons/awesomemap/rooms.json b/src/main/resources/assets/enchaddons/awesomemap/rooms.json new file mode 100644 index 0000000..f392bc3 --- /dev/null +++ b/src/main/resources/assets/enchaddons/awesomemap/rooms.json @@ -0,0 +1,1309 @@ +[ + { + "name": "Admin", + "type": "NORMAL", + "cores": [ + -1989372370 + ], + "crypts": 34 + }, + { + "name": "Altar", + "type": "NORMAL", + "cores": [ + 1823952110, + 1004879775, + -1690727070 + ], + "crypts": 3, + "secrets": 6 + }, + { + "name": "Andesite", + "type": "NORMAL", + "cores": [ + -673246822 + ], + "secrets": 2 + }, + { + "name": "Archway", + "type": "NORMAL", + "cores": [ + -1447684689, + 1440798119 + ], + "crypts": 4, + "secrets": 3 + }, + { + "name": "Arrow Trap", + "type": "NORMAL", + "cores": [ + 332584803 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Atlas", + "type": "NORMAL", + "cores": [ + -685489527, + 745093020, + 308515062, + -38388847 + ], + "crypts": 5, + "secrets": 6 + }, + { + "name": "Balcony", + "type": "NORMAL", + "cores": [ + 1989395652, + 559495102 + ], + "secrets": 4 + }, + { + "name": "Banners", + "type": "NORMAL", + "cores": [ + -667603340 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Basement", + "type": "NORMAL", + "cores": [ + -204678789 + ], + "secrets": 1 + }, + { + "name": "Beams", + "type": "NORMAL", + "cores": [ + -2082251638 + ], + "crypts": 2, + "secrets": 2 + }, + { + "name": "Big Red Flag", + "type": "NORMAL", + "cores": [ + -1265317780 + ], + "crypts": 1, + "secrets": 2 + }, + { + "name": "Black Flag", + "type": "NORMAL", + "cores": [ + 153580070 + ], + "crypts": 1, + "secrets": 3 + }, + { + "name": "Blood", + "type": "BLOOD", + "cores": [ + -2130054003 + ] + }, + { + "name": "Blue Skulls", + "type": "NORMAL", + "cores": [ + -999204041 + ], + "crypts": 4, + "secrets": 1 + }, + { + "name": "Bomb Defuse", + "type": "PUZZLE", + "cores": [ + 86014075 + ] + }, + { + "name": "Boulder", + "type": "PUZZLE", + "cores": [ + -671152674, + 307825200 + ] + }, + { + "name": "Bridges", + "type": "NORMAL", + "cores": [ + -1604951086, + -1989950542 + ], + "crypts": 6, + "secrets": 6 + }, + { + "name": "Buttons", + "type": "NORMAL", + "cores": [ + -1359302282, + 160943502, + 823430452, + 2123177620 + ], + "crypts": 21, + "secrets": 5, + "trappedChests": 1 + }, + { + "name": "Cage", + "type": "NORMAL", + "cores": [ + 272954274 + ], + "secrets": 1 + }, + { + "name": "Cages", + "type": "NORMAL", + "cores": [ + -316384390 + ], + "secrets": 2 + }, + { + "name": "Carpets", + "type": "NORMAL", + "cores": [ + 988444684, + 1890757664, + 1186348038, + -1160833644 + ], + "crypts": 3, + "secrets": 1 + }, + { + "name": "Cathedral", + "type": "NORMAL", + "cores": [ + -2043617055, + 789869846, + -1212586959, + 1956475445 + ], + "crypts": 5, + "secrets": 8 + }, + { + "name": "Catwalk", + "type": "NORMAL", + "cores": [ + 1600132124, + -1010346133, + -1694830065 + ], + "crypts": 5, + "secrets": 6 + }, + { + "name": "Cell", + "type": "NORMAL", + "cores": [ + 1751890846 + ], + "secrets": 1 + }, + { + "name": "Chains", + "type": "NORMAL", + "cores": [ + 113272043 + ], + "secrets": 2 + }, + { + "name": "Chambers", + "type": "NORMAL", + "cores": [ + 1756685113, + 368708000, + 252800591 + ], + "crypts": 6, + "secrets": 5 + }, + { + "name": "Cobble Wall Pillar", + "type": "NORMAL", + "cores": [ + 259238824 + ], + "crypts": 1, + "secrets": 2 + }, + { + "name": "Creeper Beams", + "type": "PUZZLE", + "cores": [ + -755321869, + 573221447 + ] + }, + { + "name": "Criss-Cross", + "type": "NORMAL", + "cores": [ + 650161016, + 1002362494 + ], + "crypts": 6, + "secrets": 1 + }, + { + "name": "Crypt", + "type": "NORMAL", + "cores": [ + -845911506, + 331494915 + ], + "crypts": 2, + "secrets": 5 + }, + { + "name": "Deathmite", + "type": "NORMAL", + "cores": [ + -233562612, + -1901273450, + -1408070175 + ], + "crypts": 4, + "secrets": 6 + }, + { + "name": "Default", + "type": "CHAMPION", + "cores": [ + 652570347, + 1956609103 + ] + }, + { + "name": "Diagonal", + "type": "NORMAL", + "cores": [ + 2147431657, + 1144217017, + -464769223 + ], + "crypts": 3, + "secrets": 4 + }, + { + "name": "Dino Site", + "type": "NORMAL", + "cores": [ + -1113939414, + -1425445617, + -609789679 + ], + "crypts": 4, + "secrets": 4 + }, + { + "name": "Dip", + "type": "NORMAL", + "cores": [ + -1691958814 + ], + "crypts": 3, + "secrets": 2 + }, + { + "name": "Dome", + "type": "NORMAL", + "cores": [ + 462413746 + ], + "crypts": 2, + "secrets": 2 + }, + { + "name": "Doors", + "type": "NORMAL", + "cores": [ + 164990589, + 1033794268 + ], + "crypts": 7, + "secrets": 5 + }, + { + "name": "Double Diamond", + "type": "NORMAL", + "cores": [ + 1308341800 + ], + "secrets": 3 + }, + { + "name": "Dragon", + "type": "CHAMPION", + "cores": [ + 84632407 + ] + }, + { + "name": "Drop", + "type": "NORMAL", + "cores": [ + -615308028 + ], + "crypts": 6, + "secrets": 2 + }, + { + "name": "Dueces", + "type": "NORMAL", + "cores": [ + 1046920372 + ], + "crypts": 6, + "secrets": 3, + "trappedChests": 1 + }, + { + "name": "Duncan", + "type": "NORMAL", + "cores": [ + 544418695 + ], + "secrets": 1 + }, + { + "name": "End", + "type": "NORMAL", + "cores": [ + -1897192562 + ], + "crypts": 1, + "secrets": 2 + }, + { + "name": "Entrance", + "type": "ENTRANCE", + "cores": [ + 274652966, + -1092072828, + 1913969999 + ] + }, + { + "name": "Fairy", + "type": "FAIRY", + "cores": [ + 1484567748 + ] + }, + { + "name": "Flags", + "type": "NORMAL", + "cores": [ + -1267948931, + 284566079, + 1157102457, + 67929126 + ], + "crypts": 8, + "secrets": 7 + }, + { + "name": "Gold", + "type": "NORMAL", + "cores": [ + -1035453872, + 1451614295 + ], + "secrets": 1 + }, + { + "name": "Golden Oasis", + "type": "NORMAL", + "cores": [ + -1666473430 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Grand Library", + "type": "NORMAL", + "cores": [ + 749593273, + 1348435369 + ], + "crypts": 2, + "secrets": 4 + }, + { + "name": "Granite", + "type": "NORMAL", + "cores": [ + -456244067 + ], + "secrets": 2 + }, + { + "name": "Grass Ruin", + "type": "NORMAL", + "cores": [ + 568565222, + -786211724 + ], + "crypts": 4, + "secrets": 3 + }, + { + "name": "Gravel", + "type": "NORMAL", + "cores": [ + 841898152, + 1127962661, + 4304131 + ], + "crypts": 2, + "secrets": 6 + }, + { + "name": "Hall", + "type": "NORMAL", + "cores": [ + -2131538192 + ] + }, + { + "name": "Hallway", + "type": "NORMAL", + "cores": [ + -402028497, + 351544339, + -1723662179, + -1644671806 + ], + "crypts": 1, + "secrets": 3 + }, + { + "name": "Higher Blaze", + "type": "PUZZLE", + "cores": [ + 1103121487, + 23134049, + -243302881 + ], + "secrets": 1 + }, + { + "name": "Ice Fill", + "type": "PUZZLE", + "cores": [ + 327081838, + 1328525306, + 161828987 + ] + }, + { + "name": "Ice Path", + "type": "PUZZLE", + "cores": [ + 1073658098 + ] + }, + { + "name": "Jumping Skulls", + "type": "NORMAL", + "cores": [ + -1496765468 + ], + "secrets": 1 + }, + { + "name": "King Midas", + "type": "CHAMPION", + "cores": [ + -1678546839 + ], + "crypts": 1 + }, + { + "name": "Knight", + "type": "NORMAL", + "cores": [ + -1746428299 + ], + "secrets": 3 + }, + { + "name": "Lava Pit", + "type": "RARE", + "cores": [ + -1519947323 + ], + "secrets": 3 + }, + { + "name": "Lava Ravine", + "type": "NORMAL", + "cores": [ + -2040489612, + -294054018, + -2053308786 + ], + "crypts": 4, + "secrets": 6 + }, + { + "name": "Layers", + "type": "NORMAL", + "cores": [ + 1516049261, + 820948152, + 456930870, + -1910037748 + ], + "secrets": 8 + }, + { + "name": "Leaves", + "type": "NORMAL", + "cores": [ + -1967474423 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Locked Away", + "type": "NORMAL", + "cores": [ + 754378401 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Logs", + "type": "NORMAL", + "cores": [ + -1803705489 + ], + "secrets": 4 + }, + { + "name": "Long Hall", + "type": "NORMAL", + "cores": [ + -872480083 + ], + "crypts": 3, + "secrets": 3 + }, + { + "name": "Lots Of Floors", + "type": "NORMAL", + "cores": [ + 1449723216 + ], + "crypts": 1, + "secrets": 3 + }, + { + "name": "Lower Blaze", + "type": "PUZZLE", + "cores": [ + -1092103153, + -2027662369, + -1141175903 + ], + "secrets": 1 + }, + { + "name": "Mage", + "type": "NORMAL", + "cores": [ + -338946136, + 1089356068 + ], + "secrets": 4 + }, + { + "name": "Market", + "type": "NORMAL", + "cores": [ + 270637140, + -402574914, + -880417926 + ], + "crypts": 4, + "secrets": 5 + }, + { + "name": "Melon", + "type": "NORMAL", + "cores": [ + -325025964, + 1964904676, + 158528145 + ], + "crypts": 4, + "secrets": 7 + }, + { + "name": "Mines", + "type": "NORMAL", + "cores": [ + -361911912, + -39488099, + 1363618678, + 1227315161 + ], + "crypts": 11, + "secrets": 10 + }, + { + "name": "Mirror", + "type": "NORMAL", + "cores": [ + -1823353629 + ], + "secrets": 1 + }, + { + "name": "Mossy", + "type": "NORMAL", + "cores": [ + -1169615458, + 1432034198, + 1896208123 + ], + "crypts": 2, + "secrets": 4 + }, + { + "name": "Multicolored", + "type": "NORMAL", + "cores": [ + -671539463 + ], + "secrets": 1 + }, + { + "name": "Mural", + "type": "NORMAL", + "cores": [ + -1027066030 + ], + "secrets": 1 + }, + { + "name": "Museum", + "type": "NORMAL", + "cores": [ + -1957538226, + -2121384577, + -1797804860, + 1514395908 + ], + "crypts": 4, + "secrets": 5 + }, + { + "name": "Mushroom", + "type": "NORMAL", + "cores": [ + 1073109158 + ], + "secrets": 1 + }, + { + "name": "New Trap", + "type": "TRAP", + "cores": [ + -1358669872, + -1989128497 + ], + "crypts": 1, + "secrets": 3, + "trappedChests": 1 + }, + { + "name": "Old Trap", + "type": "TRAP", + "cores": [ + 1128554492 + ], + "crypts": 2, + "secrets": 4 + }, + { + "name": "Overgrown", + "type": "NORMAL", + "cores": [ + 1858897577 + ], + "secrets": 3 + }, + { + "name": "Overgrown Chains", + "type": "NORMAL", + "cores": [ + 1077887433 + ], + "crypts": 1, + "secrets": 2 + }, + { + "name": "Painting", + "type": "NORMAL", + "cores": [ + 474745227 + ], + "secrets": 2 + }, + { + "name": "Pedestal", + "type": "NORMAL", + "cores": [ + -1346033867, + 281551136 + ], + "crypts": 1, + "secrets": 5 + }, + { + "name": "Perch", + "type": "NORMAL", + "cores": [ + 27598620 + ], + "crypts": 1, + "secrets": 2 + }, + { + "name": "Pipes", + "type": "NORMAL", + "cores": [ + 952529534, + -901820944, + -664950032, + -1205767926 + ], + "crypts": 9, + "secrets": 7 + }, + { + "name": "Pirate", + "type": "NORMAL", + "cores": [ + -1175423677, + 1942933815, + 2002468229 + ], + "crypts": 2, + "secrets": 6 + }, + { + "name": "Pit", + "type": "NORMAL", + "cores": [ + -1862968316, + -258250108, + 265221970, + 430079089 + ], + "crypts": 4, + "secrets": 5 + }, + { + "name": "Pressure Plates", + "type": "NORMAL", + "cores": [ + 1172966775, + 681797038 + ], + "crypts": 6, + "secrets": 6 + }, + { + "name": "Prison Cell", + "type": "NORMAL", + "cores": [ + 1172045122 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Purple Flags", + "type": "NORMAL", + "cores": [ + 887024382, + 701310376 + ], + "crypts": 7, + "secrets": 5 + }, + { + "name": "Quad Lava", + "type": "NORMAL", + "cores": [ + 52900193 + ], + "secrets": 2 + }, + { + "name": "Quartz Knight", + "type": "NORMAL", + "cores": [ + -1639566599, + 153753389, + -129760550, + -742870398 + ], + "crypts": 9, + "secrets": 7 + }, + { + "name": "Quiz", + "type": "PUZZLE", + "cores": [ + 1928619293 + ] + }, + { + "name": "Raccoon", + "type": "NORMAL", + "cores": [ + 497881745 + ], + "crypts": 2, + "secrets": 4 + }, + { + "name": "Rail Track", + "type": "RARE", + "cores": [ + -701175845 + ], + "crypts": 3, + "secrets": 3 + }, + { + "name": "Rails", + "type": "NORMAL", + "cores": [ + 526587049, + -214948895, + -1778261714, + 1937419120 + ], + "crypts": 1, + "secrets": 9 + }, + { + "name": "Rare Overgrown", + "type": "RARE", + "cores": [ + -1643528240 + ], + "secrets": 3 + }, + { + "name": "Rare Pillars", + "type": "RARE", + "cores": [ + 1216268340 + ], + "secrets": 1 + }, + { + "name": "Red Blue", + "type": "NORMAL", + "cores": [ + 1011477602, + 1607395895, + -1794981292 + ], + "crypts": 1, + "secrets": 4 + }, + { + "name": "Red Green", + "type": "NORMAL", + "cores": [ + -1085327384 + ], + "crypts": 2, + "secrets": 3 + }, + { + "name": "Redstone Crypt", + "type": "NORMAL", + "cores": [ + -1054702517, + 127199896 + ], + "secrets": 3 + }, + { + "name": "Redstone Key", + "type": "NORMAL", + "cores": [ + 348655632 + ], + "crypts": 4, + "secrets": 3, + "trappedChests": 1 + }, + { + "name": "Redstone Warrior", + "type": "NORMAL", + "cores": [ + 1313090868, + 1819727964 + ], + "crypts": 4, + "secrets": 3 + }, + { + "name": "Ritual", + "type": "NORMAL", + "cores": [ + 758637731 + ], + "crypts": 1, + "secrets": 3 + }, + { + "name": "Sand Dragon", + "type": "RARE", + "cores": [ + -1497998508 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Sarcophagus", + "type": "NORMAL", + "cores": [ + 1986002687 + ], + "crypts": 1, + "secrets": 3 + }, + { + "name": "Scaffolding", + "type": "NORMAL", + "cores": [ + 2091387826 + ], + "secrets": 2 + }, + { + "name": "Shadow Assassin", + "type": "CHAMPION", + "cores": [ + -430117371 + ], + "crypts": 2 + }, + { + "name": "Silver Sword", + "type": "NORMAL", + "cores": [ + -224496952 + ], + "secrets": 1 + }, + { + "name": "Skull", + "type": "NORMAL", + "cores": [ + -46929855, + 1667732153 + ], + "secrets": 2 + }, + { + "name": "Slabs", + "type": "NORMAL", + "cores": [ + -1811244478 + ], + "crypts": 2, + "secrets": 2 + }, + { + "name": "Slime", + "type": "NORMAL", + "cores": [ + 1203689085, + 611794931, + -1050545277 + ], + "crypts": 1, + "secrets": 5, + "trappedChests": 1 + }, + { + "name": "Sloth", + "type": "NORMAL", + "cores": [ + -1390729196 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Small Stairs", + "type": "NORMAL", + "cores": [ + -1250912300 + ], + "crypts": 1, + "secrets": 2 + }, + { + "name": "Small Waterfall", + "type": "NORMAL", + "cores": [ + -1682285647 + ], + "crypts": 5, + "secrets": 2 + }, + { + "name": "Spider", + "type": "NORMAL", + "cores": [ + 365045229, + -1361285742, + 1778566373 + ], + "crypts": 3, + "secrets": 9 + }, + { + "name": "Spikes", + "type": "NORMAL", + "cores": [ + 881396995 + ], + "crypts": 2, + "secrets": 3 + }, + { + "name": "Staircase", + "type": "NORMAL", + "cores": [ + 1386509425 + ], + "crypts": 2, + "secrets": 3 + }, + { + "name": "Stairs", + "type": "NORMAL", + "cores": [ + -330702540, + -283979980, + -697693183, + 606731747 + ], + "crypts": 1, + "secrets": 4 + }, + { + "name": "Steps", + "type": "NORMAL", + "cores": [ + 1350621298 + ], + "crypts": 1, + "secrets": 1 + }, + { + "name": "Stone Window", + "type": "RARE", + "cores": [ + 477318192 + ], + "crypts": 1, + "secrets": 2 + }, + { + "name": "Supertall", + "type": "NORMAL", + "cores": [ + 1522346451, + -1376632689, + 291711773, + -46683467 + ], + "crypts": 6, + "secrets": 6 + }, + { + "name": "Teleport Maze", + "type": "PUZZLE", + "cores": [ + 487124604, + 2089453469 + ] + }, + { + "name": "Temple", + "type": "NORMAL", + "cores": [ + 1663174337, + 1480555517 + ], + "secrets": 3 + }, + { + "name": "Three Floors", + "type": "RARE", + "cores": [ + 633179672 + ], + "secrets": 1 + }, + { + "name": "Three Weirdos", + "type": "PUZZLE", + "cores": [ + -476788643 + ] + }, + { + "name": "Tic Tac Toe", + "type": "PUZZLE", + "cores": [ + 1958698161 + ], + "secrets": 1 + }, + { + "name": "Tombstone", + "type": "RARE", + "cores": [ + 1965783806 + ], + "secrets": 2 + }, + { + "name": "Tomioka", + "type": "NORMAL", + "cores": [ + -195263543 + ] + }, + { + "name": "Trinity", + "type": "RARE", + "cores": [ + 256380076 + ], + "crypts": 3, + "secrets": 4 + }, + { + "name": "Vinny 8 Ball", + "type": "RARE", + "cores": [ + -1169880205 + ], + "secrets": 1 + }, + { + "name": "Water", + "type": "NORMAL", + "cores": [ + -1849552977 + ], + "secrets": 2 + }, + { + "name": "Water Board", + "type": "PUZZLE", + "cores": [ + -109725212, + -353291158 + ] + }, + { + "name": "Waterfall", + "type": "NORMAL", + "cores": [ + 740310812, + 82232284, + 1379043687, + -1971268623 + ], + "crypts": 3, + "secrets": 8 + }, + { + "name": "Well", + "type": "NORMAL", + "cores": [ + 196766004, + 718434953, + 1955671195 + ], + "crypts": 5, + "secrets": 7 + }, + { + "name": "Withermancer", + "type": "NORMAL", + "cores": [ + -499989468, + -406356904, + -1645219026 + ], + "crypts": 6, + "secrets": 4 + }, + { + "name": "Wizard", + "type": "NORMAL", + "cores": [ + -23510667, + 1958624830, + 735485465 + ], + "crypts": 8, + "secrets": 4 + }, + { + "name": "Zodd", + "type": "NORMAL", + "cores": [ + 105458531 + ], + "crypts": 1, + "secrets": 1 + } +] diff --git a/src/main/resources/mixins.enchaddons.json b/src/main/resources/mixins.enchaddons.json index c09d34d..339b3a6 100644 --- a/src/main/resources/mixins.enchaddons.json +++ b/src/main/resources/mixins.enchaddons.json @@ -17,6 +17,8 @@ "verbose": true, "mixins": [ "BasicOptionMixin", + "EntityLivingBaseMixin", + "ForgeHooksClientMixin", "NetHandlerPlayClientMixin" ] } From e9fbcf3d4d8896832587240d6d82c0da2f46252f Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Sun, 6 Apr 2025 12:41:54 +0800 Subject: [PATCH 03/25] fix: forgotten debug message --- .../skymoe/enchaddons/feature/dungeon/fastdraft/FastDraft.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/kotlin/net/skymoe/enchaddons/feature/dungeon/fastdraft/FastDraft.kt b/src/main/kotlin/net/skymoe/enchaddons/feature/dungeon/fastdraft/FastDraft.kt index 14cfcd3..1c88231 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/feature/dungeon/fastdraft/FastDraft.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/feature/dungeon/fastdraft/FastDraft.kt @@ -26,8 +26,6 @@ object FastDraft : FeatureBase(FAST_DRAFT_INFO) { longrun { ensureEnabled() - println(event.messageRaw) - puzzleFailPatterns.forEach { pattern -> pattern.matchEntire(event.messageRaw)?.let { matchResult -> if (config.chatHintEnabled) { From abbf71d1c02c271caf1addf7f2fb1bfc9d048821 Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Mon, 7 Apr 2025 20:20:55 +0800 Subject: [PATCH 04/25] feat: HypixelModAPI dev env --- build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle.kts b/build.gradle.kts index d75705a..65447bc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -116,6 +116,7 @@ dependencies { } implementation("net.hypixel:mod-api:1.0.1") + modImplementation("net.hypixel:mod-api-forge:1.0.1.2") implementation("org.antlr:ST4:4.3.4") shade("com.squareup.okhttp3:okhttp:4.12.0") From 4202cb53289a2b37a8bc301894480a6c4c0b9d93 Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Mon, 7 Apr 2025 20:22:12 +0800 Subject: [PATCH 05/25] fix: MinecraftEvent.Load.Post not be trigger --- .../enchaddons/impl/mixincallback/MinecraftMixinCallback.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/MinecraftMixinCallback.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/MinecraftMixinCallback.kt index 9f01929..8c0c1d9 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/MinecraftMixinCallback.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/MinecraftMixinCallback.kt @@ -8,6 +8,8 @@ import net.skymoe.enchaddons.impl.config.EnchAddonsConfig import net.skymoe.enchaddons.util.tickCounter fun startGamePost() { + MinecraftEvent.Load.Post + .also(EA.eventDispatcher) } fun onRunTickPre() { From cf164629345e9d584f722cba0c0e432286bdafa8 Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Mon, 7 Apr 2025 20:22:54 +0800 Subject: [PATCH 06/25] feat: AwesomeMap just running but not render optimized --- .../impl/mixin/NetHandlerPlayClientMixin.java | 13 ++- .../enchaddons/event/minecraft/MapEvent.kt | 10 ++ .../feature/awesomemap/AwesomeMap.kt | 89 +++++++++--------- .../awesomemap/features/dungeon/Dungeon.kt | 5 +- .../awesomemap/features/dungeon/MapRender.kt | 10 -- .../features/dungeon/MapRenderList.kt | 12 --- .../features/dungeon/WitherDoorESP.kt | 4 - .../impl/feature/awesomemap/ui/GuiRenderer.kt | 4 - .../impl/feature/awesomemap/utils/MapUtils.kt | 8 +- .../NetHandlerPlayClientCallback.kt | 10 +- .../enchaddons/awesomemap/default/cross.png | Bin 0 -> 205 bytes .../awesomemap/default/green_check.png | Bin 0 -> 188 bytes .../awesomemap/default/question.png | Bin 0 -> 162 bytes .../awesomemap/default/white_check.png | Bin 0 -> 186 bytes .../assets/enchaddons/awesomemap/marker.png | Bin 0 -> 177 bytes 15 files changed, 78 insertions(+), 87 deletions(-) create mode 100644 src/main/kotlin/net/skymoe/enchaddons/event/minecraft/MapEvent.kt create mode 100644 src/main/resources/assets/enchaddons/awesomemap/default/cross.png create mode 100644 src/main/resources/assets/enchaddons/awesomemap/default/green_check.png create mode 100644 src/main/resources/assets/enchaddons/awesomemap/default/question.png create mode 100644 src/main/resources/assets/enchaddons/awesomemap/default/white_check.png create mode 100644 src/main/resources/assets/enchaddons/awesomemap/marker.png diff --git a/src/main/java/net/skymoe/enchaddons/impl/mixin/NetHandlerPlayClientMixin.java b/src/main/java/net/skymoe/enchaddons/impl/mixin/NetHandlerPlayClientMixin.java index 57d7382..cdda9ed 100644 --- a/src/main/java/net/skymoe/enchaddons/impl/mixin/NetHandlerPlayClientMixin.java +++ b/src/main/java/net/skymoe/enchaddons/impl/mixin/NetHandlerPlayClientMixin.java @@ -2,10 +2,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.network.play.server.S02PacketChat; -import net.minecraft.network.play.server.S32PacketConfirmTransaction; -import net.minecraft.network.play.server.S38PacketPlayerListItem; -import net.minecraft.network.play.server.S3EPacketTeams; +import net.minecraft.network.play.server.*; import net.skymoe.enchaddons.impl.mixincallback.NetHandlerPlayClientCallback; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -38,6 +35,12 @@ public void processPacket(S38PacketPlayerListItem packetIn, CallbackInfo ci) { @Inject(method = "handleTeams", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketThreadUtil;checkThreadAndEnqueue(Lnet/minecraft/network/Packet;Lnet/minecraft/network/INetHandler;Lnet/minecraft/util/IThreadListener;)V", shift = At.Shift.AFTER)) public void processPacket(S3EPacketTeams packetIn, CallbackInfo ci) { // if (!gameController.isCallingFromMinecraftThread()) return; - NetHandlerPlayClientCallback.INSTANCE.onS3ETeamsPre(packetIn); + NetHandlerPlayClientCallback.INSTANCE.onS3EPacketTeamsPre(packetIn); + } + + @Inject(method = "handleMaps", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketThreadUtil;checkThreadAndEnqueue(Lnet/minecraft/network/Packet;Lnet/minecraft/network/INetHandler;Lnet/minecraft/util/IThreadListener;)V", shift = At.Shift.AFTER)) + public void processPacket(S34PacketMaps packetIn, CallbackInfo ci) { +// if (!gameController.isCallingFromMinecraftThread()) return; + NetHandlerPlayClientCallback.INSTANCE.onS34PacketMapsPre(packetIn); } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/MapEvent.kt b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/MapEvent.kt new file mode 100644 index 0000000..44e6b22 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/event/minecraft/MapEvent.kt @@ -0,0 +1,10 @@ +package net.skymoe.enchaddons.event.minecraft + +import net.minecraft.network.play.server.S34PacketMaps +import net.skymoe.enchaddons.event.Event + +interface MapEvent : Event { + data class Pre( + val packet: S34PacketMaps, + ) : MapEvent +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt b/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt index 0586e0d..433197f 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt @@ -1,10 +1,10 @@ package net.skymoe.enchaddons.feature.awesomemap +import kotlinx.atomicfu.atomic import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import net.minecraft.client.gui.GuiScreen import net.minecraft.client.settings.KeyBinding -import net.minecraftforge.client.ClientCommandHandler -import net.minecraftforge.common.MinecraftForge import net.minecraftforge.fml.client.registry.ClientRegistry import net.minecraftforge.fml.common.gameevent.InputEvent import net.skymoe.enchaddons.event.RegistryEventDispatcher @@ -14,13 +14,10 @@ import net.skymoe.enchaddons.feature.FeatureBase import net.skymoe.enchaddons.feature.ensureEnabled import net.skymoe.enchaddons.feature.ensureSkyBlockMode import net.skymoe.enchaddons.feature.featureInfo -import net.skymoe.enchaddons.impl.feature.awesomemap.commands.FunnyMapCommands -import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.Dungeon -import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender -import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation -import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.WitherDoorESP +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.* import net.skymoe.enchaddons.impl.feature.awesomemap.ui.GuiRenderer import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils import net.skymoe.enchaddons.impl.nanovg.GUIEvent import net.skymoe.enchaddons.util.MC @@ -31,42 +28,10 @@ import kotlin.coroutines.EmptyCoroutineContext val AWESOME_MAP_INFO = featureInfo("awesome_map", "Awesome Map") object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { - var display: GuiScreen? = null + private var display: GuiScreen? = null private val toggleLegitKey = KeyBinding("Legit Peek", Keyboard.KEY_NONE, "Funny Map") val scope = CoroutineScope(EmptyCoroutineContext) - - private fun onInit() { - ClientCommandHandler.instance.registerCommand((FunnyMapCommands())) - listOf( - this, - Dungeon, - GuiRenderer, - Location, - RunInformation, - WitherDoorESP, - ).forEach(MinecraftForge.EVENT_BUS::register) - RenderUtils - ClientRegistry.registerKeyBinding(toggleLegitKey) - } - - fun onTick() { - MC.mcProfiler.startSection("awesome_map") - - if (display != null) { - MC.displayGuiScreen(display) - display = null - } - - if (config.peekMode == 1) { - MapRender.legitPeek = toggleLegitKey.isKeyDown - } - - Dungeon.onTick() - GuiRenderer.onTick() - Location.onTick() - - MC.mcProfiler.endSection() - } + private var runningTick = atomic(false) fun onKey(event: InputEvent.KeyInputEvent) { if (config.peekMode == 0 && toggleLegitKey.isPressed) { @@ -77,7 +42,21 @@ object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { override fun registerEvents(dispatcher: RegistryEventDispatcher) { dispatcher.run { register { - onInit() + Dungeon + GuiRenderer + Location + DungeonScan + RenderUtils + MapRender + MapRenderList + MapUpdate + MimicDetector + PlayerTracker + RunInformation + ScanUtils + ScoreCalculation + WitherDoorESP + ClientRegistry.registerKeyBinding(toggleLegitKey) } register { @@ -85,7 +64,22 @@ object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { ensureEnabled() ensureSkyBlockMode("dungeon") - onTick() + if (display != null) { + MC.displayGuiScreen(display) + display = null + } + + if (config.peekMode == 1) { + MapRender.legitPeek = toggleLegitKey.isKeyDown + } + + scope.launch { + if (runningTick.getAndSet(true)) return@launch + Dungeon.onTick() + GuiRenderer.onTick() + Location.onTick() + runningTick.value = false + } } } @@ -146,6 +140,15 @@ object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { } } + register { event -> + longrun { + ensureEnabled() + ensureSkyBlockMode("dungeon") + + MapUtils.onUpdateMapData(event) + } + } + register { event -> longrun { ensureEnabled() diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/Dungeon.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/Dungeon.kt index a7a202b..1657370 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/Dungeon.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/Dungeon.kt @@ -8,7 +8,6 @@ import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.Dungeon.Info.ended import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inDungeons import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils import net.skymoe.enchaddons.impl.feature.awesomemap.utils.TabList import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf @@ -30,8 +29,6 @@ object Dungeon { ) fun onTick() { - if (!inDungeons) return - if (shouldSearchMimic()) { MimicDetector.findMimic()?.let { if (AwesomeMap.config.scanChatInfo) printChat("&7Mimic Room: &c$it") @@ -59,7 +56,7 @@ object Dungeon { } if (DungeonScan.shouldScan) { -// scope.launch { DungeonScan.scan() } +// AwesomeMap.scope.launch { DungeonScan.scan() } DungeonScan.scan() } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt index 8ee7a62..ba25a1b 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt @@ -33,8 +33,6 @@ object MapRender { get() = AwesomeMap.config.legitMode && !legitPeek fun renderMap() { - MC.mcProfiler.startSection("border") - RenderUtils.renderRect( 0.0, 0.0, @@ -52,8 +50,6 @@ object MapRender { AwesomeMap.config.mapBorder.toJavaColor(), ) - MC.mcProfiler.endSection() - if (AwesomeMap.config.mapRotate) { GlStateManager.pushMatrix() setupRotate() @@ -63,15 +59,11 @@ object MapRender { GlStateManager.translate(-64.0, -64.0, 0.0) } - MC.mcProfiler.startSection("rooms") renderRooms() - MC.mcProfiler.endStartSection("text") renderText() if (!inBoss) { - MC.mcProfiler.endStartSection("heads") renderPlayerHeads() } - MC.mcProfiler.endSection() if (AwesomeMap.config.mapRotate) { GL11.glDisable(GL11.GL_SCISSOR_TEST) @@ -83,9 +75,7 @@ object MapRender { } if (AwesomeMap.config.mapShowRunInformation) { - MC.mcProfiler.startSection("footer") renderRunInformation() - MC.mcProfiler.endSection() } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt index a355553..9c856dd 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt @@ -15,7 +15,6 @@ import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.darken import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.grayScale import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtilsGL import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf -import net.skymoe.enchaddons.util.MC import org.lwjgl.opengl.GL11 object MapRenderList { @@ -69,12 +68,8 @@ object MapRenderList { RenderUtils.preDraw() RenderUtilsGL.preDraw() - MC.mcProfiler.startSection("border") - if (borderGlList != -1) GL11.glCallList(borderGlList) - MC.mcProfiler.endSection() - if (AwesomeMap.config.mapRotate) { GlStateManager.pushMatrix() MapRender.setupRotate() @@ -84,8 +79,6 @@ object MapRenderList { GlStateManager.translate(-64.0, -64.0, 0.0) } - MC.mcProfiler.startSection("rooms") - if (roomGlList != -1) GL11.glCallList(roomGlList) RenderUtilsGL.unbindTexture() @@ -94,12 +87,9 @@ object MapRenderList { GlStateManager.popMatrix() if (!inBoss) { - MC.mcProfiler.endStartSection("heads") MapRender.renderPlayerHeads() } - MC.mcProfiler.endSection() - if (AwesomeMap.config.mapRotate) { GL11.glDisable(GL11.GL_SCISSOR_TEST) GlStateManager.popMatrix() @@ -110,9 +100,7 @@ object MapRenderList { } if (AwesomeMap.config.mapShowRunInformation) { - MC.mcProfiler.startSection("footer") MapRender.renderRunInformation() - MC.mcProfiler.endSection() } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt index 243296b..98e081a 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt @@ -14,8 +14,6 @@ object WitherDoorESP { fun onRender(event: RenderEvent.World.Last) { if (inBoss || AwesomeMap.config.witherDoorESP == 0) return - MC.mcProfiler.startSection("funnymap-3d") - val (x, y, z) = MC.renderViewEntity.getInterpolatedPosition(event.partialTicks) GlStateManager.translate(-x, -y, -z) Dungeon.espDoors.forEach { door -> @@ -35,7 +33,5 @@ object WitherDoorESP { ) } GlStateManager.translate(x, y, z) - - MC.mcProfiler.endSection() } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt index d391d56..54b66cf 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt @@ -31,8 +31,6 @@ object GuiRenderer { fun onOverlay(event: GUIEvent.HUD) { if (MC.currentScreen is EditLocationGui) return - MC.mcProfiler.startSection("awesomemap-2d") - MC.entityRenderer.setupOverlayRendering() elements.forEach { @@ -55,8 +53,6 @@ object GuiRenderer { center = true, ) } - - MC.mcProfiler.endSection() } fun onTick() { diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/MapUtils.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/MapUtils.kt index 23646c4..a0e8790 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/MapUtils.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/MapUtils.kt @@ -2,9 +2,9 @@ package net.skymoe.enchaddons.impl.feature.awesomemap.utils import net.minecraft.item.ItemMap import net.minecraft.item.ItemStack -import net.minecraft.network.play.server.S34PacketMaps import net.minecraft.util.Vec4b import net.minecraft.world.storage.MapData +import net.skymoe.enchaddons.event.minecraft.MapEvent import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.DungeonScan import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inDungeons import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf @@ -35,7 +35,7 @@ object MapUtils { return map } - fun updateMapData(packet: S34PacketMaps) { + fun onUpdateMapData(event: MapEvent.Pre) { if (!inDungeons) return Utils.runMinecraftThread { val map = getMapItem() @@ -43,9 +43,9 @@ object MapUtils { mapData = (map.item as ItemMap).getMapData(map, MC.theWorld) } if (mapData == null) { - mapData = MapData("map_${packet.mapId}") + mapData = MapData("map_${event.packet.mapId}") } - packet.setMapdataTo(mapData) + event.packet.setMapdataTo(mapData) mapDataUpdated = true } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/NetHandlerPlayClientCallback.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/NetHandlerPlayClientCallback.kt index 1472d81..6a926f8 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/NetHandlerPlayClientCallback.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/mixincallback/NetHandlerPlayClientCallback.kt @@ -2,11 +2,13 @@ package net.skymoe.enchaddons.impl.mixincallback import net.minecraft.network.play.server.S02PacketChat import net.minecraft.network.play.server.S32PacketConfirmTransaction +import net.minecraft.network.play.server.S34PacketMaps import net.minecraft.network.play.server.S38PacketPlayerListItem import net.minecraft.network.play.server.S3EPacketTeams import net.skymoe.enchaddons.EA import net.skymoe.enchaddons.event.hypixel.SkyblockEvent import net.skymoe.enchaddons.event.minecraft.ChatEvent +import net.skymoe.enchaddons.event.minecraft.MapEvent import net.skymoe.enchaddons.event.minecraft.TabListEvent import net.skymoe.enchaddons.event.minecraft.TeamEvent import net.skymoe.enchaddons.util.math.int @@ -38,7 +40,7 @@ object NetHandlerPlayClientCallback { .also(EA.eventDispatcher) } - fun onS3ETeamsPre(packet: S3EPacketTeams) { + fun onS3EPacketTeamsPre(packet: S3EPacketTeams) { when (packet.action) { 0 -> TeamEvent.Pre.Create(packet) 1 -> TeamEvent.Pre.Remove(packet) @@ -48,4 +50,10 @@ object NetHandlerPlayClientCallback { else -> null }?.also(EA.eventDispatcher) } + + fun onS34PacketMapsPre(packet: S34PacketMaps) { + MapEvent + .Pre(packet) + .also(EA.eventDispatcher) + } } diff --git a/src/main/resources/assets/enchaddons/awesomemap/default/cross.png b/src/main/resources/assets/enchaddons/awesomemap/default/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..5099d32ffc22e92df8640c59b1a1ef88582f08fb GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}E0G|-o|3C%ou7LJU^rV^_>rm3T?FqnEv=AS@2i1OZ-q~Gkn9W5^>ag ehfMV(5B9JK0p6Kqza{_;XYh3Ob6Mw<&;$Sl9z1pc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/enchaddons/awesomemap/default/question.png b/src/main/resources/assets/enchaddons/awesomemap/default/question.png new file mode 100644 index 0000000000000000000000000000000000000000..f9278b05e467996dea423872bd2c70e9104ff173 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL32+R#}EtuWC_+O%x)UJj1`rY|D9*@%(t&U zwvtcV;TjLqi<(J{u51@#jD@GjElH55Xf#MjU|=|G#r4W`zPm8c2nJ7AKbLh*2~7Yj C04tCH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/enchaddons/awesomemap/default/white_check.png b/src/main/resources/assets/enchaddons/awesomemap/default/white_check.png new file mode 100644 index 0000000000000000000000000000000000000000..8aa2f15ab0fffc43bc4ac596d8b5476cbf58d077 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL4Qvd#}Etuw-*j_F$f5-TzLBbzvSYZw@&!= zo!YHqH2FsPa>4DvPp4d4pgm`$gdX$s$vP(vZIG>Cm>w$8$9hqd=acYegB(_^4PNmD d(ce@y^WEL6z&q{dc~PLz44$rjF6*2UngAY2J+J@( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/enchaddons/awesomemap/marker.png b/src/main/resources/assets/enchaddons/awesomemap/marker.png new file mode 100644 index 0000000000000000000000000000000000000000..429eaf0efb0c0cdea75d2c6463c19a801e2aaf8a GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJg Date: Sun, 13 Apr 2025 17:34:30 +0800 Subject: [PATCH 07/25] feat: finish basic map render rewritting in NanoVG --- .../feature/awesomemap/AwesomeMap.kt | 34 +- .../skymoe/enchaddons/impl/EnchAddonsImpl.kt | 2 + .../config/feature/AwesomeMapConfigImpl.kt | 11 + .../impl/feature/awesomemap/AwesomeMapHUD.kt | 32 ++ .../feature/awesomemap/AwesomeMapWidget.kt | 391 ++++++++++++++++ .../impl/feature/awesomemap/LRoomShape.kt | 37 ++ .../impl/feature/awesomemap/RectRoomShape.kt | 32 ++ .../impl/feature/awesomemap/RoomShape.kt | 38 ++ .../feature/awesomemap/UnknownRoomShape.kt | 13 + .../awesomemap/features/dungeon/MapRender.kt | 294 ------------ .../features/dungeon/MapRenderList.kt | 419 +++++++++--------- .../features/dungeon/ScoreCalculation.kt | 5 +- .../features/dungeon/WitherDoorESP.kt | 3 +- .../feature/awesomemap/ui/CornerButton.kt | 26 -- .../feature/awesomemap/ui/EditLocationGui.kt | 104 ----- .../impl/feature/awesomemap/ui/GuiRenderer.kt | 61 --- .../impl/feature/awesomemap/ui/MapElement.kt | 32 -- .../awesomemap/ui/MovableGuiElement.kt | 151 ------- .../feature/awesomemap/ui/ScoreElement.kt | 38 +- .../feature/awesomemap/utils/RenderUtils.kt | 417 ++++++----------- .../feature/awesomemap/utils/RenderUtils3D.kt | 152 +++++++ .../feature/awesomemap/utils/RenderUtilsGL.kt | 157 ------- .../awesomemap/utils/SimpleFontRenderer.kt | 166 ------- .../impl/oneconfig/NanoVGAccessor.kt | 65 +++ .../oneconfig/ciallo/NanoVGAccessorImpl.kt | 235 +++++++++- .../net/skymoe/enchaddons/util/StyledText.kt | 63 +++ 26 files changed, 1429 insertions(+), 1549 deletions(-) create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/AwesomeMapHUD.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/AwesomeMapWidget.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/LRoomShape.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/RectRoomShape.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/RoomShape.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/UnknownRoomShape.kt delete mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/CornerButton.kt delete mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/EditLocationGui.kt delete mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt delete mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MapElement.kt delete mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MovableGuiElement.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils3D.kt delete mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtilsGL.kt delete mode 100644 src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/SimpleFontRenderer.kt create mode 100644 src/main/kotlin/net/skymoe/enchaddons/util/StyledText.kt diff --git a/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt b/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt index 433197f..43447cc 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/feature/awesomemap/AwesomeMap.kt @@ -15,11 +15,9 @@ import net.skymoe.enchaddons.feature.ensureEnabled import net.skymoe.enchaddons.feature.ensureSkyBlockMode import net.skymoe.enchaddons.feature.featureInfo import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.* -import net.skymoe.enchaddons.impl.feature.awesomemap.ui.GuiRenderer import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils -import net.skymoe.enchaddons.impl.nanovg.GUIEvent import net.skymoe.enchaddons.util.MC import net.skymoe.enchaddons.util.scope.longrun import org.lwjgl.input.Keyboard @@ -35,7 +33,7 @@ object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { fun onKey(event: InputEvent.KeyInputEvent) { if (config.peekMode == 0 && toggleLegitKey.isPressed) { - MapRender.legitPeek = !MapRender.legitPeek +// MapRender.legitPeek = !MapRender.legitPeek } } @@ -43,12 +41,12 @@ object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { dispatcher.run { register { Dungeon - GuiRenderer +// GuiRenderer Location DungeonScan RenderUtils - MapRender - MapRenderList +// MapRender +// MapRenderList MapUpdate MimicDetector PlayerTracker @@ -70,13 +68,13 @@ object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { } if (config.peekMode == 1) { - MapRender.legitPeek = toggleLegitKey.isKeyDown +// MapRender.legitPeek = toggleLegitKey.isKeyDown } scope.launch { if (runningTick.getAndSet(true)) return@launch Dungeon.onTick() - GuiRenderer.onTick() +// GuiRenderer.onTick() Location.onTick() runningTick.value = false } @@ -94,14 +92,18 @@ object AwesomeMap : FeatureBase(AWESOME_MAP_INFO) { } } - register { event -> - longrun { - ensureEnabled() - ensureSkyBlockMode("dungeon") - - GuiRenderer.onOverlay(event) - } - } +// register { event -> +// longrun { +// ensureEnabled() +// ensureSkyBlockMode("dungeon") +// +// glStateScope { +// NanoVGHelper.INSTANCE.setupAndDraw { vg -> +// GuiRenderer.onOverlay(vg) +// } +// } +// } +// } register { event -> longrun { diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/EnchAddonsImpl.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/EnchAddonsImpl.kt index f03cc92..b9d2b63 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/EnchAddonsImpl.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/EnchAddonsImpl.kt @@ -15,6 +15,7 @@ import net.skymoe.enchaddons.impl.api.APIImpl import net.skymoe.enchaddons.impl.cache.ResourceCacheImpl import net.skymoe.enchaddons.impl.config.EnchAddonsConfig import net.skymoe.enchaddons.impl.event.EventDispatcherImpl +import net.skymoe.enchaddons.impl.feature.awesomemap.AwesomeMapHUD import net.skymoe.enchaddons.impl.feature.dynamickeybinding.DynamicKeyBindingHUD import net.skymoe.enchaddons.impl.feature.dynamicspot.DynamicSpotHUD import net.skymoe.enchaddons.impl.feature.invincibilitytimer.InvincibilityTimerHUD @@ -74,6 +75,7 @@ class EnchAddonsImpl : EnchAddons { FastDraft AwesomeMap + AwesomeMapHUD eventDispatcher.register { loadHypixelModAPI diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/config/feature/AwesomeMapConfigImpl.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/config/feature/AwesomeMapConfigImpl.kt index fae1376..1bef11c 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/config/feature/AwesomeMapConfigImpl.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/config/feature/AwesomeMapConfigImpl.kt @@ -5,7 +5,10 @@ import cc.polyfrost.oneconfig.config.annotations.Number import cc.polyfrost.oneconfig.config.core.OneColor import net.skymoe.enchaddons.feature.awesomemap.AWESOME_MAP_INFO import net.skymoe.enchaddons.feature.awesomemap.AwesomeMapConfig +import net.skymoe.enchaddons.impl.config.AdvancedHUD import net.skymoe.enchaddons.impl.config.ConfigImpl +import net.skymoe.enchaddons.impl.config.adapter.Extract +import net.skymoe.enchaddons.impl.config.gui.GUIBackground class AwesomeMapConfigImpl : ConfigImpl(AWESOME_MAP_INFO), @@ -732,4 +735,12 @@ class AwesomeMapConfigImpl : category = "Other Features", ) override var customPrefix = "" + + @Extract + var background = GUIBackground() + + @HUD( + name = "HUD", + ) + var hud = AdvancedHUD() } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/AwesomeMapHUD.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/AwesomeMapHUD.kt new file mode 100644 index 0000000..76c63f4 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/AwesomeMapHUD.kt @@ -0,0 +1,32 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap + +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.config.feature.AwesomeMapConfigImpl +import net.skymoe.enchaddons.impl.hud.FeatureHUDBase +import net.skymoe.enchaddons.impl.nanovg.Transformation +import net.skymoe.enchaddons.impl.nanovg.Widget +import net.skymoe.enchaddons.impl.oneconfig.NanoVGImageCache +import net.skymoe.enchaddons.util.math.Vec2D + +object AwesomeMapHUD : FeatureHUDBase(AwesomeMap, { config.hud }) { + override val width = 128.0 + override val height get() = if (config.mapShowRunInformation) 146.0 else 128.0 + + private val cache = NanoVGImageCache() + + override fun ensureShow() { + } + + override fun reset() { + cache.clear() + } + + override fun draw( + widgets: MutableList>, + box: Vec2D, + tr: Transformation, + ) { + config.background.addTo(AwesomeMapHUD.widgets, tr, size) + widgets.add(AwesomeMapWidget(cache, tr pos (Vec2D(0.0, 0.0)), tr size 1.0)) + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/AwesomeMapWidget.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/AwesomeMapWidget.kt new file mode 100644 index 0000000..ad35675 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/AwesomeMapWidget.kt @@ -0,0 +1,391 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap + +import net.minecraft.util.ResourceLocation +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.Dungeon +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.DungeonScan +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender +import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender.legitRender +import net.skymoe.enchaddons.impl.feature.awesomemap.ui.ScoreElement +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.darken +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.grayScale +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.itemID +import net.skymoe.enchaddons.impl.nanovg.NanoVGUIContext +import net.skymoe.enchaddons.impl.nanovg.Transformation +import net.skymoe.enchaddons.impl.nanovg.Widget +import net.skymoe.enchaddons.impl.oneconfig.NanoVGImageCache +import net.skymoe.enchaddons.impl.oneconfig.fontMedium +import net.skymoe.enchaddons.impl.oneconfig.loadFonts +import net.skymoe.enchaddons.impl.oneconfig.nvg +import net.skymoe.enchaddons.util.MC +import net.skymoe.enchaddons.util.math.Vec2D +import net.skymoe.enchaddons.util.math.double +import net.skymoe.enchaddons.util.math.float +import net.skymoe.enchaddons.util.toStyledSegments +import kotlin.math.PI + +class AwesomeMapWidget( + private val cache: NanoVGImageCache, + private val pos: Vec2D, + private val scale: Double, +) : Widget { + override fun draw(context: NanoVGUIContext) { +// if (AwesomeMap.config.mapRotate) { +// GlStateManager.pushMatrix() +// setupRotate() +// } else if (AwesomeMap.config.mapDynamicRotate) { +// GlStateManager.translate(64.0, 64.0, 0.0) +// GlStateManager.rotate(dynamicRotation, 0f, 0f, 1f) +// GlStateManager.translate(-64.0, -64.0, 0.0) +// } + + val tr = (Transformation() + pos) * scale + context.run { + drawMap(tr) + if (!Location.inBoss) { + drawPlayerHeads(tr) + } + if (AwesomeMap.config.mapShowRunInformation) { + drawRunInfo(tr) + } + } + +// if (AwesomeMap.config.mapRotate) { +// GL11.glDisable(GL11.GL_SCISSOR_TEST) +// GlStateManager.popMatrix() +// } else if (AwesomeMap.config.mapDynamicRotate) { +// GlStateManager.translate(64.0, 64.0, 0.0) +// GlStateManager.rotate(-dynamicRotation, 0f, 0f, 1f) +// GlStateManager.translate(-64.0, -64.0, 0.0) +// } + } + + // fun setupRotate() { +// val scale = ScaledResolution(MC).scaleFactor +// GL11.glEnable(GL11.GL_SCISSOR_TEST) +// GL11.glScissor( +// (AwesomeMap.config.mapX * scale), +// (MC.displayHeight - AwesomeMap.config.mapY * scale - 128 * scale * AwesomeMap.config.mapScale).toInt(), +// (128 * scale * AwesomeMap.config.mapScale).toInt(), +// (128 * scale * AwesomeMap.config.mapScale).toInt(), +// ) +// GlStateManager.translate(64.0, 64.0, 0.0) +// GlStateManager.rotate(-MC.thePlayer.rotationYaw + 180f, 0f, 0f, 1f) +// +// if (AwesomeMap.config.mapCenter) { +// GlStateManager.translate( +// -((MC.thePlayer.posX - DungeonScan.START_X + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.first - 2), +// -((MC.thePlayer.posZ - DungeonScan.START_Z + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.second - 2), +// 0.0, +// ) +// } else { +// GlStateManager.translate(-64.0, -64.0, 0.0) +// } +// } + + private fun NanoVGUIContext.drawMap(tr: Transformation) { + val ttr = + tr + + Vec2D( + MapUtils.startCorner.first.double + 1, + MapUtils.startCorner.second.double + 1, + ) + + val uniqueRooms = mutableSetOf() + val doors = mutableSetOf>>() + + for (y in 0..10) { + for (x in 0..10) { + val tile = Dungeon.Info.dungeonList[y * 11 + x] + if (tile is Unknown) continue + if (MapRender.legitRender && tile.state == RoomState.UNDISCOVERED) continue + if (tile is Room) tile.uniqueRoom?.also(uniqueRooms::add) + if (tile is Door) doors.add(tile to (x to y)) + } + } + + doors.forEach { (door, pos) -> + val (x, y) = pos + val yEven = y and 1 == 0 + val xOffset = (x shr 1) * (MapUtils.roomSize + MapUtils.connectorSize) + val yOffset = (y shr 1) * (MapUtils.roomSize + MapUtils.connectorSize) + val doorwayOffset = if (MapUtils.roomSize == 16) 5 else 6 + val width = 6 + var x1 = if (yEven) xOffset + MapUtils.roomSize else xOffset + var y1 = if (yEven) yOffset else yOffset + MapUtils.roomSize + if (yEven) y1 += doorwayOffset else x1 += doorwayOffset + helper.drawRect( + vg, + (ttr posX x1.double).float, + (ttr posY y1.double).float, + (ttr size (if (yEven) MapUtils.connectorSize else width).double).float, + (ttr size (if (yEven) width else MapUtils.connectorSize).double).float, + getTileColor(door), + ) + } + + uniqueRooms.forEach { uniqueRoom -> + uniqueRoom.roomShape.draw(this, ttr, getTileColor(uniqueRoom.mainRoom)) + if (legitRender && uniqueRoom.mainRoom.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED)) return@forEach + val checkPos = uniqueRoom.getCheckmarkPosition() + val namePos = uniqueRoom.getNamePosition() + val xOffsetCheck = (checkPos.first / 2f) * (MapUtils.roomSize + MapUtils.connectorSize) + val yOffsetCheck = (checkPos.second / 2f) * (MapUtils.roomSize + MapUtils.connectorSize) + val xOffsetName = (namePos.first / 2f) * (MapUtils.roomSize + MapUtils.connectorSize) + val yOffsetName = (namePos.second / 2f) * (MapUtils.roomSize + MapUtils.connectorSize) + +// if (AwesomeMap.config.mapCheckmark != 0 && AwesomeMap.config.mapRoomSecrets != 2) { +// RenderUtils.drawCheckmark(xOffsetCheck, yOffsetCheck, uniqueRoom.mainRoom.state) +// } + + val color = + ( + if (AwesomeMap.config.mapColorText) { + when (uniqueRoom.mainRoom.state) { + RoomState.GREEN -> AwesomeMap.config.colorTextGreen + RoomState.CLEARED -> AwesomeMap.config.colorTextCleared + RoomState.FAILED -> AwesomeMap.config.colorTextFailed + else -> AwesomeMap.config.colorTextUncleared + } + } else { + AwesomeMap.config.colorTextCleared + } + ).rgb + +// if (AwesomeMap.config.mapRotate) { +// GlStateManager.rotate(MC.thePlayer.rotationYaw + 180f, 0f, 0f, 1f) +// } else if (AwesomeMap.config.mapDynamicRotate) { +// GlStateManager.rotate(-MapRender.dynamicRotation, 0f, 0f, 1f) +// } + + if (AwesomeMap.config.mapRoomSecrets == 2) { + nvg.drawTextSegments( + vg, + "${uniqueRoom.mainRoom.data.secrets}".toStyledSegments(), + ttr posX (xOffsetName + MapUtils.halfRoomSize).double, + ttr posY (yOffsetName + MapUtils.halfRoomSize + 6 * AwesomeMap.config.textScale).double, + ttr size 16.0 * AwesomeMap.config.textScale, + fontMedium(), + color = color, + anchor = Vec2D(0.5, 0.0), + ) + } + + val name = mutableListOf() + + if (AwesomeMap.config.mapRoomNames != 0 && + uniqueRoom.mainRoom.data.type.equalsOneOf( + RoomType.PUZZLE, + RoomType.TRAP, + ) || + AwesomeMap.config.mapRoomNames == 2 && + uniqueRoom.mainRoom.data.type.equalsOneOf( + RoomType.NORMAL, + RoomType.RARE, + RoomType.CHAMPION, + ) + ) { + name.addAll( + uniqueRoom.mainRoom.data.name + .split(" "), + ) + } + + if (uniqueRoom.mainRoom.data.type == RoomType.NORMAL && AwesomeMap.config.mapRoomSecrets == 1) { + name.add( + uniqueRoom.mainRoom.data.secrets + .toString(), + ) + } + + name.forEachIndexed { i, it -> + val size = AwesomeMap.config.textScale * 8.0 + nvg.drawTextSegments( + vg, + it.toStyledSegments(), + ttr posX (xOffsetName + MapUtils.halfRoomSize).double, + ttr posY (yOffsetName + MapUtils.halfRoomSize).double - size * name.size / 2 + size * (i + 0.875), + ttr size size, + fontMedium(), + color = color, + anchor = Vec2D(0.5, 0.0), + ) + } + +// if (AwesomeMap.config.mapDynamicRotate) { +// GlStateManager.rotate(MapRender.dynamicRotation, 0f, 0f, 1f) +// } + } + } + + private fun getTileColor(tile: Tile): Int { + var color = tile.color + if (tile.state.equalsOneOf( + RoomState.UNDISCOVERED, + RoomState.UNOPENED, + ) && + !MapRender.legitRender && + Dungeon.Info.startTime != 0L + ) { + if (AwesomeMap.config.mapDarkenUndiscovered) { + color = color.darken(1 - AwesomeMap.config.mapDarkenPercent) + } + if (AwesomeMap.config.mapGrayUndiscovered) { + color = color.grayScale() + } + } + return color.rgb + } + + private fun NanoVGUIContext.drawPlayerHeads(tr: Transformation) { + try { + if (Dungeon.dungeonTeammates.isEmpty()) { + drawPlayerHead( + tr, + MC.thePlayer.name, + DungeonPlayer(MC.thePlayer.locationSkin).apply { + yaw = MC.thePlayer.rotationYaw + }, + ) + } else { + Dungeon.dungeonTeammates.forEach { (name, teammate) -> + if (!teammate.dead) { + drawPlayerHead(tr, name, teammate) + } + } + } + } catch (_: ConcurrentModificationException) { + } + } + + private fun NanoVGUIContext.drawPlayerHead( + tr: Transformation, + name: String, + player: DungeonPlayer, + ) { + nvg.save(vg) + nvg.translate(vg, tr.offset) + nvg.scale(vg, Vec2D(tr.scale, tr.scale)) + nvg.translate(vg, Vec2D(1.0, 1.0)) + try { + // Translates to the player's location which is updated every tick. + if (player.isPlayer || name == MC.thePlayer.name) { + nvg.translate( + vg, + Vec2D( + (MC.thePlayer.posX - DungeonScan.START_X + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.first, + (MC.thePlayer.posZ - DungeonScan.START_Z + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.second, + ), + ) + } else { + nvg.translate(vg, Vec2D(player.mapX.toFloat(), player.mapZ.toFloat())) + } + + // Apply head rotation and scaling + nvg.rotate(vg, (player.yaw + 180.0) * PI / 180.0) + nvg.scale(vg, Vec2D(1 / tr.scale, 1 / tr.scale)) + val ttr = Transformation() * tr.scale * AwesomeMap.config.playerHeadScale.double + + if (AwesomeMap.config.mapVanillaMarker && (player.isPlayer || name == MC.thePlayer.name)) { + nvg.drawRoundedTexture( + vg, + cache["marker"], + MC.textureManager.getTexture(ResourceLocation("funnymap", "marker.png")).glTextureId, + 0.0, + 0.0, + 1.0, + 1.0, + ttr posX -6.0, + ttr posY -6.0, + ttr size 12.0, + ttr size 12.0, + 1.0, + ttr size 0.0, + ) + } else { +// // Render black border around the player head +// renderRectBorder(-6.0, -6.0, 12.0, 12.0, 1.0, Color(0, 0, 0, 255)) + nvg.drawRoundedPlayerAvatar( + vg, + cache[player.uuid], + MC.textureManager.getTexture(player.skin).glTextureId, + hat = true, + scaleHat = true, + ttr posX -6.0, + ttr posY -6.0, + ttr size 12.0, + ttr size 12.0, + 1.0, + ttr size 2.0, // TODO + ) + } + + // Handle player names + if (AwesomeMap.config.playerHeads == 2 || + AwesomeMap.config.playerHeads == 1 && + MC.thePlayer.heldItem?.itemID.equalsOneOf( + "SPIRIT_LEAP", + "INFINITE_SPIRIT_LEAP", + "HAUNT_ABILITY", + ) + ) { +// if (!AwesomeMap.config.mapRotate) { +// GlStateManager.rotate(-player.yaw + 180f, 0f, 0f, 1f) +// } + nvg.drawTextSegments( + vg, + name.toStyledSegments(), + ttr posX 0.0, + ttr posY 10.0, + ttr size 8.0 * AwesomeMap.config.playerNameScale, + fontMedium(), + anchor = Vec2D(0.5, 0.0), + shadow = Vec2D(1 / 16.0, 1 / 16.0) to 0.25, + ) + } + } catch (e: Exception) { + e.printStackTrace() + } + nvg.restore(vg) + } + + private fun NanoVGUIContext.drawRunInfo(tr: Transformation) { + nvg.loadFonts(vg) + val ttr = tr + Vec2D(64.0, 134.0) + val lines = ScoreElement.runInformationLines() + val lineOne = lines.takeWhile { it != "split" }.joinToString(separator = " ") + val lineTwo = lines.takeLastWhile { it != "split" }.joinToString(separator = " ") + nvg.drawTextSegments( + vg, + lineOne.toStyledSegments(), + ttr posX 0.0, + ttr posY 0.0, + ttr size 8.0, + fontMedium(), + anchor = Vec2D(0.5, 0.0), + shadow = Vec2D(1 / 16.0, 1 / 16.0) to 0.25, + ) + nvg.drawTextSegments( + vg, + lineTwo.toStyledSegments(), + ttr posX 0.0, + ttr posY 9.0, + ttr size 8.0, + fontMedium(), + anchor = Vec2D(0.5, 0.0), + shadow = Vec2D(1 / 16.0, 1 / 16.0) to 0.25, + ) + } + + override fun alphaScale(alpha: Double): AwesomeMapWidget = this // TODO + + override fun scale( + scale: Double, + origin: Vec2D, + ): AwesomeMapWidget = this // TODO +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/LRoomShape.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/LRoomShape.kt new file mode 100644 index 0000000..4d77d1f --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/LRoomShape.kt @@ -0,0 +1,37 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap + +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils +import net.skymoe.enchaddons.impl.nanovg.NanoVGUIContext +import net.skymoe.enchaddons.impl.nanovg.Transformation +import net.skymoe.enchaddons.impl.oneconfig.nvg +import net.skymoe.enchaddons.util.math.double + +data class LRoomShape( + val x: Int, + val y: Int, + val width: Int, + val height: Int, + val corner: Int, +) : RoomShape { + override fun draw( + context: NanoVGUIContext, + tr: Transformation, + color: Int, + ) { + context.run { + nvg.drawAccarc( + vg, + corner, + tr posX (x shr 1) * (MapUtils.roomSize + MapUtils.connectorSize).double, + tr posY (y shr 1) * (MapUtils.roomSize + MapUtils.connectorSize).double, + tr size width.double * (MapUtils.roomSize + MapUtils.connectorSize) - MapUtils.connectorSize, + tr size height.double * (MapUtils.roomSize + MapUtils.connectorSize) - MapUtils.connectorSize, + tr size MapUtils.roomSize.double, + tr size MapUtils.roomSize.double, + tr size 4.0, // TODO + tr size 2.0, // TODO + color, + ) + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/RectRoomShape.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/RectRoomShape.kt new file mode 100644 index 0000000..0be14c7 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/RectRoomShape.kt @@ -0,0 +1,32 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap + +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils +import net.skymoe.enchaddons.impl.nanovg.NanoVGUIContext +import net.skymoe.enchaddons.impl.nanovg.Transformation +import net.skymoe.enchaddons.util.math.double +import net.skymoe.enchaddons.util.math.float + +data class RectRoomShape( + val x: Int, + val y: Int, + val width: Int, + val height: Int, +) : RoomShape { + override fun draw( + context: NanoVGUIContext, + tr: Transformation, + color: Int, + ) { + context.run { + helper.drawRoundedRect( + vg, + (tr posX (x shr 1) * (MapUtils.roomSize + MapUtils.connectorSize).double).float, + (tr posY (y shr 1) * (MapUtils.roomSize + MapUtils.connectorSize).double).float, + (tr size width.double * (MapUtils.roomSize + MapUtils.connectorSize) - MapUtils.connectorSize).float, + (tr size height.double * (MapUtils.roomSize + MapUtils.connectorSize) - MapUtils.connectorSize).float, + color, + (tr size 4.0).float, // TODO + ) + } + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/RoomShape.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/RoomShape.kt new file mode 100644 index 0000000..20a0423 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/RoomShape.kt @@ -0,0 +1,38 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap + +import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.UniqueRoom +import net.skymoe.enchaddons.impl.nanovg.NanoVGUIContext +import net.skymoe.enchaddons.impl.nanovg.Transformation + +interface RoomShape { + fun draw( + context: NanoVGUIContext, + tr: Transformation, + color: Int, + ) +} + +val UniqueRoom.roomShape: RoomShape get() { + val minX = tiles.minOf { it.second.first } + val maxX = tiles.maxOf { it.second.first } + val minY = tiles.minOf { it.second.second } + val maxY = tiles.maxOf { it.second.second } + val w = (maxX - minX) / 2 + 1 + val h = (maxY - minY) / 2 + 1 + val nw = minX to minY + val ne = maxX to minY + val sw = minX to maxY + val se = maxX to maxY + val nwp = tiles.any { it.second == nw } + val nep = tiles.any { it.second == ne } + val swp = tiles.any { it.second == sw } + val sep = tiles.any { it.second == se } + return when { + nwp && nep && swp && sep -> RectRoomShape(minX, minY, w, h) + nwp && nep && swp && !sep -> LRoomShape(minX, minY, w, h, 0) + nwp && nep && !swp && sep -> LRoomShape(minX, minY, w, h, 1) + !nwp && nep && swp && sep -> LRoomShape(minX, minY, w, h, 2) + nwp && !nep && swp && sep -> LRoomShape(minX, minY, w, h, 3) + else -> UnknownRoomShape + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/UnknownRoomShape.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/UnknownRoomShape.kt new file mode 100644 index 0000000..669887d --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/UnknownRoomShape.kt @@ -0,0 +1,13 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap + +import net.skymoe.enchaddons.impl.nanovg.NanoVGUIContext +import net.skymoe.enchaddons.impl.nanovg.Transformation + +object UnknownRoomShape : RoomShape { + override fun draw( + context: NanoVGUIContext, + tr: Transformation, + color: Int, + ) { + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt index ba25a1b..a411a3c 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRender.kt @@ -1,23 +1,6 @@ package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon -import net.minecraft.client.gui.ScaledResolution -import net.minecraft.client.renderer.GlStateManager import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap -import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer -import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.* -import net.skymoe.enchaddons.impl.feature.awesomemap.ui.ScoreElement -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inBoss -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.connectorSize -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.halfRoomSize -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.roomSize -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.darken -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.grayScale -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf -import net.skymoe.enchaddons.util.MC -import org.lwjgl.opengl.GL11 -import java.awt.Color object MapRender { var dynamicRotation = 0f @@ -31,281 +14,4 @@ object MapRender { val legitRender: Boolean get() = AwesomeMap.config.legitMode && !legitPeek - - fun renderMap() { - RenderUtils.renderRect( - 0.0, - 0.0, - 128.0, - if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, - AwesomeMap.config.mapBackground.toJavaColor(), - ) - - RenderUtils.renderRectBorder( - 0.0, - 0.0, - 128.0, - if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, - AwesomeMap.config.mapBorderWidth.toDouble(), - AwesomeMap.config.mapBorder.toJavaColor(), - ) - - if (AwesomeMap.config.mapRotate) { - GlStateManager.pushMatrix() - setupRotate() - } else if (AwesomeMap.config.mapDynamicRotate) { - GlStateManager.translate(64.0, 64.0, 0.0) - GlStateManager.rotate(dynamicRotation, 0f, 0f, 1f) - GlStateManager.translate(-64.0, -64.0, 0.0) - } - - renderRooms() - renderText() - if (!inBoss) { - renderPlayerHeads() - } - - if (AwesomeMap.config.mapRotate) { - GL11.glDisable(GL11.GL_SCISSOR_TEST) - GlStateManager.popMatrix() - } else if (AwesomeMap.config.mapDynamicRotate) { - GlStateManager.translate(64.0, 64.0, 0.0) - GlStateManager.rotate(-dynamicRotation, 0f, 0f, 1f) - GlStateManager.translate(-64.0, -64.0, 0.0) - } - - if (AwesomeMap.config.mapShowRunInformation) { - renderRunInformation() - } - } - - fun setupRotate() { - val scale = ScaledResolution(MC).scaleFactor - GL11.glEnable(GL11.GL_SCISSOR_TEST) - GL11.glScissor( - (AwesomeMap.config.mapX * scale), - (MC.displayHeight - AwesomeMap.config.mapY * scale - 128 * scale * AwesomeMap.config.mapScale).toInt(), - (128 * scale * AwesomeMap.config.mapScale).toInt(), - (128 * scale * AwesomeMap.config.mapScale).toInt(), - ) - GlStateManager.translate(64.0, 64.0, 0.0) - GlStateManager.rotate(-MC.thePlayer.rotationYaw + 180f, 0f, 0f, 1f) - - if (AwesomeMap.config.mapCenter) { - GlStateManager.translate( - -((MC.thePlayer.posX - DungeonScan.START_X + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.first - 2), - -((MC.thePlayer.posZ - DungeonScan.START_Z + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.second - 2), - 0.0, - ) - } else { - GlStateManager.translate(-64.0, -64.0, 0.0) - } - } - - private fun renderRooms() { - GlStateManager.pushMatrix() - GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) - - for (y in 0..10) { - for (x in 0..10) { - val tile = Dungeon.Info.dungeonList[y * 11 + x] - if (tile is Unknown) continue - if (legitRender && tile.state == RoomState.UNDISCOVERED) continue - - val xOffset = (x shr 1) * (roomSize + connectorSize) - val yOffset = (y shr 1) * (roomSize + connectorSize) - - val xEven = x and 1 == 0 - val yEven = y and 1 == 0 - - var color = tile.color - - if (tile.state.equalsOneOf( - RoomState.UNDISCOVERED, - RoomState.UNOPENED, - ) && - !legitRender && - Dungeon.Info.startTime != 0L - ) { - if (AwesomeMap.config.mapDarkenUndiscovered) { - color = color.darken(1 - AwesomeMap.config.mapDarkenPercent) - } - if (AwesomeMap.config.mapGrayUndiscovered) { - color = color.grayScale() - } - } - - when { - xEven && yEven -> - if (tile is Room) { - RenderUtils.renderRect( - xOffset, - yOffset, - roomSize, - roomSize, - color, - ) - - if (legitRender && tile.state == RoomState.UNOPENED) { - RenderUtils.drawCheckmark(xOffset.toFloat(), yOffset.toFloat(), tile.state) - } - } - - !xEven && !yEven -> { - RenderUtils.renderRect( - xOffset, - yOffset, - (roomSize + connectorSize), - (roomSize + connectorSize), - color, - ) - } - - else -> - drawRoomConnector( - xOffset, - yOffset, - connectorSize, - tile is Door, - !xEven, - color, - ) - } - } - } - GlStateManager.popMatrix() - } - - private fun renderText() { - GlStateManager.pushMatrix() - GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) - - Dungeon.Info.uniqueRooms.forEach { unique -> - val room = unique.mainRoom - if (legitRender && room.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED)) return@forEach - val checkPos = unique.getCheckmarkPosition() - val namePos = unique.getNamePosition() - val xOffsetCheck = (checkPos.first / 2f) * (roomSize + connectorSize) - val yOffsetCheck = (checkPos.second / 2f) * (roomSize + connectorSize) - val xOffsetName = (namePos.first / 2f) * (roomSize + connectorSize) - val yOffsetName = (namePos.second / 2f) * (roomSize + connectorSize) - - if (AwesomeMap.config.mapCheckmark != 0 && AwesomeMap.config.mapRoomSecrets != 2) { - RenderUtils.drawCheckmark(xOffsetCheck, yOffsetCheck, room.state) - } - - val color = - ( - if (AwesomeMap.config.mapColorText) { - when (room.state) { - RoomState.GREEN -> AwesomeMap.config.colorTextGreen - RoomState.CLEARED -> AwesomeMap.config.colorTextCleared - RoomState.FAILED -> AwesomeMap.config.colorTextFailed - else -> AwesomeMap.config.colorTextUncleared - } - } else { - AwesomeMap.config.colorTextCleared - } - ).rgb - - if (AwesomeMap.config.mapRoomSecrets == 2) { - GlStateManager.pushMatrix() - GlStateManager.translate( - xOffsetCheck + halfRoomSize, - yOffsetCheck + 2 + halfRoomSize, - 0f, - ) - GlStateManager.scale(2f, 2f, 1f) - RenderUtils.renderCenteredText(listOf(room.data.secrets.toString()), 0, 0, color) - GlStateManager.popMatrix() - } - - val name = mutableListOf() - - if (AwesomeMap.config.mapRoomNames != 0 && - room.data.type.equalsOneOf( - RoomType.PUZZLE, - RoomType.TRAP, - ) || - AwesomeMap.config.mapRoomNames == 2 && - room.data.type.equalsOneOf( - RoomType.NORMAL, - RoomType.RARE, - RoomType.CHAMPION, - ) - ) { - name.addAll(room.data.name.split(" ")) - } - if (room.data.type == RoomType.NORMAL && AwesomeMap.config.mapRoomSecrets == 1) { - name.add(room.data.secrets.toString()) - } - // Offset + half of roomsize - RenderUtils.renderCenteredText( - name, - xOffsetName.toInt() + halfRoomSize, - yOffsetName.toInt() + halfRoomSize, - color, - ) - } - GlStateManager.popMatrix() - } - - fun renderPlayerHeads() { - try { - if (Dungeon.dungeonTeammates.isEmpty()) { - RenderUtils.drawPlayerHead( - MC.thePlayer.name, - DungeonPlayer(MC.thePlayer.locationSkin).apply { - yaw = MC.thePlayer.rotationYaw - }, - ) - } else { - Dungeon.dungeonTeammates.forEach { (name, teammate) -> - if (!teammate.dead) { - RenderUtils.drawPlayerHead(name, teammate) - } - } - } - } catch (_: ConcurrentModificationException) { - } - } - - private fun drawRoomConnector( - x: Int, - y: Int, - doorWidth: Int, - doorway: Boolean, - vertical: Boolean, - color: Color, - ) { - val doorwayOffset = if (roomSize == 16) 5 else 6 - val width = if (doorway) 6 else roomSize - var x1 = if (vertical) x + roomSize else x - var y1 = if (vertical) y else y + roomSize - if (doorway) { - if (vertical) y1 += doorwayOffset else x1 += doorwayOffset - } - RenderUtils.renderRect( - x1, - y1, - if (vertical) doorWidth else width, - if (vertical) width else doorWidth, - color, - ) - } - - fun renderRunInformation() { - GlStateManager.pushMatrix() - GlStateManager.translate(64f, 128f, 0f) - GlStateManager.scale(2.0 / 3.0, 2.0 / 3.0, 1.0) - val lines = ScoreElement.runInformationLines() - - val lineOne = lines.takeWhile { it != "split" }.joinToString(separator = " ") - val lineTwo = lines.takeLastWhile { it != "split" }.joinToString(separator = " ") - - MC.fontRendererObj.drawString(lineOne, -MC.fontRendererObj.getStringWidth(lineOne) / 2f, 0f, 0xffffff, true) - MC.fontRendererObj.drawString(lineTwo, -MC.fontRendererObj.getStringWidth(lineTwo) / 2f, 9f, 0xffffff, true) - - GlStateManager.popMatrix() - } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt index 9c856dd..8f8645f 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MapRenderList.kt @@ -13,7 +13,6 @@ import net.skymoe.enchaddons.impl.feature.awesomemap.utils.MapUtils.roomSize import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.darken import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.grayScale -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtilsGL import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf import org.lwjgl.opengl.GL11 @@ -22,213 +21,213 @@ object MapRenderList { private var borderGlList = -1 private var roomGlList = -1 - fun updateRenderMap() { - if (borderGlList == -1) { - borderGlList = GL11.glGenLists(1) - GL11.glNewList(borderGlList, GL11.GL_COMPILE) - RenderUtilsGL.renderRect( - 0.0, - 0.0, - 128.0, - if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, - AwesomeMap.config.mapBackground.toJavaColor(), - ) - RenderUtilsGL.renderRectBorder( - 0.0, - 0.0, - 128.0, - if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, - AwesomeMap.config.mapBorderWidth.toDouble(), - AwesomeMap.config.mapBorder.toJavaColor(), - ) - GL11.glEndList() - } - - if (renderUpdated && AwesomeMap.config.renderBeta) { - if (roomGlList >= 0) { - GL11.glDeleteLists(roomGlList, 1) - roomGlList = -1 - } - roomGlList = GL11.glGenLists(1) - renderUpdated = false - - GL11.glNewList(roomGlList, GL11.GL_COMPILE) - renderRooms() - renderText() - GL11.glEndList() - } - } - - fun renderMap() { - if (roomGlList == -1 || borderGlList == -1 || renderUpdated) { - updateRenderMap() - } - - GlStateManager.pushMatrix() - RenderUtils.preDraw() - RenderUtilsGL.preDraw() - - if (borderGlList != -1) GL11.glCallList(borderGlList) - - if (AwesomeMap.config.mapRotate) { - GlStateManager.pushMatrix() - MapRender.setupRotate() - } else if (AwesomeMap.config.mapDynamicRotate) { - GlStateManager.translate(64.0, 64.0, 0.0) - GlStateManager.rotate(dynamicRotation, 0f, 0f, 1f) - GlStateManager.translate(-64.0, -64.0, 0.0) - } - - if (roomGlList != -1) GL11.glCallList(roomGlList) - - RenderUtilsGL.unbindTexture() - RenderUtils.postDraw() - RenderUtilsGL.postDraw() - GlStateManager.popMatrix() - - if (!inBoss) { - MapRender.renderPlayerHeads() - } - - if (AwesomeMap.config.mapRotate) { - GL11.glDisable(GL11.GL_SCISSOR_TEST) - GlStateManager.popMatrix() - } else if (AwesomeMap.config.mapDynamicRotate) { - GlStateManager.translate(64.0, 64.0, 0.0) - GlStateManager.rotate(-dynamicRotation, 0f, 0f, 1f) - GlStateManager.translate(-64.0, -64.0, 0.0) - } - - if (AwesomeMap.config.mapShowRunInformation) { - MapRender.renderRunInformation() - } - } - - private fun renderRooms() { - GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) - - var yPos = 0 - var yStep = 0 - - for (y in 0..10) { - val yEven = y % 2 == 0 - yPos += yStep - yStep = if (yEven) roomSize else connectorSize - var xPos = 0 - var xStep = 0 - for (x in 0..10) { - val xEven = x % 2 == 0 - xPos += xStep - xStep = if (xEven) roomSize else connectorSize - - val tile = Dungeon.Info.dungeonList[y * 11 + x] - if (tile is Unknown) continue - if (legitRender && tile.state == RoomState.UNDISCOVERED) continue - - var color = tile.color - - if (tile.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED) && - !legitRender && - Dungeon.Info.startTime != 0L - ) { - if (AwesomeMap.config.mapDarkenUndiscovered) { - color = color.darken(1 - AwesomeMap.config.mapDarkenPercent) - } - if (AwesomeMap.config.mapGrayUndiscovered) { - color = color.grayScale() - } - } - - when (tile) { - is Room -> { - RenderUtilsGL.renderRect(xPos, yPos, xStep, yStep, color) - if (legitRender && tile.state == RoomState.UNOPENED) { - RenderUtilsGL.drawCheckmark(xPos.toFloat(), yPos.toFloat(), tile.state) - } - } - - is Door -> { - val doorOffset = if (roomSize == 16) 5 else 6 - if (xEven) { - RenderUtilsGL.renderRect(xPos + doorOffset, yPos, xStep - doorOffset * 2, yStep, color) - } else { - RenderUtilsGL.renderRect(xPos, yPos + doorOffset, xStep, yStep - doorOffset * 2, color) - } - } - } - } - } - GlStateManager.translate(-MapUtils.startCorner.first.toFloat(), -MapUtils.startCorner.second.toFloat(), 0f) - } - - private fun renderText() { - GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) - - Dungeon.Info.uniqueRooms.forEach { unique -> - val room = unique.mainRoom - if (legitRender && room.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED)) return@forEach - val checkPos = unique.getCheckmarkPosition() - val namePos = unique.getNamePosition() - val xPosCheck = (checkPos.first / 2f) * (roomSize + connectorSize) - val yPosCheck = (checkPos.second / 2f) * (roomSize + connectorSize) - val xPosName = (namePos.first / 2f) * (roomSize + connectorSize) - val yPosName = (namePos.second / 2f) * (roomSize + connectorSize) - - if (AwesomeMap.config.mapCheckmark != 0 && AwesomeMap.config.mapRoomSecrets != 2) { - RenderUtilsGL.drawCheckmark(xPosCheck, yPosCheck, room.state) - } - - val color = - if (AwesomeMap.config.mapColorText) { - when (room.state) { - RoomState.GREEN -> AwesomeMap.config.colorTextGreen - RoomState.CLEARED -> AwesomeMap.config.colorTextCleared - RoomState.FAILED -> AwesomeMap.config.colorTextFailed - else -> AwesomeMap.config.colorTextUncleared - } - } else { - AwesomeMap.config.colorTextCleared - } - - if (AwesomeMap.config.mapRoomSecrets == 2) { - GlStateManager.pushMatrix() - GlStateManager.translate( - xPosCheck + halfRoomSize, - yPosCheck + 2 + halfRoomSize, - 0f, - ) - GlStateManager.scale(2f, 2f, 1f) - RenderUtilsGL.renderCenteredText(listOf(room.data.secrets.toString()), 0, 0, color.toJavaColor()) - GlStateManager.popMatrix() - } - - val name = mutableListOf() - - if (AwesomeMap.config.mapRoomNames != 0 && - room.data.type.equalsOneOf( - RoomType.PUZZLE, - RoomType.TRAP, - ) || - AwesomeMap.config.mapRoomNames == 2 && - room.data.type.equalsOneOf( - RoomType.NORMAL, - RoomType.RARE, - RoomType.CHAMPION, - ) - ) { - name.addAll(room.data.name.split(" ")) - } - if (room.data.type == RoomType.NORMAL && AwesomeMap.config.mapRoomSecrets == 1) { - name.add(room.data.secrets.toString()) - } - // Offset + half of roomsize - RenderUtilsGL.renderCenteredText( - name, - xPosName.toInt() + halfRoomSize, - yPosName.toInt() + halfRoomSize, - color.toJavaColor(), - ) - } - GlStateManager.translate(-MapUtils.startCorner.first.toFloat(), -MapUtils.startCorner.second.toFloat(), 0f) - } +// fun updateRenderMap() { +// if (borderGlList == -1) { +// borderGlList = GL11.glGenLists(1) +// GL11.glNewList(borderGlList, GL11.GL_COMPILE) +// RenderUtilsGL.renderRect( +// 0.0, +// 0.0, +// 128.0, +// if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, +// AwesomeMap.config.mapBackground.toJavaColor(), +// ) +// RenderUtilsGL.renderRectBorder( +// 0.0, +// 0.0, +// 128.0, +// if (AwesomeMap.config.mapShowRunInformation) 142.0 else 128.0, +// AwesomeMap.config.mapBorderWidth.toDouble(), +// AwesomeMap.config.mapBorder.toJavaColor(), +// ) +// GL11.glEndList() +// } +// +// if (renderUpdated && AwesomeMap.config.renderBeta) { +// if (roomGlList >= 0) { +// GL11.glDeleteLists(roomGlList, 1) +// roomGlList = -1 +// } +// roomGlList = GL11.glGenLists(1) +// renderUpdated = false +// +// GL11.glNewList(roomGlList, GL11.GL_COMPILE) +// renderRooms() +// renderText() +// GL11.glEndList() +// } +// } +// +// fun renderMap() { +// if (roomGlList == -1 || borderGlList == -1 || renderUpdated) { +// updateRenderMap() +// } +// +// GlStateManager.pushMatrix() +// RenderUtils.preDraw() +// RenderUtilsGL.preDraw() +// +// if (borderGlList != -1) GL11.glCallList(borderGlList) +// +// if (AwesomeMap.config.mapRotate) { +// GlStateManager.pushMatrix() +// MapRender.setupRotate() +// } else if (AwesomeMap.config.mapDynamicRotate) { +// GlStateManager.translate(64.0, 64.0, 0.0) +// GlStateManager.rotate(dynamicRotation, 0f, 0f, 1f) +// GlStateManager.translate(-64.0, -64.0, 0.0) +// } +// +// if (roomGlList != -1) GL11.glCallList(roomGlList) +// +// RenderUtilsGL.unbindTexture() +// RenderUtils.postDraw() +// RenderUtilsGL.postDraw() +// GlStateManager.popMatrix() +// +// if (!inBoss) { +// MapRender.renderPlayerHeads() +// } +// +// if (AwesomeMap.config.mapRotate) { +// GL11.glDisable(GL11.GL_SCISSOR_TEST) +// GlStateManager.popMatrix() +// } else if (AwesomeMap.config.mapDynamicRotate) { +// GlStateManager.translate(64.0, 64.0, 0.0) +// GlStateManager.rotate(-dynamicRotation, 0f, 0f, 1f) +// GlStateManager.translate(-64.0, -64.0, 0.0) +// } +// +// if (AwesomeMap.config.mapShowRunInformation) { +// MapRender.renderRunInformation() +// } +// } +// +// private fun renderRooms() { +// GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) +// +// var yPos = 0 +// var yStep = 0 +// +// for (y in 0..10) { +// val yEven = y % 2 == 0 +// yPos += yStep +// yStep = if (yEven) roomSize else connectorSize +// var xPos = 0 +// var xStep = 0 +// for (x in 0..10) { +// val xEven = x % 2 == 0 +// xPos += xStep +// xStep = if (xEven) roomSize else connectorSize +// +// val tile = Dungeon.Info.dungeonList[y * 11 + x] +// if (tile is Unknown) continue +// if (legitRender && tile.state == RoomState.UNDISCOVERED) continue +// +// var color = tile.color +// +// if (tile.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED) && +// !legitRender && +// Dungeon.Info.startTime != 0L +// ) { +// if (AwesomeMap.config.mapDarkenUndiscovered) { +// color = color.darken(1 - AwesomeMap.config.mapDarkenPercent) +// } +// if (AwesomeMap.config.mapGrayUndiscovered) { +// color = color.grayScale() +// } +// } +// +// when (tile) { +// is Room -> { +// RenderUtilsGL.renderRect(xPos, yPos, xStep, yStep, color) +// if (legitRender && tile.state == RoomState.UNOPENED) { +// RenderUtilsGL.drawCheckmark(xPos.toFloat(), yPos.toFloat(), tile.state) +// } +// } +// +// is Door -> { +// val doorOffset = if (roomSize == 16) 5 else 6 +// if (xEven) { +// RenderUtilsGL.renderRect(xPos + doorOffset, yPos, xStep - doorOffset * 2, yStep, color) +// } else { +// RenderUtilsGL.renderRect(xPos, yPos + doorOffset, xStep, yStep - doorOffset * 2, color) +// } +// } +// } +// } +// } +// GlStateManager.translate(-MapUtils.startCorner.first.toFloat(), -MapUtils.startCorner.second.toFloat(), 0f) +// } +// +// private fun renderText() { +// GlStateManager.translate(MapUtils.startCorner.first.toFloat(), MapUtils.startCorner.second.toFloat(), 0f) +// +// Dungeon.Info.uniqueRooms.forEach { unique -> +// val room = unique.mainRoom +// if (legitRender && room.state.equalsOneOf(RoomState.UNDISCOVERED, RoomState.UNOPENED)) return@forEach +// val checkPos = unique.getCheckmarkPosition() +// val namePos = unique.getNamePosition() +// val xPosCheck = (checkPos.first / 2f) * (roomSize + connectorSize) +// val yPosCheck = (checkPos.second / 2f) * (roomSize + connectorSize) +// val xPosName = (namePos.first / 2f) * (roomSize + connectorSize) +// val yPosName = (namePos.second / 2f) * (roomSize + connectorSize) +// +// if (AwesomeMap.config.mapCheckmark != 0 && AwesomeMap.config.mapRoomSecrets != 2) { +// RenderUtilsGL.drawCheckmark(xPosCheck, yPosCheck, room.state) +// } +// +// val color = +// if (AwesomeMap.config.mapColorText) { +// when (room.state) { +// RoomState.GREEN -> AwesomeMap.config.colorTextGreen +// RoomState.CLEARED -> AwesomeMap.config.colorTextCleared +// RoomState.FAILED -> AwesomeMap.config.colorTextFailed +// else -> AwesomeMap.config.colorTextUncleared +// } +// } else { +// AwesomeMap.config.colorTextCleared +// } +// +// if (AwesomeMap.config.mapRoomSecrets == 2) { +// GlStateManager.pushMatrix() +// GlStateManager.translate( +// xPosCheck + halfRoomSize, +// yPosCheck + 2 + halfRoomSize, +// 0f, +// ) +// GlStateManager.scale(2f, 2f, 1f) +// RenderUtilsGL.renderCenteredText(listOf(room.data.secrets.toString()), 0, 0, color.toJavaColor()) +// GlStateManager.popMatrix() +// } +// +// val name = mutableListOf() +// +// if (AwesomeMap.config.mapRoomNames != 0 && +// room.data.type.equalsOneOf( +// RoomType.PUZZLE, +// RoomType.TRAP, +// ) || +// AwesomeMap.config.mapRoomNames == 2 && +// room.data.type.equalsOneOf( +// RoomType.NORMAL, +// RoomType.RARE, +// RoomType.CHAMPION, +// ) +// ) { +// name.addAll(room.data.name.split(" ")) +// } +// if (room.data.type == RoomType.NORMAL && AwesomeMap.config.mapRoomSecrets == 1) { +// name.add(room.data.secrets.toString()) +// } +// // Offset + half of roomsize +// RenderUtilsGL.renderCenteredText( +// name, +// xPosName.toInt() + halfRoomSize, +// yPosName.toInt() + halfRoomSize, +// color.toJavaColor(), +// ) +// } +// GlStateManager.translate(-MapUtils.startCorner.first.toFloat(), -MapUtils.startCorner.second.toFloat(), 0f) +// } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt index 0e9e0dd..b8cd02c 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt @@ -4,7 +4,6 @@ import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.completedRoomsPercentage import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.mimicKilled import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.secretPercentage -import net.skymoe.enchaddons.impl.feature.awesomemap.ui.GuiRenderer import net.skymoe.enchaddons.impl.feature.awesomemap.utils.APIUtils import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location import net.skymoe.enchaddons.util.LogLevel @@ -32,7 +31,7 @@ object ScoreCalculation { } if (AwesomeMap.config.scoreTitle != 0) { MC.thePlayer.playSound("random.orb", 1f, 0.5.toFloat()) - GuiRenderer.displayTitle(AwesomeMap.config.message300, 40) +// GuiRenderer.displayTitle(AwesomeMap.config.message300, 40) TODO } if (AwesomeMap.config.timeTo300) { modMessage("§3300 Score§7: §a${RunInformation.timeElapsed.toDuration(DurationUnit.SECONDS)}", LogLevel.INFO) @@ -44,7 +43,7 @@ object ScoreCalculation { } if (AwesomeMap.config.scoreTitle == 2) { MC.thePlayer.playSound("random.orb", 1f, 0.5.toFloat()) - GuiRenderer.displayTitle(AwesomeMap.config.message270, 40) +// GuiRenderer.displayTitle(AwesomeMap.config.message270, 40) TODO } } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt index 98e081a..1c473d0 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/WitherDoorESP.kt @@ -8,6 +8,7 @@ import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location.inBoss import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils.getInterpolatedPosition +import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils3D import net.skymoe.enchaddons.util.MC object WitherDoorESP { @@ -19,7 +20,7 @@ object WitherDoorESP { Dungeon.espDoors.forEach { door -> if (AwesomeMap.config.witherDoorESP == 1 && door.state == RoomState.UNDISCOVERED) return@forEach val aabb = AxisAlignedBB(door.x - 1.0, 69.0, door.z - 1.0, door.x + 2.0, 73.0, door.z + 2.0) - RenderUtils.drawBox( + RenderUtils3D.drawBox( aabb, if (Dungeon.Info.keys > 0) { AwesomeMap.config.witherDoorKeyColor.toJavaColor() diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/CornerButton.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/CornerButton.kt deleted file mode 100644 index fb08b61..0000000 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/CornerButton.kt +++ /dev/null @@ -1,26 +0,0 @@ -package net.skymoe.enchaddons.impl.feature.awesomemap.ui - -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils -import java.awt.Color - -class CornerButton( - var x: Double, - var y: Double, - val corner: Corner, -) { - fun isHovered( - mouseX: Int, - mouseY: Int, - ) = mouseX.toDouble() in x..x + 6.0 && mouseY.toDouble() in y..y + 6.0 - - fun draw() { - RenderUtils.renderRect(x, y, 6.0, 6.0, Color(255, 255, 255)) - } - - enum class Corner { - TOP_LEFT, - TOP_RIGHT, - BOTTOM_LEFT, - BOTTOM_RIGHT, - } -} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/EditLocationGui.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/EditLocationGui.kt deleted file mode 100644 index c779efd..0000000 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/EditLocationGui.kt +++ /dev/null @@ -1,104 +0,0 @@ -package net.skymoe.enchaddons.impl.feature.awesomemap.ui - -import net.minecraft.client.gui.GuiScreen -import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap -import net.skymoe.enchaddons.impl.feature.awesomemap.ui.GuiRenderer.elements -import org.lwjgl.input.Keyboard -import org.lwjgl.input.Mouse - -class EditLocationGui : GuiScreen() { - private var hovered: MovableGuiElement? = null - private var startOffsetX = 0 - private var startOffsetY = 0 - private var isDragging = false - private var resizingCorner: CornerButton? = null - - override fun initGui() { - Keyboard.enableRepeatEvents(true) - super.initGui() - } - - override fun drawScreen( - mouseX: Int, - mouseY: Int, - partialTicks: Float, - ) { - this.drawDefaultBackground() - elements.forEach { - it.draw(mouseX, mouseY) - } - if (!isDragging && resizingCorner == null) { - hovered = elements.find { it.isHovered(mouseX, mouseY) } - } - mouseDrag(mouseX, mouseY) - super.drawScreen(mouseX, mouseY, partialTicks) - } - - fun mouseDrag( - mouseX: Int, - mouseY: Int, - ) { - if (hovered == null) return - if (isDragging) { - hovered?.setLocation((mouseX - startOffsetX), (mouseY - startOffsetY)) - } else { - resizingCorner?.corner?.let { - hovered?.cornerDrag(mouseX, mouseY, it) - } - } - } - - override fun mouseClicked( - mouseX: Int, - mouseY: Int, - mouseButton: Int, - ) { - if (mouseButton == 0) { - resizingCorner = null - elements - .firstOrNull { guiElement -> - resizingCorner = guiElement.corners.find { it.isHovered(mouseX, mouseY) } - resizingCorner != null - }?.let { hovered = it } - - if (resizingCorner == null) { - hovered?.let { - startOffsetX = (mouseX - it.x) - startOffsetY = (mouseY - it.y) - isDragging = true - } - } - } - super.mouseClicked(mouseX, mouseY, mouseButton) - } - - override fun mouseReleased( - mouseX: Int, - mouseY: Int, - state: Int, - ) { - isDragging = false - resizingCorner = null - super.mouseReleased(mouseX, mouseY, state) - } - - override fun handleMouseInput() { - val i = Mouse.getEventDWheel().coerceIn(-1..1) - hovered?.mouseScroll(i) - super.handleMouseInput() - } - - override fun keyTyped( - typedChar: Char, - keyCode: Int, - ) { - hovered?.keyTyped(keyCode) - super.keyTyped(typedChar, keyCode) - } - - override fun onGuiClosed() { - Keyboard.enableRepeatEvents(false) - AwesomeMap.config.save() - super.onGuiClosed() - } -} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt deleted file mode 100644 index 54b66cf..0000000 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/GuiRenderer.kt +++ /dev/null @@ -1,61 +0,0 @@ -package net.skymoe.enchaddons.impl.feature.awesomemap.ui - -import net.minecraft.client.gui.ScaledResolution -import net.minecraft.client.renderer.GlStateManager -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils -import net.skymoe.enchaddons.impl.nanovg.GUIEvent -import net.skymoe.enchaddons.util.MC - -object GuiRenderer { - val elements = - mutableListOf( - MapElement(), - ScoreElement(), - ) - private var displayTitle = "" - private var titleTicks = 0 - - fun displayTitle( - title: String, - ticks: Int, - ) { - displayTitle = title - titleTicks = ticks - } - - fun clearTitle() { - displayTitle = "" - titleTicks = 0 - } - - fun onOverlay(event: GUIEvent.HUD) { - if (MC.currentScreen is EditLocationGui) return - - MC.entityRenderer.setupOverlayRendering() - - elements.forEach { - if (!it.shouldRender()) return@forEach - GlStateManager.pushMatrix() - GlStateManager.translate(it.x.toFloat(), it.y.toFloat(), 0f) - GlStateManager.scale(it.scale, it.scale, 1f) - it.render() - GlStateManager.popMatrix() - } - - if (titleTicks > 0) { - val sr = ScaledResolution(MC) - RenderUtils.drawText( - text = displayTitle, - x = sr.scaledWidth / 2f, - y = sr.scaledHeight / 4f, - scale = 4.0, - color = 0xFF5555, - center = true, - ) - } - } - - fun onTick() { - if (titleTicks > 0) titleTicks-- - } -} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MapElement.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MapElement.kt deleted file mode 100644 index 464dd69..0000000 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MapElement.kt +++ /dev/null @@ -1,32 +0,0 @@ -package net.skymoe.enchaddons.impl.feature.awesomemap.ui - -import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap -import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender -import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRenderList -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location - -class MapElement : MovableGuiElement() { - override var x: Int by AwesomeMap.config::mapX - override var y: Int by AwesomeMap.config::mapY - override val h: Int - get() = if (AwesomeMap.config.mapShowRunInformation) 142 else 128 - override val w: Int - get() = 128 - override var scale: Float by AwesomeMap.config::mapScale - override var x2: Int = (x + w * scale).toInt() - override var y2: Int = (y + h * scale).toInt() - - override fun render() { - if (AwesomeMap.config.renderBeta) { - MapRenderList.renderMap() - } else { - MapRender.renderMap() - } - } - - override fun shouldRender(): Boolean { - if (!AwesomeMap.config.mapEnabled) return false - if (AwesomeMap.config.mapHideInBoss && Location.inBoss) return false - return super.shouldRender() - } -} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MovableGuiElement.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MovableGuiElement.kt deleted file mode 100644 index 20bb89c..0000000 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/MovableGuiElement.kt +++ /dev/null @@ -1,151 +0,0 @@ -package net.skymoe.enchaddons.impl.feature.awesomemap.ui - -import net.minecraft.client.gui.GuiScreen -import net.minecraft.client.renderer.GlStateManager -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtils -import net.skymoe.enchaddons.util.MC -import org.lwjgl.input.Keyboard -import java.awt.Color -import kotlin.math.max -import kotlin.math.min - -abstract class MovableGuiElement { - val corners = - arrayOf( - CornerButton(0.0, 0.0, CornerButton.Corner.TOP_LEFT), - CornerButton(0.0, 0.0, CornerButton.Corner.TOP_RIGHT), - CornerButton(0.0, 0.0, CornerButton.Corner.BOTTOM_LEFT), - CornerButton(0.0, 0.0, CornerButton.Corner.BOTTOM_RIGHT), - ) - abstract var x: Int - abstract var y: Int - abstract var x2: Int - abstract var y2: Int - abstract val w: Int - abstract val h: Int - open var scale: Float = 1f - - open fun draw( - mouseX: Int, - mouseY: Int, - ) { - GlStateManager.pushMatrix() - GlStateManager.translate(x.toFloat(), y.toFloat(), 0f) - GlStateManager.scale(scale, scale, 1f) - render() - GlStateManager.popMatrix() - - RenderUtils.renderRectBorder( - x.toDouble(), - y.toDouble(), - w * scale.toDouble(), - h * scale.toDouble(), - 0.5, - Color(255, 255, 255), - ) - updateCorners() - corners.forEach { it.draw() } - } - - open fun render() {} - - open fun shouldRender(): Boolean = true - - fun isHovered( - mouseX: Int, - mouseY: Int, - ) = mouseX in x..x2 && mouseY in y..y2 - - private fun updateCorners() { - corners[0].x = x - 3.0 - corners[0].y = y - 3.0 - corners[1].x = x2 - 3.0 - corners[1].y = y - 3.0 - corners[2].x = x - 3.0 - corners[2].y = y2 - 3.0 - corners[3].x = x2 - 3.0 - corners[3].y = y2 - 3.0 - } - - fun setLocation( - x: Int, - y: Int, - ) { - this.x = x.coerceIn(0, ((MC.displayWidth - w * scale).toInt())) - this.y = y.coerceIn(0, (MC.displayHeight - h * scale).toInt()) - x2 = (x + w * scale).toInt() - y2 = (y + h * scale).toInt() - } - - fun mouseScroll(direction: Int) { - if (direction != 0) { - var increment = direction * 0.01f - if (!GuiScreen.isShiftKeyDown()) increment *= 5 - scale = (scale + increment).coerceAtLeast(0.1f) - x2 = (x + w * scale).toInt() - y2 = (y + h * scale).toInt() - } - } - - fun cornerDrag( - mouseX: Int, - mouseY: Int, - corner: CornerButton.Corner, - ) { - val maxScaleLeft = x2 / w.toFloat() - val maxScaleTop = y2 / h.toFloat() - val maxScaleRight = (MC.displayWidth - x) / w.toFloat() - val maxScaleBottom = (MC.displayHeight - y) / h.toFloat() - when (corner) { - CornerButton.Corner.TOP_LEFT -> { - var s = - max((x2 - mouseX) / w.toFloat(), (y2 - mouseY) / h.toFloat()) - .coerceIn(0.1f..min(maxScaleTop, maxScaleLeft)) - s = (s * 100).toInt() / 100f - x = (x2 - w * s).toInt() - y = (y2 - h * s).toInt() - scale = s - } - - CornerButton.Corner.TOP_RIGHT -> { - var s = - max((mouseX - x) / w.toFloat(), (y2 - mouseY) / h.toFloat()) - .coerceIn(0.1f..min(maxScaleTop, maxScaleRight)) - s = (s * 100).toInt() / 100f - x2 = (x + w * s).toInt() - y = (y2 - h * s).toInt() - scale = s - } - - CornerButton.Corner.BOTTOM_LEFT -> { - var s = - max((x2 - mouseX) / w.toFloat(), (mouseY - y) / h.toFloat()) - .coerceIn(0.1f..min(maxScaleBottom, maxScaleLeft)) - s = (s * 100).toInt() / 100f - x = (x2 - w * s).toInt() - y2 = (y + h * s).toInt() - scale = s - } - - CornerButton.Corner.BOTTOM_RIGHT -> { - var s = - max((mouseX - x) / w.toFloat(), (mouseY - y) / h.toFloat()) - .coerceIn(0.1f..min(maxScaleBottom, maxScaleRight)) - s = (s * 100).toInt() / 100f - x2 = (x + w * s).toInt() - y2 = (y + h * s).toInt() - scale = s - } - } - } - - fun keyTyped(keyCode: Int) { - val increment = if (GuiScreen.isShiftKeyDown()) 5 else 1 - when (keyCode) { - Keyboard.KEY_LEFT -> setLocation(x - increment, y) - Keyboard.KEY_RIGHT -> setLocation(x + increment, y) - Keyboard.KEY_UP -> setLocation(x, y - increment) - Keyboard.KEY_DOWN -> setLocation(x, y + increment) - } - } -} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/ScoreElement.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/ScoreElement.kt index 6ac8910..4936ed4 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/ScoreElement.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/ui/ScoreElement.kt @@ -4,43 +4,9 @@ import net.minecraft.client.gui.FontRenderer import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.ScoreCalculation -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location import net.skymoe.enchaddons.util.MC -class ScoreElement : MovableGuiElement() { - override var x: Int by AwesomeMap.config::scoreX - override var y: Int by AwesomeMap.config::scoreY - override val h: Int - get() = fr.FONT_HEIGHT * elementLines - override val w: Int = fr.getStringWidth("Score: 100/100/100/7 : (300)") - override var scale: Float by AwesomeMap.config::scoreScale - override var x2: Int = (x + w * scale).toInt() - override var y2: Int = (y + h * scale).toInt() - - private var elementLines = 1 - set(value) { - if (field != value) { - field = value - y2 = (y + h * scale).toInt() - } - } - - override fun render() { - var y = 0f - val lines = getScoreLines() - elementLines = lines.size - lines.forEach { - fr.drawString(it, 0f, y, 0xffffff, true) - y += fr.FONT_HEIGHT - } - } - - override fun shouldRender(): Boolean { - if (!AwesomeMap.config.scoreElementEnabled) return false - if (AwesomeMap.config.scoreHideInBoss && Location.inBoss) return false - return super.shouldRender() - } - +class ScoreElement { companion object { val fr: FontRenderer = MC.fontRendererObj @@ -151,7 +117,7 @@ class ScoreElement : MovableGuiElement() { private fun getMimic(minimized: Boolean = false): String { var line = if (minimized) "§7M: " else "§7Mimic: " - line += if (RunInformation.mimicKilled) "§a✔" else "§c✘" + line += if (RunInformation.mimicKilled) "§aY" else "§cN" return line } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils.kt index 7578fba..d1e96b9 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils.kt @@ -1,100 +1,24 @@ package net.skymoe.enchaddons.impl.feature.awesomemap.utils -import net.minecraft.client.gui.Gui +import cc.polyfrost.oneconfig.renderer.NanoVGHelper import net.minecraft.client.renderer.GlStateManager -import net.minecraft.client.renderer.Tessellator -import net.minecraft.client.renderer.WorldRenderer -import net.minecraft.client.renderer.vertex.DefaultVertexFormats import net.minecraft.entity.Entity -import net.minecraft.util.AxisAlignedBB -import net.minecraft.util.ResourceLocation import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap import net.skymoe.enchaddons.impl.feature.awesomemap.core.DungeonPlayer import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState -import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.DungeonScan import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.equalsOneOf -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Utils.itemID import net.skymoe.enchaddons.util.MC -import net.skymoe.enchaddons.util.withAlpha -import org.lwjgl.opengl.GL11 -import org.lwjgl.opengl.GL11.GL_LINE_STRIP -import org.lwjgl.opengl.GL11.GL_QUADS +import net.skymoe.enchaddons.util.math.float import java.awt.Color import kotlin.math.roundToInt object RenderUtils { - private val tessellator: Tessellator = Tessellator.getInstance() - private val worldRenderer: WorldRenderer = tessellator.worldRenderer - val neuCheckmarks = CheckmarkSet(10, "neu") - val defaultCheckmarks = CheckmarkSet(16, "default") - val legacyCheckmarks = CheckmarkSet(8, "legacy") - private val mapIcons = ResourceLocation("funnymap", "marker.png") - - fun preDraw() { - GlStateManager.enableAlpha() - GlStateManager.enableBlend() - GlStateManager.disableDepth() - GlStateManager.disableLighting() - GlStateManager.disableTexture2D() - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) - } - - fun postDraw() { - GlStateManager.disableBlend() - GlStateManager.enableDepth() - GlStateManager.enableTexture2D() - } - - fun addQuadVertices( - x: Double, - y: Double, - w: Double, - h: Double, - ) { - worldRenderer.pos(x, y + h, 0.0).endVertex() - worldRenderer.pos(x + w, y + h, 0.0).endVertex() - worldRenderer.pos(x + w, y, 0.0).endVertex() - worldRenderer.pos(x, y, 0.0).endVertex() - } - - fun drawTexturedQuad( - x: Double, - y: Double, - width: Double, - height: Double, - ) { - worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION_TEX) - worldRenderer.pos(x, y + height, 0.0).tex(0.0, 1.0).endVertex() - worldRenderer.pos(x + width, y + height, 0.0).tex(1.0, 1.0).endVertex() - worldRenderer.pos(x + width, y, 0.0).tex(1.0, 0.0).endVertex() - worldRenderer.pos(x, y, 0.0).tex(0.0, 0.0).endVertex() - tessellator.draw() - } - - fun drawBox( - aabb: AxisAlignedBB, - color: Color, - width: Float, - outline: Float, - fill: Float, - ignoreDepth: Boolean, - ) { - GlStateManager.pushMatrix() - preDraw() - GlStateManager.depthMask(!ignoreDepth) - GL11.glLineWidth(width) - - drawOutlinedAABB(aabb, color) - - drawFilledAABB(aabb, color.withAlpha(fill)) - - GlStateManager.depthMask(true) - postDraw() - GlStateManager.popMatrix() - } +// val neuCheckmarks = CheckmarkSet(10, "neu") +// val defaultCheckmarks = CheckmarkSet(16, "default") +// val legacyCheckmarks = CheckmarkSet(8, "legacy") fun renderRect( + vg: Long, x: Number, y: Number, w: Number, @@ -102,17 +26,19 @@ object RenderUtils { color: Color, ) { if (color.alpha == 0) return - preDraw() - color.bind() - - worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) - addQuadVertices(x.toDouble(), y.toDouble(), w.toDouble(), h.toDouble()) - tessellator.draw() - - postDraw() + NanoVGHelper.INSTANCE.drawRoundedRect( + vg, + x.toFloat(), + y.toFloat(), + w.toFloat(), + h.toFloat(), + color.toARGBInt(), + 4.0F, // TODO + ) } fun renderRectBorder( + vg: Long, x: Double, y: Double, w: Double, @@ -121,25 +47,26 @@ object RenderUtils { color: Color, ) { if (color.alpha == 0) return - preDraw() - color.bind() - - worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) - addQuadVertices(x - thickness, y, thickness, h) - addQuadVertices(x - thickness, y - thickness, w + thickness * 2, thickness) - addQuadVertices(x + w, y, thickness, h) - addQuadVertices(x - thickness, y + h, w + thickness * 2, thickness) - tessellator.draw() - - postDraw() + NanoVGHelper.INSTANCE.drawHollowRoundRect( + vg, + x.toFloat(), + y.toFloat(), + w.toFloat(), + h.toFloat(), + color.toARGBInt(), + 4.0F, // TODO + thickness.float, + ) } fun renderCenteredText( + vg: Long, text: List, x: Int, y: Int, color: Int, ) { + // TODO if (text.isEmpty()) return GlStateManager.pushMatrix() GlStateManager.translate(x.toFloat(), y.toFloat(), 0f) @@ -172,114 +99,115 @@ object RenderUtils { } fun drawCheckmark( + vg: Long, x: Float, y: Float, state: RoomState, ) { - val (checkmark, size) = - when (AwesomeMap.config.mapCheckmark) { - 1 -> defaultCheckmarks.getCheckmark(state) to defaultCheckmarks.size.toDouble() - 2 -> neuCheckmarks.getCheckmark(state) to neuCheckmarks.size.toDouble() - 3 -> legacyCheckmarks.getCheckmark(state) to legacyCheckmarks.size.toDouble() - else -> return - } - if (checkmark != null) { - GlStateManager.enableAlpha() - GlStateManager.color(1f, 1f, 1f, 1f) - MC.textureManager.bindTexture(checkmark) - - drawTexturedQuad( - x + (MapUtils.roomSize - size) / 2, - y + (MapUtils.roomSize - size) / 2, - size, - size, - ) - GlStateManager.disableAlpha() - } +// // TODO +// val (checkmark, size) = +// when (AwesomeMap.config.mapCheckmark) { +// 1 -> defaultCheckmarks.getCheckmark(state) to defaultCheckmarks.size.toDouble() +// 2 -> neuCheckmarks.getCheckmark(state) to neuCheckmarks.size.toDouble() +// 3 -> legacyCheckmarks.getCheckmark(state) to legacyCheckmarks.size.toDouble() +// else -> return +// } +// if (checkmark != null) { +// GlStateManager.enableAlpha() +// GlStateManager.color(1f, 1f, 1f, 1f) +// MC.textureManager.bindTexture(checkmark) +// +// drawTexturedQuad( +// x + (MapUtils.roomSize - size) / 2, +// y + (MapUtils.roomSize - size) / 2, +// size, +// size, +// ) +// GlStateManager.disableAlpha() +// } } fun drawPlayerHead( + vg: Long, name: String, player: DungeonPlayer, ) { - GlStateManager.pushMatrix() - try { - // Translates to the player's location which is updated every tick. - if (player.isPlayer || name == MC.thePlayer.name) { - GlStateManager.translate( - (MC.thePlayer.posX - DungeonScan.START_X + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.first, - (MC.thePlayer.posZ - DungeonScan.START_Z + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.second, - 0.0, - ) - } else { - GlStateManager.translate(player.mapX.toFloat(), player.mapZ.toFloat(), 0f) - } - - // Apply head rotation and scaling - GlStateManager.rotate(player.yaw + 180f, 0f, 0f, 1f) - GlStateManager.scale(AwesomeMap.config.playerHeadScale, AwesomeMap.config.playerHeadScale, 1f) - GlStateManager.enableAlpha() - - if (AwesomeMap.config.mapVanillaMarker && (player.isPlayer || name == MC.thePlayer.name)) { - GlStateManager.rotate(180f, 0f, 0f, 1f) - GlStateManager.color(1f, 1f, 1f, 1f) - MC.textureManager.bindTexture(mapIcons) - worldRenderer.begin(7, DefaultVertexFormats.POSITION_TEX) - worldRenderer.pos(-6.0, 6.0, 0.0).tex(0.0, 0.0).endVertex() - worldRenderer.pos(6.0, 6.0, 0.0).tex(1.0, 0.0).endVertex() - worldRenderer.pos(6.0, -6.0, 0.0).tex(1.0, 1.0).endVertex() - worldRenderer.pos(-6.0, -6.0, 0.0).tex(0.0, 1.0).endVertex() - tessellator.draw() - GlStateManager.rotate(-180f, 0f, 0f, 1f) - } else { - // Render black border around the player head - renderRectBorder(-6.0, -6.0, 12.0, 12.0, 1.0, Color(0, 0, 0, 255)) - - preDraw() - GlStateManager.enableTexture2D() - GlStateManager.color(1f, 1f, 1f, 1f) - - MC.textureManager.bindTexture(player.skin) - - Gui.drawScaledCustomSizeModalRect(-6, -6, 8f, 8f, 8, 8, 12, 12, 64f, 64f) - if (player.renderHat) { - Gui.drawScaledCustomSizeModalRect(-6, -6, 40f, 8f, 8, 8, 12, 12, 64f, 64f) - } - - postDraw() - } - - // Handle player names - if (AwesomeMap.config.playerHeads == 2 || - AwesomeMap.config.playerHeads == 1 && - MC.thePlayer.heldItem?.itemID.equalsOneOf( - "SPIRIT_LEAP", - "INFINITE_SPIRIT_LEAP", - "HAUNT_ABILITY", - ) - ) { - if (!AwesomeMap.config.mapRotate) { - GlStateManager.rotate(-player.yaw + 180f, 0f, 0f, 1f) - } - GlStateManager.translate(0f, 10f, 0f) - GlStateManager.scale(AwesomeMap.config.playerNameScale, AwesomeMap.config.playerNameScale, 1f) - MC.fontRendererObj.drawString( - name, - -MC.fontRendererObj.getStringWidth(name) / 2f, - 0f, - 0xffffff, - true, - ) - } - } catch (e: Exception) { - e.printStackTrace() - } - GlStateManager.popMatrix() +// GlStateManager.pushMatrix() +// try { +// // Translates to the player's location which is updated every tick. +// if (player.isPlayer || name == MC.thePlayer.name) { +// GlStateManager.translate( +// (MC.thePlayer.posX - DungeonScan.START_X + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.first, +// (MC.thePlayer.posZ - DungeonScan.START_Z + 15) * MapUtils.coordMultiplier + MapUtils.startCorner.second, +// 0.0, +// ) +// } else { +// GlStateManager.translate(player.mapX.toFloat(), player.mapZ.toFloat(), 0f) +// } +// +// // Apply head rotation and scaling +// GlStateManager.rotate(player.yaw + 180f, 0f, 0f, 1f) +// GlStateManager.scale(AwesomeMap.config.playerHeadScale, AwesomeMap.config.playerHeadScale, 1f) +// GlStateManager.enableAlpha() +// +// if (AwesomeMap.config.mapVanillaMarker && (player.isPlayer || name == MC.thePlayer.name)) { +// GlStateManager.rotate(180f, 0f, 0f, 1f) +// GlStateManager.color(1f, 1f, 1f, 1f) +// MC.textureManager.bindTexture(mapIcons) +// worldRenderer.begin(7, DefaultVertexFormats.POSITION_TEX) +// worldRenderer.pos(-6.0, 6.0, 0.0).tex(0.0, 0.0).endVertex() +// worldRenderer.pos(6.0, 6.0, 0.0).tex(1.0, 0.0).endVertex() +// worldRenderer.pos(6.0, -6.0, 0.0).tex(1.0, 1.0).endVertex() +// worldRenderer.pos(-6.0, -6.0, 0.0).tex(0.0, 1.0).endVertex() +// tessellator.draw() +// GlStateManager.rotate(-180f, 0f, 0f, 1f) +// } else { +// // Render black border around the player head +// renderRectBorder(-6.0, -6.0, 12.0, 12.0, 1.0, Color(0, 0, 0, 255)) +// +// preDraw() +// GlStateManager.enableTexture2D() +// GlStateManager.color(1f, 1f, 1f, 1f) +// +// MC.textureManager.bindTexture(player.skin) +// +// Gui.drawScaledCustomSizeModalRect(-6, -6, 8f, 8f, 8, 8, 12, 12, 64f, 64f) +// if (player.renderHat) { +// Gui.drawScaledCustomSizeModalRect(-6, -6, 40f, 8f, 8, 8, 12, 12, 64f, 64f) +// } +// +// postDraw() +// } +// +// // Handle player names +// if (AwesomeMap.config.playerHeads == 2 || +// AwesomeMap.config.playerHeads == 1 && +// MC.thePlayer.heldItem?.itemID.equalsOneOf( +// "SPIRIT_LEAP", +// "INFINITE_SPIRIT_LEAP", +// "HAUNT_ABILITY", +// ) +// ) { +// if (!AwesomeMap.config.mapRotate) { +// GlStateManager.rotate(-player.yaw + 180f, 0f, 0f, 1f) +// } +// GlStateManager.translate(0f, 10f, 0f) +// GlStateManager.scale(AwesomeMap.config.playerNameScale, AwesomeMap.config.playerNameScale, 1f) +// MC.fontRendererObj.drawString( +// name, +// -MC.fontRendererObj.getStringWidth(name) / 2f, +// 0f, +// 0xffffff, +// true, +// ) +// } +// } catch (e: Exception) { +// e.printStackTrace() +// } +// GlStateManager.popMatrix() } - fun Color.bind() { - GlStateManager.color(this.red / 255f, this.green / 255f, this.blue / 255f, this.alpha / 255f) - } + fun Color.toARGBInt(): Int = (alpha shl 24) or (red shl 16) or (green shl 8) or blue fun Color.grayScale(): Color { val gray = (red * 0.299 + green * 0.587 + blue * 0.114).roundToInt() @@ -297,6 +225,7 @@ object RenderUtils { ) fun drawText( + vg: Long, text: String, x: Float, y: Float, @@ -330,98 +259,4 @@ object RenderUtils { GlStateManager.disableBlend() GlStateManager.popMatrix() } - - fun drawFilledAABB( - aabb: AxisAlignedBB, - color: Color, - ) { - color.bind() - - worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) - - worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() - - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() - - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() - - worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() - - worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() - - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() - tessellator.draw() - } - - fun drawOutlinedAABB( - aabb: AxisAlignedBB, - color: Color, - ) { - color.bind() - - worldRenderer.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION) - - worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() - - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() - - worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() - worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() - - tessellator.draw() - } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils3D.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils3D.kt new file mode 100644 index 0000000..bb9ebde --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtils3D.kt @@ -0,0 +1,152 @@ +package net.skymoe.enchaddons.impl.feature.awesomemap.utils + +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.vertex.DefaultVertexFormats +import net.minecraft.util.AxisAlignedBB +import net.skymoe.enchaddons.util.withAlpha +import org.lwjgl.opengl.GL11 +import org.lwjgl.opengl.GL11.GL_LINE_STRIP +import org.lwjgl.opengl.GL11.GL_QUADS +import java.awt.Color + +object RenderUtils3D { + private val tessellator: Tessellator = Tessellator.getInstance() + private val worldRenderer: WorldRenderer = tessellator.worldRenderer + + fun preDraw() { + GlStateManager.enableAlpha() + GlStateManager.enableBlend() + GlStateManager.disableDepth() + GlStateManager.disableLighting() + GlStateManager.disableTexture2D() + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) + } + + fun postDraw() { + GlStateManager.disableBlend() + GlStateManager.enableDepth() + GlStateManager.enableTexture2D() + } + + fun drawBox( + aabb: AxisAlignedBB, + color: Color, + width: Float, + outline: Float, + fill: Float, + ignoreDepth: Boolean, + ) { + GlStateManager.pushMatrix() + preDraw() + GlStateManager.depthMask(!ignoreDepth) + GL11.glLineWidth(width) + + drawOutlinedAABB(aabb, color) + + drawFilledAABB(aabb, color.withAlpha(fill)) + + GlStateManager.depthMask(true) + postDraw() + GlStateManager.popMatrix() + } + + fun drawFilledAABB( + aabb: AxisAlignedBB, + color: Color, + ) { + color.bind() + + worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + tessellator.draw() + } + + fun drawOutlinedAABB( + aabb: AxisAlignedBB, + color: Color, + ) { + color.bind() + + worldRenderer.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION) + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + + tessellator.draw() + } + + fun Color.bind() { + GlStateManager.color(this.red / 255f, this.green / 255f, this.blue / 255f, this.alpha / 255f) + } +} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtilsGL.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtilsGL.kt deleted file mode 100644 index d1cb647..0000000 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/RenderUtilsGL.kt +++ /dev/null @@ -1,157 +0,0 @@ -package net.skymoe.enchaddons.impl.feature.awesomemap.utils - -import net.minecraft.client.renderer.GlStateManager -import net.minecraft.client.renderer.Tessellator -import net.minecraft.client.renderer.WorldRenderer -import net.minecraft.client.renderer.texture.SimpleTexture -import net.minecraft.client.renderer.vertex.DefaultVertexFormats -import net.minecraft.util.ResourceLocation -import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap -import net.skymoe.enchaddons.impl.feature.awesomemap.core.map.RoomState -import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.MapRender -import net.skymoe.enchaddons.util.MC -import org.lwjgl.opengl.GL11 -import org.lwjgl.opengl.GL11.GL_QUADS -import java.awt.Color - -object RenderUtilsGL { - private val tessellator: Tessellator = Tessellator.getInstance() - private val worldRenderer: WorldRenderer = tessellator.worldRenderer - private var currentTexture = 0 - - fun preDraw() { - GL11.glEnable(GL11.GL_ALPHA_TEST) - GL11.glEnable(GL11.GL_BLEND) - GL11.glDisable(GL11.GL_DEPTH_TEST) - GL11.glDisable(GL11.GL_LIGHTING) - GL11.glDisable(GL11.GL_TEXTURE_2D) - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA) - } - - fun postDraw() { - GL11.glDisable(GL11.GL_BLEND) - GL11.glEnable(GL11.GL_DEPTH_TEST) - GL11.glEnable(GL11.GL_TEXTURE_2D) - } - - fun renderRect( - x: Number, - y: Number, - w: Number, - h: Number, - color: Color, - ) { - if (color.alpha == 0) return - preDraw() - color.bind() - - worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) - RenderUtils.addQuadVertices(x.toDouble(), y.toDouble(), w.toDouble(), h.toDouble()) - tessellator.draw() - - postDraw() - } - - fun renderRectBorder( - x: Double, - y: Double, - w: Double, - h: Double, - thickness: Double, - color: Color, - ) { - if (color.alpha == 0) return - preDraw() - color.bind() - - worldRenderer.begin(GL_QUADS, DefaultVertexFormats.POSITION) - RenderUtils.addQuadVertices(x - thickness, y, thickness, h) - RenderUtils.addQuadVertices(x - thickness, y - thickness, w + thickness * 2, thickness) - RenderUtils.addQuadVertices(x + w, y, thickness, h) - RenderUtils.addQuadVertices(x - thickness, y + h, w + thickness * 2, thickness) - tessellator.draw() - - postDraw() - } - - fun renderCenteredText( - text: List, - x: Int, - y: Int, - color: Color, - ) { - if (text.isEmpty()) return - GlStateManager.pushMatrix() - GlStateManager.translate(x.toFloat(), y.toFloat(), 0f) - GlStateManager.scale(AwesomeMap.config.textScale, AwesomeMap.config.textScale, 1f) - - if (AwesomeMap.config.mapRotate) { - GlStateManager.rotate(MC.thePlayer.rotationYaw + 180f, 0f, 0f, 1f) - } else if (AwesomeMap.config.mapDynamicRotate) { - GlStateManager.rotate(-MapRender.dynamicRotation, 0f, 0f, 1f) - } - - val fontHeight = SimpleFontRenderer.FONT_HEIGHT + 1 - val yTextOffset = text.size * fontHeight / -2f - - text.withIndex().forEach { (index, text) -> - SimpleFontRenderer.drawString( - text, - SimpleFontRenderer.getStringWidth(text) / -2f, - yTextOffset + index * fontHeight, - color, - true, - ) - } - - GlStateManager.popMatrix() - } - - fun drawCheckmark( - x: Float, - y: Float, - state: RoomState, - ) { - val (checkmark, size) = - when (AwesomeMap.config.mapCheckmark) { - 1 -> RenderUtils.defaultCheckmarks.getCheckmark(state) to RenderUtils.defaultCheckmarks.size.toDouble() - 2 -> RenderUtils.neuCheckmarks.getCheckmark(state) to RenderUtils.neuCheckmarks.size.toDouble() - 3 -> RenderUtils.legacyCheckmarks.getCheckmark(state) to RenderUtils.legacyCheckmarks.size.toDouble() - else -> return - } - if (checkmark != null) { - GL11.glColor4f(1f, 1f, 1f, 1f) - GL11.glEnable(GL11.GL_ALPHA_TEST) - GL11.glEnable(GL11.GL_TEXTURE_2D) - checkmark.bind() - - RenderUtils.drawTexturedQuad( - x + (MapUtils.roomSize - size) / 2, - y + (MapUtils.roomSize - size) / 2, - size, - size, - ) - } - } - - private fun Color.bind() { - GL11.glColor4f(this.red / 255f, this.green / 255f, this.blue / 255f, this.alpha / 255f) - } - - fun ResourceLocation.bind() { - var tex = MC.textureManager.getTexture(this) - if (tex == null) { - tex = SimpleTexture(this) - MC.textureManager.loadTexture(this, tex) - } - if (tex.glTextureId != currentTexture) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, tex.glTextureId) - currentTexture = tex.glTextureId - } - } - - fun unbindTexture() { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0) - currentTexture = 0 - } -} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/SimpleFontRenderer.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/SimpleFontRenderer.kt deleted file mode 100644 index 77d9b34..0000000 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/utils/SimpleFontRenderer.kt +++ /dev/null @@ -1,166 +0,0 @@ -package net.skymoe.enchaddons.impl.feature.awesomemap.utils - -import net.minecraft.client.renderer.texture.SimpleTexture -import net.minecraft.client.renderer.texture.TextureUtil -import net.minecraft.client.resources.IResourceManager -import net.minecraft.client.resources.IResourceManagerReloadListener -import net.minecraft.util.ResourceLocation -import net.skymoe.enchaddons.impl.feature.awesomemap.utils.RenderUtilsGL.bind -import net.skymoe.enchaddons.util.MC -import org.lwjgl.opengl.GL11 -import java.awt.Color -import java.awt.image.BufferedImage -import java.io.IOException -import kotlin.math.max - -object SimpleFontRenderer : IResourceManagerReloadListener { - private val locationFontTexture = ResourceLocation("textures/font/ascii.png") - private var charWidth: IntArray = IntArray(256) - private var posX: Float = 0f - private var posY: Float = 0f - const val FONT_HEIGHT: Int = 9 - private const val VALID_CHARS = - "\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000" - - init { - readFontTexture() - } - - override fun onResourceManagerReload(resourceManager: IResourceManager) { - readFontTexture() - } - - private fun readFontTexture() { - val bufferedImage: BufferedImage = - try { - TextureUtil.readBufferedImage(MC.resourceManager.getResource(locationFontTexture).inputStream) - } catch (e: IOException) { - throw RuntimeException(e) - } - val w = bufferedImage.width - val h = bufferedImage.height - val arr = IntArray(w * h) - bufferedImage.getRGB(0, 0, w, h, arr, 0, w) - val charHeight = h / 16 - val charWidth = w / 16 - val scale = 8.0f / charWidth.toFloat() - charIndex@ for (charIndex in 0..255) { - if (charIndex == 32) { - SimpleFontRenderer.charWidth[charIndex] = 4 - } - val column = charIndex % 16 - val row = charIndex / 16 - for (scanX in charWidth - 1 downTo 0) { - val x = column * charWidth + scanX - var found = false - for (scanY in 0 until charHeight) { - val y = row * charHeight + scanY - if ((arr[x + y * w] shr 24 and 0xFF) != 0) { - found = true - break - } - } - if (found) { - SimpleFontRenderer.charWidth[charIndex] = (0.5 + (scanX + 1) * scale).toInt() + 1 - continue@charIndex - } - } - SimpleFontRenderer.charWidth[charIndex] = (0.5 + scale).toInt() + 1 - } - - if (MC.textureManager.getTexture(locationFontTexture) == null) { - MC.textureManager.loadTexture(locationFontTexture, SimpleTexture(locationFontTexture)) - } - } - - private fun renderChar(ch: Char): Int { - if (ch == ' ') return 4 - val i = VALID_CHARS.indexOf(ch) - return if (i != -1) renderDefaultChar(i) else 0 - } - - private fun renderDefaultChar(ch: Int): Int { - val texX = (ch % 16 * 8) / 128.0f - val texY = (ch / 16 * 8) / 128.0f - val width = charWidth[ch] - 1.01f - val height = 7.99f - val texWidth = width / 128.0f - val texHeight = height / 128.0f - - GL11.glBegin(GL11.GL_TRIANGLE_STRIP) - GL11.glTexCoord2f(texX, texY) - GL11.glVertex3f(posX, posY, 0.0f) - GL11.glTexCoord2f(texX, texY + texHeight) - GL11.glVertex3f(posX, posY + height, 0.0f) - GL11.glTexCoord2f(texX + texWidth, texY) - GL11.glVertex3f(posX + width, posY, 0.0f) - GL11.glTexCoord2f(texX + texWidth, texY + texHeight) - GL11.glVertex3f(posX + width, posY + height, 0.0f) - GL11.glEnd() - - return charWidth[ch] - } - - fun drawString( - text: String, - x: Float, - y: Float, - color: Color, - dropShadow: Boolean, - ): Int { - var i: Int - GL11.glEnable(GL11.GL_ALPHA_TEST) - GL11.glEnable(GL11.GL_TEXTURE_2D) - locationFontTexture.bind() - - if (dropShadow) { - i = renderString(text, x + 1.0f, y + 1.0f, color, true) - i = max(i, renderString(text, x, y, color, false)) - } else { - i = renderString(text, x, y, color, false) - } - - GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f) - return i - } - - private fun renderStringAtPos(text: String) { - text.forEach { - posX += renderChar(it) - } - } - - private fun renderString( - text: String, - x: Float, - y: Float, - color: Color, - dropShadow: Boolean, - ): Int { - if (dropShadow) { - GL11.glColor4f( - color.red * .25f / 255f, - color.green * .25f / 255f, - color.blue * .25f / 255f, - color.alpha / 255f, - ) - } else { - GL11.glColor4f(color.red / 255f, color.green / 255f, color.blue / 255f, color.alpha / 255f) - } - posX = x - posY = y - renderStringAtPos(text) - return posX.toInt() - } - - fun getStringWidth(text: String): Int = text.sumOf { getCharWidth(it) } - - fun getCharWidth(character: Char): Int { - if (character == ' ') return 4 - val i = VALID_CHARS.indexOf(character) - if (character > '\u0000' && i != -1) { - return charWidth[i] - } - return 0 - } -} diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/NanoVGAccessor.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/NanoVGAccessor.kt index 5e8ad17..446bea3 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/NanoVGAccessor.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/NanoVGAccessor.kt @@ -1,6 +1,9 @@ package net.skymoe.enchaddons.impl.oneconfig import cc.polyfrost.oneconfig.renderer.font.Font +import net.skymoe.enchaddons.util.StyledSegment +import net.skymoe.enchaddons.util.math.Vec2D +import net.skymoe.enchaddons.util.math.int import net.skymoe.enchaddons.util.property.latelet var nvg: NanoVGAccessor by latelet() @@ -129,4 +132,66 @@ interface NanoVGAccessor { alpha: Double, radius: Double, ) + + fun drawAccarc( + vg: Long, + lCorner: Int, + x: Double, + y: Double, + width: Double, + height: Double, + lWidth: Double, + lHeight: Double, + borderRadius: Double, + lRadius: Double, + color: Int, + ) + + fun drawTextSegments( + vg: Long, + segments: List, + x: Double, + y: Double, + size: Double, + font: Font, + anchor: Vec2D = Vec2D(0.0, 0.0), + color: Int = 0xFFFFFFFF.int, + colorMultiplier: Double = 1.0, + shadow: Pair? = null, + ) + + fun drawRoundedTexture( + vg: Long, + imageCache: NanoVGImageCacheEntry, + texture: Int, + imageXRel: Double, + imageYRel: Double, + imageWRel: Double, + imageHRel: Double, + x: Double, + y: Double, + width: Double, + height: Double, + alpha: Double, + radius: Double, + ) + + fun save(vg: Long) + + fun restore(vg: Long) + + fun translate( + vg: Long, + pos: Vec2D, + ) + + fun scale( + vg: Long, + factor: Vec2D, + ) + + fun rotate( + vg: Long, + angle: Double, + ) } diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/ciallo/NanoVGAccessorImpl.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/ciallo/NanoVGAccessorImpl.kt index 5abfd71..15048d1 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/ciallo/NanoVGAccessorImpl.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/ciallo/NanoVGAccessorImpl.kt @@ -5,7 +5,11 @@ import net.skymoe.enchaddons.impl.MOD_ID import net.skymoe.enchaddons.impl.oneconfig.NanoVGAccessor import net.skymoe.enchaddons.impl.oneconfig.NanoVGImageCacheEntry import net.skymoe.enchaddons.impl.oneconfig.nvg +import net.skymoe.enchaddons.util.StyledSegment import net.skymoe.enchaddons.util.convertARGBToDoubleArray +import net.skymoe.enchaddons.util.convertDoubleArrayToARGB +import net.skymoe.enchaddons.util.math.Vec2D +import net.skymoe.enchaddons.util.math.double import net.skymoe.enchaddons.util.math.float import net.skymoe.enchaddons.util.scope.withscope import net.skymoe.enchaddons.util.toBuffer @@ -15,7 +19,7 @@ import org.lwjgl.nanovg.NanoVG.* import org.lwjgl.nanovg.NanoVGGL3.NVG_IMAGE_NODELETE import org.lwjgl.nanovg.NanoVGGL3.nvglCreateImageFromHandle import java.nio.ByteBuffer -import java.util.UUID +import java.util.* import kotlin.math.* private fun NVGColor.fill(argb: Int): NVGColor { @@ -355,4 +359,233 @@ object NanoVGAccessorImpl : NanoVGAccessor { ) } } + + override fun drawAccarc( + vg: Long, + lCorner: Int, + x: Double, + y: Double, + width: Double, + height: Double, + lWidth: Double, + lHeight: Double, + borderRadius: Double, + lRadius: Double, + color: Int, + ) { + nvgSave(vg) + nvgTranslate(vg, x.float, y.float) + + if (lCorner != 0) { + when (lCorner) { + 1 -> { + nvgTranslate(vg, width.float / 2, height.float / 2) + nvgRotate(vg, PI.float / 2) + nvgTranslate(vg, -width.float / 2, -height.float / 2) + drawAccarc( + vg, + 0, + 0.0, + 0.0, + height, + width, + lHeight, + lWidth, + borderRadius, + lRadius, + color, + ) + } + 2 -> { + nvgTranslate(vg, width.float / 2, height.float / 2) + nvgRotate(vg, PI.float) + nvgTranslate(vg, -width.float / 2, -height.float / 2) + drawAccarc( + vg, + 0, + 0.0, + 0.0, + width, + height, + lWidth, + lHeight, + borderRadius, + lRadius, + color, + ) + } + 3 -> { + nvgTranslate(vg, width.float / 2, height.float / 2) + nvgRotate(vg, -PI.float / 2) + nvgTranslate(vg, -width.float / 2, -height.float / 2) + drawAccarc( + vg, + 0, + 0.0, + 0.0, + height, + width, + lHeight, + lWidth, + borderRadius, + lRadius, + color, + ) + } + } + } else { + val w = width.float + val h = height.float + val lw = min(lWidth.float, w) + val lh = min(lHeight.float, h) + val br = minOf(borderRadius.float, lw / 2, lh / 2, w - lw, h - lh) + val lr = minOf(lRadius.float, w - lw, h - lh) + + withscope { + val nvgColor = NVGColor.calloc().using().fill(color) + + nvgBeginPath(vg) + + nvgMoveTo(vg, br, 0F) + nvgLineTo(vg, w - br, 0F) + nvgArcTo(vg, w, 0F, w, br, br) + nvgLineTo(vg, w, lh - br) + nvgArcTo(vg, w, lh, w - br, lh, br) + nvgLineTo(vg, lw + lr, lh) + nvgArcTo(vg, lw, lh, lw, lh + lr, lr) + nvgLineTo(vg, lw, h - br) + nvgArcTo(vg, lw, h, lw - br, h, br) + nvgLineTo(vg, br, h) + nvgArcTo(vg, 0F, h, 0F, h - br, br) + nvgLineTo(vg, 0F, br) + nvgArcTo(vg, 0F, 0F, br, 0F, br) + + nvgClosePath(vg) + nvgFillColor(vg, nvgColor) + nvgFill(vg) + } + } + + nvgRestore(vg) + } + + override fun drawTextSegments( + vg: Long, + segments: List, + x: Double, + y: Double, + size: Double, + font: Font, + anchor: Vec2D, + color: Int, + colorMultiplier: Double, + shadow: Pair?, + ) { + withscope { + shadow?.let { + drawTextSegments( + vg, + segments, + x + shadow.first.x * size, + y + shadow.first.y * size, + size, + font, + anchor, + color, + colorMultiplier * shadow.second, + null, + ) + } + val nvgColor = NVGColor.calloc().using().fill(shadowColor(color, colorMultiplier)) + nvgFontSize(vg, size.float) + nvgFontFace(vg, font.name) + val totalWidth = segments.sumOf { nvgTextBounds(vg, 0.0f, 0.0f, it.text, FloatArray(4)).double } + val posX = x - totalWidth * anchor.x + val posY = y - size * anchor.y + var currentX = posX + segments.forEach { (text, color) -> + nvgFillColor(vg, color?.let { NVGColor.calloc().using().fill(shadowColor(it, colorMultiplier)) } ?: nvgColor) + currentX = nvgText(vg, currentX.float, posY.float, text).double + } + } + } + + override fun drawRoundedTexture( + vg: Long, + imageCache: NanoVGImageCacheEntry, + texture: Int, + imageXRel: Double, + imageYRel: Double, + imageWRel: Double, + imageHRel: Double, + x: Double, + y: Double, + width: Double, + height: Double, + alpha: Double, + radius: Double, + ) { + imageCache.cleanup(this, vg) + + val nvgImage = + imageCache.cache.getOrPut(texture) { + nvglCreateImageFromHandle(vg, texture, 64, 64, NVG_IMAGE_NEAREST or NVG_IMAGE_NODELETE) + .also { if (it == -1) return@drawRoundedTexture } + } + + drawRoundedImage( + vg, + nvgImage, + 0.0, + 0.0, + 1.0, + 1.0, + x, + y, + width, + height, + alpha, + radius, + ) + } + + private fun shadowColor( + color: Int, + multiplier: Double, + ): Int { + val rgba = convertARGBToDoubleArray(color) + rgba[0] = rgba[0] * multiplier + rgba[1] = rgba[1] * multiplier + rgba[2] = rgba[2] * multiplier + return convertDoubleArrayToARGB(*rgba) + } + + override fun save(vg: Long) { + nvgSave(vg) + } + + override fun restore(vg: Long) { + nvgRestore(vg) + } + + override fun translate( + vg: Long, + pos: Vec2D, + ) { + nvgTranslate(vg, pos.x.float, pos.y.float) + } + + override fun scale( + vg: Long, + factor: Vec2D, + ) { + nvgScale(vg, factor.x.float, factor.y.float) + } + + override fun rotate( + vg: Long, + angle: Double, + ) { + nvgRotate(vg, angle.float) + } } diff --git a/src/main/kotlin/net/skymoe/enchaddons/util/StyledText.kt b/src/main/kotlin/net/skymoe/enchaddons/util/StyledText.kt new file mode 100644 index 0000000..65b0304 --- /dev/null +++ b/src/main/kotlin/net/skymoe/enchaddons/util/StyledText.kt @@ -0,0 +1,63 @@ +package net.skymoe.enchaddons.util + +import net.skymoe.enchaddons.util.math.int +import java.lang.StringBuilder + +data class StyledSegment( + val text: String, + val color: Int?, +) + +fun String.toStyledSegments(): List = + buildList { + val stringBuilder = StringBuilder() + var color: Int? = null + + fun setColor(newColor: Int?) { + if (color != newColor && stringBuilder.isNotEmpty()) { + add(StyledSegment(stringBuilder.toString(), color)) + stringBuilder.clear() + } + color = newColor + } + + run { + var i = 0 + while (i < length) { + when (val c = this@toStyledSegments[i]) { + '\u00A7' -> { + ++i + if (i < length) { + val code = this@toStyledSegments[i] + ++i + when (code.lowercaseChar()) { + 'r' -> setColor(null) + '0' -> setColor(0xFF000000.int) + '1' -> setColor(0xFF0000AA.int) + '2' -> setColor(0xFF00AA00.int) + '3' -> setColor(0xFF00AAAA.int) + '4' -> setColor(0xFFAA0000.int) + '5' -> setColor(0xFFAA00AA.int) + '6' -> setColor(0xFFFFAA00.int) + '7' -> setColor(0xFFAAAAAA.int) + '8' -> setColor(0xFF555555.int) + '9' -> setColor(0xFF5555FF.int) + 'a' -> setColor(0xFF55FF55.int) + 'b' -> setColor(0xFF55FFFF.int) + 'c' -> setColor(0xFFFF5555.int) + 'd' -> setColor(0xFFFF55FF.int) + 'e' -> setColor(0xFFFFFF55.int) + 'f' -> setColor(0xFFFFFFFF.int) + } + } + } + else -> { + ++i + stringBuilder.append(c) + } + } + } + } + + add(StyledSegment(stringBuilder.toString(), color)) + } From 68a2fa5fafbe23811ea477a4dd52be71957182a8 Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Fri, 25 Apr 2025 22:44:13 +0800 Subject: [PATCH 08/25] refactor: return T -> = T --- .../kotlin/net/skymoe/enchaddons/util/scope/WithScope.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/net/skymoe/enchaddons/util/scope/WithScope.kt b/src/main/kotlin/net/skymoe/enchaddons/util/scope/WithScope.kt index 01fb414..2fcecff 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/util/scope/WithScope.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/util/scope/WithScope.kt @@ -1,16 +1,17 @@ package net.skymoe.enchaddons.util.scope +import java.lang.AutoCloseable + class WithScopeContext( private val resourceList: MutableList, private val cleanupList: MutableList<() -> Unit>, ) { - fun use(resource: T): T { - return resource.also { + fun use(resource: T): T = + resource.also { if (resource !in resourceList) { resourceList.add(it) } } - } fun use(cleanup: () -> Unit) { if (cleanup !in cleanupList) { From 39da6a50e60e8d6cb452a45c8baad774380d17ab Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Fri, 25 Apr 2025 22:45:07 +0800 Subject: [PATCH 09/25] refactor: no logger need here --- .../enchaddons/feature/teamspeakconnect/TeamSpeakConnect.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/kotlin/net/skymoe/enchaddons/feature/teamspeakconnect/TeamSpeakConnect.kt b/src/main/kotlin/net/skymoe/enchaddons/feature/teamspeakconnect/TeamSpeakConnect.kt index 8c973bc..5e503c3 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/feature/teamspeakconnect/TeamSpeakConnect.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/feature/teamspeakconnect/TeamSpeakConnect.kt @@ -4,6 +4,7 @@ import kotlinx.atomicfu.* import kotlinx.coroutines.CompletableJob import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.IO import kotlinx.coroutines.SupervisorJob import net.skymoe.enchaddons.event.RegistryEventDispatcher import net.skymoe.enchaddons.event.minecraft.MinecraftEvent @@ -11,7 +12,6 @@ import net.skymoe.enchaddons.event.register import net.skymoe.enchaddons.feature.FeatureBase import net.skymoe.enchaddons.feature.featureInfo import net.skymoe.enchaddons.feature.teamspeakconnect.wrapper.* -import net.skymoe.enchaddons.getLogger import net.skymoe.enchaddons.impl.MOD_ID import net.skymoe.enchaddons.impl.MOD_NAME import net.skymoe.enchaddons.impl.MOD_VERSION @@ -20,8 +20,6 @@ import net.skymoe.enchaddons.util.tickCounter val TEAMSPEAK_CONNECT_INFO = featureInfo("teamspeak_connect", "TeamSpeak Connect") -val logger = getLogger("TeamSpeak Connect") - object TeamSpeakConnect : FeatureBase(TEAMSPEAK_CONNECT_INFO) { private var tsRemote: TeamSpeakRemoteAppWrapper? = null private var job: CompletableJob = SupervisorJob() From 6088d1fd1618456e9edb945df9b772f27a9d9a30 Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Fri, 25 Apr 2025 22:46:08 +0800 Subject: [PATCH 10/25] feat(AwesomeMap): Notification --- .../features/dungeon/MimicDetector.kt | 11 +++++-- .../features/dungeon/ScoreCalculation.kt | 31 ++++++------------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MimicDetector.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MimicDetector.kt index c3d4f33..aefa4ff 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MimicDetector.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/MimicDetector.kt @@ -6,6 +6,9 @@ import net.minecraft.entity.monster.EntityZombie import net.minecraft.init.Blocks import net.minecraft.tileentity.TileEntityChest import net.minecraft.util.BlockPos +import net.skymoe.enchaddons.api.setDefault +import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.feature.config.invoke import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.ScanUtils.getRoomFromPos import net.skymoe.enchaddons.util.MC @@ -45,8 +48,12 @@ object MimicDetector { fun setMimicKilled() { RunInformation.mimicKilled = true - // TODO MIMIC KILLED -// if (AwesomeMap.config.mimicMessageEnabled) UChat.say("/pc ${Config.mimicMessage}") + AwesomeMap.config.notification.onMimicKilled.invoke( + logger = AwesomeMap.logger, + placeholder = { + setDefault() + }, + ) } fun isMimic(entity: Entity): Boolean { diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt index b8cd02c..b2bc10d 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/feature/awesomemap/features/dungeon/ScoreCalculation.kt @@ -1,14 +1,14 @@ package net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon +import net.skymoe.enchaddons.api.Template +import net.skymoe.enchaddons.api.setDefault import net.skymoe.enchaddons.feature.awesomemap.AwesomeMap +import net.skymoe.enchaddons.feature.config.invoke import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.completedRoomsPercentage import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.mimicKilled import net.skymoe.enchaddons.impl.feature.awesomemap.features.dungeon.RunInformation.secretPercentage import net.skymoe.enchaddons.impl.feature.awesomemap.utils.APIUtils import net.skymoe.enchaddons.impl.feature.awesomemap.utils.Location -import net.skymoe.enchaddons.util.LogLevel -import net.skymoe.enchaddons.util.MC -import net.skymoe.enchaddons.util.modMessage import kotlin.math.roundToInt import kotlin.time.DurationUnit import kotlin.time.toDuration @@ -20,31 +20,20 @@ object ScoreCalculation { var message300 = false var message270 = false + fun setPlaceholders(template: Template) { + template.setDefault() + template["time"] = RunInformation.timeElapsed.toDuration(DurationUnit.SECONDS) + } + fun updateScore() { score = getSkillScore() + getExplorationScore() + getSpeedScore(RunInformation.timeElapsed) + getBonusScore() if (score >= 300 && !message300) { message300 = true message270 = true - if (AwesomeMap.config.scoreMessage != 0) { - // TODO 300 MESSAGE -// UChat.say("/pc ${AwesomeMap.config.message300}") - } - if (AwesomeMap.config.scoreTitle != 0) { - MC.thePlayer.playSound("random.orb", 1f, 0.5.toFloat()) -// GuiRenderer.displayTitle(AwesomeMap.config.message300, 40) TODO - } - if (AwesomeMap.config.timeTo300) { - modMessage("§3300 Score§7: §a${RunInformation.timeElapsed.toDuration(DurationUnit.SECONDS)}", LogLevel.INFO) - } + AwesomeMap.config.notification.onScore300(AwesomeMap.logger, ::setPlaceholders) } else if (score >= 270 && !message270) { message270 = true - if (AwesomeMap.config.scoreMessage == 2) { -// UChat.say("/pc ${AwesomeMap.config.message270}") - } - if (AwesomeMap.config.scoreTitle == 2) { - MC.thePlayer.playSound("random.orb", 1f, 0.5.toFloat()) -// GuiRenderer.displayTitle(AwesomeMap.config.message270, 40) TODO - } + AwesomeMap.config.notification.onScore270(AwesomeMap.logger, ::setPlaceholders) } } From f4c65a927c9dca8d526316687fd277fad07d3716 Mon Sep 17 00:00:00 2001 From: EnchStudio Date: Fri, 25 Apr 2025 22:46:33 +0800 Subject: [PATCH 11/25] feat(NanoVG): fallback Chinese font --- .../impl/oneconfig/NanoVGAccessor.kt | 34 +++++++ .../oneconfig/ciallo/NanoVGAccessorImpl.kt | 18 +++- .../assets/enchaddons/font/notosanssc/OFL.txt | 93 ++++++++++++++++++ .../enchaddons/font/notosanssc/medium.ttf | Bin 0 -> 10553780 bytes 4 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/assets/enchaddons/font/notosanssc/OFL.txt create mode 100644 src/main/resources/assets/enchaddons/font/notosanssc/medium.ttf diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/NanoVGAccessor.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/NanoVGAccessor.kt index 446bea3..9426821 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/NanoVGAccessor.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/NanoVGAccessor.kt @@ -1,6 +1,7 @@ package net.skymoe.enchaddons.impl.oneconfig import cc.polyfrost.oneconfig.renderer.font.Font +import cc.polyfrost.oneconfig.renderer.font.Fonts import net.skymoe.enchaddons.util.StyledSegment import net.skymoe.enchaddons.util.math.Vec2D import net.skymoe.enchaddons.util.math.int @@ -8,18 +9,45 @@ import net.skymoe.enchaddons.util.property.latelet var nvg: NanoVGAccessor by latelet() +private var fallbackFontLoaded = false private var fontLoaded = false +var fontFallbackInstance: Font by latelet() var fontMediumInstance: Font by latelet() var fontSemiBoldInstance: Font by latelet() val fontMedium = { fontMediumInstance } val fontSemiBold = { fontSemiBoldInstance } +fun NanoVGAccessor.fuckOneConfigFont(vg: Long) { + if (!fallbackFontLoaded) { + fontFallbackInstance = loadFont(vg, "notosanssc/medium.ttf") + fallbackFontLoaded = true + } + + listOf( + Fonts.BOLD, + Fonts.SEMIBOLD, + Fonts.REGULAR, + Fonts.MEDIUM, + Fonts.MINECRAFT_BOLD, + Fonts.MINECRAFT_REGULAR, + ).forEach { font -> + setFallbackFont(vg, font, fontFallbackInstance) + } +} + fun NanoVGAccessor.loadFonts(vg: Long) { + if (!fallbackFontLoaded) { + fontFallbackInstance = loadFont(vg, "notosanssc/medium.ttf") + fallbackFontLoaded = true + } + if (!fontLoaded) { fontMediumInstance = loadFont(vg, "montserrat/medium.ttf") + setFallbackFont(vg, fontMediumInstance, fontFallbackInstance) fontSemiBoldInstance = loadFont(vg, "montserrat/semibold.ttf") + setFallbackFont(vg, fontSemiBoldInstance, fontFallbackInstance) fontLoaded = true } } @@ -69,6 +97,12 @@ interface NanoVGAccessor { name: String, ): Font + fun setFallbackFont( + vg: Long, + base: Font, + fallback: Font, + ) + fun loadImageFromByteArray( vg: Long, image: ByteArray, diff --git a/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/ciallo/NanoVGAccessorImpl.kt b/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/ciallo/NanoVGAccessorImpl.kt index 15048d1..0293b4c 100644 --- a/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/ciallo/NanoVGAccessorImpl.kt +++ b/src/main/kotlin/net/skymoe/enchaddons/impl/oneconfig/ciallo/NanoVGAccessorImpl.kt @@ -11,6 +11,7 @@ import net.skymoe.enchaddons.util.convertDoubleArrayToARGB import net.skymoe.enchaddons.util.math.Vec2D import net.skymoe.enchaddons.util.math.double import net.skymoe.enchaddons.util.math.float +import net.skymoe.enchaddons.util.math.int import net.skymoe.enchaddons.util.scope.withscope import net.skymoe.enchaddons.util.toBuffer import org.lwjgl.nanovg.NVGColor @@ -53,6 +54,14 @@ object NanoVGAccessorImpl : NanoVGAccessor { } } + override fun setFallbackFont( + vg: Long, + base: Font, + fallback: Font, + ) { + nvgAddFallbackFont(vg, base.name, fallback.name) + } + override fun deleteImages( vg: Long, images: Set, @@ -496,6 +505,7 @@ object NanoVGAccessorImpl : NanoVGAccessor { null, ) } + val alphaBits = (color and 0xFF000000.int) or 0xFFFFFF val nvgColor = NVGColor.calloc().using().fill(shadowColor(color, colorMultiplier)) nvgFontSize(vg, size.float) nvgFontFace(vg, font.name) @@ -504,7 +514,13 @@ object NanoVGAccessorImpl : NanoVGAccessor { val posY = y - size * anchor.y var currentX = posX segments.forEach { (text, color) -> - nvgFillColor(vg, color?.let { NVGColor.calloc().using().fill(shadowColor(it, colorMultiplier)) } ?: nvgColor) + nvgFillColor( + vg, + color?.let { + val colorWithAlpha = color and alphaBits + NVGColor.calloc().using().fill(shadowColor(colorWithAlpha, colorMultiplier)) + } ?: nvgColor, + ) currentX = nvgText(vg, currentX.float, posY.float, text).double } } diff --git a/src/main/resources/assets/enchaddons/font/notosanssc/OFL.txt b/src/main/resources/assets/enchaddons/font/notosanssc/OFL.txt new file mode 100644 index 0000000..d57ea9c --- /dev/null +++ b/src/main/resources/assets/enchaddons/font/notosanssc/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source' + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/main/resources/assets/enchaddons/font/notosanssc/medium.ttf b/src/main/resources/assets/enchaddons/font/notosanssc/medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2edd925b9a56364bb3a6edcf64399023aa7c35f2 GIT binary patch literal 10553780 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 +PH#e6FC8{aCb4ljiB0WEY~Dj+ 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�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

i4ile0Cw3zS{ag6+TW$D(7DVdpwmW@ zc9x3g5;Oy2yI}D#+5;rD1#37w>XdB;V<43d(}4BkY!n&I=c6RW6YY01b}B?$*&XmP z=(B^MpbF&hEhLJ$DUZc#c)&^qlR*P57+%#fu!MOulPi{ZJvsbqJ-7dP_}m_-E?}!B zREQmdt~wNA>kw<3&5n;c-K(omh}~Sjg24!pzM-dSD8w3wIaGsHTfO*M7*LI^gnR=Y zdWcVi>?LQXzVkXU4k>L^N=Q*Ne3qX9jidCrWNB8(*;;A;g1=7am#kntb5BYR3|t7& z9_-7fuzGtT*9le+MOcs$qnbpTVpQGnNo0Cocbqux&~yiC7D#tEDA2!!_&PDBb3mP9 z0^p+e=>AgoKHZmf{|-OPjwOLh`v63(J3G>CMjE;(7#QwGQzr^UUMOz@hY9z1qJyi= zTA-LreT@WVDQYl|{q`l+YuYq8KUgvYI?d>pB6f|gX)^;=Jk|*jEihWwQ9ocNRe$3? z5rLY_?Z=3F$y}!~i!yTcEuvHp@zcQrAuHj5JspSnBmkpLV|d0jQnT3{<)VVUK55X8 z6PPV$jXIb8M)Lb^F9jEg<5&wKU4xO1xURqbaFY`NN@|l6n_{gneUi^bNFyNVuu*7W zH8AB%Uur)J`ZSHh73FZufV%(^Lil;;nejYBn;5>*tO~Tr$dG1A8fp%5jBKU=8e5-k zS^#}Q8*Qw)HC-2ZnI>MTrwF6PElZhNxKNz;3Qh}nMC^~GOja^wQ+$k%0Xit1F`1d# zB8+xvwM=DVX{Jo`1EP@p3FGpL<0h|z`hr(P*t(@*R)W0IAp#PpS_m7YVzii?v@{oEEP)S9p2MdwtS|<{PS0}rfhk?Kb z85?bDjC(y3E%#txyX>sj723{jvXO)+<+5_!l+9VhSd<4~Z+iDnh|lf0=`CpU-=+IK z-77%@zJ_s6&}DZH)QOdP!(*rx(W?~u#o3cgdMNiFND{Gu?ITPnr&64qaD zaPY5s$PDrX#~FUN4sCbZqqwJB1O9P`;(jl!ka@iz7_ckHDb){7G|&GFH)2M`>X^@G zlCxl^aWaq^2+>#z#~C+o2p0-*ijv7+Yw+>2y-tA4N`|AIfK-D0$wB3@PA<-B%9DDO zc6-G!8I%Wq?kP*hZ_wKenLFZeRZZE{EC$!oMh9?p8XX+3P?QIzW*93CszpFEDX{w{ z;$h;Fng}IzRY;t-)YSRyM-!kv;}H3A#YKPv&F4Ep1|Nf^-3)=WYSuKh(W= zK!OuuHjunF*c`o-02JLrb|zCv8(Ay)*+rwIw{O%d6M&-QR*b9x^=bj0PALwX8Tj~~ z0=?P)wO6*?j2$=u95@HX5@;AfaSGZ%s9^-XBdA?q7tkC=)bAV{^W+Mb zf_4C#WEzbk%Y+3nz|qCAu_D8m4a6)=0z=R*$K@21r&99MNd???0^IhXwV4e~dPem6 z1!#ZMx!V)z^m%aGZPTfGxI_Y3b!ZJ?*cKpKqRRnq%1!O{hSadK&6**a~6OLPob4;1UyfSJ_bnwd1mT3PI z0Eferl{=?}t(*gBAlZn+x0onqr#)7$@i|s9lnfbY-tg)%6t=d~`BIrDND}~x)Nusl zShaBkH~?<~dhtRAp%)Q&lXxRs^Jg;0fY~`>Ho@ia_ab=c`9ygRqS3Lme+fmS z%T|P9x-*$dUkpEs)_r1)4 znurQR(@G^+H#Cf?q2Y~&8*IJq?#3}->=1mo8_Q`{4;q)YgY|j>c|VPgT16vhq!lWO z)xnV*7#h$JDHZI00_0aSR*lh{65a^)P6ypFR-aiU0rHEC)g(ZE@#Kw*ATKx}`uk#o z06ZK1+riAbAMW0yi{`OJaOY0WPDf}Pcad|zXFLCG9G`&D&|(db_;BZFB$+Wmp^V0X zHAO7h!n7gT7#orpu{JwdrYX*V|FUbptiT|f2~B!O2>qgs^-{UplNm@mC{KIwan(0& z({l6jBt&g{ab2vU#dXz~5xSxfEuy$?Y6?J}ZiwrCVD^k7)N+iWD+DILzd#~;F=l6 z!*TYTXh>jEanTa?@k6G(RY}PBI1bgRcPr+hnj%IxHYx(Y?vrf;!1UyD^Z1wdlUb7O z6oQUVX0t|=%(njza;l`d!(St?`4 zj&xeKd(XA#<~YdUaiV+k9MoFChnR-#qmi762UL>YOkpDH7lEz+_s2uil_s=kJURFC z37FCH$7}<4jpmxSCjf10G=_7zh>>r;$hr1DdXQw35268Vq- zovp>mJSqEF{Bt+9+xXW3#|-09OnaAhStG(v@b-T!VERey_c=dJ`#D>~QNMK~kakRN zmmQ5TI)5rW`MZzHx~dlJ&BP~(l)BAz-3)B>Z$bq4I^A3P+HAGB(u0^JP8dH^=^#KV zsJya|bp=M!I+73=zXNRvbTbFwi-CAXrM`n$Uo8MdqbExN`_h3!su>P-95f-k8)j4! z=wk}am%+z}=5f8tWgdWjw4aeN{kwT5Pmiu`j4~{A$6O3Ey0$*bz|0K5j6)G|&|Us% znGg8+VN(wO&I$7Q%AP4`|3v$33Elydr)Z!pPudwJZ-r~h8U@Y{<&CCZF9Wh?I86#w zg|PvR4}mH=F_*29m%^@D!Yk(r)<9?p1QY?h!N*~M1C2M;0MB|3Li7h9NO~W*m`*iG zi$D$!vY?Wa_UPE13;nU&mRlEY=0k3IHBCE+!(!x!kvfg5bmhH22D8W9qa0ZlY#x9Z?;t~PKLmR5bf(w zBqN}Db-Ui=;IPXU;57(X+Hc_O01Er(h#v3^xVzaOaZ0S(C4LyO`4y8j8XKO{KV?mh&kMi(mc)d|^Jp%95F z2WF$-1fg-N93s!hfjs}%ajN4XM5;1tY2V(|2==?)JyBvHOOVP*vivgOVD)-lhTg%L zQ8LK_^w{Q0g5OIIQ7-RaSVzX|7S4)#2S&AbaQ!oaV?JO8I;j998|1VtI2SDCn}ymL z(gq;e=4c)|3P#F8QQ1~AOENYJ&z+QzeU5g(*hntPunwcaMQdXtb{hZFe#PGYgh_Cj zP4(%?nrvy#&Nj>z=ij-#n_Ip>U}x(VRBY9^^ePpgfmr(GC|n4lXE|d{oB1*t+g}LW zxtXsTl~QE;1z8{-0P_H69xTk?YPpv>UV3ZjRJISN@ZH4Td~AYG+^-gJ9Nb<3XD=Wfg`CKT3OIE3 zm;w&_@&lmkmU0-B-Cp+2C}AlzV9sW?lMT2IJ$!T1)fln)&AFTqfLm?M)srxT*gY`u zh%ke3b@DL@l^QFZ-bs{at%rlq{Y(e@w+<{}v8Z@sMjDCdj*u%HfTSFJ4vde75N~GOR4>L9!)&BGSwEIWD9~w>Ks`w)8fFDKhk}P`A@-BdZky$>&>qi_<*RT#cuIRbvz*e0R3ZQ(ZV@M=x}IGR*q;_cX<1qr<%)zWWWt$5TA!+pevB4sL4QI;!yAGLG?5(<~gE5 zkA=2>B|*&Ngd>(&0dUbu4)`q4t`mG@K&kqQydeeFsAl3UOBZ$~Vb_hHILQXK*LsR( zDo!5zzw+e9Jla>z&nc7h6BflmkrM`kBl%NcUw}@WHRu?&VkF?sSp68TWy(gpgf_M+ z95b-fUfZYC2#JR%HM%HwfZzoowR#V6w>o8o?tr)hnuhm7%cM)C(J@_si&RU($0bd~ z69U*k%kL=c?yWe=q|~{^EXt%jcF3gi*@%&`AIYRD=0OY0Ev_WwYP}>Rg+dMZnSt7f z@gDMj&J9Lz+rk{L@d2J&lA(2fI|O9gT=cK-Z*&fT9Gfib=L4rEegQ)B&FRc0WzL zkJth!*&tR)=<*Pw-V6iy8u0wc>Fqjz-g=nuk-UR5LGTJe~GvZhsb$Qk3Fjn3Qx@+bEAqBNwuo=I% z`*GqSuo(!#kLC$C)f0X36fh1QQT`F4b5;3yotyrUDILM5aRp&Q`54*l>TE z35ck?FrBAFs5JxyRCs_|g9LX{P8eBKO}33K#43$j!jU{f7Mc*>QEC z_+SPaLnj&RK}>sbe^C$hxEj=-@nFAFr?~*#ji$Mb7@FqV4D?KM-DP0)-9?Vx5{l#j z$ECGI)S;hYs^^*&ZuNS3#e6?8sh4I-B?m$z`0@ z$h3eV(md%5VMadMCDT%jGmPgGh)|?6+o%zWpxMT@2zSTw#Hd~}lV6($e7TScByUa( zx-cgNtr|U?!q6W0k57rO|NMQahmoq#$8e4=G5g zG1C4t1#n=-Cc)SZZsASF^sTANoVg^A=M#6QrCibCGz}I6$V=SN>G>pa9{#40o2`SJ z_yb_0c$@Cyy3ZrEcw7W$z+rIIH}^zZH|)L~6ZnEKBadZSo{ebF5dGOC(4HZlvG&6q zX%T|Va50to%pgQeV~F~UvMI({+Vi1Kb^FMCS$hsACUM+ohMtR`Ks}eNe5mK5PiZ}u z`pjgRAvwcSxNwjOz?E4d9&S3qH8EwaC7m-Ktau3YP*+qW5dqVq>iY#sG|6t44pX89 z7d#;NUP?4zpVhql^)G4-60ZQR(>4azHv%VRw?P7z8z{q7Q>Q^9@%qMIJl*0VF|h@( z7q0zJT*48(njbA+NIFw+O~CNdGVrK%v~+O>MjH>qfgqd+@4g>!GOMaP41nQWhf(g| z*8!(btH&kYfBVP6q7l0H~j>1q)R1#sp;)l@-DM91Ba|Gtx-rz(e zx(S?jrHaE=uRE30=Jnt5si3PH5}JVzK0s*ZAtj2bOwZLN&dp%FotLU(tsKo}rw3Y* zNx0yGGU8v|D~CccO9sT#*8weyc<>N>L^bn?Eaem9D8x{W zLdEZ)h#j)s?zKUhNNpg?eQRAg!QS*7m=iIE5My;PhR9FvnSYgd59XXZS%@0bs+ZA1 zvyS*XjT}v7)I;QGMOtG%q$_jtRf^FV^;B*&K7zQ>{t=WJhyM^P(AlWj>~??!wtpA8 zZ@kR9P05Ra$j*RmK%B%}zWEtDT!RyUS*h^yQgHWB)f>zc_C^2`f~zMmd)^jxt@@4B z4?JEP!3ps(z?&NBsJs2w0Bkcjyi#C0m&`7C1)Holgi|3S>(?8C6q(2;46IpSP%;U= ztc>^wy+*p%A^F0_d&$;j;*9lr;>G}`zv1m1l|xV&iwN;CMNdQNkzl8!;qg|UVw^8A zDuC1Hs1YOZ_c^T8-*#*4U53YBeZ;Gg^X&r&iz+!^AqD_KD*_N!g0?XL5O$9;00@E7 z(_kW%+K97o&R20QW-Q61geK(l*awuxhVZ&y)J175i=fT>1@s`X)GthdNcAmK&cHj5 zlj%P|j&Oi*5!hM}5H4nTJ<1Uf;i6`rx;X+d2vn}e)#wnKDl>r4R1nxUcRxwI1dI~u zFU|l1^fiEC>Td4#7h%6o=r5jVVmddI9kwwiaWUeN{dOXBCms&VYC~~nYTZC zKo6p4512~MiA*IQ0#iA&-=#SPuP5;al;Z;lUJURghzt+tW>00qz%vGcspIQJ4mLFp zmD>eK`7c261Py|}SNA#H&u;7)g#+}j-O|d5=wG!Y-x&fySf$5e{W|K>RK6#5T2XEI z9>w+bfzTvg0@X;w5Sw=$#}G?8$j={QhUNJ_QgKQX4?+|tqKEWI2wK&4Ar8F97Ee_Ou_Xy<8xRB z%StRZ?lwct7tUm3G}Q3{HbutEr8r3odi*29O?uXg zw9tOijZwePfLe;hRFpLOu!7WnEsIiHfsdfL+18;C(^6ZX1mwej_Ioj90y6UnPnWv3 zkhkC(b!|I^0y32~@SK5%S(30f?V*P|vn22Zn1ci*NA%NgAQFJY8-vq$5$2j+xOWD% z{O^dy z2Mk)57Fw-W@pT*#cKxP5x!`u@B!iL2%Oerr=JmfjkuF*|k@5FepWH7`cOjNNjL*1U zatsZ@%xRFKf`XVXm9~NZ)n=*KVP+@goc7w%?YHbl!-6gbnA@)s_dsjk2^Fjq6#5W_ zz&#KZ|B3El-6wUQMH9)bP66OVT~@0p2Xy&R1>!g%!A{#$r9Zg+q-rzZ$G}`oH|3q!{40CPYGTD>Ao@Vo^9i^j znK#ExZaHp(&+;=)JW=f{;($0Tr-k-=DX$}PdtxO6t(+l` z8T1o`y`V&0D*+?*?`|!DRh3-LVDay2DA6Mg`hAq>H&h<)yjkV(2Ex{fL?gZcJl+yR z&|)fuc)Z(p=HXWcm?{f1-EXF?w7b=Gm)2}W>ukdGJ2eQ$d2z4u-qu#7yHQTZ+%MA<|a3?@$8$xj^ z2_%qgDk+eJ1eQQ5q-?T~Y}$s9LMo6=ZyU1N-B{26bKjd8&5Sffg8%OWMzUq3d(XZ1 z+;h+Qp6|CohN9KBK|Q!9(ObF`p!7-i8KR|a5v|L57t>}Q1TnL09+DLf@A#)4vBM_p z5!&p;-!^ijD}>@;jIk{=1q=eiXPF}%^tdGO`d)j^G&Mix6a(~5V&U}Nbd?{Svdg=& zO1HKv1KB>=#jlfJ1v}{BX2ilgr)i!Job@ZGc`=b3?Xu_sVIBOC=HqBL1*F`jfriq-K$GX3Fu+niT@{Aa$om1)6Z>Lq=2K+xqb#<5#Hg zK?86j@5vQnosb{JWOXWtNeMoG1W0#C(J+Ycfo{7%{|2sFFW`vyJskY_R`H3m+gM77 z7zF^+{RZiUM>Ou`JpwS@o0yVFGq+ah;%%>0gVBX)QYI15dI4Z0&NDMSu0|l*}kL|(a&@G+@(^AQmibMQc|+@Qi?K_6vH9GVDqn&y(L7%1kn0j1C(#& zL@K!VQq`#;9%8#Yzri*CE{rO-`ZVFI`l?aoE-s+TNiLu;fp*r*ks7K{u$KUTypx9JSA5uQ}U2JrBJGpa^X7Y zf@i^?i(+=gBQvVlD9P38_%!GOj)fB5R$l~fB<%2Zq@hy13N<588$P!s@K5RJKtto^ zL0S1FRbC1R+%_!N$9#%9ppV7f0_al=0MO^*4KY>u2+%Q=kT2&Ta~&zpM;d{FZZE-n zK&_;Xk|yGstcCf|lr%5!;PMWX0wXMNQgwNk0wY9X+L|gT(Dn4w7BB>m&C)|Q>%-(3 z8mf+&XJ_Cr+}!aFV4?gNfR?`s2cl$J9GGx8wSe`e$*2a`^fp=w;GJ66QcylKwI_*4 zx$?*S7OdT%U+4^;xCw+h0C@q@?G@yRYi5c;j!^g4)>`!X&jSk2M0Xe{thmGAW5BH^ z=qYy?04qJyVPFytrE!Nr%1Cz@*hSD`@KPfOM}*6Tc&zqNDZ~SGoevx!09{|3ZOs__ z@lxGHqG$Y{J^=&>KraEk3B3uZQO zZr4avyn*Y3o0nMD%X#kuKnep7B9o3;fCpKJi>A*3+abeT$|$sa84C85C039RiS^Yh zED%;!nCT%grv8)`+wG!mMGQT#F_BGoDpXg0EwGl;703}Z{R4sum&pGrFkz`N3jkT3 zt%$J%0DTpZ$zUnh+f4K%-DbiI=kQWyfsTT1GwCM?uL-xAxQ%0kRRNUkcE{95tAdsG zxu+od(*hRj5poDBV;C7U0}4L zjcN@IWXD#XAISYKhZbHR-1|QuNN8~bsUng{IPr-9h?eP{82mzO|Iq*#z5cU6M2P#U z6f8MjAMEt_J-C%hXc9{Fczt&E09T}N5S*S1JH0>A>jO>?amvarB~7A=><-G8Fol3E zglY@q!T(tRB7DFlL+8OYLpv}Suli&_9{lkV*kyy4OZ4`{McB*ru}I)4qE{Jvxt%!f zC?djB>A-?jj$b^i%OAi+P04yD#zo1 zf(Sq(;`;&qSZ+i--f=_6XF;5(X;jxHTA@^JY|U5A-pJa3xrT7!uinYDO6JX10K1 zot-jaI%}V_iq6_BjPOlXxy0j^#x>o~L03DF=`pnOWqQMCiB`Uv-mt*X%EPrDyZ8_+ zH6!AI1tiX4F3D!WyB7j_It$&3Z@i*n*lzRarfc^X4vz$4ad%7`@>v9ubg`HaNL_p& z7U!qOC;Ma~HRoqifbyio-ZHT`u(WU59ZJVsaJ4brp_|BeU@D10&VY{;159l1Gyn^8d#8+fU&9l-c}FM7Z=++nu#FY?0`BdOVcx9< zR5lgY`hKPh1S3$ZyFj2pI#t^RQqv%f_O@sD=PI-`DOEA*7&h0@((p|Xsv99^^aCK8 za00ro2SELcP>sJ5@Tm{L?e-PmASx$STVGC_=SDZl)WO1(vkq<=QG;uCNe;t}z_i{2 zfE`-+92{-w>uUOU+?wBQ{`1f;I6RiRcg!8vg|O^Gy1ztq|}d=@5q(>I_3Q5BX%!gyDfEG&vdAX$}o4qx#{P zDwEX_e`!yt0rfK(h)o&`V^C)A5}Kf=_Fw2adttCtXYb|WI=fI0#IYF&7ugCvC*0GY zmT=`9j*6!l8cTD~i3~!W==v-|DTK}m-EL_XE>kh}g3zOL9f)_Qmc25o9%p}NArJo) zfYfmb7;m3y;T2eA=3kukf`4mjw(u3^kISO>G(;GlyjlxQ1nvdm1v;WkWXk(ORU7G; z2z4p)fkX&R>9c8g3*>#}f^IJ+^(pa6Z6Ni5g6^LTgA;=~gQkCM#3b?V-|NuZmsdP2 z+s?&FquDsVFk=%!P{RX_h!ki}m4lj*lJE+8sTA+h>YNpZv)%y<@mt(9jp^;wjm{xS zN|Z`|fu~YRS<`^^759jYTJ{P@q16d{M0$;a{bhy;sy2+FS(>wj8kS}VV=zlI+Ry9_ z7tK?K-{-5I!vO z_MKJn9d1Ev14abVOC4qbPDWjF1lPOqomPo#G8p*;>x7re<9Ux^XlwxXZQt0CS>oNd z$Dygz(n?v5`~JN=PO~GPeBD%To4;H?EP$|MkfSKRIP%ICaQI&81?|HGgT{U zP^~j{;Y|QI;C4+wCuIq6;P1>NFkT1%2MqEZ0}jTRMoN%WoB+Uqc?~0lXnx3_NIX)R z4DiSjw^SzeNPh2H_KA50o-~rw+D6Sr>#*B3V^J#;DXpfvTd(vjLO3%F{q0{S2jH#E z$W5(QI)1A#X>{hcgiwWYaC@3H%rfK01S~pTM6RPsCim28NQr(|qajt1@nbZk)S3h+ ziB@Sy*%hE6^$)&^T7gy!zR9K0WXGb};)++{G;&A|`ntNipw{NQP-UnyvY0#9_KupmO!6;@rcvmG1 zZL&5HX_k{v6^KloLvB_2Xxj1k@%0lEqt~HyVpMtN#Kh#~6Z2SAX0V2f>-nk+!HlD~5SJuuEgp z=;uwAs=hm-SxMmR7{Ow3H98242mxyhv`APIr3#=vEIzti5{&Bd=CG6(9h@A_h~+Ya zlouXGow0+rAx7AE`029siuddM_7q;(m(4M-r7N=2AL6hx=Qw9*)xI8#{{>VIVkg#w`M zG+lral(FC0vcDeiadtpkK2CPgFX)|gF=eamC(4(zI;gXal(=@=%W|yIvdouX$hABP z8(+xPJPBsuTw$FGYM59Ahu5qj1G2+fDgwsI;g8%C!id}>jVK0u~b!>44e9z$SoH1&f$ubOC)eX@pf)!uTWx>^){>(a+qdEg}t%m)AC*p8$9i5eJqWZK_CGprqpq03{ zwZ}hK_A~@p_B24pLD6YOkn`nyup;McPkHC82FK4K088UEBiXg(X!*7OKV1sMu{N@f zKwq*9ZS4<`NuWT$Ohyb(&V~n2YpVMaD5A|rDKYu-2*)WCyKm>bJs9c!8tE#3{JXa)#`j2$P)=YSc! zy6+YTLU``&B7ECy@@^Fuao6wb3M7w+RP`3N-G;sPfsOabhBiiPquYSYVq9;m&|7Mh z=JQ86fa}GL(iqpvryHdK*9(o(fa}$3Dvi=2nxaCk&{B_VJOG$@M~aDe8b?L{Syc%% zUVH!oR3H6B$wKgRb;n&mO9|@Y_0N;qH##)i=L@k z-J0ka{S)*Ni4=aI*YL|Fl|G_P8~Sc$;(~hqBx$ymKWVtsXJDSB`IFFJs#d>!s1Ktw zjju28V8E^ulf^(P|L)R?BZ_b&UK*k22yD z_6t3A@*5JKR8K7eGX_C3W9)KxX=V%=53OK<3`MrTKOfp0R7?3%jRzn`_nzI1@z_8s@^u{aL?i$QL!GNGESg>7zIub$=@0_Vj8j6>%;aQ1GlRPt zsc-hNAYCHmi^Iya$s-nspvyqS{RZ^k3iZ4zd#pKsmapS#Jla{vlYzX25acaDolPZ@ z0)7X`Um*MvJ3+Mq<9BFX`#%XvayERF;mWwe^ynDFFe1`PWEo%>5dgzTxab}Rh7m3o z-CdLVuTJmo62hCXPwJs*X9Bu)+8OjY%vP=jw(NcMb{S(#9512Sm>BPIjzqs@=3>3h@&-Xxs0$7*Wv(SA&mgS1`-lo@r%EQ76u+1 zGJ8h=iYIwM439$B@eJ^ncARr~fEhfQ&|t3cR07AV5yI(^fcSxhNCGnoeH6;*H98Q5 zeGebi+_cAw)Xo%{OgY_hyF4Rz%KvZq$}5-gFRjm}P}qE0t>3CpT76oy%2At@dA*yD z_RH-CP7g4I+zA^*os@5N#`9?T+Foma;#zdW z)@FFg+#GSe%ETX}(9HIxvF}wUE{%9|woZFCIdE!q@O5w5 zNs_zYzrE=jO4Edy3^mHbygN82ezI0|WUWnMcoLzgf=<2Q6hG&i%i;k!%?djgJ z!`bbO=e^cGeK?~H5Kb_o(B3qj``nz@9?OSwxW?>S2c`d%pz2JZuJ_Rn$*%5+vl%9@Z zs1Hv;zHo8lUch@mX;(Y(X#mRoZS8>H#>X<+l&%E8-RufLg8acQ z&%i>=*&UW-6>*1m(64re^_GY+m9z~SNaJ)YIvMI*NTO+MrM%9ALrU68I$PD9z(*U* zwBx?hm%VL&Sm)6cbdLNTr-ly}jE-V>a5Na)>59h>j*ncrU4!MpU|#@(Nok&<0Hop4 z9XZ%Z{jh_2$c#N@r?YEKe8r~Lc$}^EYph92bWgw4;?aie z{+uswwFL7ZArQ{ltSMX8fmXKWQh15QOkymhV3~IIrf0*^ohg5Rr;4SF4|k>(;^>{0 zagQZ#Nk?3{Ado`@yq;XpA=Qth92x8C_8e?E!rJ7tVdLUwLXr-x%BKx}3-*TB9A=2e zwx_RX39)7O`#onatmu+=8f{%cy`$S>iktIUStu+g^<%-rTaqyJ0Z?O}-c56ly z>%7{6!C@OcySV#Q)>RDkk3&<&4p$_;3a2dl&_^%3XC?IDcFZM&_O-v0-y`J^nrfl) z76%uF@9!O@8@%IOr!3`6fqjy4ZEbW~*@tyIuk;$Licaans4PXNnNoCm)uJt<%Kuyj;_&Ofug39nE6q3uj^ed(JoJd-$Q0$BR0!uNE20NduQuU@jJ)%jxgVpL+* zoBWcP%$ITu4@4%y3b*Vs>P7Ux_DnH&=$-%6?dh_mtzGuCd&JiDam z@MQ`@mp#A>b+F@T&Ems>C`Y!N2DWruOGh>9u4GGQ`hq>rY*_hX#Umiq(?O98t59mfrzTQl3WC23tSlVG6c12g0`)1W_@#2odSAOQ@+06*q z>k$3AEx&`R4-Is7W#~8;9zb-QyVaw^Y@$DbtQ}V-n0<+Q;yqVP{$qQVK+jtHU8bz* zncY)3Lro#)%HBJ}D7}4^7WpnSGhNqZ{7FlaTM&3oS~A zJ1zxWc&(KpkoTbd%vK`e_6?R%cfaV!NA%`+uftbVMa4dqDQpyKEDDuH?zF1IO0Ftr z@pRceeO|=bp6$e*x!0_mxOdqbcJvwy>DQhcK2$K;i{X)?H#Hwh#12l59m{<720Lc6taE;g}e!)n4Cv*+cU+%``_}q@dKmNZ@T+| z%eHa6L>-38UF?JG0&ck71sex%o2!8)2jnKJ?qht!s={YFl7r+z>1nw!cE*VrFV3%3 z$Ik6qY0;Kd=e`>r@)>+;i*GvLGZr-Z;-29csHuZQkQqjzA#9czBx<(~skdiA zL40>EG194IS*LmzRt_!Xc3WAd#j)&S9KFXj=ru>pogqgmprjtlM1r}1QXWXyTp8=Z zm$$vT;JGzU!+e;V@3MMBGm$h7196g)et_VtEfYvHaddrBr(Me~+2N4>tG`c`07iLp z*eFt4lxnlwWmQGsaCV!sqwYShqdRPfPQ{RCdsY>OZ2cNj>NV#^4s{#tz2V^jU*}vX zas0&CC0X~}t^4o(*!ZWnZb4xAFKt%~upH*0m1zg0!f+z&2ozC{gAHjE0{zg({AJ7z zEk{%ArXluLuSrvODkL)M3e!dJSlJ9O}xOy-({2e0qmvvo_t zgQQ|fKcoP1^nNVgtS#)g{jj{5(Qczp{Nr1(QYkD257B4qv{m9#^fE*Db<-3ezlH^}^QzfI?oT zD0F5kCTy_L1{(bNwnF}Odrr`S$>GZF0({S{j%?Kw(ni`gi8{T z`z_Xxx-;yKsvRaZ$ogq>?)+rPL1A-?qnG=9XmrF^sQ*Kc;75gsH~v%Vhj$+s z`N=C_K=ib=-)Rh*zPIfc2D`&^@g-{&{b7_+LHM(kid@{dwY-X%`7HA}UP0}feK^|F|pzbd?ynD>Lw`g)rFvPq&#MMC40x*nJ~FVv!lbiAI_{o2F{+)kf#p_ z2z8dH_9)~or7mcQqF?q-z3Dck*JAH+gw4GJuCCe8egSD6V;hs&-Z7h3^5!?K+*~x8 z_da-mD%b<77AH~}l%b{G0|!=S#`YdmIx=>PW{1+E=sYw`J<#v=?{S#!6xw5Um=oC{ zg~fZ6c%efK8cIG`IAv1lBq8j?PhipuAv(;!lad4RHO@>zJcU1%5Yl(N=N%^|MH(Rs zFs+k(#6>4_yAr3>ZVhAuuePK{iRafW=uL&|dU~!aP*;Cv@7|w8kL^Mi*Zwz=)9G>v zf=i+Py;%c*h@D{7pVL-#K+bs_!Vzp&uaoPPCm}7&Bs}T8fHw@Yl{6a0u#jHf%(9uv zzG2Ig+9drwO3yW}{Oh`qg5-`a6N->F*XQc)0g7OeUL`S#MLN_MOT~8Qk=Ur!guu5X zk_La?F~KF(oot0wluH^>$2fpjGms4w83j_2E+muKT^W*ic-~-s(``py)4v+pHBguf z>W$Qk78R^OVLmB_B`|9y%S({8JNKA$Z@lM;X1C%0 zqEEf|+94n^V~drdp|kH3_1<(~^`^eQn^q6p)VmT~?Co0$g_iny7lU)e^VBWHvweMM zi|B?m3k;}mF-bm2q+r+M_32ouSd=b^!AfbN5vejLuAE+*a;kd$kxXwN9Df(~3t0NR zYv-=yd|a2-vqtm*z1(e5`qfGo(K&ck-_WW4_=vGf>DBvtT&{x8l2S(<3*R9A)?@e6 zCWg)a4rF8OY;#h7Fv?elZrQWdr024C+Zc-rxAlez$aHhuS)^mHBDw z9azPaH9N0EQ#@eJ^;*3gLChJ9uPPNv4S!aqROtClj_MrY8*+uCes6ro2z3Cx&TV(t zsH@TIfU+AtmVD1MaUEL8=BCHxI8RB~tL%^Hm6*2^DWV-l5-%0=jz)4el zA<t*VsrT{HYhXg7)N}m&Z6eaSwg#r z>rR?1A&WxzrV;JLp*-Iv&g~x}#S7Hic0rfAch63X)H=VXAP?-Bv&rmB%eP(l5_y&0 zSk#;JgU6;$O(4-D!bDAR&lbzRGe@!x><(+!{7_{L5O+Jzbq|gq}E`F~E`VRy)=Jvma{42Nb>M%Lw8_a$OwLWhO3)@orT-8AeG>jZ zSTiTUM@jmtB$nb}{vK&zn&+q9_O`uyStn0^r7y|8)-#iTXDKbYnx`cWwd7YNK z_vX2XKr955Jc0&W0p_j609`}#+bYK0rG3mdcVGHj4Z~r2V1S;+1*Mudh)>s zEq@$c9g26}G0qvfE%#uL%x2&YaP;P#lOm%@(kC%!f03~E$x_nZeAH5u$7Dr=9HbEo zVuwpXTGy_fMK6A52Ax^BZ{fWQL}txE{N}>1%`Sm}EsaVMl8{>J*4%5)-;(0UrDXE# z4cBF;yT{RSY8qWiy_Jab43cq)N&G+7(4qYvn`hUJwR)kg0Rg+|nB2b!9`Gj(2VbKG#gu%T#xbr| z7+Dy}Mz6>Sb)4?2lD88gHebQ#TAgC(P&TX8$N~IUY;ym}yb=9-f+rzUNKCvw{Wq%k zM{}W5&eaQ4J;RP0l6O-@)F<{XPU=Mtp(;NF_mPVi5r+aoxy(5RI^jC5Jk|FiKeS-s zNLiMN{JBpY2!;7l)==`)*Dte*?11-n`ZDR%d9Gd@lNd$lV0!m`T))(RpA_&As(Zo0q0Du3(4$nrC_QwVqx8CjgheIIv0+rX{XCX= zJT}&Q+Uzz&G-$qlAcSw!882riTrTSDWW8cS(W5i1x$w-sOV=1MC+ww zS@&tygXix0z%{2Q(Vh49A4qE=9)GtzcWgLf_Qq6+l-=E1EcE)}4Szq{OT9?t(C*v* zgLvLK)9>nwi&*@?Xlm?06n#vea1|nJ&lCrGy5a0aN+UDFGU4(!9+^^`g!mfoYVg8N zF4yVxIxVESDv8%@oRKRBbu9hBmHXHb$+3Jr>0UpJ;PTn%6U|5c$8+b90*>7={m|Hu z{-b~X^GE4VsJFG8gBzYXUm^Yo=Q0g%4#>?_Cr-3*sgxeY^eOS;=oi?|+p;;b4xbnp zI5XzSMHK@ozr$B>+PghUy9mucVOn~z$%I6^AGqdKA6+*1wPQwS@%r7%H}p%yj~$>s z?F@?An9zTbPr}ADLj;h)WJoX}x_I0w;{|^W7OvtB=w}{-8>}}2T(0QXEfZe1XR>IY zQpy!`G;+h*P--Tc+!?bcRUwI9X7X!wL6gcRcImoAt#VzTBx{MsLrluX ztQnWcnUsx6K4~&TLQoGWoA1y^(gzjFX}}^gMADnbd4mTCmPY z`cZOrdTMGs?L)=6x$S_nTBbV#!qp4j)rWdW}Y6 zVz6&lTI?%0G?HG8C30Y#x<6}kO&bjFRunq}j+yB(;@sLTHWQ1pgU^SX2j7p6mhQ(; zds#R+yz|u%ddZvKibv7WKY!yJt**jDKRZNy8L|oZ0>r~mm7L`!*I(tw)?a(?rhn2V zcU}3L;~Nfta~~8`+rHl_Kdzm7?LG7m+PTb_F|j%l7ggkUh)x*OUMP`Y+xECho3wwj^Y?XJjnR zaA$Ebz~L;(6n1+B^0EdIJ){H6hC@Z>jZ= zhlp+8FxA1)D`5u$$CKn^;4CnG9%BOt-Ej5_P@6c#3Ax79nfIPP{a*B%fBYO>@_(oU zqN4vm5r{6PsfP>b4f}ejQ+vU);t23r+Mrl>y7sDpV37U?f8QkjzDYIYx%!sLLq`u^ zzIQbG-z&%W??3+Ex1ajq9p_<+nLqu6`sDu{y1T(o!g1D*VaQeh-@x!;;i{r60K}D| zEEXMQZSr#?%UK0Wm06wzjdwP|a)*K;FN)VJ?A4?q2Hmt2B` zFw-o&2?x7X4?q3%!>aDVp}dNEs=?TB{PbgppX^X{%Fs#mMkO3T+?RrA`m20o#F~5QIcvyHXl^(*=6tSu}p;T`O1Y-+#s5?l}FUJ6}hfUs_r_ zv+1`cz{UH?$H*|a_?fodyPK|xuD4@ACL8xrLXe3?%1bY?c0Bg0LX%2l=kVZMqcHn&o&)swI^=R)bJpL5~>vP#A;~3 zfw9%RCe(6VqERc`*j11C7K+XuwO-*@2E#9$xwxnC%bu9%UIO*cMIo;QAS29MAO5cBpU+}7u{4Nrp( zH=ajJH}m~gruV}hc?u@xgiLjn>6_$v+E@wyK)IC8kJtj?#i~*|dRODGH63fyFTx&5 zVY~p5f;*;IlSA0#?F{LImW~wp8Uh-gXuKYh&EX7^R)fc(3a;)nv z1g$n6TebgaJ{}UJFgt*&?lO8;9C+pSMI+F{HuuXWpoON$gr;BI9JWBhzWOU|3cRoO zyb?RBkr9xi|MI@UtBc8TbC<$z^z}HMB?!&#FEw7(O>7`8oSxZvDsMARC^i1^cx>Ef zR82T-V)WB8YGago5Dfro!%lq$4FGBbK5jmJ0)*z6onXfqghmkv7pEH`hT_Um16az* zeL~VXpXeQv2NpUP=T1hVnW0m`Sl1x>!$#x@`pphcG8qqLufCLe0f|R@Ca6!9K5RZr z7X22$8x~Wb#Bf|eU&NUtQfD$sC)~*`4^g9K!H4TQ>ifmMhtJ%44B#Gp=<$|X=;h4UnE*VW|*^z zEr!qPu~+1*wrQ*Fo!u6uYIu&DqOV$6i8<0=1}o9=cN<5#O&c^k;>41(2&j*c(FhnS zk4vvpxm6Bbug94I43*73-t4%ynhkUE@tQLyf7f6c5CP@SG=@Plg%%(QVPSNrZ-CDd#as?2N0@Ykf=i$o zs^<^OvEXpml4S*te`aK4EW36!fY(=57&)!20k7N5cM2U*3|?o0s36mM06NEzy6dgFuuBEp zN`Y_d9S7cJ^6-&EkmQRYa;wb-Rf)jLtlI1{V0Yk5+?Qb)%yg9)3%KIls%%-0-TD;W zhoV9fcTGb&5s@}e&}#?O35SJzm&GQ6!HHP8yTTDphv&NuR+UrgQu;y~Pu4QTCFM~9 zS}~xz0`h9VU0p>QoLbe7PLJw8|I|~Tr$3<{u3FbkEfCy0LA|S{&jJ?!u?2805;Jzq zm(b3w^N|fVYpd>(@1+*wox8h&89Hle4a3!9kZ3shcj$WGa#?&wI5-|x$^uSjK!$A1 z8%-*S%|W>)f5V|8H{}Jquapy;Ti**fDTIr_3P93!LArmr#&a>wmMez@5nUN>-a=FQ zTTPl(`o_6rskMPG!>tX76YGjD7EDe}K<-k9qPjrd4u3};LwMnnR&*>o=I(YF0YJGt z!9$`TDc1=E8X0u?+o7=`lBqN{KyjGquCYpXNR5gO-8FmZE*67f7j&_7*}SV38!~8_ zE*41n1}|#JZ^I3xfDMraGvMC*+cq_Yw$>Ci<=^#gBKTXC-PE9QN27%+4*uTy6$km< z+A9u3hB%yHjLnkybutxS$B}Z>F3}g<0Y}~^(~5NxhdQY@`2fB~0N@Gslh>vCoyn`# zdG(;##OjH$NuH4gE6S+lk>$amJ)sNu@&sy)UbWF|pyB>umq3j`#dOuzsVb6xn)J?A5EnRaI6+2gIfHs(3Y}RZ(-jF6HlGRkXeat8yGx z<+adCBa?~Mf`BGu_W3m~<-)c9PZx@qaJlm-gGQ%T*e%X<(3(kT3u`yFT0RCh@JYyL zVO$+F<^gJ~^n`8Jy;IrrfWyRm7tArLPJw|E7ybs#kOc(lJ{rh)`lC={PFWoz(a2)A zr;ya7EJ>Hiqp)^b4B4nDy4)0cuo|+Do18(b-mVu(y@g0*ETAwcMl}Y7RjIY8#X^HS zN<32)@J&?3cU9S6@PKX4tS$>o7WTJAuxjYTX*Aj<>Rm&1zJawKvzMNzS&HmpO^Jv5!Hx zwsjI~di(HMGY$lH9mwoSnR^Ya1#{f23fgrEXpll5t7-4UN6P7?d*$@j^y8($=dctuNgrbTN(ZRUDx&t>5fNX|Jir7+_3;)ts5prui{~1^lFt^8gI;6D>d7C zo|>^W-C-Msg_Hc>qm%pwdRXg)!rGr-mCpZDWr1+>XH5pbe$p7DfG2GRi~^o?!*@r` zdNjg&5~kXTK2J44c-EMoIWNz{Nbq@q5@b6!*ZP<;NiDPsl)7Tq8=9NlS7_JB5eth2 zoj^ivaEFg4gk~=mVcpw*Cd>vcCz8twH@&Lxxf%}7Mk2G}3l~B=@kjI-coLbMLw5U+ zlX|gKp~Q1i;hn#pgV_9}HJC%)&4k|Ea@ZR#r8Y*2FC#osA9Q4IKdpqa$u9ov@ z>nyig3Vgcp1f75}ty+q$_uob5cUht(|!TYFzl^O{X&D0SNV!J zwj5}k|7bNX>`}0x&5)pJ)1x#PWg{O!lbB08xS^|VZ-@=8driXuH?wNX z39vgvkmvaofCh}vOEV5EK?lLp(C_z3a&hDPo$hpLr?Z_)eJ*DKs6 zbJ7&{?usXeJyQbGIKb1#)ZN1t51NCVwK(XqIB@^IHvpgmg_b`=_wU~&)$673ivYnB z`V-Og=)OZrXU3{mjhkGlgTSxRC56;2g!GpN1IdllB6d*6!1Mdxpp6b|FKTE#RP=rxlLI|H$RKUJx#{uJ<_7yi}7W6dli*`_AOe&Qzy}8qtYcOgiO=h9VUL5{avkR$Aa+>S~6j77_ z4gL|NYDj=;MPTeFJ8pmz1$it$s>oqOFiCNEJ~gp1yB>C4%9S+%vg1y(hB)?r+}U^M z{bR)J%=Gkl#z9^0E&BaMk2Nff3e^&sMWwVUB^p6g86)mf=%sqKoGaxD1r~)lZdGZd za+Or3wZ@DB4S!FN&B?jB3Lb~Avg+a~N5KP%FfzGPMVCDu1?O4rxDZW!=+;{wob?(C za%JwOOOD;#txjQ2NFAN;bN5}|n;6p% z$Xt3`x7(F>>wJnq`z*@FcP0`${0n_)AWNWjD1iUpYV`SxCa+f%T7J_Zm~+fF zrZaV2d+5mZT~^a@C{n}o;+-EFUi5kwhll39Di{P5aphsGx+%Z`1XIeADw=LNc%C6Ed0g7X%y| zXpi!Zof#T>)nxaaX+Rxu2m0Nv9>2yb-1l$hy-2KbNHjc^)Z`cNKY3{0!TX07a zSTlqCG+b6H@RfALx!%MG#VA1H%TWm);#@p~STD|=?d?4~d*xZ+hr9OB-1zw1AqXG< zlJ8s?gM>7Ii2#_7{w1C13W71-4Bz}J(g5FF2Mh`wtLur&8k~w8vcX^w=AK7SLuSId zGc`SO#u2ur^wimhi3pfOwe#)Ns)G+b8yuJo-xLx1bQ#&6vyY^(Y~ry8_VZuqecV_XLZUReRj21sWA;y z$E%{`z8=Ki#lH96ebnDvNrQktFO?FK#`SJ` zT(G$skE`lsj$%~z7BK;DSM z-5P_e-_7Ll&wy8_5v%lSwHaC>MP|XZJv@;!YXy~WzR==u=SG4vom!Jg3xET&-lejeY(k}2 zDD;bKTRm%Tp@aJm96EGh|3T`DP5Ys^T#>$V2bUVk3fW3OnbL>*$%u~kR`wU*+%~ME zlC0!`GWh&@p`d}8?YJmEF~jUClfCnvdtP^4Cto9A301uC+1K5DU6()y#CB>yvTj|G z35l-K#?+d)_Bi!B>JKNiF`X`{T3&kAubWtneEgcEh>m{f?&~ag5$+- zpk!?=rAcxGc5$^QR@QCoAckwhtIEl#K)JQNVfs~tzPi$B_W8_KkLNqMIf}i*)~7%cN(esg4dM zljJYqNsp7Z!(e#mPi${QEl*3M_q=aLKx#7fiK)nBSQ}H3y$qe8!ljhikpn;G19;oP zW8M>FItXCf$@PM_lppiL(kC#_PBU{P)cT$8C=(1Ctke%RqUQX3o4w>!5KerPzVp>! zi(skqY7>ZxvJyyFBY5CXs{(_X=0MeK=VZ_~5|eTxp-_bTEBd#iF$pIU4o5gYndvjK zjD0hsBpYOiS)LwGj}N#Pc#zG;5UZ)92>?SMo0wkcS-WhrKcW5z>~ENZVMLSfAINDi z347T&YtM4@nEN6?0$VK(&Yj~9=0 zcONNsg>uDWF7)wRmfv568e-63*AvhC_RmfpiBsQ4xApfArq-@UV+HD3xB&v-dA|zj zg$VB0fD5(l60dvRN0*T_e`~KKh-`5EJC;%wmrAF!sYBD&cI$x9!f`y)&*vTDadSh| zCt&zK2+QzeC5!{my5X-E-%F26+!zk&B3g~mUGrA?-~464G0TWE5Lf%mL-w>avAa97 z?CvpVT#lGB;23~E>fDd6e%F~%c%;BXg+F%UpG95CX>T;{wZ%P(s5&*8$SfrjfeEWK z4>XLS(dVfV7Bc z#xN3eXDy4XnQ>P(YU?S9h(^0hBBI0%Rb#~pq5bxVDdolH%p++^fH z_e(DpUMd~X6m=BKZ05l3#)y8_4GskmhVs|E!MnwlYl z-!oWN(A@h)0iRLO+{`42(qb|yz>p6MG5i38PRF3DNOZGAdx_iIlKA1**%3Dhiop*hgmqtz@o8+@{4 z-7*y@J{ao)m32e=2nbMi`>CI!H^v7*fbuBuMAZmXM?d)HJID7k;*uK|k^`p>FXSI# z(?lVIh!uaPnZ?BE@v6rv&7`YlZZM~^QYE7=wtBh9x&dN2NNdt$&w?CeW;U2|*b*jM z4bq_rT0I$emlg2s9G=48WwXX?DI0OTY64j5F+Q47u}r(OjMQUp*}_tG4#z7>k1;ycIpH*&a{0|rN&`cJyy|6vwHxbZ z_Px}Up5JAmu79CWyCI%}5-x_ZuzNVUS%s znQ`=m2ZvpOIhQ|%cSCmSzLQvX@zxDv=Roe7B%dJu3p}zJs{5Fj6uPBhS68xVWfA1^ zEHp{>x?+hNYMV;pTah!=1z7`v$TD7d_w__gb0D0Z-< zbxHcK$;j_)CGbc6wr&QzR?2;%cFg_)gbJ8I+6gzp`VCZ;<7>9;pCPd59)IV5Q=bFT zJ?b-c!$ZHVk<)8$EDmsOn7t4lK6Q4buO`Tsa!XZesQo+LP3-v=SE@z`FCzc_2LxCM zuh$HZf{Yf zG+UzsHhsqtxYEi}a?U0LUm>JsS}@KR$AWRcs~erFS_!V%Ah;C=Y6j<-hl_3kt~x;M zGJ!$mvSTU|ZK}I9bFlY^hrNu3TX)ZR(CCeOhSoLQJbIPWqYqo82C2raqrO=;t8I$2 zO*S(?*)RVY{4#bpSdq6*<*wv>AlPjwzE*dgoTex6Rezs4DfB8$5fE3iD&S6Wg1DNB zqwKb1M;LK6ePk*|sLIz%m1A#1Iqi;3Zbcllmv6;<2NnhehK?4uV&z5v$4Z|q8vX;` z0DRSkE9q&hY1TI~+N(B5BnCC3X+|x9MwQ3_DrmG06{w(LjVh@VtDuoLmSiK;zO}H>&YL3Y3(y%(QM>94lv)bld(Hy#ZEF)s5~c z54?P%H4zxw>`G(S0*@B&E-X?9rySZ4m|W~8wr={xx*djw@dPR+XQaQd$@fxg)Q{R( zjz;2g16x>-@)Sd~_rNmib+=0kt*+)mY4uZn+?Hh2xNIR!GUASCuo{;%vaZH85TK5= zGj(ojy{*}8SV6WPNLOB*<@X-S9?x4#7N<{(5&+g-k^wRXiVlTDY&h$8XKRkHd z)5AlP8jTCBt~@CgTz>kR8+UGFp`xJXx0BZMD}@wv=))u@G4Q|wl93E&adoh{)j2`CQ*Nv|-sgk?<*~Pi8~@R6r&7#;xgo-Zu8VW!+6TzcXv_ zyAX~ZKXLrJ!Fz82P1(&NBU4pmG)|v?=tyr78Pz;MTU}*!c0kW;8Yz9v7I%pQ62HY3 zQYRwrFs&$Adxw#zY=F%prq$NB*ZEC?Co^q;Kf{^H&@U=rIIGH1(qYMlj4n9(O6cF@ zP5AEGNkvrj#T?dDWHJW=$Uuk0=sr9*@yxwD+PH(8zM?oZr!lUMC*jtb>9`V9s&A)D zPp>Sz#7(D^(k&JG>dNY0_6+#Spc8+eLu3)&ILH&Zx&U+{5D2XfPi{0c+X;XZt;T9K z={;(v(IJ3FP+<_QtaF)%bpd@MVel6i@jjNqMvM2oCewXc8S>JchPEB}$y>L^cn;Om z;Klz043-TlXl1FLj&qP&2k9J;(*dCr_#8_C1^)n)l|65!p zb8GNFU$}_=y1aW2e8cR;2LY^%W%{@Pu`*)DH7v9R8FLWZf}#riLK#MZ36x(*tOV0T zWXV$(UVn|?S@LhZict(d|G&r9>3;@{$ z=+y6+b8Fdd8upc=H4U)P3uHk9EIKi&gs%cv9YA5VUnS|Uy5XzJviJ)q3gH=mbIp@G zc^5v0%)1Q{VP|hvVlW6vX-vs6b|rbibUMH*3>a@gPYbEcrMo10j>%!>N~Js`i7DCI zu$SxfJGhaAa_zh5gFI@_)qFSNlOp!YnO+N8KFE^Fd2$EwP|s4~kJPsfQdvAEP_T-_ zMpY_K{W`PI`7P>SHDX0)r%1`_A2X{H;co?|L)8E7wC+$wq-GE{L*JmzO$fm(9J>*W zk-PXY@?mlhy+}eZ2U2PgY4<|?%b7!;{`^*^gL;dx~Xb(l*_Ib(x zrLDP(A0;0kCrke;FdY|5+XSz$5^MQ5dkFMj`}b2fknRi5IY{k=&n5QrwOYZdNUtR) zFB~9#xQBXS59;M7PhRE?96t*s=W`c-Om>lSpiYJk!nxA+K;`X0K07e>&bPigu)}-J zo8N)1yu^FyogX{SHyXv4J@A@ULN)5zedtJZA#&*@`;k+B=7n!PJSa36_&pDN>K7+x;#nO(1A5qdC0)a6O7k&d!ERF|*vMQQx$PNU~@DIqsRf$JU zpx02>TTqdD5-kO~?z(T75Oap#dS_xcLM*XNEOqMC;{hZS`9`D?IhQXIu&58Av(%l) zM*Y07M`-Dea|{MSD5>Wn)=qTA0J?NctPl`Vzl0@Lto^%@zj$SjL?#B!H9{4WlLX1( zcOINZpP)W4^38vt-kf{w9XG@UdMzh%#hEiHIClPv&yfF0FN+e2d{|kHK6dVkpchCY z;SEiP!&vqRZ+B)xLuUp6E4dONNYW(j5G|KZ1Kp#7mB6_6eZ-|}Z%2W{99?|zwnJQt zWcgJSJ|z;b0#}65!V!tsNMN;zSek%~YqaP=g+&z+D~4Gj-hE%YCMS>i(9d;NIiZTE zIj-Rxl{mD*cZ}We1!{>HG6U%K>$`q9dCT#oevKj`R%XWbT-En2wE*a?c~T*3VAQ0F zhu%qMNFEXB30c)#g;bW#3T5QXv>~68+FZfTKJP5-Ox4B5X%h(HneL!hxw5+6jD?MV z6JcY)KX>y9qo3~Ry7wcCBDZq!Blj%Dd-qO^EnGFp77NhSndPbJz28F=MWDY)m4hq+ z_bp#MnUy62=x&1r<`>m)-6P%94M$da_TjUSgV!0n?x-f>6Smoi`U!GP^%JaR{c>ckv1G18_Fnbf%;a zAGnt5#mo|4`H%soH**>~PgBGLV&woS;@-VPg4EF z0n^&&oaB)U??CT3ps`t3he)}=(Vyf?1?U)=g7GFtlMXFkA(!X!0vT)Pys0NGvw5Pq z@yIm#`+Veg-k?ChQYS%@2O+KywrBsvC&>?!J4#-I*51Llf);+^tEP=D*iRn4aNlm? zvui`hcktlCxu{ zU&eS*Qp8`CYZBtie3hb~MF_)gH=&ukUN_e?5?e_qR?#Yg8JyC4;tWtZGxvzmc5 z9*Hbg0YXBR?)pzax8Xxn-e?jiGijlMH9T!I6!QdS9J}+H2p@C@{l{+{Sb*tIU;GmJ zC|QK*`{`=u2&Rdf14q^5XnQ+*SoD%+XcEH}_rnVU(Gl`O>pLI7-O*hrjdmC)TdrYwr{u z%66gUl9M=e)K%@+PO5kBx#xW6JKs6Ceh7WhuCi!kJVl7%$bhc18kz4f$4DcJbEN3TtMHZHdb zruk;HKnh1tf*oK&5%!{Y4R8ciA&t=4kYpRCCMa9;*2mcaqQaEohuqHHkoP-7JUQT&WrPeWT+uz(@@~&%PJ&tUaF6CFRoys z(U*e9F9u)oJXyr~5-HqBh$-1Qj0wgIwU-3G6cpo-|NhX$`tIJp(lUW@_#pSM^1r(supTV5N>=m_I zaPWAfRs#$Jggb;WLczcr8#Fu%wpk*1Y|0STqEu)?6 zciCdJ7gSRUg(7L$aMPsFA|1GDsg4~~$m8ZscP$g@CF9pG*S_z6?0lJn-uqOHt*Wft zv#qG2Xv;-a*6O6XUt3;jB-B!6Jp`3QuWU@p!yfd$-og;7AOw~AGPZtljIuXxe~O(X z{N~J`NKGo#y`EHUynU5b?w9JuFB{hq@@+Ry8Rb5Ss(SU#% z+EiVkc8$#hb>W#2`@3WbScf<1v%s1%^3sHu;o&tcVXThANENK92oA?naC2xEl!9bX zvBg(M)Gb&By$uWM@S1Q~9XmK~U2|8%Cirk#@DE9^F1M7z+~@ycDbW?9<#((Xs5JDd z!&10#a||6&$YSMpz5M4sW_EXn|*=>av9e;h5)FfK@>U|dnmU{gQhYQ>V!;@>A zrJGlKoUYYdP<=L{9e93ynLOw{Wo*vIGPYrIOk{7|`WUQY#GLtx>{8V%Da7c{nwHhp zlK%4XrecQiNyPrDu41FBCg!4KA*Ccx+3x!!A<)1T!*G54cm-c)k=4nq#y(!06cXNK zkwqnfyB$i)Bn+6QsRA!!QKZ7v4T)3D$=ApmKyy!m;s9%EOHRj>#p-;7@pw6Ofn_BS zQ1~UX+>*leai!RN|HJx$KPEA@Tu(faX(eu0jQ9$L%x%#21_?&uYiDFi0R^aeXh!Vs z+A+enNV}KUI=j)YGLI3DWV+F;Ow~$CxWg$AdC+(D7CEUd)(KrL7e}K%$kh00IcFOxL@xo}A=MF`&;w{Q zwRlPv-~2Xvh_FOi4UA^~sK7;2JVgMmg%yg>bms+2mNb67f(*l^2Wx{??2lxTC@teP zx9Ahaa;HDp5$S{{O9H5Ph#cS?s~80HWw_^$gK4?lRQ*q}gxl35xpj8`*XR}&5i^;i zKb%mw=_$&IBr2Gg`)30=etDwaWp5Wq>F9P|HhnWmqTmed= ze*EsaCs3RXHr=OyP&VJ;-u)MZ4WgDUa}n`r#)&G&#(pJLV!V0vv-o{`(3?8IaS-eT z_;j{Tj>%#hUuVxJ9Ole7ggceGrnk3+y#_tc?!JUqN(xDTwZA}3$r;2z;==H|A#o{D zc!J6HFn-geCm(`7tZoj;c|brA!lPKQL47;_z!?@87ng4XrW0aT1wM#HV>wE9;hJ{X_QxGcA0I!f?NfUaBt!_mP?6Yg9rfxz<$9^|RHf3~ft$X31)WDzI6f@P8 z6KjX}4zY&^$xZCW9qbxZ#Xiru)tAX9=F)y6bnLZ3m|CB;j|99OeAO-x4Ov2mJavUH zmv??UTwvRCVVwKltftfl@`S`|N{9i%P0*dmx3x z{GPiGv8f&=;FDBzbk!&V=_x>KWvV72bJa8F#IbvQ8r%hB zK3ahrHZVOkE-hXEDtk@#0A1ereEr40`k<(3>rAgzq}K~g9h2+dipup0zPLclSLl^P zQiexaER>W8gcXd>dnwN^;QMR*R<%$rm4%~}l-Jk@PD5_@m9~c4VEH_d#J$EXAC?{C z{?Q01G@!o{_${(D@nCs)p1M;uvFP;2T|y6o&l zlgvTBXdE0=M~6Ncm09hD#T736sG*ZD1K(Q6Jt_vTSXMUosQ5^q31G?Gga3y(3K4|k zXhImsmXprePb-KGQ<>lYV3F8lmMoT9O)Jq?ndga{GK&ehSXBpMf&tU#4z6J$Js%`XU_bYNYMlB@KPmt~KjB-E^_+DaPHb=prmP4pu%wXp6Oo^oyhwG(SI2fmsrnAp)KP-{eW=k&6_8*+>-kCWgVibs1|N6;wRfGq5l z=xw(23z-Ijj_7JQ`w9r2Phhfu3!cpt?AVfpve<@K0V&wxtd{tF&v9e>mD_x@*+jWl zo>yzG+Pb2Uw%aM&;G#n#h~4wlvSl5aD9;az5UkI|()@vs1sR90tRvbE;IjZ2*6(qV zNDYGfdYBnJzF_Hsbx_&ZlLhzqMpVG+cqQ<4Md0mq+LCBAhos_h$lLMy2mon09S%s* zA(!Vs1^$cNcQNwfpa#&-9N;H&pp{!#SYR@DTJqmV|3W_Y=cgq-D@5Acjv@((~3ymgmQES<@H;|eA z#ZR(6>flSjH$njW5Ca6Dxbsnr7C=3n&nwS2x5 z5(NRz&E>EPDHDTy3+J#Exg6HnO{h9=Wf$4qG%Zl#%@I)hfc+M=%M3Iuy7}a*k2(!oASL0|)T+Zisl^$pC~SdMDLeTz`4X&3me0jhXjZex zMS=f;+r{_~e{jAMKJ(!PWhf_p;qMVoOI4V8Kl<*D3T31aeWfpulbRrKSK#gn7f;d7 z_Fb<4H`-&#yoY|n8KQ^%apq_ED=TuaKLa-~!QLJk8~gd#7<6Vfu}>pEnE>k46)!Za zFqu)305YSq%K#Z;fuk^-bo3Af%{7g0Hdi!tw4&pz82y=59B74dP6?d5S0EJNhiwDd z+$69YTNmtIaK(Z{3yxxx`(K#~poh-_!r3xiHdvfaa^t)U^CY;C zO#++OA;J|rCZgo&LtcT!=`sruY&(w#mHd#d?QtpCG z5D5h5kZ|F76JJb`KjIY@)MzNZP~vnlKd+`0Vi75GN=Zs0-=R@OlzL^fNU14NX;h^V zBaF7v>8hYR!+G*M3tiMjDHy+*kO&n9KJ~o`+9>X%lyr~4oS10gDU?)ge^|#0xq6zl z5lvG!vAYla^!Jv2{Jn8nCm4G1&8elC50!Er36ujNp{3P6v5N2OR;o2HyHh|3HGUWI zMmM{u70rD7@rOvz`2n)LrMJ=|p4`nK8kLZqR+G@$&OTVREM2b`8x105tg-L1xGECW zR%&B0=nVA((t46Z85$^XN5GR{?ejSh*6@B@z2MqxaMPW!jBx2VYz$}k|Lf@>|NA-3 zgN!_LM&@E2&JEEfbU!=rqba%3&=MsTl%tXo3tu#7tKt{e39YoFy-wYfjPJebnnr>V z)?a?fc6O>wZsB+GP4{%kw7e9l`NJ@rgI1+)b?%hDyPZ3wzvR+5?v$3XfvGX5D(-q2 zs*1Jd%ukIWQ)Q_l!jx7_7Mm(c(Tf;Kg@+Wr2S@b`($nahX`4Z$l+1r(eRj|_sK z@LxQitwu{5g%Z1)`E9jWA%$b%f@2|-@6f7aDxW3ydYMO*B$COHgN_>-=t-PIIb8TvspxJm2D z`^ZPhUM?#TgKR>@Wd;F`zkq=S_*`K`flFoHIW{Bvy)(&GXq`nHgLqb!f&7B>0>7(qn6z@COd<)FKqB4Ls44b~4JNDI z11`u6>VwxggI97LFxcF?V2pfv!N`Ica6>s4Bp|ZDp_)+YaQygo{vluc!M;Y9V^OdV z!u&9XBpfWkARJ@q929{%8j7*+tQkQ9Loz1N8O323@o>{169`DFx_j#&ATm5AtQ1;m z%SDm;*7{-WW!i4`8T4ybUxcpd{cBeURkE)TsG5BV;n=%^P-VXUa!@3f zi#mjINnektzeu3dQl3^~_aJf{V*mL2SKBC^mS6wGX9(41-ZNXo5?cW!=Y>i&x|(ET zi8cX#p@z7mwgmQaC3_vJiUr^!Qcqk$d3syTVoPUF=8&$a(MKGMhADjozhXXhM zCvqm554;#qV}~!y|3$pe;Fkby=YI1)7jd!);bXVoF1Y>nFMj^>mpXZrL@YKan2-U{ zBCU&}Bz*9;B&$!})F*1Yrc&`myqU!XZPSvn$Xr z@P^;}Zq@l)OK6iIwBnpns_YUOfOMrYR46ycG>o=?T&Uie%JzX`tq z1-U%cCDiGh`C|tE%Bdi)<%9~DB*40bYJ%guzLg_Pdw=+M_8^Zw(R8ytNwCOTR(mV``(JyMnI}nMwX4B7QGkMx2}TO>Y4#^Xp^&e(V+YDWX*CY%M{|QFTqrRZtv0th z0TKr*xX@>~tV|Bca1m}J#PJ2=<*chqz;@=q6)5!x9pEf?LZ!tx3_~t0kQ6{ql#=n; zw@95*(PgNtvG*7g5hc5A#JhCUxs|{zNGi6ipMqT9T3yNv$)c60Y?_bs7V~5yDUk{7 zwGo<;Ai_I2DX^EWnskS4>G6QlU4Ox*MQ(}JLKTdz+Kl2MTW7na)Y{pz2F?CB7?y|y zNak=#K`S83g@RXdq@e-&hGQJh(#+k?v@)O8V|RWAVWP!30ye6=#U^sBD$X0+`Nz#U z|D5N^qNIG4HJ6NXdBzzTKE_q($2k2|q8aw+v4sk~uBC*KQ+AvI+^tJ)R~5eg zHhs0Wz5mZLSrzTlHj7mZ@9_z_Uf)toXlYl4SS&}TwZ6Eh~ts0t&0id686 zJgHWbq=3@bHkw(uJiF>VztYs)<-DUrTUljJnro_`@A^dw?csY8>pc>iNLyKBJO=ow zL|3Vgm#pK-Yxaiq=Jp;Z!?qL@!Ct6hO8BQm!1tL?-b21T=S|GeaqoitfQ~Lqtl%Ju zaSNoUr}!?Mx_#>p&^PEQwwXd7vLU1!8+!?qa%EwW$t3Z`jH1l1&@pzJLMPaMq!}3a zPMR_ldqoBl?euAd#DU?Dhl$$RDe@TGUU%`HO<|E*CGf48LF(Tf7dh}+L$pf*%raO8q_>CVz{VE5qA)VXuP(vH0cV>KJ{=Xz#IFEd9WaCxKRc zkZc3U$iV25>_SK30Our=xPp)seh^@v$Ss7Ks0txKM}FS4|B|fQyKA+(-mzlmMFcf5 z@kBbZ|Bg|i-aw5V+r>(Wf1nIKI_l%z>0qzIZKu;zfs-KOft72Q`x^tRHmq&UTtnPq zUiQegSu`67rtYBeAJ4Ny4RrJTaCz$z*V%86f$KcR3ASajB5b~#mG zmyjAplI-#O8n*cekyQ3nOjjC@s;kVcUAHzAXp|wDh!XLIrdI#d;>kj>$slrcr+OT9 z>=e42eOoKh)YOXPQnF{zp-Y6pFk`UQk8p;GmDxB#7l6zkOj5;Fl@*W?0KkG5&J6Ol zc!Ibhv+;}P*gs3<6@~}Ul3lx+f!I0$7Uup2Wb=6ANfaC#L;i`0%%|k8+1==Hop;5y zos}Y^r2M>%Gw0j4+_p$sAUg7s3N%pR9q|06pwPV@%DE0+H@;2j<9fxh0((NSWYy#*HTR%=_> zVM~Txw9E_A0B=}XzocF+2`H@BZ!d@%W1w7ddWfDz_D8kPHDtb5Yc7-fq*@~b({_z| zA?0!|CU1~v^m_6Vqc#C^$CHDF{tj)U#NoFkXp_|{tC1DhtgzS~&?dhODn2~o2`BJ) z@I|)O7oU<|ZoxsfA|p90L}I27LoV<9B@dBa_!;gwcj9y#11oG4x?J%nk^h`KZ^YmH z$t!O<+KOmF>kZfK&0IqE%|3w68y*f;I!2eQj8Il-WW|!fPdwYMXp~w-vDHh4Z0rj} z_d<5%Xa)KN(m(V=w&;B?d2nD#cJdwLrHI_lPz-ouMt1bXvs@V>3gnCN?abg_`IuM7(p2=pd;1EhspN=9f{$* zVXnFytbGnE=uZ1eAmC*oFXwNw5FyKK!CN78{l$B)ZKv!^(^cm^*jIVib29+)C!VtIr?2>W%_tTaxPMnvy2oaM=SkSa%8v5P4m)E&uytRs^O~bT7 zBb+?9UBf;;VjEr>=czQJ@JMIZC>kTm$I$X6AHMhOEftC)X<+kZH{5#LFL!?brT}HO zO5!Jeb0w<(wxu=!>G2x8PYGxJQ9Rg_Tk2Eq2m1~PX{Q`L7mS_0tfS`way}-Y1tSFm zi(*){7)rPGK>hDyqA~Lf>KGGBd1?(G1Tlz-sz`OAOITnPx_$EZ#-I+?A~Kl8b)6nD z*=kDPeF&_R z!BOi^-c8;D`VA7!u@Pci8HUsx^vS_Vt}B9jDqO~uao9Q@S0=bp$El}9e?rUI!?Liq zuNkD%O}%JB-#io(L7HFESA*J>@+#|^>mOes&>O{d1}NuFkQ-nCl01t+u@0c z2L|77FjUu=JIoFB=x3@$j~%Ii#tUKW%DbES#vA|k#GWFt#UduyY}A=zS$#WGe8avxzq zMVOM&?1P-q;O!~S8VyO0{bC%g&$RiY5~+akcx0dzN0gMbe4DN4;hmkbl?0cx%sckj zBVb#Z&-LVbdbnWu^{AzLJjzpPsX$MC6)qB!=yA5KbV}lO(~+8*5{cc(@RTu)(B4!{ zmo_z&QVm_UDEfMu-9)w;)At{)01J^6UvS_#>@Nt-FuFT4VYP|%4b>72zjMTEZmA<~ zWliV`06z>s%SXY$F;MdXti;Z}4f+)!eip-G!V!cpIah7W@h6a zokDh;qa(*g5g{>HRE$%ns&zpH(NWGw(I2 z6-gun`ij*IqVKc8g(*|}a4}D=5EXUQl=Tq<=&(#B*muvEO345uQiqjr`IJc7fAdas zc{<&6O{Z*yc4wzI9t)NUci|FBt|;9H|g{Jd(%-2Ol3IG73Pcc(-2W3I$jI z5CTe}6^~57XJX!2;JCE}a0sW+-M{xvKSu}HwdyHltiF(fZj-{AFgk~kH;K&!@?I&Z z!%vQ@Dt9auY7O+lb4nGX%EmR_v|c0Z-_WXI@5tNVoYT5_42cvY_g)hh0$z{oJvz=) z7cUuenrs83MF$s`?Y{8bsMur_23M|M6V{L2xYkTr3#9JdkE}r-oo%7e>js;REi|iP z(Zbm&$78tgGv|p8)f|V2O4NXJv;ca!kl_tsW%?OG>{ayr%t;`^svO z$wJpmBli@aR$J5p5g$QxCCeg33ASuQBLmwN4PTV-Ri^D`l4t~vY@?P>y*hTE0 ztq=@LUA{(0|n-XHTZhIeWge?4I87%Ijg*w;~0nMQ-iH(+S)3u0eT*isS4-!V)f zp*Gl6$@sMuZAD66T2V1xD>iCH%~RDXvQ4ulDV9cxAN4aG0^t_5YeMIMk*wtQ58Lg6Jqm5Q{7c^F=29#y>zZ!$QzdcUK zX;+O{#mWc+TQ}N2QqT{+8e(QJ-GY5J*|ERw;0@O`P#Tq>>XJ+MRj~hbh1V{12fZuS zeVMt><%bMg9akb1(La>AmONq_xaZ911dk*KlY1&>a#=|k77l{J;d~ojr_L02>Nt!t zKjtKf-I-nJ7|6ufacN;!tx#tWmo+%Vw^s(v*<3~_MWt(I*yH%{Bygm`&KtYUkA~4p zvuj8T`&!L~=dTaa2EDLwX6?Edy0^vPcgh$q!+89jZ#yUYledE?pp_HPy1}Lzfoq0q z8|q2~N;nJP1UYbmGdTjY1o?!3i<|ffNDK&aX9XH%&a^+`9l&eT1*fwhEohaeS z;Ux9c)c|NDb$7CVe0?>F7Ksg7er2tG%V((eoxwf+>dP+M6)i2V+Yc(Q`I=KWNpnK0^xu zqK=ai!&75#4?PSy7LKc;=3Do25GdQaH{WXsk zCPh-dR>$SBOo@u80a>WlpcNGQ6>MsxAiW6ioSF&^wsm9Ml#RYL>Ycg$!X<98*(fSV zufMXFU8j|(%ge=TL33|`rX)bx&caK%L-q_jP+xB4IACbUG)CkAkD}$Y)T~m5%}7k^L8&Db zh{Uvzckcia+S?m}U85t_P)K^cL1xnM+jwgI(}bAjOSNKw)?}at8Zp;Hirj|;^_ zd7DpbASfWz>{@ZKG^Xiw^p6GQ8o9vzBc6nxnu#0B($>^ujHggj!T#nh2=2s|!9j(F zf7{P4>y)b%JW!jd!g64aX-U(*kB|KN2KMXUKi@>@H2mnrcRcqI+iY_6by#ec?*9Fh z#YXcSCTT@#JY=Z3a9c4!$>oANlUxy$3232!y+nU=N0ESCw-K`As9S zvvyWP1JRi5~x|1}72MYrJ!H~V*DMdte7 zOi!0in>vTXB8ycV>Th^!p>yHtBwuTwV$=OS6KElE=jdlce;g&A%Z!kdhQ6CGjX{UM zFm&!!-44T-$~tQ4 zUlbP_jCA)dH*&I{BASuaXlt7tK=_NH^;E`oqpw+&8@&}gZW zk(Op0PkVH|*Pb7S%@9>RB}k?CuCk3wU6dZ0&qim8GD`*k&LeB)WAqVvNw@IPn=8dO z2UT*(u_wWjbh#urn->{juL2NLPdjR=vmIJ#0?>~`z|SABv!KE$OPlw&$Uz*;tf?iz z!!de^KnD!_VkQ_dXsy~X`X^%Jt`fAp1JtXElsuYzWL%-wx0jM~%2h2EiyoO#mo>VD zdOdAR29KYWO1(A6z6c43lwagvTBpy6)2TZTRT5&ATGV146fKQ72YM_O*8U;1BlC@` zP$K5T6nrk6d}s_!57>Yg7Ma_6iA`tcS4cr#h|{JJ8`(& zentrmQb>Un4==$fBsd*Mh{uuW+=}8FC43KqE>J_}%PjMJ(*XJd+VbQ)Gp;^*; z-l+Q7khxkBR#dTX3>%sTLJ$B%UJ!K+6QiVgxFI#vjjmyTU3b&%M`|gJnqP6n!ON?V ze*EbZ*RHEc*J=u-HN9@su;Y$bf84KJ{bV)hT!iu4ZKP(`E0_7@fYW!LSpIH8Q>Llb zRuVJ1!3U32ioL)&>^}HBWUJWDRSc=#m zjWVIp4yjMwGT@U12h|?osL;tiJwKTuj*k{(?sEEoo>9frU^NgM(L1uyJIVwgABDEf)?uK=2m5@z;+u6q=jeKm$)y)3gVGk3RWVWH56KbQeuL@+V{&tC! zVn407lov}|C86X9k)C3gj{R&<+-qvNdSb9RhXx&hW+2zRY1CMhQoQNY*aWgyKTwIOH zcM5#V)}BhJqd1|?$41aA=KUKOFop{t78Kb_sTBnWTDWGZJ0=u*Lo3jSl(U)^ z3vU}$C8}%`v{FX;(L|306f1+WXgTX7Zq6)19+YAq433YJt>zppB?<4m>UoY5m#~v= zkcaT0cE>p~kD+YsluHN_ugKL=XK=+5ug|-5?PsH?dh~bfLfATt##g~JW(S7pApmkv z6Ib}KAIMj^IctS*hEHAo;Z9Zj4za5cyb958$Jo~g@0*rcq-kh3+>O6^&wPhlKTPlj zP+;~e;@M0Cd6Oiz)Fn06H)Xy`6T837lRCh--Xn)|)UF=Pt7ML-$(2?)B8CecIv{p& z4nTTUbH3qB=?IOUWgCR(O)vZtNb|1uy(PQHRtt*+Xq@40ZSJbM&g}!-ZU$WhAX>GAa ztZf}9D636EC>gq>$!)G$??oahBW$+nl_5qX5eWsq;h9z+USw8;r1C`X@>*HSRk>kM z1M(e-Y00j}KlUFjIrqW~HiZ-(N#TmkTUO=FJ6lr&^)lotxEg|oIN`OxE*F=rPe&g4 zeg+sjmQ{Dm+kwqQTjuemxQ4PZOSV<2+G5_(lrf?29f7H2e;Z|= z8M;;!?uZIfx=>Z3~)K&hQkc0gV4n5cw@@X??33Cs2sw!GdCjK#E?OhlHMvMxknz>l> z)WpOe$H&npFmGrQdg|*c>I|h}ra=~pk!Xay+disq8&3#zdMY|t3#eF8Wm|jgcbD>E zAjiz{{fi8+;iqxuT)Y8^Smtf^FNk6PG%&!vA5n%ws)Q<1{6+dveZ}S_Zd$Ju6^tzl zlh(DjuWQp_m9?U3@>1-raB1sKc=~)=YzM#q0<5~+Zk>S=z~pltD(|r3@hq14C%V6v z{bQ#EEoN`JB9;2vu(5TZm=CZz&{>rLuyrtPXzB}-P?#&9EP}cmaSf|O*R#`y`iK>? z)8tXj_~W-iFM*YcUwP|WgG8o;yx!1v=fNbd!!^HgXCKNq02<(v{W8~wi>W{y7IAU9 z3EvWq%@2QIZ#s{M;}nwlJ{ue`PGR8rbn|`aLUt#9h0sInJ;P}KsLEjMFDK=+uU#q? zy|YB=mG{UjaJ%w1tbnNRZ++*_yGfX3c;1)KXWpN0nnZs~Lkn8e#jZo2W|AJCga$Ya zJ%yOB4Jy2yCY7~^m3F`ET6JP?5F8xs*?bfF*Vz_IK_Yz|)Xlh0DXX0FL)^@l8Q^&^ z&;&{y#!%+qPRZ$sloJvuJ{(9mnjFe21<5k!y`UH~XR+B`93fU`uC<_X_KpuaI}u%F zj7#gpv1^71N@MZrq*7AiVT8IOM`5MkEEln#bV`FE$|du9X!PMgG%7-fHs!b9i}Fu*Vx*z|6kufI@s977)4FJw&wFsy#LD|oT$6> z!lcw8if-7FIIeh}{pmuSlMf&T`qx>A9BcuT+xgOdw!_2>F{~eVVq#ms=_S5tnM1fB z8N_)b_D*nczpXJDuMYR$Tx&AiCNzI>0$7Q*^%3~b-c;&DZ*N~@_tmX}nKygU&1sS+ z6!RH@KmuPNC^Spma*{{z8L_y45j!ZQ18`PmHf3n(5AozmVPSK5F&qNY)O%^?l^y7p zvv-p{nHiOvf*!pNT|i0f%-kTPK=V%WWR$GVD^c-{@t|0x7YSkVqQn&-wK`lb6uVuL z=miI#gDSNimV|*Nd3G)z@q+`aU$7jg+a1{@!NT@zPQuZ*-$n2JQF(Snl;{?Y|2BA`UT*{Z@u%-MnlO(GCd zJo4%;v7@$>uhEK%lV%Yzf4HajX+~TQ^V4J@vqD1~5mQ2AKn&Ng3o={g zCnlt&_ekn!its5kf_uJscw?x`g0~1K6$>Q{#7hX8P{-DTMf8H_&4LrAbWKDV5${~|9 zsIV_Rzn<`Yn`6-d5PWscVz3}H0$D~k9>0bU5oSfPV>wlAJ*^w&6h7w)UU1OzmIJV6 z?xC}eMTNUh&<0e?zHo48sH@4hbVZbezLcrK%%fE&hM2CK>lP2g!EB6>4DCqJl<2cz z$`JBG!#ExCOW3Ugrq*;ZPTmXKDw6}`5OKwbZ`hIf5qU$q%3%^Senw((urfv5JZMg6 ziAA$txcxA6NL7aE2N4Yyt=*H@wP#zgNT=pk9ynZ&9-otWL@&r?ClnV8UxDQ~9SPt@ z-?I~F9RGE>oyKR1J6CwuPe(p~9<`(vmVj7G6zFTL$64n6ix*!$J2)L&EQ52ClbUcSoP+tXrZ zJQ8iPw#LMre+=uhZyyi2Dgh6GuUSc-ojGSIHZVo5D9hn|F9+Try~=?&Y{Xc84PGF> zv1I8Pq(CKbVd$^!yZ2y$`1t-Qt6)M{&~njAp+z>msmgG3hqBn#X^Wv3`pwnGHl^1E zlTq)>q|xmFd@>+b>unSOYg^gk1hLv#XN+{Oyuw78EmHmXzQMht2REiIFpWjmJhjtk z4J~$h?NbFlPrJ#hij=a(!8h3idUI`HVzl2u8x2BhBTfY6YqojhZnw6yEpAX0k%i>v$DN2S)+A$4mWEY@yHn>t3|fdTGxR43BJ&{G5h z!xBsbFu#LX*v)E#%cfjr_sj~Sge~tw&Q#`r*$oVeq8O@%e2Q3|n*Fk7z&@n(%N%|) zWI%JV9oXO}01PW@z@`Osp`Exs6HuA0u;*Bub?+RHlHG4y^=pR?w|~o}z;nWU73ewV zmII&fEF1t=mRmw0ED^vXSx(W(bud7xi}T?RdyQ@BFdp1p*jgRyCHjaDdZa34+yw(n z1O~rI^5R!VyP-7L!9J=(o7u|_ba!_(saoSm65|kLX{PG>HgkUzDh6p~Wg1 zka~kUM$3R63ahn1vN)%?BbQ}va|EQIa(B5Th#|&DXa7Q?!D|N5r)=43U3m43$Lv|U z_Sdauw=y7O)Dns>GFxe0fsskCD>IaDKPNy?GA6fDALZB>EJ@GaCwUrr#t4xMaIice z#sRhi2Wb$X!&mroJ_AzVn8ta^`O!^_55`4mjvhBj+@*V3ZZQ>%OXVvcg4Lu@H&_fL>BC(L{K2!lG>PUqor)LBq1H<{n`(WZ|+Z=kyHe&=J`g3ugOD14haQxT7iv!XBCVj6W z_GHfA3&I5vc=flTIl6_w|MNgP{S^@zV|NdYjM~zmSO+yuc(APKW86Az3hX3 zN$nbdLGB$e$Le$R4jUqmo=s}g-0?rg9sg{@4Zisl&uJJ3Mu&U5P~V0vgWbUhK0oUw zt3Ks|8F#)x^1xxQTpoZoo8YRbIh;1n^P$&3VHHM?jUfUFl^RB7)hLs8B%v)4v6vBv z6^wvA+UwrlA=K!o=5NoL#B6#hDURc|$bHLTt zT~|I#j-jDc3Z_DCJkTwd%V2`3D#Yni#f|&cT&N$sF%DhLg5oQNb>qj%gc=xXHN2!m zz4qBU3cmI(-+|KI-EhiU*{je^XShv{YsJCu1i%42`x1BCxWMvjL9LR8OKBF=4ZsE8!iTh{XQ;iW_wjI?SV(vG{6Eag88bLD9le-fknbVh^yaZ!{r>3 z&ttzc8Y?mVh0{r_28-f}R`c;NS?epk;Ib?02$`_{vP-ssq!LgdqQ}Rjb(y_LFgjgR2m#dfSow1H zz5!_aiNGumT;)m*62oLer$i;8klfFZv`qOz&ztNmubF&3H7ce^DvQ=QZIuy58c?ch zyS%TqujxlL-xo}oWKL)m@~bxf&hDWoQW=DtNJ`e6ZDpbbQiwztbmkMG2!PJ4COmhr zumi!%K7qW_()_B%pK+1iPB;Ps3~bhX?3|qQ(jf7q^)KezMm*o-my{V8%aUSBIVnL&O1AA!Y=8K93si8 zZ?i#VP8BXZE$hpV58>cezOfADlS7Ea33$zmD1;wX7}*obX-oHLSY$BJ!M+Anm8H5& zQLBhop<1P)*17S}i3w=IN#Aoh0mu-x28?d1E%d11T<$1hQX*XU%aL3?J z^7^cK7K09=-Rv&3RwApicDh@2#eNz4=78KHbQHQ^POFdr8i1z_xCIus+af3~QBO5f z2CK3~Sztg%4m_LpJbOm58|Ug};KEa<3^89(1OJWFI~5!@t^kK8dBC5!u|Y(R8BM_Aa$UNx z@VS%vqajnrXap*t6lncxA>SoZV`CTMadhQhedR^fW0wuHcVU+67gAX%)4HLHb~4Q? zo20)gE*$8tRmDsbYbqva6WmoQ3BfIUW*vuhbNwZ|555GU+C(0Kkl8lG8U~@|a0Hy* zy~M}E!=&s1kZ9MzG=8A5?{`nM%lvn}j;I)9*Y^Kmc=!`So%vmY*p#{aFzRBz z1FtD8BELS3wQW2Yrx_mX=o~~tr1NNhf7$FGh*vt;!5$>6so7CoUCX{kTzksn=am&$ z6nh`}!_&f?3IxDjc%#{_3v5~N=J@bJxy8#at@_RZRt=3`V^Pd4`FrZi-~f`g6#GGc zKU~Xz{4nY;^H<_>sjuH6cMN2%P8du4jLa*O6@>~)l;N_)grbTb z!udyYr3O8SoFmYihG!9-vtavzeG4wj`n9~D&XEY1T|c!WoTtw|az1AQqRC2fm`LF9 z!jH0-5yj&$i39%%{C(jZrsCEIy2R$|Wn#pYnGNqF3H$$)NYDNN`Dvy`1nmH6sZJv} z+Tvcesf@2wi4toj1-15xr6H<78k!j%tMP8wT?Iobs&=iNuBmKyk_MgHZ;{!RkhrQH zGDb&BWkOpG>a6yRj(AHwV}l-9u+GmosA3pG&;Dsx4AUA0C1&G?xFM5kPYk77Id$a8 z4%AoQT>lnd99*_MC<(2YwzGdR`nzj%BAs5SDyh5J;%q8cN?l^6IN4^3PIVd>uUK7| z`i{3~>8hD7wF*nLhT%O4$_WaI6?4C{QtDvtp2;DK9mj1Y3m zosVj@#Kz1O2T>dQxCBpV+27xvAqrUNK>Noaqt;aUVOEPdLc!fOH`Xy$VS~`}ai=b% zDVLh`%N7big`E;fY4(O8P7DPt8-Y|~BX~yQivjk@#C#Or3dO#)8+@jLyFuN2TH7(u={DeD?*gPG3>kq&`HT;J=Jwkt}eQ#>`@)K?^9UmP{IjzibCnrd7T$E_*57cagQY4xJD7d6Tl zF^~jE>V%G07`RxoYsGR|^Zs%gQsMBH%;T$89Y<~hwe{)_IU|7!A!HsI2_w1a=Kbqi zn2I$aoHDyW>DIy?Ye9z=+H1=rN{N$#zP4f=`_L9=ZK+Qt@xld=o`9bCp?3VyV_3Z< z?)cdepr-YJcV&S5u|_>B6|g~|jzV<-&vlr9oEfN??7eb0;lqY~M#jURbMN>^+@!6! z92uMp@UI}J;37WciSzRz)KBm;e?yP4y(&ELKZxrk=u3qxTDbF;$EJ8nYUKE#^)~hi z|8=jNBQ**)y>)ZU2ETn%AG*F*qEM82VC1FFDG~_aHi?62R+U2f{(kn}0dvPl1oLga zj@mLPDna+($>f#6INM%d&$Bd)S2#q_M8nsInq#48t%J{ml+cS`i!{k)w@ktGN+H2m zV0aT;kSBQO%HH0opA(DDMmZATYVQM?D4re;Y73C^7D8br0UQ<{Nw<`{$R%f_XUL(w zxwJ_L9vOS)Q~F-KzK}FxRwir0y3?`)_!7Q5-%q@a8JSY7HCZ$Oje$Nqh}j#|3OCg0 zyi~K$Q)?Rz>0BKEiMyr6b|Fk4vKKi~4g1hIFpCSjMNX!Dph%q3PWLb{KWC}2yH(=> zg51SUorMEG>ti2Gp}(^4Cim^XAO?epc#(}ew#QbP-6J-eef%%-sJX#hW<>8XT~|f~ za)uwcz|>RtU}W{0B|fP~;u>5y=B=2#&M7HU1RvT!gzc7AlgHFiefG*q!65H|z;~u{ z#|`Od9EzA-AU9w4Z}WgWDS=}mR~6tE4F^DA1@Ur2OoO4U*xhoG4q-_J?r+WxdxidH zl1mjx?NAv+=L6~f-L>={}Lq^0appoK1GDU?zu zqowWlK?_B1e&=~5*-k>g>-t~+fUsrB!G6XW_qoq~zNcP>eoM8I&Arj?cp@NLemX3q*#al} zGF)xIObqPhK+52_{I}BdNuO_6W(b!5>wD;My0R6uS_QpD^F@{_ZDr7yRtrUIHrb?mfoyqLm%ny(=De* zNf|q^`tdP7beQVYAa2e=LI7!%9y?2KHL&Zw()Ux%J7NqO$5zNt2Z|Dlp4H3Jnx7;= zV2Lm1vGqpoup(mywjaauHbHhzhcs(W;6kB~1}HsH)EW%nV_7mkP=uIllq&Rg6Yo+# zl?y~(FZ_`46ma(3U#E;QrNAyww^5f<536|MmKMI0*_PMIo9dA)ZA)t4MX9F=9aUR; zx^zZ;q3<4C7$Gz=L29JIoITS|a71EOMyr$53;7~08--6IT4AB{`$2{mN0cfkCsqa? z_`uqy!QNLP_j%i_qNyM_v&61891PQO4YuR8sY$gB!EuWc0v;`Kb9piPd`e-^kEMX3 zYl=7GNMy_SxDBS&ef-i(BgCTeEeK6a?18af%h8vV^okKfam(ftHm+?FIe@bjS|ZGC11KR_D<`m==ZS_#fITz~O_S1Z)7d6{H(u34a5u@-E`O z^2nWNF?I8qeSQBRvP-BvGZ9++4b&;#9*JE4<3-rFPd{+z6x)(5dy-;1FS&Qy3OCR{ zddojVUmiM?0wJqy86)+pZpdAQ)R%8%BN_56Q|GCpMy|oY(EwIuOGm&{d!^D~wp33& z8U^7c1Gwg+bh8Mwx`746EjM|%qu4o5KuvHx+*Nwx0EGg?5k|wp&yD|`7i58>aYifQ zJg@+Q@Txr$nR7ez-omem<5o9bhMI$d&w<$)ol6oboR2Pagz85(-u<)7poLxL(n#!D zd6ygXs@(-K3|y32MAXj3{M3daTsd8J3L=LDMnS(wPklIOTHc09LD4Y@`V(cukC#VB zzrE9z+13bA>u)-M1ayLgCJRg;ek#x zeQ+EkV+|bR?z222X6rDqSTS>F90Gc-|3a$VdUyOVb+54l{avpJ$t?0nG7puNMPn;Z z_B`09W0Adzsu-rgM(8#$?9rEiXzv!#bHdR*tTjCTi`A>GpSrq^72XBrUsU!05BsY! z8Y@W1?E7l3)9Xz7#>YROm{?H)u+QG;?Eu7!4oeetN#HDPubMpo&@FIwXQ z7@KWbypOu$p$<}UxVQKBN?l5=)8riAx4bxwdJ7yojx_Pz#5#Lv0QPX6CfD1U79DvEY7zCtCnzJiisbVcgp5e3meXqQt@0a(aA!g^; zgEq!)axI8bo=d%xt#B*r}BZolYQz; zZzDr2V>_~8e=j)zwZBV|iTYse0J)vle`gowpLu2$#!DqqxAw@{4SbV<)xulpi?@^b~#!k0t2e6z7*i zLm)1CcE8G}GKM4tS<-2YztpE{QJZ42Zdu-AY5VnnHl($r72V3B*P7jA99z}|7*Nj7J7gFyJSw@$Kp(~T^pXez&hP2Dc|f3M3^Np{X+mNZl{gA1wVZHK0hoX^DN(7iz_;g`B3v$q zdg*U}yXT(9_V&&`iG~~|RMZ1d*MQs?dRn2bfqPmBs*n12`*r_8H_6p79z)gIq_Vba z6tbqKC4J>bfq3*XAV7Qu3>|>ngohY!rWd4-)sgjTeO9B_w7WIq4^;J*fU`uy`yiPD zI&$|^@d7MzXswQj2?L^>1=>DF4Cs~+`a&LWjB!APlQX!R6$(mqK`MwC&J-#K7A1&{ z!&I<81}UciV#MAlsMg5X4ZYbE)?o^vmDIHsTs>!@E2%Xyw3WKh(kaq13Jmp!eIkRP zov+z8G=v5RN%?oTkizdizigPC){WkM6EO~;=G9l=k-2KdJQ*DP+thw5+PA}Rf#WG`r03igsxHe3W($qt zLO}psKy3@-a_Eon#9REZjgGcWOguUI@YtL*wg!~bf$wm<6{@~1^VsBD)YJr&uNDFYTWvrw^0A0u199-eN4wW zp|hx(3jTtw5X{dET7i6zYrvB*5vQ6V(E3NJn*NcGBx;E^0{o5*4>x`QXjF@UYK8=M zx4KTX6{tBS9dWq45#2S4xGE>Geo3r}BrsW}O(~axGZj|4_%W`VTJ`|`Lt&29D<1c- z!K)j-F{eqS_0X!pb`7~vBlWvR+~qMjFB5YO0m}5N{+Ax4-h6i_ff50}TFy-7b;Q_B zA0pj8qaq-;%ERSje*X%;|D~oT=*{xQmCf>`JltheG#P5^2c#MAVTkS){(p6OS29dAU*EKIsJS=$7Wt-X4|P%I;^IT?vJqonqUlr;7qX zKjQ5xh;%YWiD?P+3LC}>Ky>G}54iZ$dnNT?l&#WmBZcqjYa?Fif3~}ul%Dg(4FM>m zcn&?a`P%&cRTePZ?$a+Dpf(s{+dXdAsp!R4=)g!z>z47vnSC=C#g zYOF&>y=l0-pYPvL&v&2dRhl~UI<;p5@!c7z^DaIw0sZ`}$gX|6qUQ;BywS~;%UHSR zp~<*k4?vr>fF5`m05jGBE_ES*pKD;K#J;)<>#nZ5z3v`xuh@-3f{3jcn%yk= zhSNJp(s4^T9IdJ0(4@-~H}SZb1`fe&%5~BUwR@5x)cE+&|Bn-#F}Wn~S?o^elkxJ~ zwD8mx!}RHSk(t}QXQ{<8)N=mK!yJoX@S44kGc&Z`FgdTBR(89V)Zj2 zjZlGZrxd}7tW4mRsQcHX(&qYXKo0$VVgPBM7P@&Hhh+k$Qv;frH3TGXp;oj6yQF9=dP#RV<>CjlO!&mf*a_7Xgg@)}Hc5}?)&T}>ohu5CcEHQHf>o&Dg zmyPSXK^qa`3QsYaz^z|5Z0@s+;6u5 z@L;gc@DbnZ@54N988uCTn3X^6_PlKN{6c~1DM~}0E?4-1B46B( z1ZQIM-I(jv;rr!@`2^Xk9JwKaCjc~GNd0-}wm}Huq=1X5 z&}WpY-56Z!^jVfFSxu`Q9Q&Fkal=ZxOr35wSxp@|fY0*<;_Lw`gWim9Iw_3+^av|{ zy;iMI%uQ>;BYklhc>!2B5V*%wdpdT(AK`)50EeoWc8{?zykxY^!3UC512l$l3gAye zyJ3}iTQf;DcV4YI!#AUrayf)HQHK^j|2%?!mm)6puNV9KpX=*O2lgH6Vk~>H4?Qr> zw*_5Xn?PmPNX=YZ>r|EtDyiA2Ry+6UF+uCPNzlmQj;#ok4~=RIV-Wtz*okF6$PLhW zJVCRnRo@}6hh`H?&-%XU&IMiQkwI>G6>$~CRx?F1Zog2+BNM{@AKsl4x%l1<+qeI+ zboXr+G=oa1Aados_m>7)w^IN4c{dxhA=5|y2W_r8dAFeBrCWxHvWeWnkOsE}l-8b3 z4fqI54|}t3}3BJ5mphp4)99;AE|l8i_Arb_y|@IpxSa)uR4*Lgg?~Z ziM^wgXYhwe1lsQ)x9SET%8GbVKSh6p#7Sq>b;kAXeuGvS z3YT9SaO;B$iyF|F<;s%1UQel2#?|Tt>YnKUaacEY4}{cq8?WWS<rDjfVJnIVB7ITNtG-%kkIlG9(8x4;vGmqeR2Ew=NpQ} zb2~fHKX19k(${wm-2Sb;tp~Hr=|>C5)eU_gLOx$36?rv?&r#dCAVJ51NqL_{cn*C~ zYe$2i1@p<*y(AmYev*iqw204E+Bq=(hQ(nKe+qN-+JMUVzd4>I69K+(AYtO6(JarB z4&!I7Cf?&X-ywU{WA{O4h0Db+{_0L3J$lIPy_CE73lI>MQm-L)@9QuSy$z-{Kw2#* z$s8i`6b*O7Ih{~y23#n(NZ4muOimZ&tpp9WTG~i zAz8ILbRtp7kE&=YHZqmEPc5*;U!h$f-V2;s<2nRB4Y=M^xhF8Uv36BzmPd;7!bqv~ z!&2$uqem6PiZn+@bPtyE!g&+Cc2094X^@209NT9`!YJDFBs}a10JoxuZvs zeVDCqn%G(`*KXxf(S8j3;q)Rh;Vz+G;_1HE%Lj;k<%4KCPd%b+-Rx$`q)hvAty!DV z+B7-h%al1N6?ue0lbw2f@Z~<#QGOP^p9cW;$@tk99E^g@HM9MeA9SJ{G{YzK!Heo- z0R6oH7YC;jT1cxa@F=b*&j6|76d-C{HFsgE)&T+x+Q`&0h8i!~Jxc^Uz5x)gRK?ky z{0_X-_)=6hqc-mOdj(zJ?t`Y5W>O>tpdr~(BKi&!7mZMwK_tn+gs>KYVSiBB+$0K% zyna!E)OX}rT0tVNm<+S^FdoWCxN~xsxLIg9*RRhcTP0TT&4Vp8TXv$P;yYxhXV9^EJyBZ1Q; zfc*YvLqyp?xbB&mK_BZ)Nu@@cy&@!bImE4Ex949AFIi<5*Ygd-+cgSzzuuwla+pjB z72wv_M&*8=EG26WmZvUR>yUT^#_{cHdBdQ=sV-8}!^4|no0i&mP_j`++mhyu)JH15 zG!lYgrn#a?5%fY!21am?LKOsXRLv!wznqta)7lWyHe)Ix z&4@#(FPb&Yf*{|Af(c_>nC3^Q2o~!U>LvWVQ}&X+~Q(3ijq}mPGV0Zj&X4 zQH54PR+}`bR1C|H*(y%YR6v79Nikaviik#DUKP`;RHWkxww%+uD5Qm$i_2puLpE7q zdWko)_}8aMH8K=IWr9Oq`rMAZ)dt@xGRXwdc0;ClLsTLcH+~F#d%cUo+80LzFgw#t zN;vu^HivmMX^8rSIe|CQ9kb+iT#}P`|g6$jJ zBnzt5F`Y{66tMYF7QBkrAOg))w#~0^bmr6qNSiXlN(N*}1pI%OJg&2FL0{Glj(85xq_w6fT@>5j`TX7ZLYI!KNjC6eW5o9QN-d(D%pTSQh~ z^QvhJb>9mwpj97zMBV)K(`fNK?;sZSt-ZIGy6zwUc(u28yeII)E(A-y7BEcp`2E)> zcuogDaK;r+fW#2zEEe0lyNey&=)Uqh&(i-Tdlb7K4D!q- zp64(iXSk2`70~pmneDlCz{ouA9GH!A=2n3=+BM`1$KSR3EB+k&I`!-d(FPo@Yl^5* zjcb?f=eRQCg|ZaK*&b^F>51!!v&Sgw;9vV>X6UFeKTC+q|2TbUXf2jM8^D89(K$my zXl`M>`W=|p{s1Impkas; zG2FRJ_T8~`*=K5P8&Cz)Pjv03?!Td{wF~W|?q@iA0B!e3G`*8epjo-g&4amH%6Qj; zpu}kxCncWxt!?s_CV96!9ES6Qwa{>!h}R9H$hfqP3)@qGHDVIVX?1%~TDdugk1uTHa!KeXuTVV!SDH9zc zM-kB{3nt9Cc-_$5g$_~e2vlSkJb_doc4(AYJ2Vj5V=&W#4I@N=N_gPQFFAP3^V3hq zMn(kPvW$zR)^goZ%NuXl^CAPgi>>>tN1AZ3pr_OpG$97{T_`Wov%6Tj6DUBVL|INe zstm21v~gfUO4D9Of4^AHI`5}DvJ$z3gh)+NFD4=E8U-RL*b> z@u1P)6|h3I;31tN;xxIIyub)lcn$x94=-JUt%Y$_grim~aaX@ygM_R10kuI)bpW{i z?+v2WI4UbP6M30Gq{l2_Plpr-&G-Q_FVrs%77F^L#KOw54Ajl)gf^xOX`vM`Aqk7) zoMvM}5|qT>hdKx}tAkWceNPfg)u?;OvF#rLrLhvN)~veIe*ON5_;N3KNz z>gpoSp@Vdt8@1pf5(CTGD6z7>h6t8_@%iLrs=xoD-rh|G^VFIMsQQFfjvp~jt&4&I zh;Nv&yfdcqEAqe`9$6%JNqa>WYGaqO9!P+$*r-^~TENu)Y(933dxHMlPjLGemXe+K zl;0g ziE2w$0e+xHhsgzDIg|+LPK8JmG6|SkX2Z6_Zo|urd4jd{qOz?2#xofj(HE40i-l;p z(9s++;|VWUj*O7Q!#i_g1G|%@qdske`Ryr55`EdP@G9B`dM$P3(A1R*o58U(Tfcg> zhrwebeZJUfC@goXT|#laUmLSz({~PmsFt6UN;&RAA_3NhMEOh?bxkMAmYBDxa)Fn#4KbuAs#<16L6ZjgzYf?#z$EHPAatndJ$A5?U}Kvqv?<--3T zdhty72AqV0Ex=0}#oX`OUeru@_3jg&FNBdE)Pnnof$~F37TDLe;*2f6!~$dl5&Gpg zXbcItLX$$?Y6X!YqffvSfyfZdm8F(`O+5v+c++)*gRg|oxu&=K(zBx|oz@40c|kMP zdLqvfus=CQ*Yu26SrC&1Wfm#YUB!;PRL}IhUn3af_;yMWG@**OAPQqV?;%%*HOT%@5_I zW>%hUD1SD8gHpIw{ih+ZeDL}x3!|YIIEv-J61w(V+Q)M%iUgB#p+?c3r`tHtBp<#n z4OKZV!=w=pZiqRD??{nsp^%+7U?~}agwOdM9bzlQ{7}JZk8bo3A{i&A6G^=y4xfXb z)atStleYa{wZ2_r&~+RqPI44Pwf+=Ca=HcTF1-3!hl;a2P z7^}7CVSkA4!b#kKK-gJzkF~4u+Muq0#W-j^q?Q44_!{E6@`^hqCjK@)PW_#h=-*2P z2wV9NAB>Gr{~}5h*-v=-1TuNpiMjA@wvZ}zKDUZk^s^!|r&Km}mSv+uxZ{iXO4Ppuy+*a5K*Cm#XZZC#>Scz6%~uP! zPOog#Ip&fmAiwdUB?OCDdH#5dCXBVB3&b7eNn~2EfO>dTR~+?0t(^-pH*KSkUbg$= z-Zdw9-rh(;X;1C!8`G0;{e~CEBXc zumQWFY1$R830+C777U|vY`Iyth!+&>axENt^F(bQ^zEPj3__()LUQ1dHbLT%a?i_M z@aH`a@*}3h@+7;gn%FN6$h5q+vjWHR6Dr;-%I+Z2~-1rm(uxffh0VYb-svdZ_ zTMVj1J;0e=Ll@*PtGfy2#Y6Q2SQ^#%io{-y_H;0QhF(sLH9}@lng2rzJ{$+mfZ@g8 zN+06d$dfsx*$QnPcQRECbZt;d)j%u2cGnDZE#|-&5S(!0`FtMr3U&N8o;-5o$dPYR zCv}vELVxW-`VOvGh2RxLg>J zBILRo#a*VM29XRV7GDh#dijDGB=opUv01_M1OkezrFXaiU=`ah5b7LnR^J1E)1gp)uUc&mQzKMGW6ARDj_cJkqEZ^{ozDhHh;GO&<{}rR4&5 zoyBE;$^qxWa2SN?vE>10{@fh_LMZ3tv;f8lMIiO>kTkKtS@B%HFWaG8s*|O8x?N&oce0J=N7T&?!kDPR|856YqZ9Oq4Y~y*=7B{)OcAb) zzxh&O@7J@HOhca96-BFCeTj3|Qde)0ak*v_S3)+m$fXS~GLRH0BwT1h6Ovr9jM@aP zRfmq%S+#AgDmQNF-=LAVNDZj+2*d<{obI2oXM zSKxne>|eWZ?5gKw*Aj*5^Jw+?`%v&6!wDp}zPk-4kjO+26o#R~JVIIioIkEfci07X zktH4RqIW3QX!PfxSn(Sq7&?k#NI&|5#;0nLvb*u$lhP;m!&Shc>5C_5Lt*EQrL)4c zX&j!N7VeG~nU}gQk|x zzFG_U9i5$ITiZq3wxRLOo2k3;$Bi4AyLaDu`Q_B-#1-YWgkp$bFc|~zK-35Krq(x& zSO!O&m?RqB`lqO4q)*$b=^6QZ+RY@#1jg(2X}Y1>3VfZMJS}~RE1+CJFavHnng_s zRrzz`;**1YF|C;L;&H)HrQZa%4PZX|y!MP*T&M>3f|IFQLWPg%yow7EuANVL5N4*p znZzhQOcC}~2teRS=A8EYs0b??=7>|vmw-;dUxtUx)Bm3OpYdA=Px&nm(Nz9Tcv#w4 z&(<6G9=D(vG3R74Y4+j)W_?@U43pf2b}>uiF$EX)1z+m6t=Zp!k+0nL#ccsiNE8$W zDZz*y6wGiFKEy;Btg*l>9D4QDSBJ;wKe>0ty1Prw+qMF;X8_xZ{{U(->@qpdB7~ zuWH+XodPx^*g^bj*f?0Vm_wcIn0;VCzoQ!IhwlFSS1ele?1Xt~gbBi7{z3Hglt3;I zIS3h7V`Fg`)RBR{p}!yb%f*x2MQGo$@{^yfSix_X+c^cct9>q9fc8I;#NA_xI>xWqO+jS}r)&DeBZe>P(P{iCrRq>;JfZ{R0maJ|OomTzKmf z*S48tewj@cP)9(e4D9(AQ7B8PfeljQE%1S|Tj_4Wt63S~zPfHJc*k?=E~~p47v^j5 z3SJJZ#0Fsy{jbdp;=nbXhiDC0!FIDkM8u357Z4IFAF+3(e7{rG~k_zZzP27?Wv8^he74G;n{LT9%;&3%;u$Dk^h)f!0j|xM zuit)N2iGjfowKRWw*IV65FP41A2jxZZO#d2vnCp*X7YIgN(g)bC+VyT2sn@t|i(XcZD5{mji4!g@oOUMFqxBd#{75~xxp z3Gkw13MgPneNwH=hbE#Q=tAg*!XB-rO=VD}%6~F6^(ACbjuiPbjKFxi4C)i={#6Nf zqcJLTiJYFstGakbBbQ}1UXs$gMNYm%CE}9TsE6;o0x}OfuVv4n7e`UqQl|jJRjD)A zq@KJmO(6s~D+fg1N(28Xfc|WPHvS!OA`Z;C+-ivuqii+Dd0bx(b`JDoHoC%YV-C@* zzM0TxJHx_>l=ge+6I&Tir971T&0m9D!8vN6%uL@o2W}!#ue?%l| zG_Ks+L5f7|%+^VDa`kF|HanSCcDh+co;`u|$By-A`c}sI26o#i!}J8W$G3G5{uP`4A1R zlDlI~r=A`I>>|8zxiu=c=~xM-*1|~$b#g|Al&N3H39M?qS)edd`$7^eGe&AxMnozC zuJPq*iCrAzDdhZ?#`Rmm1fLaLzvOX%{|#J=z~mzV)cB?oEun6@GMPNRt?kQ10`d~- zU+CR-fm9Om!27jcHk);T6aiqxXImV?v@UN`C<({4F#NHjU}g{?W)3M5-xCU{Qo$Wb zu|iCGzCkQv!G<;iH8!NhZBfve7n^AWdMnwUm+56JNrQ+j(@_`bE!|xPv!Sc>rUqJe z^+tVnDJqZc^>H<<#;xerYD>RSYaB>Otpi56X)tc^F0|^@$@Ha3nO@Ekx`b>6K+4kS zYCA{Gwob_krQ+k%*8BeX)vG~qK?0PzS6wi!hg7sEphK36ek^Dbk#Y$y+~qRIPxTN2 z88@rtgZLYp$N3FL!$`A+AL$uus$Xzdnt;KJtahDV+9>3Ud2FKV#OgH=7qItzmPRt? z_dQr?je`Ub8cMUlBAgbQ^$#b-iL>W(#8uA39J+iW zPWcd;qHa&MZocn6#7=Do?17g#{m2n&iV#zUae|n_g0*&rl%ul4hJs`?C^nx~D&0{k z5w_K*MR{rkC%R*UhqWm6*nZrmd)i&pTLUJnvjl>QjRPG;uq?!m!m5sr_@jGg|6?lv z!FDh8h8~1un829A?b}y&K26<*W~kf9jmB7$hyx*&EZ*ttP#3oOfFQ@QFN>b6GBUy5Qd)ogx%hLC`077 zb;-@F64P)fCebmH40ZW~6R9OvNjuN;v!OuhIW;EfIM)v{F0A^^r#D|2LwV}GE&C)~ zi0?TfM!Hervh7hcF1A{Y3pxP%)mio3EVFak>Cm<%k>pZL6dOcu*#uKZ8|5@C`by z?X`kIz~-{qxMTu5sDzz|Eu)LAI1!_@7GTHV-mq~viZfg6i1F9)T|!PZlYUfhQ!QA^ z5+mjNVjw?vREXq>v+*3Sb~h^)$;)3fQeYDT|aq(W*W`og4Ot z5j*Fip5qdkz)MsfodRF^g31&9s+@|tNSc+C`IBQ58C;o%pcA{Iu2Mts^pLC`zk;)E z!}wxUpm#cqfc24AY5A2afVER#L1AI>nqtp}ANaj^?W!2H6rlj>sxOnZoV1aa6=#(y)d7r z{@sOM=`P>CqD!0W2QDF8n|wUfL-e9sbBNviezUu|yrmN*`}*2mFlxb`n-t-I#-7)z zbv?xA)cw2Zw>(JQj}`&DbC7x$IjL*VZY6Nt5g2U}oH?DHj)=l5{Y79Cr4K)kTMh{B_m>({dRz{tq0@ik3Tyzvjg=} z55r?Qp4X~+^wCGZhF063qnqKguTYqJg}R7%x}5GJTFWo29HgOknG&a!Y3S1;rSC0y z^UXJ1$A||)p|znr~bOJ_Q`9dH;TkJbG+j-F01g4LAejC>@$FHU|Hn3 zD;EP^Ns*RI!0kMnLF?|4x*O_logX^kV}P?fe5LSJ!wZ5TC7iq*7x=(LjIg^JMb+Z1 zS>PQ~Nhyd(z$v36quTo_wGNjH&BaS#g=;K5=#UbfSaBwvFNwWT2TQ{>G?}fx|9!4; zX)d?1TqcekLwxEhY6=H6$dDDtumqBbWAJlC%RDj*yOCwy?$E_sBrZuy8tN&H z8In?f2Z2K@d|qVj*UJsV=t+|@7*yC5p)mD7CF%*{tyf;5{)tq==yEH^$T1AQDN}}I zN<~Pnu=eRR`oVGuh;F1oDJp?9c6i-VHvwa)TNG-6i7SwBNuFx-ei*C@yshB=OP?qa zWhZ1cRO zJ`Qu-3z(UR&;4xN>YUA3A#uTOm;tkGYd}py1u4e21mnZCn^JS4)r&+2I@Lo`3EC?m zIW$Nz&pdM^5BWT!9Ui4ETga_jsg9jH(axP?UTcTJEcG_5$_jGz#O>v&Z-&i_Ps;!% z#$9+dQmWbqJWwfV80pede;w2Nx%J_&SD?}INKuoFsSh`Eni7d7PFuU)0hZ(zC~N=o z;}LptkyOS_Ec3#E19af74?)!6!+X4nq=~KJSYk7FO`r+nn;HY^0iKfA$&-@WWHNEy zexLuqx!GhQ`B<_wiG~w06VC@_`=o+;Qd>Bv%x{^taA1_M=Nz6rACvLjVpYd*!{i^- zLKp@B$`YZtQs!@b|0l@|ah7)MUd&{71C#wy++a)^-g+xWJ$6joGHqrln8sn2QQq9F zfWe}H7rFWtIad+Ew;S4WpPHrIVAalwnZqgxmHw<9bqAr;eo5Ws(7bmuNE!X8?s1^t z&^tgoQG3nF)?%ev5rB@e@HMtaBG$Q97Mxen2#C$*hP|sHAOLmXqXAz@RWLgGvw2^G zw5MVcYH1hwfBXz5q(^ArC;!4_&eQYx%Mv$@_Ft3wIIeJU5*(Ni4RMnmxv94=#SKZf z4M;qaak&@Sc%rDtF6-uN6s(t;g9(K|DR#lcB?01cL^>|a4(GF_KBmXIVncwTogq`{P z?$)aZONWzhMxX~J&T*G_4rud((Cdfizeypu6cJFVg*K`DnnPBr7n`Op=PNgrB zk``BsBaS4(hAFFa8AH^v!Yekmr^{)Am*F6d~fUpxh2{NP4FCn&39U;U&4iPGK({dd>W8lfU(}x<(2>aZ*&BkkzjL~ z8|CJ1gUZkgkuIe4xbDD*lzsq}9dMMakaxdAj)DeO&2CgC(BVi86F3LqKrMh?(3N04 za3|;w>K>?j6fhCE<6uAVO$R(TTD2c;cn)sEe*7yqM#HbjO%*s2cTd$04R$!V+r^DP zR{0&+@n9SspEsCX_W$p^T?Ui0|Iy_{7V3i!J~%y-LD}r}XcFX&ccJvZyBx?vz4gf_ zJG1cTMzof?LTO#NX;%`Eu;lJ7%bkj$*!4e}=31l^4_O?T>MT|~~+l{7? zkuI5-kN7Yz6VD27$>o_Exz{D)={a1JGpN-^o5XxQm*;AJRHAQoi@0Vs-{6>NT@J&x z_|_fmJ$@x9*zrtOI3afMF-J)wRF-8Rn-u}x1APvhL8uI3aGnG`n&VP40Pm|l0q-d` zF;aVsJpH?K5xJCQ&hK2tfO%*WYvLMIHz6^z?DY@|_wb?nso}*Fh-YjK za2=q*s%G6VDe^T56Q#b4#AXvSBmo7-(w^itXS%X}PHEKoFjja}qMN8Cjaans=TlSV zryz{JiU^GQ*FADMj3TWUxKbRnMH&4chWwe@9ocQtRk4Ik{C6<<-Czg#u zVOI^6tk+3(wXY0AmocE^^wR?{D$7sIcgavbfnNh#T_^!U`c%7kSgzpsugGg{6Oa#7 zF=*obA&!8Q$r(^BM|`i8l-W&CNC8HG=*$mcF3N?}*1jQzq1er_h_WdqwcvT`FEH%w zaB+yC>FQ)#M9Eh9r992Uq?noM_o^5JL!>~&7U&?)yjCqxBohJ!voK&$2ED{3-+ntv zO*uFHEvUyV|WEt`INs6|@Ouitqqb#Jd}wWLAdZZXKv!_*C9Aml0F zI86}pTA=RzJZXZBHbcx40pzem+pQVeYSCyuSQJ{TnN8CjXFV9SzhVznK^bPvl6v;D zXcbtj`7fLXVE6!{<^OhO=2Xbh@6nr7{qA&QREJawh0h{#DuBkPc8erfpc$$Bja>~F z7BLXhu}>P&4^7syb$riwUwhoTY;%O86NEP`Rwdm7c}2TC+kddzv)I$BYm0vOAzpeL z8l~=iZA9$%2~zz7If>maVTk>5wxvDAX~}ix{M_P*?ebyZ!L_n&;^rnHsp?;2^=>Rz^P#Sv9*ot>l6aP;GcZN_v=0lq}!i%dDa<3$b78szCdm*3dk zZH|~qrGGXxE-=@t;wje{ijIK*Ctw#6ua_qy6M4NR8AlK7eedCv*ujn7^dek675JF> zqE7P@6r9l}Kyd(b6!3r&SXyi+=u8Vf(%}gBhKh%o%~fem74|7}2fCJ#(C8Vs67VuO zSE-zLXw|7s!n%v#m%m~YmhuOB++@tfGf%a+RCsoO{|Ej3rwxm-NO{KlUXC1so@E9y=s%1_-Cp7 zhyHg<=wPX@7k%-?=buN*XA!%AvI%GrF-e`(FlagO@)bd`lkYw7FuGUl9O<`6%!8vb znP;@$B(V&SmYx0P9%+Nf)u0B8z~{KF$VS~P(;L7N%a1)vK0RA}Rl}LD+YYON4<^p& z=PFF@sELW!z{i{-L*Ko63RWQe&&rju-slx~4hg}*-FaD0OKQ5*GqS$O6!M7DmZ|>! zX=thc%_29{+J(-Z^S3m}8>NmFyE6rSuDh6zEBH36K#}U{@5|M(Xi>$dK`H=7XwX79 z5g;qf>qBQ^;j$`kBwCZ@#+y6)Bf>t_enfQcboA&N0K)id?n4LU(p=+(kNjpcODkOc z{N4L(RDX}Xze_c!$oEBIRzdcr4)3A+CSj;@{){a%#g@cGch}(BZl;h+^qe};Q<@-b zx()Y+d3rsk=`udUa_Sx1dR6iku{5{((9GRU>O`w1sBTOBdJz5GTRgbZDEEq_$^J#^ z4oxDLO9rJpi$y4l~1SZ~~{fpu{Bz!S!tR^R*tdhQp%Cl`B*+B9_Zhu-)#_l^mi z^09lb9B)Za_jHeLEWtXXzHL)|{nPgm>hh=TzHApEGrY_l5(Rr0He>u zE*H$BgAOEgk1f1?okwWl+E#A5Q5V~_dt;;ByJ_#fr@s4;Xt4*ktZ|E>9e(Nh>vWOR zPhVT_XxOlG7aTYf-GE*ZDFoIGwAThgGkL1};KBC} z9GEJ93O}2jE`V0RMKPoRHZZ~TkvZ<@Vy_5E;v9njr~cTI5bjS2Q~5)Zkd^#-obO}0aoY<7)Lmr&nw$O$cBiqN(r{zDP7pPX^ensP` zQDL1xLd~vclUz`p4&T3}eeX&O*Ju>FwjJ(=pE3kF?qj4IT)GHM3s(P+Rg4^15qh4< z+$zpqw^>ilu6peddFFS!30b>saIm23HZR*ieK6!%wJF9@s(6ug3oj;aSWdYYBjZxp zrqyh{Nw8`e(NRA&q%EokCjYi1otC&7>ZJuuYoZvnCYogeBh1oi3=vP1??L~enCKnW zRnH_iS{=)Ox2MHEJYZ?H439&M7CZJh5aBTm50mihP|R$FipMa3FqM)exThNFnGIxV zu+UW#32{gDv)ajESJxb<0khBxoM{4f2WLmFx$G!KxLl+lUB7s7eXxG^*YpcNd~V8Ryas>zlboar63hGh^-UHM{pExfV&={vE4+wpib$8v4q z$E(fgg1U}88okC8jzzxOn zc;|~9XRfyk>!tO(uIRhe8N2ZEb5^Q#asp-^%SnPOmJDs&vjb8O7cG!oA-F1MZ&wRl zR;aX#V-kTa0i5ucd-F)%vgINpjIfyXuu-cW{{h|NXm&R^+9A>qgsp zJ}kW5V#p<6GI}C&$kLfedj&fvDZh<2f!n{D>9DC4c z_w!wkhg8jt!mzN>e@0OiOX!%;&1Elf@f*N;QeSnTi>NJHbSJgo*+D$?pq(w`qJM|( zq3R*HUcEXi_cwv|U~{0)u5Sw~;a+hxS=1d3hY28a%Lj=+vwTYySUL8Y#nf-Z_fj7G zT`Q6zXc6y_xavDC`nHIYW2k%=I1U0N*<^#n$E>EMmG6S=Y8ag2wWI-VD9oLMUT(9#9Vgxbu0CSX1a`tXExSl!RyR#dH@`CE)S;7W-Si}*@0@VjEz>filN{r z7pc)BAjd#I%KyMK>(TldfVCZ7Hy1!?f@?GjncC(Cmc`>Xvm$ZT+e^6a!sb!T(kw1Z zSY9UnzPS9#)VWxfnT6hh9Ub=hR{Q<0`+OtP5o9AA*G3ITBUo;3F_Awe=UKWCjD4Y>` ztKn(oT0z7Pt{AxF)l0{$0)deTHea;f&@)q0)NRDq9924IY{0n*3ce{QuisB0>tukp#wFt9<<|Nt)Z}4y|Ku-v?+0p^%Pj5~EOt6hG zj!=HWNu}*BK9?!0sc65?ORsgXb!_t#QJA^wAOE19dCTZoH083n7cQ1@(`)Q(4ZOD9 zzCS@1OIT_-xb7O7t&JSE0d6;$O5v z1B2q+$+=<$E5}`AG_j1uJ|5|!^Ulg;fCWG9q#VZci|@ds0E!~d_--$;X$TrYMSiJ1 z`r2gr&zG^)I^Jb(J(<^rL`P!arYks{R(D?zSwa`_9sOI z!aGqpPsx(|oT_VHOLBpn7y9WG3_zB-WG&SHJS3JdY0#StMuFVba0Ivr2?3vrNP(44 z0v(Lq95~I~)+`n_NaSrLH~PrZ$9=QPO(0knfnyw+YdfQJ z{1e3et7Q1<&d$HYIJ#^``>FltU342YL;dW^E72Q$ecz&^Dynn)Fe14kK3^vn1@r`; zt9Efget-?lMt4n+nskP17egdYJjhXq5)6`n-XMurN^m&>9gEF@u_x41qpD&PTdU(W zWVnNB53i*yEPys0LgbZVtHALDLvD7oO-axtwKReLnSuS^$X>N6csnf~=|sy`xcr7_Bmn+Nr<4{;OLf zz6iJmKh5oGoZU&Bt6+Q?Q`>R3h6M+ZZp6(yOGg$eWGUV)M^$dI)W5*Am?f!-`uk0_v1 zsR`31B!>~}aLH09Zgn|!C|At&cc4#%?!1OAV<}s&k;ON!ba4!NPRn@{K*zI7tP+P! zPEDd`FTC(sd+aaB@|MPco8N3uykxS@ltX)YHD@c1Lr43v7A`F7mCU0zSjp2JJ(@ z-_v;}Zce~X5Z$+AiK)5ilvAcGVbg+Dt0|bUzM{NwF|i8-)PB{gjKrhrNlhG(rTeJz zZMVT+HHy}g*AU-=FUIl-_{7kEk@KVwZls7Lx9|h|dO`4*HvBh5v+h$gWn4r#C zx`_DpqstDPLeQyWY%_Fr^_zVVj^dF7=7r!1O^|~;Pg<)EA4A?502cAwxY_?)aa9w)}zaoFosqP>#1KVRcuj110Se9S)Do_M(_6D7636(d)z)a@EL3K z4|kcwUV-kEYnqqbd6pkCIktP##oDGFXT-5rZQbpuz5x#VV*8Hm}Ken zyy94cuxW_NB?Ur~!)72MsJ%(-kfJHs7CYE{rz#v)HiFT47*YkLR+X}A%q6|S(AO8& z$U#ns1$skFk_&^DNdb>-^=eh7RzK){%AO0TbbK?9FXpltf<_URIkGlsj_#y{nLJ7KYwef`U zDAvYAJC!|~`uHF&y8E#6Z^NzUUwvHVhWGR^HvP^oe7G_s7{}bLG_GU!{iI(X{}2muv2O_Tcs4MEEkag}SH# zy*@*Iyr5@^wzRqv>oueoW~ofU&=!{TiGr;Sn*T@Ldk3~vo^9iK&e7g`FH4qXdE2rq z?=4G~hb(V9cJ?3%Sr7p7Ba zCxrL+{qg%Q*#CTov59I>&|h3U&C$cr3{G<=+`G%Wu0y&W=# zRa$?`1ILD(ogFqvrpD8C!Q;+ouB|(1O9QiX@mpirHUIz}l zvZ6L%X>7E00Bf*;RC!aZ&eHhk70)yR=yM!lUE~$2cd>&h z;wl%u@Q;7&+eaFvbyiD%10z+43pM?|C$;sR>BLdq0(1K0CsWL#^s7u&`jsh9=~%)c1$v#oMpf$R zNw{joVV78X28_RF@anqGi&r0kb~Ud z66Wmm>2-8I`qiaN?URka*nqlT-gVlllqE5-q(Y)q3cAkU5=j5M*V$619fW@h+S)su zefGv?2l;-4+de{iNB_+gvCDnOz0?ilT2i$6EJtvtztw~Wp0Z&5Y0b=0pGJzOxdoMX z623?YP>-rx3}F6-?!}u;VR*=6e!7-LxiaY*I^bE9D}dBSghEP?%l2|g0W43ysK89j z5igN>rN>%ZrB15LYq%7%A$>Vnx=^MS=q(0*QJvK3QD6;}Uu1LH#6_jr_orDy#dtSl zedVpa1?mYlOztH@_LP0c)VudiY5lS#QtxA|Tp>{TRq{eWs+$ayA9lLl8(kI z^{BFg-I1-#6IjEOrizJT$_6%)Mol>zkV;YPq0iD9=<~g0SYBgS3MW$a5hCWadmZLk*&Ga(Qd74bdaBcobzQ`mR~5BiwL*_4AEoF$_Je{ zlII3yzG6NykOMuQD81ZrBlaXVX{Paf> zD&Q7mPD`I7X0A*hyKz9DCma#D$}_ictEconX|SqTX3$AlO02V16^nf(#XfOOqxnXrPL_V2dpB}pO4EILv$DwB7dMxf zVts(NKKA(N3h`oWp%jVVbcK%(R#;lQuse8tP+z#I#qI6ub@|-=Nz!VItsijkVwW9@ zHJ-*$p+XVVsLLC%7jX~wwMnTg@JqFVP`ycC9=xDF-gtqw-W_u_SV?z-)b0Rq@6J%T zsJK$!YzQ@CY$LN|yqBU0aE1I8p~gf5X$H!hO>8nAgZ7hhwKY9UTp#{L;O8F&*&xly zc9S9QZUs4(yYk|Z5sqVmT772dmbNNG%Z8u9 zdbD5Mu~26=$EyT-S$?xzF1e!{L$1Ppk;Tm&OPaV}z1U^0DpK^w3(NEM#U;9!CQztj zdON#1$!qH1kVBIy-`03)>m`f z$`*Ya#Np&kb=p*=z+x!Zncu2cJ5?1@ohBi1`JAGV$mVuPiMZMm)kZWO;bhUxXNs^{ z==5FbZ&MO;nO|(P$;wI;70g8XHqt!AD9tXvQK1!5mVzv=z);#==F+CGYPQvf)a|Ou z+9EVV?aeg4Go~)t`3)x@S0Q&wiD`Ux>Q!j`56YlF3^C4C@&*~XgYsx>Q1(MNV8pgh7B&U%44s$eNH1wL42$JKaM zxg7e+kGla{q>R=h!wFM5H1uFHNw)O&1G>K@J#C|V#!6@tZAZ4<`d?-|eLFW3wS-HR z2}N-z-%wF$i0O+xW;n_p%{81RcxB%{)eVG2|1_IJ^oyj=L880#od~Tcf)gj^3}z^fq8e zy!p|rAoswzhXika?gH}-^;|2R7eAke3T7nEVaiC&@z+tn5CZ}DeRe|KPc;(-u;8q* z=l&mZm!Fv=7Vh)!N6-aQ%4Ie!-QFOR8axsSgu5jo0au1I4)+ON4Pl8}SrRgHQ?yH> zqN|U!q=9>u+!o49v>U_5w(fg|!C`8`dI_n!0wP_{x7owRinzR}lEWHRiNs{%vZbuKw1wMP zY6?~As}0pP>-Je4Xo;%w(Hg<`qVrfABE|x9U87Qp3Kx#aQ)(&3>O71r$OYwksoW_O zh{eK-q<%T8QHt|QBhLJWr9LQYN`*CM3#hdcnOG=N6czT`6dnw!S1^|!H6OvAP&lbK z+5GH<0hmx*4^&vo(LGHMs}gTiE4zk^CBWDr3}2VRHIHpJdC0pEqE9;(Jn z>xisnftiV~fLYM!%12oIOrvZLp?;E1B@d97x$qV`I`z$@)LvaIb~@p>&0=QRG|o|> zSHU$aT}pvI&yip5Qi}=qY>)TUr~nHj8jt;hR$cBn^|ob*1Y^54+PH5b<|~0Zs9lov%dS z?byfteK1ey$Cyn3@YK)`kFwXZwK!d9r}3F9n4Lp-__;n~CJ5qaaxE*GeDI`|513f` zm*kp7zLW3SiVY3Y+h4wSq1t5?EtLds@2o%TjEx07zICUcMbb-`rp-&3TW9{mJUCLP z-ucEZsHeN7Eq@~oc1vB2$?ciqB1OwrFDdLOT(EX_MVC9ffj>I5ehG zDL-7ekojiP#u2MJSZN)w)l?doA7*As%djIH047>>apEr<6EKJl9=^#t4;@34a3##bO${o|ww}dXZwnq`W z^t@Vf65plXy9AAL*pfcrunzbDfiYvQ(Xd>T_)htldQHN8WB6)@_5|( zeN0>6k@ksQ`P{2?b%ffjm-)-ebfd0BGN3c-NF`AUr3*JVyF_3}i3}w!ZF7IWXQ1-< zlbiHbgQ%DcL6K+r^no%flO7w>Swzor|G0Asf5ZwHeHGYt^u%r@;>T6Y1z){%TL%`B zi2D8jxr0C33dT~dJooU#cB#iF7x)}1=oE$uqZgc32}wMSs1r=JGL=9i6mX|XJ^2bz zd7)wQw968e%b&h0#>&)MQPR_^E7zDkCY219<%56Qg~T?u(aa0njE4D4R6ES3Y06KX z6D*$2tk3y5wtWQBZzF9)t`JuyL1uYoWF-9(?bI6>ar)n+XJX>F6LNP$rNm~F7l-Xq zwtMDKNtr?cJEtxkY-Hx=>9@(76K_p2$(g0>^;}K+IVZ0xl0wzVzhwR98bC9Ce4__u zDfbkp2|>hQ*7?$Jj7KVSmjJ=^uq%+Y8u9EEs3-fmg$8mKcSaCw?z+d9EFpPhId?tj zp9C30qL8XwW<#BesN{|^rA#Hp5(^=Ddx}Ucl|!wvfVQEhSTAA@OrA7x&J=S1-}S`! zxZWbV;mcdsH><3AfskNhAj60is-e9^_@rv;;rnj6s73>6tuwFQe*oZ~7ngcBo+u*} zNhN;i^2cuUx945}y}mqP%x7JAHX3B;a~}2r2x1AYJ54H(Ht;#|VaiBs+l1C^>IyR& zNE69r(*2{OX^vdMtv8c#?)EE2MxGm&U|F2lZU>iKCnDDXXdl6h_3q4BYIS@U^sU0Wu1*u}x^4;=@q z?8D&LRX_nUxCTu^gLu_=>>NsyYh6%VJiLga9{AfOOA6@*ggtbmFhrhO!p%%EuF=ug z78)$p!4^gj zpiMS+OA7F^>Y-XS_o{w$SLpYey(_aCgy81kB~imftt4jK#*9|$Fn@6>`hizIi5K$_ zBTWDI7&^v9Du;(38XH?XrYWm&N}NtbX|%HE-Q&oyZw*2G{pfe7a+oBBA#|_{k>g_4 zsju6(+%MLk{J%QgDNspzkVtagf{!)12zWZVcG0293iMT8>zs72N})=URm4MJGC`2RY0yN9 zuYGC_tI|l8-?QDveGw{IwQAfI!DjANO#dQ1$ffnHR#w<4SI7=xReU*j4tP0lo-n|k zq8hxVQ)V#<0~1RsQz?P>_y^7`P-0(}``D`&zl@E%O?8$&OH*qz3C;YoutcF08*Ax% zlq#4P5lh7w;5z`1M;9cSc#Nq4g*@%r%w}Ui{OEHrnPe=}fucu&cR4TD=Zke%AMqwU z2b)rh`SagS0ddv0)$ z9dz{UJh4>cR|eLd?rCy%L|d&f-_+8l21dCt?Bl-vfPfaN4kB6E09we+RSC;eN<7~OboHsoD_@v2Z8*5|rvWgVG*Ywj96R(de zoepK3ZXaA1S3Av+=`q=b)WDEn{rU%uGoM%z@}5bc8UQAxbghM?KV7 z)*$GNR29#UPW_Zo@BkAv1bk3*m|krfLy%0)VN~KAnwRTrP=|#`Pc5cmK&g^H4JCLX zjhb%q*ckWqu!dX-Wa&hes@XSK*kcQqYpzZDSMUQL(#X0gd%K-(^R2O01}0LrYU{xG z(aq|l9@MTk6C?LWCfwUAaF(wq^Ez7_jbyXCe(gk_3^Y1>@51NNHZoV4JN7r*+gmMA zxS{QP2lzlYV)7?rdz3rf1PFN$dF79-k5AWWT7!gsE}h9e^c;~m2VTy7CYNzCm#0z> zkLbOQK^BHi)sdplTOtzLHf- z{cZl0>)`x6AcbCs!NJTqWflxX_>&sN^u|w|6@@^kD+FhduTKvPy}5aU+(|;`D;qp$ zwM%D6=T*GSj-jE)Mh#|DvH=dUs7rwvg7tLVlO>C|z4YVc{{F{?RYrYVDFpf)l~^*y zT{I*y6ney<5Ec4mYkPgichU{?O{)rD`0J|%RjsX~y* zCNOUJ1q3Y8yG(6^6?YkEfKkxxlB5U8sYIbwX$x$Y-U2FR(WOyo#c~an9>0&|)KuD2 zD+}nt9RaNfIo=evkM4J3DOYxPmyLqG&|H5XBOQ8yT(tb8HkWFA2qO$)rSpVAZJuOY z>}0-29%~XmoW6NNk2F?57=744i#VBbS68Smperqy$>HIHlQbKH@T0V>SE-UQ-wj+RT)chKDaG7PaizLYUbO9o@)4$l4>EramY@bAIw+;fl(=LTx7@WWV3Y^4KkTjYxW-HfFc@jU}ZoPGd%lTq0d)2)X1{Tq+CCY z*^^2gJls#ErR3k7*uzB9FGBvo)PL$UxLK0XO`RVN=|g6$IFXr4xD`<|KgHmujT%xq zg3F@NDU@!bw%$XOGFM0;S7AktT=3k4#0@bFK#z@m<(8XjabNU}y2g&5aARxwrc>le z*(G28vR#TPr~3WxPMUqac9B{mu(b*TwhnWtCCYUT58J_$?^LUm1oMt18kPt|(uU)w zHTCPJd!0CZY)Bn_s>0n9v(-7e`}q^U8;BBh|5z->Gl}wX-rd0LhNxQ`qK<3!G;?Sx zvT_PuX8~*>j|a2!t4Bm~%I}PGn3MIPe1$t8mnZcxcoE`zSdNfZ)$nH75;?_tcy zea7@=N(9nMgPjVDFJISlt1OU$H5ouQE2&@9#vl#zz=h>`0Ip@exJ=S}~;r-FR5_Wk(7} z?RF@0g4CPS`$vDCr4!FP4PT~g&7^j7;eZxHxri~BA)QTb;+Bm5=RZ1%RM))n%EcGw zwX}?Nb-g&OLs*4ckE}2%S4g?#DWS$~6WOdX7m%mO@bJBpMzf`_5!D=xyD~Pfe@*9b zXT!f*PHE;|X0GSHBb#St{6RGSXkSVuX9e8JwdZUPy(=MNbpHdB#Lo>I33j77dj2TiqhOQ~O;)OHmaiwhnfGS}Iy<%NnqeQ$}WIKZtT zpN?|B8jO(b+{q%cgWF2JLqwg#SYE1$M$|Y8T(XJV&9)kgmIOT=trl;|iS>EiQH!B? zQK74&$?7XPp*Am$DTAVgh0eA{OMcOoNM2V5w+gc2+qo^IsApx8W#HGYn)xtO5F>X+ zA*F+as!({uTV!D3D}u^MS{T%nMsh4DBeOMlN=M(yd3Z@TEBS1-JKrmLIF4RC%GuGN0B`w@lKzahsJZx80Lq}G{#vG07Ch{}^m92MC zWi3se+mJf1pZT(k)|pB`aty62?n}Rh7wtfyc_X`!f6=t@of$`@>Y>@oKnqG5vBLO= znmLco&(_IRDDcn~MBSO|a8RmjCakfLz(1NpAhx=?lWJ?ZzfugHEa7g-BbRXxbdXh8 zKBFwKVQ0D8ER=8$(LZXAnF6vNss9&4LbbyzaX4f~t3tq(jgCIH&}gv?G{ZX-$EeFZ z4G`~L+$d||x{u|)@5TN3gxh3s(Nif<%AW0Ee(7;_JMta9l{591?z+55tWmM`=kGi> z@;^t*!+9@xJNp~9<*+N@4?`FsYosJ$FLwB3D{vN`_)!C!POW zdBwkcoPas=bU#5H!4;y#XHAWMHg(BeCFbh>{`*sUqbVLii4|y-DP$mkm89Pm(>m+! z&dzf?JGnoT7r672OA**EiX#{XwZEUDs`{mhm9Tk$vAuvn-)&b<#W`ez451BAL#EpF8nZ1JE| z>KWqNqbDv&SkdJ&HViDepwZIYXzsGMwBw+P5kHPRs31Zp6;;RTwzhdMdM*y;(mq-b z@G5;Umz<=vI7F=kLwEC1K2hdB%}h;3n2VFihllkha~u&9r-UKTw3R%;wTGx!#A!7D z_bt2m&>_;l;-=sK{;pA_TREZeki2n*5vlbmmB(y|28c?Q->y<}%@l z>}UE`ua13pkpAnliWT_I;anx4VBU{)MA5!q5beJ_ ze)6&&n>wH{HV>|3l*yz`a^{|-N`vJLbP!ZS^E6rPvTc$zx1Cn3@=Ej9UGY$id#Bx0 zUu*8QG&aGy+~|bdh?dR#*h{5}DU3;74}EU<C}LD8TN$rNwkZUm34I`@^WoG9{H&r7#Fn}B!Ng) zGYMBlchan*6{E6O#v-r?`C{F1DE* z;J)lTh5Ni~bBrU)y3Xk$>PEhXJj`-%fvEP;&1@rHH@!eXp0G<7QZ0tW#^wblAMQ>v zNhQUmsXM`#UoO~!#xd(zjoG3)N2kgVLQw?Genrmr9{v^04D(zfabZdgP^JR8OI}zi zm86TQdRI}uK<%(l4RwcIL@N4NJ$CX6t%}yZLUnn5vddIuh$e4pmN`vL1`lbC8G`x- zZQ#B>)_~nJLc5}Cs8~%Z3Q{pswIPAFeypzRUwcc9zOu^HWU3CoW%Kph zeU^m9>Fu!CtqJb0JCyCSBVT1%6qzWzO1!H_%OmdeZXCmaraC=C13 z!<%2nCyjF+tQ{ebE-Tr9J>gIynD5cEp_|WaGi4GD{9;f{@pF!VO0yx1eC34m=aM1@ zNfBRBAQndGJIpa5=2kD|6djnGhlXw$Gnmc&4Y0YQC}=^P_S^mDG4 zIET&4uUrhNHSySa>?1>H&@o2vcXsFJ@#ZMAHB_7G4nZcZG~7L*6|&dza=WV z($Amatj)Xd5{*=sCs7Eh{ptemYyS$LejaFPppdlf-qZF^2%Gggw3e8g+Z}a?CQnP+ zs0fj+b=B==bG^Z4Xt=gEZ*a)l<{KTwW%mQyz78aTxywGc4;2jV*~^a8qB;b0xRr00 zA_v2@=05_+!{%q3nR`M3dVlnxS5}ZE&pr?rFoyJ3B=EuurQ_p|4iA&6*y~-dbpDJ= zJux*SBTq~j(L8LXwH2C&GN%OBdr)b!NEzAiF~fgE^P`Y^o;h?5|D%`t^nKjs%V*v# zm~qQomXejE+WmC za%pw$!e&edwA&nRHovQtQT>?TBATsCP)(%2``zfMa8PA1G!zr)dY4I6x_VphSg|Zm zT{71DbjA5y`leIErbb)2yhUF6U}a!DX$zbC#?NkbLzd7`R&q;y;n;w!#nLxg((PTm zp+U8GS)^cb-1o~6nfjNer-uP*;#05 zXt0(-ANqJ#)mYr7&PRmpEe{!MYpo5I#s+ffk@d}kXr##(6#Z~Nj~CH0)(Ofp)kCa@ zeq{oobO~MskRAjL@U5Y}Qsid{fFSgjE{?0zeHOQTld~y=o zj28LpJl! z^T2Ht=B;!45!X>qNbBUx{v_H~;>$vMEXX_n=i)O*Fc;=AO=hhz$LAGitvnZ?a-NS| zfaNL!18-589T)jMmq*2zHg>2=?6Lx-BVYsUeeMN=B5j@xJ5pp;r&_>#G>F?f+(PL% z6-hL%u0!Z>);a66jq3Vl`?E%gR?XI*xAXiu5})~|bY2OqL<#*iS?kvXw57Vz zO;U%ZLG4z3m1iy1xV2T6S4b@uS+(3|<+WB00&wc$57vldrDAKXnEM(=Pk|!E+ZODc za|?9tl-gi3OLATycc<}LXaQA)bB38y*vK8=Tn?CX7&$F2BurUjo^PsriNWVUb+nB5 zVr1k{uw=tY+ahSmL{8kYiW@ClTc@vFTKxK;3Y`5i4E?xjB%0NJS6jWl0JgC(1Xy`m|qT4xqqrsL7PDf56=oR z#TpGb)LEEuF=%0&f%D54LVwSH4oe&kqZHFrZm#W^bN9^tROQuuS`VC0;b;8G)^t!w zn>Z=7938PI_ja%C>S}$qBrk8sRe-T~#vckD8wxdXpK%8tc6+6CRz(Bl63O|NvS~N^ zXd*{1xlV7aH5&}|FmV&Q=~u8Z-o#CS-U{GoGplHFnsLYR?l!XkA=4`4UFj_9K4-*m zCjee^WlTm&nKsd~BwC8p)8s$PPnn<8=X`g#{?%9Se&Y>|PF-diIHr-VaZ7Hq{<^|} z4PNScahjP1xjACA}>treCgZqH}jbL4VvgDa}>NxLO^XLQ{2>@u?G ziMyid7Ef2S!O*F%>*ykpfq|co>H%BU!fu0@)?i&d*C$97Ygu~BsR6miC9Ztvgxf2? z^$Q!qpF}KWno4arz0+JY=rTk2fU#HEN;DPP5ckB2713|3PJ1idYR3wJQZ4S4YE&Y2 zDp0;|?UMYez_Ru0)#;}IV;m|BVgy4E>mg$12P)|<<=V^U8 z-=pv^fOqtJciuzRCX=tKl;!%qwXI^iqIOA4ZJwC;3tbxeZqzxlxSST5)2S<>`f_Dl zUdonQs+DER5IMHrUSqCTyPe!Uaq~chP;Zo!b$&>-`Gj$inriVW>HamMYwd1U73iBf zTa09IboAy?Ev98cEGn0XR3;@uvCB9uxs}zdxbcL1Rldx*dgmY`f?SieKWGmQv_Vu} zp{Z$m#Ak0e7h0m}eHD-*3F}Ikd%bz>W{0k{oZG7DyP!;j09ts0tji=UTj?)Y6N@v2 zpoY4|aiu@#lO0Gu$=p8ks;`h%E|tgwB{ER{D)Dxn0Qrg*@dln%PN#e)@kX{SxCA;( zH!rwj!QBg9SnzHpq*C~q_Rn*H6ja`y(qouwx{GrcBKtG%NBB4#$^4sE$@m*{JMws< zY$ku9-L83m1P(2NPVRzHm^X}n`0`{PA~mlGiNFN1akdG`T$4&AfA#ruMs38>;*z)& z#v(cQuW@rw;xC5+1hha|RheFB3zdn3HQ}JRw#7Cvl(#HQ<+iFPKWR7kMO~u2Q`$f< z>?E>nF^NMf$2xI~7?MmflU(X6)bx1z{A!(=1P-#IhD4E3O+fY6`4URuGVFzcMz<6nrmor~v@2Jh-5+31yPj0Gw+noQ15POUTch@M+$R=(zlc^)Rcq9imymZ1 zv2#mB(CG>u|CrV{;xf9%FOlUBxfSl=DrM<}N33Q&sW;^%Dn_G_lr*^=Rf{}eiz-AA zMpO9}l)}4@c41kwR@pjUUK~BUoDs{F!g`Ahb}3Uz#cFL{zr)}hAo7pe$GJ-q3A?O& zX#@-+LRc-DrNH16OIOMp7R9Qx+7gwbAl!w1JC&ckjwff$Z{1`jWg>i|YXsN=4E*(CzUFVf_iSx)vzcHw3)Oep67`SOfYcxfx>5y@~ zOfKQ1{=(@|dx3pqiuL#JSi3g%FS25X;(5}Ef8EpjGBU(+SJ_0|tS(aO8WN8<%yp(b zQ)9^O4C@`nMsh3y{EnHA{XiGQI(kQmRCYqEDO|1ZG1b%~)|dUTpS_8X^_g{G9>lK_ zxKo;@b@KC(cwlt<_-PmQ%R$n~v%w^-X+;4YBmj5y(>JpM| z0|UELYJ;J*6hMtTB$JBC6Y0OQliZsv_k`QI%iDAlRN53upzl9`XZ0rb*zRhXQlZc7K_d0<}7|25>m?~O-06~1V##I6W8 zJ0uSfJNN0fF1fEGB5^6hjZQIle63I=sg}sJUw?hE)UuHXnNW>+J3c86OXP^U+z-E{ zYIMj{B~pEp&Y~lEvtK5f{UoN^U&wV-b6t0-^2S!?mQLz%D zDwS}q?6iYeGrhQ2VVC6(rn(&lA+|9&yS*LHH8~qw{L{Ei$!GDe1k*5>Q`z(lpE>v?@WNkXL+%C5qupim$N=#wwLKxbQbu+)pBni2A zk|lD%un{HrFcCn&r>_b>696t0W`zbT=5*jU_;)&&MnD8|?pE+n2WVsEnMo13}36@z;Y67hNGasNHN8{}mZ=jvBvwV^ z`XR#$ZMG7j-XP95d=nMOWWr97Ot!k0vaw_`yFnFp61mh~Dl# znSwGXySaONT(w}HLjLa_=I)vIXg^)3g%6+vhGt-Q3f9rjQC~R!h4Nm5uRb44rT&&maaYsK&~VQ^r2mO0 zxL@9SE9t)PzSm#(VX*Ycr=PyHzn?srOdcH4n~VwCDlBLNZG>(8=fD1SUHrj#JiajA z9iL8+-=CZfL z9j)xy)R{^Y(f%EMS{e!XYcSgo=XEvwuxz?vGdJEhKU&T`^fh$RIHh-#j*1NVSp0%i zBTp?LuT@u_wWAdqgd5L3;ez(|h5x`Nm{Yj(+z_L_B|%PzVZm@HpOuR&5c1{zSaC*I z+qUY53$$)=k;wUYGP!HiU^0VssgV}(v>E4z@t!z$sQKy}ceO~dh_8OfB|GZsBMPmI zD7*?rrYYshNCG>p?kZ~k3n}@+YLiF^Yy~*oI3r?fg%aT=1*FH+_82DZDb@PO4o1Nb zkAZPN_9GLaTc#e`qB>^7xn0wyaVfUXcwJ+4t^$6(Pb(;1j~8AC@qnx2|Yzb z+<)+KGkKirXrRM^n*jtR8AbZrUtIeJ745z${@9zxFsojDB=LSq?GTL!ZA>}1j;3y^ zR^o4#DWtoHhwrbfTwGC6^(}LtXX(L%b=;x7g@u6=xKSY_$HC&Hd1#<+fX#w55tY}$rPVH z&|8y3Y|yjP0+H0t9!gfEhTbsx!R${aZy(f~jlK1hlH5U=wb!=d$I9P*bkohGIb~=m z1nMs@tkXXBmcCsV@X9(dnLhE}N8E4yUC$lb#IAYwncg7zyobB1`{Is{9UVVK;``I~ zofnd_r<-D*X_h_If}OR3hTFq~gL(G$CQHED+5rTeI}jtE%>0jlo}J976_LsR?0fs4 zUw!p^Y&B8Jt1dCAR6J50d%3dl~64S?-mZ}z%ySE~rp3JM&+ck6nCPw{qF_A&uro@h& zGa1FirE5H@fXp^=Qgla!vpepJxD&nHx@u_SI~!cF*lI^!qk+l@s7p3F?BOB}q(PvB z_I#D6)fCiXzXi7ywL<}zfmgDFN4d$AB-er0Hi9HDvkM1zS4{6OJ}3)@Cb-nVsiU7O zMEP^(^S9aLA_p_jG$AMaFh43}5d>t%9aN`g&kX&+-Aiug#)$;u2;cnXH$?EsC;#r& zH+tm(mA8gyx|L-PMUl!Ce4|z46t#;SKeVb{^yhyJnOa(;9#u`1hCDSgvUgNxHg}_{ zkowx7mT^NL*$@une;EJ9tr_q3ce<%AW4*|Gg^)!#B z6w4^!nNglfz5$Y7Coi}#bDZ=_^5)~Cr=cgRfoKg6&MHX+b+ z8?aLN!w)_Xkb3U9zy9^|gu)R@g)SenchOG|mr@ih+u_*K8RH@927p3M?9NK|b zW#?=Bcwv?NE9-M>{{!+4NECL_HH%vk&PBBXola6UpgZ^6j?&{hJI~p> z_ghlTy))Kl8HoTblUBuomtGq6?2Jaw!B%^cNL-vUn$3eqMy2Jw0NGjpP|Q7bRi)hN zlop)1ZE~{ZgX+OH!|3j63HCV^pOHv>{8c0Ohm}3#j==`)(9bF)R@{fJvBbw*5%>Q3 zURK1n>wg;v%HXU(Dx(!OJv=Lp@-m>nbQird>+drMnX&zDAmbmFLG5@P0 z-2}B|K04wkDRq;&82WqqYa|6=fojD58_r)jfy6Ybwe@qmK#2pA8U>?D(6vexXO)QcI$>aai!yd*iBPQ; z79JNjc@j3ez0YoSc3E83_^RH<)<|o8E2+%_*haa@AZCrN?JX7j zQNQn>chnL}iV1?Y@Qc}j>A5Afw8Kep9-7e(fq->N)^2fNd}5w;3cO9Co}*5IZ&~2; zG#8^O#;n80`s$oR$vL1|U=Z(*{*QN9&^J2LVb!tQX3qa~YKrtuPjeoU&wcdHI|Gv{ zm!dpZJ-YU0#(yBBFq8Q^#QfZT~zG9e8l}Xqw zFr=U7ebuk0!C`e60pyv7%PEjItWz7rYLk>ZYn8HQ>F(nJ zUA|n))81In>?!R{F+M4&9cwLBYl@XJZ+Qz|MTP@M8C!JdG($V4y`pO5gb5yuU&bRR zSb&}b2iowG=!@dLdoG}63-l15_FyGA zjSTY}hbBamFe&QmdnZXIQ=DiZW*aVrw-6U~hsjRvgk-Ci?w=r3N0r>nEq)Lw5BZW? z)<>S}SLifhKS~m_54tPdt8Hzb7hbsNqM|ODLDVhK`$G1vyfSxmv)fcvrgoe9h#{3a zFocwfj?GEH$5Tq#zN=53oV-qHtY4RpJVfLgwba0G>$|vr*Zi>}zw%k`e;S*(e~`pK z?M`UHsHs4PNW5y_z6;7qnE{ibTw~K#a=ltxy}_q0%U60_%Amf6>F3$IZ}0#8P?JSub7opA$cR`GH;a`XWX3j(v~5 zJ{i^LnI-BHwZ!6z&wR+JCs2ahpmj(^1*rB>CPsCGSi(o9`6cc9v~if6++Y>SQS)<;mrd znq__XRZ(I&^Y@`4yJYc6t$?yIzJi4Z{M=7u{luD)pPjfU4?9R5{VPxHd*Ov7x0}ni zRVS;%eIctQ)DsFNBhGP+tIXvpajA&fS!A=9`V1IJHUhxCl|L76HgZ#`1u#5v?|gP% zPm~P_CVpNo5He6P6~rE_*M)h|n@De6PBWP@mLc+EHsS8@oUTBbfYDIS25A`sms74$ zs5~Y^V;%%W+|^3CS}dW)@WPnb*-%a8L_+m8Ay0+_h64h<=FqD>cdYczC-Nmr&}7`eRl z>@_DW+Pi&C0gS*ix#g1KKm94mowl62g9yP7%STFmAHH|GmBPrE-4tI~MQ81XcxYY= z)CNyLA;;`p=V3=YQueJQMB#xboPdv91`JYO_N!+-!|e0Vw-Th~&4M*#1$PGIuZMMU zfm|UJit#aaSfqS43V}F!X@KB#Pucs3mYeFqv40bIztB?D%uWZ$#eE*Ua=(HIn zJxfAz$nIe9E1)EdKqLwd#~Ay}a`r}UwEKe7HAV zqb-HZst6Wz?wh;5x{mwmi$^<@K56ASH$V0+ZcsnY_70W?vE0ln^_hve8wA_Pc+K2d z=5A2VYa+csZ9y3hnL6F?7t_%!F=OL5g4c}#OvRE*+!tdbKV3-gi%6=FirJ^2d!`F? zMxeVAYWArF=~wzb8{kg8dT{V=pnrFf&4jzGzn@t#I;t^2{_@CoGeBu798#MW{@Xq~@zhY0PAtHC%%r_u#pR?N0=fE8M!(v!b0r-Y@@WO-? z(lo-8(!u{h&^>t|f@U|o3&`RJJhT8P94RL?80spHYA~>lOb*0{k~z0R2FJ#@zYwhP zHIXkkb6daCWfu>MEsh_i)Ol`I6dc13$ECK40JH_A<;4ne0f}NFBr-0P!n-IvMt!ZD zC=?C|>d;wCnMCmPu(V*LPi!*F<9!|xqzIQXFOBRUCI4{Q>LUifskW)k=S_6lT#oLZ zSN>MH`GoalklGPO&ONXGKSM(rqv-nI@_q%Ikn~kLY7>gi^IqTew>{i9pFY?ox0*!_ z```KjHW5V>y@S7Rb3%a>yuoeDw6$iH+i^M>LIJIJviad$oITQFW)FwaEhU>)-no=? z^wpk!Ne2cXThHFIb9(wVatAloMXcOsWH)K!o+N<@7&^M5F8(x>az}{*)0AQf?$<+8 z5>IcZ*kYHrbl3$DwYUf*nU~p%pt!*Icz*Fh!kpUp2i*>y8lwK3nN<)mY3>M8PN`Y~p2dQpOTGhN2qKZP!}#;DZz zt;Tqes1=2Al}aa48ztQSDT%vb>1C_Iyk30vNR^e9c6Y~#=Tlsgw%6nR{SI08q6oCd zDEzN4ryXLEVtUzd>$=hQ3XP@|QnA%tW3c%WtWUioOL=x9QOz(SX_dPb&ArT{%}*V9 zke+sfD1det*v7|6>KCB^n*ncgpm*-tby-iven>&2C=dG>wy*A`*{U2 znLt;rgLuH3BCSE5k{NXpG9@g_i?v#mZmF>j0=t`gkf@6_rD}=Uz2B8T>CN*_HCqFV zeGcEUF>iifm)-45^o`-l8N}Cru(O9cEdikdV3|Pv`mVp;$bIp}!|n9Sm7j6LqaWbi zRN>AYU|WGpn0V1t%IWFkIX#=RRP=epK&Xo6o1sRS#XskAS6WTbDuG_r94MM&0Y=F-L5WNDTTH{1Ssn zE<|(8q(7fdZ~mc2&@S8QjyXASP;s6;$pGI`5tj|hlps1(C{Z$ISsl>2T{nZ znB%4K56!jxDI#*T)X^7GU27JiNp(9ot}=lJ{4+H(mP%hk9@YCt2kb!RtnrjzS2#7~ zlo-X{@G6=D?-1{M6@FFO|Y9E|mh7myZQR$p;3~K6Y`LT@I6Q|`d zkHg{0m@xD=*UT(Jf?W{iOKsRZ1l9Sx1O5WufXA&fZ-J&=hs~qYzu~ZggnSih+_Mjx z(uF-YTneqEL!A5VWb)(=R>EMfrc^}0q!K#aLakO*XuG7+-RoslVoxh~b$k1o%P*HZ z;sJv<>VsRLhi@JrLMak^WNi9sB=#~#DV(WT3RyV0XRLudeAV&0l7vS0OX6E5^oVjudLnJz*O5-&fV?k)e`P)@CnM|t^arZ2ixa*f(evH7bTzu|u zr4@sOBisQp9w=QlW-qdhEVGg%cOP+&sP!^5)SL=d<95`R%hKMOi*HOa#~m7NB%|D& znm$8|U+PtPYR(%QBP)hf!M;|p*&=I*`4oSo9zC(7j`!${zCtHpq|&mHj*-^2BkdJx zO_^F=5blK4CpNUGORKO?rn=(Qfq|3urkYFPqbeF4tDgOpNTrh|)J_=@M@f^h?bHI9 zL+afS<4VaN?kGQI&5{7FugEvNaIz4u!OSPvbnbgjUV)P3DFk}_f^#yVfj>UDhAb(7 zKR?CQGupJP!ytJX>?de7`o*7;@m zN`KYxci(-7Y#NMBvSt=U6|;zm&oKwkxZ!&JWyh7(3EQGpNf41(BWw^ zfQCW{K1e3l$W?BmuEvFHfS7=5fci};czB2iwZ6u3d7-|vHV<1gb|-E%3|vtqbGfB~ zvz~l@?axw%MF!8~UsEm&%p!bz;)0YNv>LRHp`$q~ zOq1i|%=;7#CWl=TriBE#_lObMJ91T=qyePdj6>n0E125p*o7CqQSU##PGpxx)?OUQ zi??7ntU2actS!()74}J}KwVDPl1TPY zF*${`^2#eoeM;u-Y65;MuWfZ<&Vt!oV}e9R1nhBNr$u9rUHRuf$GHo+_PDD`TdXqJG;(qSci*rK8=a*A&+Z;q zH$Ls~nUsLV?i~SOE|C^`4#b$9-=_}Vcc5QpGKyl?@4cZL6=?_!&nNkY&;Q2xd~v}C zw9d%1f&X9Pd>-a!|4%rdScUul&-s*r^C|tm!ueEE&ZlLL^SPLLDP6-Hm`1Xt((~DL zZ!xmzq8>FmT38k<SU;2lb9)8uobpP+v$3G_p|q(R&VqlTDsF)PQxKw0YB=4k{+Eb z{8`4){J5&iB`bVY2RG9!7=PrEhaX-^Nmlr{k6h0!ul+~uxshe%xJ3JthTh6XPjh&!aj!c#zvV&=YKvArQI4{8Hd4mtZ?^VSw- zb252Je}5;pyOwJ}U+j1&y&ibE`33F(^F82gfEkM zpZn%D-(AFg|MiQ#ntW;GlG`793F)>DMbSQXbY7+B#=uynnbLz~gwBJWx!}^d%8v&L z_(P&D7L^fw_SrfpLoonhE?X)i8|O#HcoG8tmAPpT_)MO#kj=^GvcY-f<6KV8A8>+- zImbvB_Xwf?Iwg@{qS34U!3|rg8JQ@wX%+WF9T-84A}7&z=nFK}Dj)YQIkWHco(TE4 zo4Y^uV6ClZv|1dAg6DbKJu(*D1O6ib(>7;Q6Tm!~i*R_Eg^Y#2H8lQZll&ZIF+1gJ zKH^W1Zf5^vF3p_#l^;V~$U>3#(@bhUA3uvlVqNA>6a@f=Gl(^YzJI>(>+!#g-biQp z_taX;q>a*|gCAehb#GjTdLJO0*x(V#E{EdI!$j00Q48&Mp;RU$@_hULPR-5M#8n6(|>sS6FT)3(noR{KpM}6?vN>ml43%N-C8?1PLOL(1_)`QclK%U=Mk@FE;E3au+M@h*-)g1G;$o?m zt!=Vsi~WoyYz?RsZn-+heNbaB)nFBeSw^|`Vv&%M+8k0LcI-x+c_qV6s@wdh zfdP$9bp87mCNz2t{DTfF!5Ls-(R1FoI?es%m_xr?E-~nYQ!l@|6w%#)3gu3AXx2TL zQJojTuTox2Kh$!l*v01mkGA&!Y@^E7$9-qid+*h1wq#kdt>P+o%e~6Ir#DC=q!L0J zqyT|HU?B;FPy->M69}EqLtrUOho$YpvI{Jo^$h=WN0RM8_PyV~s-s(=f;$8~+59Mw%Wa-FyQ?fmj?RB(85W|Hfp` z-|w}>WMSiUzi(P$gHY7qfN>Gx(?4}F@N!Js-BT|!0HLaWeUtg3#kj?0-ufC;L_hn* z7pNmYv(4^N=Ld%R6m|(D1b5=!ZDJd)C)|HQETUyBq-V8{;67i8eOsO@(Wnn;8@kM4 zM{|uPs;X{&5tE-Hj`J3P^lN+TGX7&1`Sr==6f>xS37-SVGSV zpzDkLRj5;=4k-<)NV#;^yEQy;ugaeJ{Ga*TuFca0WL}}&N!+EeMAd3-8GWusU7*q{ zBebQ$=z)$vsY=WPN|d!Rfyu<@7!3X#RUV+L)S(bM;5Ni!x*T0a)pjVXs5#fZc~OH@ z1I}VH{|8C&stqTv{N*71`Iiq?3G`ZS>8)=g9;g&Pqf&6aEvZrraOSy?0>HI(3}jdX z@U_bT4*#c&gGpB$pDebZ7>uAycJx4?1QF^qs)p$QL>4dws+tUt{?Amw?{I>6>@_Za zphA@KTgDUUA-e9`zP`rl>PLl=C{M+&;YiqYxQ!#T8#&O3V>k20Q8t@?YoJA};TRnj zt_((RI3+A+7T1yObv%*x=+W2pnCdlR5a*r|@oIFR-0R zj|Z6|gTVhOrU(r>mkYQ5^wN|9WFuK*h(x|)$aaCoJr4-%FHWHA`s7+&eF%CxVe+1U zM>jw7jNP}SloOtxdwqL5T9xlVrvTc3UIUcXBsXHm6HD71-04*Px?U**8LAvf?sAYKAkc{qFjc3@$t zM6X~&unQF%K+KE8T?Y{H&`MqT$~hi<$wSvbp3Mog@X6yymK!i$6qj*ZU;@{w~>wlH_vQi{-6iy9;w{uREG;x+3HXfN!~chGg<^N z3x{h9=retBEg_V1BYFi`Hx8f6W}(lRoqmG;^+uRCp@PvI5CucN56oQWf!~guw$b8g z8=ahqiJ@8;qWHVbW|C=4r58sAu(4@JHRUR$T_#WJ@2=GQ=_%->u>Y_7eI=%8MQk)k z-$cJjEb5{oZNDZG>+&OO7J=Wqa8<~s@{4msenGC7A_tC_W$0-SJxA>>Vq_bc~#}a!*8s}vUha=*=<)(uSaB)0b+P&~BK2^){QD6kYK zGsswJq(_-~SvYA40Qgjul|7Z|k79TgdT_Sd!Se*YLcLB%3hfRt8%E}FGkrcgx2Rmd zWfXDk&D$0UvgF+>8nU3h;I%H_*(-~M4n<_ed}7&9AwA!!FtxYw4YDkWx~v}TU=%!|dnfCscvMFeV6CYPEyRt};!4~i z2Sw3hHnSq^(STFTW>y4xE(J=7lIKlqLOaIBj$tBo^g1*dTtY3=^eLiYaba_3TTJ0{ z%K?5RXWObu`6ZowohAIP(JW$HLFrYu+}@4^?3P;&?6|n)IDG`&QC+>Us;U}T*H>Jm zP;!M1Ctu7eh$`iIxtj~6TIhojJ4K{WrUG^22coT0WX_~*S7u~o;DMeJSd zwCZvXhUEgQAA>P)U{XJ<^rryk*c?n{(7@MBI&tV&c&^MrNl6GkRBLVuJ2x2 zB??y*O4uSEk-asxpr=~<&(A*lSFg0a29sb{0ygTo=VBvcq)fq+SqX{bV^YL!n^9;W zX2UY8t83|_Wvy;{p6k)J7MK=hv5J-X<1MAl7Yo-sT*d=Z@X*cZvH=vN`a486yMX7g zT;FXQQUs)#eginP00lV&6Z$$~5E7mbVTJ1-hrX~SVEQi2xF%zN#tj)aXB^77Gvn@z zCo^8kcs-f6Vv+mb9EJrzmRvjZJ?>ypMpO(K~hFB3`lFz1uY-VFG_ zdw#>Q5sdJI*hu7&k%~+cTc_8u9WKdph5obiNeM47c3TsS*)*BKS7amjC6?T2Ve3pf zw$medG3r}VK+3qb%2N9Fa;4MAsb(88Z-8t)TcF@`0MXW@Dz!)yQquVdU|lNO{Td)a zFQuQ>W72OPCfL8YqN4HyO=E1x+6IxkzKmy*L@KO8BB(D8$?~Q7#q;X=>OV(swb6DW zmkyX*z*r~`U}KEfTvSxwQcrwFA5{q?KA%8A7RGc6e-=Vz=0X*;`Djb%KhXzOLRl~f z!=6j4jY{~?Se99)6FEfktQ>T=!QR?vv6!3N4)9E1XmkouEaA0QZVr$Cd=T7_yb>s0P`Q7HG zI83Y;R8?pY^il~qYQ2Unv4`GsC0J={%@qMlCD1>_P<7PaP^m6aR@Bos96c)U*7X$QuK2>{ z2W8TzqJ2#}-ztfp)hOBB*GHWs8z}V%Ie+3RG&`oq)6{4pb4v8(FgTBkCpxrs7cK!ddj8xsF}1+u?CPr5yKQrqlI9L7;2t2{HFb6Wu9WJb zkrgWRE-n3R`DbJr@yC#lu`oVQ~$@NBI%0x@?Ht(0Vm*hVvo)9b{*+fZdL0Z&I~RtgDu*Xvtf zz3yBe4vyV(FMfU_deQq%2d3$RL2QLLhJlU0QR4(O_yskLSvLJ{Zc9 z8~7hisuM^tE?{a|a7zD=Pl`F+v>qYh#(~G5Jg6u>Cv1=Kr~m&P)beA;wCylq6FBw- z7MqxaX^sSoM}kMj!iOZZN(dIgQSkKu_2Ws*nA70k|L13PZX$8uU$+&*5pmqJFFd-0 zwkp*mo6R*!D|~zz+fbMbV~lvv*DTBmDbIL9X@N#J-3@N zy38#}V$yL0=9%U?P361$ClwgMEy*42wzg$mKnI9-D7THcikc7IL*MrIukP*Lj~V0P zB_P_Vqjxu2ddCCMqwgPTBdv@Yd(^2l=ZWh=^#m#usG<(JVDuQ!K6^FyI1{r$Ju z8n0adQ$P6@Cx~44Z!d$J?Vi+knBozqg9iaMipd>Q3&J5Jjt$e<8|>DlGQEF{;QyXE_E;r~4xZ%|>07A&wsN6=3lu7!CRH;^~J6jK%4 zdoKi1^pPW^yLsaK=4NzxRaw=S@4f#a!8;)n$c$Vu8MI5>juVf|1<=YRCi61kZ}d)| zHmdV#3yY1J6>982$^(S&=Av-nO+_JSmu?5+ah!BbbC{EUBd(GZrRdD&Fn|r**|t7o zBcxEaXI!4#WV{79w~n_MJ8$@+vy$O14o%sZoxwWoD z;3rj)(qpw^Ek7pEP{pRE5LYM6t2-qU*d0r@*07b_s`KZWUNeoJQ^HemN>|RXMv66+ z7QRtnE?Mm}RjP6o6?DeFefvJb1iM`&VjU~SQlq9P@E@p*!T4^}M{!8`#9m@gVRK-M z*Y10#7~NVZY(MlO;Z>+|8ckf`Y6M8T$;QU&UIqBm_rmcmW>IJBWum+DE-OhwH zxCF#h;ISw|>@aE28A^&Ni_TaI2EyfGB5;shNZg+0tm0_nj9EVLFH+I%)JU6YV;n*7 z(>?_e#y4PU--x;IzkdX+r#Jpu#Re=sTh8GKNs_}@dYc$=SZs-qs~50=c}QXbTfd^M ztqDO>&d;;sB8!y+UB)oZ=4h2j%`#YxTnS_V?P9jw#j(1q9G6G>X-U!ctFDfNXI6K` z#p^$;B~;d6TZ~ta05~QMg_){QpI$(nLWwarJUD!G3wnW$pqu}DR}cN;C}OLF zJ=G$wvb@bFXVD9XhPLDWkN>%sXJX|?FWz%yk-{emU3la1R~AkzAa?hI70UnZL-N^a zCCcP9R)#tQl0VEl>hcAhV;=DNuKO|3Meq12@iGmp$3k6gHAqLSE2uWqmP1Df zCOUkORKrfnfJY89MR`&xJC%x#5$QnM6NNwkYj3=RadKqh26SH{vhTiOu2wG`JGy&m zEV^=`v)s90<@MSxk@nm|O8%<&ou-(Ql{C^m~kTxb5zksh5 znX)HLsu;XN=30Ys!5RE8`X!;SYt7>7^um()!QS2|dXiR((08<0iz_Dhb+WtL&?2+) z+PRi@$H(bq%;%s%3#w$mWwg+jc-3dv9WRhJ5 zXEPsmLAsvaKx&4m>-$m5*jWBY z^vh^FeXhTYG{E%UnM5OXFL{9e?7j8t8|km%=8RL|DTFzb=nLvOo$^Y_FUxkE(di*0`XcuBo;_kQj0M2o3cmye`500;mAyr_So=*l+g$NE#{qxCxTW z-%I}p+)(mhK%gY6<0fr!7`@fdu(iIvnm&XM(ieh*uY>(O$aDeVd!Gm61u!G+Ts*V^ zA3p=&hy4U5&Xfm`PRC7~znvavH?YOGD=_o8_pojV)b4+&L_R5y%06Lv!tgK!^4bQaw0?jwPOy4m^IelCM^A zOK-S`{?Xu{GwwFIX3Tq!Z?TC;i&hkhcVufzRxa=oeBh3%wK!pXxl93V+*_R$D`z=n zK8ba3fgR}MD=SS^rmEV?eCmk92Rwe_OgoU|@c2Y~|HKaJliZ14O8Yq~x0PqMiY%FO_5bA3$n=Z@;f&f)4!qQ)J|o9v4(f(8~Xw|dLjj#!1KNmZ+8B<+2D z^q*r_?YlC@RX|yF`=#4U-{|gUyMpJe4CT0cx|>YsR{QwDVv*I#v-QkkyLy}Te3M0F z=^x9!CupcP6dD^q8)0t2TPK%jVmeU&xIi3CF{#-pCnq@z=w9MGN<6t7p&6F5k61wM zablfygvw=oVpJ3bhr!q zLDInNzZV>W7KV)nMmAz$KJ5gQjF!L%d%X84dQ4_8BWv16kmE{!1iuAILHN%A^B4ow zx|`%o{8~7|)no&()F!gI73_NmkO^JHt!^Ekn>&8?KNhP^Y7|9ZkplK5kFKoF6z5L0!K7ZViNuLOwgpIutXd%W{In9!AnB-6VR5rv>!n{(e zO=z~uSzmT2U3OkK*XA50Hd5=+sTt~U)X=JMyR5VnCd*_ZORv<#9by|uJDmP&<;;y$ z%HZ^OZ7VrP8<;;k%alEL;R`(;P4(ql3$&h@3m4GO_7JyfJtLVW$2e$p6L<_yla7=c zasgT;iBK9i zh<59H&hHiIHQd3?{U+pY$y*#Kv&JjwkA|{W{i&ZLSMoY9Ua0Ca1VuftV{oACv_4a`BZ<3t5^68SClf1ZC252EjvojM{LZw`orvQ8hxZ97M97+E-U| zH3mW3t`)V$o;i!d(C@`BSU9W8bS8<+ZKEIPgci`tkeU9FbU9{RS0peSdA8m;LSuPZ zSjjh8MVeT=)(nS@ZO*;Z7K3ju<}Ix`!-B9{#aB!uhimD7@|cyahO>1;7^ zO#~uGC_yAm6_(-CtRGr|E}~b#%SMz?C%nXFYMqpLl&V4}24J3CTOkW1ER+Rvu;`U# z#=<;Vr6d@=oD@%dSKfyw%77yxG+L!>^nHH*qP)Cv`qTW5(#|{RUo&0ce=2hsco5%T zB+JfLlq-BW#6RFN|G9k6zCAIn3^dvHUE51wfo3Sa-@{nz0HdJ;;C31cxZ4p8lf0|BY^AeWw=})naGo;VCG+MUQtv zvZ9x3qvw)n;g9!%cl7nWMev0fwj_#H8oQ(GN>nN$h#q92b+^nfKBHEmeZYnK)y>Qw zf?a>A_V#R;$fC>DmBvurhoADzHX$Ju@Z1F^M<8J&#ByG-!31;A_+lQH4T*RocxNv` zl`bjJDkufxQIpBZt4$DgF#Ds$NnF?#E?iRVnx$1#%2_6`c|A>*LGB$MNXp4m8Q-J= z$R$3*oy7C5`6sHOkB34RUe!!2dZRPcsL&H_Nc()3$YhknVRRS$3aOp=qI8g}bOLX= zRb;lySj1i3-LIl0QhHZ3vsqcBZ1hDkTh&G4oIK*9mJ60Ht^V;Fwp77ul^O-eBFh@F zD>KK+RIc`Vpz3aJCz=^)ziR)U7*8%I8EL3{ln+0|k@H?I#iR`F= z6!L6gnm4Z#MCk4-~NVj{_>aS+I`#N9JQ8TcOLqldYUlzF$^+du~nn2bOG?q zUYr8Hv8bPF1$wJ8uCyD@u9e6ekaS+TI+Ihww#_KfWC_Z79@5#|Og~t5*`7;^_&O~+ zeBR~_McLZMxVrB>j z=v+K_4;PeMpz&@bV@6Uz;Vj+sOcI2*DTVt7A&r96V$Jn?=}zx+vg!dKa5z6=5LY1{ z9#m*`4G}^naK#`;e!Nj()w5bzS_>V+iuiPaU5Yl*=c!OXeM|4bZ!vx(w_x+`CSv}n z_UyRK$ZlfkUuc)RWHmyKa!z+QA?x{$n#=H-D)KRJ8&8Nj47NrfoHo`sq4)kMzRRl% zt7bPe6dt>kEs^mX#RmRsDnm@8(^drK-X4og6D=l0A42~ThO|A-$a30dVWp12Z9RaF zUkDlal^GYEuHKWz8Mn{CZ3lymAXkT(b1{%;+U`R2cB;W93M@rn;IOblW(7c4Oob8b z!<4_8cEPbOIZa;xsrO~nVh?y9kChWAs1g?O5*0$RuCALB3MW81&9tZbvDstC;*h^q zt15B{DaTsG6L7A`&7Qxc00}tx^M;oE5#4S6@=h*J(K6^;qVo&mupo8x*C0GC{JqShPZlj zoF^rl2+^fA5(_WRGw!U?M`Sh9a8IGkCi06+XHqNl$Io9;omYdtEOHj1#QgdBFCRO4 z#~n`tn~Ek&5k-Ac7~H9l`RK<4>H@h~5mqSF`Em`6vbCrq3YW47ZBeM*5~Q3BGz0rE6r>izb=Z)xnQ0ziHW_=XOp*bN8sqoCPGX&)g%<ta-2eb1)l!U+av^#>o?gKom9eFW7p9pu1 z{FV`q?~lh9Y~4EJ{`*;X-Z`{sle4O-J$peh5uWWQW=C!eUth2ok121dXOMKsE+e;; zCAXPaTEJsv0-brWr9@gLE8bnfQEJ2$BCQhH$}KtE8n$;&CtJ$v;0Sos54gGk3Qpmg zw8(S6`;NFX?rWkyX@K6`Cr~+6NSt3v{}l6;p$%nsersn7IWeA?OUOH!KgG{ne~pwU zba?=j0(|OHPv+eYO_|QCuS7<3O|>x#3;?Oko|~oj%p(Rl(er%P)~*Yin&?+5uHJtY zWXQlv-ErBD(yQtrE71Ux(60foD<6zO4wF@aK)N!e>e**ZBw?gE8`7XmrfAx)OiL&+ zzd|(j1cux6gWA?1Na;cLNa@y#3(6~vqczvJDzpkzNi=cD9nWp=hi>*qy7Omr>IZZk zGpO$&fz45R43bbqwP`eW{#jx8Wulr`$RRI#?XuxQ8*zVDaLHLY`8mtZ`GjwG2w4`L zDBRrZ_lzDX$5~EJU8Y_clyZeU4u^e9R{n}*x%q)}*ZfUjgO)vuUKDNV&-GNUUF0M2 zFURe`g$TdQ=dd|oA2Y#mKLI>Ze5ezfA=E5m+*@2--2~h*dtjiz)b^zIARUUN_af=s zrITw|kCU#{PX6&D*8lJkzAe}Vgm|3kqlR(q_x4z9(8 zu4~fgWeeK{o*>l()8g17t%&FH%6c+;vLy-$;YUuyBNuF}v!S~XAU%cfvC}K-&P>3^ zQshTLXh`p0)#B6ATfl{evZq>Bn{YIiUtA|uONj_kMDWQQ-r3sdoK3Eo*otfsjW6T zjJ0)F1MHtq$R#{~ncWMGUQl+ki1a`0$6A(mJETu&0A912{*MWw@kw10xeB zy;7`TPD4j>e~+q8r&-CV`!((IV1Z!;(Z{qU55~T4azn{3c6?yqq9#DHw6RT8uQpFz zul8NrV;O6~-e^sa@~I!*mrJ9TrC0THP2#p4b9An(^RDg?m)2J(IAQ@2xT@?i&h zK4A@cc!NA=!N2e%LAhSWHQP+Q8M1JNL#b1e`6!IIWdE9$Tpc>u_;$k^jS+A_uQP$U z1<*;J(NU?@LyPNTN#m{(KA=kT);r^ImU{l5=2-xYsTc05mcjO{U7z)u7X^EaR1(`8Fp%LQjs!^}2=vLe6uP3I*J!+Dsiq&8}Dw zUEGpc6_s^LBb9UOoNaMUld7hbeyLjPSQJH}RMc*BP- zoMoS}Vnc=0A*j4y^}H=VT^&h}jNZX{o`ZkHwx-+uO}LOJ}A@2ZOz>+M*J|*nDoU zMPN4ZwGFdX&Z;7xM4Tg&g{oR}ZpSGVmWpE!7_zhLv~Y*ToFaov?iONxGtS3Qh=Fcu zA=eo+WM;J*5MK;;TrZP3#XKRD9{DC1A|)1bG6QxOGA3EZbaMb$3p*h2`ft$vWT#^? zy~a(`jk1`GGINKg-T9<|rF)4cYm3Y`!)MH|pC)kW8l!engOKWSWhS?ZV|%34He4rg zh<(+0Kx9PUido_>zv0ACE5IGiW{waFq9QkLXf|{7W?)9iA)lx}KtuBZZpGPiV&@WHpAkV^|}XYcN2$&|eI3uo$%hcg>06h(@% z`koSXZjPi}?9Ek`m@Cy4LYMd71T+r_bz;89ujqCSctN;GHv)<_a?ZMHOJ|)mkpl)Cu7nRDnj_v~q*9QE_M5CQZCYqhK-VInsj_KQr7KFhN*1fH6+%akQgG zA1#p8OY@?;3hqOSM}#^J?~2dwT%Xg212EzarL4wx^~*o)WT|z+i@ttxhl{FiSNXGq z-9o32$cw5%`O0!tII{B){p~|J;HF4Cn;-h;C9{Ty*|t0B?@w&af?}-Dx$@}0_tB60 z46#yezOJkaytiC<^2bOWnNzfu<`&Y^Y^<0@HM{=TO_T)~1Kon>!6xHAieHNqG#qC_Dt z%f0M@Qwup7;mjuvZE;d}XZ1XG{H9WW;SI+hM}gk;ty1XN5vlrj&28xDU}g7j9xju^ z)2uXz&fSmi|vulYgIs=t%+SEZsavxirTHL%NmFZA33haHJ+3cH}GuZZ1PZT}?ld z5Adq58c0Q7A1Qr#9tK2*4Q`vqaHTt?O$yr~vg$o`pFM8DrozW_Px8n`j1NX!6+lQ?qb)+9YWpn}DR zha*$`!WZRqI4BNFV*TJCJXPEg4w=7|u)6;yy{TXa&+Wm6ib2GH6hQOL{{mE7joTfG z^OUmUf*W4^n9GN;I`f{oe5d%kZp zfQnjmH7#D~59Ef%d_zOE=qu_gE@7qqsz>kAE<9lBg@FM}r`!(p4(kt~Qk;$RYqJE3 zd>O|UO%z#kYJ(Q8z+w^cU8S8-VsTJikO$ow1rfScThZVu&0iQK8uUd=X94M^UEtq5 zQcG*l=QZ@xwWzYJDux2|3iPGM6xSK_^{|5$<|5&y*5pOPw?4v*M(O~6V;Ikl`CqOS zMuao@B>X;U@3kqn1acL)Y0SZR0*tf41sTM>;5hO~yAp(#p`XZ-NefkQ&4dnV?~Y-` z5oH`i2EwkfbqyN&qqpDQj3unAr>Cvb*yV-FGuKuBV~)E;ldEZ=cc8zw&_^2o(Ga|< zmv56s=5}vD{hbfCWn(Ud;hdbAJ;tD+dz_S|#OmwG>zBKq{u_vu!6a&eXAOntioQkU4!ICKmB=uh;D26SzyvAWt+YmV2! ze)^y~@G67;gK;tpFe5o?3X@PK87P?jj84-@={v_r90*}Rt_}USHPQ#tGzCnYe5=m4wQV^(o9or z!DNgj^sc3&(%^U(lrBY0yJ%x5BO+OBm^+BX9t9#7-0I+B9pp1r}++f`0ElE01tneyC z($tY7fkc96*7dAv13S%4tRFBDJpya_f_AP(FKn7oV&Vf9EcHd`*Nq<^3JPJAd(mUR z?LoX5bq5b0xv4>tX%kjmvG3YTW3bg23-ID(ZNY@0L6s?A2CEAO+KrEx1zVjuc1W9l z07WQZaac@lnAm`J&g2@4X6-+RlqvZOFYOO#mgPKun?S4Nth{5HlX&HU2NLvwi+i7J zzi>%krCMY$3l!moq2-;+&Ql1iHi@ER>li#o18BI*Nd>bb7%b(6J(+%R(~n*Y50;e1 zb7}hUVSi^QI=@$#Ss4MMZ()A1g|9_>=miMf+d=P}+703n`pKFrF2Ar4FpHdmwOclo zh=(8#>qo1>>5IdGyao_hKEO4xal)o)(ig{aH`(!qXj(pC-F1+3e1=hk$sSg1 z=lhL>n)-(o2-0u)=luD!{?%7EZ18t<5V!ZQ?%CQ8Q@h8ZYxSuE(4FPd+*q9vz4HwT##1N|929+rs~eg63+m*556FtDw!PpafD-aDrh$HfE;J}FSLFwRHR zb7<$I3tl>QZL!=VEV%gAV<=PO9IO*+{N!AKrCsf)qT<6O;@KAtX<RQIV}|Ry|j56g7@SbsU=b_17D3gcBqq&3c!PC(o5~6ym77TpS;ixZ>_e+avh_9)?^rE%B0JpqH`6>NYH@Lg}dL()Fyf^lFF=s}> z9ba97vJ8bwXS#ujh?{>!FxxwO%oA|W!06Z!nD)67lmY-NAr``IM$iSDuK%27_}H-X z(*hz8KaD1d#7ebhpcCbh6?5&i)>+Fd#>MX1vlwI8HmB6Yqi-PoL(Li`UL97OO(Qjg zK+Lt52L%!#-Saj$PrK+PM4-f;NI0vVFqWr$xx1^cFX4ot!F+37V`HtwF--N4TVOuUm(C+u& zzvv=QB0)CRm~A^(-)34inCSqgZXOq6*ZcITxp%epHJQW#v2!0Pz>FS z$LXy)v8JjD8dX@W{Z3sZNZ9&O;pmGmJaVvH;Sv{Jb>#SQQ?4djpbV?RMXYISii2dm zKvpq2Ta{r4t}B01W5Y4vidHIzkWR%Dp6Snzw&CHJ9}f+&E6m;VOQ8KqP`t2row~TT z(Iw9k1&7*<6gb{{_W0Y|iPe3`K5;g2wQ|;@2cklgffv|yc(DBZm2+I8YWSV3v3WcaAn$FkagYNbGyumv+ICUj$bpsg{txn z4K(YU^bI`&YdT;~4oOeE_12axxt*QF9?C&(kZz;iXy@tl-1=v~%F3_ZyLV@_yl~g` z*Kw%ZyGU}{cGUs827D}!AzoISzEf7(M{MVP5i)aV;pR*F-LG&D2`{_~%kZo+z*KS=*JNPjW_ z*$*%A&&gxN9>E*rQzT-(1~_-}85 zcZ92#(iGtdMq(uQA|=Xzc_-5V{xdp4y9pij_o{XPQAt>R0KrkA{BeQ7WR`SDj5;Mf zhv=dX|D{`D;|~C^)c)Ofd-r0;XK#Owz4%+2I0kk-YG*khwq=#$8#lopzo z?;GZ*H2nU{=IW^0H{aa4H3#&`#>8L4%79-{stDwF%sTbr@f*u!4q?&NM<0EXerEpB z^>)nrn0@KftKoP^?S(I0>=l|#Jm;FD%Ta9dCh&kq>^=amV@RlQ65EZjc1)TvS^!B3 zM7pBD< z-?XXDipk~?+)$hBSj{E=O1P27p+Hxw**%J}A`Ib4;BQ+zu=;2s(F zL_K5U2=(^^YxF%o@9$9p6C(7e+-XOodQqb z$9}e{a7GIUh>x3wLt6Smss2m0l+!sYVvu#Wu)z5j8R&OXF(3+N7H(Rdlasq{EBe5e zw`4)KCwtL3yNLbtkMG@8jZ1z-2VVY_8X0n2tIU-Y#l1Q*gX*6lwAuK=fSstGyk=ZT zBAx)lSpk;}+kqm+cfupQQXU3$Nla=LhVcClE?|;@aH_)-`yotW10ZO>3>X_avLF-? zmMuniw`TP;Xu4E&iEqZoTSrt*o;N>7s8#`IL!OeO5BYhH9KVATEz_Za(%`a{g(PrT zE}lbW4GdHv4gKXKj}YG*^2fTYxOqBzmD+Fb=*$ddc6DD%FZ0n4>7}y#Jdu)J9ye*i zLFBC0WVvL(`zy=xTIp_dJAGr@V{n{S@D*PIUlAJ{4ahad+@%_P@ROejD+Fsx1;N;J zOyAfjxpra;<|TA>WDd+Ud6;~HNlK)f;;|15wkug!Vvsh>GlTAf_vuoIwu2!S zpnde5$NT%g!;O{#{68LS$>{$)`Q)lq*}xnBH+oC!2lq~l6E}6zySu(<11j;fv%&{w zZuizr^8a1yMvji=OO^UVXTa zZx$tPz4+}OZQZOIp<7Zp5?fMOxOVjdSD9nZ%JY7xv6khFnuLL3`a|gVWl2nOzTKNG z>oeCiI-#kO%t4(1;u_zS2ZO)g#>LHI%NLk9&kA+*)gnB1a-oVjlcl z>aH$yTNj0Avo?a4^CFn;WQqzm04L)t=BV&wN_=gwf5-V9fSCZ-hiP4hP;9#Ma|im2 zHsaB|nSFgW?2g?&L<$VvVy9BUl6YlYW583; z(bPmdNB49fUI%SOp;om168e>^JImXENT|NuHhTNtVeZPP{oHGFp>>XDY+XP&CY=zh z5f6d$SeIIf68yESKg8^KC0O9n2M@iE$r%!sBqIUq_q!-{@J=%Qr^+JcCh~9n^85pED(c=cn_IKNHtOxTo9H}s-W}f zMl?$ABm3yvDt7MJ5aNRc2rfVGyeQbU0Z2AnGkN=M;6a5L_&$ynlXXi7a>1j(k4FG9 z3Je_lLpnrEzfV5~VrxswlbxOP`VK`=8Kg!8g&|o@IZL8ZmdUk}eNmt>Axa35{LVtL zUdbw9$+gs>yYF7GpdcP6vnQ@3H%%-gchi^6cv=wv`BX4%`gk5wYx4eKJ|*Y{NhMFx z#220dLIK2QDIhS3A@bleqsn06SvB>FP`*?akM9W5j-J|5tAHVx9+_A1MVqecA-Ooy&ra$h- z5nU_vLcZfP)|s-+^>y?Y^p1y2l~LfjD{b+_(-qX)e<+V%uOwIee3(E=ZIa@8y4VN=PE;T zVE-gOOkWpxblh0?AQM1fJ!Ak^6ccE7r@U%-)F>k~VDOk5$}~?fSs*MT|An^#`>yE? z&Lc0JSlvgIQBQq8GJ+n8H6MTdy+s^_lE37`SMSR%h~02!2NJT|ZoZQ4Xp{Q9qN2v; zm<*@{2x*p#ZH(se0_An(eqLRxHG#v-2(f#d_6-vo;wS5N{P32ye(l^YD_^hYnp$VB zcqb&&D_BCCkfYFv$E6ZB9}ucymOrSF=VZ~lJCTn*j0l=yPV5bE;@X*D0(;;%o011- z#)O%e3MQSRKvNM@$^!y|3)m9;JNSiKiP_Y(Z@u^4wrxQ;f(7QG#U+5&<&`aij-g>g z*Sc=DQp;~$+?aUjrD$K@16^I7PSQ-h+>5sKP^*ZCO3xXy@C`?BN?!|f*91ByTZrmf`V5gX|XT0g08gFV)OH}E<{IWmCsU>?*qfS!&r zMg8g8CFNwLa*NQc!)!C@Ia78q=~^;T10#deT}u=klKT4^*cz>%qS+-v*~7zY+6wmG zJ0P&h2afEXl{sVO1yw>o##C)uH7_eM2<~Q9o=>P!!Swi`lC3Yu;brFdGP#iwEvkGCj|2lSz7!O-2D~dEw(&a*ZIiL#AeVn*fdbP(Tm1ap~Zm)>m2((?N8uvpWftl=2 zkO{bec&{?y3eJZi)tKdSn%~XEu^+af(a9PNz$7PGE1`l1HN521@#(c<;39+I>i?FP z{?m}D38F91?UhTj%1r%-U}DnXUBfJOWOjmU6*uV&^m9c>3fMBGnul~!aO_F%50SqqZqy#P>}xJ z^gr~e4X>y(szZL1(V)t5!j6mO=^cNu@c_tX(Qo%M@oZ9K8v$?@XCM-c#&+T4b}GtA z15YO%7Xsh0$viSsK6a#7*Ku|s3{eht-H3&wqtwgfGVa9AA9G@p}Cm;r%o*Kdie@gVYyC~ z=bNCPtiPj?-U(}0g1h!AM0i%vBDhttnYouU8Ef_5R+e_#z~h|e8JvE1wUc)jr&>I) z83b=w<=|&QR0lGEAgY6F1~Pyb7Ae!BHjsg35s-lbxMtLl#NP|oS0|`wg6r!U8iMP) z@4f+nRo;Ks?wN3XH&!y&cOzV1`j^{&!K{pA1^uH&BFoDYD%kkM3;f^3)sqKKeOcyc zZmKm3^g6CKQe0#xqVFQ&`6Xxd7~sAtn`RKUvVtrTW?+@&RkV0f(XF>O(9baD;bmyc zvZU1Q)HLfqC|q1j#)f-3i~Xb%+k_j)L&QvKAL0)VE=DEv33x5RuI-dh@nGlPE_4IE znyBgRy`i_ajh+YJA7SYJU5rBkI4MvGxcwOrn_cjIScOAC4g4wq*O{u#V^j|IFL1^N z+kyzDdmARUQfmO!Hb&iy)Wg=E0~=XNHGj?SM*WvJ{){?+0{_=L0Z}&u++wp^!6IA$ zBrA(@--^y1Y%*Y$3~gz=!-rlS8fyIdrh$RRe}S^92l06=;;TXkj?;;cJ;4 z!B7IIrmz_!3CR-%Km-mnDzE_LBAsT>C6mpV$*L0k?xfLOOVm>j%25UVIJ&*eR4T2I z6w|-d)NHR2xwH6oK<^3=ubmL8%}$L-!NT4n^cySvl{qHqovpT+>l^qEN$sj(s``~z zwrnYEX(6uddasS(W$Mdy9(~onX$N}$RQ0wEg(4F-f9dLCB4g9{r>^NmsH1@g3ES>r zXso^UbEG?BUH$4UMM5(_a{Wta<)oV}U>v@qWGl#r4D!?XbSfcH(g~e16m0tkV_td?rhYw`|hWnC=sz+uC)0K{wBb8pgEwnpQwT0VU`r zI+yU$E`Ki@Ld_noM500Oz|fIb2AN)Jp~$3=h0RDJFlGx>JTCBI(lq3|T5My>N_cSB ziq0OQ8=re_?b__-X3}f7wV7S!&RQ$5rI=I&A^P}OH~nLG&S;XmD(>00t+0nN)k=VfQqM=wDLU_dsE+Vndu`JuD14F4 znw~53a8cK{iQCvn>e|j5t=7nM#ImB!d9m#9{7yAa!WhO^LReb+P~*uuik6bKlPl$A zG(q>@^Q0=JHgKs1>)686{WM(oWxQixH^U3VCY=pSP42@K`fSzfuW#Jw@9ILgLvH8w zDB3^c!{HhtM7`UlkGp`KN!|4REWIAB045)i+HH~siAi^;UY8|k zujzwYRnDIr(C)+y-#1|ncQ=J zMhNnEw==o)G}Z@mx?}&CQI=S2k{1pZG5O&5V&W`yQcdASrQ?+qq-5gXm6(V!k91AE zi)M_Co$OQqAeLiA=Z!0~<#Dm)&mBr9znho&F5#lyjSyFi)81iXqUo%bo~FOhFQRL7 z#wwjrUma3qR_av7x&wA?iN>vsQU4cb?*ZRdd4-MVz1P}%Z%eYQZON8wdG965dv7~? z?+w`rApsJSutz8fWkVpOK-eQ}%3fua6`(DJmX<;bG`jhpb2Ti}_WS?7FF{_h`T4%% zjORS(IqE(bc6T@Ejl|gnzn!HIVc`@Tsy&c>q$<_$`y^{K2sVJrg|GroK2TZH2ZiOS zu&@L#`52kEf?S0|a>;cPS*@X_(bjKktWq(Z-Q?W<_~)PX_t)ANtc!>ZypnU5ISoqj4@{@T}P6wKLNCzDACO)2tlzBN}+ zx_W%+;AQ7dI)HOv>0Y?K_r(`GnQLpAKNzG6h~WUMZ#HX+f`o!RDOVXNM4~KJ7&SWi!ix$Za?%y)O3H?Y33IN9`5UzDh4O_; zPIZ$>6VCg0v&QX^Nnx^~+aqHxA{&@DT2Se*?(E~RYEwfA^I07o;QL`Pi6MNdg9gI2 z|KIo@zdu#Ysr%1Xnz>^zUdj{3yjp;#g<}i{cn(bZN+7SEmh^>3M(T-*`OCu(Q$M8J zYqZQakTR#wLSgVMdlY0)wsHAX%wdpHP9$(8XP>0+2LMOJ1{4X+l@?U`s!OLTcnH#o z8XHTb5;e3l&Xn#pQ~WjkAV4VUq5@`?+0WZrDU-1i-Yh$>Mi9VD1nefHY=O6o{u1I=R~?VKI}$0q8z^FMX8uCsQOV1S=^LZU)hN zI?f7kB_JeFabl$w{zsJkJt+XWGpM9sVQ$Vac>%^KYMa6^ZN*Uq`sweLnPI?ErM$3A zKfuXtso<)0f=IQQ5xo2EzI{F@qrAIiOF#4brhcZ0k}-oerwH_!lPYIK;xpD%YD3U$ zNQ|6?w`>mz^m@K?#ihhK&0F3HEmh61`wA$)CS*WxW-Rs;B~CZEKTh)WX2fDsCCPN_ z#x#Nlhdl(4mANwm1-g7vlOIsmDBKRFqZ4K^_Hpbtbtz4pe%eSB)g^l`yBr>b*KqKn zO-zIun8hp{uO$1Kb!4?hS>wI>m5tD)Dp>W{1@^NuivM^AR5^L~{JENW@Y!e2Jr`Hw z4VyjIU@)1ZtrDHJ&1|%Egw^&=i`Lw8cZ)CYf}B#JkbBLrrmWfu zVzdHZH)-iK6a^*y;=J&EBe~aY;s76J)&4fXp5NI`HO3$P?&X&^ZE|*YQokGY`Mavs ze3MCR=$aE@u4KN$k(nG7j?CopUNHE_daOJcV&q<_@#Xe*S_-Y*Al)gw;;mY^FZ|*M ze%syF53{U^>2JQ$1LL(~Y>o^;}c7Vnn=3(0>> zA1@YrOrAM#6H}RbHW48kQy%{M#<1Kg_FVbadF#iHZgNQS6uyh@T_m$>%QbFY zrK_97U!X74TRTi4C zdEzX!CJWkfaAX|Yhi(CitV0Tfodyx}IK?aW%q_^0@$-h62b!ABX==J*&6O<7jq#;u!*$xgkY3Y<&bHSsrf5>;^+29;DrEy|!bTvu056_|7eM}ea#;&l9&Dg^Hce1M<(9<6Pbg{4$LqnOPl>D$uL~P+f>lcS)YL*vJ1Jix z%9KZ*7-YWc&7%zQKju>7@ter6`=u5O$m^L5%!{qcY{(GJn|j1@dXSPb^0(jKz1!c_ z<>@C~5W8BLkLl0=(0L3x7#(fWnp@f_y=%m7%o!syMAkNw)YuW3w%2zMtF#42U6he-HFKVL%et=Und!`SwqTkdtsf^wgqoavhzkCJY6 zy`wOv!AfQaY;`)fp@kSYf!x+Qy~HL2>ts3_f2M<$rd9_Qx6Nz^Ya{c6eyW(=@;gA@ z9rdtz0P11!)X!$5bqR}#u*;OF8ZW&dnYnWcGtcxd&zbK#KFU^JoiG5Dz*_p$s@L@NcKD~c`0ko@`Mn<$v*%K>D1vYu{($Skt{j-B0 zq?12q(0Ut76r5nXDQ^5{D`J_{>GZt4$bW|4Efeq%LPV3#55i zRZB?V!RUb?jpO2B%5fs0gosF?!y$I(oj!f>#brQ!Ie-wEimZpWRswy6`Q-Ic=F>s) zaCz;mCweF;uX5YD%bp+L>RkmUkt9o;E0N}zBRysIFS9)F&;+>e1|F>zNDKq!TvLW| z@^vuhG`7Xa3T7D$jC+8-p+OFztJEu{g;GUTZ1Y4R@p!~0Zmg7$rgN@i?r1XSDv&rM zhSqGqm}|C>as_j(RBMEli2)z+P1+0DO=9jC@+YVIeDLd?w5FiK+T6gDR>OUk)=7K;3-;AlP|fj&|2!(wYU)73 zSZECkWz3Jc;|mHcb$iN$&K~kie3vMfD^m$t zE^!_At$+L8eZcWCi=&?q=iPJC@H@JvJCh{{G3%Hz(?7fc$!#S-ox-s=7`L$6kI>tZ zK>T!R77SKPuwIwB<)jD2Iuv=Uw%726?v9eK0m7B*Ee@4LN{Jm(uFh@uRODHef>njt zHHsodwXZ99$9C}M!W~DLLvwHY$3K|(!w;`qSqx#!V?&Hc075BUh5{8`wBpT253i}I ziOEd-hIVUo=keFRh~{fcbs+KjciD@~8?%tgI7rMZuehQW##)=w&y1UV3}W6?7LV96 zBFpuV^7e!DB3rj~C(k)NU6Qes#?(_R?W6zLp7b;WrsvDA_Trun2A5_T8@_zls2ChNed)3a_CgzlH|2=agR>A!HE)9Vp zym*K_I~2E4!!0c>AZ4hw3#<5AgBN;wTcLfvwH@>pOp7ia)I-~xI6pe8s<2|bRxZs` zXxdjq!Q|Bfo#Hjx03J=r!o^4cNpN+*8L+4aJX7L;2h$8S?DR_<23FOJjr{RhF@(jm z$PG`cWr-r_+os+3d!izn&s=Zx+CFR0yLc^GD&vx8M5(LLCi9Wpj|5JPCK z&tz$7E4Dg^`d}LBzzAuA>`DjDFnf4q#haqLe(V6~lwbD|Jv7N|v7w+AVTT=Yd9-M- zG=5}&JTMS%fW^U%)>mm1FkUjm+&(})VODov-Pm}bvGHJ!NUq2OES0Y?aRd*wIalqf7ue;s+m^IuPpl~y znsh7~h%vnK%C>EJot^J?k>kBBUCbDW;&+nY!0SC`x!D2CR7F5RM09hgZs+n`b&=dM zb3Mr)ZDA*bnub?Z^3#W2Fk>l;graUJsQRj>@t7qa!?f}P%$kogF;6KJ`;B4X)IhPHC459H z11ngh7>oUdQ`p~))u-B+aq=y*%#PV_Vt;vp1<`2f0|WokiDmiuAY5D3U{r(6PV!{b-6s%H&*O&zfO+)WX~voYUF{b3smi|9#ECz(*769KNR@ zPpDEue`CIiqYvfra{Ra+6?)QAnYUtHga#=VSda5=jiVwnsjs}Rg((BzsNG`2;M^yL z;Y_?YAFFJx_>9KYkovqx>8RGL3jCio=>i^w)CHZ9`OQ~d)xo?5-d_((@d(`q2LsU~ z3&3I#$Z%U(O&Y9C!y}`EN1K3QV8R_@=98)?LE1X?z=_NUtOi&XP9_F`)&iD-MVcrj z%+DB@R?cX#l=ji6ePlr)l3`mfB)Um!-<%?mOBNc9 zk#d#1H2>BQHgllOX2Yx3IOCU(a%TQ2iNM}(C>kGZjC0-F2 z2U$VGKq%KM_ritABdQK!jLaLf@nJTxcT0mIFxF)e=ZFl^u3Xx({EBfscH5~tw~h6+ z)67NG0=2eGt<#jB`LXSL=F8XL0^?x^EctmFo2XT|RGM6fovVqhx%$DK+?;>aCJ1Fj)*KC{^#$(uW8z*=hQn>~-%pjNN$Sh25{ zs}skz&TW#v_ZagPO4BnXCIB6Wm4y)a;(1>}=%fO=&0gnoqYXhvT81^w0Kos5p^4%*z<#Th=EwRT3A?egI;%UMa zOVwmbQaBub9Zn{!(*Ib=siT>>lGJB2_1m90kCv(Uo9|u8>_A3laaGxtbC-E4+)FlX zt1y)nDf`rs5(6{gv(#3o^Hk-v7LU26T;)}j*0h97k~g6)N+jKa3E33k%3IK+aqNzfO$i2M31t5?j-#%jgm=H zxZb(2)+uS9l℘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�X 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%0ANoA zL*{ZmTM))mkr(8Z;rQjU$=Fa&CzBaj_a_(Q<)%H%NHU~?egJ%(OQp;92J z5qot>onHxfM=ewcU&>aNrXBVSf+a;W)y&A7N#ns6Pa(qh=N-#C4F>|Y7HbcjlmIh9 z8%z8%-kt2$)1?Efa@Uljhsi~f&U!;eN)yLhV0*m5#d=a4ZQn+T}t2~_A0HHlin^*7(A z=&AbGYXIE;Y%ALMwp7m)kriASr{-Q50_HB{%9x=FwXDc_Pt%Gv9dxqD%lpu1RkDW2 z&s_RO)l2o%GtFrIyAmT)z=2E2>ZWDwI!TE@R^Ibnn4P{W>x56_EzAyDqQ&@vC=2!pi#Lvar>}O)%F}FbQ6_8Ik+d(G`kQ&_&qX_R$e}fyTQ3RD!&-%y5uQkm%FeoT* zZmE(&RiWyaOHQvUV9n64X(qLLUTWS~qwpVfgi$s5gorUZk{%e8Fv=&NWf(-_DyVQY z@syl&1MyR!UteBW*j-TI{qS)7>Tj>~`lL`Rk!Ttc&7z(SfF)J2&9jM5pE>;)`a}G( zBg4bb#bPX_4XiR~a`a>z4uR)~Hy}wq13Wu$*`Wj zXqKE>2wHK%8*x$!1FG@QImkJ9ZeuviMWZnA#Cz>yugzns_!H0Gv%i2k?z#Ntdxv-` zIeYNlTdxc+nTVXT8LU>6xF;nspD%SE`6~tEy5?JYmE? z%wRP%Fm0(N?S7H8OvHEB4o3a?bwTKqG?@j0(#rPIr<9%h!vYwlP_#aMc~hbhjW+Fv zmh|URY@Khs+rkC5eb*`=X0pN2c;$lBxEfXg(>wr@5{m$x2Ehjd@@`YLG6?iCr{E&4 zuIb_$PR%75Ba>&IK_5^y^Z}499Z%2uW>{t=$JwTt;fMcm7$6!)C!elGPsyb*|A}XQ zy^N{k&3pN$hYG2iXU6Z^!cr)CYfhP=E)ylb>Hb?~<+h57B=sO6)fp06qXw{tb%W4z z>XQp9m-Zx>`Hc(f-8^ZDm~D^sm-j0gRu}OhptFsu>fjd3Abfv{Q41h>Osnk%h6D^p z!!cN14ZWK*gDm{c^wDLq;FyOT(1|m3o6sRh4`rWLzZn^qW||P78jyqOpsNNQ^EOsN zd5>4MYE+NrP}iXbnY6l=I#2zXGzjlN#7$P}dHiA8UE~OH~1bb$>>h{LaRXx7O11RkEEuU)*m}difr6D$}!w8KWTy>(? z55#(wy|+8y_7!a_8VVZ5Lp-rpAxf_4CyG7NVvk1^R{DHp15RIejYi<$DdVl^cfX@v z<(Xsi%+=Z+6jp>ns%mvK3Nz?1e(&eBqlz1@l>iCzW#j;d7_`rjjUDMI2AAOo8m32N z)q*UH-owS4Mw0cN`kzd*vc~UBkX%=2R0%Pjy2%{FzIFFL~bg&aZ_?rZ9BU|omp zFP^rM4XfBwVO1DhXZmE&YSEdEs!(CVSR+eGDp7${94gpw^c2i5ZmI28WJnU2BjeL*3R+3|{-mNW?) z&_8eXIZF zEsRKqd()9_u2tH8aP>e}>E1i$axIeaTXxJ#m}<*qjgm+W^(y8tav=_f33Sd}0K;-d zg!Tf5SZT4S5K;0MQp{`}3+i@s$;`|?mY$l~=~&dpwF?_&aqs&0C6PF2S#hA1Gzsc= z&ey#a)kURoaWvKA+%SU;L$RX$6~ukNdqpA+nO7h0Cyj#kg9|jD#!PjxN?8pNH1%A) zu^8GR^Os(}-86Rn2Dh|8ohJnGJL*R5mfk;5m2uR*yeLn+9Tuf7Sl|yO>~JL zM>SLEU%dL*W5BrdAXFqEaHSI&plRqNm+2uslqi*n00E;7V>|`5wVj3Mu9wuYM{D``bXuyO6qCiRv4qRbn=hZ0zRLOq+UEDQNfTwr3&ok501g`9fzAK4 zL}Ck&aR4BF4VxzQ(}lYKVpIOJ)S+LZPblNkAAb0Ox(hcC9IIA0_LcJN;*#Emed_uy zAot}LbS5>97Ir_2YUp+>0eKRoW^?ZO^cArLKhf9MLao}VjISIs!vGX* z$3(Dfyi+eIkXpxAM1ZR8QBb=gbojs9hW|@gWb{7#m<}4(s4&kKc0e&I2DgS|NE*Ex zVcHSPc$p-8e_=f;gT03J%^EG7GyLx~;eQqsbPG-jZUu6ty_l-zr-Oq7xcw*lxCTZH z#u1A6=2_|#(VEBmwW(GohJJ+?0geXiJDVt@??4bND-N~*GjaW{d0NnS<*+}IhF<5! zVR%opuY$Pu(^p{=&8v?0b3j`5FVy}nZmN}6NoxpS?Z@Ti(L27Tp8CDVGuP{Vv8*gg zUFk0~)akvlqLK=O-d`dHXP=Zu82bNicm59{VL|ME9x}d75EtOSV@&Nx`@>E+`WaP3 z=iOnwVWDZy2-l^c}19Sx0-ryrd~MACDJ zM+bwEIUQ=A$s{z5ZcMx)fAsrCz$kMnKBUf4v(OFHw?p8J;lk4|z-r>)1iLte;Jebl zM)<F4juuH)+TSW5SeRF_*3P;ROF%)noavCXAbisXKfnlnrbRaa!(vz5R)DvWE zo!p7`jdG09S;v>N^ul@j`+e$FhDE2Bh|Sz}w=H*2_YzN~%ZYjE>n+5x^kG!oeS6c6 z1>KcO@Vcb_`hi6?%?qmpBA-Iuv3ra#Q9GNzXle%!w-iR8JxEhm;@NO`#$gQ%#K^>G zQzD<^(qLuPb10O1hVHPTCx%oq>DDH^+7QL!1AC+cvh*e#vy`-zHdvdg<*m}n6cOxF zw?bV^&o4}tCrkQM@NA;*pR=UivEwUoE9jCd`-??G`Z+gm;;EJFi7OW*)x^`o+jQ=p zlz{_fEXVw{1@2j64zF`!o=y{6;sj;@mThc{t8~fY(&D0}D^MHtR^7hKwk|E^n~dDT ziKT1TMLX8rzs>-Di%36X=eY%N-%f}}GEei`r>6`iV}(|)n4KSW%wD;M8f8pOouI2+IXaeuT^nck8Uj?{@8hU!-iR{T6V|y}bsB{)0AaQDhf~n$g+X-~f{VGnF|~6yI1qGq%LU|X5Gzg1UBST; zEiM_j;02vu3`kFc#e%XX&Y)mrmhmxi7Oj#vPCTBjA#NXmz(*kw8s(C5tAJ-HTtiJtUo;&(8-V$JaI?}wG~HRBL9aeL?brO);Av@qpHCaJ|~6(ZzZvAYU-qpB`h zSGaT}f9t&)m{K`+<+-KLrBWJhSC^CyX$WZ{@QE;3+(hH8?MRDYT zzRAGV)^?2eD$2K&nA^M2-EF0oNU;#u>80U@g42?QO|u<*U|KNs&xcd&qE9g<3(lz% zj2y`9I97r`QYpEz--W%wA;!kZJ!sDa*IYj9*kZOpIQ#N`pJu&&{^?bqS~i_uYL%@L z>iKhcs^^J3Dv!uZpCukj*CRvE1N9r{_tanoBM&C~=he3_i1EcfxwLinEMi3Ds8);g zN$S16z7st?t<);`ZFNA&{PIO!yd8K1rh1m}IixWRfMfV~TUE`NKY7jT=vk_qfu5rx zl!>-7v^^wp7EcC_yY?<}~u0MQ$5eBP{Zjh>6>K?&<>u<9(giAKK!VIE7^^ zx9&+c_MO-Yy_E)`=g>V9sI=!uKQt2myzbf)SH}1-+1R)1;N|5%;}-h;g}kJyvaVbP zcdCIqeSz+J&R{aI=En_s)8~iQg4iTY-y+E0zo!GrWGI*T+!XJ5O5 z0dqd*9q9L{RvQ-Gyb5|p*qiTKX#-UN0BM-0hZtNjUtp3;A|@o{>9P2+NG^wXewZmM z>Zs<}#nC#u2t9K*^)2QON7C+}wQil$9+e4z0a9F2-Myf(c|64Bf|3`fwu}*ESC@`E zvbI_z0uCP}FNFzuOg1ODuzywm)thG7B}D>L*PS z<15Ao5?z?=nNCaMGaH0deolw}JD&*+;k=y**RIeqnWWNl)dMfgVe5r6A3uMoi~4eQ z`CZ#sF#UARsWGB-gt}}{le9J|Qt}k_9b?(#VIpasvjswBCE2ijp<~;)W%cbFSu!Pe z<;mIT`$lS2D`96kn%50gD`X|$@3zmb7?ii{^5e5rxRUxc^}^?0p;JW)z$B?-=(g@? zQBz0^)n1M;^E7`)Qf%d=E?Ml{HN(E{u60=5t~fpa zOX7+V$~AN}mZ~Gh*GeR8p2flyG0FmRX=(BPs8B5vFoX_1Qz%tD+3GE*DH8x&ue74q zf0?9l`+O(gpyil{7E?SJbq@V%kj=+B;YqMbncSs?ZZE*O><$>2J(UZ@t|tRr11v1l zJ$np4O#YZ!BwH!)erHheITe=?t!ZmS?1<^3;tEkDeFvj$@+a)@p;Mhi%k>A#iC+v< zzPc6rQ`??;dw^l~#%j!R7#mP1CH18a|43WRPCfk->Ytd9KZ)VrgvY*oR}BP=WZfmJ z3&$s%o9u!Ab@&5kGUlQBeVuj5yDP-aVs?@Omh^%Gr3i|NaXJejs9jw*sj2wMz zu0Dx_&uRb%(p`=CWQ5^?Gc>vHX{pKTnM#18tgC8?lwUuFarnm z0}LWKH#{tetLuA9pb3vx(wm|-##D(;pbZohv{n=O(y~aoQR)=ho2%8-R(`RkkQ3uO z-1$P{udN<;gI6RhmCCAzLRUyy_AG{>J6eu)bR~7LtGoNL^eJLIeGt%Hsz0(P zZw%PcRsv`(+aHI8gKo|ND;o;IQT;dFQz)CdpjC5@F>@LSg=x2-vIQCmEE%BQpneLB zTUdk9G2%t;5g2I&N>UHQcq{6oRsG)mV~{`?-0?%d(#|Ofmhtf%dSRi2p(@TN^UFLA zG5|d3e}&1g=ZW*_UUXW@4~dH0QelBu=5lZ+3vIKP`dJE|cj>J3N|X=7c+u>QHAXHW zfL=6dH}GlA!!=xV#Vn4wV(#_JSvtYo{euC`D)W*v3&m#6!2U%YdWJGUeG)>CNvoEZ ziEP~b3F?h2j6-oO^N4BVy5K-_e+6X!(L>n+`xH;cVbG^ zr*$BD3gV0P*zCC(1(Waih-cC<^vQ_YBX5)yP(SH_1aA-9Y8c>&&>syp{0W#&1#i_&ivhp-r-Bq} zudl2_9-Xy9rPbCl_0aibRFzZhWPZPiXBvW>T{NT+n}*y5ZDmYtQOB#i^5Suu(KJk) zYEKr_2SmVsC$AX@91=HOvdj%#R~*~KDkzZa!9T~-*E1x;m{S~g>|?fF456QunI44^ zIKgb58ZSuZcwW${tpfW2M7ue=I#sy%|GbW9yZ`=`D+_9CO}OtsiwS2?N2f%ktSN=r zwAL7~{_SjMD7}M?EUlor#U&;EmX>-=P@QN=-*E2Sf(6dXN-a)vYtcP0;VjewQzqg? zgp6wm^0?%NMuxnkyB5fxWA#oktISkiqx8wElPLH_ax4i1FCVvk+*L-cwC3|+;18XX zhWQ$?j;&(}6=X+c;kNmAgcUxIyb>rSsc$a6$Oad&Fb0S{9CI87Y15 zZO6*-$Ue`u!;cN3w2HWM#3sMwxx=%}3cp0tyW@eAmA0<_UT0H&|8So@y#M+e>IF@w zP9BPa|5XRS{w<6?I6$}$)kSmfCvjQ^>dKj93j>=?=n%laGcI3bosR$XDsk&P>xOeL zu4Vv3^0Ft7&rd(YNK8Jmx_sa#=Z-|{Qos0elf9*0JE%z{4QS~s+xnYdS&u#T)lXkL zKYbsztJ|tZ9=_|^cvI7B-|o!sZPg9v8(S>I>w>-&Ne540g1%dAXvX4>Mb(fyEmouq zl@&TX1VU3X-e;!1mX7Y|C>08fCLYILw|Gm(&MKwX?^D-XlJzFn{AGTPZ^4Ka1jPX& z^BeKc;99&@Ux-W0gx=+PQ>^19>u zB5;eiX8SOGi}-X~VV5y-A{%u6FMCL2?hyQ>3nOb*R!|F33H2s|!Rk?d%Ow-=`}b|A z=l+lvEa(Q-rL%&dKa-Jk}$7f%Lu-Y6}6mi!{ARQm2qWlXCEp-9Wd8@*%)FV zCSM|8vRN?UKu)sF#d=G=g8k>Ap*1*vLY1DS#P{ROyQm|tR-7;24SVg>*0f(1^qzw^}?gh$SwfdPx#WW5JY+U*?P2` z`ol1sTd7)A?d;qWuY*rzGWW*fU@|ZCJYfx7(F@a7pc#l(GJ`$4_ z2}*CDJVRX@K5)YgNoM1j(??@)!&VU4C%~R&Kz0O<(S17Yp5SH z9WbT{=yQ;#i|;EGNoQ>bMb>_$>7<{+t0 z!P1nuIrc(3Sr$;HKfu#qc=3Y%-X?9GI@R6(K4>#u!;YCei==0DEr*(vSd1!mKdCiY z#Ehy|m0iyTR1@D|r=B0{nYdzp??OVE-fWer;t>dT>w6s9$_NpK6{<8fq!PwPV?#4c zT_niosNX*b8ctYrjygwO8#-{qb@i;q)2ENbvMGWWL91ajm;%yZzYSMDT1ZhXwMF9vW>FjD^sWjX~y|D|E>LCB2 zTMvUO{C}*y2Xx!z^*)~WBWv%yw=H=OdC0P5*_Ld}wk%uImUs4^kdTl-NXTH65g-s& z7=bXtXxW>#%tE0B+EQAe-ws+fUCV6+1`*^~wcj=a$&l8-7F+h)X4uAGnq z2VLMqn9`X!OgN{Uw-uZ#*3jRbASpBYgpsC6HealiDBMOvyqw6y)e*Tw!4t`ad=~xA zq_W;;<5?^so42yuZ))|(+NGYBc=`G>1De!bVc6pXmk>f1+`PVB(?Yv633>F(`ts4? z9<5K)mCBSehndM8<~^gM3N7dEe_cJS(5s5Tnnu;21gltqIDY8ETYjVsoUyJ9dtD_< zHq!SstLy7jo$AIW`u~)T0c*5wk&8-TM0<|@+haauwWQ(>Ot?MpntLn>Tkk-)kZ`ZQ z>H;sk-a2TXKFjo+#gLauAtyz^gl$P0UtR zl(6+C9jCNXb{xkyZyzUIebZE*s7%!}TBl*}38<>e#U0|ZDrz?-EL$w$>~W^kxrFsD zz^fWj<+1E7`IlMLcjTtaT7N_D*TGKoF1|#>N{qo)l3LtY*SzExFFta;U*Q&dFTL}z zAKR+6-g;$&su96A+SmO89x~Fvxf#U)*rl1XtYdiIc};Rq=FT1v(`_z{MC4r_at0zZ znf+^z_-aZ#P2V-XVnpnUbgdv85DRa|?c?PRp#^U_?j5F9zww|&5lv*JW zyyc5luB>~U7U(7V?hpjK*n~^hTuc6wye^j`|Mo6w}q7aa~mhi*M&1Q;%YbAU&gyDp&arZD~IiSf zyOkq9p^t*!!VDDUPO3@aEj(jjbMjb-C5urMUk*zFC}=}+1V)R*MyX{{&1v;%`UG#rf5F;nLHG7C@XOq~ zNBmxW?TU=vryE|{JSs3)oho64Tmg5Lr9Dc2^88xjDHH0{oYoHAmOqltpC|XZ+b_7_ zEKiMR_r(`qq#C>X#tVJ2Vo}}MhmO8Y-|WBe(sP>l20f>4%g!^r&&`D%ouusx`jMb> zc(^!PGCoH22*TH1bABVRHg$V0KLqEBD%n>UXv}4Hfg?CZ-gF=bEf}aY(}RZ-W#SxY z#`8jrd642H6_6tPi5B-o6ZJ&H?JH3dzx>)zS8=>o)2Hqp+U}{C%)Usf>DP!95STCu zO+lMvct^K@&NjJ|Lm^G8rgJdilG_0`kK^rM%yJJ}3k#rZV6IpL*vUFQ43GeW3u# zBgNbi6hH_2q(AwIZ;blY*w{-r;&UDq%05A!8T6fdaj;0v@7S}2{@LUt-OISrNoDe8 zQRM6?VEqzXdIVqj-1wl{)g42LQkm7LVUGi-vPsDcuvqJ#!}OkE)~+6v(J}x~Ie30|ijT(m&8=Z9MnND?{w?b=MuhIOBvk^8}$ng0(>Ik>HOyA5IrOQd9;ZeSzOm=%%#G0Qj*pT&=|_T~6viMyix6T15kU z7YQA*^j7$R7I;fy(N2|L6&M(z7A#y?ir@7Z`2oG9guFjN!%94U(}mYu+s*Dha^q#K z`_?#+d|gR2jKeJKv#4FlW1_S zV{ZJcKNmccdBl^i(C55w6o2CvRCmloH|`tZ6mq;{UXF)GJ_QM#!JCQ#Xe|Ehv$uh) z=C-UF0{z{}4T2YH$|mBlcVK9YP@jB4rXG68_EmIc|Hc6@fa8b-B7;g^Yak-NzBJcj zQeaO*ME+2D)|4x~}K}Z{3;|L&rc1cV+MbS7OvzTs`xXKir%8JrsL2*f0xw7BrZ(HSORMJywCF5>jY(hrD?hmS`^_VaiP3mAE^3{2J=l zbCV{+m^~b_boF&vqt@O?FD8u{)`bsv?S62U7=)h)1;_Oa88HOyH@GLAfG{{vE9AC( zAd6l=yR(h9*=A7=uoSM!$?No4Vum_3Bhzd9JZNLkArNxUj~J?*oH)l?ML(Ms*eXoo za;d>>_;I&w(J4NmQ_-?%Dr_2A<3l-B%eqlp_Cauae_i5t#iJdnpniPKb24eOpl|m= z$hoO4LH>bBzTW0gNvf0zn@LTXXt}FW1pOSZ8p&?~={MJ{UsdiXTeB&qXxOs0RAA(~ zmaZXxt?S&gu|!!VwJzIE8Ws(L6x1%ZOmFSjf{@u93U^t0N*6C8*CQeF!Gm5X_$!Wn zdHV?@51&yM-3)hSZg%Qsx)$G(p9+x)Zw{8Zi13*6hv%n(rPjk{o0U&yT-5Q~KL{hxk% z(@kaIEL_^K|FVNY4pfsDc*!;h+}vmKylcg=>{0rWPD?jn*#TsI$j11m!^2t1T?Mp= z7+4V&5s1K(_VL)wF?t6?ASZAhS3!Q}fwoEyF&TN-6eP3djF}*!Feuz-wi{vwW5x_- zFC1?1MhYkoR#=S%%95D`Yib0EJ2WGi=sgSEa*2_lZ>e-&-R7ErwLko@!2Uy6i`5pb zR1@v1d!u&@h~%<*7cBPHyE$U|j|1ZJbT8K`=^Q8)(i})$V1diV@Is2%8iCk02&P}q zABI`>kE9Y0Kd?T*w@B7*75t&WIT-0sH>(5v1FVSOP$l&Wt&VIeW@!e?Osz#JrbdRc zVpcHwlF=dLvt<>y`Wx0oz16bwjE$8dr=Vo%h7Gk-4d-745k7qQx{H15VZei5YA3(Q z{zqZ7kazJVWAWc2EfaQ=(EsRTP1fGNZd0cvJP-l$3?bh`dBlr%%>jzANZz&)XRR*C zAz$bK17VVzmYU(f0S9Q9MThgPMxiu2O@$=OObe~xQGq$(JCf^m%9nlqg7@D0 z=e~XP1!OzD|L-Z8UejI6lJhi`4%oW4MkQ~s#LKuQzN*YAJU>R*LWxkQlS#_;Fg~TS z@uYl?fL}x(O0hNNVK2`nsq;JKA0z}iVN9gU4j}ma3K`Fy9l+d5V;eeoAA1?>=?CnY zECudL%Nc`UV2AmQVG>IIeduoq`ZW3#ryDk3sOpr2BOtG{t7?`yVU?Pyu~~Dsfj6|Q zStP+ts6<%>!Y2W@YP5HE`_5CBxa8#`Yih~L;g(&MHD|5Bj|ZO!0@lhqj>8iPnnK+n z(;z&Q9&`P^%P$MEbM!WLrG5lmDc4L_ssb1q^f~;FuGCzyAp%$G#wE@j$6ndWG?$(| zyf*tNHkVFspL*;^&|HeV^4Z?vSifP~(A{h9L5T-^T}k~c+f14!CWuKsu{~NL0%^E_ zV{c!vJ+>vFX=rND_c;3cZLY;@JjR-(87sMObo9ndCQ7e`A=$g&1-pTnKRPFx6{c~& zS1iN4n42I%yp4MN7Mazo<_vT7K(a1m_PfHyX|J&NOqkG-0%gtr+*6iG_Gp^bU5R0m zAs;NHUz>P(WaI$Z1HMc6RhFx#yO}_>6>FrQ((hr}AcnHxW@r$ZLcLwqAxL*&igWx< z>iF^Ftk$fV93G}W%s^1C1H0izSx)GZaT&f*2ji4D{y)I@)#gDXtgo6wf#smljDO4A zU4AH@EzB2U*q*7lb6ruFtC;yefIMLi9PjxXO6I?PWDRgDvlnPK{K9yY{&ZtMndEl6<0~bU#k<`jr z%2EeMV^DM471I0R$?t%rgt}#uMXKtNFf5zzh`6P+9(f&Mi)Y=GvBNOF=5d*o}nPh(V^CfCVR8!L^#{ zV9ldm=apr-&4iHRL81le4t0S=b9I3^pJTw6U|-Of(|gV4yOY#2l$3PQj}!MOp^5}N zu}!V=+bFTnQZEKUHiye1u#-^T+UrIqn1*zHT41&E%Nm<1!3CCjSSukFe+T47}3l`XK+~Mg-+LpDvtCyQLSlC??_M9;Z*DAiTlmA&0 zbl1AntC36+yq z*-$M2F$@d3$!uM11=m?s?c~-r>uQ-*AB6tul&&uN{UMIpW##B~u&Y~MMDM~qDPO{b zo*=ko7|NRHsy5!AYHF5b^bPvdl4_~hq=HVR4w5LVEiE_7Ir3^bPi1;5`?*!2@YL{? ztU!-h?SOpo8ECOW(G;M_ossL#|&gy}bXnoxch*lM*$Yf#A1tD-ew~Z%se6?Oqam+ zkvB6%%JN7nz{2j3KKm9LdaB40`ml*yOE0}?bo5Tv#m6^Mo5$@NZhreBwnDJ)=a(;| ztNNyY`oMKY-;uCVB2twzIx$^1x`)} zO}VEST2BU>4RENpg;B7L<~w?J~)u%|C%4Yp|;^`YJ~Ms7c}y%ZJ*w?FmC?*AGc3A4?dK7M`7HmInS zSln7z#0~QZT$>p_#FSKPpk9W;yTvs%T^hu?`v%0@?}NAkt}BQu=&PD8y!P6jqP`n% zJlF!s!2Z>(AQ+tMW{)g*&Rc{@!-(SWA4Jmd#l;1sUngn`MDa|Vy9njcXAm#_0&aC6 z65wc_nV9IO+`{bd=u6NSkqDuoB#P{whUAz$4LE<=R~#Se(gc9>j}=R8W;J^Z053Gq zmBZWOXU51=$A8Ld&+ZqL1V-AaKIEaEh9Ar)s}@(F#_6GUYb4rh>9;)F>1- zgPI)c)<;IFVVF-)HQaaDlwMLRFlcyni;`xL1vh7Z_Sa12A+m_Rp4>Y^5x!O~wyI=) z8xaXC4I-h0Bb0M@T>E70ut28~CPf;}3n|M$4_m9_b#`d6!TEo!j^uE0s5p}$S5w@l z=#L(123%Kh^z);C$SHEbEesVov`OpVw9p1kc)mWi$WuE#Xy6&lBHQ#PUuXJ;}*<7jCz53aAagZ&O3R?lXQ@fpU@r6BV4uH z#xt1(7N?wjWJp!UPw-vYJDF~V9AyfTonu0$EOshf&*swPV5h3hIJvHY(Q!@l4ZtOW z-Q+QH^)NXvlYMNM`u9)$hi<&4gQrokV0HAl&7{(%YlmGq!Aqb~BYKqn@W+06g}CO2 zUtUK)8Z@>;M2Wg4#!DLZ0*S=UDe^=N4}==t!bWd>-p43B)A59Zz+`|=6KQrx70k_I z?%&sw3EV$Wwl83U-~v3v6BwX5`FIxNk)vb>y|0Yw%|84(iPJySj*e>50*yvE0=D8r zGE68g5KYozovH_DA(6XB2FsZw8lEpUO~3vCN<8VyttwA*H71)(QYM!HOHI8MUy|;NQd0WhaQWo0%`rT&&&2PW@=B#b zicrdGIg4U(L{p2Xl;vsqtub8H8HXAEbwlJ6%*;B|PvEwe?0EJ3o=|SS+5TNUw6%!#P^N zdI%cGCkw69;0pZzOIZD`^UQ6L%16@bWy7#@C$;3!Z;hlkcN+%BYB{jcyLxQkdh^IK zk5I4W)hz+t@TV9_|D4Ih31Cd!sM_yigRZHrR{G{RN60Z6IYOI&uvh|{9J~>^WtGx= z=!~ZzbPkW8Hso7EXOk98IWTncAavH(E@VQd&^o=Tr8E6V_EXlPbo%tFWmClhlYwLD z>33{>SEXRF6qPa-OV@yrvY1I_=s$!jpKxCg>a<5e+P?)+dLgl(AQvJ*HH+y&eeEVQ z;CuEaGl>lWWWJ6m{0dE(x$Ls1sgb%UR(ts*7rYhxt5dzomfm<7A5N}xFzi!hZzUk6 zq@}V(LCvUB`tjV2uFT!&&R(It(iApT+FuQ7O3dsq+fcHs z+fe1;_H%5Ne@V$Snr;tEg6=f}9&5<7?zu4EsNHHc zkG04u^JJFSy>Owsqipd~s()SqNS~*vKV?mMse9>KN?W;najC(*bY)CeyK!}ep<>OZ zSF@kkU9dy~ssd2^!x7^&#q+Er{4O_DW{2a(+3*Ai#5UxMA_iJwBrd@70*YWWf5WU0 zflng8U8DpRJ4H<7$ZP56vpI9X#@izzyGsSzzeH9~33-Gr8>Bk3KmKgdqD0!*)+8U7 zHnh?&QIOXqW|^?st6pvD?sLNS7}7-6vV=uzE}3XD(kpOV#~ktILtw4+fgHh~~|EORGyp<~vvnzJklc%J~{_L%+Zfi*2Swv{4>pgb-L|re&j@zN$#CacFVP=P_ z(+^ZU-sY9yB%DK^GvX6&9@Nj04~4Omc`9w~%*DqnSNJTx@sKaXMGxtId3PghP36_K za+=J|q83pj@%2etE1?O?uWVq~YpUJCCZVhHCn;6njFq@dX?jz$qD5TWGu_75sJMYe zy&f4TS%6Iwd+R_P?Kh6Cehec}=yZ^xNn&dQymOeNR!Axo3JB=bgDIPMSpefs#XB`=S_ z?tC-SpN$@r3EKR(kca3#Gx=hQesZje*$|v2CmCy?zw!Z5-3=<2P<%MN2=*knRFZ0? z(r(sLuRZWUioR(bodLXY`-LM^ULZDij3HF%%nzo5(CA|1 zoH+S}TDrnIu6#gaL>{mTsu4gU6AKGI!t2zf$Z5T_PN?4}`=s-;!OcMU_ z=k0ExkV|AZ;iMpcvYLVceX*gVi}p`dxD3r+>+A2{Zs+h@dM7$S{8<9dMI9sq)adA&-!QTbb? zWweS2Lb07DDOk9i6pJ!LMstpJFSf*1k%iDwTu4VLe)hj(P5*p=uU2q(K6QTO&qt)? zvE9=}N~K_QYq(gLeGE*V-ueRbP}kNBQ)>r!AJw~)gV1?2POkN2m@x&Ipp#n-DwZ@( z|1KWCA{OhX_sQ06l)^l}SQ_3wP8sRV&1)Br^yq~~lR)L`O^#I)^Vg0DMr*pD#~p=$ zcS5#-V$%Uv@`e0c6EeohZb%_PI3XP5URk)7YjutPM<56dY!v( zo#Gfp9b1=2)i6~m^EuBvI>|MQJ5E~~QDv75snX3TJZb19zplD>o5U{I`A7q;V4ZP% zFSTUCdFqkhp2Jp)Zu{4Dbj&yY@STTRL;b(_$65Bipmtgp>@u@>1MZ%ux?ib+AF58% zL>9m0Vrj?sq;;}#k+`O7q;VHZv*OxSR!H88w&coyQQWuH&4b;GwuRQ^S2)BK^76Y* zr*}rnbn#RADuk*k8NX>mZ%AHNRjr9w+uL-mg)3{+waX`*3_6+}W-2JcaGH&=80v&m zW@^X+Tbn12n0_HN3%=J?JfEt{{;B~Tk4{TVjjEz?mO@WzmMKchmBUK6<1=D{rtK?q zEqywUIem$jFtiQ$fAJvXfR7qnNf2MO7$(-#kMd!@DTnV3YL+9D9n6qsm94+Ws5ONn zURCvyQM<}9wV2dhd1VTgc8uh1-n);sfT}$=)CHZ>aL7DZwrCO6H~(!4!Jz$4)|2^) z8V!d^VKfLuv&jXE!Mc!noxtSg7;NUEIJlHr}3j@P(4bjWnNiqsu$lXFzeN zx;<_U$g1iablv)<#u|D_JWEWT|Coyb<0&fTL`2DyyMEIHMxea5C-(opU>6bdvVXJlDqxPuJLKW;w!$bf-Ddcvz84AADJi4!nX{31sl>1!gtDz7Z#BvCS&B8DqsoI zr~gDr9a7wON&o6L{$CqGRS{ITsM{k^hu92SuMv*QU=ouDl8y~+u&+}XSY{&&=$A;b zT;5_|bYc%>X#V_l=EFJAh~7|Cs)W zsj92*WTbZH?r_KuF?aX(<`kwmsT~zjr!Mp0%dI$@2UfnOp`DXKH8^xieesnYWzDN% zD!$Py)J<&#r^xO{`(N(K(o%S{=!25mD1oz0a;C%I3RMkC?`ANG7Vtj+LESX2aG5ec&o{o-M zetWO^^<*;p6Qt^de$Se5C}%ROo&+~sK6JI9c8_oD;Qdn$stNW8S7)(HsW(=v7^1)M z(NBH2BM$$og=!5?UhfgAiaPtv8h;bn^)|TzN!sG^33tdnJx#8|*^2ibVJ6^i%ia#1 z()={kO)w252F2N3kZ2Rom{P)kY9oZRD1c<-E>Br-#)2QfCPeTA$pM)HC@z7!1H?~0 z0nDpDwE3$A&ayM;hDj65|3r(arf?6T^k%~1$xn3lwNp=b8`_!`ee%XOU9+_>toN(C z`sueQfv8BRlkiJx6yth-n^~%ok!mtc@rst8m#H%>iJH2)Z7?>(uUXb)KjrX3sZFr# z#%=Co!Vn%RMeyCSI;)WRtjqV`kb&LIvCDQ$=-;8~7r@U(LjOz9;#oZbjqA~s_sM`< z3T}a1FCARv=j|Th>&PN#6768zCy_RSO>}xrKa0tLmx2?7d%%j9fA(Y;DJF z%&r_34% zp;k{$UV-a9NVQJouiV(k1-WcXz3kAG+@NO!n_5P=^$#kLeM&-=j?jBjMU*D{0evl& zjQ^5I>jj-4khX{;EB*X;>S~q_>%F?<;`%h)W1CV`CX-wAO4b1V@+pIZ?0VRBDYEiq z<<-g^^xwgt0G3JBDuHR|@Lx}nd+uGdh%8DPzK&Ca#hKBPDCjb%@QG)K_wZ@f@C@UO z*4AY}E;R$!kg^M}@PGj0|X; zoEY0q^ivW$h{Qoocu&8sR1o8pWM9RH&i2FbX{V~wFu4Z!3okze4H5tV>jK>UIRGHe z71iMD@hz7Y4P(13gBKxo_Z?CAv0!g+6#Fm+5CFQSp(!n~S|) zua`x@QryA1mO)av=20~qOK$B+PO$R5I8J<;h4C4@hJd`_zw>>y**nNcR*}+2!U6z5 zPE=7&RP;wMb-iZV)MgxCeFBHGcOJ1opT>LlVm$$uH?TN*oJ5`PVa9 zkVm%t{vPHSTkNSc>~6}8kZZmz6WkjPg~{S5sM+7n))kk-iaJFDT4(cxtOmJzz^Jqg z(c;vP9V>6&StYdD1jQS#%%5P+3rY@6O&7E^s~IP#A<%39a>5h*7L@?}EhD*~0rj(} z0KCfa-@@I41kZrbycJf}_f`fFF3Jl21f4{ZDc;nEw&VWgA7o6cE*(b;xm|bPUi0h^ zq&EH~FE;%zWgA&khXrQOuBH(R>!HmASj*s!D1V_ z^}7$QTz7>GA(-FtZcS)A!gio*oIU; znTI~Ln}6I_l1}yM+H^gMv`cE%DT~J0j7Utddi7(gSCcKPRt;x23o0y~J{9yLl-@RZ zwH5>v4cgW=stw?}5XUoM_E}tg$8j9butf%8Ji`)+59TLh!q*=@(83UAw*tK#fv`W@ z1H+Vw?h2{=4VqWpeO(HMHKZ24@K7+W;TJ|WZLUYlR5Oibj93%6;wC}wPBe>1fMWH3 zO{J+A7-pzC29sSA0;8>1DX9b*m`Ow4$Yi#s)AVEHe>6`Z&emYR$ z)8r{mq5R92i|5Q@6$&*m5PWx~E?E*k1<7QzP_y$q3aC(;LI) z-7Ccw{=oWvO;Rptl9ZGxgbsx9)SYLoL4EV0Q=1jp`|$el8td0hnOck!Ywkk{ ze#hn!zF9H==y=aCUuSkG3iMY*;yZO+jlck7&{K=;kttwuA?4P@N|)|2NNQC2%&sIQ zC@QrC16qNOr}p`D_dLXV~n^u>Lhr(Bv$tV0#nBtvUUwIpYbaKq=&ed^tQPb21ShoDP{qfAF0p zfn3|)iNm)aNu?fs+eUy`lJ#4Kzpb+NhTGJ&>bCAMsY)hEm!hmh7#2E9pGDQ-M@dML zT^>rpx3_>b)xTD+Uj3v0{f{mcp zgL^#?n$RTrXG}L07p+;~Euzm!irFs0a5nh9AfGYtREr8R%xNqj1`18)8FS3Mk~j~| z3bTut3kzpBzbQgqCzsOeBUD57B^FgPPVX5xcbu)QpXe`As0AHE<%;_zIb!H9v-y0` z7sH6S%4LJ7t>U`MrCTy`8-Idl&Hf$~O&WHZrv=}ONnD35@m4JvGq&kR7C#C#8o%Sz zG(7*v3O|=JCl)2i6G*m4QOCa|_d=UERioa#?4AfB+NdST0`}e>+b8O7A7Fbj!3rg@AW7Uo6ia zg&B{f%@UmPpkR?o5n*w7)nmQnazouzM2`-1%J!(+-5*dvy`mo&ucklk+qoiUhWDWh zrdJgYywI?&w0u2D;s@uNo`wo}@nTe`eM^OmlGHmv7=-3rTxQ`8RwaI*F(Ey5G8y`W zR8vUOg(2ndk*uA-jNM7@pwqW5)U}^BB`A>sJ1aH%%O;XQ^u)%#ATLhPA7ns#3>)8w z7>2fm;I{$PTLS$yn#;yhJ(@O6S7Njr=G3*E37!F6x?Ud}>wNpc!>)L&*CKKVv~8Us z%SBb1rbbPJrrAgChx2WwpQQvRsnceSg7Q{fp(`&3t1dAd#xd4|tS}q~Zc%Um=JUeX zF0#5go$jevs^J}+Q`HtmaSM+g+YIx+!JC`a&3QysQ+Q(Er|2a=zVE($-F%s}5)@`! zm6ap7tEVRnAGV5J!B%QNx%b|^-2$1c%1*>wwUZ+_*3;8ds&Mei;V+7D z_AAH9+XDMQ*d#Ld4*UcD_6~ysh+SDZjEsrEL4An4DX80A0e>4MwY!Wb2Ut=HaYaL_lu3_~HcFN}tDN){&B*Ptl)@KQtmysr?l!3E1%R zBrD)GD;M$jCrxy0}TxPX&ia+YN&Fv*~FNTi?#Qp5AP8!dMABdz{9TQqrwQt0g5u=fz`w zzcZ|>Q`9wf4;@%*2OlF4KkprEflrGqM*3cH;WzIY0u!ccIx^!0BWuk<$NM7mGED%bM)M zVu`(_l57{*ORF{T(`m~}%)*a2wqi4#$L_O!ZrpoEGzEz)?tdtn_a`qrhMjFM`>2Xqgd?9t4c=+yv^?*9d z_g#|=oV{Zu3^zziPd)ddt{A_fp^_g}G&R>rZp(f1G10=OZt>z#uRLSlnvoHT18MFF zKV0GJyRtXI6)syeS={AXxU78cc)tKfYwpM^D-cJZq8ELFn*e1c^T!Ft#l%RMAqC$U zX3r;f9l0|Y7a5B}(3p=D=G@M!DOdLQr=udjm>e1YJlPx}{e!gmiCC<9)X+cG#MNm9 z^_gJyIMLJZvYHz=E;0p-Q|q4wEFcK)oZ?%>$y0*7bH)WGn@bH9o6>2~koU*vtJBc1 zyqsw0zp+lc^wRf<`rkXv9cQd@A?9=}T>pC*GXjP4RA~@;UzkIFM!)|M2=c|{x6pUI z#f#i>^QB&p`qls7x*M268C~+C0H-iyR>Lv0Fb&wT1*>4%X#N-$^EeBRLl_E~f@ZGt z1l}_Kdx)cjCU(wC=DW^{x^9FoV;f8yFcc+xlU2x4!+@5~q~(-W$msXbGLT2LWuJ}> zsVhYZVL8!G>pkkIx{`i`yg`@VF)DR+t&J9`wY-V7UPbm-L`Z)oXs%wI*0%wTalcFg z4;nDOMKZ9`&)u2gYk>iWB@Qx3=_E~mq!ub#{alH#s4s3+dn&0tBcG2_VuL+yu~hcW+&s&nXyU}NdBC9&eSE3#;z}|CXbn))46kL*#vr-Ud;Z&yr(8lTyD= zxt#U^a8EQwhOXh;>>`#zD)4ldSWAaO28u6|azkb{w1&AtE}KL48cf}KtDzS@2pu$! zUS(nTahPIrE*dat3b5?lju6uw#t}OBhj|3K8e`tvPp-zm&*S7D|A#TxWotM(yZV^0k{gQ;vo(FULsL}T{tpI-^wEA(%UXiOZ8lf%g%!} zf0U$B!3Ga(UP)yMx5}f;K7}#{L37VwU8%qsF zHZ#LP6~6y_9ra(y1@vZp%(l`8Ei^&%)aL`vZBab+!Hrkqu1%RrDmJU-UfgXzXM+vk(cO(iz2R_{ZQTs`nG`k7itK-H7mxAetl;7BWU{Bxor$a$A{Jg zxJ(b;u9W6XKgpu#lbZN}IvxOz@}2$i?JtD5N(I~h*hMD()`Ky*Ow6JP_$jj}Hdokv z-uf^5`!DG29iT7WtXh1N7aizoE@NIuz#JKHgdIaMa>ciX91$bZe3p^R&niB0lj8o| z{J=>Wg`DaOK9>C5W(GL$_sB9ZAOc@QA@8XKy2L(QrQbF*oD z1sTL8!EUVS{xUW74EdN=_ESr;hlylrs;^v@!0E^hUL3j>Gn(LC3KO590 zOs>CvNjbt^Nw z2WX+5{B)B3Y_xTB^p9g>7#`;q_8{X25gKxOq7Kq_oW80JQhixZIXuKq5?fLq4`ia` z5Zwj#lNSLr-A&G-_d;=GfFBqg;#drE;s6;zJG2urK!vXa!OJ!%_zO)1#_M7}q`{2y zH33HM(RuSi7k6PEkHsv^gWHiq^zdt*k14dp3S3JGDWZ=He9qWlP}8RF7#R97;6zB$ z891TnDnEBSd6e!Ux5#D9_VpLsFoF&4D|Rn3(a)D(^xz60`c^-7x##AxvhlG&Q-yQ= znUWaC(X(}eZ4jnb`;C`{1f^!bzJzS<(UvJ2${7bZ88^ zVD=xmPnAh}K*%7u`XUss*1U;BDkb@IdlIHvWi#);N{rfk|r5;Vd#4`(|7CraW z0eNkx5_Di?{&M=vH{X0tEUx4=P4@7NB7fS$o$lkR^d_0GSS-4n4-FK-0yc-wQdHvh-YGc|QutW##eU3zoT;A6wk#WwrYh9aIE`hL4z^#QM zY@VQL#nG*gZT{_(hg-!?e#3zuJr9h!8B*l)Oq4EEB-pJ&?jkRyUv^@gfj=Ym!1&{> z2VAaU3?5+xTQvn8Ql#Esq?1{jjQcjeS7!V@ISsado=RU>OWv5E-^$o<9X+$#iF`<_ zpNR8I1LZss3)CGvp0}bqUGr%w2@Cdk5-TZkzfMU1M7<7n&ja#iHP^47G6q1%_ZX87 zpd)RO#$aUcJTT5?Jg}7@^HyKq8SWt&7{_g*Utpd2d}sHQT^F^l?qm~}jSFYi(Iga4 zo(qE}tHyEnB)`ITwA)+;N=Ug{EFe8t<&=O#C|Ei*jTq!PnxWOj<+o*zL6vj#=1XBN znFAwvH$eQeLi~GbMrw+}ZZlLnbzl>Xn;+0wAy-EurpV(84C5%v%{?DRRtk@Z;3jJ3 zNb^~bYJFP^ z-On!jHH-9()*I;4rI1EANpKMalZiT(NXijgGfI<1NpD7_o2aQc77c3rrU`8Q=Sm#l zETF_86DiUIE)sl78vn`rBQiDtX=0dmG!#O^PN-aT)!5)LN;mmCAJzA<4{S znaf(~pW>!QuFdi#{bPYbrKVm&;|gW8EB``D#CN;Of{l!@Y>smhd!0LrW?dI@rXbf zirGe{tH2qdVtnY{J|M!hQFUkldWyhl2wK5j)DQ%F(I@6lA)GskTrXI(E6}2yWsB3V zBobFZ3#1~E2!r*_eo5u1O;$Xfy{u7RUm=ya#gft*XM?<|TG_0uuBDb^@!}lG0B<%n z4z&AhHTd;bk7z+7Ls+JmL(8pmDFMn7Aqd{c<++TUlcB;L#FUz^v;l}QEe>RLz=H{5 zKXCD!ytg2_dKKCl@b}-`!eJp>8@dcCc?|-bLh9zN;`j)Yo|}a{jAiwlw-qoP(U?l%TnZ>78X#JE5?3MMZrqbJ&Ep>+WKEK0ko3hXJHz^{^JDq%GnS^buPsjWcr@K_yZS*#(tzfIGEluOg;yWsNS8-^H(X%MQ4Ie&trSojn3jA6+u<1WPTW%xJn z{RPe7Y=wf?a}F##8F%)VjIv6jDYXkylC~1P=jn{9R;w*{3X-y*TTxyv&14E-`DQiGkF;Z&oXwliqHa6C-bg3%RZc}@U)?T`y z(bm873!AL)COr*P@M0Jpp}BUMC<@TD-j6U3KR>;Sl(W-MlNJYD}KYpYVxd^H2Mvrs~`H-k7^>$0h1xvY0aC8zR5G%&mx=RL@U1AZI$V!i$PR@qU$LGv2 z4G-*>V&MLU&*w4L>95@t#In8hhNt0HSAY%MEV4kAY6E~aTr;p5>Z&~pF3jCebkDEnW&Y!ThmKK1xLSNr=S zul{$BGuori=tJEm>iX`}`!~UQ(NEgNDku|NVwOnp7RP8aa=S!Mw?jbW7gtVCr0jg1 zmSYY_2OLA!$az9nsX$Q#WrU*IO$N)Lq^VRjUaG5rZ8%c5Q0eQTUmC1d4xiG)7>%)v zzUg#8SzcYK4x8HphLWk}u5Pc%%dh%UNMOmY9$+f$}I+mbt-dtUkD2HHK+i#EQAM`h*oLvjr!m04L*#UK;-M z1lnJ>IZwGPDYo&44{a^IImYYcvIe;&!!e#k(igFQ7?oBB+-!xC>*;jFV)T{SEZBEM$6%m!VLZ;80 z-cQMIr~d`Ap8t$peR>((D#x-tR78@v?z{%D_2q@0*%K#OA@yry`oTBm`*rOQ5I@Pn zLG;4LP3MA2hzz(sD+#%8hGN1Sg*Of#Ge%w<;(OfQ8GBGbjf=KDh2(gs7%LBuyk}S zvCw~(cuI%kU231YGnRTDXiRV=8^`fna3v%Dl+?f;Ve8P+^&py1qEljb@8}SVmAoj` zn&X?OKWHk)Y-(+*pQW)yO?uOiCqvUg6Rx#EtKcvcK~Oos$STYPz-ox2&+DxHMw4j( z!YG2cml@e%j)%u)RKbKDXZYdBI^hUrLD=ji1f4nq4iL1V+75vN{{DNww6mz{>}!7+ zF1}LYQqk;vt>ksOoZfm84E9z- z4ug%as-H_;{xSN5?ChVm2@FP_=hhNuw@)c5mFmK&a_BlaB7f_@jQ*V^@@YRM{u-vb z-(NC1?&@~uFx3osDF(9O7-P#XW?GkMzJ|JwoP!o>KX5Q;W}<{` zq~+=KdiviNTtL*9Tms8%V4)#BfhE^x7}2`7ftLqt9_iq}-{c$u-p{Y;hzvTJnXF-G z1DhnQXqQZ<5KvN()d=MpdVjY_S|llva22;EKhE;WVIy5k{zD7N%}Zmk*xDp@9a#JE zf5O-spsmT5N9hMUOkLriaR788Ve1^Pb4US5g1*Q=B7BrqhV}I_dQJ>E3ER5 zj>)hPymEMQmOevjfK_;y42*(@3ODZLk*+XWMJ}QAaeDvYgTu-a{y5k93T4UunRJ>G zi)*DWQSH=_siEBzTinDo2m$gScEYim(K3to9LyRIZ+&;VaP35G{L$RSSXYce?m+^K;N&AVj5Ix4iP?7iUz zSe<}S^BA*8UI;z~=(~Y)&Mh#(?$SlV572W}~_&!PGv~JJGUhcd(Tj{?-GKVt?{-HF6Mrr)08>9pJ=k&q?v z&b~M4w;Ipfz1_prsEPuYAL?M!w?ZH9-L6Z>t7U4h7PQIX9iRN_<|SNKtXrt##WGr% zXx$J0NT^UQAbbG9vYeq==qp?B0|~(g0%wl#@@^K|=OJU5v&7D=te6`u;Xom&;qf2W=qh zWB*5LerqY==Vnnsvh*4KGzrj8@BCVvd>{a|XGtH%$@+6HzXG;6TzTdBO>jgGc<#5( zLwxw;3l_7m5E>H-#y>TDff|`vc`=L6wYg;LW}NsTTH=*G`2(MYGGrs_X-U`5;Xj<; z{N`E zHl=xHN#F7o-dT)LK>;hpW=$MlMcpMCy5am9sY~eIez8*EY4He> z>eh~C85uZ!kflBTCkC*zf$q2@?1C;5)HKjQ13$P*(MjA!ut|Gtj?qG<;Z`z5v0IBc%Sgm7C;{`Av4kPr0;ZILLob_2;7XLVHAnb4^)!7C;m6qOj)yk z`rGKJGi(?fuSOwf)ky!{m@#2xTKRCFA$tz0wf>1J%^+yBY@pF<op zBMvbxbQtD9%Rp>M{4)4#=q37I>^4zn$Dg9t5Wc=~X~GDLvboysbVVt&*oCDsV|=>S z1u8i1PcfN5n-O*{-Aq5|hs7B^W>}pue{lv=_ua+piz!f^I2DF>3)jp=p|iF)f4|^} z5Z7V$W#>}{8_o$OwD9icJVcaeBV1-~BYgKaGk1i>s*WBbumBvrhc_z8gLFUnQ?Id6 zI3Vz3KX1AG)-;J9xvY(PX$(ekz$r*2C=S3@ge;igWik)si#E%;oBwbz7HuybTue82 zOg(YWHEsQo*Z#NH(buKRpob;(+R)z4M>?Mh@@%$*rNolHu}CQ9b@QZRHYKC`agZs; zO~3|(N8T*^za^16d18IY$x~KHVg2lQ+AnjLmjPwh;?p`u7glO3Mq_4pnrh z`NxZcU~F;mfBqxz6i0gfN*{P)-6nzJp?NuYk%&X%4V<%vfK;){gl?(SsFRaNQGJ15 zmE>M}FoMpNRpgZ9tAm?*Ved*5hE4s-;hQgR7TO&Ao)^~z*;zI9+A#fYCoGliw?!&f zuFBa4g7rQOeWL-}9|V0zj~wvwH5|`**B<^P5{Qt+L)l*r!UEN!K<@vOb*9POXL0~K zmVj^wGi=U>QU`iVEF}gROX!6#eR1l7oeR#-T{q0BI0K%~sjNmul%1ms^3*5PZ17Eu z^;omPYt_KNhF_TE+EnQMv2auXDm^^+uVn=0Q<%vJ$Hw(m~DQvE!{bri-Fi2F~&Dg1n!mpclsCi1`$!h;S7O4%<|wH&~=aWMz{C z_TBi{3hm9eyn*cvy6yP!x1fQ<^RG!jDI8wp<-F=O2RpoqR$VmX78|wlq6Ax|Gm2U6 z#Q61Ofc`=2xfh<@#8pVyo~^L$i!2BT<-j$-FtbpWy_lmEhDB;V`TIMsy+(PK{Pc$h zH*~T{dACcTS920^l~AYZsio;GzXrdrnEC&%bv3jgc2bow>&`6&HBnk?^vRu zEH*jwwpFd>mop+GcY>p*cBIpc5*g;2AqF2iek=GCTKoEYOks2HV8mVk^oI}l$R`6d z6^wL~R{CRbQQeA$N>tcpgjJR;QY_*Lc$^=B zldOoPl<{0moep33rZN_6d*rkl&CtB(i=lf={;q;KeVrx%u^v|>zmV72ql~5msx2>c z7?wfNunj)Z1G&eCpAuNTGGG*h5zMa;#TozI*(R48GiRgHqtSv)(zNkQ_ z69t7D)g3JgZ^*^b3vKNUw?-5D)h@F$(MJX>ZR0MzODb`dYZ|IDBqc1a zu5|DMd~1o@F3t}A``^EpNNV~1^>N@=!b^PIS8A%4j_4b7sl}yn2$p8K$SswaK;;L- z<2A=WpdK`sg6(>UG2TMY{`~wO&e|-D{tg=&! zUgqk?`V?ld%@0)omPF85BGiBh_SJgHP`zq8OBtQItj=Y8Hf3(0({%lv8Mx$R2Wjz^ zI<%hR-UY%xUO>UwRarl>~{881LfdX~w|mgQEmhApDY8 zNE|Ap_^-?5kHVZ9eDV_TTwt-3pNo0kJjtp2JulY(-7(k%9*W?>^S02qS{d~$4N+#= z&=_P-?1w}s?gzOZQ!ObwzRsCXYr~pM?(d8&%DNP-QZs!`($qIyE7CL7qXo3J+q@VW ze07rWu*q@Md4o{@82-_*z9?D^`UiucvkBgeF)P^yD^2SCv_vYD$i%k|Fwu3>Vv}@m zQONRdn1NZKtk>f_*H2W zFj?%wQ+|zqq+lxNzK`&oJ~;Qqz!xr=V`U*M_<|#$3VaXOJ_a8cW%v$NoCF+W9wRHk ztav}+jq@GfeQQ#4h><{l1TMm9m?r8(&vS7g;O$I}O8q{jp}ix{TJ16cTc;u|skkIw zC;(To+j^j{Z||f!s5XV!Q8wx{)ju_*4QeeB`LLqNV~#vKr4H(>^|C%iv&R%I%DyF~ z{!^rG^@Itc*p+n)O~+^Hbo#-X7xEo>?scVFEU&ARChD)<*_8ln&1__ z&r72B&?8*dg^C=Ef_#QImi0$(~_OIj>U zsL?>3OnPo6h-7y_i-yJpAnM6F0D=Tm^8?&FoH=TQw#uLkPrcd*sE{t9?Vo8HqYa=> z40$Dp=xNa(hNcIJ!aoK^Zve4(5PYXrTAN_0^jrDqwp1h&9~fZ5Qp`-At;L z!sKb^oRKQNSg=+r>lAVgD?!~~jxiRigsOHBVcZl4rW?-~EM=(=w1Z5xug|}1`Jozn z3@?uKf}n@@eRz~*Gn^Gnc^ZfF0;QeNZ(BMX;LnDkQ1Ib%{mQ?U!UWVC`Hhb;0DK86 z-}4?1>~1_B!a4VwI8V`xt1rwW^!c&7B3O%%oR}Mnq}|;E@NtIn=}F3(ya=(xpVt9H6G~@?WtK$tS{~f5YFNO6l(I04Vu#WzVZEij^RF0bZPA5qP$>&_H`~)mgB^=Zd-5{bP0Ok{UC=?ZNOY?1$$cf*l!TXmc9)B5a^w zeQ_FqjTJn%)ZYx>FYs3wRp5io%7vkZMU+UP6iN&fAtWRwnOLO}dwjCLW4XhrC!hQy zfXDW&SIv+X>G(w(jSu;+*($Y3cHCIU3@U0vVh}0!d!*dJhaYan2gZv}%-+e#`_bcr z+^fB6UePC^kk^|IyL3jRr$^3Qrsdwz)cBb}@FD8nK<1=P{+MU|c7gXDtx`xRLUMsX z9|`=VA06o99u(@1zkjC>E|q=rwX2)A-HAsyH2nM=^x=6mOD0_sola!!=yJZ@jxOu0 z%YODode7kCy3S4kyJ7dFLE)DvySI(q?i^oK&4iYWI~6H)W6YE>$0HD|m$;OpfQw=j z3kMw-#lrXk9-@TvWsn0a+4l+;xrAeZ;h#SjoZsCT8m;Vb{COc>U2XuuNJGrc1FLRg z1+=wLizsLDQGR~K7)&X)%f~Uy_cjjq(nn7~UsuoCCh|a2_2MBztA1b+kr^Dk1?}KY zZNU>EHWR|)!P;R`<9CoIGgIxQcY?giv5@BcoJH4+eKm}h9e%i=MQ_gPt;Wvc`|);gP0YXPy$H zluBX8H8*tb;~vl5&ppHa;k5%q{UA_AypYDe1St>J<;2>{nN-vr?0R+X(rtNbg|6NqtXf zRlQs-uQ@>L#M#lX!44t@LUo-@kr^8IwT|7tL;=Ze7~KjpBTu+tZIcBid_a%Rd$^>~ zvJuaI>{^)=|Gu%|utlZ>^j#raxmjWF73U_=K9i|KZ!=`?>tQkX2O4;VtWwJ@_Lwpm zQ#DM0ez@>!+g~nJDbYED>Y%``B~-7f{zk5UJDK!?{+F~1j~+M zvgj-u7Z52gJd4NYdH2#Tw_A0h3BJW*9ddAgK@vQ+v2gNI=st(WNy$GGfyuE>5VXsU zP7o`5Z5^$eK~<{b*Zgc#H}^Vx-iZ!y&aIzv_oM5%nUQIIzRyb}fEs)_#Kl8dsU z&dc|npFmrow-hKr?>yK9LuCLyznOb5YwhgL+Xw93z1_d{sl#DSjk>-O<=tv_ENR09j@q7_`CZRtZ57L+5O(M{`G(k21bCb8P& zU2>=Wv{re8J|}lMxqs`^1y8f_l8v? zN8|ul2RCYpFP?6J*-$m=oVht^a8Awyb=8vt7T8{TUJ+s;-xAL*$3i`W72&Jzt774h zV>T~>_!~#&AQ=pys>odgI=E2a^pOYilg|?D7xBF69o6q0>2k0Cz#6^^=pYPAh6B^0>h+ z-2D8b_?Uhp7g=y5(a~71=v0aw8?atM;QHQT zk=XCVt&s6Py4ZOlZwL<{>G91+Th#H2t2cX)&0|3z< zd`D(+NUDqvCEidKbc{dAkU4;AOa+C(A+#RQ8c^zpC*Xr;0>F94U`{EV_WOJwR9_0{ zN@CSorw8ZAA7FAsnwK@gY_LBxhF6W75|AU;j#D~|O$nV!a;Ov{iXe)d9uGD-ypJ`A zh6Vb6PRcE8fiXTgN!6~Hf=SK;Bc5wU1R@ghcA8QOr6Pg=xDCe7i)Ci1TTa2m5>-IP zO1F(DtmLHF+y}np2k5t4r~1tU+VQ zhg6O>gVL1eM*B`!YzNnF=vtnBTq-9-1QIHl8Y`_8Sral7B@{|%+5>7A8Xe^Ex)yHn zk|n*L!XUhW)_k^uafO04Mz!?N};`k7eu^pHNK@0+ZK8Ih`zk_1cqvzu$^ zCLTQaHrkTUpPI{caQ7a7iB`w<>Ez|% zTzGZyCa=^cd2T81(1A$_mV{^fEnG$LX%IXwuo{HAP`J2I_&N0QT#s*Cu^Pe>JcSBw zNy1Qkw;nw)#eF!=oqF)#0mw8YsUz?>sjgK?@;7m3Pgh#gtZC_jq#KqBSIt0lL(tE$ z=u?h;D$|k^c>Dg|-hM(Rli{8Yf&jFO`xEgZHVHtkdN_q^G5c`YtHs_0)51HgoqfHI z=vjOARO((TAf(&^^BhNKfd)J<3d?h?hFLH>0qMP}>Q+b>epdBT)t|sPeDCjDsiTzq zJn$dOC*12#c=^De$A0D%oWUeuU%~A`<_*lZ+%pFq^8$}Nhzwtq zQxyT&cX$b~>%3ut&+&Nh;K9G(z&!-|W8+6IGKkw6a9tYONMq@YWgRSMLE9JeEqXd4P?#RS}^6dSB`!O&(=sw{EK*s6M= zhN)dLcv{kb`~?M(mdT&J<)W1D=rb?w6Kd%03r^kekYnZMghVN9IdP-MIT^iiix5OP zH(W@ZfJK0y%J~oshsPp7xXKB`;d7RpwX3hkIqz~4VxOj=UK`XzA~%{$8J$(%ZqYi1 zEk^6eU|g?e-He!qfj0t))d3^XNoUBYw>F0rgiQ5Zqs}LVo==UG5;7r{PeqKDK%bG2 zD(D7{Txz392_+`*eQMGk(wlu-AG0$53tf`S0E4`$u_Xi zTS-@^dQigJ=#j{4mCD98ce6UP*2fr)q;(h|n-ahD&>9d9i`GN^XIs??0NI@J9UJoy zuZ3Ma@3mkP&%*-*F;FoQLEKa+1>qfwom8n3#HTy3Nx_5Ru$_Ma_*`Krc)tAdO}VUr zOl=sHSlCVwhxt`~&5|K~OxM3C1e`XbT_FQ10w8ASUr4|eAH`!7E*u;C-IzpI;|8FB zcKB7I4QPtuemvH%FpFFPH>HsgQolkRs3QaQelpacLJ^j2k!a~|v0Mm^h&1>41z4kI zH)hn-q4h)04^*`K<_(IwFXb2+cIVvVV`YaGmy`y@NjrR?Xe+)jLL#VRuWwKyp;TNFC5X$m~BOb%% z0zwOxn9CI49m?6o!v1%FG|LtNJ&0q4RhL{s_VirQ-Ti#f(3&=SanoimjGDG#pN5z| zD32*MY60Iv5l{$JE~`jy){8uTmV0uTRJkmq(F}dCtmw%8AptETWqJYWx>i8+3^Okk${*K>tgWZaapTq*~ufo-z(9l}=0yQ#e4z1Ff94rE zQr2ufW9&3`6uOW_5nkp}8q%2$uO3?J)V7^*LYRh;pw*j>W%{^(_i&sUTJ2V%ce;t< zOM>&%=8Rr%$QGr&D2;)Kc45aw7ww7w4rhXd?$>+?m4)CUSSFa^^&A9VUa83uQxJIE zfbXc~-4rg5LJSRS$(K;e;j|#8pLJ>Y;8cRYLRg6t7Lf9fe^ zflUO#?@DUI`x!b+snn7rC1*vu^NhQYrW~@S4u>Sm1~UQ1A_;ZW%DD;D$~{G)JonJa zy}d9wtY4bC{r21cidzu4XFvJmw=#J>m0UjnL0*1ol-xW@>5W!7WRI-Lpd79ZO%>D; zb>{?eG3M)Tf4NfvRyO_6fKXAtcE+uNuHTw->XT<&aDG}5kS0#rv9+Ohc+YWe7V0|Z z>|cg94sePA;y>J*1iag2Xx+yC{`30!pd$o2bmKP!S!w2U3VIm zD(R0N^cN~(n_@_G%7tsVsudgzXXlVW@kkn6d90vUVq*&Y-VZ)_nPtOda?Jp6+SVK{ zdAgx`dQczJ_e}?6Mx8=1hLBP@>S z8y#3aFw}kLk{i#gm%HieEf>Hj#fgp0QW?xTg>J|IiwFTp)vp{RmP;4ic1aVZ*OHMR zT)t{VE4upYs%Hw6!9b>e`q6Q{H(hs57|-C1Uwq3g-Ei?7kiGt*9IE1h$8}H@>xA4D z^VL@Xsb>>J1DAfoPQjvA_B||q*&*NzwsPvy1Quc_1&o!jbskNj5{B{Bp@rFO3>OlfD>UD@0uS&^ zZ(Y@DS-LqPcS{n`Toy(H) zCxtooY;Gyg?laaCinWkgTaZK zn!4A~@x>1bx**rGLb+cqQs_gMG;BF4MCmo6>Ltsnxl6hOs-cZJFQu-Li_8EQwko{U zL3Pg3l+e2uuc$TGECL>`0&tv#&3_mqa8zLtS*(GE&jVHi-dS2eY??526q7FN6NeRLJ+stAw$nxDbeAiw3_oM84@7+Bx z@K9f0bHj<}PLG-B>Qw^dSn|LwP*Wo30_Y-JCy*jB8QJQDE?7qkgYe%OQS(ZU{)%3zif zn}?_JOY-R2VO4P*aVaOUl4`xQSM8PyqSB%J_T^fIjB}-%HOB~WhPzg+z$3HCM*;9uGQ6=NF05PZ(_n{}K6T!CuZxXMn^$=yP8VH!nxmhy zqQ7@=T|>a3>goph(IvcXza7S0V!i{e|GL1oW8&=??Bz98NAt?oyMc68uCkOn7kKl_ z+jQ(fp-NqGziJz3Ej3~=((QJ^eUxInY!sMni$}*C+pkS^`bjhGY^{Gt)7mrSm)0so3`M9s zjmstqrng!(K@Z&_aR;7^XzOHgY3=6&#Lzo~jI+T-du6tuLHcdCGrGjuLG-@IUdS3l=FT2X zt+`DbGvxlzPZS>zTrO=r zGTa*h)FEqX@h)E*jGS@l#T`WF-Yd>efUU=+{U;Z6^x&?GFr*kbk)MD|3?k2K$~(C- zxUka8T?vTibPdW?AOWWS!Rg>r4(ui1GUJo)PxT`h* z(H~Uc>6CY{FQaKUP9Fvn{9=+0emwNRh8F77lJ+==JmWFvUvv{!72iYG?Ag=8eY`#z zZQW3{US(yI( zJ(7(|9xcJ*5x69Rhs9#XY#S``DD-Bm0YGm%FlNsM8v6}!l4iF*_7Ax9Q8_({N)S}} zTuS0#^W!rDj)D)C;Oh$fU!fM^?@2Q5^HoUHmCv(oO6~DkZHa@d{KP`s zh5|Gx_vFNPFsE_$`M99Bybnr(wF`^-Ll7sIO&WG3-za^RSTy`SWqKc+wfUhKe@yxR zQ#$K-QNCeH4<*tGj846ef$Yp?414shPmymVgUctN(|>Fka^WL*XLt9HdV2nZj^)yX zruds*!nIgmme2B_6OL!d1Tk~`vJ^06oIre@ zB3ioK(7i`-pC3Cup7{-TY2iBVU9_mN@v!>(6!#A>Kt?b?PtP+zhH{BI%(s5E1IB^d z3gNezPhBXreS!PHffC;O1cJ~LLMi^{hqWmiof6KtfEF>AbE8jC7>K^58=hO`MG=2; zvnOQe==n!??T%*3BK7p=ka*F@Qy+|9hpBQftOODVIswEI7&0-n?k+iS@py$rdH-Q4 z3P2>i&8cE>cOl3i52RAZrBWXylO5c6rp=HtVF>I#2f8>AkTzL(xn-{mBM}#Ki6asR%~M_zQhejG58RaIk5oQI;RP(IqcSt zKH`3bS8HWg*LFO=7M(T1>UFs=i~@5fVH6nmdYdIF%gSQh=$BuD-0R9Qpl%JXxCLqf z60FZ}l@&mre=ErAS^$^h6(=;r1F0W#AGBVWVrJ6_pzRyC z(XZEsR!^IwrpcAa62q~$p!13=b|(qTz|8|Ky-=pVxaq9(eh>!?*}$;a`lK!=AsPQLG&S}%HZi#7#_)??3diFN%#1uqr*8l1%BB1^$j4@ zj^|t8ahO=Z&8dQu{?-xW z#oKnGVQ&9Q!Zg60()VF5=W37z>J4HY1A^hcG0NS2@+y&8ws>>Kx+SXiQgMm}Rf(+o>aWdpbkL2peV_ic4_$>3z(6&u+mZqk1=Fs5fHH-a=a4 zq)B!4IOTQ=v{RA>sN28ZkG5x^p;d+_$e`63S|Ztpp6Nlp(9>B@NT zO0?UcPiif?RM=>asdd`at6FDTr!{7a+Y5`7Fv8NbWhr7Dz=iY~@*j+iVbu@l#{}%X zb{{zLdz(RFK4;FuaPS^GU#SFA*;PO)Q&v@fy&p(rrSY9OBlH0+F~j2<9$1T zu~Kg011x-=NEg`2{}v9yhmA*Y;d3RToxPIfgb_mIIroK!&r}}BA3Oep5|d~RclnP; zM^B80x1XE>qH1#c;oMuJin?0LVwKhgWyR0GuYcR!lQ&EmIyx+G;eJg8ZbQ)l{dc;l zhfxX!km4_+asO*O>f zz17@b38q!9V};PoBa&+a7d0GlST)JA0{;v~oO)_i!yB_Mj5rAmG3fk;=mDs*rluyH zdwKFSLgnr)YPjqs>W)axlygrCQsAq;F7E3Prqxj1E{R`}J%i9}Y)xFpAlwV*uQ4g0$pxX#Y9CYERWo-@xAIS*}VB zj~7qof>{du z%R!LBtHTnWPd<56#s)?4)%}zSn#>zTch=TS_30Y5J(DmRNUIQJh0w0gp#7Q5Oyoz= z|Db>WTc1a)%K?tdWTcVfg%{Laj3;CfDpiy_yt17RPV@+5a&flD(<7@JXqGx8tpjy3 z?)omduU1dn8EpWjuBgIM3k=>QJsE2*cjc|O?vQCV3T5J0(jXEWC5*XCYu57hEJzGK zye|nkKd4^c#@$&Pm|5(OdzP-Kj+}MrCGA9h?-l1Ih&=c6_nv!>`_z|@_Mdxfjnq!L z*K9{;3?PBL2WnQ7(M0AR+9A4(E56hZR6DBUu}?dXd;KR3j7Oe&_@mQNohrP3Re&~9 zo|$F8*EVh4SVKZ#EPl~=jwn8buIuOild~1%9;vTdLorTD5^%l96;(zv9AzT}J5QBW zwQRuC!+Hx?G5`;O!{cUG1H`i(Ebh5;!45u^-|oNoXs2|2;fj&-ogz+D@e{Gpt{iFb zrzO%~DKz5GDij3ZDr3W3j+QFzoe^vUMKD#vVwW$*^6&5AF$`@mhQTK50rdXWL}=xt zDQy^AjvgL!t{=cN4LcSEpL&1Ys95c?;)8B+DnwK08Lrub{=q4S&;}5;N1M0{-C$0C z<3-1h|91FcwX8|gY+~FpZ4J}jE;ovEBBQ6(Ipm7zBMm3|jbO_HipJz28Bi$$`~b8- zcww0vxXVCCdCHyhELloyV)LgaBu0ZcbOh0!__`{2+F3i}Vwp@3-M(Xclx{}#o!m$9 zVC?4PPycl7^@5E;uW#5)>qtY7nR`QTOli%!)^mOKl+Gjf2c2~?r&AVV-5x%5+Bcgz zmDFxAySJ1$l?K|cECnyvJ66`U6ph5=qDs>X99Hc6$TDvVUnqQmaH#ox!9Q{2%#3hq z>e&H}iy9>zFzZ+2SN179To;jB!W}(*+lP=dLgW%7#53G}7z%tHw^WG54WM8NbbU#( z;jqQ#R@3DA+i}dFfl7=OX7#1Y(_|p#S1N5Lm_z*lw}tzMpx$K87_5elq!|{&XlP%5 z=i0T7!NJ_`8@N+&m&Ye?ff6g*E(30iXkfAfkW^&u8?(PR0;D zzj@(v4022;VDNSYhp2U1p*9pSwsoLz7k5Vi9k{Qwy+P_m9*}kLb@>(-=qBZX zz2J_X1$1*^=M`6;pM>zu1m@)Dd_-O93&$`!E*fS9lB)w;-bv2%N~uEs-WB(CajB>*|c zpw-h2(EY+zPkVujbQ4Qmzr5xq)VFhI7QmDJ-18lGb#RP{RYk%KD@?YVJWc1A8;%SF z-RtyB?Ru}&dsu^_W~Eo{U0rXo<=V|wQ??V7!)!qQuQZEeb+$S3e-@zK<$Ra^1yy^Y zUHqq2PgOlz^-9%&5^jJawmHlm@8^<-=C1)544jo#w8kq%kqT!&ZXj4cfT zrLJaX*b>R*a=V^>x-cx&(=e|JRW$%RB`Pv-D{2{)pkAQdA&`k_rGzwDsa8$Orcx2M zqX;4rH;M?ENUD?3)pg1y$7G#CNm$Q>GJ0#f1zjkRiX|$E*l3}kGt;8h5cW+1q9JCa z2$@)FkkK^_%4XM8Sg9iHI|-sWZ7GIiCY=HZwnlO!580OZK~O57n0 zJ&)ik*QThGMi$^>S3UZ>LOtBLdtk0*B=Sl_Lo0W3Q?ov%$!L>fEvAHq1?bV?7BCr= zft0zV5{tTBsTa%KpsrBe@136XP#TrU-kGHv)h)bO#Y-j21J->uox>dpFw>I1BK+lxl`l`} z8w5xUAGwsb09;63a}Ki;b>#*JzP}-+)8p49#cr3YBnlIo#b)3+yd&aaWbhj#wp(DS zDi6SgthwY9zs2|YE!0LVD_*-jA(6@a793W2hnyPG>vYobV@)FGwOuIoeV z)>czm5oq7}ufD5h^)f%D6S>DGyr?Z2ZNA0Y+T795+}sQkt#4N7aPy;*uC~ZYOOnw6 z+AEPbYoF73ryK^y^yw`v1a;-lqqLO@-nZ)^*P`V$g4&f!JdmPx+2f9W;;hA~S9GeN z+@z@6hjnS7Kk|_jbbA1N1PXE~TTibe=NK3ux)yYMz+SV!zN>h=`3-MzsI?V<0$Y;E zKM@ez-Qf2irEQ0+i&N9N(pf1$P7~PILF6}EQGk?{&r$(IDhGIE1y#rQfOV;iHJBY} zQo)u4uwnU>6}RAiYsHN(j#k1!G)x>;ycAL6xR$uU2!Me^3_)qzHHx@C0g zpOgO>yPEJ8|Mc->djD1-WICI!eZ^quNNe=k){gq%=8Po1p^ngN0_*&8V@KPKMps|K zU@&wIaDNuN9~7X>KuEiFN~#ks5vtD=Xe2WIkkM)4mVNQX8?3yMP9Hu9<)O|M&D6_H z*0yw1nb!7<`&lE@*oHt`z$7ES&U62{CKz9oQ9@&^WA_?K#NMO{0~CzTU(ElBJ^hrX zd5MRH#xP6It&L)ZicA7#xQ=$JQc4&5R+CIEtOHK(-UczIH%hcx?uR)`SXslW46Hotjkr^{=kVvF^t{jAnNJcp%eALRc2XbSj*;r(A;!`&Bg4h(i%S_A8k2$u*S zJje_@9L!F~BP>dxeMvH-)JRfEka{2n!kz2 z9$+{Z!=nF8OuRNRVe5OX_xFWM3A*^Xix?i|Muvvb9aGSv7sHfI{?^Ccb2hP}cs2KA z2@AxH%sft8Sd|pN67~-FLE&GW?j4LQ;HC-s?!No(?o{c|9f9*I<90&FDnq*y~ zp;eI10T=Pm@?^%Eg|c(rn8I*ECKg>ER?Fxthx}) z_f1uIR6SZcL^x+m@Jl%>3^ae3IUJQzY!2%LF*!-jkIhRlI?g!xCFg;HO5_fUSwVGY z!_dkR1#?`co-Y{7^t~4P33NBtPv9P^ACHZ_*GC{yDW^?JS*;04NWGVW-VsVB=28*b zCXIqST$Q9{sF~RiVYPy|K)a%zHHv|u#65w&;3fz0wA2JKQ@s9H140>ddEEthFFB#na>d*p2ldA(EbyIQa#mbkeh@)u6IG{ z2gLb?X=|wyCR#n+uWQowPS(R@E?bZv@X0P1CC^Rfhz&wvbw^oyL zWZ2c=9veTT6A!WxthiX}(_Sd!mjl z!GGW$DV+B3gL#=}+ zI;B2^R~|s0H^>cQ+DuD~2ztP$eKI>`?ct_nu~juP8|fNDPe-EyuPv#PXh>zFmg|hg zgg#qB1yZ5P2CX5YGs~Pb!_s1bteS!Dul!D#S`W-k+&=%3z{h(LU^xS`xdabkrO=gS zox9V@QS3e#DEL^_^Hsks8ALvZhE0MgfzEkRt&Sflj6()~-|%5YX$O_Vib~o-RpX~(tRU7HM6mIwBW<{OKp{YOG49K2c8;?qzrN_i>kU7#i zQYF?jip`2fwO!_PoM=%-)edbuB6W7?L~4;Xj&?k`^Em@GJ)w{>h#-^!xd1fWsP5q( zHg5C<{s zF^~1h$;p!ntchu3jBmBeG=e;#;s!vP=jjhWB!oGcPTVcj7OxVVeQ+zWWz2chwZA)4 zsFd9D@#S1^+sys@_B8hue(~w4?(V#C(%9B+7D#)~dGNve8}~*Vw$Y|~B@11Z+%;%v z>VejMY3J`yR;LfD)T%~8t*lXK6`|EP#F`N3^VccOss?T*U$4w9X|_>HpG@qZh{R=X zUqGEQ#~RhPo*|FH)15H@PXNc3Pt5WLO0gxr05!lKn8Q2q1cY_KkF9El$dZH`-wOoG zjafMJzjx!qTPmBt!eV=&$M_q3UHPaa5|ICXfByN)wfN8euf9T?D__Cn$u$XRk)z{N zSv>c8I`ZV$*vsfeP;mGq*N7F|9_*JHMZ+R(@v{H?=MCufk~CGiCdI#u)U6mbB=jT8 zYKEX|(pK)8R1uejLd$Dw9}5N(+)Y25_qBd>PgDY3qM@DAJa;6zF6!ehM*4Ij)7*{z zskF4~w1(_&z9n?!3=7+fB~_5vA*^ z_E+6q^+eSRrO+PRHyjo$q>n);3Fddsuj?ZfdkjmgnFSBx2{4pkVR=Xb%OlJJ2&F8p zWIpH2^4!bdlI0wNs^*P$ET%7O3gg$DhhD;uI4@=`p_hC{h;|=1P>p+tE}W;Z^8-8p z2`SUwfllMF^Dyq37RsWMfZ(If-7c@p< z4Ml6yDx+GgTSiC(brBus<7eXmuwb&tmSAnV1GqaXbr^J-$<`goyif;uXIj%}np#b8 zEwMEBP%yYW7<{azrk%UU8&>*!@_K!XphZ?aY9)0dOYY9@!<wD4~c$P+F&EMX!(g7j1u7I>}77v5~c4wqchH-k) z(Tr0@Vpb;q}G8tzToakVHw|8bK zP<5?v*nhR)uw#l4p5!zEM7#B{?@ov6_;t{We^=Fmpt|}3favd49R&D>MKF{D1yQ23 z6LA#@!<1@l3g9z%-|vb=u|WXa>@7zGmCuzLUd8M4HPTY-Q2O`32i^G%h$CGsu!1Y* z<D*Rp+;^JhJ;3- zNoj~Wr2bJvq+m(2L@E^m@=hx#k-U!f@0;2w0I+&jO6EXt9rmv|6F< zY$O(BJ8jXhglR;QJ0h%61eGPEsbx*Vu+S*1QJ4krCO>KrDrKaJmO}rOOhn5mn0Zg8 zl`(j60$yAYju{XX4`e!4Qd6gBvX2CT>jp1Q67b?JAt{UMWe5NE&O5)B0V0=N-A7tv z*+miZk-C~igTP?un-22I5~brsoD^|2{-ufgI-ig2Uww;GA`Jv23SpvIuL}AuHb##0 z`Q2+BHhZBH1nvtx$27=&0aaX8U5!A{xLvO{bR4O04_Y*qQMsE@AmJ_4tR&j$(nSvo5E7ZFMj?i`5Qs&W zQg#WUQ!%ZhP*6Cr4&N72z*|tXl&qBnrmafb3{qi7@dQx#=HY)(cl74Gix&H!u@}@s zvix)sEsQ|8Q*hVpNnIEdRpv<3$Z>{_HR#H2?$b{1zJ2@Ngt>O_AYps^ zh0!QNfbG1C?A#k$qEXN?f)-!6orWIeI=J2Mz4x+ARwrp%)&&)!^i+&|v^F?142jI( z;<^D6BL#dNQ?I@)>hbisT(!@kAOEED`c{vp-{lHDci)Z3 z@9_+KJmKHiMn(jZ`?$Y9*2;RBhP%GHin}N290utaH+1v%P=K$U8<(iWji+C72~^Fa zkRaVFDDa-y1XHsTz|nzAuW5x`TuMRW5lDjg;_pTED=c|?&7gkVxHM5cjDFUC{?H!o4R3%3#ddYQ5>tmM8r>lb+nXCy zjGdMT8@1?Sqo>#D8L|d_tHZ%%E|a_0=^nHOz3|KJ3tQHk}FcFBx!c!BNm=c9v@1dmklj^1x9Tms5R zWtX*J+0fJIUJmqDVKDp6D->pZPmEAXTxo_T?=h&`%w0nPSO!N1AQHK0l8Z>n4dlzwboS&RCqSEVo5(1SZke6z%uHCY$gPwV)2f5VBn4v8X(-IhSvO$jC znm`wiaR<0n?f@jMszx=g?MMVlQMGTlV3yh?hPIrA`;9=}dSXyz?(BEp5Ye@?TAD1G z^ligXym5MAYbtADTrI>CHpc1G4A@czqF(5)T{#W%xs-iu(gpnGAh0r@6zE`Cah)Ga z=wkiDL7?&B=6U`|f@-@4y5EI7G%!!LJx!>136)BU1r3DeZ``QaMR0q_mK`5Yw7(=uo+BR3~Y1+p=npmBe3dL;JX1 z)u4c8q|^{7wn@;7sD=C4xg#orzMEg@PKJ?Os8+;b0D?nerA^63IrlSo)~G-?G6HGq zjsLps$To#hBNQN2ol<}(DZBV~qBDmRAj?Yd7sgkzmROz*b}yQBF-m7ju;bvVXA|b)Us2VJ z#%vx*3Dpv7qK1@8icl@7S+^+;!48bRGI7>^_u+Beubx=p2Ul|}v3wEyMkLI!VeM*F zvlB^aTfLNFAt;iIitl6XJh&Z!FU_spZ)QU;x?BQzD{q?qikjocUE@Y=e%X71mxJ#C<#_EgzZ zV6r`)_|eXjhL-}*lrO_z(}!U*1feEgo&`1l%hk=By#u&KWh4&~6P2F;s0=_~^K2(S z#(KWRL{p!A22)bt`0gGb=NcksbjmY3;=SW?wK`Qp$R*}liXzdY+3Hnm!$K7mni)SZ z#p?!}&5X}2Dc&C2)35Bjp!MUAR}IPFIUyvM*y<$gv1&z=I+8TeE~&28#}KDXyCz)4 zx6n>mjebH`t06WYeAQJgl~U@s8i{FvyI18hGxDHZYIXH;7sgIF@t82kI*6Li`C(g3 z-E1Fpq)mi(a#!&^XGkg~)p0FA{KThXZ*Y3pCUelHt{ywTsCV;PCbB9c-@V|4!~}N~ zE{B8|_n6Ou+H<*RrHPX#)xuhRI~=~yOP7r(#=O64d3lGHAdVXs89GiqlC;X!ZfjEK z#ta?f3C6=lhnoD*@-c({!;zOg^v;edy|zbbAQHo*D!Qdd) zrvXZWSSy!#R1_#tsH){OOWuQZ6}3aCjysiWK`XecQLjcG_a70JSfuvWnBv+oSoB;y zG;X%zZv}-@pKPu~7?f;aCToOtE3|lZdVv0C0 ze1+QHYciMyKF(%4p5YFPGYQkG3%Ys#S!?d_LUv=^Jf(Mn(p6Ibq1tX=E%E z>kTM3K4-B3ln%{}NJQ=u$&``~S_2o01>=vW(=DvVn;}lAND&X=d5D;cfmgJ$(%3?g z<>U$?5k5JqKozADFwmH1UB#T`=iTQwE&s7ZXYoNNX4|BQ4aG|~<1v4GmM&cmgTgOB z&v6MFy*ACgJYL_+=!6486*4Sg?b2>WTMQRd9rp52RyK0aH=UELW!BR)D+tiAL zCfZ~M@J&|>s=8n2qFL^V&IdaLXT7(pt*!OJ7v8z)R&<+Em(XZ5Nf2I$YLvR9T9veq z;Rvp_WL%^SiPW)*bpaU>JG2Y%#zg@s?d>pUX^an*OZ|wr*Jf_AAMW(T<#>MWuzBVq zHUOAP(b{~2F`ImW#Q_Tf+p+>DVYiE)i-DQQQy@dU@3PiO_Nuv6!n3PG14HhwM3Qo=2R9@x4`t{=ox$Z1c$#e zLVVQEJ=MK#06jB0nt$!?S6n_?B2d@zJ)mL=jSGW;9@wA~)*n=%19nr|=rXkX@pF*! zyPo0iG2v&x;GWrM6nBssJ=3N3!tAoD8bBHz1Gyt?hboRY0nyADY~yuMb2*ZiKimaH z?aP7Qc4yTCP|(KY+E1&BNQ5NFf@&ZjuUPK#=Q*?uUj+Q&hnomz#@__qAXfZ#;0+7# z2{5pSodOS6z>8E)4Zg}=>`LHb;viK&-=zTE?$AqJDfoO7aE$%G{8)ICE_~}a4(`f1 zU1@XvGb*!)<6@JjL8=EnuI}Mhk(LHmCY2*UZvVhH9gMGq{u%)*)@Ue)mn}H@-AXmG zUkY((w#z0IfDj;zP>W>@+4^G=81nn6kmwkx)%M3pDX4zZNPg1K@YI=+K1wAVf?-T} z#t@f`pLJP3I`Y*qJ&qGEU!*h|`kSC@%ouiy8R`crMV)6^h%``!NG*%rjj(1iE;bWM z@Q2M}-BbAIgbpvMod2;%hmY;D_q$c9(vOwvv;ihavR0Ke(Qe8%Zf&0TV~v!4EXhYW z>$!B1%4i&F62SQ1Mi0qQXQHXFas)Oe{N~G#cn5|*6)@>Za^V5L{DiQZ6u`*j~uOM z-6JNIb#xbF?bOSS1uyF!FpH%EYv-?-YF5bqNZPt#Gk)8!nr7_44HR9*1VJ`ZLBo&a z$ZW0#{xH>`Q3Cox!Hfi_z|jMdS>Gk)HzpJw7T#EbR6?(-^u|uN9BgF!*PjUPfxg7j z{AS2_u~0oUXp~O_E?bTWvMY-_mZ9Orx&XC;^l)bhjyZT9aXWYL=9_Wxcg$+DP88!y zsziK=^%r1!vE6k-n%4kURwv}a7mv@6&n9;LkR0RCSAg^9h41DVMblr?T9tS|_sKJD zIpXZ%R$_}v+0uB`^M5-*0Iav;{`|-VHN{~;$ExBf%TVufjh9+WI?)67zUi0PK)>eH z=g!PcP71w8?>}YA%-C(Tu7C61l}Pg1$tR;(w!N?v;n&t}1NEk4(u z4b+SaGjDVF>j!c7urC&Gd(w-%&BN97PGhWaY z_X$Q;7B|hH;iU$jWR=)UC@0r*&-#N5BV=7JDPL-$(PzT2x3}FWbT?h?!B1Z5gXdcYVZk9XSnx9wKUAvP zeJ5Z4=sJ-~BUyU)Wyd&zjt%Dy!}L*d;)h51_bdrrFajeuq~oWPXplSeUBUG7;_4YR zwMy-#4ih_|L}uUe;CX8uQagYNi%+>><(H`y1vL$5nsIV_H@eht#7|o!K*f&Ts2WA} zf7p2%3LEXc7K>>RHd*28djwYt#>>vR8hYnafb{W;j}0vjW4@W!+xSQnY%t&L=mr&l zLw={PG2_BRsEU989qucVd8syNcf{kp!z<+RBpT_v-c z?iEa~D6WIwZH>ZCZumcpT?c$y)z#;|r}eb=-dmPsNtWdy%eK6iw*>vZD~s>wDo)W&V7>Xgob`!@)Hh;3GbbI?m7Rn z{s$JTEa^a!ZswydMylkkzp6*6g5Faco-3fGnB+^+`(}}gpV)C;VbO)V?|f(1E>xg} zRTBn%JseRK9NhElt3gjKJAR$XXOP%q!ZwQ<3U)^uRUQakg*5p9uhk_z5wiuohkyNWlT8{$F=$e14Jbq?%|J4%$w zqL{I@V#5_=dYaxajyh&w!g@K}n74+8IN^#7%SRm0!e;54S`^x>adetZmL6uMOKVbc z1YEHjYz9;m^%kYuS!U~xH4>xm?c9kffXBt`Fm=N_7eLzfU3h1_KiL6E+j8g`#%YOs znt_D&^V7y+PNQY}=2b$jQE70ng{L(LQ|%rxDxaLZpeuU#?h(oI_Gy?TpKfFxt zQUM+8`~}OW{J3!0087KE;;1xNr_S<%fAav*vH|bP3#<8hJyo@75sKOuUsyxw)%?0` z%e~SrUuUCwKv~zp3=$$SN8!<^;`brZEaO;o;&^L+VPx#i zDpDv{@Z0S^bwnmniXeOxes;wbsLAZ;ve+#cqS@hG?_hOV!Llx4euuU!Vg_c79CZ@+ z+Y@jYjpa4{KTdiY)1Ro8@NG>yR|;J6>2oXf=z6%Zgg|3ZDgstRe+0>;kpY!lO^G!M zKD~k*ox2USjc5bZ6yM9-K=w@2t3a2RC_RFed>g7A_;l#jD>wO-5vgB7M{NeM?X@>OV&EN&|Lyb7jnm0;#dXC*c z2fp!}=h{q;%-w#7sHC6!bY_P6gt&Hw@lOtssYUe8Nz^%}@l(@$5Bk**b6p>C5%XOu zY}1s(TxQ^nty@u9&UJ#k@zhzC3l#fd6WbM&$jTd=M3$Z#{_pu=VK9YOHak@W{Houu zg~)&j?jYQv|5{9}pJZA`QKYx$)KMPnF`2smP};uaf?d@VkeDX7Z(8JJHj{0O=<_B~ z*QClVSPbOww{|hV8bCg%xShk$#9zI$H2zC$BjJ;ir@vX9cLc$fe2f#k2r*|}>7YsNR)Ywk95 zk9^#(b_+&$F2%6Q#UJO}nS1oVLY#dtphqO{i+#_?E-nkkG)MDuJS?Y*pvR z7OBW;m8kkIokZ&H=BTDLt}WA)B~IC_Ehe`q{dbF{&FC_vz26(1IfsJx#&LQdoFXRS z#qO+~9Rr8e7QNUm;3D08n_~7oal_0vbBG-90I)(N_s03lLu&sEeELqSJYs9N#gL{R zHWUh*gf2f)HyF#pk`{4cDN`~G7ba8|6>HTLDUB+*hLRB98;yAQi5lH+$;IPz?+6;6 zQM&lEJp0zfvj`obG)fqmpL?lsia3`(Kn$zoRk7=ye*aujt`w|${lWbKqQ_de$mO$7 zcDOash{_M^yj)&WZH=+OP*>M@y;>v*1Vu_tWsOc1EkM2>EMGonG&dToh8Fs>^qK}K zWwMAB9Xm!F+S@t4uFZXMxyWj!M4{#-^-v{fhIZ$ZtSI&1LOlS>5>R{YV`u8;*X899 zWY(QRQ%EjSDq8(Q@aa9^Y(`B1~k&a(= zTQ?8>rTfIC^k?MgVtRHG^)FR;sg(jJy1}6=R=d=(J4ko!^4_ExwhqclT8B%d^~_1P zx1pd`(5$%Z|#$9cBuc3bYLa={hKX!^7ILc#heMMNuG>1&0PKsU92zbAXg5 zTVRRj!{2Y3m#=U-nn=>mVy1bbKjj(d_r%=&J{(MyFr6wsSb2+(af*x47NmL5;R^69;pqBa7KOTID_?}f)p>b-Gw>}1sC^K1_ zO;%$o99HqEdx4@pkA(AF1QF19_ONhL56AqN9VD-_d82@XGVZ)a=Z)uK;tjg6h`5N} zIZM{h{RnLs9c8wVqoXwN<@e9XZM<2YiMgI!Ja;`(_WM_?D-i%+Z0YK0q^T@lx7gEZ zA6r2zZ%H*bv_i|o2k6barlV1&P`#p5!^f{>QN5v$)6SHjw_GG##_Xj&mV ze>wv8Z=tI*2mq=R;L|GhWmpO4A0CQ)>})!2{m9NlgCAh?7hDKuz+Pr^8GIl;O^~H! z@Eb0c^%TAzUfYv{Ttr!X9&~k(nJKJJ?K9BxHp{m#w?Fk%{T+88`pYlZ`jW`k@4dl%mG$fzChhTv}CO=%)iSOImF(kxcQVTl9 zEDsXoB=hj-h7oJ`L<|ZNRKsR(FK_s_GjJhidA8eop|P+QmgOeOwbFW9RZP|-D^3!B zKiV|R?PpTm=xN4)u4AT%=gckpF9-=84q?T2SM+h{JIDhTYbz{XZ~y!By@yIrUA0=~kP^n(l=6tb&_)6PpIibH!z6mEmsU+yh=i#AeyxUGY7|R{-O$vt5H1h((K; zMN?Hcfr{`y&LduxlY_!a(|ckTJqN&~urS&weV3!xciWCYzgIx0!(n)-^MoktiN zXlAxl>Kc0rVJ~h$XD#7XMk|sQnHO43%EAg}yQnZ)AgB_00zT=BFs%uo+fUhr_n!Dtyf+U5E=A*=ZcG(O$`Sx3~1s?=aNmO!O{L!qsXtY_AOdg ztQHoP7KvI_WtDL`y5d0)A28_D87!6?4^tD&Kx*I$Rhf_sLCF)7I}fBC`C&xn0xCO*5lyZi5EbG^ZCXao(b zJ#|0ybSxNFyweglutAGeEj-fcP0jF}3pk8Lq^^Q24r8Mnur<|W{<*PM<_m|=RPs2} zkp0k~VyJ{Rjw|f~SD}wmDFp;X7GjPu65!i?ej6{I(7roO`CB#uv$C3MpGn#oh8&xq z$40ghWAv?WP5}a23SMw=Ny+MxlJ{b~Bw5jinQkB*?J zQ7|PFeA_R&ke6M6R?j@}J-4&ESP2$TAoE5wCF)pAoz#|=zGXI4>+QNaLh|6!rT;KM zLd6UT6%h-pUm)>%zx*8xo`ZKHVrIL1Y6T933(AH2gcslp3j}lbuna-4gl{FbAOLUX zBe=Xjs>965=v7Qn$K3a4_<WRpmI6Or!FW~>dJ4X4)rXulVLo2cmctJ``>)sauX z6N81wf#a`jW2SgAwJf{k2OW6@&NEO0{L2OK`D5QqyiM;OA#NK5 zuF<+M)R1g3fsn`CF*Nj2#j!gFh@M-IRH4Bd9T0stP|gDSL$Yg>o*sA}JpszUfxev3 zR#jYf^jI??<~3e*@WQ#Juybhz&x8~mU|g3nf3rEEyrc+#BjgJ}Zh%6~y|-R<7LC)KvFVv?M83%Y>u^_%TFM<;`kCjb5WmL1xAUPy?rzPlp;| zKurDY!i?qr2{tfN!o~?uEIWM6jX@(9w$B_LTiC{67oBap39cUT=ZV;G5({#Uj#jdN zgdPJp1#ie-#WgYe$Srdho6zOV26Pi{0$|QZiGk-56R|9iN|N1}@p ziRV>7(xuha(s#k&Y~x^8Y5no4na;`riK0j6LwPgJq#-aFw zU;lJxjG-Hr>Vg*fK(3H9XIqZG5yfsJAeCStenOWI5IXt~50LBUuHfR4r+<%+Bmcz2 zVVHXQoX9Zpal$>WGMTy)FpOr2`vnq;o+X!#(&<4oIwQ02mU9inWJR#_AMsPkztj@5 zzy_gV{)CtpKQ3eLhvluWJ6u8m2SF1eB!Hn6?aO05J#U!x37uV61se@8$a*=)l$nJe zcmN5{YUA`)&uRUptjo%44Yn-UmlHm2?kn!Qg)7E-`uzQ3Go3j@%FlhxmfV4A*)%Y4 zS7&G7zWZQ?4Kgz@UIp7wiQ}fOsWABTqOlG${YgJJRKhobW%Zy>s!Sc@#eAbEJk(16 zom@6Tw+;~Dp`oY70OC&ZZ0Z_AR9r8Npsih+kfsq**~EU@L7ezQM~Agn-*LEn&6pKf z2HdN6)TTKrZ!P1il$`LDk6UVYukom&3ftIf^zLng!!g=T?gKxM4esBpwzS1*?yT1Z z`YjqwSp~q*IBZkA5j5oV`{rWV(z5Hc#?M&+#4_^$HE&X}nPuH&PIt<%+0Df(S@PGs zBgO3stdzfX_L7w|cEk|g<5-}yw22%VrAG$Q$Wj?LGsdsS$191;=<|4Zo*dzSd_6Yy zRiB}`(+?Xlgo%|AVky0n>4lo(5Kq7F&wpkRA*KIDJUdAcLW4@?HfWmtNGA3+%cXLj zSjA@)i{(9AVL7FaYF*uc+@pLIH6m0J|32K>`i@$k)a$f049z^*UH)ZBLHrHSzdeTN zSeKR3>G|IE(&Sp5zCvTvBpGq-p(bD$tZkG@D7cJ3^bWI&9ICvcnrK^6uYvfBFD>ru z^LALQouHkSr=B72o(C>k7@fubt_ni<3}ir-;$5ldfkd%nS!Xt{i+R33R@*>UI3UO- zn)14dZ!UZn3q(En1TKf0bB+1nw-VR&Rud=b31k@?d!y4dTf>8uTFEggj#uTB%cAAz z`ELD01^(T5FIi%(O{&V3iCX$fGB`?KIz*7=b3fUXOy7O)jg__WYwo=toxj*Pe)xZ` zCzRB=_iP&|W!fAqb^1Ylb+z%lA&HSc22)e5Z`Y#&*jRUotYxj6uh#IaqoEk={gGEF z0>Q2F`jsx=JLZ`Oi=&Fdpt4L^7$#Kbmy{T5o1&D-;ZY_OUbpT1s=jik03tAs!sIJS zTUs)1tD`BYMQIH*s2i2VVDF+}@1B{LFAi26P)REV`Qp_aV*n3x+Q>?a1xw&L=Dj5r z>1kE~G!l?UE?WZJH*DUY%!B;=RY1>xX?u-$g0Af#`{%y*GJ2B!9kGSJ81dR&Q)@OQ zD2J?K!^)Av&W+biNF9PDC(rkz>Gsfy!YWIB4gKcGB927Chi*K=iv+-JGr6(a{6sFM zAHfE3mTM%gdEsDHWz9+;w7B1Gwv`q+MG~)AVD<#%mE$#Xpe4|x*R~46z%~+q_Kf&- zm6YBf;2HH>s!TqqPb^nUC^CJ0clWy%T>`lCk|3%ui0W>#lg%XI%?o(B1?C|df-cEf zXwhRspt4*(39k1%3@Oe!fIPCu+rI_EQdZ|cj36inB=7QtBDRa~4D6}Pnb3d1x`{`rrf^t$$8KWM7i2Az34ZFm&orIz>IPH%ct14bFPhFG-7Ol?RGdAX7 z|FTU9dHeC2H1PnPE*=u7{SJZ2Eb_ZWjpWP--7$!kEs>eI;8)}mQax`mM~k*r+{AoU zetaeUN1L4zaHKvNfdtgu1&XjbtSU|vnStH`28HagzDk+ME7PQvh5%T?N#8d?LOyDJQ>crTEc?deQDdb}{I z;hYhelwSeY9SmoFusH8hup`DM6Mxu=N%)#I3DR6yJ%9Pjz+h%)*t4Mx?2gIXgS>ja zH$1#8Eq6%kB(`7HO0=8?j=C6afu+%Rv27w1nD686{{HWy`)V5H;M6V&D?-_%lJmQOmJQ3n+G_dN!Eb|m-xOAM%mRQG@$n9XQ&3}N2oM$!W z7%=Wu5E^Aju2&R&*~0IYwj#lY%$Ke2w4poqesKR~QIS!{FTCKyPk&QmtgSP(m>Zhr zR@}Fd(VOy7nI9mAkhwRR9oh0 zupyVE!%k`bN@I1zKoMVkJh%j~248k?@X#-pZHC592wE2Af1Avvs{lu0?Z-`~B>;e+ zA*c*mf>>lw24{7KP9unM8Sk|pGw)0c473C;zHLxq5e$EKf8< zXKychr$2Z>ztAb|T!(}TX*6=!0IVnZs8 z2HHa9LZMVAkP9gRvW4YVqu_P2cZ8l8M14yXR{lz!>9Z7ixc0BigG75leUV5E`^PK# z;`ATu(DjKstBFV_eTewIykcpA#6dX+c%-9wd80;X&e5cCOOa?Vl(~iB_Hq^R z`SJe#4~?*k)T&SYq_McEyb+rBhJRiM)I)Fl;V;B*I&SSmUovkrow)6~T8UejIC%7` zss~ywTknz-D1y6g=wZ?4BQR@+cT-CsJ)iG^!`&QFNc6F#vfeyW!a-cl0J3pgK6Hn- z26M{>BUl=&abP|EH*fa6gM-73q(mcWl&GZ-rqmv)LEw5B+Ld2}&vv}H!woah+?Pg1 zp2MVj9e|Opo$S}P_ytC@&{xCUlS?Wsnvj}#Gh97!F&!f+gzkZEtKHbz;Wv7Qt#C%p#mxcq<&g^X8Z9EHt*TVHnGl4QCHmI1V2y1#JG#?2Ricj-S>Vm=okT zMMP*&3G))NL4dCuyK;F@(a_mYr-1Wt!VqY4{uif1M= zu*qC}KXdBtQmFkDocQEe^@g7u4?#&x62J3*b{%29_^hhx0$nn><#6ryQ?0idtl)m+ z9_ZT=u9pP+ECLVxb6x~h8AcG zhCPIBXpFfPHrRaq8{!4}@aX+LJ?OJhsYX@lCzS$IkS{HYCl1|wvYildTW>tRmwCR& zyZLA@SEUwo9ax1*tkauoV9{djmL*R53vzgr9v(!K;HG&iApA4djF*)aU%&TctnzS@ z`RaE+MFpQj3%rn{gt;3D0o7``m?w6LVFE`MQD-g~fx!=xz|cNx^Hdj!U@}^f>7Cj5I2JDCaEwPQ> zjX0|ncIl|t$ebh-bI&6$?r%qvqXa22tK}Y@wljo8R6$w>wCfU`khywX6zbYD4cium zHa57KPso-TddnnowD~b} zH6^ofm%uSN?Dlqt zeIlW)u;P!4W2MD@WlY$b8sK)KmL3x zo87$2*J0d{I~~kEkxv1XA$4!>dw7dlS1&gj2NqIM+*e8V57Q$9XxWI|#+~GtnfuZ^ zUIGoZ)4#r~z5S{7c5Bm%P0!U|ir!)hjD)J2*`Ikn?Oxr3 zKNQli?~=PFxd!3Li7htbFs(e3Bi) z<%7J>E@4b@KLx=k-c=8r)F5Rnz5heX_;&oCQikurHVNA%FzW1CVZ+W+@SJIzAZ~Ec znam4cf1S<%9RXiw6qa~O$>Bk|rw^?dR#|j$ipf=EaVl0Ynp08f|g$U zPwt_>)Ua&yt z^n&WfI%NIX7myLW8yY?w1y1Ny&58S&21+#QyQyz zG)1aK_NuTzDr82RtPPdQHhH3s7_O_^Q(N22+*R6I)pi?mn=b%syYNFonwKxSq(qmf zfMsdPB$R>*ptInIIRZBPkXAN_)R$cf7lXQ7_Tz(xWVilg1Dn%JVPHq_ap9&^;D`U_ z%V3V-g_j`?UCr!0#Oy!#F{z*XQvxsT{U3Csm47|cZ1vaO4*$ON&p?jGwbT9n{v4+0ti*tbtZJbga9W%H0 z_;GuB^#-&jr$r+1k44#hgpH-<3W}xm%XzK`Q8QL0+e4oTlt+$&`2#>b-VyD z$wR0>Evr_*)^eb}RCyf~@a4Wlzk^feNCAbas-?$Q@r;ti`-kJE`Z0}H5R4Ux)M^U$ ztlK3#W2}(x4i&lh71g>+QkF{4$b_UXe*DoFmyi-Uf6>$T>}U4&de_BaeU7MX8M>|3 z)6=GJ)V6egH8DXzcjfjNkZbS*tBLx0jz=F41Aio65ezAA>FTO^`Tm+!W36Q>MOZ2e zRkjU}AA#W(uMbzfODjRV1^q!~i6*R#6HBb6nV3Ta4B)UKAXu~4P_oD&P^);B9#L3R zTBeKZ$}6V-2Y1duiSQK&F)3hA#j8p37;zyITF#En&ttm0hT?!bYo4)&V#I>2IL;E` z)B~g)vPNP)7|LbSeff#NY^pO$4#@r&6Md0;cTrC1_LDCI2b@jC*BgXNgW~m8m0ic_ zBs8|onG8LN{>AWwnC1B5Oy)pG$6vvVr699#U{P36TxsPXgd=)3!FilW4p3>i?;ixJA{kqNfz89qS7OIxWvTv(BZ7tXk$b z_?NAHm;NsLpym12jj;a&;xpm|b9?hkpP7qh$Lunm`LE<1!>{PG=!g)75 z6p0JgDr`UC-yy4smtkSq^D#RCU_lp==n@*OGRWNuWhVVcEx>Li%use;B3<>?5rJ8D z;ODz~d+9sSWz2ah%+_Z_zh>;*%Au^;|Lm8wt{eVkZK-C69a?ArMO7EVH9y>))*|IQ+dKh33+ft77B^0 zI=fN;m1G=wv6}CwOH$Fgmb!=_-R~p>y=bggMSl)R2d4D#94!)v&^v=jxcs%BK5{ap z@QD(K@A}cR#~5U?2qhkuP)Wv8r1PyHBpw)J6a)ILn1X!Fx@%c6+5dQpmh7 zmlYeBt;MjkSm_BFMdT#|ARb9gM|Yjv z=?3vcRD64VH5IJ~@lb7jPGWaAQqU_LJ{Y7$iZHPA@P!1YFgRojXe*LxLUH1cbppMH z=R5!Su-RI3Xn&cz^x)w=Aidewe)j0eTDeP@ICjsEpF2jM0_n*^g+geEZZK!1hjrv7 zwz8sP+naIexhdbF`~T7g3_5Z_65ARFeP-DWaY`TB&usdpGVH_3AgS)`sa4qQGL9^! z7T9Vl;ceUMBNQmZjj)GS)rEF47d4ZZGxB?xp3&mBhdfwIPsM1G3KXBf$>N%jLhH?T>zM~%EE{40xx7baR*NunBeoW zR|CHZ=68bok9`{OlAIn_vlNePlB6u(Z~)dJ|ILu_1$FzDC?oF@(H~*+=V1b4s6ZcI z<+j55Ps-(_(2!hSW?HhZM_`e(ZXeZnrP3OyOOcjXs2BVD={s@8ctbzm5Gxb_kBPrX z$2-4Y9u7-V-M#e+w^zZD7lGb1)=;sA_J$~x9&jS6Ima8E$yfF?*!Tdhay6L;w{EnSIrL4r$f6NRZSO#X!tGITWMP%S z)>uuIG-euORA#`n2lsqDo&t?Z>h(yLk=bRnluE%|+edktDzT!Kr)=+ba@5iB3@pxV z?gc`se8jKaDrZzBW_)5OQiV|N*oI;v_BoZFq z`2QMctdnP-=fL~`n8OzL-LZ*OEKKM*0<*Mk0CA+2Vy~n?2o_^squk|| z&zq%KQ+rb})iL1y;h?^Nid2?B+F3|QBTBBZq)6b4#k~B=8a=Fo{ugsE-m{6Ws4CsF zzYgdYYIbiv>-{C6dk<_n4xf^GV{Hd z2HUwjB*Q)fOvFOUEr_G2@j+>E9ImH05|nJ~lSQJ^x`Dwah0C4QLVF!(VM|AI3D!bl zi8p-Su02U4;U#xow2oQbstpL!lGGX0cMjCuBY;NlBF_Ew;1?rVXQJYn#zw$_zRqi(Pg@s{YhD=~Y#Rsv1km zlBzLyCYBV*!%Ie;_sEtU7&9viBUC6zwQIdO}znj zBJmJqvWZBI-wnZumgft|qy31lkBv5oyvq9ih?={xS{3k!>x6DUu~*-;b5#HqjyY#G z{n5~{JA||Np5`5(bO!G|<*j-^TlrsytWI!&ZvQW0uf!MRh6~GETH7tu)KXhht zKpxLiiGY}2&i6<84!?s}011GOq7yT?*?;=*quPd^Ae2}N2b%T7wh`!pzjx^?&kl$T zI)3J!9}f335|dSgC$r?7q7t<}l^`zfVCE_xU|y;DK@EftCzw@Qv8fRLxGthBDj@c2 zcf3>w!y$t5hpAA1qgD)buf0p-AYe1prCypht~f@({Cap(_;g;tYH79~mGfV`ITkG& zRn5m=EGHKmF+ik{Q}h7tU0B!8m03%CBEJ&Au$a6E>;ic0p56u^qX)B!rC6U77Gtk1 zO!tF#g0b=c>F-yxn7YQopw(1pIGsdZ<~{gaiut~O5%djr8$yQ8A>#ND63xEOf;_jd z@+by*41!B9^?F4LPHDBlP?tn49q3j%gUT$C$+Q9J9w~JVjFq>w?QLyMG50+R#rm+i zK~r4J!XunJ$a4G`SO&s4pg|m=;u;2iXZUb)n3^TAVsmc``IEd`&c#jtFP{&Iu{e&s z&}Q7x?Zx;Ht;)!Bx|R}BBJkFVgo0z897Dyj9xilejfT~#io)p;Yr;A-O<#}KLa*xL z>mmhwgHhxy)bKWT$)l01;q`ds99c-gv)9*P!`oB>(T3}*tYLtVeqaN# zK#n3P2Q~`g(WVudQU#QSr2eYGJuziCtO827DAj{(zv{a8p$GaXjS9n|lkH(f4y}>$ zPyy&%0(^c|`R6@7wQoQSimz}M3FT9KW{CX5(9Ssy^G85f%gXWe+!S0*HW~#_oQ=WG za>dV*w`LdS@NhpEYh8hwTmieO@&*#^AnQwX3y+>KJrA&9Q$7O%<7m80-iU0xgSq(CjlG zuMRC9vD6y}XV3%f=$wXz9d&he%nzZ1?$hJt`mj6-gd!-`2bI_}ZuBt2HCshumxEG} z#T7b3DiN-;l*$Vw8iQQO6`4(Zfy?n0!F;YXTmKn?6|uIsy$kbrU>2&E*{U1HnKj__ z@hrs{0Hlp<1&FP79 z@8)Sk9x#z2mtVzQ(WNLUkv5Nxw<|q9aQY!7-`-FIlqfyvQmSjzg=#XeH@=&1>Ba%h zSZ(e3wYALi-F%J5#xod!7+uayq3fCNHKVPqluQ<|ATeKVg$$7~Zy+>qAhlq5lzN#X+oaP(Vsjf^yPFY`ERfKcej@#3v} zE-HmA6(_o3)0*(UR-oP7%RH?$!Fo8UU5qGV>XX(%&|o*fs^?iJl$9|adBuyQr`XMn z*%>;V6*)~({|#7yKLO|O$iXSyyv1biJkDZ+Jo)g!=YYSuarJAepQj1BF_v=pV1~0_ z5sgag2Zx%K7}A5$1W2Ev;;o%6B~<5-i%<`1!kRW!0rOrPBw9Q8whISUt(ymM`|{w1 z`e$%f3yB8?&c|U_E3V8G;U&_3LPh^6E76_@9)EmDsL^nH?z;Q-wr0i+p|UjK1L#y% zqu13Wh|jg&HlxPUX;H`2PIc*+aNh^tNeVO?UdgpTzqy6E@qt%6hB^tSKxR z8o`a{yXgvZ+S0pDW|2?XFc8*|m3@3M49{|eLf|0`$qA*$3E?Z>?Uj*@kiGUz zPoLBd58r%W=GB(<9~z-LLdrbQ`YwD(R<^>;0~TUizuIMKF!+rv==~v7zWS}7K6GtD z?iZC@{@ura!u+0Duay|n?IJa|f5NMd7C=qX4j2A0(gIBpcm_Mf&ZC01&0kVgE)$A{ z!sfDb!z5+6J0$yES5H#L;s9l{i~U7feumghZzJ6F2XzEV)99B{&~K4Gq@(Gi!A7 zY;SoaUAAqK53B1bn?no)uH1U!$8;TDRJjBFo-wA0r|23~0wp`^NIj_(I;x8VGU}Il zRkeF$aSZnR6b!UzNh|YS%{4b3s}`uhZS6a>zY;)2X33vBukJa_yzlXggrqu>t>FpL zGu*JFt{iGGB1JT=hZnN2xolnTg%Z%qgK5Ige4%VwI(rx_+B`!qvlToRE`UZaMDd3w zDN`(nPbdHzs4AhhJ%US9jo53UyG8{P=lL@b^OL7Rd^F>#bsCQtAr&szaHGkyfie#oYaa{@HCAlf)0{7GjwG&e*85FeI*MZLgMr>m}tez=RFeR8e&U93o@@ z<9O;DkM}(@Fu=aqG5lsK#r&K7abWh}%mJ-IATKHusyNk+CS6rII+yt*eNpI5C^eel zH6AC;xs$`w(6!((zj=09Wt_iA`H3|Ma`Ox;IUCOZuVg`&O$rPVA3jWPP{XgtYiSd% zDxkmUwRN#ePYhC4ar)3ES94SH=xw)Wkd)tc;<~-e&qt&d!35uQh1zZNEw2x*Ut7q9 zq^GI1J7a5GQJ{zIc22jV%-2hrnfFu2Z#n{stmGsvJG3u}JafGR%v47Q8HfzSAgN8L ztM71sUMGX?BM2Jtp&3}U%czU1EUJpn%xXQn6Hnx@i3t)oSxhpUHDb&ZBtTY}#TVsacBW;@IlHl>11fG<<~0zH(oMuDeH-$R=>mLb zDCD7ZS`i^DR`X1y5eg8LkDo{xPMwno4H>HCvC2f`;wE+FmN?;Q@J{%upkw}I+&7Rh zl^HwwNE`EB>YAI5!YM1jTwMv~%Exq%J;OBElnT&vHK(c(`VULcs-Usf7*iG&F@IH7 z+8b;&26Ruz(`qbKgk%3MRz}0ha&@#AWP~(IjTm#BHo1^f6=j;e^~S&WQD-i+Q`|_=#iS zN)%+}fvXNwqQHmE1I!onZ_#T^09~GHPPM0rUXim#CpOl@(>md4zjMaZwnKj9>?fFi zT8tsEI^rbux8%B@YbST1x1Qlpnu(|BYA7*XKTEWZGpmOK&_OIB(Hz4Gjmv@oad~T7 zmE2~NlJby>YppI76xCn@)!OSKT<+rS`!BC0guK*&OV2;so4(fE$dohJff;^pN!6oC z^xMl|x=G})Q&KWgtX6~y4kjczrGz7~i-00n3&E%f+|BjiKPf2j;h_(F5%Hw$1hji) zi`an3OH1+5oay-IktV1s`z<=aSZDnf-1c)ClE@lBL=Ti)H3OR+$1Vl$cqeL-ODhVt zUvo<*UoUFA_TUC5bEw8trL31%elXhf^5xJUxA(`UKQq5VdZoOq=+J{NF5_rLQ$POh zZZC7V)|imj%gULflLCFjzhDz{w}fa_R!sY)F3Q#o3nWQ**+5-L203Aozr3YjvrisS z7AQic>c&-mnO9^R6T$a5nrB-=5=Eg*;H~U0zt}4eLhKqQUS!@)9Y4X|6fSn`N#y%` z4=y{K0Y5#LGiNvubwj2UPjF!pmb1M*)^@Dv`18%Ks4RCocy36}&nJq&bh!4y>w#Z` z0==g|%}Zb?LM))?8`KYa%`B`gIO=}GrV3ycC07Df;m}pu? zgmuy3HY4zv@g1`%Z)>GW`qKo^IhT1k3W44YTfo0+ z_O9F0#8Yd94Let@wyiqYNkJhmbJ=nmAhrKE&`;Anf6DBp52HJJE_wGViycNwm0oy# zF3)Hvn`qWxUMxjH|UOGnU!+y$Q%lZFj=_Ij|K2lE{p;sbeSZUOERFHCkuNhWE zFs}zzUQnrzubmAM@#gSssKioRy)Wi$)x@R(LnP}TNmhb9uMZF6XmJZxX(_Dq#!>{cRE>X?4_5H+!SCSN z0x(*jPfrn_(+c8hdUeYb42d}bGD_?oCHIYbM^e%(shB2q&^wU3Gq7Pt4M(G#k-xON z`+8gnS64@+u5~;nbBRhO(gxE0ep_=J4i#=Xg1uEXRQSkZOdv)Tqy-2-NMo_udOB#Rmgl2aUfRl^HP1Z zP*J3emNb;F956z9*1lvb=2)nCsDT z`S=4M+ymc#rf&PrsPWF9LB0UFe^6iu`zT0Qc?-3?B=HE{%tD;9VV#%nDhzprFeyMt z3l&^##Lo}JO8oq?Dm}8q%l2J!Z8PlVZ9018c0hJ3c=S;-aWj{mRDJXjD(#nPwe=Ag z*sv!kA#aULR%#qQw-(C36)U>cPgs^*(gPXs-piIbkfJp>=`S}{R*+uitJ>>sxi-aD z%E_uLj$BcNsK;umA9_n80unC1g!BeL#4aR>K%IvoL>3`QNff)iF<(J27P_!*^S{k@ zfq*0PK~T=+KhM!tPu6Q7z>}9}irl5cNtxIW)0rz9v{74?CMXMp;7G6=zBXq*vQ8K; zNWfhJZP2oKb`t_vIH%dHxnP|z1|`_4`gCkg4eCE|aQHCT=9_P^pTvrI{F0;BG$IMV z@#@RBGH*wVHWtGgxbV^kiR3DQB~vuV)g6 z8i2Hm2Lt&K4@gwZS2Z%I1UaNa$o_V$5}7~*lc3kuux3N(jd*3zjQe~c?LrJMn`fMbF)^2H4zt1@HGJ^#+eR} zikk&!GxQBlwENGmGH^5xMoLsz=ZJ{{%((OcobCFu74Q|EO1(KvGpf&UTcF$4v^ z;#feW(Fh5sz;JZo0)DWfJjkyAn7q#$yW~(U=xFVMozSQG4htf1v{AVqgNVQ@&9%%k z#+pq&0nicJC#K5z%o^f4V|c{E2Tol>!@rpQD9Ze7O~VVd=)(gl*hpg)NXWvlQWo$W zj4MoPp3o{1Xw1-zXoq;@F*1}BWf6!n%OKJQHEvwr#_fq`SEmJ$vLOg78It9g0-0l= zq5{3j+tt!iwuO%UChU>2_Oxu?>Y{wimUC#Aj0p@OufS>*xmfIi-4zU~r*ptoW(I80sYV;|iH4|$3kH78e+TUnee#1(xT6pyjb|iESodJPa3)0s>BVwl#H#p+y-mWt#QA-0Q2N(M7AQ1He*QpdIL)r& zQGtb-xA|t#n3V)Ch_M4yccB-VEqs8#D=p0f3U>5szGBZ#Uf{p|T2eCig>O(^SipmZ z8IN1^Q6}TR|Nh(2`OKyJyTl4*#Lkfmbg*TVJ5wbI8DODX>KlrL%v{~_%;G{sS>1tWVJld!?6MwOzU88S3LXNW;qS)oi3o5$$ii--jM zJTX^Sw=1%KRUzK*;~O6JHQll?7$}zR0v;>aJM9o*5H=-qq_li3PZQ(dB(YsxiY^?v z;k-J8q6vwHTUBT1I{0Wxy!NJ;0N%Rbvd^3__u^It8S~=E>SY0;LC16T^!cWlN4gpz z}O>?J&=I63>NZDLT~G_ z0m>e6ihVL$z__W+xuOErKiI3|KQd-Ur^A%pB?cybLQ_<+ZrPv%$zq1mh%7D*mwp^E zl*^0dWz6RtL>D@zTO6oxi#!rXvGao-k-Nw$@yjiRRty3m!3Q8v0q}&iRbH^~G@ZVK zd7o&~7sEbTSgh8|yd#aRU*-{+`Ob;OzcZwE!s1J@p{|W#d=Wj{Q!J8t8sexc25t4K zN=<1wKdLKNm#ULjb`Z=YaZpyge8LIKQEYwV0a<8f#3|JA>^&p71A2J=fC|`7GR%(A z2&H7aJ>sHoIiM`Q&O1mQ+m??ZAFeCm(4!3e2=33p7vU`Bdc1fRUqJR);`v*XZ}-Kg z6Y>4W=~!`SkAl5?PtR57k{aQPT}_syp6^^FHt@&xPeH6f9H*D{<8-SG-3x@8ux16- zH3{UTN~h+Cu$&~M#m)udRBqI{yG~V^pe*8ev0|c5?xvaq4is(E29y;LGo9sJ9`MPuKdzu#i$ti^G5!&;J(rV;Sc$ zdtU3=X&F}TIL8B*f;CAC%=Ou*2aMFbL&5o#c@&vtnb-j_V90~p)FHbIIPoRA1kVc8 z5?9jexFwomX^Aw7ZY(laCxF4dq8c&=X67UK97aztwa0r*6WiJ`$;;~N*3>)319<#2 z(2M?2XDZjlwDIfB;~T0aR;uRwX-8wf+^BCaClvzN0m&2dAy)on>e>_6uvk60|EhyY zgn33TTvh@kQXs`7b=1U@|ZkSbYD@?L?~1~hu)HPZ=Y}gNenM=klAhUb{H|) zi8hILdi4b|yCRkfrV|PwFiJFzmN3uUXa(d*%DtG$h%W%L5;M#hJePy&*~CJ=w;kid z6gxmZ1Xp1V*s4qZ%TeT92g}ft|26)a|21wUz`1j95oH?C`-Q3BJU(aRaeN&}AdW2q zGMMb$f=C@EvY{ltV^E+ibm2SU^s9Nz#LF-`zLq{zg9juvcu&WsOy-}+&iq<|SJ*%s z{8GH3Ndemi?%Uka0c>nq=F?^E?c1tu8|=KH22DBFUy+g8gq>G!4j@&tx7SsnD~W#A zUv$}Z?L3R9WX;mP2RZJSK~Bws#ZW7kQ$l%0YtsUF|3?bIdo5of<5XR7?D8rk1n_=K zxwm}xhKnma6?-<6l?BQ#Uca~8bDj={Vk-GEo-mXtlL9A#s&2g8Qf#SE2c^D(gw0=F zD3$re0-fE*ywqU!D}XmeD--f$K`}>TT6w2PsfOxB^3<Bw*k!Qfl^&0V zizN&x9@j3I1HT4(OlOIQ>DDI9v4<{)MX}F7wr(lYwu2g!{c{*7&)??0U(W13)dohX>j%%4;{mbN`f6ccKYCCve7R9F80XSyS32D33iUHgyP_U zxYe=v+;ZUB5R`A4^)eR%8{L{G@#eq)Y&%?!w;jp|l2jEd zVXYcpRKI)qKTTuT7gHt!R6l=KyJ@DwqzFs2sm^gCdfs_2e8${*4u{?5^b@F!3}@zY~#4G=UZ2GR$7jk$)kb0>-RnYk}e=k#=sdG+_VK?ezM=IH9Q0Zmc1#LP8o z_!imh{^6*BR6PGYn1dna^}TCuU!@a5{zTV(-VM_&jeEDQ9<%|snkhZGVgo#b8KBw| zxo6M;E;!>E`16k1S7wDc3``mKv}YhjLc4C878j@|Zr(mo+_E^`)U&>ur<4){=MA=` zrxqUKJErMd_Y^67Qvc?o`&(TDlM_R*gURlY7&DVgW-u{qBU|LI1?^JjE_@41ua58P z>G=@==V~3KKcH0zL%%Hg!yb$^pH3&#s(r9F4+{`~Fk6?;!{-v7-~Ki}BC@AS1SYGv zxYA60F~;KwxDu|IM{@9-q13B@h4MVT&GBAHVHn{DVtO-)GB(6BF^hD9HUd5u(! zj4-!UA2_%xE`a8p;!WGOR-kb@QN#t#KeNg5`FX|M4H}6 zdT6iFo_52#24PRgExE=hH#@I~>4(@61MIfXSUvC!jh~+_gP|$_ThQY(ukRWcvGw=A zr@tl&=(mWUPZNj`>C8%n&#dbRB84Q_sgS8CiB2tGgtO3$vvmpOQH-xC*P(`S82J^9 zQc5NL`!Ql{dhTO1GC7GRp@8I{qUATRgu)Q zV#gJ$f>T3I*T^Jl+`03$FCT^!X#)(>JxQimTcKr#=(4@>Y`YRpZJn`xmk($94eysf zJIvV~hx0@4;6?)jf#_4{fJRYmPWSjkPKm2IsdyMj^^CmfHC#129zqF;S^7rOM5oc$^js_jwDVA) zHbSN|+rFlT=o0gCwr1O{Fl5TwCtzg(JA-l6S=vnVXdvI4fs+%UXi#`9nUEFs)bb1_ zVY0;|LN8BJa;^b(HHo-LWV1;~P0$N}XyEw@)yzG$zMfW1v%0C987D@j=RQH5laqve zaPYa<+I36(LW6>47)XDQ3N}Ini{S3)|OU6xOeYcUq1;i z6@-_1nzXS8BVk9gO>pDkK(cuRT%*cg9ry~rA0&^>Ex(G8&|lbKqLcn7@=Q#i*70$A z(-_fC52KGdKWqB~b2s8JCxLx915{^+n6LWb|CHSrgPTwD8)HCx`2Tc9?IhoY@_%fM z$tgLGMi#ckgwEf8q)q6OH6Pr$%+5SEtSu5v2@3D}zqZB9P7+Nsb6=y*sVVg6;2<|r zx_r9ZD)U3H$lz#To6gy3Hkx~w?ccsA=9XQ%-a(u{f=?_w^%L?(U_A4yHFOJ8=SO))=Mu;i{$^owCXa~)}W;RWVHSljp;5T6qQwqNA_W_(b1 zGZLPkXRTWHXxJ3-ysup7>_N}M5mmzxT{;GR597V$wz=IzgKNd^MzLPUZ@GA#Z~3C+ zhc|QeM(X<4(1(m1n)iCq_n6oEh<}d6gf~mgA5E6Rh&^4LekRMfxhcXt1g<77o+L~&v zrn2F{P+zNoQKup+mJV4PEqzOtXNG-iw$<=-2G}XHm^2=}=FiB=e0>5AtRS*+Q)!8} zzqif&uWD^YO^vzPT$`#ww>rShy5ZR=YwuDxoGoBx50g&d(kNizd^!8H-&V&gWAkk= z$N)0VpPj~WY+O|qmo*Fyx2XdG1s9ea2wd$=!qT>`*0^wR+UElbhMS-%;bO!AbxMQK z&l?3eSV}CvO{wHd3k!sDPIa9@U0VE|Wj)N7e`Y>=lld7+JTwGGGR&`hHMiTw=oTkjfmUOu(z#k z2NWIOBOV)ke*`U~b>vBP)5V(#@oZ`GzVvB+$=2=$ft?FFw=Ji0n5I2v8gPg+Ps@JV zaestIUl5_CKTQ(XO)-wK_$1LhGxrrnCx~jlZ~%Qwe*nekLUQBDlV3xv_IL22czMAO z$<~|_S@5dc?hgw?pwYTp^O^A7{ zrG?lIxOxS11#xU{DY||PJw&e|L$uLp>9GNm%;OFab{z=&rQEyWRVJ9B$p@?y=PZFl zJ~nytE6(#7y>C9j;{=j{_X!RSeHAfPl`D$nrOEn`rM6NTR#v2LYi$K4jy<-zyDv(zB@3gD*K=NUZ(fnduAqm(x#+L zrle1LCcTh^08*q$mm-J?2qFkp6hyI6>=k=k#m?Gw)z#J2wd<~J&0K%yzL`k^?)RUc zZU`-I-hJnu@;RULIcI)%JlGs|3w(DG1}h_TWK#=0;m)%Ox-x}w(M+a2nV5lDBnxA{PiLNw%D=%d_VO-5UO3h6g$r4es0DNXfW$doRQ{ z4D_+&DiCF)c#anko386E*5b30Svx=A-`obGqpdym_~p-kwWAN6 zYEf8;;)H~6u+}E5<3!IuP-wfo(^{n{lxVF=A@$2NizAs38$?;|hN_!T#HGN;%bY7ikFhQIj$vx<*u>w^FeEr9yMxAEkFB%|Y<9k3&aG>X{MEsSl+?KH zi7mVIrW(CTSC8@z9{e{_f6W-s5&A8lECI6OTqV@d~9qCKR=T)&Prs4=$R8Y zp!>SL`yT*Okd6oIot9MjS1-&AWiD9#z#tl;n?F5v$t9omcNN-OHV#{P(62UhE}dUy zY-lh=Elo|{L4-@;#Z>`k;c>WIWTaQeNEjql>6ly;JpEManN}HR$lG3!_lG|{?INKg z40mq9fZCuRi~=vRs7DM+CU?bRneV@U*=4vJE(*J*W@~fvdB81tmp1g}Ckk`(1wyvc zucQ!POu2Cg8cG}5KRKRwn2M#U0!y<4{GkQD&t$}xK*%CqfT+PIZv%sHlk33bo=GXp z3}()O>0vN6@bo;>Phvj$vE=RR1R5o0@sV{|+Hr+%_6@7pDy?wERfGAW*I?;hU-m3x zR~{^l6M9-^k5Dz^6aQthB70Z$qU~Bfbcxmd7Y)3BVRrvOUz>vuldFrMXl@bIQjaWHaN_;D z4mCA3ya!!6KUnbdfJKq9DWb7J+;MWQhtQ?qyG-Rc1SEpt{^=IPi2aa6e-cefzB%}- zoMc;=c~yQA*^|aa2uCN#Odcfyc5U|T1*JR-KYzGG_n%>a7jW=4*i-%A z#^U9Lese?ZeOWiIB&6bXw-o%Ml$PlSSJwjXgEz9rv;oqP7Dz*u4}n;8J#FjgV3k=VfQiMAiO_X=2yAe3|`n;ZCY>u{Gdgc|KMg3t?xds&%ieu zxz^3&_zL{fhp;rqer*q&P7Q>r*O<2~hHyog=;`h)fo|YwSd$~$Y4r$q2_+|tg=7q4 zXuA{v*O*`hN0EwOr-v=5*||iu67_W2_N?P*_5Af0WrwtWNmT6J)k8T02CfMD6ZphcYBheoLNvn!jjtcdUWk?k~nHw*LD=Dn2g9;w@St9&4wY{%O_#FOtfUxb` zkq~`mv$pEp#*P;JCEoRrArcT9S;1JAWaD?JCo!|zHXEW>W}#6=-H|vtCa_xh{6ZUL zJ0p^jikFNzMBpB40m(Y;NRsT%(@>1ma3YE8>A;>6LSdRDU{|LfhKhxL04Tkk3^Qc* zv1N86*K83QEYghKy<$Dv;<9n15)LIU01=`*H``!$=-CCJpCqr$9vR6g$Ql`(__?|o zv7^zgjg3j)WX12rH^uSE(BA!*RdJ+Zx_sNE+shSrTrZZD6bWEsP=iV3EkujM#z3*c zrwjy<_Kc_IfLO*+paQ4YxNAWkhUk5!E=f{DpWKA0NIn(Hr(g9^+A;9~8ilfG1-)rv z6SaOk@;d(hKn65SuR*2KkZY$@ zhDqf@N_^TqHOiZQBP92LdYN7~aUt3{GUDp656)j!#!+bnfyHyWPg?rsE%6DoDvp2I zf?+2z6jtAO&wX9MNsixh{2Kf<>;&)+4JCFDQMHK?YF_+p5NVrX^K>^>Dg>baA}tOz zW@gq_6-oI3Fe=L%I&)x6pI9a0Ah}0M@qlK)fn@+{d@JgCw+HxGRgl-7fIfJ#h>$QW zqa<|BT*k>V0>0(bERZ}6Q(wUKa|3)!br9^@fi~ey`@6fJM0exXNDoKpv~a-f8*LI6 z{&y_4Ar||!z8;}m{3g}Yey|e~;_dV}^y&T?+?(OaTC&$?^*5B2Wa~ga4fd zg~|Qt>A-ZBMV@GSmW6)lWr-wGZa+^h6_%lL{Ffr4_}oKT5+9?hdRcs6wMZQ>j^jXL zzQZRK$~b(fkeBg#mE7$RMEG`hW|bnxC5Q+zv+!8?%Zxs6U`ae+KXURZ+PacR6I ziae#)kCvoUw75B0rSRa8j?p)za5FOOLsm@|073|bHgT;aIRn=*nV-NTC$krbDny)_ z*^!bu1XZ$bx|c|ns>%4QrM1=b_1D*4i^{s>I&EhK#S?OJn?xdh;ZE0_U8NUnhBkeb$-3clyUnpdW>~>hX!4rX0ZmPCQf7g8Yu8-1BGTr_pG@v=t z3e!m?V{pXnb6^!c;ZlI3J2N>(4-k&90X>a_*_1Z%#ruPUcQhMI1Z{#M)G}u9YnsFs z6BgIkZ)t4YfC8`{qrRTn-n*giqCWIxB1*4wxM$k49kbf)`NLMTwlaL_|N4e+hi^Cx zDmF=hWXC8 zd11{1ul=(316h4NF>Mf5X!Wlqf+ikxEFMRz@!e{n-0Kx6SkXq4vN#8|#&<05vq-ar z`qoFvJWNghf%(FFfw++uPI1GMzv*#Z5Ws!joYXC(EQ3CQUs>S;zv8TwRJ zEqSn_o9pj0MkMV|c8Xk7Qn^*HXMn*%v*H3o@O zq^oXmCYtEx1nn`zjnt)yYmD%aHGez@vJZ7B2daV8y8zn0N#&YY^4d*0QDU<2mdPr# zl9x6Za`sbaUmo{^YeQem1?8s80vSyyw2WkPllDyy8 zCcA-E!O@xYd^Cq^cU#$2Jd@4BPh{29AW#?E5{sP&rPhZ?62Bo11@9r~CU5_siK9@k z^49EW=Unh^jH6Jp!hfmY<(1^~qLAx(B*nr&bwC(Y1*7GP<7Ei@&$atk6r%&}`e4uyF;w_3mRFzM zD$uaISH@KMuDZHS_4VtRh74SjeR0H_c+TbqwNE510zo4#AAM{wMyqt0`fv@Z%-2?F zOLWo1N*LjB)s-#tpou(3Q;ptjXlyQ;edo4Z&~))$`RLgP|Li9s5VIa*^o)pOQ!|4D zr#a*^EdzS`DRtNM+L4rd15cr1F`i-q?ZameP{zckpY`@`=#&S^7A?Nh*Fm8;KGb%o zPio@~v(5OE+S=bCcZE>9zOfPgy<>MA-Ja;7cFF56$b<1gR@U-&KiIJo1=WUX*wJ3Q z25$Nua?=el=B5KqQ3DtGkrd>mg%?aFk7|H`+yQj$q^E;$LY@F_>uE)>S23N!I!XAU z|1U8U@{Ci_7jo6NKxTGVAwdQ|1d_f6)^5po)&Ng>vlVN>-%ywMas5ED^W*Gk&*ZMTI5}Rq_Tet%=Kq9oMX+5$5(c#wjCnFgdR_1{3ODc;Jua`WssU5wk$TbxX$N~QECJ-a!0Q8$wz?i}_ z-)%OO2s(I0sBBp4)q!k~`Hun6BkZZ>S|ydS9OaF@Txh;)GI%@|D2ssBG^Ap%32qdvis)`o1|4 z{GL)E_4>GCK}K~9SY>%s#*rg&P}Vu;Ow$*@w&MFhcpwI+V2AvJtnFw`X$Q?E%R5p* z^0WdbHIE4fH6`_x2J9GS9(WO-Z~D(5#fINY7CUf49DnMPP#fYfvIhQ-EtQaYJ6VP* z$HlQ{+c~)&#pkdt<-OINh^=r%ON1_2VF;!i@2tpbk%wimSyhgOr96YEXl|&=wK~Gp ziz=3vRp+0#C&twa>UOS4d{SNgBbXCN2>fGBT^&`8*+z+?q!89RSJjzdev>NcL7B5& zeBqHB!i?0}osT}QD$>>m38U%KSfNeBh-C+(Y^2IufLIlo;WVU~Sl#6VK zAVQ)ftB68}zda=fKr)LI%bSymEon9yaZvyhGVyha%$yvagF~rGj*?8>uw>>-pXV!C zcj4ABR9;mVoVVn&X1Rsk&Ne;L3=0f8IGLHGZ{n!(owH;lGw7JPWI3?EjSFvC!_f&B zUp3O!sSD^qs>+79m_h-0zrq*L{#I89A}1Tj63_a2I@~DH$b_^cSHcp>)YmDU0~W1i zNUC+uv>9!q?{@7Dsr*${hI&&Z6nIg-=-RWaiX5@7ZyS2a;aiq%Gd8v)61mIP`lP;< z3tW`&&lfNR2X>O~0m~s36R{fNzX=nHAx6xBLt)m1K)gwE02w3@ti(UH_=VvqGYL!j zOjA*LDslZ3jpOS|(9;9>+g>(t+h|NIsdjW{x9k0d(uJ0hMMWY5w`A#DhbiWqy}Tkr zCg=JW4mzR+zob^;!zZKBuOMeNApFl2b#;bT2v`sNj;Z3-R+go7S#hSdp<0W2vwE8K z(n6W7e^!34C3@~`Cm*^4*6y<&w!>!AY+d8X8P>+&Oz%Q#pmFl%q+3O9Fdaaxr$-#1 z2f(jMbR`%f6VXy81UChKrv|=36pcdaxE|RN1du1<@$b93@G(*fvZ$=YJ5T%URniJc z163J z>G#CkZ}R;R#1QT<L|cM8+fkiU{5K1;l#Rc(eIeGY{)S0&@z@v!@J?mSE;RurJ(ur zPCd1B2-oy&9;SN6CcZ{}(5QL20q=`Ziv&Af+gnUTa)V#Kgzss13_pcGf8`Z=?bz5| zf4v9Z1-UVV$wZ(KC6u69;9`=ug*cgH0Zr^ARl-2&nQ|)R#9=Fv-!`3vncNcsFO4bd zrtVEDjk|$p?8K#J$Y@2`o)C`pF_^XNk^|8OISw-~spP=}>TnqN|? zt=0Lw9z5QWK*r*qO_?yLD9@82AthC8db5rQQw1MAa^}n80XBDp5vNMlbOo5aJ?j%48wHFIp@Gt>{gp?^`H#Hj!Y%K>WV z2=)w7X0bS83|re(Ihn#wo4S73MFiCbZ{HoW&R(}Q3QAnu@RoCDJF@GnQF)^@O6M$C z@W8uw;WuLV#}=TH{Oz50(6cOk!B~#T7%YQLHum023i&1=-8J?J$c|_U5B8iXeBp?B zr3?1Df`We}{@a5FyAyW-ZdU?{!9CM36XM>;QgoOfCrJTm z#SxoJ)3}KfDVfeYntr30J$%a9=zkF||qI7l#2s8_t`U@n` z0PP=}_!k-i7EvkwV_Wl$_-5*GeV{tjIAm|AsZ{ed8jjLa;?+`H1_zJ5`T#`i7+m}7 z=?dmz5iW|6Nnc1-JOsSxEi*1je$T`S!w0b^=zuU*#M~V}z<4UK9PHF0_^oB>nY^c|KNB3&E zYcGq5#6pUay2KR9;P9f`mLoH7_S`GAzo2sK_KhX53^Su} z>Do1Zv_2l6_>UbVoLSIwfr%LSk5QeqeYHS9_~+0MHS=omCm_9Z2F)WG1D>30NF+%t zX{rZADgvUWAB#L1i_lKsUnT;;pQVz>seJqd`UnHj&`G^c=vo<4pQgak-2%Gg?eSuJx^BWgy5CV z90YKslAwJhlijta0T@yTFqerGhGQX{SV5e0psABoh`5`sdm$%P7R*OTzO5e#Ks#sus#R+5sUFJsQ$2Jyb1|BBy4IY+x7 z>myrw9!kaVbf4jeCipnj*r20 z;3VA8bc`WG>&q{;B9y@w31Fd?tjvl;e6vp=6oGr;(GNG#fLF)BYi2(5B>%0xSg zY~m9VH&Ai4D%-|y;M&~yhc0bXHcxNj=T>_`818a)v!cqu0cNYyzrRPKQibwhJFeLa z8`s|#iG!jnb)C$@qgsABhJV!YI_8y$#X_1w3J+}Zh5>iaaN|Qc16@{IcYk*CSQB;r z*x1pRZpNFnxnsjllXG+&ZBTYzQ_7LaS%o`vZQEq6`%2joQAW}B+weRq^tD-XkY0qh zKnXz@ex3s=vMfjp!(db=z^Hf-yV9EpNuQFabpt(t!L-3jCb_87Mr%ncia3Wfj)4H7 zAbd39Jje%a8W5Y!;+V*&#iyEKn^GG~pNZ}t#EHH_vhi{rWlnseLEmB71HD2eHAKl0 zFOed>x_WhU^QM{_>SC>}5!T!R8pTrCyP<~c!GFhFz(D_cQ8)TAj%LO07uwqm5@SbV zrnW@~=66Cy{g}w5$`VV!*N1>M|0<*rWQ0P`czZ7ZR>LqUGlx;yoCNIQ@gVDQrc7ok z2PVIpR(Ygho>G(E?cy$=nP01!1~p*7NJCP0b3Z;j{=+&5O*XomEQ6|G3hk>LGV5 z>%KeyP({Tevmx=cB|Iml?Vqe>BBxnl5Vcf2!yB;mf`7@APzT0j-|+G5|@$>Yt!n?1cpTjbZEPq5xbg zSVGc`_L_&5mPuX0%5%o-_|UL8CtFYofmLj?i85p*N{%&J$<3(1uSVXpvycV`cFOnwgHwLosNltYsm$el++yQ zQy^7mjG5e$i5v7;+yav%;K$!;`*>&?2(x&-W{m=_-ZyVX|8(X%^G8cv_Vox@(Y7i zr6Qw2L`yt!ma(Fg2liCTi!@o#>>fmAh{Xb%QW48S0#0T`AQH1VybQm2c(GTKDF~c1 zD-$b*NKx@6>H*v0G`v#tW()F}bU`I-!%>xHsqXxD0|-iRt3FubP?V~&RDS&MOHvtI zsJBclFU)^g#jUIo31O2wqC|Fx2{5-=;=j~c7m$ha4rl15P@bkW4C`2?ld zFgTcvM(`ongPT}9lj@lT&)5g#ddY~&V2D>_C@6T=)++00$DGc{eI)aYsx*Y0u85}}8v6MpiyJDIIq+4G$+$3pi@vxVDRP3iUFTjCTE#VrO)p70@3KDV+vZ zO@_{~w?POclm^PL>=V-Be5sA=@PLZm;pt9T*QBTFdy#!&0kv0AvUtIuO;IXyp1oGe zFDx(S*D1=Yyi!bqT$F&7YnR66oD)#A-*{yZ3BbhaOeRI1SSaIjkzG~1Y+;r@Ytag7 zl)wDd1{n2bg&$kH;%L3lB`;gQhj7~}Qi%e&&4eUQMCg+lIp9ZeuqWcKnK3xb)0s{o_3r*fq@bQq7CvR#6y<%eLVyY)`ggUpy))cc=SQ=^)>)=*; zr478vVh{zF%ej~@l!W`}$B6x=g{r)a>td%(Nbfzh1>>d3I*BtFgQO!f#tf&uJ` z!8xaXmTnp|(}bkz1anNgE@#RhlR0|IAf1GEkwGr!K6B<^Bzy6ia*kf) zTQProwRi8KR*ps#yKcvIvFNkkpP!);ocr0sb1SpsjnMCHh(FVnzx9?uP&MK89$5dT zWATMG5(lqt+lnlh65xSjx2YuIR$EiW`C%DI4V9ulxJu5|FK(=}uLtM9l`iV<-+%vp zyxnXm%@PY?B}`_1jU%%>PYjB3LRU$7roS;?AjuN*GK18N9C@ivTc|7Z_G_C~^_zJh zDWQ$cmAmUoB`|EO40jcda`h%2#pkiD`MSK!u!`dFg{%^d5X2r>Y*q#<&$ zpPh^)$%{@J^9+9)q9It$^gWEkzd;mDV#d?n1$t^|=vlJK8GVs>icI1!BTux8C<>lO zkM|{F-8Psc8wCt#5ZrZ6;zATGEj_EGB!oZDZ9qSU?!5(Iuh|_P2cEbMUVJH#dhb8u zn+g)B zj~g1wA349VvHa2d@&|2>p`ejp+awk72?01ymO;@O{HhA-mY$w#AG(UkrjG&_gis=q z7@`UYSOwq%(tMC93^|#dFrzAe%3{cV>136a&g#yD^U+}fmL9LJzNEUktGoLp^fq48 zhK{ufWRiRf^uy(57XOpEQj@5OFMGHhRdr$W-kO?UV5-N3@cZWiAK=sOW%z1z77UH; z!3q3xJAM*fik~ssiHIGPKtl8vZQh_oojHQm96tQ>rpd%*5`Kt)t2+rbQSw3c!1VC| zHr&o6wc}7aFz$|oPl7~}k7-rrWQ7T%*yQJ=MLD$=l1Q<*Tr`vEc%fEG#TWp}#592< zreKL3Ftc+7nTJOo0QccIwlN!?zv$Jrm4a#t&r|)(plSbhmO{xHD9Rd)?0P#tcMVd!kq;g)B_cMEdUkg_EQ6i7CQg6 z>X^9Y+ ze~Dduj@g7B#4-u&9jrAtpq~y)DY-QM@<;qS%DTOSiPFcR(VI?($>lXM9Db4#Cm95c z@hGNUViKV>lP9QQYzF$75RchPa#pF)Cl=!&lP5V@f}x#Ip}epK72?<6V! z8Q0AcTX_r4x8Z;b1xSf7X$M_O3nd(}xnBX{@jy+@8c2#4 zbfAK+t}Ej427D3dA-;6+vOC?v99i-67Zn9TD8MIn=i-N3EFO8GRIZf@UNm=FfwcIH z`GCM|;&Gt9Lii!RT&beIPb`AjD^FxQWfuxbNDqaiP41huDyB#N)K0W#deXBuk)e zn^ztzchqYO6h)=Rx=pi9P`?VDt1geDmT9fVBrnSas1aGYNt{qJ2pHh#e9+1w-Et<^ zLmJ}tz3?Gp)GSD(Bsm|0|3P?VrmLsm!emBAyVLH7Y5P1gIEbGe9Hh>D2&ob|zE@vu zr>;wkqi??X=7(HIcZb7fi+7;I3VG0b^Q&L1g;aOh`%mu6#eux7x4*bpY~h{r%3XVW z-7~4&SqT-x#9oEF(GuMk*>^|r3-+O>s>jI@ymu@3o?PaWj+j6U_9ER-U^m zn;&f6>{IA(3-LW-7z=SA-h-VM6Zw>gq%^3ih#q5K9h5>g#~1zXd?z zlk|q?BDIgz>y1Gv&V;kNGDh6A>Mdns4tbtX-v(KGE}YMU47^9Aee+U0 zw+4nMObG zfoEodNN@j%V;AS(C-W~jbVnahCVKBYyrc9rIyRnIGlE7(BzpGj4Bcl`b;Uj-Xi8P#RD_ow?Fm=mD~&p!Ladyg~u%dHU9!>OQ73Ps0^{As8R2|-N0sF~(( ziSuA`btcYC+Cqv!F@?jV8sAq^=6<}V=R%}`UWf)?MFb5%{vh%4rR}Czi-Vr-5|` zTw{wopb7X?VO3ehcLr^h%Bl{dgOmA7idZFvOK}`7MborPK}5|;p-n*OF-cZYGF^km zBag^Lhtxx*;|D2BRGd z5Ci^fC9qhJ_08^H(vNP(=TKF8Ypcm@?5Nb_4_Y;vieO@h?PzT<@C~tcx6lqhlNw@e zSsG`&-E6S5_jn~)J#A*AKGq2rG>uTD55Rg6%2txB74$9vzBAj{Qkwxbd+_xpG3&AKzyBVe zBnxXy4T^w;?-H9!aJAfFcBXV#Z5I2(+ZQxB|%Bd1rCk@Qs8``%fy5o zCL4j@XRa8W9|1E-_lA51jBXmRnKUWt{I0HVsocbyuSSgR!ysiRE*NONRol>$3;W7* zdt-Y15#>z0KN~_)FOg8+Q(w;xhcB+H3y1M&B=Q585QH2c_n=w01ubs18GLiQjj|k} zrmin1CtjljIM>iQyM(H0-?e5~08@;;tT+I4ow!lydK2DZg%<%+}{B+8Ytb4oa_JSQiwQ1OmmmdOq9 zY+GqDn=9dDC{*kkX^~o?K-N7JkMh^KmAI#-hEPHoco@n#q{pSj@MMx&#=9ZgP zMKdiFj1>7``=njS=CfI#@|(V#lk`yEAAbcFNPNAo{1xJW)k=$VfhuoaP`FS@Zc!bHa_t!8Ih&b zUCckVAC@$H(eOpx)A-KMzNEY7%(?TWhvEIZLB;2ADzM6!>FFFOg`<#k5CZv(ImF<> z+!>C_w15KEemWoqscG7`P~N2PCAzBc@|lox+7sMfZLO`8*UQRl5+73ECgiW6-FPW{ z=*c>_Z-;wK64uE{felo3;?X@M2NMtoM9|*;dq)R;AKliC6CK}K2Im&Ag?zer z@wh`AanD~_PD^B*z~WJSysGMxFz{aSk4vLb>bp4pwhjNYjb6?4dw#+v@O_B{b)CJw zO2s#W4sCOHcALFoe!rCmeKSLB@T@b(6+Skiw{T7ov^t*~BuiyCb+~qq5K+Uy zEpI6*8(n}0WVM7;vwC{)gQ3tTp%5%W|6vKxNm>MEpGv4JON7IlL!ml+Pfh#fE$A}Y zxet|d^*T<`A-S`mLQX{e8~XEW@IBOTXFjtO1j%lrZ-#}WX)K6L2IavsS2Oz^N$+nQ zkkBOr2c6ax^{Y~v_AnVVS$q(dwi4hEhLyq8snhO93BX0k*h_*44a#LIhXy`W%-v2_ zwZvVL^Zm{1?F$5k0)hA5qZSq0o2@Q$)BLIsf=(4*j#!$-8B~d1{qQvd;dK>UkR!@oHHbkJSXq^15FRG4^P zfx8&bE~3^=-1`aNENhV32pc>Xk`gjEOtx_(JqzK4lfkQ$2HA!k%bBlL@E=_lvvZ|}p$dPA?GcsGy zNgglC-S{;xI*Y!iQqJx&zEN;)mx55gB-6$(R ze^y>z*&j0s>nKf)NF@e6WDyM9WZ&(-;QSJ@8ql+JsRv*E>nZ#(G8~MidlHBsRrp(VKRmFFwrk{DufdQ{K7x8X8<>Xt?KDs1TiCWvA`f0 z!=N^!GW?vRSKSKpl?HxM&C`SGzTNX+z=n7E)fZ{H&grs;}F3&zf~7h;0+;0aEo5PesU?=~YC9 zsi93m)MV0C5`ofPJ|+w&!!Mi-=_L?@n!IX%4&kQ;-(phjPk11ltQit#&f zL#vw$6a{yE6IGaaEktmXAXS`rWdtq4^<-byTfHKcvN8wYH$xs*j8DM0D`c+_-&R8b z^c#Ky<>5E*%`RBC zb12l?`$d003wYN1sZioc9$Ea%rh%V#xnEaIBpLhViZMeSl6Z(xP_wgF*g zq?BiuWoEu8l{GemJIFn)rw3gpzYUGsPgzhem2pHOx%nT zm@XI|CW`?JsMizuWaNpO*H2MgwM3u;Az&?Vq2+qQXXZ&cc=iIZUeM21xPanEBxKGV zq~<3o(E^)2rq9vTgLq(>O0TLg8dP4jN#)mD}e{{iDo!-#^3fJkI{ef=6pNUx|g zmV2ckX>s|Wh|auW+4x;qFHGgSwsP%{^)!UR27H)8(tqa#*@c4x9tk z19$GO_3CErX&gi9Cs>_YsLEBAl-#7(htwub#Hg}%z*fM{HlJD{whK5s4vR(eV1pD( z$+6|>G_WE_N{Qqri`6cnnJ0x#S%x4_OshEdLY*oB!-bYes)C+`HdbMPm(W{ z6js^F6;?7IQ7)oLtE@%|OHz^Z8ntFh_%U9EF7g`onBKmpNY9}Lnh*o_u9_B79GiZ|XhczA0e zluOyGF4d`d-3!Y_kXcX&rU?*5v$;iM?bN8S|H$R#@Soz8T(p0@QlE8nBXw<&#WQF~r>40m|r39XcqwL%o!oSUdxeB@q@N z0uWq;O9z)R4aSm0_fJ8Vku)K|nU{&u=^(-)uMR#Y zs~M>%&=r|z!M|4T{~aAvXv<RYktq9@Q#gHRM=p;sNT)#7T<_CKO~vgmlbD8E;n& zg#MU8XKM{%ol#f4J~f|UjGK}IFTxpJ0I6IErpX1qt`@o#nKRP(JXuCa*61;g&E?{N zBO<}XnfjbW4xp-rxRJ!@T`p#N0e*+HDTom#M`EFSlge^Qyg1KgsPxI*`oXTsTYGt} z`@`r^#Z5ij=Bt9Z6fN%sjqn@M<}UntuEP)tD4d27JV0GJf-{FaAaeB)i~R79E~Ql* z5*YBULu4lJ8$uyP|0)7eK0%p0XAzLP1DafUy%30f(C`6}?!8aK_^)3V7ju+qK|tnw z2_Hbf#QZE=9Yt4U8hi?iDu_ND96bE=tq@loa3V2Gk*!b5Oxj{!NKW;B05EuY-W*s6h8J5mC^e; z^$qP=0-MkotJ1X_+Xp;6i!e7{_f>~wv;-!q_$56f&|5x%U{O|a=Aw(Q>13(+O}o#V zWx^llUV6_M@QPNcZ^C!}RVcaFX@{Zxn!l~fuMz-yLUj6*HsUr^}?F=EKySzNUcNI=Wrxc1{Z2h1nblg zJA)+?2&_^LxK6nP2(yU;LxjxrC6R2WVz8-MW!FR3BvSXX;w>YYiXfCAm>N4K zE1YR%%cU$+i%M&2HR)mf-cgG-sB`GT)wh&iv}21Gl;By#t2eGGIT!zn#idv4ax2CGkB#c31T&GV#122~ewbQUo#(Lna z$+?n=KqBYwRU|<#nFCCVIDCSD5f{e9W_Y{FG6T#mI~@KJn5fWzTwYW25wM|NZ05_v zxhB}_CN;45)}1>~{r1{xJ9i#EipL#GG7;gOjO zMJ^S5kb-i`eSsc0QzlGJoIoA{&*?2mhs3GymYTA=jxUtQUjW-$&Y7`_y#3@$WQJ*A-sH3^2dO~1Uqo&**h5ZINF+5g z53brztRS8Fr*$8a_n6^$kW^sODN&dG=RZ%QhjA?n{TH(;y7}gJW!nC+a+vgE+@Mvi<46TaDqVO6I#R(p_Yq(>FVM~BCDd&eKqnNWrfh7 z!|TEd7q6P7(!Cmq{3{w|22!B$NK0$IO^LT+lwB9pzyEe%>#nUNCu5bag^RRxuZ#zo zzbM1!gk_5Vpe4>ugIw2Oef%|;Uw;raz=uccTb89UHa2tAMN6}F#`+jKkyt_PWaNA% z{b30N%DYeVhtplSpGh93c_mV6rf&}8*vYR`{*gFzC;Xa4?9ee?l-0o|?k%-q1x|kX zDAh3zQzISFJ9?b@CZT92YRj*XqXm2mOJK9by@qG;*9?hf;x#ZMaC-R19)UqHEHyuQ&|P+T|m|WL4=`MF)6dXvk>s>xNEcO)k-Z z$_*Zr1qUi%Zy!4}Gps~i0{`qz7A#_H8qBA(b@=b~s5s=Wf~nG6!XJq_bRnHv8;v^h zJ9I*aKwV3HJ~DFG8;|d0=}H&5GHt^-lK2zynYRVFN+ql0ic_)k$Mk&IeqvjG^}rB! z)``pWVS5B8>w+7=i<2XLHdQjENoNF#_N3M-HqYpTa0`x^!J} zqmzM_{2cxiPAvu5lN1*W4^Hrb;o%DEn#9}-hNzA)Sg+GHI{E_W*4~K75C0h){H;q@ z-fA&xqT(V0yN{*CO++aa?HUn;p4}V+JuSilh48Vm zq2WDU>3D|$_yVe$&K!4ZR0SkhL&sQ=zx4{dkiNvItpq8p@Iri>J@!!Lu}YMuD_=3! z4V^50y=gGY@s&bCrEo0J#uCWDufj<1V~6fg@PF#Er5v-vhbQ9e#r(6 z$(rFiCpPaT*dBa_djih@N#bON1M-}N7oNHTG&4lPxR9yZWO_~+rsqvuh1@{x*i8gH zV`vB;MqK>s$JBF)eS>#*cA~Ea#VSQb7A@x*fFUFDMh@L|ZyfR2@jH&}!$&$@tFDNX zrEl#!&qk%@u~i{h{~I}XjvY%zs9EEnfIn;2EJ_s`@cWCe-Eu=o#lA}X%V#g3obSwb z9_WkYNP!%)zf2$(vXKyW)Nloo0%hx(0V@nQaCJ@dteI5>LQ$4XR@v@BvF`4xZ@(10 zNC~9ue;yW?j+Is<&y4X8a8Aq{htC8LCG|WxN3ej&)S3{HrV}9AP$_;%%uMd_NukC< zM8${vX6f+oI{+cSPlj%x!0IO{aeQRtwQKO|tMJCX-_rRLucKK}eU~K_;JosP?9v+wEGz271r@=&Hk#vKZvtW`M0FtQhBay{*VwudJ z4GFFxpUdUo_78wG-+}MQjmk<4{7j)S|M7CQi(kcc;RF$JVxv)feKsN6HI|n4m6Vj% z^JUTkD=p@zGCBP3{r)-S<+B5UfB&2MIPo}j>%@x|2Osvm4g}278qOseDWXP>MUFyEPxh6;zVsr+)lF-jj+w&_u`3hn@lF*&|$Lx1RKETrrb!XMYETr(d&^Hzc@yq@$<%d}UIlPVNHHH!0%tm3E;>%@qqJ9#x^Gf4m?=!OI=#ij+DRtu13K`GJ*Z zJtVCQK(`_slb`4HZSm!1cC{y-OLiy}2wD`;C@rjiswyvn{`2CCFG}~u;{z&Ng-0fE z@8CC{Mg_#0@yP(VtYk^hJwvc*j`Wn`n1hBJj zU;n&HTUg~2=X%i6Gkuw8h7Q`z$yG%}SU9=-g!C_nCS)^X)H7Ct&tm#uP<)a7(q2%; zfLK4(2P4;$ydv_dNWf3$;^~YkZRey(k?y~r_~@e&(ro?oQ$7lHU)Aa90##`-(#tTNKW56G;~p)+#!iVA@gg4R7W>c>V6oU&lsd-iH}n2Wq{2S?4-`Z zxNY`t_|YHm@6^GQo+Yam7w~jimjC?o{kL{p)H&Gscf5@9soWhVm8#T-RHg=l))0G0 z4CRbWRq@f#(2*A&2WW(d2E77_kC_?tNz1+tLHR<8mo+o4Be#6ALSYzfFyN9ZQ9uDQ zwU{prOeVRJK>mOONDphVh!2?FRY=p_z#^y4i3NvGJOX2_PzW(j0m@@HNyn4h?!2W8 z&5$~~MQY;MvK?FrXuiXQ8B67MaNQm^C%;%hb!Nz14a6TSw7fhER|A*RnU+KR_PK~k5a+$#0=B~iT{;f zUe)=UNL;BZ(iGc~QYF-iMK*E|#5$ftz~|YEWfmhJvHzyz!vYnaj4muy%JQ?(kFm?P zt(ya7kI*`}X#M&49|}{wUZanp?Y{0?l3{3 zRsqiY(aD%ia#=DyLDIB7&_qbC(oHR&PJ0~EQG-{JGH1X~p#ww&i>ABwVwe^N0gXvV z<0rePr)}k-rXsqVq<)ayPD7X`Z^J@bHSv{~I-ZEnp_ffuO0SvNhPIB4JvUpKBWsh` z5|0OVAC9*jxU}N2LAhSr63CG9^hHjN@-BbLmWxA_kP|$A<+j0$tWZmiLPCqPWE_2- zBeJNo1a=!2Y`wabmMb`oyU*<`HB@+Iekmwa#k%EIZa>HT$P|Bt8V_cbXNNacp&Oq^ z*-CAeSRv0%yg~tqp^PIGWB`roRg(#JQA-@4HiRUot4JW>Qm}iS=7~T#VWa<)*LGVEjPiGL9icChdLMhFb>128L#$vmVU&f@+M<5zZX<-uJ zgkX>!W|)wW3P(r}^-QeD4{s+4qCjd4UWo)vrUHYDQAJH{{!FLWNp}yx9pm<)bD9M3 z;BTidDax&>`8qY-P+$KV%=JIDkPOWCP=W@$xdw=2c8>_;jM!?B)pOdL*_P<4A(mFy zJ-PaBu2xHPLCw2q7P?HY4yaA)iXwvnY))PArpi{O zQR}J`Ynz5-qI|i2%@`8e4G~S2t_C47UB07Uj_h)ceG}c9nmX%~kIQe7C+uGXKJdcl(1%s44>{~SE z=(hBog+Fa`&0bI_bV&*q%={b(k7M29?%bKw_$*ivF$+M>aJ{ECueQ48r5b?bx_xU` zpPiGtXwB+@N~KdIvV3c9uKUpC@8Eg(v<+LmnjhEcwjB>SLiA= z-ay?nJbdTtPeYy(ggpOwdUz60NKQLf!j#&q84DTG^Sb29dXlFQTU4Y{JP3vi@r=3r zNqd|;pDC0eowslRI|dh?++R!b7R_WKJei}UYQz)*I7J5C4cz|s8qjvUy6HE3AG#io zwo;yUyrdNg^DHyZD$G!D3ugBRid@Uit6(emDh<|YBpSI} zCp1a;e7Qv+P;o?Tb>LZ<$EO!t`38TXY^k?kUas314PjiT%;Gh1o%r6Ws*kFwKqus< z#h|!O*Wm{$QLfipdY$9qwzdJ2p{!6Mu<-@1LZ8hEyEsLe0#Q-u6GdjINX}8I*;^?Db_vuiPVYf!@DGSEY7n!snftzsMP! z`B~s&l6HWKnTjUZL~=89QqMZAd9w`4a6oU!^(S6E*)1yo^5wKdJt=YqZ<0x6Qiq;? z38W@Xdy{l`l4Rpx=}cXh>VuFho#XX$IA}C{FUVCMtwDW%{K2jesw8xX5-ZMb5-H?m z*_4=P^Z@pc?PLeEgfxG%{D9+@Bf(7(p~*6iixL0Q2<(yM!ZMKe|Iv3NM@o*G{7XuFf`O3FQ%t{f z?#Li^@V5vKk}3-)v0ZcvB1>@gOC>(rybCXHWov|u7oR(9z<)T;-QOd&a0U-;${QzI z`%4J)K|Zt{9eY|^tGl`;nsl87uoQ@!6*&-b1ia!b(X_YD6(&fWvQt@3&w z_j|9TJ9V%2-g|h-WMSCZ{O=9tMH!H4t>}EZST2t)eT7 zZZ5jL=x3IYK?Q=QvEqryqaBDQ3Q23MH=mVbAM)%1@o0 zrDC1~KLLOV*Ww*=!B4HMk#)%YK7cIdC=&UEDt8Y+7z& zG^+w3;n{d>Wib%joQ=sF+SM^T<}cX%#^>JhBNkdx0-t>*V(Qi%ovf?AoOX#Nl~#%> zu_lCaK7r2AiV4qTlyR_@@|gPhQiyFdq^Uv5Gq%k3e1*iuf{nVwn(bF&-%>c6HWw!xH(hp$s^ZH-+XSF;A0|N z4x@{|dg-vSyA^tn3c!RPu{t4rzpQLcMa9cyWhv=`Xr(R^605{;G*fCW3-N%K^MNRkn7`7Hqb;&P zO$+NevH92(!@M;zVu53*$)d#&5#Y+!M!>Q1O9(M2_W3fH2g{!*B)&Lm!X{5H_Q6;4 z()aRbn9K|tAm1j8bwd1w=?H~T7h6VL^TK(w(fja#Z*eK>UAgPC!L>iYAo70V~Q zjLpJ0dPlBXv*wnOfeX^*4Fn;q`hE)r(&0ucA9$|=K2@cDan97WXZX0NHg@2FHP1Zu zz`v2D9%k1KrP1EBbmJ@c{pIgx4nQL!E*j$@ax8#`IvA|sl}m@iaH`h2Hdy5_{dbH?!U;t+qTLy+R+mVL@qMqA#m&4l{l(oV>D+ z)9NaHq?$7MDN1=gWFJfu?Ol~P+%2^1PofKJ9ZmKUZ8Ufw9$PZ*h&#p?zg!^{C#;N} zw^SBC>s`4u$vf!ewo`(>cI(K_2_*Dn~%TSWYEW z0Y{)YehLEkT;JlEaEjpEV23D&@NjSUi_QaXGtO3Nc2WKIGRs95_{(Gnf`$3OlNt~n^oYS3jJ)iqVgME1`uEq{aH z1q?E-Mq5+ihM5a9Frl_vjA!AL8-Cau+H)Mp*8gtaz^Y8qC9H?fItbMc|h31wH^5 z_(;*!aEWi6TXyW6Vcc>-O{o76zb*N7z-9jxN~JWz_))mwu?kQWRbLojEGH0$XqtXRLj~KP1w)R{4tqanM$pwum1>rNHjpC zE1CNL(@T7>PpXk#{`5WKK4~|WOF+mF9O<%(Q9++oaPl)uO87ydDNL zXD+Tk|H8AYDV>h2JY&~cHON$9^fDZvJ#Jm4$;-m@B3f_0&y}q=&^F%E*5muC)S?`m z-3{Ho?(lrzfC?dwzyPVfy{ zy;eo|9tGJnP-6Z=b2E5VWRU)GT5Br_1(PpRC3R&@03N;~^9jwNOpPA8`6w|~rSCt} z!A8WuB}-fhOI%aVIX&p7_4RdkZNmRUBW6p=WHU7$16mWq6#F~KGxbgvm$f^!Q8f>8 z0mR1z>soNLdYJ3_Bk~8w(JH@6*`3>tp4_#;X@ndV<7+Z6rz-?2cqog!+<58XbDW^y zjN_||OYG?EJU@{@{zT%&;o&J+pv?qgHvqk`mt1nmPjT*y#;?5c%AX@f`c(QA(K_=) z0@D)rXEJ{SSRE8iHiJlq?u})?ef76N=}Y3?s;adKC`J73x$5du5{WwLUmL2bz-G-ps{o%arJz%8%_|O0CoI1Zeh-DUZm-+BM zhwsS=fc$-h@0GbrIoslewvAaf0xXOi)T7gJ3;N1$eG8p)4%)kSH{_5%++g z8#0J0f3rMXKC`JEHTL&6JZm!7?gH!^M6pf z@-ey4K7u}6ZUbOC!S6n@F-T;!I6?BvzTuPAi_ON`rK_Opxxn_0|LJ z?SRZRyaJn$OL?Fla}4cBCX<)dT?hXsPKPeaKQtV=;!p!6ig=juzT~00Ex_=n>b6Qx zp|=D}y-{asc-Vv%*Gw-Bz$qcWwI4sH<*5z?95j;SPfg#SRj7zFY z!g*ORr!!Cpqa1M3?}e#Fb5IXH>4k9tSY&eml9*-lxDtEh*!nv%I{0|e4-1xbG!u0^jkeQ(pBh%DC3N)iWT4RVZ zNhZ7o&nvmHmDA~JB0#%wlu*JIHF_UaN4bwzO2G2OFC@>Co_tzcJZa@ztg&5G*`2Cd zbS zw7D2sAqJt?!e3*yr>!24H+NLT?SIvqMNe|ANbf)o+?&SvWzn zM+#ym*wsHw3&jh&Rc0HP=?n9}nVx=SIRL;mn~De880!W-dUHHPS?m^7ahdjximKCB zd#l|mPq(#~T(yLDa#M$-BU8jnAgZvsGq&uc=@4hL(Vo7+0dE7$pT0 z7fg05_!=o8rooE=mu*gW0UvVH@!ccUxyu9J3E+VbrjUlhxO)WO2zbCN8S=T1qIxcW zE!3%B1~v>0*n3Hra@7k1=+1F#YZlM~kghfSc>*bv(1E5>aU@A00_Y%G zq*5w1JnM$3=8P5!avUgfZaH>A5An{73#FGBYF1vmnf7Tm9+@l=mj`#_o0g}5BBzUG}(oiV5&+rG&sAfhpTvXnO2)w)s9{dID4F7 zC!WaRfdLlJl6HB`ZTWfUxyVM|!Fj8M1IhWTgsXAb%TtA|0Lz3`XHw+)W0&?3Z_EIu zy4X+)Zx(_Yx0Xo07O6Mcp z!21J7UXG8C_O&_icr|mXxxK^R)U>o&05N()|KZ={uN=9+!$>P3rgLf1&kt@xKc3?m}+=w4~ai1tg{k4#VB3qrM>HgvAE1O5Pmy+gb?B<5OK|kj$+;>o>V%osbyrocYw@X z4k2M5aD0G&`+~_YATYRV5&v7r4)DR3-x<8~Jt=cBn`UDFZZpMoRoW0h*-uF=yJ5;^ zM~C!B^noNAs!SzpEgMH?r;Vk0m{4E?x!?l}-WhVsqYzOOs2)FxHb@uyu{_5;FTk29epj%K!?p{AAnJ~pZ)h!YyTU5TgDo(wl(>o$HlEJDTN^`n<1!w1kr6RZKQhP z%%O$E-)G9fkUR)RV3gFtf#hUq8nBc2_s^+A;E9{L>8uYfTb3XiW`2y`ko*L(aWQn( zV;%{qJ$5CzTDoh&ozekm4QhR86c*G5vHab#i^uYmxOh4aCDXixIstNx0Sc(H1Y-d6;fRx4Z8nPkn&$IT`KLJ*4NgE*@=ZchG6R zi%zc+;xU-U-q>O_R#o1%aNsjQ{L5j1A1A}JmO4iZFM$XZw-~?yDIm1C_E9LUFM5@^5qkrR@d;f zWSZ8&I^6i#8if|t0mg%{H9bRJHO$1aP%%vNxrTTOB-5Wwf0>3+x~26Sz1Fgj zfXg77au`Fh6&&-HzA9}btgY2XV#KWrctMGEE!8CS7m1PJcvaH_Fc1n)8o&ZbZV;_3 zg#*zh$8q0)ZOJk}pbaGh7O*J5yO|eG$-Q#~vsmw=qvdhNU}Onxg+T>Fcqo57?xU(w z7PPpza{KnG%HYK0$jrfo3y%Vw{9oOuv5OHk5f|cVtxd&{y)(+F+0sx8kXGw((3VXR zrTxL)R$IG1QQz>FV@rv5N2LbBBDGne=~)GmPb{8n1^V#Mk`rM1FsKs+V*$0ALa{kq z>&nsMlxEmDeEE<6)lEQb#DwWzv=v`?=R(#kX7`>xl`T(Abao7{?NoxqchAO&p56(^ z(xs4Q-ZyjiG;#W3y~94*Kx$cMZItF2vaGmc&vJ*ZSk%__O_|!v$>!$z3JvS=@S3WY z_H6wxX7-`aN2EIe;{9$Q#(_vdLMBKsa4}P|#utvg@sMk5=h|gGUHCyl-k?{|< zPR%NxT}ZHwy5+rWP}ezCWueY%C)H+MtInjBUKks@08oc7I#8s85yglDscD@Rwu>Df z2mbAI(m(H6qPH3pB%!a?gH8}HPTY>zA6OTC@8O#cf?4It_8htO?vzk<`kJsKw0u3P zI^j;LAcA@n8aeU6VLT_x2(-zP+8{WEtiB91QB*sMKOFswG1<~WLYcP#b90<_ER>2m~}gVMz?Bk-zW z;AXA<(hGA?6#5FhPbym8r`u${1pd`*GF7)$?!NfuHOCHTUIt45iw<@Y_6ZK6;rI{@ zH~8WhPW~?+qm>fX&ySBE0#*7?yHQCu$nr#Scd6E1TIHn?M=O$GF3s4?6m$x+FxxZ#< z(9A;0-PS|_ks+P2FU0N_HC%A>`8u)Qwejeb3RD3mE?#YxKJlG)^%Bv?p7fo~VMI&` zKCd_~`aCnQ4Gio>mH%i*Vk<3(0V@(1ElAW6e^uNkz4ZAKc=M`}e<1%)#~uO!b@Qd~ zTwB38Y*g`u&+aBSJb!f@OZ4CV`c70{zh`Sn=^1;r99u^GX+&xyOj4gY$g?VKnTCZU zQwHmSDK@xFWq|5L6lkW+uom$Cv46pD8QvZR0eVaF7-3ZR$Ed=P zUDm`|O;qd34zqTlKDBKHNQbdgYpb>8_Z(XEHT( z@dhvBa;u|zZ(WZ5CH;2z&RZ{UBg3ZLxAMxSD#2XX(R2sy)_++*CxNUf4HET7}wQI&);$q9- z<{_XHurNYiY8)Hei)#Mef%I*RS`64=?=%(_eRyaHy*l#>5j)y?=s+E7F{=`rwkOeh zja!zwz}51>_2;&?i#?ZqtCokYEZe%P`n{5`ZW-D?(+*qJD@UQdaEwi0lSAMgv5HyF zrO1ahm`_FL>VEh={I7lcVvKWmv@{^DT9*x(2Q4u_Jw|zAj`6_ud$&+7aor6Yub!BY zy8HY0pt8TUAvGLK0Uu0Sw5TZJ27PkV>ZnRkE5Lfj?D6G`L+;Sh71GDn_1B#0H{?>!HylM97}oE~N0FITXM;?j1^?b~6p!B)6XuzNON1|A8-_0;R526^`ThoK z&}U#zUnRaZ^V(u!YFcNr4I~K-YpV=WJUyc#_aECnfuV3j!IY|N2UbY`m0mjnsz=OK zC;*tFWJH&YLf7dM=?grwk~GLB7Um_Q4@OYY@Z-=0XD{9M(`)N+1u${sDcSVSQH%95 z{japBDR+->`ZBi-%Kzg%B6#$$)brYsCF=%~=U?1P>Y0{vw@N>pW-QRa0Gkwu8dTD2 zLqq!^Ja0qpHdYYA4t$BMN`@$!^342&yt>B}_Hfz~4etpJOCL2Hy8OaA#$;61?A*6I ziMF2b5;33(bTeEctT~w@GFHj*cs+oN&MMhLY$;CwlbwZp+|2SG%(Ioae3UaB|HDQS zb+v)MHcOqkwf}Ik;*`~ke97Xyhck=(rw&tQ3s>2f+anf_blcN(nj9%O!mC@H~8CVLAR+_zJ5D1gMGk(6fC*cEx*ue>zrrYzJ{_3(^svth%hVb7clAKsYS#Y(|VhI zxIv*~oi#X=Br1}|lr^o5gnm1C^2o?{o&J0$BvMh2NRL@TP}Rrk6jk+RV^ulYXG@+k z>BV}E#rs%NxBG!j9$mR$S$_E{=?tk0EgyOVmA>c=vhX#mE{rG!PF?_rpHI#+1ubC2 za|GJs%)!@|Bai9MEwFqF{jpr_TLz=xP|nGL!e#(lSxccG!t}_WL2>2jMa1@LtvzQh z?9frd(^Bw9KYD)}mN8fwVPQrm!8$!qORS7jo@f+$9O_LVpK#@!3lzh*9!-;#4aMtD zgV>F(JbB5?^J8Pzfz5wl<_mPq7%m3=6DBp!M%Fa3b?{l~b&CMWA0=>P3bMbNvKGo< zRgb7`W)_{(WeB=~s4u8}aDNX`P}F!Hhj|+T3f~D3gc78Yg3!Ex3&a?xJfV?IF#lb=0>PdM?^Z>WuW7Go|jav9oj0LNlXQgF{u*TCag{-q-g| zKaq-$w3^gWtz%?Gm2`E*nqYWMi;ZnrP^A`m&_0C;i6lX&_~8lSLjLG)vm7|4+Q)X! z#t$Z#c%{;SA{;sw;s>@U0`bFsvJJvMqa5_%S|L{b>;>kge8s@(e8q6d!*X&|K2nx^ zC^QVl<_cRYV(Iw!&&Rc9b9)8&vp^$cH_}0^rpCYLj^&h<&+J&;Ym_d> zV%F15)?}qNBUaQ#-;&-~F%;Y1t+H6yu3f)?i~1OG&&<8k#F1&O)zVW96R3ktEJu-A zPy*d3Er#)ZtV&l7wgmh&Lz-3{USt!aYBABfJbgjOPah)DH=>s3V_!aAz>hafSH6f>Xhkn)6n)PuhVf+CARHz zNmFeOe!?g1I8?iE_29eVh|1gxdF9~GI5qxC{E1WlYGP}D|D}UsStV_;awRb}^7Sbc zklHFBA)o+YLabi|%_GXdSa`{JkdF$TCLN+*ei@C8L5Hwj&<3rR-Ut%a@eU0hiKkUF3hB9po}~>~sx6eR zsOsv9eEjj9cS;ZU_MVA??=~Z43xv8sJ5Pa15KTO=@ck}y2?RfPe{j{9-l|t95Mit_ zkc5g;4_)!so9=g<^mqn`C*d_)rGHEP(6PIx=Wpn;69!xytjBG#fENp~ybTht60m7G z{oM&H&jM*_j-*b^gk}H5 zboNYEetVM&sL&l7hRWWN-arbCkc?dLz%ro0EWCM-=jIQj7m!UWCf%nTym3-xpYvwOMJPzke^P_&a2;S)3$5Oa>W{60kGfz@-ghi1iJPN#E0t zUDL=}EtGG;G-~MWRX9(%dW~C*sjZ979g}Vz98@?~T(PdxtSc6@O-uF;|EN?~ZA_SI zq$|n|wU#O~3?zgz24GtwVU~L5l3E7()G*Z*-`N}vQj+iM!^*QKykzn^$oCIIEbtEU zqROG#an~7FslEz<6v|Zjbp~^V_v zda1Ms-O(6Zwt8i;+RIdJ-CUlMZg;}rR45&q<~S>=tTm;a&P37Bc*6RNi6@4?@KnhQn+McN0?@4cu8{rT9fQ>8Qsd@8+gLura0UL%76N&M(uhcy8iNVeR|2LDZyOHvn|1Wh~*3>BkA>?*)fs3FK!DOEa=3u^F; z2Yo~hnz074S%^dpLR6y#YV}W0LfVc|9O>_UeP^NgUs{nOONoLX&N05m6xnB7c3%Sx z7OwglMgPvt&)#rWTo+dd*B!d=sPu`TA(aG42x=h(I?~Eex2QD%%aP@{P#N({MbOvX z?qJQdHPd2!|ArfeKuDr<-f^}BF=$>6;1uprzY9{WxqFOz>MCVr@P+n!QF84W>YtVmV9|Xn{3exXk*((=VumzqSY!}d@^ItlCJhc3!g2BB7 zcQh3JsPXLvn&(|c$jo`Yfn(2Y#!INM>t6$%(t$(}okipw{w3P)D2FCRgb z($C(MzU^Rk92wMT1UNSOQV1^D8@MWxlRM z)dVAGlvz8YD-jixN-4d_xMALO)T`-Py|tlq@H>Z71k_Sg?GBx;OrSYhMJB!8A!pDv z0^xldZ1)vp|E$@L$XsbWRyKFZ{+IE_KoI1Zc_t4oqvYxgz=W2ou7w;3X8`jq7`|9f z4-A}zivQAvNI)V5KlW8xivo{WS4uz6w3Mu?AhmSKK|*N&R% zvjNKHV5=7*QZF=U%WJHBL^PL%I0m%+oHSat%Mj4E%x?3EIU>I8GfRW|w?sY+SVFhbb3(NDoygYa)giA*K z3b~IQIn4#(a~ugJyum_M76ZEYhCp$YoL?Nx=?Ko*n6KR;bP*oB^~(i;3s$O37G~M5 z7j*SqVQ4^!_oYqJfBXBRxZaN1rN;?O8o6Kq06~}E4JLy^LR70XMgx>T>ZjtRda14h z1{a%u*YI%ztyaTgvlLhqns{aOCC!nyJFsk0!%y606J2JQs_Gm&C3!ytq(`Mox_{T5 zLBW|X92#v|F{@XkvLLTsPI^ulQ?XE_xeH3kxv_Tznx7YJM-tqbyjIvt=c?4Xb~60u zxfS@DmBsvuIRG*YCSBGbLdWn0#g9((`IPkd#AZBN2S23CFiaZ#QyXI1n7IguK8P-s zo|`~x7D3N*t)CESgI~o%lmw#+-j=Szttr20Zf-(r=UGHENZF{gr5g5;c4;y6Ppo&k zSsKJAa6HY!x$pxVFgN!y$3n&&iWCL~TILa4t@TpJa3<85(t|Vx zXYLp;xkT4>&W0G2HE92`jaPy?vTfj&Ppt9k}Ct|I;}Xun*;NV)(hf2XGm(8a^z?ylXY0UU|A{{WE)RJ(BW z$KZq>J=A8auhDdAfZ6*TDnVyJ#O@3^BN<@}0MQzOu<_b$w_E4SGE`~XVXH+0c@A2^@q(SkNC**IfH$hW=>EI=r zO}E!D7AsYJ$zF%2zFf<@IU!o!?}~TU=)r!8Wes(n?BXVn`4+{*06N{@R;TB}qPb%< zCSx^sL1Af5#RSg?PeP#$&lSn#HL$dpij4zGeDg4N2exWne1lIOju_`3MLBwXv*F2>zZs?2#CS9f8>hSKFB%a&^u#4iQbR|_W~BR7(?^XEA9~H;(FG&aJ;r;VZ0>49 zEz%)$UK`9`i%Z33H+1v~Aoscm5IWH5F_e`tew656oTb zmsoj9yGEYU{#R)|dUWQW?jRgwhz-FtYe=`#-U^)v?Twbw#U9{eG)bL9eM7)Ta?8Y- z&OAWx040VlPWCG7JGc1be`!tETYZ zfccy!VuFvYY%q_9=CP7CxpdH0YiZR$DfiHV1^380ljD_@yY@B0sY~tJRL@3BLrgIn zjD>l0Z!v4H=udJkrm8pLRH*ttDjbikH1d!;`#o0>o=)uRq}G=3)I zV0X{l_ca`hkX*4bm)(?1g#cgg>;7kxpyOfWl%P;+UspN2E>){K5P?B}>YKFX^{EQk z#%3660V4{hi}hb#58T-v_^jY>gEEp)Kz3$V8FS${jK{80-fH4pxrZ;KGCT z#fuKDgE^PE^iFxI2*#!G>vQL&!~AY*6UbC_m`#-i~~KX#J!WqCQ;4l#Mi*?b137DosqJjkaI*{iFH0 zj+dH=y^7kiHWj1dEjy3Re2%^^WyyXRrFZbceYMa+q^R1lXIBy(nRkb0UA7#y-3fQN zKwQr?XyiCR^>gaixJHPvziN2s=ez80e*fqkqGjf(5FQ=-?8L-7L~LBzGqMFs$iZV1 z*4mY%-rg<9^=8w5;pz%Lm~y9rZdvM#UZS(}@?(D^cU}WriaXNjo#}KIvaqY>#ZtBq z4~apgmIKD44+NEe2IYoaC#x0cOQk>&=*{<}Z7A9TO#4|v8fG_!A;Qi@;!wU)<_it; z^n$^ve8r^CRb(k;WhAu!&fm^7(4NWs|2jIdK#KPZioQVIY|^_nX0GsnnYx6 zC1qzEsf0#)Hy)WBc9hr$Cy`FAt`#H3X3!SCb$~bOVb+$Kc7phf5-nVyt4ashpx{Zy zwekDT1TBEw4_ACN5xoCG3a;X{Gk@=l>}pYgVrY8HKcPnUt6Yt2!?fNGH8N5UbgKxh zX2?M6wzj8w4l1M3emHK77%A4DS;08HVy(vS4l8uw5r@Uv?&W`I_s|Tf!Ax{uNk48b zUOMgp2~ubO=#EvFxjMVM+5tn|X;TokEL>F~N{Qay zJt*{U3!-sc*9h61s6aF$KLp3h7ImbgXXsmNijz znD^-Eik1Xv@{@*s?}iO;~2$I~AwO@YsVpoE{$=dmQ~%idN&EyPx*= z??%OcZbvjmP6|b7hHP)unA8MxCxS$r=4P-j%{$WRCh0jMdh8ER_H_1<2j-iRS)xu3 z3;FT9w^t2!uvHFp&n-G%?jXMzMnKJbo7i{DHWofY98k#maxqgunGy4wa$XHCs+kJs z;7@FO2^jJKW*Dy+u4W%!*C^2SF>*D_)`utKK<@u$ycbtB-*oQ~;+3hL+fQEk$}2aZ zWzx0VIy?CcBzGo|Qh-twXn80+A*I7>SNcN2Gb|5!9b7#~>q&q9RQc&pmevPdkY-Q; zAA3dyW&|aa7A_Xk?9Gw@stU>+s0wm?Y6Qg+9c5-22d%cV4882a3#Cswp#jwcoDbUN z(<%Sb*|`H*UTyviETtMOrHt27WLvY|p;L(wwNkA$T;5odedoUPr64s}3K&pxu^9Be zL$bkMi)dOb;9_D6U?TT#@mL&m=AbieuZPy6 zna6s1&P2}Fvr_K<<4_WEf3n!+?6CT6UDCy!zmTqP|Mg=t8sdGJ1v#Q?*m{yj2y?d4 zRh8vShizO$^eo^Uq@G1oV)Pl%n5TpiBm8V5BKp^R+_}U6!4iryHdmnrdDbtR=1u=z2M@5F( zpDKw>4%x~rgOl4wS*=132L-B}h%41nkz$qIZBvEgnue9ypwPpcH^H=omAEm0V?9qR ziOfiei5u!AH5yuNoga125dlY2-bM@W=dI1Q9`u1J)X`|B3Y?d-pJHHrJur0_jYy@`nvDJY*0ye`c|a4PI>-B!?X_%_`Et-^2I9*5!+)^S>*X z_+1a9Yd_QDA)88~X6E^F3~5gd5C430^yJ~;$Hz2Ab6XWOv-uhrmV)shS4dBe#?dL# z719rTdbT0w?=myE>?d0T0W;jBwtL&8pSKY;S!n3J4ogQPXtdBvo8;lx+G3oSPz*ZQ z28Ec_jl|XyT5`-{z-5*~K!~GdubiP^g3B^!p~_)-aPIJ(#rUP{uyD+juLH_rRbMG4 zoX{c{n#I8t{6CiJJUoE(+~MKL!NH41Mx+}F?aaTc2Gqr6d{o2Dx_4<2HL_gR$6p19CLBI0JsCGe{cj%OM}v%ySw4C|1NW^aLVP&PJG&b<3B+4 z=3er^KcYRq?k!z&QVa&J`G-dWJ)iR;R1Tmwi{|1kMz3@M@Xdi4=eS@A(Pp)#K_soE zW?v8b60dBowmf%+fs9oH=L}QVa*=9I(H1N4WuR#S_lE8$+69o%<#VSEuP&9hn1zo8 zREV696N3kw*C^_pAK=Oi0C0pkP!QsxIV~jw)&iRj@Qx@FS|_e zI2yGcP2)*^M}sDyNui;PwYo&;P!}g25Y#1_zD?aqE8nuZUD$imO~=~J!SKhCaa7R4;X&tU6gR>}`;d(-U$KDJYn822bsk#ca1vzw zb=#*|nipJVHKW!kDD)WU{u5={MNu)LDb>cig4$AD+)yDMidY-!Or_>jnz)=`x81)Z zAVhe_$yYAdv|S($9V%zR?(ZV?eV3QBR?0On7LtlSbm75D2uO$kR$gnZJjq8HU}r~( zXExk_hJ&^{dFSFiH!Rg0TS^uUNF{_%YQ$Ior7MBVl7Z|4*MNS0T+6l#EJq!vDt5`H zd=m!wT5?uEmQ2ifKAcz1WexKX|2bWYaNd}MpcoW|^p$X8GFGhPFxP#j)=GNm_C?Dm`f(-8pUp zVQEA6DJ@lHBaI@+U>mzv)b~3)oo#lHy}joj(sDE~AnkPqy7(f_K&VwNj`9{-z5m7bs;s*;BtOZWoVLXB^1=WYuI2XQe z$XruxT4=3HzO+E7TYb|G(!^}MY_eQ>D3RQ~>$GTXaQ&`5r=E|6 zZzy7D)yJX%Vk<>;P}Cp4(dy&$j^_`E|QTCtY1zkma?ePty?ZdMt311T(Jd zN=o#FqUgE}z0!}*#MxzS3;m%H<(xKKka6fDg705um}0rO`zeEnaz?;W?@cGh42dMnnX zxc*b=dr(DMvr-f)wb?~=lv5}lZV>J&akS{mbj_VTI-6oZVL^RKPn*5io*k}Udni)tr3osy=j3#{g=E&pxCxQZ2V3=ZJP$k3Hw!iLcGQ&TN<(@P)B`o;>R?!MIm(v$ zz|CcdYfd?T(kn!Dk(006ra$4L3$n9&Ms{{NY&h2jkdozQM_|d9LW%qv@L@T9$G#8p zLVpzf}kkUqRIA;uPYM00&3Q4jX-fz-iE4kW=bDyq*q zdv`5>n4REwFrYbis0+$64YL;R6gbp)`Q(;r=oo^J^MxO9`i-GZS$7c}3I1=EbPABw zESU|@B0Z6@lQ*hBiL2^)x z_ZYMde#ov|(4)wz4YV{fuHCXmp))X3CrRJ#?%shSf6g3hp+%g1sA*h)MUFmWkQt`^ z#FZr_)A4xirwd!;e^QTTJ8QF98`C?W(bP zd9Eoqd}h1H(qIl+nqWC=U^#z~kIh6NE_>v95XLYHv+y=f{FVjFlIf{5Yv{P$z-E=HBH^(_1gsn>DY8aVenBODVjtKr`!EH!`cz`*(@n4ys+ zb-(HoJVGO*(@4KZPj^Z$wR=HS=06>%wiD*Vlz9LHGI>;#;?Y*oOm>h)R6jISfk)Ko z@hE!KB|VBItX)I;AYEKl3W}7#y^rgZmf|oKC@F=iO420vgSn-*i4O1XN6rm8e> zUf0=RP%n@!6foGrP+d+mKGmLpa2O+EFMrMDV8EbYCB`8m1|qBMr(r4Z;^K#lM&pHq z$B94#IkbZ0xKI%(oKSOq6Xp&xd^Vf9<&v^XvFx;nN31IdVn(t-_)_!4&`_$gb8lzo zvZS?t3Wmq3OQ-sdT6?C-017Ri>a{)EV=C6yYa>0Q`mm;1a7(wP4PmB*4%WA89jb1X zO?nhF?gDSNAp#Q)F^NNN0(rNaPaNqm zxKMM~WCd}F)z@q>**YGwc$>^dTic6vTZ_eI$v$khHJR-en4>v&#*fQ7s$rR*n`bD@ z(5Ku0WoRrvyb{2MEk)Zw=942x4t0J zjxDeZPs|3kWFdVC&t8NR85DUBh;`%RKSdu&Y884yY7G&MGe0tbB`Ja#GvmWUqD|!v zd1<|x;Nw~ZD9{b-vyXz8>@9#1&4hJ+A_zu0E06}uRBfN$59K;>6$4ENV| zeD|42xE`$+9@zGImbXzID(n5Nyn|||Y|`I5J2xZY<)-&>&;e<69`{&!+QG)ptB*B? zB&qJuKQ?L@Lx>T{hL|=M*x-mR^?5yu>*5xWiq?dqHb;2M<2To*iR+ENUOR16*;{rr z>Z}3@B5wpM=(kv*Cgsvq(l+25yM)*`g)FHrZvh#HIj&L8dnN!Q!VQBtF(J4aBj0S6 zYr%BPmxL~C&YUE4!EqK)Sg=Vs8#cRra_vz@mLBZvJOc&(*z$1}*dkz+a~*^4BSHEw z|F{;5H_Z6zcSJ+Bu7N8vp@kDc%FMyUBY!(8+ zo)lDU)#{MQdHkeO1M-=AOXk{i=vGvE+3>K(=xH>tUPcqMIjaV0^iVydh2my_G&7(rH!=9d2bHvozeNUsctv^HxqN-~3Gww6{I2S#% zJ0QJ*>j@{u?a)-q=C=P5rd8(!p|MZpI(=wUDen;~MgNYV9(n|MzcgxgR2WRgBswo@ z@~b04^n=>k`aA3vU8&BdEhnD1W@`D{I!nFDWNN&+R9{)9tI=0f)mdD16-piwfc zg+Jl|6uavA7H!tHB~&`t6c`>P!zlhzNK0pLPJyjZ*wDg9Jd+52lU&Gw7e5|7%(%c$#Pte1;cZXY0M zqu0s`3h17op#MvZCH*?;;%4uGMYMyT*dv|h*T-ONO6=^g9j2BF$;TUQ6?~R0m0YFU z_P3#BPj>wzn_WNi!_+(V6tr7l@`wnfSV9Rn`UjE~*%}{A->hoqq5bR6aOu~~CA zU@#yevY%8oW?TwVqy(o{UEOGIimpwXOv>=Hh$cHH6PA%AFQSz2rG~5^hHD|dZrWB@mgMkQlj(|xo&-Q=EsYOeBBy)J6*Zn&PJ`f+iJ4+oF>>a zCcPzVV`HN(l}_pGM2gCA<$JY@7&lGm1g0YEGgqAyLX28f22C_>MoB5ZO}RN_(ecgW z#rDkJ3iz6`TyF%eH$aD#F4og!6KuV{Os4uSf;Cv{Ocqn)TUuAQ&1COAUGVhT^!5QS zA02j5T9u>yCECprIyF<7fgiLYNWhEXALL@;2Ym;=Mw)eeW}?KAJqQ0FRfP_;1zDD3 zR8GzZLf($SDd`}p>-qs=?sNJWXz2>e3@m7P!|fqY%ha@jZ^CUzEfBI{zrO^+wR4Lu zD!M`@mt$4^r}F;k#O6fq7KATh(`KFrOw5L6SfmJJUIn`r&ga$mc2q;c2w%nFA0AqQ zPc;tzF#0GDQNu&u(`4ba7mQpkDT3k@+$)^E;8%d-jROgJk_80rTK_%G&8L0*NcxRN zO3gWR5D)Vjg$j9+Noz?-Q!I9}XXB+KtXaA6$}K?@64hm~Lk})h8kvdP&hb9~hV=KE zHs6|V+RnEvJ=edWLKPbbq3otjot?UJ6-x>l1xq0yL@2B_h0&z&S*GHx_kDj1amwZc z-`Xr~N&%ddR+_GDfPAW1p?$5*RBTM@V^Apnt7OI$jaZg8$Nez1neqhnDx{Eqr<{}P zl%Q8%>NNswP6@O*=6h9ZU%&p*mC-uC3YwI-lCDIWw6ra%5!GIvE$Oc2k{i_(qki5_ z**j9SMW_^PYQ$YooG5;XQ$h&Jg4~rYLZs86->eR*p-WQSX;%A1rxP=k0dmuWXmT7W7)}7CW4*Q-q>UI` zoCSGx8m1h+9C5YjWBRPvtj<+5k=mD(n0TZl~n;F50%=WU8v4v?V0HEldCia4H-fp0ESN5-r^)CySvZt>S~p4 zG;6YZYq1bU@u{(%9zmyCb0-m7z5+bjv*kt#+lZ6bed8rF0hK@vD`k5yQeW z4|P>8fAWrYk`cA4UU#*=Tr}7;Si#H#E$4VxI-a$ctEo2ucDV#*nCvP#ujt!Fw}K&f zw&?AmcX2=i^uT!pdYJY@6dY3_6)x0_Yife9lZ9v{r}Bi^73gbj3i~{HQ_cD9&IK~Z zxx?W9uV*RewY%iXRJhJj3uXw;nIGLh?X2rtQlm4fNti^)xD&B~T}zvNf2we0^i|px z>CB8JMzyQL=*jWGY3KKVat*WL;h9M+qCvdZ;;dxbnev&Pi zj@Qx94MJF<8D_fN-G5<%;I(v}#Vq=HR?VpPa&eI~Xt-o=)ZTnXZ1$-<%==SbUwCSE zy28_UQ6JR+XQaxVwjJG2Mat8;o2KT9~6Co1Z0)n8JtR7KQEluuZB$mfoDO; z;hFgx4juI8hVxQ^@*_>gFc8E7 zzb7>?*@CCN5uw`-Pc~_Z&_Pm>ZgnX^-B)z$#Z8&SmYs$zHr2YgMXg0RpG4*pj%WTA#Xxq;=1yRer7 zZvZDgS3~0SSkaG)epd8LxJlR#d;#|eZcqVAD4a(#cGB{dfyi)9^j4p6Da@vPE*pki zcGl~k(A;BBKz!X36n@B8uS_mw`i3VJvMB-@UGRk!NSxx#3s1lcQ1GZtsPGWGLcR@d z4W={AeB4uN09o*Ib+i=0nTV@PxmcteW~88ze|Z!$JEM1%q@{ z7MI3fVrNljPfv{|926VHNbK#XCMuL^;#*wHFDn5nAKw4kSaScq8fbl0R-Cr6oUrZx z_{F1R3RF|g7&OXM)`k>|Z~Y_E9ntxRY-Y!33vIKrBph3C7^c*wFrn7cHAW7ELR2*M z5N&rbq(#rSOqANYFDNH@-Q_TI(r$1p=-_2P1IdryPdKme0(X#W2=`wIBDs_g&X_r~A2 zyIb5dnYio3CoWCh-IclkRf-jFq3vSDDNw99#g|;>-FNPh@A;nZL9q7;P@On%J*>1EmD;%)1YUng>gK837T|b@+%_Sa)2Vg}dihRd z$jjcidtWtZ6jkloz5;8g2St(k9|yHwQA%!_7<8X#S(ch-3T6sC>1iH*u*5+92K#M~ z+_D=ERG~dOYn|C_4sC4Id2I%vB3ULf+P(Px_Kprzj|~o$wlH6;=GL}5 z^@X|coE89lAE(3coaz`gI5&EKM?EKOLWu=57Ly|3aa8|;j3edd+)S%ZeV;tY*ZAxp zfFrTHm0T3=SGfce`1XHLPew|Ts2Pzf5$KGXjBWWq2v4dPgJ#k{K{@TG;>-5$E#%8( zocygjwgyqZ(H1gUO-(p8jI!Dbu+WzP!hDeHA^`(Hj0t%6&$DG}^e0XNMe_Rp<7XbZ z)a;mRbasUfkcN4*K)j2>5h|xos7rN2%E35%D){jyGJ4)rt_D=!@YiU9dsRpXs)dd7 zky)WEbIjg-WRM5KcAYnDnPl|Zh86)UOAqY#NiOO;m>+mGfBTNjIYPabo4I)P@@%w8 zX%89orWX8r-wT>~4-^XZI)2tc3CFtl*pBHgvDGXx53D;d0e_MbhNVh2yVTe|BOjjD z0xB5Kv33}JTEc1lvn7stL#+K-iOMhQ)1YKdrK1IM>ZnbFH`B6HKV|px)n2R6VijAQ zat<0CR5*nb1@_OVErQ6(6N9uXSQk#xYdG>GrNEk{1? zq*TvD&({@5%882cY14Ssu}-41FkKxbSX?Gg~0m(kJB`iYq*veeIhY>hY;lI?H)+u zdk4ViC-UvoiaN1cDx_qIGFl{8;?Kh<*mwBiX?ej?iJs)!70YjWBJ!2UWE2R!4)jCh zuM#!5@Pbq#^uSC$(1V?Xw%5{gAO+*)|jz zUyWKlp-)u+qyS=j=YKlZFO7ni;^e7#KFv;4fr$X1I*doLj~wjdD_s`22aL%k+7(K3<7Iw z*m0snnUI_yuTdnXCZq9w7;a0^RU@&ZbWW#@u{(qyj;&5@DN@SQRff8OZ14^~fb1S% zl|9Kh`2nsYvH)Y85qay7gcU>26wUykF+`9VAY|V`3s3!?Fu+&)9mIdzyhD46& zhxoqCuqo7)3>$e9+p4~-^|jP!nw6C;_!~44=x_eW+thbpslOEMxq3J2#eTE(DK`FhbgO=9X~m2$I%_pIfVH&=9^Z* z+h)5bF$W%fsZnP>mK}cygGrO75e>;h8+Q|EXwS8RF-3Kk<2|QOd;aG5i5^>j_@vz`E5rl=Af*}uV z`1xQ9Y`h17R*12Cuiiua2%W!$#Mo{lNfV4A+|V|@ok}rQZd#Zqgca0z2kh;M5u)5_ zht9{nqrxni6-XcBrI6g2{P-+F7vtpJN1cwK>|TLB#ltt5MGhYrRm}v6kw1;AJ3Wqi zE0S<8OZWg0;7s&kAAYk7RGm9V#m$#p6X{x3>T~Gb1w-GA%#gJkR{56db1xdcfvY(t~!Ir8^X5dtz96IkoR)Nq`|OV zo+2?;gql4^KwwnBciE8(->5WO#ZC4sbqshEz_>Eex+Hqy#I+IYO9rRVI>zb2q-+fK zhwdgZfOy?TYCAR$0`xJK`o+^#wbw4RJH$5EsC0D~l^l5!y@u0sdV12(?^yWwATkF# z0$Mc}QUX3~O01k-o1#N0y?K`(J=V)rss-Km-MpRp5hetFE!uk(EPo>Ldh;b)f~d=6 zZ!lSn&F|oSweQ!0W{0pE8Ml9b&%}%hASV=6ni{q|_%0~Rr&ecsB_hZI1=i$z)+rtW z>mg}*)UFA~E*S_kY}c4vHDb{L@{sX|hR@Gw;S@D6fPbW(iv(TNI}u+JwJNgN2!g|R zqyJ#>{4uh2YEvYEvX$YNE1#?Yto%gz!=I0ltg{w>2;{{^N(nzOs)~Tw&^5+8V=rdx z5p?W(BH@YUe-Jb{UYMU@>NnGpQ@@<2)L2JQeMFoCx)RU$HR<>ckxs?G{HZK7RN)9U zICAU_HIYyGzON9UZkrM`2`I6YC(-v=+?KIxk-IAXiuc#Q@xz>5W|74z@!YX0sL6AEeA$?v}UE4E4EsNJd>HyL=H){1~?YtNFQQjv=~g87&6Jys)+tJaRhN) z0dB0sBCMxakcO=Od~cOd$)HgNe~m#MzZtzhXe`h*!3-_lTW82%8kyAFyR}7&280fI z&-5$>UPbFqedQkzXc8O(tCeBxeQuY^#_Q);k+-J@i#pN!kyj{Q>pLdsG#WLz0inlG ztoQ57mcNuXX(;TF_$8+5=2j1S6H=P*3U}_?5hMeBxobCH6hL#-=4zwCREK8(-O|6m zJ@(ko#yqoxl^qX)H8jC^bo8;|0m#cgm#9jdeKIQVtuWK5V`?_enQNQ9yG^9m@LDdJVZ%Ge@bpw_Xm_LnecX2I zsl!$xRH1}6DUa_kl+127h%FY8s-inRv8z@CC85OBH8F`2j1>-;v%)E1x0AJcMD=45 zY%m=wBmjEF)-};?8RWOI5(p+!;ljXm89~;-cB1-+XMf39fmk<~zGpfhRidE{5|j#k zv1X;LICf1S!wv)m!wEmrYX|FPa2_AeCUiQLB#FHN`Xmw zmBTiNAxaQT68g?W@hFEFqvJ-9xBD_Mz*9QSBrcfj5IwtNFvb>27WoO?iyK}2{ePP( zcgeyM^Bq*lcx)$m1N94d#~+|vyR48$(yVPeAV+QfnN+cxB( z$pAL74?sN2vgp`~WaVqCOCpMRcvx=Wc+}TEZ(Hh5Cu+Ll6uE>HQ z^?Ag!FRZllyLdL#HC>mk?Uq^%_(Rz3(MU$!#{_#`ZpB$0Cw0amtw~#&q)O?tt91p1 zulM)2orYI$g0*@lM!kA>>~TnNIR7IN7C0d|1kNNkMEN1!^f#FBZf!1WuRa}Zhl#_SArby=QY%2kvT4^HgYVVdLa^^A^!RYLr)OmN)f>Zx4=;MNnORcVD@)K%iEEMQ+_l@>OfK(PXTPTo&qRMXxqB z?S@@*cps{b+yp-~0Yo1h_9)SElw@A8nP}|m2tPFW;eF(XkNOi=9C?Umo96;Y@1&|C zj}#H{lwz_8w}fD&1ytjBJg4uKK1~ucBuZd2%O43!S_JFm0VUlDNKjwQwSdC*+hyp@ z(x+oC=}L2U|)2j`|y{K$X0f+yM(Zb27dWn=kH+*dokW@00y z!aC{_L*bGsWRoB->qn$N3?dxI{9M2g`0qeG6*Z> zm$B$!4E#7BNFP)DgQpw?BUz*SXbE$2WL*VeFPt;ore~(5Exo7!8vXez=HR!`Wgy`DEFjM;@$&Q{dqG-<(39lmCqm!S$(Wj( zcO`fyOie{ne#*oi{35M6^=(!c6n7Rr^ber8IX5&;`XRHewt%akHzWGeMZtxT`v zN%PQ&^6|yjRr<$TguwJxsU2L1{p0W<VWBG)kjQtCEur*}*r3v5T7m!OKFG#uav8jBsxO(gIKGTCg05#j9QWje$ZMmtJ zZ;-U^UEZU|M=R|$>Kav*y4GH+38|`n?A2GaCUZfqKX1U+gqpXLrb0@eK%3~~TPzIQ z1L|l~Sa{ul3LjCG%t~SOTE46A4`t077=_mIy)%)H2wb->Yu3qOpf{zsB?Euh(n4$6 zmbd3Bl&MlCxoSemjY*1hRk}J0zn!AU)MTi$sWfBV?zQP6k6T=D>y~B|xr45QSNJdt zt8L8_XjR;-mFw38(0q$F8Sx!1iEAwkw#_HuJ8b3gm|pY zBO;-hM~^O8fS-A6NgZWtmTPrYS)kwVEfz5Xe5$Bup&01P9<|RXSE`}4|h6iB8RDvyfLv%PBxwP5_&&$U&P`wvfSKYI>}t4!=-#?+5jfE2yg?uRFkGxnypN zh%(%bcTo&&%wCw4-RtuNq%s=Gq0-^=Y$`{4rZ?PV1q&u2@zqfwkrejTtZxN{it`3V zn9K60xEdcM);{v7gap)w=&GxbxO0w1 znxs_M&8k9)=>Eix_NFQeV=@Z$`DGQA4rHrYcl`LHpx@{ML%JW_o`hAIi3*mbj3Y8q zQ2|1>M@47|nUIf@XNFI6b4gM_ycvQUN=yb)xY%P8*LU7KOPAyZFFSCs9(GC9Uw_S3 z{7hozl59%K%bNQntdT53No{TT*Pb4<>6iX1@iW(5hsqBh#*Y%ox7*28Oz#DEX(L;a zSa&(l8FiP`jkPkhm_xxFD6pmR`}Hy%U*eI8EE}7iiQIznO)w>W1wd5|rJ?#zc_VF$ zddEFm0|K?0leKcRcZ3r$!HJw0WgT7^cPId`vw~G&8mqQtb3OKAk&ZbJ=0Kx2Cy>cb z-o_O$|MZumX77gWYCnk&Xs=M!OmRJNi3s#g;e>67Y zA4n2b%$Ksc@V0!^YO>WqtGWR{TajLd*Fyod!w4dmw9E^nYVpsx#kq*gN|xbEELQTz zpnZuX)G=rA%&=AFlNcJtOIrIaVxLN1)KkhPpSRPu4WDInTAWORHjQ!5$SIOI$(FD# z;=wYRyP_5IH0GrwcCDZXySrvf`NnS;g*oot&!c;0qb)MJd#>+qAQ%8~C zsT`Q7=8}RjCUH&9g7E31q!f~qkzZ`SA2TDe)drjwxURq<)|GUyt^}GmXSkAPnEyQ* zA%j>ay1Tz^6==M6*w`oXd&SeyAqw}d0tHiHMp3p{C#S>?8ONUnEVdjUFB9Za&~$ti z`M8+c5?R@YPB!D$Lg)pFG$=BPYei}v%>`B3a9b52f@kKk8wP-YLiytALB7~=fT|w( z9xJWrN~e{P~$5DH6E%MwMP z9~1c9wR0pQvEd$|OEW2>ItM{l=0y z&~6tQjY4B>6aFbZ9|nL#R-0I!+*E=l1@wh^+7ex1ktSVVqRG>h-_u0l7U~^&{)*W? ziHmWLpP8x1T|C_@aWKyQDF?<%ZDmmP-VTLW81ghJ>|)Zwi*rJ9n+rNX?U3Fsg35Or zJ7rB?7+Yfmz*gg)g1AUXM*<|z9TisNZ;4G_MpiwHqEklmnn3ZW;fr{)hPd8y-UW2B z!F}a?u0kc4e(62HMtgvcYUB6gn++%*KO0KjUthnaQJG!hVmwk;e%hi6U}97WY?uRd zU$K@ExO|c(OLKxoOM&Po2h}t7aKg$@3wYOm3 zBfwxlN&{9`9L+^7nypV2hzv%4_MMm4chq&aQt6G6Z>W@9LTK5i%~?3Z2a~3rq3H^> zrP^RH)_uz)NNBY}6b$)HMZi>NfQznSWL_~(zx~$fwF#hQ!{hcSpHATP}?A@SF83Ut8SsvusZQ%Ne<3GRKCkIYm zDEUROG94S~W3o8I{Q`E#g1uuS^q07kkGB$TpiQSf&+8yr6xn#n!r#5IEb1rfp-9bM z$P8zak1M;o>9)4_C|NhYE{y)DE!ubB=0-})Yq;);jrh|F=j26sLWd+UZ|J0b;^KU% zO;oUSntOM*Iz?HbaN$+8Dknb#n8mMEIJb&|VWbEo2oX77P?$S!U}aBO6P4y+!zF3HjbyA^Qt5#o zq+^NyC^4;J7e~GYNzBM>N&J`<4kODtvP!uqe$4-(UXP^x^DX=iT8_6ZqcX9rl`?e8 zb-Idl*jnx^5DEFVyu!;4-W-CdvickMZ|Sr^hYtiHa%T10x3rnZZySIHe%D1|0ito_ z`0>mtKt@UGTD14-%OC(q=z?v#06!c)l4-sysh=hEPEYPP`jHYY7|EDgCUiL z*Tykl8&W5`Ma?2-VjMX-XKnOI^&`;i$4k(qur??M-&XlD(%8*eDvKsx?9>LdK21U7 zzm9}KXObp2pOX0d?Q;8gzuG%s*TcW9#-ak9TVGfTU?#~5Nzoan!;y21mYk$l&in{*z@rGI0*@K|@zn1ED|_GiOMlvp`ymART-K*d{3uNQ4NC-ZkeWhCRG%j--~+ z=nwePSn1(UWCaL=R^Y7^x&$w=WNp5xaqi#RXS{_!MN{$qti~y=IMMEkO5_m1W+Hw(Q#Vs@4hZJz6flK^KvS_`!F}rv z+}io8}oqxP6(+FK!}aAG2&|FMR4}r;5gQ?@`=}ty9tIN{sM_(EIDM4 zn;bbDD@n;&zYKE1=gq{=$l1vvJ2+*Mg41MD4L&FT8}%yKNi_gdh*M{Yoaek&dRdH-pr z4FxkgI0kWjZ-yFAB2B66E}q&0YrQQZwnQI4BvNxHag+?~Z@a9YqyxM!=r56L)~uu_ zDOoP&=2FJ8`wo44B`V|x`Aeq3PBIgpp%SfPyLJD&8Ov5L%OKs>l70J%-=G<5nO367 zGvZ`5ucSmG5OkIVuMmZts$t>VyAktfa7=@gypTDMdL;^ zIz!wzD?0zZ8n$IFa+AqGQ_m~maM7!4@<16yR-*9vE>+eq^O7Yg*1W^ta!UH4{q56V9pWc zHgbIM0e6UXTLhB*6V^Rap($8=kv~%U##!;P+BYgC1TOKcSaOgSo%&ZX^=PEx%C^6C z;*F=rb+fHUGl8{%dO5F4ZUF9#{!%iu4Ifgnbl_jDt()64Zee0p3Zn#ZD{%^lTc!AT zu9OrINC;{dRLfIghS+8PInP?EER+|2SmUmgg(PJ(ue`Ew;lTs{KpFV;qFq<)C?JY! zfpyz91krT0HcxBN7DT>JO`VjSoR3fa{BdBGTnLE+$N?p%E94381%|{)E{`U!$lzCI zX;L(~wAoFjG{=MQ(n6o+Z|7{n=CQG(gH?ZC0IDS0VR78~V+e5}WHg_JF(Ep$w#-^4 zs5uV{zY=E^_gZkI8h)<#?4up2`p%UmjntI~Xzr;$iaQD8m2WT$O*TOEX7w;eUO!J; zk2d2~`1fnBLDxYH-(OIWd-(9-uTV06^I4@VO`C5L7=@|?(aQxwy*eM31Lp}v1xQ$z zE75ZDXiZh7(!tN>+t8lev=tW>Qc`|!`J7a3Nu68fVqCSwT5pLmPytn-%v}+{mo)3^ zAeWVM*C7|pC?t&eZqB2utF=fTSOlfRf*U(S^SnSgrr?1(< z7zMg2BhJ+%4mxetUMwB|oDr}tVJ zuiQO-MNqFUUOCMLEhtO(3>1U9iS$jhK^3Azow=pR5$OFiob9s}Xa$7*;F%>Gkih?nr+{^Ot zq)dMfH8~Hz>u|IifH`a;4PgcTM+MYd1j=L|ojmv`pc;B=uv+6n zP9hM6GQe|>oB?r7Ic$jq-}WMy-WX^@&vh#Fx_VH~5O~WO)u}JudTU_c!`H!bZS9&# zz>^mZEmW?zP27BNP*&2?R;eTl=W~CU^WbH3-A+mh)KHg1l$fe;1l`>UDx(^G_3*>X zmZg`K(T;FrJ@wbfwJyI{#D#%*SO!Uj!!N*5Nj}0~)CdhaZrQ(2Y@fcaLJw=GZ4Rlm z?aGy<@l$G@38&=g2WcZ%`}i@wv+Z42e_igXrk1u1}#W4%VNl7%cl@@Q>L&m z+=eK%P1gfZm9pqK`CEvWAekNubMfXeKlXc)YsM4Fz=%*0 z7^H(6P4?lqVfRHgz2Vf__Xd>N(>l1&K5pnqk)o-Cga4)qBF~_Cu*ptWnNG_D_I#mG z5Gh9z{LA}YT}NAXeT1eLJIWR1^3uKxTZKAXQGQ7l2zuv$kave%mg$(j@$zP_R#>}z z#h~fMrtHfm0l+t~UGo+G8?FsYJT5-8DeN}UvyE4Ec$(@;bfhzqzqzFf+IHQp*n0#hI{d6pITib~@|r>&y!Xp~

Hw?>>)xh97;mvvCZzUEh=cl-utsfX0y=0f7ZOiUQpIf zeSG~om$}O5H`bNe-8Dv-?TnlV-`MYKZLHA4?2JI2onK(?!JFX*=wNK(Wts>O#s@mA zFxf^Rgl^Vr%mhi9Sg8v)fIU=lpj`N1Q-|20MsG%L?#Q8n9mhKP>1rZ+MQSN;^q#=- zY=UvJ**F|OG?CzINf7+g9ZN@l$BA>An{RJvK}xb$2?vlBe}ewrX6(!&r<@sjx5qGL z-$V{KplvZvJMt8cvuQc2GqM`nFH6|O&D*oPy9Gxfd_1Cntn1s{T z*T|vDAyOh~WUVh>Sh#HH+SVKPtWJ}AnS?nTE`>9x1xN4#Ed3(J>4G!KXP45$_;Fe6 z&hlgPx5N5;MALv+=-FN&5RY^tF^h_nSqkOV(qIH#A;mM=J88Mmk*I^+0|F?r7^hE_ zQJdvZN1j9X;A@-E$_ANQU6KyVQXP3B1^(|p{*iRsZS&?ii;5`hc7&}7wyxLnTME&h z^*@}vvV*Ft7HZ|3)-ETa`fm9Yspqzy`jnn~>NmRwR;I|)pkb|~<^WK5Z}pSacnv(C z7jl*t=vwwF8b;XwAt-l5)5vJd85O{zYe-^O4d4it?GTsJ_K>rQos*B~J`8Irz!_zb zX-kHZ0}?mBN3PS9roeh(YmQLF!#}_O{+>PdrY4ls)%DrjyMFr(-Hh%Mo0&5tAV+ zTA)_SfnN#;k)X|YhM7n8B8X3kE!mFuTRsL3`AyVgk-b#OB#2ZZomHdBbXlk6A+0Q- zsaUSkixdX6Fmm-|J~-;BB9+oY&5CT?L9L6dquQ4A;J0VW)%=y$c5AeNT2ZjwNln8h zd%m>o^7*f)PaE=hCr-VhySoE^%wjOrr)X=;lloY|5V+DL;baqi_T`NDLSD=l4qs1p zIXGkhfW_tjJ6_>HccFh`rJuz5pN59;HC>=Bq?C~>SnfeGv9nkzk@JO8G3Pnhio&Ja zxm-&B=7*xAe+M4o@3djy)Bw8n)Sc*FvvASwCWTxEvR9NQTg9Qcd{M>5nLlPNnCVNH zx!|5Ql(RLAUxV9L3BlkXcpww&e+c3khC&7?C1vN9ZeslkfhJwW)aaj_+&>T+Qx6M` z#T`F+SQ;FEERmw((qhQh4Gu=4A`V7f?nZL43!YBK7fHmN*V||g9VQR=!I%7p{sE1v z@6lE4YJsXgE+bXRl!+EoPbyMKvN}~VwLk(JWI6bw0ab2^2WD@??xM8ha(82yvPMx- zkA^PrG>&w4E492sUtZp((yKT$qSRS%ay*fwY469^zo=}ye0_#ct>UFD-HI;>SnKL- zMYe`U$iK6JHGeNyff;ng$?gF%98nDY?J3bi91ew}V8y6+{?qFxhe&)o`w=tiGc5ni zZ-ErVM+3Mjb?MdBUN8`ExeN?M1pC`hMh%3+qx5gQ&%5tkpke-uvSFb1JtGmq>nFWI z=qs$e&RT8M@uO5WnVjS5glqmVkC_1sL= z*4by9Q&|rx>&5$f5ie;%x6|D-euGTKpM7bw5|+hNlsa2U?2xHmHzjs;_Rxi+?2b%t z{;yU?h+b?TgDu*Sgq+72CIxFp;5;N^?&DxmoOW^?C;!GjbP{=BIF{er`!Wn$&hA0I zxbcF`1T~#{2TJ8yAi@2k8(u$=mp@5YfD?cQ7`*->00SmL7iM165yac_kUCK@p+ps% zL9vZpxD~9bUThCEjo=E!-P{GZi%Y4T$Vs%O#hB_OB=2PW^N`S6U&e>InzRzHI!G~M zp3ETQo9q_hL{)CFU8z&jNk~cw=!whAt@t5$R}z&>X4h#T#>*t`65?RMemEyOh=b{b z12eq(4)4}i0r>e3b+8{lYR+A?B;A^}Y&Erna~$7+znBSJaeno~AN(hxfo;wVH^r%F zoUx)n-EsT1r4%TJ@~SO1RkBR1U<7E}1ztrs);vg!USsP4k_eapsEp2X^+u01?q5kU zA9pPQE&#gG-|)xqUhoxXIxiP>F=1hyB7*R*_V&K3ROBaI{lX#`+Yrus>|!VW!?Eb# zG#JL^&pEQf_k7I8WVX258n&@V+BsqgKg^ek6>q$+xaC!paGH9ob72=q{IAU5SoXYk zc`{(?LeGXr*OX2^yuvPofn49#rMa~3bXu6rl{XERT~#35!t-pt+@4}=7*66r)snUd1{JC$tkQf>w?+nAsM5UW)FmN#1;pi z&q1m*IpQ&b>SaY2`Ywdya)4F$2JMH753`3r<;eve0a<cvtdOH^e@MyzZA9L@02j$^^qNO0G zk6-Uu^VsZ1b~Ke$Nc8-gChPb^@1cFCju(qPUI|xiyt3Jzqsow}%?bwHf1yXmfEgcQ zHxrL!9faCT{3c5h7%TVq^X(;3lO%tDzl_xHtO!wT79{}0@mSqIigd@O&IlT75J9D| zflOWIMz9pIND2`{2ua8zEyM%1a=^l#f1P*p^T>V*EhM}QE?H}o)+sQgdWqzMD^blu z+vTzx)4VHs1XfAQrBif&O+L0w<`V6EBnwqZrKMu4tcfx3KLE<~g(f3UcN}O#b-(6c zvU?j00joLLtJkg0p=tH{XD&^WC5oMEkIwR4{92kMSrPp522@5#au@n!o|$QfaW&AC z3Qyk;F{uIEs1_V&CL|+aR`Y%>2s1(*1#S`ya3m*#T5>eg0<@-7@oF;`s-pC<(V>bn zmWw@y$&bMaA;ES8N)cUEI;|8r3q>OS>;`*LrmR(xQHUQv z!0?fpWlU<0X3$hxVOJScC>!nMFxt*d(DzocVm5?7x+-!bK!q@X*2=^WE z?(}be!oTxPX!`tyHXAeM%}%l;%~?>XC|W+l&r`^_o(Xd|;(*f!Itr>xqNBhQQa3w& zy3d=5jd%+Q zOsm+ybC&BFzKiNGGG0KR-(DxpjxBqMjVlh zAzxn#w@PFWvR^Oeo*ozG$^~JbNR;#kKE?bJ`Mj&WRGprxF4v@`ca<1(pk0|Hl_zCT zPkeUeM@C_Lw_GNM*g$DgA?>8OqN@5EgKLs)jjf)>+D5eO(L_mKUJwL%r1bma1mkqGX}PEC}3kdd`U}lLaQLB=^X>YcdLa&E{NH zcHW5$b)v^6Ql`jxI*V%nOFAT8zgTFu-Whgut21Tx1cMCSd7&mR9Jd|{qt&zrvVCu? zo-crYXfycvSX~e1K1RtHvs2>QqwD*i(;Rc-V8+9r#c#})Fz|R7xJUb`U_Tf3u}D=Z zcFWWpq!brS(Wo>aLe2;|ksAhuT4sVkA+u3aBHP92CM==qA`kwQudDa+?IK^rt$F%d zH;BA@D)8@${0++zRp##mwgQyALO>Zbz zHrWBvl49TDtrbQ3m9Nzi4ZftsTXFA&TTKaoD#vLj>nO=!p9RWkGN2Koi?bIM&H$un zqUQr=MT!AJ;2FM%qdeaE01I>-Ws7|L@obS!$8-vnvIo%{gZPWybh3t*Pb8Dxh$s3E zgR06)$)vI3TE;+e4bg=?iMKyt?s*>t@GrEpCxP*Y8_ZH$Q`?o$)JucHY+vV*F0@#p zJUnpH~@9Vw2=*s?nd;lH6-D$8hHeFgNNzD-w_LI0*UEGq+cqK`-ImoAy z7x=F_xtyoch!#J&-NxbyOIch2AYoO8f(De0soXXfaD^HEQ7{#B0U{^yFGz-e0%4TD zWhm29RRL9c#s|$uHTg@Yc_nVfF)%HSwp{$!a=X}S5t^nPTn1xP0k~yv(RHyc-05(P zow3H~LTGSY0$ym8?;bwQ7<7JSkq8ILM&MYf6rDe0Bk;MP9QbPXxMRgA#1tt0S!y^0 z6S&V1fZ?>?YX|?WkVvg+Wq}<@M7At3XemSTvaNv@h`1r1NT|8?7U7~BetHI7+D?!S zK;z9CMS+bHi>z5k!YuVF8gGg~RSIE~NxJ@|kvd^AC9@5u0wMtV<{N!E-YA$b= zRj!&!gN)MPy!=_J$~nz4Clg*!t3it`qSe>5%UR)jbq0h_F;la9$-8MYCb&HlXI$Tg zEW5(^`K1=&n*D7`1z`7@bQPeX0;XoylK0YQOz`+7PQSh#*>-l|=MHxxxuoatE|^r( z@oU~%$UB51C#pmivoLtqcN12>|Ce-eiYou%A1`G?@*#juiS|@{IK%;1KZy?PbaNRT zVblu}PYBi;!?feFMe!kru{`0Q?t_DxJ23DL5f(<2B=U=%s);<*71FwREnEjO3`!ji zS-sS3xVv8O7qtjH_!i;|p*UcDA;Di=Y^hIP(PJa<+KX@U4g;QqPopi^PG@xDdEF?X z`?S$F=(4zm%60BgwMlEK3%%;m7a5Wa<+%1jeW3&rm!r@hYB>WXD*{;~az>M(R$3W# z32~1Qt>8z@@*MdGu}k7E$;Zf)czlQ9aI>12C-jyFNh(E=H__W9TOkaO7nK$&FMo|1ssBB~>D8@hI?JUHv_%{;So&GiFm zFI8)k#dS>5`bKS{s7>fY34{7WF+Z3MS$YXjQcuuD;7H^wSAa~-6|yrQ^MK{EX53~td~!I%iPGHInW|to zjvdlrT`Tdo(aR37H+zC3MHe@Aww_T==u=IGbSKFiqNMIdU&xuEz~$A-ukvNskKZCbLR5ga<{WIOTi>4v}G-RTwJI~$<8)Z z>jSwNH}Pg}ZPqd1r)7n6gYN!`Day2o-HzWb^ja|Ef^aSNL3v9UFAhLnasWE60q|fB z%fDjLm$Q3;upK>4{DhUK!^z`tHzF1p2~UXp8tv@=@0WshqNnio5IPngeii6Ed@K*jWkkK1ik+sngHOkUm$`S`g8T5rj)eB8%;MEYC z2B}#I(S}tEfjFYR!hQZJqf4R+#*_ZE+MP>DjD=p}^y}J@mBd&S>{#1$Q8RifvYA?S z>b|c8db6}uo2US8OfJAVPY?GQqYKZ;25%Sai>Y9T6QHDuVvh07V~j>f!YE5GBn;B% zpZ$-fy`IXCJZne)#k?TZAG!IN+S=W9b&XwJdtu=`EKH7kwX?hX1{l4n{GX6C+S-OK zEvwt84R62mP8PnCD%iQR3A9`e9zJsDpBHYAK}eWi2S*@gsa(;4BO*%E1QGH~C(UNJ zy12Ur2sTPTi8qa7>IvYqV?V== zu7C*X%aS{)g-&T%$iv_d8hPzE#6d5IPCdG313j)M!^BUssMjlRi*7jyO$|&p=*zdS zN+TNB3GU9Z& zLw#OY7+`N~ZL*=_W;!Cf@Yb>fIykoh2w5LPyeu(#Lk1`pbU}-m?5AaIHr^l`iJGK5 zAuUjnqp-kkywqb;k^i;)b)oHK89gcq*c)qLBDX5^c#X5A*#YYl?e#TxQqv<>Ek|qc zMnnkD2rb1I`_Xe<__Oe_DFRpt&@56&@#SI21W9m&yr;wk!O;l-7z9VDi1Pr+dzzst z)}1)XyWs@V|3>}P7}-^*OifW$s?su>i#6#fDv%{mB&QCvqP^K!f$RW~$}-SyJfFIa zlRBx_DRd7E;S26O5Pxu#ek2AT5GAJQu#Dr+%|~*2G({t>OkuQj1Ljf`BLW`oQ{Y2z_O z&~ru+SF05k^nV#9NhJVTT2+|~(rhPS@Z@kA&O;>gpxCVP*;jc7pGB7cQswQ>SJhTg z2ix$sIFa6i--OoW-xt;4I%*sao5<=mqJJQ!^y=_s8Ke?PT)p^0Jqk(s$nJH5KE%m! z2DYg`%4nyM;1lC)vj-bH;Ij@Ccsj$%Kx}{lmoiqacaCJ8nqFT&1?JoKp%b_`k1CBk zu?CRrSC@hO$m}-sMp&X!=lLm#K%XF#;9K)`Nx~vQ!poHqA+x0xGtOX>b@p5d3M+ON z#(NtN4JYf*zRExFEHeN5FJDmCH8qvLf!bOk-NJ61@`awOVqEI!`vCr~X3rI-P+)*M83sd1CDR21)P!(&&A5Z?!YBYa zVgVk2Y_`2W(woR6X&fAPe7Yw#Z5_)1&RAF$XF(CJGa0mt*GR(|NsJ@M5^o^iyO6Jn zQ;j^ZC4^5BUuTxN>i_{`m zOD3zdhFq|g%!4UD)jz+;++8EL3+nkce8XSzn|# zL#B$dN(35w zlA_Rs0HOTsv69j!>+q{}=qW?K*k%!ziEYkp zg$yvbE5#PuAJ(3<^2Ba`rc}XOygLLmFaRD|Y=^w0&9i^Xg1LMD%msH77FY*<1tblU zAXL9Z`(j>C#U_>kXlE1R^;DR^Tf*K?GI@D7=u^NUlh7RXeK8a^+Ix+rN&)!G!00~! zhZNs4$}$j!7mcz3#}!>C%5vgkpTmDWszc6lV8L~s1K&L-SVuzJ6X*bd(nLSIiLt;LlG%hZq6BG~fi03WY%!|T5!-93~f(2K1l`MoKs60c0- zDtt46U{?v6(kgt+;V6|kWu@h*>QX<9UU-VS9qvknOJ0f6;E%jKjnGxpWp~vmoQkU2 zRQLv5jmVu3e^RY*C@W#?f``j%mBb4ns!>oR;I+1XN6<7k5nr#SmPNLsL9=l2?nZ@7 zN)U8l<^cvEs@O97=dAhD{RuPX-`k9`cD3SH9>mY+O?((Au)}^@w9{+IQizNKvDJR5 z(w4803e~|~Dd0n-nR2(|61_4*W!7XhDx5_+9*{hW1$qz%G;1;*R@e(QTq#$T&owGD zG!{)(lfqG`AzxF#Gs;tyR(0ARh4=)*?aEl8cljyp!%7o6Wl|@ZxCzH?@w!1(+mm|!WJ2!*LoIl-#zchMk@->8Mu1L=HJL)&j@{x@o zj=?1WFuH&s@E98fM|MLKz_FUmkp@_1%u+ynH-Xg5ez<+{BLg{sGmZ=hTsdrc3n|U$ z1JlKZ-QmF4acTDIu;?y(V9?qo7voRgE%5*K-H@QMaVIMMHH2It5p2_en?xS}WT zxhLWI=U0>EFdJGJqk##F&8C-ylAzS93Q3Gw{=uMgP8Q!N%9?a-fp_+@e6C#1FIYSo z?FohUu;0%I-%kN$1jBy67an{t`Gpte0Q^?8xE0u}Oju$vy&;t5Nqpq{>3BEgd6x$H z1|~T7aK3le@&b-b!7p4i8D`-_XnN!4DD!=*N6c_FX-X&=UabsN`0LOl#usk3I@)`r zG*h;(RGKuQ*Y>M1rP;u^7)_zU7MR##5g7D*V^!y3+<;~@eu1*yw|d14N1X=tQCO}0Gt`xy9!sxDX)mwNh9n1at| zW3Zg<3CBd7*-4LBip!dM%u|A?pY>T0T7-98+}C$?+C_Wnm`N|RP~Y}stl0(%--@D5 zOB*_Kc3juQI28?7Z?5esJp9xQkyAeDu^Xr#dySDlRAN`6rrA|xq`8S{owY_;f>c}D z_)&81P@`F%DA!hZzLVUra=@-kR~XyoKy{P|-L>cGHo#siP$8v4mzG#+6cUeF6j&F{ z{){wB%>;j)3WDiyiO>BQJRT?d)o4dJVeZ-z*!RnnE}w=vmGZ)@YoGY*Os;{M`277l z6Y(v??FKJdmIfmu53rQ7f534M&e z-On@1=Dc$M9=gp^IJ3(xG#CV?P`{bu4X+UB zK2Kqa3{(Wg-ppEGPFsOWksy<1)>I|eO({_T0YK=?sRa_fm8G*)LR(A6rcQB%vyuKl zbT8aluZy&20+z}89cpFn4D$c_m*kB{2H!{E`?;W)h6>wjCCC!x&zaC zoN}Mk(%k=vt76$iw<1wy?VLq*pPEU1*7-vh)r|WJH*Z~?1uRNV+MK0J1JewiF1yvy z3-7%V{M6HcxkW2vlCLMRlN#_a1hgT+mE|r#xIOo4j@#`&2L^m(Q}`7?zdn?S?il!2 zFZD~WyMIb1<5Q%L@67JdP2x0qIAnp*H-jyK4CaHxODZ;hFHBk^#Pcjx9nNnCngk*}qD* zv(7TF;y?7+)Hjgdf}i*d>f6}QbqV3tC!(ABzwbWP=qS&Uw23oI@GHQ@=F6-Kq0^rr zpJ=M6bE%DLDjUtC#hh7t2Xf5R*FDbOi5c+h$phi+ZqLw+OtD9qHn}&aH*xXy5aU+W zY?_l32C~IeC^znn7_Pu*N)~+#aUGFhnR?>pl>6OQ~M)Rk#@Q! zQQ0bY$hx~PYqE6@rGNlZ>R>Bco0T{iHsu)G25!hHJNDk!3%Ckq;a6`RP0Pt8%L z(L^994h%&NzW}HypwYVw%$_Y!iCzPIkcDq!n+du3BjGoWXcUn<{9$iz&4(X;2zBKy zynuS9*U>SU3Ku`AyE(JlJAOts+==uly=ndaxf^O2ud00Y^iw}jipUS&^r=EiI(V>& zrDb+mUSUF4y{=SK+qpM%0NM*j%gWZ2m6d>`UcW1~J9=9xnm_ZT_cvRi!Z%j8e&?=O z2Dc>{j9~^PY`mXo*mF@Pqu2407OY*6p)W171S}Qh;PCCI9|0Fo2WO!H14)ieyp#il zw-Y8viH;fzr<{@H!=Q9b#hLYj(NR#y-r`j{J?h}%OGDUZ=~+$_Y%3P`3O8?lty7}a z6eZJgfh7}?^*)&_OW9j4v`X9s2||=zt3Y5G{6oD7+AC1lFo(Dt7{ocf(9@)ZD+%Yk1c z=_9}|`5@l-EL@V^B^z(}kA1>u7DyHWtU9i^jVm>3$kJf7mZ8@Yvqa_iF)z_+4WcRd z8iXd{>wIWCex?ZxwTcz;OqlKGY3zI+=eK59aTpf(C{4SyzCA(YmV2A3QkrdTJxP$4 zBz81<+a0~L3t^fxFuj9%;?%EnBM1jQ9oz;h4q?j|owI8Fnw)3wPr>W|A8qde-d1_G zk8{q^-g|FZds&t>ykuMQk}O-6Elb`rdy*YSLYPS)5O&ymlQ7FBP@s&jw3O18wsa3h zTgKOqmO>jHe$RU(*>MPbAOGw6lZu$&a{0XHd7p7V_j5nq#Fvp!6yvv$w_rDt4{Ho; z7EM$mz!(f7u7*uY26aMW^;H8w|DS7WCkKooyFlGN_@O1abD2%*5gLkX0CDOE0R0CG zml>@eE{l59!}LxHs@>W0g|4doQCu^GMIK*zg6+~P-mn_47hv868(p;4#jhR%zSw`E z&z6>!2eF$6$*dwRtzl=_kPHl~Bg$5RQA_>?n*`OHPf7k*oyY`ADu#c@geHC+M<&6p z9=DDytA*I$of-h2Klx=-W;)JDR=d4wX;>23O zi`0M@{esR?cbc7E;+yO#Lg(i)XN*w;=n=QE-nOg98=|!yPhd+Ge(4p*;Pd=5; z@96KJ?J`cR2{Yt!PW_4zyMP`eB2g} zCtNFcbAvn=wx?NBFAvCrX9e72S!JEFZ;X7iMObU3!8Tj19sgvM%4op7%oYM8_L)`S zy`{)|Puf?X*#Te2cg&GOpQXP`;RgrxX)nGe)6*GD{0y2K*L{!d(ffuv!ftR2FMSgJeRM>-mjN^-M7?LP(L%R^;3Ny?o4Tjln9C|#~ zWC&1E^6Y%g?CN?{Tl=T->@ibuCO`*uC)aRKaD+C2ADe6|4R~sKJUYLoh7T)GxB@(G zX+CX@lUoDb$-*2asPTOKF`S74+ zVp$zL0Mk2`WsMjI$9;6Mgz3n3)(+D~@y2m%)v~vKc=Xn0iIX3>;(_O1`uUkZxzWqk z8hDW-A6&A^(!6u+anIr%8!(~;XzFAyc{cSdOn8=iVb};|-PKKRU4W05pQdsb;Hl_T z{Y3x2Jk=~dTe|sZv#BjCZWD%EWuq8f;^c(EY!JJ77&@D4u=Zi{i-vQ~KckKfLOp@CTQ=5VR~bzG`Wj>ImjCs!kVesA z*pZQ;C}n8E9VL&$;4hD>no-n7Z9;}zKu|mby8|+y1z|`8(@>LTNQCEWANL;S+ zrPK4AoiQ;8*X6K_rZGB~FB3{^I!zV^e0iR576>NMv=bc%m7QNV7gD;GgT}|l+61-zIGS}b3iK?Q^aI6 z7^CB7uYB+JBjj4_D)PbHLvR1D=Yp0jA0h69*UbaIH|h=A0Z%{<=Ib7?$_`i{$%o`Y zXhZ}t-Qrsu%fVaBPx!%;FdezhT6l}c(Ch_<-A@jCaM>Jrc#z^WbtBmCMubX5R~^pgFfEN7E|dJ|l~*pfz>-Li4~^)$ zvvvkJN=vfIJ7gRh_Yoo~yJ@Qn)^cp?|GaqY&%~BvU(|SEClcRc;enVh_5^t}@qB{Z zkAG@%75fbwEy%bfdY&;xPo1-KEHxbeIopP@(k<|K8gQO(RZ79~hyvOe-Cezd)q4nD zeZhrN=?^>xBt{F5cA_(V0b5C4OT)I27rC&X&XXU5Ra#c=XaKb#7Erlul49Nc+Zaj> zCw0ao`SPG;Y2LP1z&pe2!Ijke zMT=}uq~O$i)w{CcULGN?quynC;sC81L75;dg+RbG0%sTtkaQHqIC#HQxmR{Ws74_u z1xZSpk2-@BU+Qzcy$Acmaz#%RAHq*_TV5wZGu&oqh8m2MJaD)IxYW*q0KElvebfWt;D zhT3Iz#{DK4=V-D1=tal|_CKs^H@1p8gmLolkf=V&0NqWWhyQxsGQKQG6U$h>k$yhq zsX_1@dFn=#EnGJIbRIXH|M^dE8cC)_8fItK)V=3{H{Sa|{5<*Y2-4C7QVI4er=~;W z*LHt!d;7jUQI1l(N&sBwl8-6fzC)%vC^>x4UnUz6iX=z1d) zx{x@}DV{;ENI7C%+X(8V?9e1;Q>O-MU<8O|&GqW| zNnK+|m=e@BkS}0d4xO(Paf2~s-m@YkR!Fb_HV29UD=r!dYHl1hkIdA<;WOR&Ud8cY zGCfL6V4dXW3a$*4VP*78-XyE{Vx08p^Ps%w=PTm_%W%Iob6JoL`+J>RGtNRr!-5NI z8e8W7%xcZ`={<&l{1G;ch0+vaUeln*mN?6gvH2oKLZ_8@_|(WH#xOVUTvK^RGni`0 zecoQgOHYIILiNex)P1f_7aW(eB8x67Y=D9iRL5w_>T3@dn?c#18qEp~A=h=z%*=Dx zA7;s4PaMdaN9Ss3BFOoQR7Nxk8Ic4sqK*j4h@LO(Es(bqh#llOB9}SHxAB+0A<~rd zJPwF+-3>V_k`+N>er}2fk)>|qGU&WlGra}(3Y~TELsY>;nFi7`r2Zx0sN$GaQdhi; zK~n}s?J=W-GmZtDcW-gl**EX08Iv|-!%T&WQ`;Tny-R-jPl+gMJ^QX18jOvMUB6lP z18LjXwjR(yV5D}8C1kBJeQQMABnr2Xy#>d{CH3FVNCPdp)(J_|&>6{ZHFtdK8e-InOFC&$(A$#_!L45VGS>ig`;GqFW{wm;=1FW z=|N+3^9l!qU~b@oz2KSepdiP?Fb>ua&m#hUE6R${$nX$&=JiNQzp95tiK;=+#VGVg z44@EHG)UnBo))nts>~&N;Ri( z^A!1~UQ=N@fHF<@a4&m6-&b&>Ow$ILW|kNv+-6f&Z_^KU8XbKaoh(#OK07l^em3l# z9x+=-rZ33nwd}qX4SWF~27fU~{|F4`pnSz{tg}>$ZPT}Hn}QuxT8=t5kDc>>xOk|* zdYLK~(R{WQDvoj(Tvg?%R$Vk@BNQlUt6ay$KLK_@b@dt%{=ZaVc{CVfO{nVJ{7#-b zXi5m2J|)K@kh|?zZ$cGx!WdSx)!A$8k+P!QPDJ4eu^T)wkO(y19at(U7- zvieRN(UA`gn+j6_6dGMaDf+m!cgO|Tl2y~yTt7;i#2?Q`O|=_VxgG9xo77tOXjUh5 zaFvP722x$R!uyS-p zzWbs_mVa(;K5ea&Q)B0vhoJ@J2gBkNc+(xH3hBF9Z^A#0mdgW{7|=F7+1d_OCbL&A6LhdK){p-+$pv zS>%~|5A7xo;e(9Q1K72L;hUbBhDwh;`N-wu-$!|MnPn|f1zqSCit1hC`(~O&MSi4z zd9zqb6F7y!T3d17eA^=-Rk&6hRtt+eSTM@hFou&DJ-7c+T-<-|Y>dF1ZoZn)9m8ln zXWZroR;!v9k$T9vAX}~FM`ZzEEB$W}0v8e&q+^VVEEUzVElaGSJ#sl}BzwUr9`6OA z99cZra@YX3Lh%Z~fuP?Z4L%_`u7Y*1=QYV*8%o(ttx)VjYH!!eglR1Q+lmxPY$?d{sRzIwC69|NlPjwHSL&NaKj+uH-$B zf(|gVW!Gt|$svSP(h=wPvyl;9n|5Ff!~po-(Z0JhePceMh2tB~>OO6X?mAANt=tZv66+i>uqt8ZONzN&4CNQR}6sOqDvd2BXVPE`7t!-jzoFA7=qY!X2?|36G} z;l%%Hjc8ZQ5$JOC0kVhyEi}n8NbOSEcgp3b+GxR?o4I+{*{9;%w7OTbX@Z({O%6^utRD#8Al#T=ZYpB0Z$h@QQ zUjT~hNpA+q4?y$wPyPR$(1dthoFHd_FOf6=ADgLhGgJfJsnkdCh%_9W6-|7vM&!QU&%6>1tt8W4m~C}?$q%7i-N=h;NC z7KF=I1wB{}2|5u<3ER`$Wpifs1_>xO7|kjXG!B^@CgV!BM$f^ed`@lBYKpF^!I^wM zqXG7(I(RfD19q}h!3K4*`-q`&=QB};FoF!A#HOY=(c{j z4f0hyJvMeG2K%zY@4oB6B4g(l$)`U4_$`PA%=o4v+a%~+8DqX#A6z!1XjJ58YlT{k zls3Xt=nMjIOwhUql~^rHm+JqXF}7(1)Y>&%{{@=?RJohDvGg96Dw65~>>U~f+VH*j z+an`5{T1^4XBx#Gp7$_$5BWr^XVo%S%Cl;%xBmPquT0Q74jtMTfg=*aefb$25$Zq7 zAQ?p4wuyg}*j!uQ}OuMLpTcVM;Tn`Z;s z0J|mH?A#imKJ2T(F5_F=L9Niv)p$Xuo%{>i?yX@4*k-$#cMoDctSJ<*2642<3&Q^1 zbVKRC2W+duG(av4E%nYmU3$<-0OlB8WzXgCZR1$z*bIIXfA;y?qauL6m+w5cw(;~$ z(WAf~Vyc;yx87Zk)$u3SYjqR4lE=|Cz{VJ|I4K$O#!iv{Y>P>TB^EPjK$oIy_SPz7jSe-FiP3A-}(_U7%-lGBmezbLF%&O@c{6k@GLRq7&ycIxfBN zbn?e}QOmM469{eT>1daA`;Fruay)&@8BQ#g7n)7NPJuy37YpjGyKkF>RFFM-?IwNc zovZ~gdK$uR3s8~j2Z~;V(cAhHfk9dUk7YXg;u-8GT3Eqil(*K(bV-#;)%8H9KqVE> z&?v7^swCg!?EC#gt)P0$jNbOf0m9&h0NP&{NG)CnShOp+ya6vkdW&3_T8QTWB{c$vD6buGVW}r7r&5qYF%cqxelg>~&xAAs)n{LCPVd0Bs~y;%NPQY# zSGqDgJZ#6t$vctTI+*+Ar#p#lAO36zd#g|=eco@%Lnj0JHtxX`Bd^O0xv33~>3ASV z8^-@MI@2B7u#^Ts!H|x!MsWb(yM^L2%?S*C9p&zh?BE z<$G8CX6ONKAD`q~xah6e4}iti?T`!j4k zuWme36pNy!ReNtLFjTzk*?0l>eK10p<|bqqh;&52T3)d>fcdl zkig~R)urZJvCrOn57^q>So377i0>B5GaGvz5_Rqh39M}Q`s=l!8AF>QgV!pcFB?OB zS(LOMCZ0a-TFI&LnHadaEW83BGEfaqWLWT_AZz#?OzZfpz1+5~xIOBC!Ld=?#=T;$88&EV_V8Xt?rARliP8kq^E{>3!(xMO^c zYId3-7O`?HK8L*LYwM;~gy#M!Pd?R=>N*O+5+>7r3L9SEH`xK91R5$u!?{nPYg1}e z$*|HjY?LWujo1NBc*S%r$L*L+))&f%aJvcro9N!_ZUM3Vp1}OTG>U0w|do%(g zs%y%}7Y1ZyNy8C^i?5zxnRX5T3jL}wJy2pf{LIlK;B-j2=F6(KY1)~8lLf^ zWX3g^(v2I3CVVh`%yQ;B`--%2!ufGF*H6CPdd)3Yw<2my^MT6`G_UI>mt%h<&(@*U z(NOk6dWtK5m~M?Hu{WLisLY~(byLcy%qMT!X^C!_v!SNDzHbCGSfSYsi_djz)Tmw$ zjp`SuWnO5Ms2>1KB?Mdt)#OC-O=y(sOjv+)6_D4D2Qn+S9TilNoK>h@i`TtcOIATH z)HnkYNp;OKmFFXny}W0c>N|kVmazdpD*X?#B|wXyn{7VNw+bx5A% zYc+3~ZG1eHf1Nh;%P$}jT0w*6pHQ8S?UUg`? zUk&OSvbLPfnQoTA;s<4VqV`&yq7fo`Q$I^j>E@UPp3y8xW{|NXc)^wHCI+>@ zG@}Ct*4oqJ%hN^(RovYiNWoC%%YO=o*N4NutgmkdQQnBi<&?yM~HKiwc@*ar4R$SdNo`T|!X07_<7`Jb}zqt=^DIKrr*-sBdnb#b9rH2I)ylqc@NUrF^LgbAwh4%rt z2PL$XUx#p2U8Rf`7NKr`6zr+YyhCe?DzQEiLD?WW7piQ5vqHaDIbh{Hy}JF(zj*24 z`vLDSFWEWS<;R}L>nB2J;Y}z%k8dem%*8J*ZTYyp{enbdZz@IR)8cw(mo2g{4U)Q9 zjDKD?Y;5eMi4|ve!+J(`AIst*AHd!s{hj`Q4?`A7Ro-ne*PuR&vPkHBY;YC|M4vo= zV}u2Y@wErYcL#6J;R;fWeL^a*zmkfiKD5^6H_gczzEw3W>l&ZXy}~L{wk8c`LuW#3 z*LL*a7YvYX*v}ibe`B7Bs+{`()~i-I<^FZqAW_3U3(Bw59Yr~{5>Bt0EjiHrtlUw` zIZ_E&RUqK&q7@UP8n{Zlq4eqplau3ZHR*)1Pag054C>j3;WL6}|Mw3W28u4ON#w}& zD8|M|H-htJ6gT5`mpB^48&>l0U;dt?I`RoFIp@TBrysnPzos5I{dbIQRr>-P%|utx|i zCe(>T>>Xr}P}KmkLC_N9fp%+(!fyufAHd5JF;5O|Eu0e6ejA+ytcd@syEM{+ zCp;eCdH1~jdIS05Gl9TdAQ1i!!L+KHRW44ru(2Ss#@#U z-DN90?8Gpc&f$2j^q>YmuXJWV_E~>#Yj10+_t_!7icx^vKabRzgM+?FV^W}G z7_3H?n1^$$0*2K^uW?%$PPZuG)HX}q(w3W=g&uW_%7;z2D#N07L4E1n9%xGW3ApV* z8DRD6GsAH8Md<1`p{q|`GcZ7obU)Mm_TxLLzwkPlA|h4GVx>#(Gg>(uysSULVBss; z1WXW1;1eO(8)=$y%Ic*)S&VDe#+5E}RCfuRC|hB8U$s#nq&fQpfW zfMAZo6Z%k;poPE%V+}+Fdj_Xa;qOHv{&FHp`PxOVTb_3Sp8>aaAPGywrkdv*?B3UE z%~@*|p#UrdoosA;H6qc`8gMOUY8L8wey*C_Heg>LMTnoVHEQkCrUo1|@cE(TKG+<2 z|J3Cx<6O4h$P@RTcJD@PS`wTewJ;To;NA=1@_x~KasLfj?62v7s&%~;wn{JzquoZ& z>F4j7R;Z+)Z7;%bmQdKgX3HA0)sSqG3v3)wuyM!^O%V;?GqScUCiME3S#7FBCpP-Q z2Om5xH}&gO`fP*Nn${?FxrXCh*0ZMYy4f0JCEi`T2l3K_s6Po-@j8qJaA2;bY!^sZ z4ha@dQrdFJE|7%!B~ZiM1wD%65*4ay26qo|M8zIZs&ZnbvUpjm;6?S)R>Lyo4xu)$ z)-7S=AgFFr6vZR(cU8}zTyTshGY;e!|DDtf1OU=!IulpNl_?KgL596W1A;Q|F|j!L z;#tY$Uk3Opy3V3!@&$B^=N2)X0j9-mVY&n2xmKoL)uPZp6@{1EENHr>SzT*qx3g*j z51`G(PrPLCG*Uf&HB+!ou*S`)}|OnRa29yM%~Gmx!Z82mw5l z{&7Ey{!r#dLrF!XCIVe68s&>>kY*Vb5@=uD@KGfJm8-Cd=0E)0_{%eGKP3Nk6Iy+D z19r+$@=(Kb72Z`k(WHq!i| zN+4-y;7aK|0|t2{fT`X3t}Z~vy3-Dwd-=58Vw+ppsIFZ*Z!_3uRzeI#F#dJa3$Q?y zh5FSgYS0)i1|UE(4wfgE7UfEvk52O)$Yzkw+ zZZMI=u2FWvzB`^RE)qyse1$~7{Nof&8(*Ji=#1Qfr@U&blr-5v4R7T(|o^bSTjCe|dANu^Y8yeYK zHLLExQy&n**qIybBKL+JSR>fRuQ~2zvo?)oY}%&-*+#WRljs6=ljF3Nt-{ObEhg%O%LqO1s=8w{%}Bxvm- ziuZ7w)S%IWr_SdDfg_td ze3keP%yDx8JgBLx6adVHYBW%(6^w^L>IyHA4gd?f6kqEgzxEPvvW_)7TVXz{dFP5X z(fa<@mhP!`hKNrj=Q4@*e)737{1?aGxN=JCV>yC#ZX~`$h(c1jzB$73#G-Ciyi<2g zudXpD$ngR(%rvNr`M4u6H&(g{{G>x!R5^|K-*vH7BW9tEr|X^QYgELVTA~3FL^`e{ z6i>88#pIE}hWFLrFB^H_FSABPIPkek+uo-2YZ4tay=U2s!wl{+s)oIUR#VO7GVl}T zFQ11b#z@s&5};O~6}ovSKB&F(D4VEelaQ)V{s1|Pfl`-ay(w5&O=hohD=d-rd2{9{UPW4S{<4oueJ9D|8R*VOx2R-fO>XlPN5 zH<~(HByn+L2c{aZc18t7etn|!(vZ*@Gz=N)T=?KHW*K(LpZaGH7YM^mzY;XeXB5C4 z=IbVQbdkS%L%|aUYSA|7woa|Q-iL8xvih(xu8c+o+}3=)CSWZTn@pg?Vy-px4?|Mt z{_=ZpGFIwj)Zjtufg3sl82?tJFg64yQ&xckw^<1rXt!hqpI$twst6pwa;Ogb7LK(8 zZCJ-`Zp-!ukFfV`9t?|k1|ys6O-{ESOzb~*lUwZOS?4!xw-4=|RKUhA zo^I8l**jfhgGS5HNa+u^D0t#2U(94lY zSyZk;hjl?rtJh~`HpEr!^Gr=_{-&)AgJ9jIqkb9r8sRziBkPpdEnX!LY@+TB^3$L> zR7q4C>sj7t%*|@+(p;WWhdjJKt~-cz4ygim_9(ci(%FN2vsGG@IV^;J=-n+6Xs9?C zp!O7nj*8!jU6kFwWx87}_VMLSx%nOIb1w+|^A^WivhPj>UsMa}3WrE`gKP5t$fazE zDgCMjs8Y;*X@g7Om-SgKxjv)Q(3=G-Q3LD$#f2IJZGvuu{H}0fI4`Fn5U(pviQ-Ev z7K=o9$?P<9!MoqTBuniS>6P>}U9Q7tnrqM4dtn>2zT)SdwUN94Z8wXIur#$!G#+X5 zDj3)UVo`(kv>K22j`3nVZEBI8oJuS?mK#3>yc`uJVFe! zD13>U{Ad{Skb6D^LZz4@(O zkldiY(~sahQ1zn+*?r`xdyWh61hMdJDCb4>PsL}`!Y8{l#B{Rl_6G(D5xe=!?JK7w zEwi2Q5X|0{?NVqqLDT8OX}+y^UmAd0Gke(^;@=Y+YrF&(7j^2 z=V$GdZ!j7_h~0)VdQ{k;NumtgFeyA`53nW*5RaDbXM;4p8i5f3k^-C;S&m^y@D^B( zZoJBJJc+Z!zbq*I4$e5c#z&qzNE7Q7Ik`@~ zuwFrD0PqV!S{$Q+E%%6E85?=U#Kd$j!ISa(P#WAVG^pqq@S50vTf#fH`tAPhXLJZ# z5ALlG_;;R%wRI>Oo3$BjYy5)JyFxlJ3<;W$CF=GH^-NuZpYISeVfi3i?l2SdrQSym z-bZcKP#zSW()TKXq`b{8Lgh4+2c_VWg?J5+%W+_7s5*-dvk)hZAAiAqMcTS>yhLJ# zoM~uwO_-_FaO+o2XS>H`YV}YY7qdNSK956wG>-TR6Ksiy`~?^WaG_-Ue!iUlRJX{e zW@Mn^!`>Xn4v&z(H8gEmk%x96G{w^s%dsm;7N-v=HPV<2^x@b%d^@Xl&AiRAV*PL6 ziGRaIm7dlzI^#XjE`Cz6ezbI=YW)i~e|!fOG_(8&5C9o%isg6GC;gY}!lzE>;j2rAq8Z0k zFu<2ufL+nHtn&Y9={b}OAzU*lUs+^=$nEfC1~p)?2}m5cFtI|dJFcVdiHXuZV`Ed00Lj3^Nrex0ptqYsZ+CU^N8|Xdq3wv0P0oFt{cNFPXlDvZC%>yQ`)GX-_P@gu?WB!R@NlLUPgCBs9)xpX*AcMPl8(;L!jajS{v!wQM z6|a&k0Jfp15B%AwLfD2X-Wo7lhx#dOqrpLIClI2V<5I!L9cLyE&8^{VSU+yRa=hI}B434q9*=y_{ z#%1}u0JfH2(pOQTMjF*Hhz9b0zTj-`8 zcdg{8WURjP*A1%s8%?Q%A}(v|IUEda-?7RbvaZ;+6YG_UngX}Jwhry1UVZd(TWL3y z&Xut!{!?8b``*h?Xz||;zMx5-wcdraeGo>{NUda9BbFk#T$}$jAKrGtU zMWNw{^F!GNoYc3+8?onRW?sTRDm{tcQyRh2NSy0~X{`?~V$jV~Yd8eQXyMWIO<-eG zncJnku}2#X@Q%BP6HK^>dlxTahI~e|ZQC&UN9?D=WW!y66a<5S6yV7o&_4427lj`B zR4uK_3VJv&TnFiRKcwRnzJwyu6P1TW+6Sgn+z^B*;cIkXl!#seA86abi~;q&m%eTY zLh#2RO`0YN9LB~nF_@6^dg9KzrZEC2|$`X`^K|{UzepK*7qn(?L3+7N|W+FVjh8>;i)$GdX29`C#566ow%aITa^PMQw>4BR6_I9B` zN$;R5wNT;A;J+Uw4-~L}4&Aoj$A;0z@C{E)%j9!UT_54=wQT=IcVble&qk0gmEvm* z-3hfx-I=0-cQtvHL-Fs0Yg67;MFsDr=_*zDBkT=Kr`&Buj)WSyTl#D$m$BRN7_DcSjvmBpwMb4!i@PuqZ{Tq$!k}I0>Nh@DSDl^D!@vj=obY zlG!3`WU2Z4#Ke3rCP3*H{Melc%;-fp&EG!xgglDfaO^ptcdP@YnNLQDmF4TPe8#Rt zFbq{hSkU!g0t|BmM*9Z9y(=if8M@EZU^v2|jxQP_&_fHuC5IKtK+dSPSm8(i3i`AS zjTn43E!Ajx>j^1G9k4NYtdH>8F>+7gzY0PVYn-Vk`^Lsbdr-ZU=E;PI6JS@2Zm7Jm zSBHh<<-joH(4;|h>P$9%_v@#fhV>}*9V(rwC%DuR>!`{a)k7ei4UbaQ>i}6wh*fA; zLLa5ji6Rwz5TS&=P%XeuUcocbcrr@7C~0kq^j&?b6Z@D!V(+ojR^!i>I_e4YvESjX z`tdDsC?FV#9W$02Cxz|nu3rt8ojZTUT!U>)q*8U(;v%*g1Zo(22ZYX$F>9=MVzPdr zRtmG+64l0(v9Xrl#|t!KANBpX`-i>X4-BGR{+qY3+naLG-E8 z2eyOgmzEtnf(;JRYhoK_tZZm>>qcf=rA-CQ3V?U%C)m%h7bsWho}aNP!I1rOeMelW zg?)>z&GS2aiKQmJ8|I3r^6MQ+Qzkqu6B1q+!y(w?Aez^=0%f zT@PAZkIJ4`7Q6`}G$MX&H-IFk3{|fsJT$5dm)_uLwd|+fxw4Xy!O}nK5-Z9fkB*oW zpR`J9mt#6k_Vm{6Km81jku8G?B?-U9wr(quEC@~|3TTuDT72x} zndB42;$Sn*fo-fJ85>*CsTjx4*Vu{%qhb89;x(gI(plpHU2$2M5{74T2#?;@*RDqL zGsfcWhRE6pE3D#Xd(Od(@Unl*@-LsZs*R&F2Rm6XErpW&BQQ9hp$xjL!|R~ZeH01N zBT;Rxs{JCjN?9)T$V_00oGfAxTe^a$o!vr6IE_2jl79wmiq$go%omQ1zM9wejKHEY zIje0=09^0yi^ZV?>?P!N0EGT%n?OVFq$>$`pW0>QiF`sn5MU3Dk>4M|KP<(G5mo;U z`|AM!;3U5L_=-{uaXmcIpV+SXd56j}ITMmOCyi>;3_O%+A-JQiED{^?gBM22B~IFz ztrFOP2}GsU5ea(W;|4Kcpf_ZoRYU>=xWiAYb}(-n9Ubn(V7+2DU&6b)nXeWTZMaB@ z{WE547dMMqllkT!UBrM_x&K9SA1n_4!c$-=eKx@VI9?|YV-yIH#^P4-By_$*$aXiF z>l(nE?Xw>DZ6@bFR@nNn4nY^3UHUtG(fj7UPhr62 z;u12a71WxPl-$r5A@$`uz>qji-8SJk5yUQ`6PvD?iRi8#me|;1Z1Y2)gH0FOMI3jX zU$99YX^P0@CZqgs04!Fr6G(6uVJZ@#Z83{omJu$a70{Ko%fQ~JfJh_hR6w?)ykpq1)NZOi&U5D zODb7>p#=N+(h#e4&6-Wh7KFGUp@c_)28Ol~mHQoN4jJ)pDtQ6bF{f@I!elFC%oBPa zASg+%p7hD818fRUO_1wGvFlQ?gV&~DJ4M$eyPuqt7@0P&gAFSKQOA@|SBLxzqtj_* z)Hf(zz=wFH2VX9VjDS4o$+?k{!FF^>lW<9ov~uJkB1scS@Lzs!)24Wr&T9e6G+b5B z7&)yI${HJ3LN2X4XI3_bepM)r;HOKh!#btDSbuC9|1H}&H)~f|$EWHgrgVo&rRhRG z*at=5vqT4l@06h@l)aYOH()Es?NAi*O8NKggAO(_G4U(d9exC@v4zhW_#aBfGbc3x zmNQsiMqxNc6CdJEJ=@dJ;9<6QX|Cy2hrRp(t|x>w52|V%oDsIo4=4;rZ&TzIF!kI) z3SmJC@6z?_A6>T&IP~>T0>V;;4iYJyygu-{OV!+@@~fKT0==y;WVV>|qfL6(*f4?) z3KXvOUE&c+-d0YHqNAa(1hsH^=PBo)jFx)#6H=*4`H#$kh*p?5R5A~YPQVW!?ojt_ z30Ld?6q)h)V)2I~Vx_9H4t#e_3l~HHFBgl#=G}*v0V@+0duL=o?tGhc&&Jgab)t4* zFy{RO`Ripl_x?0frQ-DN7NAh>2vWcns;7acqicdAjmEr80Jg46=>XUo01_80Aw|Fz z)YGox>uC{rH+BixYC)5CQY1OY;9x>Rw*KmAtgq{-$Do*#9>-#omGX+heLAT*EFa0&ytz4w6{A8-$!tF^f<|3k1FZ zK>mxDZ~=~q<6v_@nMLfKa!9NU``hi6a%0I$I%#hRn?X|6(*r_J+|7W~a>g9WD-K@{ zdmdyLY+{@EiDm8FOI=crjpvrM{bgX_(2z(jO9pWf%N*rMO5MZ5xps^vhSghQ-kou- zLP{iPA{n6>ba0m+y*17R{&w`L2huR{&iOZ_4MG>!fA3!}CclV_95!LMDv3Q&dIkT^ zu{W(wE|(#$gK9ub)PryO4ciIPMQI(I4#}aRtkQtU1Kde8?|GCu8&qeZ)fp=ua;6hg1h7P~PwX7DU+5+@`%j?1VZt#`pG?Bs2FnoPaG0M> z$rBT;3;@L&hGJ0|H!h8mkAvr~beq9*cL;TIdWt5~;4c@+{%jUhS8$7i%cWQA9HLRU z*JRCo3ZI+YJT3BOTiG?DhNOja z2maTRB2LU7yYW_VKine6S2Lw_vjYuvJhc)om%$8xXsnI}@Rgm}+^#v8(nP$#$#91- z=AbEF#~a}WnoCat&!yHdqz^gqTgg>;x7j_YH_9UomtSt{@9WeGT|8N&rCIZM;Z(pb z^zxX(ByTKza1^mH!ie+ImDU62ePJs{A!VHY z%AwF(V**G2SyQMg9NpGw;gB7pqXm?M3A!K$JKV*Si*Q7h#C|?Cb=xF#oz}VACmVP$ zX(kY-whiKQO18Nx0>F&dDSGO;2eH>Hwlt){aVECW^aF9IDB z3FRSav^d129FTp$Mr0%!z!R!%g|d-AHMztr7HI`b^To0UK{Yn^ z8n&8DA_Mu=2qjj=kSREYP3J4gN=caYngc5YoeUIS7SY(sWp`RdS9ZL3mJ5YghP3a4lARg{I4Jtbr> zVpBS)Rzmi&Dg)N92VYsHRUpk29n_FjOaR#c`bn#$6oDa37k(j#qypj-FluvrLR@i? zFQ9SlNougDy`}S>hlfC)s%7^X>p|21vdLeMtQ%tMV*#dG!}Zi@Sbr}RMi-v(;a09p zOmq+eDc(9l&K8KFoKPjC!A1!h52PhRWEz_$ZzM*@d)p7}KMQds=(SsR?TTU7EPcr1 zQ#Ab&jT0eoj2017ctFYvR#G*J1YI`#O6dSW;;XpUE<9NJkqRl5?3$eX&(zc>b83(o zMyi|*>qB zNM*BXRtx-4<{P8Nz8wBu`Bu-**j0c8dv$tahA@h0g-e z;L?5tBblW8TW7lbeAvXqaW?1bhNX#9eH^ulVV&x?w})&Tflngvw)6+cKNpK#f2z4v z&J)xE`;i0eM~$q``+!3cizqzuSR>nL&Gx~FR^MRAWX@&`4t)w~zSY8du_uAVRqkcP zfi0YdqGkq2To=JK%S{Wt!*3BJtG*HvT-fPIjV>+b9A$;Bwn zt~&40AavAVU^Q54*1+7p-eAZKh72_WDZNM2k-=m^X}vt6h`yehN~P}8o7pVbC)Y7U0lc*G5nhi{1z~9FE0xWa zd^NzIvv^Cph7i%eD6KJjiS}d9e}vX9qE8P%jZ;(D@22HCZLy6e&ca`0d}L%Y0TTm)Bs4C*(*&eD zMk{Juygp3cQp5rU^5PlJ7LydeP?m**b<*(v+7&QTxK0~>YMC2p2+s-FJA#6ip~Y^H3s5Bn<{gfXD?iU zZ{fQTP)JSILOa9(zDH3PjUeQ>-fpKLW6B*-XG(oVN0G8(6jb6+Go^5_y^#P*PYd`cNxLZ4hOzpsT}`6AFxpvq1akg>Zb%n&hT8@QRC1%lq5$@T zkY}nBO4uU4wrf?luD<{(zeR~kVjLk6O5qEHh?^Tane1XixHwI@KHhTWGVU&vubB01jlFL#84mbh?3nDT!)z78KSQVdHo&%-s+`^ww zz1(k~m*6`v0r@|enEYhhq`D{Pf&0geuaRO8lCEVlGvv?44TBSYlyD}_v`%1?UEl1g zuYsAY06&Yco|b$W>oK}Z7c6im@V-o{5Br^_Y0JDFt;wvtRMjUV=kTDmapRl~0ot_( zmXG74CHNJV^8#^6YN|m)S*C$um!%BrP{buftEf6%@mJaK$WW?WR|;W;vYx1vs7oDJ zB@@30SCu}f$2XKN-!>rB$>^YUuf_s%5|>+=mDnwxVOsJ4lIbA-4G={S4n5>FFfE=; zmZ@$qrDqu_^^agsTc^5oYF&44RPKj?WQBEd4hvp$4Q$oK&B!64X{|D|Uk|iJRSlvo za^XH41p!keZ7hJOTnk(abQd;(s^Iyj94vR_py;fievl$97S@O_glY^>W~|(b#gQB! z6P1yeZ=Jq&5gU(PcH_8mrVYB4+@_(wk4r-Hx9*^WI^f1DK`}Nhh%LK$3ri}ZZM|h> zvyl9vRaNKZC-|Nq_Kz`X%Fi|$c(qBQ5hlK+&637;(g23Ua?}E69{zhk^s>NkA0m1| z|BneHH@BxCE93Pe95$GT(O}LP%jPTX9^{#0fe|syEB}0NXyvl8 zj2=o?wmQ)_IPB7PoxQG4%!VB`%HpCut1Biy+bRj^ZnAHiZv*`%El(Y#gs|u9neAan@#;0_^Jnysu5C#T4)5k zEX3lmSJ00H#0$!mmsvc>>?m`CfEmY?RX;^7tU_KNy(;(@Rgw($OYkcjE!f-B32+RNa) z4jM$g<#rl$Do_Oki3_k8&{KfIAbJR7kjPUjluOidVHmK?Bc~w4MY-H1&tEZ2FMeTZ z`Db@T`N~%=uUQv8xIM!GfJ63XOhT@OD>3sy zW32SufdS|)BFGf7hPzt1QW4Psz!0GwxG-}`FZSNCJBY#3jKslK>xF5hPlE3%UCZR) z44j||*n)P@zk*=v<4IL47L&tcDXe-zTTUF7IBpe!5P2|5aFqByfi`C$v4`@wAOaBA z0BLd$jPg^in>rY(l3cvA4tQWVE(lf?HtIK}7w9`tP^(_w%2}gaLAfL{A}AKg9G3sf z@NM`wHb>qh7}iX*0H=V{nET17{o(zH?05Dp2Q-uC=0WTE+z0*S$5ToN#~ZEV$)PF& z)T}&BXRi&~m`!c!9j*G7h&UmvkCUGcsFI!mPd6U#wRXfrgTip4)Dph%nhayzJ9z<8 z*}isMpj4omh;6KAa~O9jq>b*aQMQq5Y>SBSAEjOvuRGd?1Q=p>cM5KLt%0r6viuL8 zF?i7mEzc(o{rDi6xK_&JIh{U(;OwT4tL zb`Ddf;tfb_d~8)ZPrhNO0Re7G)B}w1M>I!Z+Qc)mCADD%W!6VPnWGO_Iu=m4Z3NUG zt-qKC!PYJCs!mc*R{ET9(2Hx`%9jAk;7nHWLdLkK+Qb zgr@L0ST>K1=?}`j#0N_cY#+mzQg?Th=aPhyHZkqTaaUHFlw{VnJGR0}2_hR4N!PiZ zEUmyZoC4&ISxY4`&-?JM;b3WYWVc%g>fBLD^op;Z74yClib38kT0u7novg5f$J z9xD7l&b|Y%t@2zu-_hQC@4ao=nx2v+OR^<-Ti&tb>_sLcB!PrL2m!(-5M~&GG7VcoK|ELDpP~R_WD&g zf1Za!#?wF@ny5v@x;kHNqF0ZJ6!8hiMEa28sDZa_;6cLus54x#j2_)ST<9U9Z=tQ^ ztr7ICIr2ACOt2r@i?&FlIp?^4)R1hJUSwOnBO)?!W0!4knJdmUJKH$Wa!=f^${Ul? zUP+Q1oSvS@<9yujqvSlO_^}WHE)+YTM!zQY&A5n%l4PPHQ)zNB zLdh>HS`re-C#g}c5@ZtQoAG)sHFP?m)6&xVh z&9^1xjTfzPYu)R&pla;_)%F)n7?5+|Du)j=oF{60Of>*+q)1qUbbT_rs^B zJ6I@rnLwlpL=%jd4dttC3vgzce5&uw%kepDV!oUl0S2<+7`DIZtvg~ z)FHQ^#CHYIw?~Ybv?*guwQfpSv$CWtQ&Q%)_JJA>v$CsSLpDuKP2mj(yv8nmCadys z^O#fcz&K)_`KBiT{2s~{jV~P46)L`b=bmQtEvLS-P3zNkqzgf3Ij{GCkT=qY)vcPC zw&R_Z&s-lASZ$)jJ+E#+Me3m~l!gZX8oO27nT5hbO^qgSW>!$7r5t2sEF!at3Sd|? zXz}2{oB@`)>dN(SuJEPNseHYgYyFfr{+d*3d~lXJN7k21_e$^Ma^{ zt1Ph!IV_$);0_a?9DPD&>o+M)L({KT&|_3!@~@!?!1FP=wYOVG5e2Y zY4j>mn*CWS0)0NXR2SHKstxdI-CamOIynlo(zw=~(IXOr&@4T16n`IHTtWIkDt znbpibhSK;YuJd;UmpQUFX#k*Fz!EA29E+7#5&IjpQk4WqVnD6oVrq>F!wE|7tkqzj zCq_o33ig9PI$V+{r68&YI2i#1U}5()-#+%IBjjKH@>ZY3%FBK3Kh9o9PJ2d?XN3H* z(mgqB(OE{PJ}8+xzzR)kQ3zQu1QReU8tKqQac%1*oBae&EU8sc_04WaX#f5^pfFm5IdLldL zDb&){4h)wvh~N-;@c<}d?$Qs=H-TDkbmcH88kr}ybg)5UsdYm|HD+De3@8mhJpOdv zmhX@kWo_NnUr@BS+KT1NohmOk%Tnsm>I%VsdE=HN)%Ve%=9PmwQ9y2;+tChW_RCjT zVG_*KjjTu4>eIWSyVi0XtKIWPd zlPPMMJW;Fhpjck0_uzQYcC)}Ou9ZTId^ddK7W@s*O-S^u2J<{ny!hF)`;N_+GqUdB zyNb>}ztkZJ4QDju`$IzkbebH*i+cpNls{U5EM#%nK$@COz`P4eZ#UN&a&kk>3bH&t zK9(bda#0VIKaX^%Jlr(bMSOSkYto}XFYxpRZu?g)4HG>Yp z%ph0wA4aLH5rhMntyzOA7G_xKR76i8=aPE&jKyY~gNKC4_4Kkats8`WX)ybUT0t2( z=l#>S0N*1Io*ly%j!5_+;d_O@sOd6PhY!+ZR0WVx6~ZUGgc>$emzRuQQeH(^IVlmFvydMDY_}%BA;_(MtD?d0g8+caNW;#f4BM^ z!K|J^OjvxJ?`9TzvPc4S;+^&b|b5KMYgVZ3s*hj~Z{-!m{}Y{D0!r zK44Q)UsPnRK_0bLF1qcly=+=%yM80i!LQ(x0?YvazCp&wnUlowjpXmwlYd_Q3^7tY z`Ms5p+k~S4&3<*c+RJN5GzryeJ|S*Wu(2kLtEtJ&ZcA&obzn`Hw5%_$LO_uJgd~Gs zEdGK}xEL_ixDlZ138-8za6Dl5Hbj0KzIK5@p00)Ht$tcdTwJ{o9h{RxoQwmZ&)o$W z2Kh$T)}ts0d<`TyF)A6-FtkP?YI*L1nIrYyid{}H+9Hf9tY)64F z`obKS{)isPx45K_DQF-`W`o~^A$_1=e>@$m92;}J{yNIN_~PxDA=e4kemqN@D-S>R z*dNH>zyJR6<9{C;>rY|aCnJ=Jj;Dlx(`T466~lYx8sblxOy+B6ert6LLD*InmLfSr zoqsEj#>pr0Z*9aMiR*>yO65_N6<~P-jqYF?&>{*(duG!505mjDeK35e@w=ly0IEv^ zY>cK7)EYSO&7_Rr;S*B|pKzAzNZ^HDD>1Wt`B(7huYu^RKL7KX(DiFTNsqUDueb`N zIg?zL3?6^yGNwev-TwKT9cP@oPpkx*6zAB_(&;|?K%X^hDV9Fh?5yoDm4ebe4S{960BJ#!tMVq3j89jPtHSt4Why{gqQOCi z@rqMh%^+3B*UsL$-gwp1R?s&T`M+{6L=i2V!aCG!0-zb|nPbxfT=UZSBCx1pct2-p z^q_Xl7Q1CSXHug8cwGOiOQzEf+JYA|edy<;3GAYGeP&XoRHZ@dlWU5AQ8@Wq_v&p4 zZQ;%iVak}1b;;7`&7yDC-J)xapD@jA@8D}xoQ@sS7P5U}Vl<0eVq6#aa z7^Zim2#RZl2io||&2<@IJ3?pGQfCh9LcK-hqjMc0>j>Yu9+2n$>^uj^|J4!lLSbqn z5oA}tgANWi-uUnk*2(WXwx7I%7-Pep>-}T#hhCk>6O-9b-9dgZD~$B5>4XI>X+SEA z`Iq0gvO_v8N)D{;kSSPVzf{`nnz~_i=2J0UqDdOp4d+_*$%w2?S0M#}^mP+_IYn*z z1jKM9Gs}{xiO>1^0%~h?sGW9!Y)q5S`3C*i1+rK7zqmlcUKaBFFD{TYv1)+~r!i(a z)h11<8?L$^#+P4!@#XpakyX?}$^VCN01k`v6^C2^SN&WD3FX8WOF&UU?S=m@^pU$3 z_qkIe>X3~)$$^>V!G)P5Ix{uphiTrgNU*lQ0jPJ?9^~!eNhMw*5^!aD7Mu9iAIMkm z_S!ekCq}*Q(YChg0-Cl?joAV6WOhscNYqv*MiKXt@4q_mWc3B~!%^}bbT#<{ofA)s zLoy~ib@XT-`A+S2e+j6j^dJdq^|&Z%8ns?nhfQ$-h@S(_Gxfr+jx^MXQWtEaeueAb z5c={o`N4PycJF@c!i+NX#JJdM5tp&w?pOO2R?aZXd}&3fAf^ck30_yr^B_(n>Jci0 zr@KW!x$XhVwPyqb_>Uk9`5vRG^2G|$svV`AUS;ShGc@i=ASg{EB(RkAVtt>RE`TXW z6o?i&V|S<4s!QjAXM+6%9-@i_CB-FdrHEp~fcQ;;iXgUeft-rTUQ6mATqK;soCIv; zU;YjP;2RZ|M+Qm?U0hr!&7#96PV5^LD&#RA_}}P#T=A(vjvDmFH9DTfDPy6HPd<5g zRIE@W{P@=c9LWnqESXggG=82*&msSI;so*dold@n^(hKxMgdfkz0;#|12&6n=o9YY%j2G0D^0=o}vX_FM#`BHLK zZ14U{!#s_O)q3;oU9Sz@H-gge7ov1-p`rjFRioE+72vU|&%Oc+`nV34z|t;0KuO?X zuUWPgG^MXzb_@98P>BMs=+jU;3x5xZU~x8C&$SFdJMbnKLlyzj0^V$m)r6-14F*`< zgQUJt`(9WI0G{^&R&F!F0=&~Lh2mh`n zwnoEmobGR(Les>r2fZVQSL;ET+Pd?B71?H6S`(B88@A~aYX*&c;FW6gqxUIwX`Noz zUHxmpH}fb0e8)So&5+b6Ub8@+k@s!tt@t3&E|Qe?&2u~;}Hv7oO) z+-gbh+v>*__0GAA?wCYm6JT0+8}l=8C$K~jO-k*6{s3opT0auFSoBMyX&>iE71gB; zX(S7(BWe@A4u&tJ`&wyqe%-ks(NN3#znnD9#JPH-AU0w~caT~1a0P*~kX$6TY1AoD zFyhH_mc7JYQ;O?}{$jUMGC|Q(yWhtRn^-Kmt-Gc(BI9Taz@tZPj ziU3$Xli~643fvDt9*R-OTN(ubGjcVfteStO9ZRuB?*oikrs90^e;xpqj*Q79Rm*W)HY;L7>80?@32XwjwimZNp7AtOT9u}c_x}rG&ab(pfn|} zgX==Axd7b@)?C!k)xr{GcMs$%?B$Nve;3fg88p_#2M6c*cz*NS!`Wrx^j= z|3XE;6-2c9_RSc~!(WeLAG3?+=8$=QzA0zRcPdJ<_U>H&;|ZEDh|I`v6?SEj$op6gJH-9lwsn)nuu z3rl33vACiQ_hcg2aQPDSWc21bz37{QfLnn9_0`LcEW2yjLl74h&IYU-Qb`8GrFBX)KpU6F%FGEjndUcK|$iHT36hsjw`ISG>A zAK;1|0=kviQRwiMSACBlM5w6b2kMvzVXx`Wj zlL~(KJlWT&=`K6L_}p2_gz73x!lhb`u>be3RG2977sWV45k{d+rV=qk9&pW4wvsNG zIX^g9;MzQPF1V`)-GbK)yj^z&u-$ z#bqU)8S-18rnV! z6X!5l2>0Ce!waPYg&)D&#Rqv&&a95JT<{P-g`Ok(FClKOZtozhgX9%`$I9h<%H^jg z{g)=Oyin_wcgyy^oO)Q9DOJBZHdg5d7#u26x$qNR0*op^_CwzuylWJ;EX3fLvXaLzDh5g+kr# zMf`~#F(N&>h1~Xg#(6gB*po-b9cwN>n1S=f z&0e#2gYRe8{Rk|ozIM%`NazyPAxc~q6P}LtYMcCmK4~7sE9&}^#6I(bMc&(AQ-$*>drFH9mys6Fo`U)sDm_uq3z6ns%2 z$QJS#0D#FGfaeTsa;3*K$b~s<28J-%Lcn6qXAMrEIm3~{mHcyzKrJ$2S6c_gJfr4| z7|z3S5q~KXxPZXodGzsuM_L2C|Mg>SAkKfRS;qXC2j4{B0Z}6KZ8G%iMMAT1g0J`+ zv3iyqojS-^Gg?gzzW%S1|2>N}e)59iX@UOZ&50(ohT+cXS*Gqh`3QC`u^y{bh=(xs ztC1t(Gg7eZ&=h>rt!-`5LQUUcw>bJs7KgcSC<@fClG$Sf>KC@UKS}9_GJrLWt96X% zr6^a@DPYV~m=GMi+8PN(2%*ZT`sjoHzJb7*rOtQ&00UAm95eWx7rKr_&&&++`(p=h zxeaEe?CdQ!T)`cdczgz9lBmYkASl%WY%?His5k$mhH8c2o{FhtT({KVV!xC{jzYzN&;JmZ>k%xJODR zj#$j}?GS6cvv!y<@s0jfPMa>3`O#RwkhyA;3-j*Gv)f{^O;biL$gVgxUXdd7R2Q(& zFD_1Gao~EoCf{6VY6fcKlL~#IDbWCYaT)cT%fjc53Sn^0041y=rF9q)E;~+N_!(k2 z2tQ6d@4tyKSAX%ra+V>rYX!?Fs;rAC<;mchX>*%#YBl*oVxszq)`0=vAOHBk11LWU zv({n^Hm;m$zJOD`VQg%?8)Kyfs8>#P0-^{jWHKf3pF^id56op%;HoW)_HBMSC2MR_ z6;#pYeIp&@+bH_?;`+zQ>l_{dkAt&loRuP!W6s^G?jpmZOA z$;mVn@LTBTfx&W-z!qN`7$)ZJd^>HCc=SS>izIBKI*sj7Mye3L>q#IcsmxAyb2a zP81y?_^ciG%qL7IU^9a^$#as!6x{||NoXg<4`qNJ%gOQm#D5Hv*Jjfh!r-#>=5!%_ zPx(}l90#?V?N&DsxS&Ud2**Q@^Q?9uAs6$*8JE>l?$Q!Gk(8Y`f$O9MW~poz+O4(r z8O^4_1a;hKDctGVkj0qk(70UdpuTniNAG1oC-9PQ5HuG$AfjPo^SxlUa|<>M?ShAj zD{N?e7Br<7>0Wg+oq91{_g=04+*MQPs|_^%jV_5WYGxn0Ol;=P-@GQHV$Sg_?W^wG z#59Oj9vYA6`77Y(D{f!MGzjOet~Beu(x+;1_BlET_KY=e?veXFq^)Eq1WUmp!JaaA z83zX0Y+Nix6!Zx(AjVErD3Bm*0%kj?jqnReDG$0na}>VR?kCD2X4%9I`HW}5{l({51e2|F!?ZeswGg~ULKeiYbL1xQT_3OZf!9tk~ zF<|s9G)VcOh-%m~+bC1Z5D`M{Oy=gR3s#041bS{rUVV6f3`o+<%tMdn(4|$WH7FEt zgm#Ar)WjrcW)MNEyw0U}Z$L;pa9fxIS`5Mc1L$jT+$=U-H^?;oO9Q0dhzf zA5zK$VIUR$gmjdN`Raq{lPf&8f8%PVRKeZz`qjTMZGU#J*u-0PY{!6M?{c|~J=14#mwU+D$44x}op(o}Mege*P^JmP32269gY%jHl4Qz;XT*aT$a2aXk<51WbVfZjO=NFL3(R5(Os1 zP(!>r8Aj%vwP@`t?j9ePt5{zkKYVObu8}hsge)YZR`$fB4(_y9t`B1_k!p&Uh9(oMU1HzGWB^OemnKGmHWrX zr?ZGB4XIQH+IHA6y1~QsG`P7kLMsV3_YHqT)#w&KaeQXlUZ%Nd8>#YOiH{l6s zsg4z^IMRyFMktq-Mr6biRiA@Z2j*KU8#R z0IeOVesp!SwQTVz8yiNiz8a+tAC}&H^PXXzDYapUYnK$~TlCx+?ck=A#K~WEyN_%G zR$?~-_6N`?#Lsp~jB3DOfY131`8l8)_n;rNsXd}N-(ddYK!5+){!`?qlY6h+y|n=_ z7|*IL+qX8I?m4gqCU(-qTUQX~S}j6Ps6slt*ki$}))=WhS%aQv4hW{bCIOQf1o(R; z%tgTz{z8+{1l&eYAz6T+Fv%bC3*FlSaI>WGjnMRAU^HUUAY9i_@`SkV!%q^o9k*60 z18GcK12j(fP#W*FWtmddX7o2wfL6ZvqA>0o=z=|+bl;p>-sYa)5aWUYL(PpLn_>S+o; zhr*LX2YM#_;Vqj2;lP&d=n+=X+0&^OTKS4ZyWt@cgnM{U0)izYE&(4akSEb&49TfK z!q$MA)$*-78RY&=-LH>8E9Ql#No)CV;MvmJjCDp$fi9gfi1+aklA2bn!Ovt##-MK3 z`7OkMqUF#n!dC=_q2HQ8n`fjNb-o$ze7AsV&5M=FL9~Xv7rqLFr241dfG8(sSO|)M zg*?{{T?4C!1roN(LT3Su6v-L%2l67@!Ux3N0h9c}r9C}|3xz!SFuIC5JM=_-dM>K5 zHkDbI;CV8u-|{4$M9oORzn9O;sJC@&Yg-aqZGc z;D1U1%@%N79k+~(l-h8h?}R{qPm9FJYG>(D7L=QIjDZ{G`=^J8-yIq0K#y|BnN`CG zmUG1-vr5)#1-Cm(Oeg@o5ZLF~T_U(V&{*Yjb+_He+j!mg0Qjatw+F_#O5icJD_s+2 zoq6W*u|0$PhtTKGe3p@|-U7wSa1?0`yi0E%0Bnsx(6aXkt8QlxZTWrEwsjulUBBhz zFlxMMko*?Z`ZyTB4bUf+c?!Z6>jE~~6kM@Q)KCNqZNb433mnl1f%6>-M}m! z2TxTx+Q2QMZW9hn3s;Zo?x{ZYe8~Nuv{}GbLfn#T{Uxo~CN;TruCI{DT984j4m-qN zl|ZQTOJsV!R7M!v{#(-2gj#+zhKWVeA+}y-9iW)c0mQudmH)LQJ zq-o8Hq0?mzD5DGfsBzkqHs<9nd-bv5;Ze{BkqdIL67m#YU1eop^8e^y+}JqWt>Xeh zrAp*x9MMC!9$cf*W2smdYo&v$6=Ds zjc=M}cUq=bhInRCaK-p|r+e!a9XzYBeeb5ZR7(M7wQ5DcAhyV%W>MJ05*3KhbIfh1 ztJ66??uxm_N39}Xy9buA0_mWL{AdC@y^V_udJ<%crwW)mftN8(Wfe|to?}O6OK3Qg z&%DVJgx0TX5H)O=w~>F*2l~?*E|69g(expcJ>M!9IYCIGrPt8BqO6m61j??V=RKY^ zn^*TKl>i(fX#-4E*dkF&xiU1;s%s9);<9jbux;yvLEw|wHykJsUVdQ3q|Lc}RS>_# zg&ozn(K%vrm?x=VR8M3y^$)W?{qPpEFkZlDVQp<0CoLR)@wZw&0@N_UqOwsvgTWQU zp40GN9N;qJ2F;9r0&l=SwFvRlD)uqLRQ)ANy#4k|Xa{){^>vL{k`|aGCBBkFo}HL@ ze4Ohnba1WWNUO1+>RH_>Xvud-xl%^s?ZcN>%zE@m^06s&+cafH&6IKNtw3|BUJDvD zAR37cN|d4(JAo6LWvX-xOSzmUKhxRXNxa99c}7e+UBPN4fAwDHuC*?Sn{OJO*F~c; zaae9D_x!L2w%or#-a@a<_~F@exQulDiMsV*SJ-NFj+yMrLd{9K;zzKExRqO=%D=Ea9HY@v;E^aW^$cKPNKmo+mguEO_ zL!*NoO{zLDkL`;S6K}LOUcSGLA?746+x&cot~?nOIK;t;@)1pOq5<~I8m9Yn^>U$J z#4B*Qpo0PTr^t7^?s@oFCl`8@*6VM%p&hw@Rw|x4spJb>PM(AjO{io+&&j^Si`#OsY)k z_D&5I)a&G{klvI{=`0{k3y;(TvxC>Ej7txr>W*|#%6V!%9Ab(Pya=^m6qAnbD#y|v zFNXO43#L{pa;T;u9#1niow<{U**5O)g4Ef4%~lUse0-Yhy_Wb|HG;ykv*cf(CE2-- z(Rb!~v~zBbz20^C$;;RZjbPhD8y@^;Gnxb_S>_B67PZX*;eY_#M_MY@4$+JtS=~FV zi0H?RapG*D!QLJc0sbLtDFrU>Xioq7d)aid>&I^s`z4v3u!9ZuJ*JUW)jfNp0+H9p z;`4}jn_A{|UgMPceKMas5a8;ZlXjDBy4B!W>GoNtpmcG78|ja0@URNVe_=|g7w@a$ zG?Ac{6(vKED%vzA8uQYW`@v;~Elp@>Ku_~;K1m_or;>Bv_|6^zi|G{%| zbNx<0HHAYA6iu8O+A@xEi#XEn{OJZ7^8;D%^+o?Wt#^;2fZ(^<{3-^!|=H6POr8V z)}_*rJaB7GV?;O~%V2Kjfz^V==6Xq+bD{J~ca5;e4<`bjj5_de!4CV^sGocezUI(} zBril*$yf#beF!E5z3}#^e#z>ZN=gTfxtZw7jR}SPWaG zg_-g7wNON@{LO`c2MW9g%sm!?GUe;w;p>H!KOSsY;Qb0(ykIR1RCX=93hoURifEEy zEnQv^xUU5le4ODhQ|$tzN}LI(rv%puo)_c-`mA>{V)f%rO$Vr7)=(Fqfv8WiE+amw zuAK4^?^m_!Yw^ZM0ra#8eha0XONn4S*K18l`^6o|Qc(wNoGGrwTir7v1POegBG|UV zM1B9N9%&}Tvy1#KFApkOw$Fhw4Y#tUS@vvL(;$k9f@noa*lZWLMOMEgXwAqQh3>#l zn?q}6%~8|LT86imBzk+@H-X$wh&r9^poZ1xzuRdn7`=uf-)zcu>9Iw4&}s%PEU*^L z5u6@|sD0kTGjsI=pSh!PYB&!YLt2g|+12Bi^?@y8qddGv9G|i94ID$MJ)(-KT0yoq z(}cChlgdbxs&pO)=E70}4xa4OC~j}9^oIk>f-i&*E|!U`#jC}FrH+YR@Q5D4a^m}t zkNke^Yaa%5U*00Nh$?(VdB9Sc3GnR_|3u$s3fLH_1jb0!cL2sMLD5awfxHG%E?Q~> znqeIxzd1a7bYuhthKCE)zY^DqgOgUNbGmwaOcxDEC2o<}*Jy8+g&GubMMIcTbJ$og z3t3Qh5ij$deUaJ;p}Df1)IvBG%cJq!)l^{rw-~cHjMGdc4;)K;x8Xoj5H6Jt@Xu?< z_Z-lO1r;9-(a1Wj@pA0JpbIEi;G}G{3fa0?0|$Jk-Q3o+c0-2=6!FqBP{fN2nv)H} zae+TkeSB2e>K@Sr9O(VAvD4@Uvgkl(N%ZYXVGi5Wz7Go9!VF~`>&+c-_K)PxD zqubsK?Y^c}&~fb*jetFxsfrJuxjOb}g&I2ue3CSrI4Fv#h7d9qOm=Dyvfh4D79JF! zwzU7CV*=p=%RBG#%q#z~kFC=2uK4jYqhuCee6o*_r|CKzy9F#lQvA8qNLih|N|!xl93X83}H6jj9H7OIw#>l4hy3IHDzI)&E@ z1vn!#?0O#8jc&da^+R+i7O0cqk4(WtWA_;t=aHs8p%NkX$D zcNi-x0)V=LIjH5=v5C|7CeyJyPX1#?UEFzm6H6u7_tcu|7bhpjvjpUc9OQ{7JJmj3 z7hA1A4h(qdoGQ_xCvNU1|7(EQNJi1^c1y3`qwni=x=IF{qB;74F*x3!j^T!BUB!#?XW-|@y&slZhN{~buC}r zAa7hf<)BUv9>HLSEsed|YBR_fq}cO1GdgEr#I`B4sGN0hpMM@=&Ry=M`pRA~EtO78$c@nWh^(bnZqr#W*$6(5)42=+~*Gf0>XP(7;{sFKBj`y3%L54K>e~m2*wUs=t|<&c(E3>8`WcXrS-y@WTcBue6GhOUK^G-C_o{#=(VOa4p|@sryN(pk1dShEYL9J;f!yr2|6BGc7Od@ z!x6@~M=d)-85fDc<{r8LERN~bODV6=mwxQ`o_7;!aTFZM;q}#^16(G;3xYBcH?|8u zxp#VcaA9NZWQPc-&l&J^dN%WJH+dXAIt2Ff5`n-dmqb8FfTQ*Dc|sOPz-5xhM$9XE zuy$~&63zT3N8W}`jUcv2CK8zyvbY8D`9^Gg$>xa#Eb_>(Wo;i`KkA2$6c>D#8DG_u*|r;?#~t{QF!h z&}{|s!2-H-xwRu6k_nwWk=+~6kf*oV(n;W+IQSx$uTcl@)eXzWUxZc|OAcVA7}`S< zqm9b})!(^n&$4BgVNxeprqH!KT%kox;Cd{svo`4afL{;2Jcn-?#Rs8^_N8zHCi6L9 zB+v{-0JX^IseS+9jKFH;dE<$Y5Cqy7c-pFuH*y=>I~p*<=2Y5IRAm*t$W}BY!{Px^ zL%e#`kSuH-GDQ&a%c_RBvAR2kS9XbFNtZJVd}3Qi_0z<=RdiT53GTcTCGWZCit+LPL?4jAE|$yM z9G4zDy@IV1Oq{rJgONNDxaGwSAaAkh)w`NMg0^|q=31K}5S{0){)vfRLV;R%bg#!*Q)A4*8L*)2-0Bf+6o`q#0uQySLqj+z&oT{_@ZvWWDuP^vEObV)1(< zi{MvJY<=K?y}iA)D~u&VsQIhRQb=nxz^b+t3O$2`LSd?iepr2!_|{N$a){AeJyS$K zs6GlWx$*34pt3RuBKJyIC!)(_Yy^^o3EFCCp)UiGLn>;z-HVieTwT^L)zU%-U#xlx zgOB_#N!Lr+!EmG?Ium7E{GydkZ}dL$vl-upi^3d(AiQzK4;aofKSmoSMK^anqQ}<9HuzI8CBq>W|b-=fN(5Z|xE4|7{%xN;DQ#zY2oe5k0>pUJHy44QO zH>g~NpENdu#r_DL!2cY9sJ4!-$CeP<7%|NfAV;&1Wa?3k(iMTnR<8%BAsA3YFU*d8 zf-qEn9%nCI40-OHDbM> z4EQBuRIF5X_!%Ouv5_mTRzVSqs%G=B#_|kMcQmXFOJ!i_M@Pv&rtdy}cZwsIGTLvv z{l>PPx!j@d?gIH(le}%ahb@z^oU8OYOHWR3F%*hKTJ9b&Dgi1W2gu)YP-Kd9rg=1YvB%p3Jdgic&P`AS>q_>gaezS{G?_8^Vth%=}ACJmk3+q z`-bZ(I!;k#6h?F4D%Rl~;@rK%bLjze2LzWFpXl?ke>W)I0NF2s%Q-4A!hhuBQe5zh z@NJ0{mj{P{Z5=I#@4PDyn=rZCj_kRsTD=eLC-<)!9tQhVVT7p?rv+jLxueWgd2OHz z%JaAd*H3YE4KB9Mz_q$$?6*fp2Qj@vkcEJ80!H0m}&R1 z^%gzb>5-KF!uqqiC~>(sMzLRYf0@DJGQ~_bk6^=~9r4W~#ANam9G!q`7dwYsX!ZXpmf=!MdaeS z_RM`z3u<5lA?N!HTq)C-6lnM?CYR5*c|VtG+tDOLv6F3U&D;%_T!Mm@O zdXygr^kNBk`?xd%fP_(d5gvG3P(jqD#)}{yb=BZvE%wR_v;Xrt;~Fe*AYz1+pAa=B z$WIZ)VRC%HgAtNJG)q1_oA5Mgkz6kI8H5%o;_>8Gfk?>}2ndBY-xa(%#W4#ycVFLW z$(bUGpzo@PI+e448<#oTnTYB8$9?c)Po+fq`uj&0G#?*t!GpREu!lmWMrAarj;Z4b z^t&^6GE8UQ-P2Dz+g-9bR;-`zQ>bJJq`DBn76@AhD#LecnkGzq8&6kg3z^$gUWqr* zXjL~i$b=4_$Qc;4TQcoRQ0Xz=bm##~>5Dgif_9Jq~j6>D6m z%>b_nvvg^c1u`6PaH)n8KmU4aSWF~~1EPBKSQ`V;15J3oORGBian~WPIzo$blaq)C zBJyV$gOk;{u_5B|>ZFpmrn>hs#wBNNK$0HU#vKv32GMP+&<@+mZBalZnzyZWetLz> z%3jSjt)G%wICj5_CzEpsYzV{BG{PN)VtO&t+QM%>)?`(9gTL^LQ2x09wm zu_K@>>w*qg{QeGz;N7!2Kd zi!NV%`nZBG^iv>MGKEptZ-iyR2C#n!H*`5b?bPfs_Y|8fww{bWqyZ^FG0cWe!weJq zFJb=~?7b1AknT$DydMBgG=+1YlR!|dcBQ)cdIF&mH(+1!c)i43%qTSgh@mmls#Q$S z;tc-0r%wmN3%n=bZ=Ly5xWd6X1Qh;FHYp1&9}{bs(+uSwh{qsxl*GkmwpzoRN1rT< zl5V`Z=LwVBf?%l`0*Q$$0><_j$ht<`|9hAls9d*(rQ}at-s9?Wj?S%1h_sy03kHBK%fdjMym(q>;Wz>=o?H%NRFhS})HeAzX1B+T zht&+$zySG5>-9GuN^q2NX7uu__Qug(xjLp&tCOE8afRtsHjZ4uif<6M%v#w}2toZV zaV0RF)h&vc#OIZ@!w?Vg*gK!Rd|0oEN#$K@Zj)3l>T-x=5xvM39lUs$yw&I^bsHKq zo%va>Iv!PpRPki9-BQSdvUH)Cxf2Qq%6f&F%IOr%cvS5?`z(l!nW<6rBE_w4RCXyS zg2PLun;2Y!B_g;5qDRqCRoh`~fmhz(i-OVN`eDA{f}v-vNjjI>Uhj$P*9z5_!f7&L z3}~7_Z{LN6$y10!{tpvvB##~$)>?$1q%5*ZSSq{T(&SX5kqzc8_)3s zi_uo}t2l&E#1WfDjV>d@OujRDCHds!pHKc`OSna-W_6}DXz1=AKd@=j^BXqwlX>8# z-9ArNWqeVn0jy8}T9yahzfrqqrW_9I=)`8Dy}wuQ057wkGB7{u)VStWl0O@=gcMB@ zxmGG*2`wf*+h`(weCAz|N(Vs=8whlhnSLH}P zi{-JBv^*AELJ`{#3v)bS@RDmy>#k@wW!n@fP-jP`0eh}RR*@vK)f1zNq_DKhW!o<9l$%&trU4myPAIE(tBmC;X*B7gN26y&-? zZhp5k6b^{H{l3WoqdX*1W%}RK0u{mt11+Pypwk)ai-4bB0Ge#n{0a|TG1YL*g?m0$ ztpZ^|^$~-e)%uqQzeId_@fW_L^|h@Ud$*HO_t6E`H)U)l#9Q>w(yM!*^NhZhx2BWQ zk|dTQZzDv*rFwRySsd{_1mf^efWvh4Jz4q9*h#!Dn3Y#D-Qgmw;UmsUI*r zyP3C2?Dl)5DzjBp?;GpexC^U$$K1y5tTABhF1$eg>TA>=o_^x+z#j%qlHdAMn_db_ z_-rnl$zozygdrC296_H*8B0c#poJ-clx2n+^a7=qjtc}YCBi)jgqu~Aufefp4^vA# z@DQL9UaZ1#jc~3c2y`^mUKU+j*Uq^DBzzVEpTpk3SnQALl?2`qUciSgSV`315PfOj zYA#%-`xv}4A37$vnt&bWFrQnv2CV4rIx-}X$%1BvjH`gywl*X3X?aee*71#2b%5K! z^Y%{>jzrEWmoUU08Al&>M(#$Sv(ubse-&|`Z-8C8Iv<9kW>Kck<}o(T8$8o)@k zUkLkJ@iBG4!2=^zfA#RFqFFzwblT9aX5X4kO@x5mxN3@czpwAX;JVGL{XF1IH($0Z zGMu@V{3|FKa+qQ#tnu(SioJs-u9~gS3iZmE%A`u5cej4=&e2#(1V~BFn7-uxmv_hx ze4`tr+BvPCMQ)Qislq;y58bGQo#GHjz{fkqijeQLQyq(`eduQDXwsETe!As zJ0v=0nxVNS!xsV{l(#F#bHJvK1N{})&48$iOe%SY4J3lhF@Zn~L}V`G%kRHWegz9~ zBi88X>At>A#JcLSOR;&bet@e|@+tz2n*9CP*vJAa_c4&mP(s9$YY;!@*J(S{Mop($ z36fzNBd|xjb9Sk1zFph2!RfKh->T&1U829qwq#eYL4+ zZFBS6O--%jkw}x==aGfAsd7XUa0r3_C$PDp=7b&-AnY1L#N?m1+cg~-Xce*F&{8Q* zx~^)b#09V!@OdM>TA2%vgQ}WwJq16eC<#>2jE@_J5pW)-+sX&PC_!d~&cm&E$|KHuL@t|dw!@#P`H)o-33h`|Ux zrG-~mVCFXEu3ova`*-LC<=UrPVE>NOd<-pn`Q?{U)9{&p3=c!G;y(LT7&+CgDX?)P zEiSX@cyN5#6ZAc!?i2Mv79-|jfr0N4{3}b2FAh zyzc%(y2-0X#CHDV!R02>hKo!QdX^k`d}_-0ga7{NC{!e3k-(^s#>}7+VrT%B5GE{J z{9=OR>P>U4l0=*FN_;3+jH)tjfm>p0A?Aw)aR2TT2BM^8Ifu_PDTKa&RPN*pL5zlp zfYeLycsz?%-mc-3%W4mwc_iRMK!WIkAurd~781O5idxxzV;tdi%6Z>JjLACMWXb z&rGS^0bs|vx7wU|C)RK3Ehp|0ix^PFAVMGzL>&S(%bAf#z_5PyfP;;^Lh`gwUd7>%0VJ~kf|_USsB@-@!CAA zQ_k607n9FH>h^9hwq57f`z2zBOWqQw{A_e|ECX9|;0GfSJk<_hSPB*t-y~O~O=$J{V%p1(0c=i#w z5<#nY$g0rF7#yb1W)~rV$}~E;)fO>S8rq0=Yv>k@yvJ3pF_XbO1(7!Z1<;p3j2@#T zOQ$IXO8gA3q*Eh!97_={5oZWZn%JZ0b`+I8@*Xq{3xUVrD~rYBYr8|%`cO~WR(qsw+i^h0B zFvRyos(1GbEN*qb+HFC{JJ3(7e}rbE`by!cpr&2htWAF{5SaG)qJKaGZR81)N+*Fi zB9jk_-vn%RDh*PLxzUslwtwj+l|bO}K(m)@*C?8TcSOV)*iAvSEC#RRGt^ujC&HzACo2K8+Pv&ad_e#v#t$DZM!k%zcT~`OQ9#ze!<@yp zf-XStzmXdKEN<_?hB~aMe|~;`ANZg5W9vuzgu=s}<~h;tRx3TS5sAHe6JvO`x_0WF zJK=1;Au(lKrWQ6i-x%1*#m0FDed}JYpz|{DR1jWjpwQzyN9&_8}iQ0kv}4C zuf73>y31ucZ8=WJc_0@o;4=EIx-y%MJb`8u>Nbeh?IDFFp-^br@=tBpK(4tGU@EVV zE#fhf9a=?$@A_7u%_UFC-A=a4*xhaPfpuoHt!ceGtZ7RF`{XxYFI@H20|qM>*s?BI z>4Tjuh)uW-{1U~dp(_x2s)#*#aP?6)w15YM6E6P3EiQ#WQ5mIPnJj4&VE=(i8g4hI z_I{mEY{m79w41eEn+W7Bm+zWR~^tM8hIxGIl@qc`xu zY?S?z2>_a=*_z7+Bv$SS$Amm%x|q64Y%*4%EnBpmdWuq=&oLwlG}AlUGh0HxBV*`w zWn#OBr{TC(qsvP-^z~g7J#hHiBu6P@#&%t?GmH)^b*(C`y5p!;->EjLyJAMqpb2X8 z#AoZED{UO8Fc-RDFCyCmN#1<+1$d03R5)3LTvGsfZ(MdUoZbU~O596>fH-|Gk|*np z=HlPMF2@)@ScG3|&C&(nygEK~eh|U0<$_@22Ur4W@4x^Nmo>Lp_!g0+z4=#Yo_ugO zXy3+U%^g;rRb=gm{uj^cvT(vYlik8chvY3iZjp`W>1k1rC#Pf*s1svLU%yH^)$(`5-#ZR=UifBMT%) zDHF}DfaJM~sU*t9Ez7IMqmg`2=MpOCb~)5V8oo;n61I%8)YIYBSgeOGdk~f4IqLD`RSRwwG95 zDv{r7zv<{rZCn*ViTe&+l|ZZHhLl#V%|ZymE=n|}fKhY}%-S13=K=>K8bOB#Ox4*D zfZ#ArumnjzUjYk?T|gRucte$BSQN89f};IM@il>8g>OqnP#3%`eZ(cz8xV7Px-H+< z`{rkeo=I|TB>@U;pBhI8CqP3p>V$EX(#{r;*A~UTAlE5&IRt2HFF|m@!-By3KX@v#JlPGBB%u7%OMO!apdI|FD<*AE3D%C;x^73W*6@;ij1o;5gXEjT=uIaeF zxQs=_SPOj-j!{tZ)}e{|dXW2Et~gXmHRm??5ey+Oz%)IGvDTlVx5$_m{hYKMoSNE* zx|!rFPY#Gx%5(#4P=GiOk4^q!gsb$~@Z8qx5};qSB#+z)<_7HSjr+i&P0a$Zha(db zu&Kgy2RTl^gA)kLXR;ClyTH<-L`h}?`j){j6t{A9f*ziXUG1t=DjD3&2)B+M7 zNaPSOc;Y`Cmhz-Vj(`!gi5!+6Yt;#*QPmPxgI0`6mqB+j1fbC`(3fqWrIq38=6g!q z0)dB20dj~H=!|bLhN$3&>sw4!NWsn=hLhG&W|`O1uddFdz&WHo$iuB#48E~wFq{r@ zwMvNw!{MIQAt=Z#bp*VgWG?iE6jaSzvj#%P2ygWVTkpSLRW2Vdm%kEnt@gTgsdh3# z@TwnDcGZ?aSVEMm6ig7?N5X)Vsc@Ls@afntub4bN$_CB>Ubiz?#jK0jj!!TM41up5 z73w+TY%Q6qRDeBNQ{8(SZVu4Km=eW*5CX6TQVqadocOOn66|@+@`G17)Jg!1dx-DCjP?-Lrd24IkxQ@K9j%fOvt*$0gAJFjQ|mf4 z22B^W5XxKF>Q!L5d@Yb1t8G}l97fRpAYT$HH4w_MYDwLZ6~7)0ydEcnGfauW00X>$ zI=Db3_kWqS>2{Fj(wz&PqWy%k`eOseZkn(K!bj87clE1W++mIbxu?{P${vwkTYY+Z zdKO0N;L-|Oii=X zIG!z9oQ3(m)iob8BgnG=ngEkQ$hto(4ut^>qjO zZ;~HJhseusByOl);wJ|C$)4g7K1A z?Dl>4+c&0@srysp<2}UC@f9m}_x84bUIGQ7QmbwcYwg`SjRETur~y@4`oiggq&~93 z(|GEow0O zsj1dV1??Cg@136BIWt3cj*azo0CpruV>5_${AAL2F#h5II@(`-dx!}2{ZBt}?T;cL zEipo#B<6nt;9b~f3(HgX%QBy z7qIxP;%_(@QJWVKEPzo6coCN8q(1yP9~flW#&Ev{Ry+gC8^tz$cz)E>F=-sxS>`(= zJ)4TxqYU}#D!ej!6Bcd5U!x-<@AV}g`^rX^RL))ZxqILozc5W!C&>RCAD`$(e3=;7 zaDo#liC)FXvK++kOJRE|DiL@k%G7}OK1u3|9bvJ9=Ucb!Plc}H=iAfW#64&4vyNZC z-T}&zT=UePN69-tIq^G;<5W%R$F~8tn42i$1B+)fFfXEKKLr&G9+F{U#Q6VX>^tDw zD$n)v9gVZJj`rTumMvM+vSrD8?>(|ZCM1M}5Jnmx>^%Ym2qTO@*qbs7l(J``r3LQg zvRg{wmbP?Zo&4YLNU|LW+<$`clJoQV#yg+)d7!GhOt8mW0XB9LP!(Oa=%GbVEqZCu zTd-t5nx#S?zl0Q&fUCvswgj~Kp%)d_QiyQMFP)ER%U>}FNkbAi#WK zxA?|E)^^djIYNih&`;LsSwa!wpn+ULMRN@is=md7%+B~J7hKqcSV_|bpd-N&r;~*p ze&Y9JAwY;n6h^7l;~+IM0uat*FhY959x@!!+*lFZaC96B_ca?<02SCKioaBYuBG`S zws=EFZN}e-AGI3dpfx0awGCZL@<*R1F)(uTFu=(~fp-xidY2~5isGI{9sqeUgPvpw zw@<0?x&Kf@DOi$VEexpcDt;D;MxBXhYRM}ct#*(yam=Ukxn?6Ql=f*W17sgteUX4G z7z-da2D~RC#>zXSS*9&aEPTE;pk(q?&%_=f^=)ws?kb1*U$P1#S>FswfS+?zyg zRC)Dyy_)#g!!<{&7;)e!I%`MYa1bTTu6hGZzCSTBk^k-G zV`KTZzZFaqu4IGe#qxv+&!~7-{`)maoa&?h%zs&OJil5{$|zR!%Q#eA^%GVGo1-)~ zL-2;(U+Vm?jZF*{S31tK>h4c_gV}b;E8@D z28Tx%B71mT9ECu}RN@!?ksrWolLSs2!N>^lUKu2@7bYv3@zi|_Ox<6XfmVA1z#rH4 zf-;!itOwW~VnZs@S0S}ItrA~_NdAgU8)5ri2g4P`@kNaC5>A*eE>**->r=Sb z4TZ;QQAyt%JQ{RPNZdUUIw%|f@9_43amJocSWFxk;QctXYFzBUpau}@J`G(yN|1WD ziBX72Xa}-(7gt&5(~u(xU4Th30se%0@t=R=?#i93{&)X%0)etMFfJqonM`8*`j3!hr%hL*acPqL zqDW+QB=TZaRULnMby}a$)N9inHfxy&*qF^Vrv-2pUPGWa1Zl+* zGX?&UbZOEbe&TQ`3#x@e#rZ^@Bc+lPfN{7=d?*yJky768)4ir595*> z+(wm|vepdNQBWqYABfq=y@PCQ`5@Rqx^KFYSO4{|@5*GgnuxJq<+joM3=jj>)70*Jl$(= zTuqK+QD z&w5t7TuDGa$DG!oG-*UVBDHZ>2Q-AKKFS#?Y#tezYQaYm^I`38P}o4N)gtPl8_zit zphjf;gdKrSkaWK6!|Q5PK{jyFOFz3MrL5FsHIbz;Z9-S8uYGC=Rc?Oyo{Qp2KU;O` zb&uZOcJf*$s5sQWy8UCPW5DLK4;AjRCboqtVBZKfdbD3*YU_5Y?Hw(kM%>yJv^aY@ zYz}KzAMr=L+jQB-4eGt)RvUDPlrSKUX;kuaRSld)6{~=)P}|r7G4vV0b}N_$Xg>&l zH6@dZ8w%KX3hBgrQvnO;pt+qa@81F@tc77X?DN8AQPF+Q*LjO^Frh(L^J`$xxe4eI z8~LXjA^YV&#^5d!+RT48hFZpyS}kaXDM(v_QXz7fP*se!Qw~MG%ge5+H^yWQvZzOu z?29QqOll~t=KFpc{Bl#5uUids8c|Sp0RRq&IKhUVS;oE)myB$TR7BCLU~oJbjQqDJ z$$yRp4lc4;C`zPs$&r#!Zhhj4V?xkc^{hJMwkn@KYpBrYw|DMZW0zNO{_R(c^8Mcj zw%p)#^f`i9_RtDL!)BMIWggc88--^&-xPAfVhaQFU*V~1Eb-n8sKD(-q6tWHgvKh~ znBtvUcJ*N>tc|I2@=lu75--6Jsg*M0U{)9vP&?X7YL-Ff0tM|8y4 zQx6P7iI!-GD(+ysa!2LagM-H+H~#_u>4D{)m&(}$V*&uWQOVJIIb)Pl6vIgs6e-pD z88s)D@V^`!Y^+7JT3!d)=2;0=s}!YyUS34D@Z+s-w!P6pJSH|wow?Ym49RqZo7=Rt zE4#F8P-UFh+OkvLa%R24O+~ly9jf{*0oqJ@S4R2M(SLQI+q!4p6Kxh*Lra$gbDJU+ zSrtV=Sy_qY5GXRJ53bF+dV5<UBo``JtgctWM1~!MyL@I-qQ9keC+;Vt(ZEvVi}K z!0M?*_BlaJ{okQ;{fe1VTLl>Dwqd)$bs`mJx%e#q~6c!qf z17PjUL2Y2M-RxWj4#@=dl47t}yc^hvg@oJD4b$c;7Ht&Dvw&R2RY2@v@$JBA2##>@ z5|Ln&gvJD13Cvss($V-@2r*(AeJ~gO6p2{`w^r<80YYK!VjVW>8AUGsf70kHUX#bJ z8Rc+)>UkKksTdxHaatDy*%{#wO5MyCaw4dQ_<_|4ahrA>0xz zZB2$zLyU{(+!76KtBw4cvbk*1O2!wEp=FAygjwdG&4~(SVaNEmz`DvdgZtT=mzlIM zAEhx6f9T@B>dW;L$*x=Y7<}hV;PVJ_34x$0`e5Z z23_^iL6foq(6!wjUDZs#2`+)Qp-U;zn*azcudHCZ-R)To<5U>CMuP|DoejPaCV@Kw zgleH&V+VHpcSPObZt!J@2;wT(f(=6qiotjrfr}9f1>I5XB1$kK88!m{HwU=``vbg; z*fqfXz}z+oUlBG8YXBDk=uq6m+@iu(3AzNr$Ji`FeaBOFO+VF6FUAq`4hjA>h=yy? zYmkXfj)K;?TESX5MbZYN(xwVVO;IxGo+UC9+Xj>cu_^yUyJ5}g^Y>ppW?7t(0N5na z#}9n{_1FB<=yLwZ^K?fiXsGCl+O)u}e|49qjq6vopz1MW*h?>_oRx(gpyuM@rZip`u_zZZ zP^o%3R9FxJcuWwvBC8|lancgi$aJyunf9VehJ;_wRPD7 z)?SIt-rj0;n%lbkc6(ck1!FWzu*^s2%wn1|O7vfuL#OsDwCZda8k5!-sVua&pD?JjN}WMBrBIPb7Um@S zpjT?~dMwiFn0jNAHO00wvB%q-DW+R$_3{;+q|XlYM?W7M8=RZ60%c*N2H28;v&GKu zeKwQXn#nZq@1CP}bXzsno)eqjJx!`+fNPcd?{`dAk|GpN8HRYt9@)KqFGtfJ4-7%X z(pqS^9Prxv>_OY0+EuYO=ruRDhS|*4K$U$J@!RrsEza%g1(jtZD0-=3802=Ca>ObK z^M)03NY}u{#d$cU^1w2RI~MIPURZ2c1rrGG4W+lD(@OY-cmi&ZPgwU9e2&*$VBW@6 zGki-$MWmzf0+{wKy)U!F2zfjFK$$2W_e2eN`UG2Sd>B$Gn5M)3s_>u3?FLsE0DNB< z+4xT=s6)I%{MY#SX5{1FXRy?l980E2@-VH~!rjshy?#1Jsg$#S%*#388dhD~rEn5;d zB2uMP@p^HaRK!T6oKz|kL3wOecx{QElZ*pSoY92pO&Vn-d}wfL51S<}^&Qn2WVCZ!SSVd-pMB$=ER~3)J zJhcIM*12(W+>5}57YCR)A;i~I$P_#|(E{%}=Sz`617WBRUUkSw9&GW#oB>`Aj{5s1 zIwHDg_86oMR39A`$)wS>N8fP=djF0)$UE;u4?V<3;WO#o4^H;=oz>BS&KL(cq*OF1 zA|)c;)#q5esgCw2YuAmVdu?Oul1dMqIcl+!*NrL03O&>N*G&TjX+^w>)oN)1P?{2B z3>w?vYL7IXHEe4(r>Yh0@^AvN-S%7zbZu&~g|`M&frz!=QWHS;4WQ5SDl;u}$z+a; z8*}g%;TJ) zX{i>3w@ z+|XPCeqBB1p&Cdx5#fLTX*?XisGTqyn~tx*^9G*P{7O-vb|f2+u{J9-3Zl*7Kt(=4 zD}f;-HkcxQ|J=zPNe?9DFm}K{T8|dj^Dm-EEC0d^Wz$*2N?H6FJ zJS>R~rv_?mI1*h6D|;N^q|RM*#iE}tdS=lpi+%$uJr}Ob)6U`3jIEeQitX3jh%n$X zi^=m`z&{V~5LncUk?ZB1}IP)K#9gyF;RvwO+Ji>?d1O+ZwI)aaF4_mO;9HS1u+Wg=yNt{X^PJsNY=a zCOYftwr4U;Agy(p0uT&JL+xjdilaAA>9m3zO;8DB)~vjFYP#+|6~(&2!HU{rz^i(9 z+fn^yWd*CL8{XhB#4D8`Fu-~$K-R4(&4GQESEoOK5lgLAn`pLaYIII*;xd=HCLojh zSke}p_WHZ()u8X7h&C3!#GR^upTwxgdO(&|K&Q$V;F9WKz!R`Ex7xziwzj-8vC$9I zE6w1itKqmkwjiLI?}aCX%iRhX$729sbgCfU0=Kk$JFzLo1{NnnWq*x>D}2s`1Bg!_ zuIQ8xP`Qh>fL$B@jUSzID&F(5O(+9d2StOk_c}!9%x?FIG_zl!qgJk5zMTJ&e1P%Z!!41zqiDjYbB@TAd21H4~$PiFlC8wwTXs@b;*i)Ey{2vtFiyC9J(BOWKu%zkRjG$R|HiqWo0axtiBZePONt3 zjYe(K#49!{Y1ZclY%&o`X_bEW@gbO^uF};?Y@RWv+c{Zl2u?ZN))BA@SnqIQ+>5u# z16fd)Ad$Gjt0-T}==L{&&N}8*pw5Z@aNR@6Lws(Z|<{>EPgmiM)YF7xs@Pb;A$$9Ii|KY3oQFRF^xk{ z$=otZZyAp`Gms297)><2K2UkoQImQN6eLJTlmw8{IyLiY226SfWikCOO z7=A+m5WapW(p->bBFj@oR}2jFmo=AUHzpX3LX;87xP0Vrti& zVr{5FsU8^`a^&;t8XHR;igLLpA$NAQ8r9}DK;VE>B-N#~vBZNz>$t$=utV=0okkbT z{@&qZ8Ip^rLCJ-f=(wo+d8HM8#?)4&aJ3lZmJa^wE@G|HJ#6P3!x@c#(5}`dQ~Wsp zf=(3r_rL#*nOsV}4eYoza~dy20x)D4uZbia= zK!_wNId@!WDgy$_lnCYY2H#moUP?_iT~sPHK-&ZUU%b4BeoI&WmhT5YHTNy@N4^D( zqC@L}#p8n@X((KZ#M9GUi*xzLG;rmok6OIXKD9amJRFhL)6Q^LSJzoDywEiyGcZ|F ziKI0Ovm_xl@nba%MRbVWo}@0zMs zsYH$o5rLXot!R%(E-C&L)1a-h>U79)tO$N61KdeK4rY=w;h4J4GhLna`wHSt&6{$4H)_)cx=!51I5NRtbWcv2;P-wW#z=o8Tkrh$oU$Nqv zWy_lQQ_+_Sce_bx?cyI&2BuwV_u>i$bVg;KWy6eLCekU{On<=CaC`;9sw8o(9Oj`Y zhJ1nX%L%hq-m$F4-hD}ukSV1J2nbvZtDt_t1muL4W9#~Y=Irs6gbe>23qMCPjX*DW z3YIN76n#+KPaJK}U2?eG<&SYH2IbB{ZTdds#J?^g$8D7$8XrZ+h#klbW@Do3sr|Bo}}8-9rx< zrJmPd`l(~G#y}Esg;b{Rg6V~_tpKJbTpCUQm=NHj#-_GodNej$2arm4k9Wh^PN&IZ z?m2m&@U`e#brndC$jp>uaNMt|UODY#t(1LWg8z~~&H}h%Nm2EfL~O%dRuB!fIDsk( zoyou4d>=1sx5v1ETx;c631hL)q{EJG=amY*5t|ICa6S#qQA`HDaO5flo7XQ49b!EE3#Ot9#93lFj8X=t!v`vTWIM+jj6PR4-pTcE>( zSL1KOzk(Y&u<1YQ-WLXE^K|1VjV8MIzxvR<{GbS3%dgtgCsk8}jK=s9;Eg8v1L(r{ z-`65BKf8KJrq$F25KS5YRaLmH+q)`4*;reB!rg7{9s#N@h1A=XtF6}!-UMn^$B8G*L1N2C<3vrLuB8I{KXjIp4sZCp}Qm|H~;fa ziN)NkGr!cXtXp;l+m)zui> z%|@N26Ww$Pj4+=h<+Mzj%E5}xSB~#XgSLnyc9FlMLnMzL;ZZu5RPgkZDh8)&YN&a3#XBAYWD?C&PD2Zy4+BIo!x29g*`O8jstFn*whW|0D(21r9%{`dh zki!l55sV;vd}L%a4;%~4jEcRv5qFhZ#99MN=7m4G$BEu6$H%+*JAdb_T<(c#Q+19L zp$-j3QYi{Y)Lfpv|N02Bt-k7Kbm;SI z>6;89R_g1YIsNq8PdVkNMu{a80~~Hc^&qk@zKY-9-27BV!iXTA0+J0x+ht;lL!#G9 z1191CJm=46|Lh3@-wGF15y0dJY4#bSllWI!?rm!C$g1>#4I z1~X_S-VjyjNyb9chV{`{Y%n%Zrv<-g=%3u3nEmL5O)`?Q0U%eD4caQf5Zd5Uyu6_7 zfG-6Wjlr}ISulh{(BQ_Z*Ox82X3;IcR8%^`0_H(7F-xW4Z=z(~q_}i8SN)d=+n59{%Mu(LOkgn*E}P3hS&kN6jqc`$5xSEf4S)J+ z4MriFV4}C9qqR$HN<^hLHWM;5G7dfMk?GB-0S3mt4Pny#lL5-s0Wj|f;2i3F z_GZ$CU!v9TX(M248^*&(0?(zlu`7^*vV=h?5=J=t{eS-R{`~}b`|V%X zwYAX+s)g)!uo{U=qQ1_@>KQw&+mO^`8XZ6bY|EySRam>eN?8@->CsV`0%6olBWRgj zSBL2l;VNrUXv2os>x4glUmivBkIjDM@L(83HB=XXAHqJnQ?#peEn7f|_~j>M*Z=ST z9>sDYg+f(fSLp&O1y{Yo;p%EKLZMKT&IQ7%pkEnN1uKZZ-~@u2OOVwViin4!U{{Q= zEAyI%O0bidtgpBqGeT%`#iHwg|LD#|55unD9Vy*4Z0TUF%kbq=yilad@F(%BlJK{j z!j|8cFH+IHVHSo%AVhGzaCxf4-vQ;s^c;jpu(LS*o!diFaD34HgIh0DyB1hwq8U~5 zZz(~c;#?)#!>_+_XlQva;Eg$*S^_aUVgpJjCreBgqr~f1L@`7RBn>`Bbly}=x6l>* z*UdDbB?)NzloUxNNlDdS zs7=Vl=$dBE0kMwNSsgp|>>T8_4X16tvWZm@ZG@umRDb_K7Uo`Be84K6_ip&_3W z$n1*+sO>;IcOK-NR{=ajFy;92;@UB8;|XZ7GTXL*w}vm`b5x8qLAFi+)Ce05UxN4L zZN|aukGu${G{uy5L7VBYr=yt3pjGH?zUsw&@JI2?GqY+{#=GU>o5!Ul*}zq2uCYGd zcG80n?#iiRNtg_dgynT{z-CmbwR`Jf1~nu%kH++2CdpKwZFxl%Br>v4Kvo|I_LnM+ z_U5eG$AxIEW^qF6chM=@>E~~+-2K=(Xhv;#>gvSaN<$S}%~tZQqoch|ghD580bK6Y zX`PR(qdXv_`D)Ue{36XS7TMa@_0}j=VFeq?jiqj`t4rNN_EnDg}IwzKdjovYv-7yJ64Q2o> z&(|IoPMcwBrd~*8aNQ9DdM|-=<_2IKeDuf54nhtKCSsmGgoB14-a|m+m+}sr&J;I1 zm4XB3jr7yA0Y=4{Q3MpBIHtY=0kK?Z-04zf03jZqoHo8gV8hs zF0bm0Pd}}|<1>3PB%t(m7J8G9B2CWQ-)-Vx(N;C>WYs!Pqole)YG!JD=<-Gp zxM^0zii@M>1{Qoesg!Cd(m={h;7j-et*syb?Qa1T<=?bqNef50ShdF2B(A810~vNT zw6=cUW9=IW!gyV9xLpcmZ$_6>n>13xGJ+CS$LEV0rAcz7wK1#H>2u9zW|KMo@yg2O zm6cCbR5bCI`68U(uZ$Y9qO3eLVgn~{ZN0B+y-VgKjf3^8)zIB1D2Yx%vSQ9jDW!lx zpnzH&HGQx0sN~I={_#}Pgq~!Wo0gwb@|XStcxaH&K~hj zC4iVxrU1y;>n%X~1GVcSU4J;aqi0Pn6#ib3{`onk1{pYzfNVxw1Kb<>GX()cc$yrc7EfzvCRhw`Ye)ugsjaRZG zWzTikh~b-+Jinr_F_xmz1an~R* zEYFfMlxLSV(-s*Ulq(Hl5TOP}YlgJB*mh%+-C#iO(?#O?Mk@jSLvB;aQy?!AKDt(` z7rB1{M!jjcN`G5QVUlJfrh~1FPTV2Z6wV$U9l;6%vKBbOw>83qgQyL7`HA;n{uchU zeJ15P&y9l4LU>0-2OmQJllSnGP*(43?&?BQO5dbaYoES^tyu1rdsik@u_OIbh1kFP zbIN3)2~JK&n%s`~5gtOuQMEc!;bSEvc`sX`5JCB}dsW=se?=Nfn`FjdQMhHSk|9~n zH{sAYC(#p}Id9M#n^5PW!}Dq<@T?g@LJN}RvSh)0!DOMODNZZn5eXbGVuhL`!RnkW zL?%M&oQ88yj!^J*$2l3!@9=w^3=0?$e3szz^!MH`I9p}kF?V+6ozM?s4Kzut9N;s( z9>Q7p&`Jy!?hb;0#<5#=@7CUO3rd3q!v6hRhKEN+9!jjc{`!B`ZoK*Cf2EJQ=_dZS zEy{c)4Z5{SQ4sKlAw?Y3wJNhA+RA$4C}eHYRH&N@TSi7knh2)2p9k`IVx<*O%f!8> zb$5T;#@k!&Y9}s^x#DNS8%pypeDejmD3`0c>ZrN@O)4TYR@z9K`f5PaQ&Gu<*DIZd8L;e_Yoas+i{es& z;!-fnfCd0^-?{v_Tv5sqYls3>5ZQ>=s6xD3G)~Xnj;dE7OKN0etKO^>bJZHgT^C(? z@!Ce`-AP+6t*+&gxrc{3-~8@e(yBcD@6QuE6GN%)8?B z{qA_ngO02Bp_{MFBd${$bkhBl z-OvA>U}RE-Nx_67+^}<^iqmtV2&xf_*Ph(w6!o6=*Ejc$w~eZ7RNt7p{p34e|F}PF z%$Z`Q=8^FM+s^mz%|m`rd*f^TdyLJ)jc{J49Nla6VEPwZ|L{{Z$drmrT6z28Xm$Jf zNrF+Rq}_JACZ>c5S{hc(E1-aSKxj-SR8b-@+Smhhn2Sd6%_y$G+(+d*QeHn_d8J?- z%O_-hmFK(CFLY^#(^9RTN_76Eo9j(r@ql>i=hc=5Rg|lLwaU|{t=9D*Z;!sp#|$!_ zibA#M#@VGrU>PB|R;FDVPOPj{lh&GGyf+gtu-}e3S6{M{b}MGiULxvL^qdeNHIVAA zX_EDw5F$BF>{*|Wa8Wf7o2a6?tRZd8uk>4T4aQ1SuIc9kXvsPM`SsOf1Ji)09bV#X z``Mju{P7>UV_&+l4rajOS3U*HQgiSgVSdX{a$#6)4QqKG_Ar$KQ&S5Ndn3WuAZ^~56*rUy3>TuLk8jpk92a5-ZkHC*bL{=a**c=bG zIdFPxv0!{OUu9FC+XgnLbKd5RI#=x)VT0p<0;?opaj^*5#Vqx5N2uMdk9PBY-9vUbK770#nqJwv-oB6j{Ovy+-$86vwwxFPj#)`yJ=@YEa!j1Q*uq#$ zq@jOP$5k0ssH#HKqOGc~67&r30qz_O`^N!*5ll5M+-6|;mKOUX_zvMRUwO_MAP92? zs0{bjfLkhuYjf^LB#PU`2K|ER-)i&;h$EnF{COA7%&1$8Z9^3lFo=hS+s8)K4SvdO zW&No;63)&hZCcaVeg}Gj;oJU@cjjQ8vZ1@fvvv2V%&%=ac4gn2Ga}C7t2Qe%5}1Gn zq)14g>`(c$=&>o38%Jn%HTu}lde*iOYc0p&2 zP+Y})nivpL39hXeB((|04Fvpt?6Lw20gU7dMqFKneBjlEtBb+bX?$6W%t7;UanZ?P zPYGVKc;kuYB}n6m*4n|aDuF-38u3SZ>nrVw6H=y3LRD)R%P&bhxRbOwKti)ni?LiD zO!J~fxA7CVPfx$oaP55)Xyo?2`2@kRVn#2cJR!xTYtX0CsZcd=9FU^ryM`jh|Fr6> z{Y)qA3&RQg$D7wobdM`x=3&y)ehS#O##+$aR_68Te`ucO-(HTo$(7QqnNtNol#Y~0_IfQ14Tg|0hqaJ; zVYL6(qV~Bao(?2|u{dihbZOTBq#YJ`J_9Mop2D=y_i!~(tes0f)5T;L;K;&REiNUr zy2S11@AWO&+x;Ou^i3~z_l z{PLO_&L^+j{V1GcFC>Vs2nAvpv~bG8Q@Fm=2;u&srny@U?Mhg3Yz1(LkI(M>q$vlX z#`o^|+$xIDKhcv6-}-JYFraOgS0)PIO-}St`2t3%oq-2#9*0?{3s(Y$qO@g~J2w zVP=H6H6yO;G7JHoxq+(gT-s`1n*~C|?2;=wZ5vv!G=1xedtl(@)XtAS`iOrS50aw| zLr5x9%VeMnSz|>EZSpe^!cuaXm>+@4=U>tPqFWh$`oB8$m0qR~?)tS;gwhNOH3~Ht zPYbMcP#5b-x-_44Igh$vSQgNXoxdLKR(0;IfQGHqx3NhzbaoYOql3q{D%amp2LYWV zam|_C=;VBUXG23f|Hyr2YQyR6N(I(-y4GrPwYMP zRJu!tGPvfK*A@@uV=zr?hP>fbVWxov16x$CZ-V-G7ns+gy5kvu#awVW{r)+ZLkKRX ze4+8OmT$e#n}t0n_h}`Ev>(%gF4_Wum{LMg9BqeLwi3RkRJH(OH{7ryX3(gVzw_26 zYn*LkYI5z?WjnecKJ4DHWd9%`*V{Z=xk^F;g9hXDsVf_+tQ>z=z&qM+3L5)HpF~&j zYonO=d;+!dPxN8RYNYJ}+(vx`F!rGLnfvrNGgejp9 zXyg1BQrj*hLO^LDB{-T@wP`In!e28IL-kJgxYOsH;{V6D@~P`%DvvCD*(2z~Q@?qA z?iN^Wre;&f+=8yC)Q1!vRs8KHvsdM3wFa3~St*z3tb0FT)moqn z@j&SQJ5d*e7sb}R1FShFUT6>i83Qm~xDBpZX~D~xjHGnSuzM7`QKiqzU5v7>Ag(ZQ z!Th62 z>(Z*o(#pg#wOi4~8up^&}z@fI%Mhgc4PO|Wq zo!Kzc`P?L;b&jx24xx$B0yy-bF44Yitxwo>P6Ht5XlabO}HQM8V(@z(p4FAHzXPi+V z@Xh#~#!PMdquocp+1FQ(KIENM7$;-I6YbCRQQqd&of1w*w=Ju8OjdaMTXmJX);_`? zgDcVK@lL=mHp74FTl2zANfjUq*Png~dV1IYzO-i)q3%`+R&HRzMNC7Or{%fU;m!|Q z3k_O3T}SGSW_}GCsWgFeY3_Qh?bYrpsmZ(coeQ#%W-_|tqP_eh34o%R^FYiFu2c^; z>~#pLF%e~voC;?oMWT^OzziP+b^EiRW-o+_Sfh46OP{*|u!0zpgzIL$xv&vuEI79l zs%r4@56oCON*9nxLb+D3VM4xxYq8jM6_cMId`8?qjwnuNw#sQ4Qh1akaB#a)L7RqN zU296nv$7g~7xvlxQ&+zC9?<9cPG5}+2dj3#2^H}L{*S+dKkGqJ_za}MV8OVLP*50t zcEW%rJ6tPLaAezr`p!Fh{3w=?nPiYB*Kn08+xmpeB3Ik!IPKJ_oNJSSF6GQroU&K*q^D9qdPluzj{#h6#wfLl+j3yBa^T7 zXG6n7M9=85!e7m93>E}|JFsB2%GHnWYhax&rth-@BZW_hRv_wPO;MdOrcp=omW*C* ztkxQ$KyO`Zv!wNMLzPxvt=1Y+R&yF`m+j#5Fm5>tAC>pCN09a@>21L-&3liz)+<~K z?DHYM|DhPM1O_1eNd$0ELoq`?BuP)DE+qa?FcIezwkwuU00v_0PLM;^NKs%)>tmPD z-tA*!{G&v#w(#K4n6k1$mhR}xDxD66NEua2?YRscZfMSism>t>dJ#-QRs_)_Y14v6 zHo;PypJWxdKk^m-?ckAvALTB;_Hr=pN^IQE%^<(q*<%ga2Kh(%OAcJxciE@>Jz6~} z4*{RLD3delYoTnaWQ~f!O-7?dA{HSo407BM(yxN`F@d=$%l~Nwjb=>cEp)Qy`o_gf zT8O%FIs`I|Lhl-&*gsrFBqpvZtVQgyWx7Gn+T-)!PuYfTEBARf>}Zgg4OI4Ln*uQL z`>R5hSY6m#vy8SRD=3?t@mK2sc0bKI>7|qd9Xa)I;Zt;;z4?SyE*W4AEo19y6Kh5- zSkce5>i7mokp4coc#{8T?y_qx$udURwOwbQUW-Poj&_U7jI|^U2M>U@@5q89Pzzb| z5EN(x93gJLANB#TO_ac$J*0}@n=8Q>^x{%H34B=sIP_P<&kJ3|WZ^)18Es32DJ$qf zM+_v2mLBFo41z&B4!rrOR+aXh{m=$nG+1-sL>oUgEj8ARHPJ3*eOE|5ltrRnC>+#j zuU{Sons+EVFV@muL z8iZOtsTR`RQn3^AV!S*!-ul1RrRj(x_%Dgu3KKzMuy8LrC+}{p=UP>@t^7*h1$cu% zyYAYUcfj}&BT+at^13$Lbb4n!6nOuyHF=hQH#_p(;5$G?*kp-XT3WAcv0Jz*1ubKw zq!<|YSwgLVHjUSvS?4AwnF7v;3ktcXK}o7;FoKJU{DgA?eTOv|q7nxvUJt-23dPFZ z#K#3Y)~i%51;Hr~?QqK6L9GN;Od0&tQqp&TSihL>nQXwN75w%(@MHgp|88*g;1`Wo z-FQ_K#VN%N7hZm0J&IfH-8QH~^QZ7W!2BL_>cDKz+x)H2Zg7LU+A2f{nA8+ItUBzP zgp?X@17HN^bjWc}QguuXMu&ml-vRoUH_jCda2^|)|NZeo3atbpH;Ih1Z+T%rRjQ7wks5v<6O<$G6Hv%*p_bMF8D+@;Mzz42M!>Iv|2rf_RHvbQ zTMC#^$x|=VU;OP>EFXst&b6O~LF1E#^NzLh5YZ zJVsjWvXS-mmcr*vk1bP7+}BA#OnL9=(<+_5C5Bf%MKcufpP3nrk$jr}=WR z>rz?~K{3k7TM+Sxj=1dG=l9k#b~{yb-oqd9->Kr3adSe4AKWtgwmZOp+=?oyE^dVn zN@F*O`rz2J(7$j&tdBcahj|=<5d!c=McgNT(C=4pFy73UyJJc=cykMh>iFl6o8f@o zyaw=^_83i5=oc$jzKY)EPnkjo76b8leWggrSi&?VK`p8pGaMHkx^Wtg%iF#XD?P0KD?sWjsYp@M>oOF0dvB6!KC^*tR=G7Yo})mqSBUTUd zTnn~o7CHEjw!;AR_0#Cy88}JpHDDa1j(UcnW6lioaqCB$vn~fM#Y;7k?)D4ZnoXM7E#NEL;3UH;F|;ubogE z^qon_TD>`zVbJK>ihvUsM^kDB_%Z8)p$(g3=TGp@Um|w} zv=g?B0qw!Z@3;P-42~a{P$Qa!K9LDHhl^TQ_y8J!nKA{othcxXIFZDui%>3rO~f2b z&_;z4wGe+plcZW)PCS3)=6!?i=RF#9J-=caoyTt*nc!ksH|F3>^dQR;kb~naP*jm1 zfOm^u!792c{2VY+Gl!4G%4FcuK!ZvV$Q zKAWg7Jf{TdlFifTi5Z1nmkSdL+FA`zn$MskG(BCot^UBctpEBZ3bQ9|n}oyM6h$i9 zfv+j?_{_$|{2oZq_PgM;O0-}kaV7JCr@Vz`wC5+DiiExn=1}h`Srbe&S__kxhqWgQ z4(ME5iL=mh_qgP6!H5Eti7&f19m@YG`Y}>9<5h;T^QR zRTJ{Eos1`N%QTl@UA|klkL9Ymg_s<>CA9!Uxw!_igV$S#ykX;Sfai(B#a=9z~tB1;~t(m$M=)A zNK`S>e8Zi?A~iFx?*jfpG^^mn4x&|2c>Kv_puXS=c_@yf2ri}t%8V+h&F8a{HEDg} zy@op`Wf9yxgc6o zF4+C#Dxf_?xbT}N|NZX|mLMc%WREL*>ap0vOZk#@6a#E=wkG^J27IX!~1k%Md zVtmeJ_*!UK3GyFBmv8X6;jKm z0u~0FCunS!>njW6u%ZG9J~>$4@-U{no?^?_m^lb?+D8HkBWoK^+s;zU3LLxsjRac&6Fk*Pc=JDU+?;yj-y6*ETWO)a{&B>viz( zDtLHCBl64^d?APfH3|5B>zxQTO?kOmVwdg_SsQkg$D)5sWf z(wWV9HUIv@4_~KJ)iSyDy{umq>#y^X_ceO^d-9qNO}4X-e>Qnpud40*dO1?@e_1=C z(rAEqOF`Qr6itdmlanI(8~hVr^~*pHG5-My-PgSJw-22khR(07^CRTFbLqqcK|asF z@Od9sC9k^p$q#?_RVsSa#v=mFp*6>BIzbh;j+qk%bipLD&c5pQA4r5TD1eXKW%#s-?7c38#>RvW zuLgA$K4y$@g$mb3ww>P0&OFv7#^L$dQ!1@sTWEU%`_H~5XsG+91N--$nN<7bH78wo z^)-9$RqLe}zqqTL)2l)EPL~8*1E!{R$1`U?jRX^uer;*qr{m@vY8mQTt}=pb#ZMdDtweG$ zfAS={Kpq>aW6XLgKat|LjA&ib35la+OkFqLKpBj(+QB66{HZYM;paDQv~PaxrW(p( zm)Ae^@hK>50W0coFX8{K-1+`}c^NdaQa8Rh_~Q;4u9O4v+_xbor=ZDrHm9f#gq!sx!;Bk6_?uFxBeee5I>pdUEfl6* zJ#mVIEsjAZc-;OI}HN?iJDE#-S=bDKP`4F{lwwiq(FXOo>_;o12?7*XYnqGsr&swpZA3 zY+E1$iuGxMTtgLB(I$KSmXBV&BMTrTS=(dpee<)zN4m)R)xe*+=18Ldjpm#0xwVZp z=)_HXuDv{0xT41vR#z(2MinEWtyXF685f+BedEo{*_U3@L|S1{9bl@977L?~tAweR zE@&?Z_Ybh1CFn!>5C!6d8mAz|;x|Yw0frIkWaY&K<*dV;t$A~WK0zPwZnS>9>YlTu zfFe2TCQZ&>CvTKzE}uaDjERDpg50N)s7zjSpdsww4lbIaO;tY7@T0>)8Gma2{u#yS z?QMb=+qsz2>6&3f7)Ju9#CyiO6wmRWz=E5|KE$B^_FCGZBHGywdJgA2Zf&jw0>Osv zfPCb-PmqiGclwmGPEOE9y`=G~Ynnz>F$mNl`GgF`I{UgO2)C_h*5R_zAd6BYo~2+) z&kimvDa`&13CKuX>B6oH03qPRz(YgXB@IfsfPVs`E_C1zDY)R7NxWXgsP?DVi^zA? z92c!~bhqC#GA)uRNQI3g-4BXI`N2v(ioSFD@a#Uzkz8aq=t)UjfdXsZKIrRC-9F=QkHm_G+1Q8Dy{UXF3!jF(eA>pe#*SP z%l~6|4gV)7yjsMJxOs6yz(6bIif9b94LZ9_C>c?>YdY7V`#x&8nug_rg9Tkw;FRH@TrOl6a}%?eW~?ZI zCZx=8GRyJg;TCQFY7!M&wp0%do!8%w8pnVu*kqPK%@rxb8nGte1p!4pmc4kR!P(j2 zi~uEi;gzZ_P<0!>w}XE(d1)`#c3xJ7DE?pTM^zeaLlur6q7-;S)gU@!_Hzcry>8${ z4F$EGvvoGfbdsK#kiNEth~}NmS!2r7)KPetf%4n{E*PH5#mr--A30VG5C+^oN6%%3 zC_4wQC6s=!jTf#RzL`RYr>N{#v}UkyMMhJhmI60) z0SdLW*e4JN3#dtS!t7b-@+DfcWjG7jnKd1xKnl7(kiFuTTYCwaq<8-f7xOdEKKs>D zwTlc?hZv5dq1vXA7;8dOcc{WiChPUQBD3d?anbPpJq;pnefY@D5RsCxwMz@XnVj4Q zT*l6}JRUi{(&NKy!c}nnu;WJ$f{Gt2MW7%LW5_BL?z#KmB0VrmdRR^zuhnU4Dw|1- zQPw557-)1vhuUFglmR7cbv5x10BSvhQQ>noA;-+&gQV1!@Rpr7ISnACfT?QbV~7{!lV>joLRp?9#eM zCjL;#PvCSGR`U=;-BOBWzd6_PJW9b z;18^j`@bM0z;Z}(vXJ`X{_tj)1TDs`rG*kY>UgmXKcrQ~Q+mSrEDlyzgX;1> zYu}REx9>qo7ILup%jAQ)E8qZL#UFYZ<`u*^5;R_&)!W^h#IjwB)vpR`66_&YG zB*n;RoyT^x%;jPwMkm{{?3m*=FR=%=pLfaGM|*+Vm!rDvDNVH!JP?ac`$_v)4f7UH zLgv5#Ud0F@aItG&5BV0PBK|c|SUwJA zPZ~rR?u9MHbtJ59k24qyo*yiun0Ax{mqFmIk^v>0%I%= zXZ3NbqO_;696(vlnV5ZJE5(yOrVr`5wi*#Bef zJK)K>GquTY@0(0=emFaL9{B#+d%e}YJ2EBT>w-}j8?Jm)!ZUjr%@9y@v)6iZ3L zZAQpG%b`t+gvS*rZ-eJK#fHT*uPcK#ECxA=G{vMvJ25dx1~Rd4@v7-uTxatfPT=LZ z*Iza)Sd84*;Z6Q2R_&=-flRrUiHKcJ!Y~f(KK14)P_R;rUv-Mj-w-|L(#skd4Of5B zxjRq%CV%suxN7LW77q6uo<6EI8S1fBl0ugUMo0QAgI8{I1Ep4(z3=YjWM|VI_uqSU z6)>a9FTMG;tN(|!?)$<190ec_-mQ0RB1gNlR)boqE7C|cMhi6x?ri;tW2T=qucN{P z3iCJ|t1eM93Kf=vaI{d>MD)!%e+=xkkVl=(g)-qQGcPSl2*E*Qq~tsFdz1N?S|KSAW zvmLxf|M?*^VJ9_TlNR+5<^3fKHI>A_K#V)gCw;igWthv#r}vC2bBaLy%Of~Kz9%Pj zR!ei3g-Nvb%GMG@mNM|~p8U^Ou1xG-3H>TRnl-SnLN zEoamy2JdT9;kh|;RA(|ng{S4SVse2e7dT3{Z3?;aH}CAw$M>9)hqD3ME4Q9Wqh9bY zQUl;}04vFvdwju(QGags#MCpuDiK(RS=GLx%o5!^ox|{IjV$4E>I+l~m7J5^B4lOj zM;#FpcB!2we&)}^Y6t!zxdI}K3lgOl#SRVZhJ|xf2lFWdz-e6uv0gk)nUpBgo~oTA zAQpg|2ksXjDulcto~K6N02W^i`A*vx)2#zcMe-$L?gaL!wb#-)*fvpo@PQRFy-7a# zopW}sia+}6y{PSc`dfF>%RyQ}qRmyw;ZrMCX$p!8_2w*(g@lO)#1Td|);JGOXgvHh z=S)6V|Hz~;a1Yebu>0qNskse(kW3$;OoapX<{yVj7y^R{)89wrb9V^u?=Za)kVbX4m4T`b|vjB;7gk zd6$sgQp5XTMA#!I)viP}+^eekaSml%FPp?{8cv&ES#bj2Ie`>XDv6=-#9qypb>?*gyOg9ef#9=xjl`%pH$NqrG zC{KCpSpYA6iJ|qmKr|QQBHYIaS;LGb@1+wHSCJQJ&9*Mr$hsJB2C3)OgFmo!O%^GD zcNL!Kw!gkqomb+JyMdq-rzQhjb{ z^XlL#;b8kqfa9TzUjew|RtRA0mTU!Yb-^5eg|0bOU8D+H(FmD>mc@I7#$khy86(6Z z$=oCszC7=)Ep#$6rUKafPaUBDr0!FNV=yBUO1?uv z&DZ`25`)6QCaJ-!sBR5t#@P~bxs2U@!*tAf^_VV4u~hCq#t2F&5U+*&(jxVCQ?xp2 zGD8MUFP@JeXko8bafUI#)CK(g-JX!UZ|M8O^jGvPlVFI~^BN`FIRJuZz`_~0aN~d* zP(|LF7~MY7?DPR=4`xnzj{L|0Di&GJLAn%5KZOJ?Vp&7n0ISIo7NGR$OBc+Tsg%0VKscGy zpjP@dyv@exbJZ$Ua#_`#gUYTO>t&d??7;P9bzwvx$^e02^Rz1-s==hKKS_!BL*-y zcOG%Bda4onN?dULY4kJN1I&v3ogba5DFN_wVSbAM&Eoq3$LdY<0Z`2X=fc*Cy8TxG z{|B}w5^}LQT z_&0-tHxCG)Q4RCgin1EFf@C*3>MQll`dIC-1j=lsRLa8y9%LV|PY@Q7$W3zCL*i6u zK<-09Z)Tu0Qv1~M>`+kHq$?^5>rHOAiA2bQj6!nOJ*U)o?jF(y6k~G#V(bLwdwulx zP%vJ-D>OdV?^jr@GFMYuo0kmdd;2;ZWiYG$Jbl6~l|tQZR!6c0qs-T=b}MBvILE;f zvQ+8wgA%Zs4_8&_Y>C!dQ0s>NaFg4rM_MEgiq}V--foB2F#yO=J_M}iq3Fnv!UAx% ztDx-oFAogMPJC!H*cl5%VdS(UV3}zXu#x=gyN1+Vw*dJBlwwXD75!owPT+}wA<1v1 zNGCl`8sg1I9~p#*6hHgS&Gcn*Wa>9#n+9=H7cTV*mD+jWjm_h>&8-C(?-*S%!VdOp ztQv_vtd%I$dRj(1V4vR2>=?bb;o!yl%6S-jFW$L#Zw2^6?>Bb=6{%~^hsNvN1o__9 zg+KV5bQ(T1R$}w$#5iyvj#)rg4#_++nb9oODDaT`FPoLk6(Xk zLvC|{&aY_f47{gXeuO&>M;ft;r+z&cg|ptTPmnpfCisPFLH5+sn$fXjav z{3BQg*&+y&&EeKEk#C1)GfhmSfdM!mf@t7WXGocV4n*cnkY>Q|x!kbX6q`}~^{?Zf zd~yZ(J@pok$SnogoZX3?rYnXKx((;c^#)id5Nit}XNyik^`Bx=bUv3HD@O7up) zej}+LWB}H(=`^LVw2TLSuTBP`q|c;@tAn`)RY0wA+xcX3Xw#k=Vep<*U31oi-ehhn zLkdDn0hj|K*QQ+n#@+lzRUNm_aFrPcNHLc2yAE&_Bi-s~_%idm1n`TfX{uup%h3{Jv71T=51=knA8V!XkG}cK5q#;+L&Z4mL=E`adofaHo8+pO(TP`xt zo=hVPSSdRIhCvVpu6aWWRGQI@!-s_Ddp;)(c12;OvZxPdyzTARx3@1{ue95g1AGqcZQT*Hv#bu5T}!gcb4S+%y9C4Hs2KJ zZUr%~&hD16v&WJzF^7}yxS?J~CMO|tdyaqlr zs?mRY13^TR@azDRgbf5dQpkkQRLSr)Jdc^ak=Q(bG?9R_VD{v`g2% z(o60ewKg@$>~=+Mje#&@gk>Qyl*r^PD+Tyhm8T=Xd$-74O2I9MK`KG-WBjGc!{X@49gnGMKM?bDuoqyQn`k#|6k(iU)T2wSTZAY83G!z|H`th zYja?RTe_6j1=?gac7M9WXLS9^fNy0*{p}AwGDsBCzK8C)g0*&s>0fMen@ioR zaoLsRNGI&PyNeBYJKU}+mn#UfzL3l^+Fa-ovxK)A!!~DawK@6g#+djV{J29BMs%?4 z1Bl>(N(Capupxt_AVD{>pPqHNy!^D{pr@mK!yhIN&_7L1 zk|s@&brfsA6pWG$cubn?FOW-yhll9jhS@~F(I+(V4o}yK_nDWcohSYVhr#*Hchi_Q z#t17oAC%Qhwbs**6cfN%j##=rOldu*>%&yvZYJkgkl`}N23M1_==nKJSMu>^rlv^A zXx+o_?SZj4#h#ztO@Fo26yQVUg@V~6XB955QtF6=x$MHiY*|IzO1hhhww_kO>gCZ* zD^C0~e&48a;Aj(zvyOYmk&aNp0zaf2$l}ba!}~|bJ#;^*^ql+a2jU8sOCG)T75aVp zl~t{eL;-?kTe{qqNHK9YIZ6xknq0NMsMMeVB7z-=2#+Jd>|K$Xri%csCGrs50GR(6 z9=i&-!o`3BcR}X~_k8Zg%1zB?oKrgEWl}=CBBU2V)g>I!IjK}2{Nv42C62s?9&-xrc!2Gx^)(f zOk1Gi)fSonsR0F>W!DaEiJ2;PZz&`Sjh1V26J?fL0W~6M@hX!?fSQM-KCqlj@kv%_ z<+4CdV8xmyd&#=#0FKD}MyLB1t&*KE5b`6o2M#5yF%fm0Vj|5IV4gL6>rzXue+^-)$r}tT|$qMW3=CebO*M_-hA%Xd`-48d-Z8K zxr%jl>YWC#tcEu_=@)%h_rjI5 zi}(PJL8azFF!iq!0hwPCQAdiEM8EIiRj5;tjC{0Z0xb?dQ>e(YUGGK z?H$ya3`phSy-|f+ejKmnr<0Sq#;j$VD`l`4uwvuHmF}sn6>_tIi*23u!OU34I9)yb zLXROwF~|i-ue!i80>ht3%ygc3(I13tfFRG17s!K?|4I&$zj}sl+8b3 z{zmXu1E=z)#51edsqeK_%n4F38YDKWuqz4TP9$E@aOb1PhoD(C@bLXteTLg7dIz)C zM>(ra5t;Ihns$Nulb-Kh^*`f;fdN#N+n}xV5<%fA78GhwjFMT*iGh&XuP7XDwXxFn zL-bk?@Drdh1IYz<7H3wqsvHXXVWPYl+FFkTD?!et+FC$eIHOX~K}G^GOe$9sbq`Tm z>vv=W$(HjhJH}3K^(gFi-q?4FO+G%MQz}7FTNi@45=JU?^#3%_0{a^Cw3gOU6hJ~u zA=Q5u0Kf7J$+|#3ro$LG zuJNumOp~4o<+iLO@4~VXGZs`V2%bCd6oFF^FVbV-WYKEQDyy3CO=BN9a}`d3PG< zdlgJg@&ytc4Q@E24uf)h*NXb;?5>0y(mi_A9d`S$o$6QqvPOJqI04qx@;4tji)TrdtK_pT_C+#3Xee|xn)N7tiveU7Cn zQ`y({>KEs;8Xb4`N6()45cpTxri0Z=VxXU#)V*K^TNABhWjEbMew!@G&c_){WV++A zDAxtM90qqURSiFvz5brP1;7GSWN*Dzsw;I4V|R5SR-YW|r(7 zGc|k0DJ)~q-rovSia%m58Y7XhYYGM$Ov-$nqiUsI-V+WEo@Z-)cnf}Zko z(7wp%^7_R74enYWOC1Pw`UV&Q#t#Xg#%yRvIet;mJDoJdGHlv!1t(JTAX|~w<0X&L z?v20%y8!jTezMf)bPmTM|8!M_c$NG~tEtM{Hv+@+3U6zz;jh!0fMS*0oBVlb^XWCh z$OElX?4#~kYA{<`ql`}BuK^Fl{H>q9*hTbxef2+k=OJH?f@k%G$T{KUq(fTliAPLI zmt0>GF_VwY?hdQN)=k}VhZm-K!zP#%f$_{YF};#vpA_m70qj!<9{C~BMPSyT0iG;w z6Ukr+Xcy5oIx#R}aKr*xhNUp%M5${NK=;dmQhnNYi$^5=uGvGxh*Ju{oVlJnPirHL zGx>p;NhH5dR!?YcmgZ8J`}M}<0!Kfn^)%`e+IqUQ@>bEAa>P%6yB()CX9vfaHBC+D zClbx{p{m~Y{_oI7aLb3p0OT>W#%YC~ZdaMR|F`q}jej`6)a^U?8x&6>L$#rx+ zPi~3geQTBbFd8;e+RM2_dS>$Fv-^?h=mrg1_`P8$eK2IJPs$W5lMZ5;}m znd{ozVNTu@y}no3cBF8j2Cjxk^VKlq%DgtV-|MH2N8h@*`1ddR1@8L}jXcwxo_uoB5vrfvm5wk&75Dda% zqu@CEwrEGKIMGlBZK+8pZZ-pAh|4bU(9A@aIZG<=YnWKWLbX)T#)3vf32=iapaWu% z2V@Ym{AN-p5nTWiFXWYH4;$IVv?QM*_JQEW-PK48s@k?(RpXgj7nVC!MXM+J>H=H# zR?D60f~6zvzo^v*eTqiVvR~6&+2oRD*(}8YO`!=kAB43!yHaarY*kdqje0?r!C#T9 z+*co*7!Q`@j1Qf7yy`CO%G7hDkiNAO&Zwb23@#7WI`KR!pQ!f4Ru6fAz|Y%ThTq8z z47A#``6_+9ZAX6j`UyA473-pnZKpY1&Gl9vwBwKER9|_+!3`E0hHztvfnkB&HMHxz zeTn7^w`VK!^abbM*n3Zlr?J{x4V$dLJn6B_9Z*)nb2&Qad~2Xa4?yvWVx2uehFG0? zG6)Ug3CCI;#s*|aiJv{bqUaF#c1Xj39FJKR3va|c0qW1i?>o7W(Ir3AkWZ;Tk7-Um z{n_+1(KY1`XO{sr^N^wWlvah+$aQaNH^)Z9SM}p8T-Sw-3hz&dlx-dkTiNkdtV+vk z{4`vB_mHalX6QM9jdzR#g|PuBNiYluWhwK1PeWH*Kkxw?e@{4d5ijR}p?eS@2@S<;NN70-8fTlYSX z8_1}u;`V+OB#|6((LZeyDOfYTXV{c-4Qn~^N9M8~+Bw9$LGO0#-rY>;j~4NCN@$Nf zCQ4kV3d3B;0c!z-m;yQa14}Mja^1r5f7Zc^sz%~72QK`72qOpaeq-?i*IB&1;x#mv ziHtwQR!^RxO;L`;v;hvAc&xw=WYSJ=#f^RX_ABeu#6thNHKRhHaF@gWNzymyUJ;Yq z9g2#HGy8Kc9KuA;1VEX(uQ-n@i<(w;@g|R{)9A50)0ESqZPO-x&;|lGpeGqD zTfFa5qVGLajOaw@>>Aywn@Tx@QCe`YM| zx^TQ8^DIjtgKLF|g$r`G|NlQpQ`+aw7FwAHAPO6c`5Y4Npe^PPqWpPjR8%g&$)TXP z{PGT6;$ooPsOUd84r+mYQUq;#cPT!jnnBxS0@j7dYkDgT1wo-&$jK+dpn0GMIfoU^ zGE_g;Rca$ZD;rkj*XD6{yO3KE_y;z+ONNIJ+PbDUR;sFM^)e;TWUXvIYvTy)Xwa3w z#0ubRsod5ZoEb;t6u=bN^F|AAw{!8wr_0Rc#l~t=dGvklj-NEjEjF&|!SSfOC1H=- zTiXAroV@!`1R1^Ieb-6)e@fTBTHOJhd_`84%2+;)+zKxc174dkFwVi3!gWFZ7?cnT zb-m|aluSsIg6R-ZnMIG#-l@w2skA8mfNs|tyQW9edbmcwz`Y5(`qc%jipP0>jyWDp zJn+O2qm zXE9_tdn#`oPz>yi1B zKU#zb!hF$7jon|j6T`?z;o?nhOWiF`2^4p`W22?SZ1{<@=L5-E_s$VkgEoukVup>azW;g z!)yqB5qI?Iunyna-d^+m`#0YlY;Gn^YU}_Nr3>wOa!)Kr&#$@g;H~yp5ho#oKr#qDTS0W2vcY#oKT%x zL8cmg@QG7AO3`Ox$brL@@uiUroqO?1#r6$qEtb{@6q12@KwfBw{DV&SJDADjT}OI* zKkn__-6>?Z#^u@SipDItBI@s`HB{+p+mbgfa(>9asLLA=3UZ{|C9g{ytCG+dm{p2ZB9M}G zKx)1`b=NQ?cS;DJ4Wjq}R|M%e-a~lL3_i+AGq()R%self0;+m&!_)S`K@wHv zN4-Ko>#Hgx7Ye@oumvVnETMo~_=3;M_Q;AjXO>HG4XQvb9~@*Nnj#nl3TRwq1^#4j z*}*nl;{}zfufJa1uhko>U| zdC_G}eezIwfxKHEtte3+O}+U(>AQo?M%fHXF*8Mop&D5L>30RhBq%2b3r|Fi*|Y_bvz&_6 zzz9GtP$1>#u*RPSzVM6c^l(P(TX_I5Ycih*0PHA4zQ~=R({yj1vpS*+*~U#FM|Bhk zIFah%@ZPHI$c|`oOkY~eIb4c@korRq@>Z!eb!wlcTj}KK{r)o_*r0N9+aEhOkF3>e z%ACvg9O{*r6s_lM88H97u{c3Y^tj(A=OrK!4VM%r5KoK3Ha>~UuS698>Xvw8Plep! zQpb(Ohbv%QN>!(FJL#RyrNs?}6G3wKhLRnd3xFUj&0RW``@qNduo_RjMQg0I-wL2mv(@gfx34hPFH3~A3Wrm!shIkZ`pIwh<}O<~nS*BZ_73;@ z$mLai#o!wBs`%Ot`dCK~$`D~wB!$vvWSfiNU^juy`d~O#MCwzh^=xt#fdtZmwkiWl zm_Qu6sUeRF-6hHYtDt&fH z9%=|F1Xd2h+I+02ZLH+~Mu#OjJ+JmK(%e4~(lZ^g)BQE~jw*X^Psm_(=PRd;z|auT zc+*3Mw>Gr4K*Q=h5~VM*dw;>NYe;Nid7ktJ(Ufpqjdf5PHg_;Bm|4p{%=_ zT_J6ON^e#vcp#|4Fq(JV+rJ- zqB_wpaO?EFWQaa6ME*_XW>LQlHQef_HD*(N0juR5#k_`oGnsYzsLbY23~n3*iL)O} z{SrhG7m>JPUh6DtOf=n7SCIfQoGUy&;F;jm9?0!BtIz#eg11??swe1;3A%^5@1Pih zF`dIs$n3U(T)=cpv&5#EAY%aNKP69!|cB6R?- z8j!^Keo(5@>LhY2&qx@#T_w{SW!X8ZPe}`i7(D;{FEyGn&uOS}EDF7K{rCt06tymf4BvaY-VT2=QrJuvksjx>+NZ;*O zR5Q?bJ!LUv^>iwvlR@d0>9?{=5AmMWoC{v;v{4k^5>b>#2P$- z@WQ}|IUwdUsSugTd4S)E%?Wf~2;Rrh8m|3+i3?%otmOGh=9J{MFE=+|)zSjR z!xwaEANhHopw$<_yfJTdOF7BE*Jyp3ewAG|Df70Uzh350Pw$G`Pw`%Nw%RRUdfuob z`NtV86B+&bq$cNQea!BjJ@gYW$>*e|jsBgCedF*!BL@fs5{{g~7LK@i-zXjL+qb;Q z3=?X)NcVc@(hWLw*r0FQ(Rb!zGA2M=hQOLaaVB+-09WVn}g@ z1O%@yJKN#}mOwfnEMz}CfvMQS6gEkn=0>BF6!%(7Ej4Ploq8w8sZ+_f3z%KWgG9Y- zS@!^Iime~z+^XKCVcj1m_&`gI4AwGL*1Ji_ylsujBX3(>r%Udux_vu4&BWhq z8-gL3+F}B^ji}4IQBk}#=<=lu&9=Hm^7;iAyakB(rSHA4?mK5sWvK%SXYZCP z{w>}6&VvoWQI=KQ`r?~wu7GJktz+uEz9yjD4%k4h>ShphKS|>hQ?V7|a`V82aLeHzZV@TO~6HF4J@aGT=Ce%U- z!n<*ji2ObI47pC-rh;MUp=(l(4MotvZ{2|`(bZ)i@C(y)CE}!=EfPxfO%b3 z=A(RPTdS+s)zQ)GZrWR*aLApl1JuS^dv=dh>NR;PWoi4WI`Xf-{Dr>$y;f2)Ri{r7o++aA_7?=4gN<@uX$bd)Z4*PA<;V(1*1Don8o(e%ebUJQMt8YX-(?B{^U7=kfX zfY$b^?=#uMgp+T+GZHww9%hN;%g=k;+}M)~ z#D(1cChPKvi9cXJy9u|<+%z#k|Hhn}ymX4ZOk;H0BG>}++pecI7r)v74GnqZQCCi9 zol(fs+PWu-hUwpYoqy@LivG&o`9;Ss7R3?}xBISmNAVb%!4^599k75%lU~w66R?8R z{e*~c602|VYbiE>(2D7kMxG%*q;;n=J7CA2dSv9H0ds3EDsJS}PcdDCbfow7F|C)I zlDU(A6tCrta3%qK*qxde%CJMpIZXxIDq^LZ9}N3@;4GP%yUG6kU4!JZ+0kgV+nQ+pNu}7FrYAEVD4udOm^&mTj zeMq7Jw2T07un7)II{$#ILWJ5N9Hhn5FwaQWoQ#Oo;m}Je=AN{KYjN|jmZGd?P~u9^ z*Y3Z6`*yObBmdU3q$ZR6%&Tc>2WJepK>(7^@d<^nk?eo!UVoibRlVCyR3@j_AZVnV z#VV6~eEPh2zEhK&th@uEV6Z4mVC|S|Q3c0>Bd@YXt#Nt@{iOB4%bJ(zFQ#}asOu6V zP!B(?IQPPR5#FGeG~9Yy6VVT~v^LYnS!Um-KfP`kO1U=NR5Y^GPbTjA004xWzunM~ z>0#IZrI}-Af<{0&T)X9>pw6x(r!ToARk^0p6fj%*=-@J;h#wN?^ot;flHu2g97^~d zoYI-mAb5t57=q5`EFK8LbpQ~;oBWH9Rzv34z+9NzlZ#^)XaC_3^02=%VJbB?bY8@; zLmiE6iB^E2)T$zV`>JZrE|iZqs2?1JWKF4q-oIX5V1o@`MlUZ{N+J1^(oOvecU?pQ zE5<8eeob}z?UrFq!w>PgwIFVcg0Oa#({d+D!J|1g^wZO`rjyDD2@ zXjxece2a}2wBlwjm<$pdgc43sbH?hC+`k9JTZjNITLY#=pI}Je0nEqoi2)3oQqdCYL-E*y15Mq9 z8PJPaP=O*QE(w-qDsOmHnYw5W>R`*?d`7J>e6;zwdYHUQa5=vtz4Q?ivL;u7hF0FN zDz74dtGN87e%puN2!_TrKo>Cct*h&eKWI@Ew@%lAqRG&XR;tATZowdz!5X^>bs%KY zn6+%dZzYn>sd5K>qwHY2rr|)PGMQZ6tI_MLLkL%5b1kB9`t%)+sF}Ia5?YgE&sqOc zFTJquQF@Jw%~36T+!<&n$7>TIF%#cvYw ztSlvKHK^)`3w#ArLtX|L?Xp&fSs&KOm2%m}MP~KDF}a~^eM5|4W^hc1UZkXSa0457 zZp`w5iUCq*U{lVIJ8XjRV1l!x4182bHb6KCV;G?33no~irlv zsYb)=n4&{t2iN!Z z2p0&y;8#S37MKCU9Tw$S8qFNU)bB-5cs2uLzV3+J`1k~9X>lV*FQZ=%+IwTYH8p=usGD{DuP{v)bum7=cY z=IpxFoi>Hnt1#3IzGhLo7|404gmX@GgYbn=;d`Rf)rm9|ggO!s=a<8_zH^owf-P6qFS$Q;a^^0*5o;DW zJ#6}#105?}*~|#5&U^=s8UPmJ@HIMK^bYAk6g-9S=imXr<*tQnKJ%^2T=qgKRO;wq zF$#<1Hz%(ovMJ8raqc>)L$!2At#h^O&^C=*e%4j~!Y+N5tWWAD=JM!ymmg^YMXSW2 zi}!RlI$}l2HX#(DXLP|bxjtzYxv$R{GPI~1HagA76%wmk5w5VbhgO07n5OXWf>qW! zQD*akAez)zj09^(o`LNmTBd~jgyAIT9ot;vp;uLj6N?Z?VPbJ7R16|$nW`9` z>$;|6`*4jxo3GRsC6*Sq^($3{dehbwjMwgLv3YFmk9Vjo0H*__B2np0bTZ(mtF!0X z>l=yR;cSL?v<};X-7d4SJW3w}8Ciifao!R~ez48Ta7vY|+AIax7e*qHUL}W}L#$ED z2cr%CNYknL38TUp_MJzy26#`lH zAldm}N)UXA;uFOSgTh_kB6xr?H@M`fRI0F_NpHK!p*YZ3w=Ltamqp z?no6$%zQ8r2K|FZa_b0@zyQ0T_E}5~exj87Dl|&14E!a>(!(Eoz~Nnb^2zAH zKy+l}OW3@1fyie_Xo_Gq6e_QqhQvy2&c$FxObu|k0HV%bW9sdN-4>TVdwN1+(6KOu z04NI!g9}3a?x)UAHoijdZhR*}Ph(5}@cZ|#=mnpHt+>0v38!i}lsQNd8gLOj2z4!F zzS%&A9tJG|>4~UI33*G37z^+pj3=aEE1fr;S!TqBW)o=`8Sl_0F0ND&hSFJZ1Y}&~ z{4=AY`Nxit&SS?wq#9)V3PJYWS<1`hCD&g2A^r33es}rhzvfV6X!FZH#RoDcH+<8fC6{j0ty8j8b`}3Eo7A5+wuy1)7W}oR{`XWT;=_h z1&+o#YsA*r0)>_X0@h1nz(Q+j;IJVmg~MzpqnOV60B1#L6mkgoS=`7rLjgl4gScy& z0XDa#GpECbXx1!Y6q@4cGn#1(E#zkAxb(wceDN9Lq~D#K+(!Cj^xrzwVmVu62WIhip`0OI}tBJ^6vVnxv$LzOa7+8}2wB4zgFsEa)g{{lAy? zx+=0RzCtI5!E`kn$yNt_@1B4}{A^$$8KfoKcke1a!Kwp24y~;viymwZ$X4v@vB+Vh zMi*b-v*{co3;-MZ_m7=ou~ZrD#u_PP<-@qh;7$w>Zv;Z9FRq8NFc7{%MB*5G%Zxif z$&MP4?TNL{N>OGtlbC^#Gl|)(@zC^`Ou!A#R6cA3Jp-bPb2_Rb=879l@Ii}x6MRMx z7o_PpvY0dnfW}`^0U6I_L!1HhLY*#!J6kK=Lw3{O43fTK6!Iv9K{*6(xJQPDU>_%a zTzo}qt)-??Q!%}x%p6w5ltqiROjyOIz5PA(-MZ^;yQYrQYS@~CR~)R_)JkDrIX%Y- z3kxM0?2gJf#`0Q6U2TH=EY}q?`pk8@pe1H3G*!b9_d<331oW8XqJne=Wk`TgS3?qg z&XS8E>fVY)B;?27NN1=DGkz6a1h$UQieh4tj-T^FE6jL)YiPx9N#HWg_Or#l)B?|O z)-N%i*Epg@%6e5nd1(U-i)))SrB(EY{aF+Fu<%n68hCVc^h2g3`G%b&DO-s!ZycvV zRUVx(*63;}-5S#xwFN{Xm66fSHO>&6E~&XROW!oQEWcsd%d7MjJ&BS(07!fOBU@_S zzaN8PkIFn)rEAUSRLS?E*K})IE{DMu9sO+9t%-{XNZ4<$i`#N-b@j(`OtFZ$z#OZr zuoq2uc%wmP?_@rsw-8HHc_P+y7Z2@k5Mh+L@~vTSrGeoTDz3r|dQAcgf%8hxr&q8# z73VFg@RZlA^uzZBS(QTxu#$w6N~Gm)I>f!Y!0!Wf%O+j9bHE-oA<}6-i4X_g4C~oc zzYKj_hUZ%VRc!@M$Y3&#={93cJe}IG3~jg?Y3vd!)x6wssHGz0CULbCHx z+!6;+XUbLK3VNLB7=*S+kbFhCKI9E9i{_MAbvkXXUFp^mIj{F9R0g?1$ry9n;-T~E zIG3XKjDywgR#%CkFz?(_b3?O-vkC6z+E}@xcQlW)D07E9llR812Oh zb)mc3l&i@Ng|p0Mg*v5Ap$vrje4a$LQSBErCDm$mp=EZ~YaW6OSqJj%o}Uq-@{7Ys zabT0I1qHgpOKw_26dOa?9w)E{rQmcE%|22N@V=P(iTwe1065!rO)r|`BAT+*O!5?irkXJanc)J zfBltLNU#s+;YN!IWbR-;UA|VL4|rsDw~Y(rX@6E7-T_+^`I42#`V@MJ$!3NJAcc47 zBoJI>_AEP>ldpZNvS3%aM9X`d;`D|_W56kGkvjZO0Xa~rFv>Zbi|;elxS@cOB1t15+qzI+q&DBKhsByf;tpZ=-G<6 zOVyLhBXP!kajVj=)a4eC$86r74i}7c_uT=z zSQU&#udE%&_tc*oPAP!e?YfXkP%AiqwJAQLI?=uR9bK-fX9wswQhlTLr*=S8xef{-| zFtlZ?$wTgUp6BmM5FC8Y}fJy2^&afB*Z%LFnqlMG&h5NF?eqS6mm- z)zp+6Y}3}BT}}$hTn+k&zP_UL@^)SQIgt}kAIsD(t+K4f)>X8j9D+JiNR~@=vJIDy zm)S|3wSBx$ovjE@cH5J?fs3whJyN5>sJ#`DrZ+HgZ<@RRYr6zo?wc1o@u6@Xq$gcJ`I|-L(sWuf^;`f>w zeO3M@CwT<60t>8OB`;277erP;5Lc;Xafe--qmrxSFrIdvuf9x!O`(SVe43>z$Ay^Y zg^nbozYY-EPKlqT0yuUogAmXnP^dHjgI{DZ15gypbacTVgYU*4n494XTtTLvo__M* z`tUFhW7^3Cy*mNRpLNAC7fdnn`7I_?pT?IQb*pa>=c22-yXmb=KV=3>x5vo0j|g; zORfM9dJFi_`Lx{BAS;+dtZ$JF2|f_Wkh)Alka2Wr8;O{t=q3%bt`G2HQ!&87qU%Fy zNBUbC=qU3o@QO1jR3-w#Rm_wpnTrx(r`n+qPL!}J&Q}Wv8~r8hjXlwQZL>1J5cu*GCz zJQu)f?dnv#X>0i0geHDQMELmQ z!9KNK7tMo)ye%I-(me<2B z_k1-caG%RzdQB2=sTwENMSRm{eS=xceG9ABr-l5cwQ zaLEUQgCYUS0g&k^xt|V8drei1ewo=UFC7Y#2dPy9?`YLHq@7Ti-vPtuS{O!Gqb$o- zyj<1dauZyRM(mxP5?AN;fv6UgS(SxNQ`On=>3R(a#u>X{`ON3^0e|!Ns*hF^m#KQ! z>L711b7faJTA2zu&Zw-$GNZ#-PF=dFbI2J>`=VF8xNk=XyLoXz8fXsyuJoFiM4A9m zDui2y^mp8&Gb{a*zC^f&8&Hn_T*D354sAaZMl#5MttkB@()93x!h6u%-|nZ-#LV|< zo$;8iQCl9T50e6N3z0IX-MT93fZL#uDD4`dxYFDi-W1X4N|^EFJ>*PV->Pzzor|s; zb+ixXU9(pT0@l4d+8u3eFOpvl(^vaKsHaYFH!EEa92HgPb@hTct1Z?jGaGi96G2B~ zgT2t6XuiJ6Zq()~abpF@Z)W+Gj84VpS9wCEOS4#&zPc-s*AmsKLppO}u;@a~#wQw- z4jY%feCyZrB{D*%Ak)2(s1hU1YmIL6*Q2dF|C z8bVcrkQr`akn*EJ@%%KyRGug z7q+NC-5B)>)eMnv@|rW()wY_vf;tDXR9hu|V?^-5|5dQqUq!Mc`Wd7Jy+9$=(ISs#m6-nOKIy zGsA8dOwT|$o@pUN@PP4%vMMGjc8A4TMUmzzJ}WF@=K)&_m0M!45oNj4j%zl*i_CO9 z$TJ5Hyb6TopE?Lfzk2S>Gl{LM>uI&JK!{B?%B;%a6{;a~)99M0JXn;k&m#ROUK|RVrnIOToE)g0sZlkOeJIX1a^s1sip`I$HliS5d<4|L&PVAUhSj zbjulit3ggi6V}-pPG3PTt=CvIQdPD}rn6k!*GE5%UvcA+xJ<8Qs}3AGP<0K=V2ERu zSK^G^3$SoJ<+k8$T;Z5-{`>!{Sj{XSAKyWm>C^C9 z3j;ywQf4f9w6NVAlK1erkb+29_2Y5Z&&boiBt~S zWJFyA@RLkx*1#kT?{sp8d{`Bd+))Lh%%ES*;WQ$UF~t6#DBJ+7voF4ezFy<`4Gk^y zp&$2u;`9x`T+L9UC)n$B8p~tv)UWBSHflpkO+js6(W_S21rOp)ygb(dO4g1tL8X&` zj}(MJ0r7r2!wQ(*K0vNsfJmc+k_dx1lAuujRzz@Sd!`mZtq`!tFfZ_DjNO@<73y2m z`u%Sm(;swca>F*zr&idDvV$LevjlkF(yrdd-b8nM0@)ViP_d^jrYqM)E5^a=4FZ$DFBY%VV~ zRhnZl=uG58*uP*@4SQU%3nWU_&qoSCTo2NjSLV2V1K1-32p)={bpr1J**@uv1zwu49HDb-yP2pPb5{hTws;kt5^`RYNScOA ztaP~YwgI8@T4<^{=?5EOO=*hFhZ8M431P=t?HIEA?QGXKOP=Ux>^@_ByyeefXF+cr zNb@;)eM#K4`Mw;eo4i|&j0S6*F+)U^lSiLyafP)ZmB9|%;;#^U@tK{-?*s~zN)U0b zFp2X*JLRzPhV!~EW?t1;Z2*bdA*TKWlys0rg~u#4^f(M=O|32gyF}mzdT0E3p7M8! zu_N|@B+wa)iji_=Z<|4+i-K9xE_b1zDVka&HIwrgQ}Sc-3~gGCNg#@$9U9>+g#qXz zD6{iSpe5hk{ewQ32o6?qL|CyUk&NRe?bS8f~D^b?fNKT}#Ljosc8`6ik{5 zdIrE>YXED;Evcyu3+Kam1=|Gi1?M)U`C&6s8#*9u0Yoo@sQk$7g>?@)P~eAgCbCIdl-+JuI5_}}b>t0;C2DXOE5#J?F_H3{dP+Dn zTOlGD(?EXN1+e^qB}bOrH0McyfisSJ<~fKo&RJY8Q&2(UGVSj(T0~Oue$8XRWU4f= zjgLrvx=skD-4=MfIkkWcYXNWcs%~xbWw468tDtHp4YmKs>()3UwBuI&Z2`I zOzU9>(}v3@%blxw94%eJs`7RJTk3}mi&0}!_p^O!rwl|=4)?bKO%A$ea%lhrUYXwI zQ9BvYmZMtSf(yQx_dDo4Z9oVYapVL z`dIR=cR_~9p@2Q5``cZGD2Qa!3Q)nJ*2H7%pxBtoFq)$xw>yRKrl`B=IxL0a&BrLx z4~5G-95@YF?BTV;7hJhHeXE?Dg=&G>n8UOV79NynoD*hLUA{6)^4O5+b(MG-;r%#Q%JE$;AM%i!)G8Qz%c<%rp7a3*kz*ONj<6qI|``ap%z5a)s5zMb?da=!TZcD#+8c z`SBsnU9+}VYEw3km09I^xnq5{khOP=zJr=00&Dt3Sc13OziX>dt(UJenH^+~! z@6>x_Ju+8%(is551uXcpdsnY^cJ8a1Y$?@gf(lhmq-|pvv{Ox0rjp{V{WkiX7ZxJ2 zx)6GDnd0BDhf(&+#$o0htF^}BwA6{n%%ft8o;h=fH>SjkkUEb2RoKurbMC%1*ovu; z2q$A%V@ZWdTtz*16E!eqQ=6#Kns7EVsT9!I&=ugzTY6Eers15J@a2~)ksw?J?iu7- zQO`j6;~(b?o7;*xt6g4DTkn|}z}ujeX6v`Ys+|SM2jq9d( zhD4C4VAfNm)Nq_ikkDUEaana624pT(>(X-D?q{AMPd|-PQ}#hSv^~X~{ndFo6wG_A zw4;-}`svs7eT$XnSe07|J5xwL{hh-Fzg1@g*91is-_qIYEJka6k-=MQHrNtRRnT9B z?ehM0RREFr3f(<}hoNvUa(z>t zc?M8PZNfO?W#5q-E%8}Rc*`H!9h6K9Px9YMr{en69X3bF$6u7OCLqP#?n@GJVfma3s zW6VD(cWpZT>YYdm1zvfnigk)37$9V#~w^Q_W_7zGtOZmAlNR@lBWNv$|a- zS8uTebcF4eI%X4nz3IMN)cyvm-jSeMjFNac7XTGf#GsVw75c1M2|!#w(f|b-S_ocZ z!$Z6`=xI{KAn@U3P-l4;PcFz>TR{64(j<-~{K$Ute{OQm7`|ICijKBOP{h!Y>CFla5P6cXL zk3&^In2v7fGg5P7%OJ9C2hi@E|K=|cfyJwg_5Q-8XeNSXVqV5o%yK-z*MQ~V6sIC( z#-&6-8?EJXSWgcfoEa9Gm^^dLb)%#2jgGG9RKv>gfRBeAmPDDSl^TP~eZ+2#CpcH`CNlC%T^< z(q_p=c@GMxIffmerMrNd^7rXqNag=BjjtON%Dg)~eBbfmlc*CuaX zQ9!L(%{vM}t@$UA;3O04NJUkRj(Z?wgK+LBB$Q^`AB z3`=|Z$*=oV216_tlojj+oQ574esY{%e_%w~DH{)~LUx&1um+u_#vBh{!MU<&v8uo! zgH=wso?=VL%a`+6dC6MXbg1gOp`ORPyLCQ^kNKkOwN`3jifMr>TY%|zkeX7nO&@|BCLnjvEQ1#@)U=yWF-&-IRA>>#)7ree*6Dp?K{BRD$j89 zAML&O-X8LhZArFe*_MYa4|$I`cJ>Y-A$yX9Bm|O>Ko}W?5LUvTVN*tdQub^q1WF4O zO3Nq|3Y11C_xsL~YzG3p&wZ|4)v|2I_#fYVzxVacoNxRESQ|Ebk$ivLrQ{$Ig-lx2 z0G-L%tU2?+ir}gss-404jhQo8`f;!t7A$hINf`g*am&TB%%Rke@h&l+f;M{^$#gQG z;gJ!OXXt9`nSlXlH3IP?Jnko#(~FM)9Ll#E}w254IQrCv9VB{^*(I!S$) zu?=yKo`k{gXj6BdV0K|o~EC3!@M7du-pttn>1X; zk~6p@1lbwnlk#C1p9VNuu2Y4u$sm*>*sggB@}`AwQM0ioYMkTsVsc@+@lv&K#xR%e{ zPQ^w>E*l<>1J8Xu{dclW8ky#o+6490w}CRIRJMe2muNr;RWD2sGEv@lS(V;qKx({MT54w|&n4IUDMz(S#+ zLnFszpJ?RZU4yF+uZ{U#ILNu59&7MXe@Q0K>riUc&4^ana%xL?%UzTs^))j*2NiWfzeA)?f7<^TU znkb-ygOm%eayl7@oC`J_Fc^qJ=xGM^xMb4uNmv=qx=FltXco~4qy57_9Fs@GX|Z}a zq8)R11H8k?N|Ox=PoKeMTOe>&|A&D*-l{7QrA7X^R72)58zs;DtN!`t2mb!|7}9Nh z2Rx+%a^Nv%3yMN9e|cW%{ORsI*YpKsR-G-`WUsI_Ck6&|L2awLfc{n?FEjMaiwe!a zOVFaa$NQ^uWKPklEAuiBjMYex*a3r{x-nz{C+N~w>V5iHG*#L_-;(@w+jnh5_n*!5 z)1Yo5=E4vywlaiZ8u$jQyg^|%CBjh8RFph$P&r2R0A_w<>) zHhT=C;JPMk9X`h`{L$D9(=Nfe8CEVU%Z-Q)D-P(@V*ibMw zKWUGHjfb#}p^L%ulw(B-Tf$eQCCNQ8KCm4AYeA<1sQwDDa#d-iad7(nFLInfTUIj0|T;M7wbP7r;^ndIW>hfKDqe*1< zs(F-IDvikO@`TJNxIZSgS-5JAz^8tyM$=FL{9=MY^;!_|wQQZj(~Bch>J)P|Rq3e} zqLOGxCXjJFYw8ybHWF!srnDV0FRDev|T{SuYR^%5s;W?UNBJ8Iu$1KJE@nh+#AxvMZj0)T+wiRX z?c$ngJ7Si_Ng;5!%y|eo*bM#)kIxfn`E&2tUBJ=Qhg!aTWxA!(_Bj1@WYgAlWjKKq zzv58CtGkpUr43MbA(!0edWMqtyRA}ltCPN8$&6lV$pJ(eJ;!L&W>H2YViGRh-KtQ? z03M(W05ArSG2+H;3kG%dYw{%yk!QYFGjL&0Y!&%8w5nFzT_v^)%Wl}zzz=p-$)rK0 zs$oi5HtfB3LITE84WrvbwAk=3Sr2Ba798X0s5@|gQ9L~OjvsUB7ep4PRlKb=w+u?U zu5I9RSEw?leC+Buhmm6(Kqs7>I>~4_v<7l1T7L&CXE)HtYPrNu9Xg}vcaDW~W z@pR+eQZ$|u9@ywa+&+Io%?d#O<4Xo}7+?TdXez*4NzSL{KEnLsxWWh6&#{XIzvL$o z1-WI{uF{V`CZBvlefAjvM*r`VVzsKoO_XqK1=2;8l~rkFs5ZcX`CogfH=5*YJXWqo zD|Fg~q%&lXDk8E-q|_N#R>*6tBu_!VwM8x|k{9Si4yjbH;b*=N?MzA%&^G<3ZgzOF=Uv54{(EqnSu zrRS_#S}fG-c$M4FuO`#;Tz&Q;$G~$TN0%+?=zXCf-9*jfn9COUgle9lrq)D{{%rpg z;daP1(LYuq&*iOniqpXSIrHbryY{Fpyt9Wei&Q-A& z0905_1Sy3DJq)2b5`kii^igV{n@*))?NmF2Jp#uq#}R13Owdas|JBRZl_DR7)Y~hOf6&Z#dg)^Dfx{Mct64#|(tEhZ%}> z0DuBLB?3U9_Dy|wY}V|57)&(=i=pn(mW}l7hg+&!$R_%Bj<3B|E6rB`&rgxj*tQ{0 zWVeazGg`|HmAbehkhdbP4V7rxwBaaprt<*XgL+ozFbV+IQb?b2}!#V-uC15BeCK?vf$0ZY1-EkB5eq_bZHii`yoUL+M2pRCD$D zUI7Rz@QXs~WGJskSE22Cq{Ud`7q^SNMRaGoEYIDdbs3f;(+51JA|&SZ!NJT+6_>Ru zns)=_4R&lvH`H{2R9MFD7^h&>s>lBFFzwl;7RmBK)tMWuF{%p#M+>xZOR>3LYqQkV z!-PwH10bYV1PYC{Ehp;gw$;_OK+U~|{!=GtjCUgFa0dngFF5@SeHRX^07h2|8Sx#E z%H{h06KgI=R-OI@+so9xG4;R)zGIRH5jWFlfTWM%qQDY*7|FZYA)~MxP?+lG-RywH zq5**P)Bwsv#NeRrrPgIG=prxEWypNKva>TaIGBWKiZ?0e0DVC(=|6E|_wGx!Z-0d; zPY;;Jln_oUPjiIbnfIEz+d0*=l0%>1m}zAJC}kz-2dHjytw6irU`>eVB-XX z5h(f%WKkz;0PnC3LXk-f@+8|T!Hg913H>-AFA6~>n<_BI)$N9E3#9pAU9~9U!-Sja ziTwhMG1;(`2_|v}GG}sqS(E$o7M3}Hdv?5nfG9gC8Qo6$NE7|*y(!d9=Sp}yF$FTl zMB-8qE?1}#8l_^hP;LdG?qrwH)!hR8WsNO1F8yVjM5Qco5xGF;;!9^V%Zsccx6JB! zx?1BB#syAdNEi!6NkKlHYF9deG}uOO8E+F!?Z-hK7}*k8ivhnzzTL8=h5i@0wmUpn zORrRFC>}*|P4Y^=NX2uf7YBjtOP}4awLp;P?K>fkFV;js#~EGWOTtH8unN zXemr@@40nkg#It~Z1!PY0v>Y^a`|#!U*?taJ*~=y^Q+}pR9u*rYgjHGTL~&u-4Xq| z_Sz_!k%{bEL0f>t_T}>Oxn*S)^r=sOPq@mExqtk;LxwHpD?zt%><-@!dMJZg--CA; zBdB^P9CkA^?`N!;p5}L$#mF^4G;nvr5Gjo}7@-ozdZui)oU@=g*oV6uJWj(7z<7Wd z%EVg@7?1m?HJP3J$a(bUX}|_dU`Ao2oV?vb|E_C!+Pr5iC{qd7Y|_3zei_Zn=T}h(7i3qf}b< z=s)U3z@}XO61nB_ww}g(SG77OFSS-loE~Mp(&v5GXsLrnNCU)HD0lKEXI%CHR}g{M zY};@muLB%~9AXkeh?>x(_eh?$go_es|x~z%m&;}yyf42|I`#HJ~RT-S_o2Hir2dHmTsz-c+|BU z77lgnPpbTq)WQBADy?y4l`57f+uN$FJ2yh|E3I|vDownmbazS--&m2^9p2ZWVgwoi z=DmKlbkc?F75-I znqRK1Y7rFIXyy58YdV&B*AFnApswnGI_8Mk9usl-3C=)M? zsh?xz9M>slRd`@#p=<+)YZY`Vu(6Jj0p212c)-{29X=bMv-|llj7j?DlE2bc^3LML zP*r>hJOfNDNdX=`g*@2Uxbo^nz;Al>YZZs)F1@~D>GPfZ2L791K}y9=X|O;}AFaN+ zSK4-IKI@z_hhKg1#Q^O-BC zv)Z1mJa=`8*d#1icy?)AUWAaqGa|ATFa>oB!>Yhm$-GR3tQ9i0sgSd+0QvI`Otf*v zGYY{3L#7KAGW1kXddO1#VX>3xbTfkhg7Hy%2uY$4bBz-PqIc8ePdPbQG^;S*~d19 za33mGrangPbbuJM6)TXzhDr%_MQQ9dE_KC^Wac{JGN7I{E_WW3%HL zeM}!i2CSh4j8H=zlpPTJg~+C**!{(*0oM^5LO3YTVq2MukBoB6AT49wah=&j8Y|J* z$6y-0@U=)}{FxwYUveh@Os1aMc@|xA7V0>D+t>F;IPgn)$;0hZwW`!bDfl{{K=N|L zGymL1fmzzPVNS|4Wo?sCt>iVX95TK3&O1a4ngXZj?^|>UpTsZs$4E(=qQWLElsihl zs!=-lwE`=#SL^b{wW2^q5INK-0sTxK=#zdquUp9ifw0;MR;!@%!c3BU)AId6Qp@nXBFdLarLNPqY!6DT!n{?r>Y5dPk)H2a zFl@9o7_Ek+)oM+eou*d$dbm5Ccz5<=9{}_Xz;+R3PT&BDZ9&RDr)Dgf#FA0iz(1G6 zL_;^DsBt#CL5R9RyMnPww*A4hKvXc@f%!3P!o;wAJdqYmbmF+5XW9>Tvmtt?&PV1y z`qQ`H{_w*RB7L%L>Xt2AUO*Th`CElPz>o5M(>wUaXsOt%C@R%)p^aXiCv%Gn!w%6q z9l&c)3VdGzorf>Yd|q*BhpcH=4CF`YuNHUX>@z#)1hdaYT@N%gH;~>2x}JKhscAz) zLk;~L;cNUOPJ?T7?N#(YKY64@?h+<$KS4MToc+QLVX;pUzwh0(aeA@^N!OLwf02?@ zPC^)F1aX+jhXb0>W>IC^?JqDLC!A+6F#G|bY$KG_dRu@g5aKvgV?#=;bF3Ic%|x@d zC5LEWd2(47nJrqNaWCina;y0RptWwr2Fl_Jg^?5G=wwN$it3OrZ_>I2DW3c6q#@`P zcZl4D^rn=y#-H-lk~xhkr#vK7Dd?jJj|yYAnn+qCQze;OehIsmD;U|TC>}fXef0TjJk_# zlc|{oZ>L40sR+|=baZr4OX!#APl@ilUucdfz){`|y?nMHG~OJ+k)$LPHAk~_VP`b^ zV}}hZJ{XbULb4`*LcGZkP+@+}^r$g1XTX5WMljEQVrO!8C$uvq2f!b69_dpvfpkG# z8Gw)uX15jO+5Y~!QLMQgC8P3?(V6rOD)okjVy;T$t^&DH`lY}8g_M5u5&eFbzS#%D zh2lV*1iMsGH|oc@NE1bsZ*0)>}u&vckQPC=)~BA>05y}`8Jhmy++$|VKI#7@e0?~suCLt_$n38f7WCu zltLWSV$+zLOnOsu=7my2oh58;WKe*&F|4BFK_Sa3ip98`P}%4&goR_J4P5x~*<&;@ zxY)UmjJbg=!q+f_8Bds8(Sx1J0%)&gpl=??$JV- zT~sjIW2Ha5_F58q=pp)9_*i-O-S58ZXm6(Y)!JC#5v6MG!KQh}*R5%|W zxrTZUhu6{8?zdGH%O&{=bu8t3B$aAOwY0W$w2(V8Cmv6d+cPIP?do&y3XAOyQT}C2 zv-K9v>tF>?xHyl&o8SpW6)qGHnK@2sH+Q1n(??NSA(z%LFs3mN$ezSpr{0blMa!0`6;QH4R@6y&Hx&I+;Oa9CMfVHVk?=89rcTp=%t zKm}21jT9|Wg(60oOKgmURQ8lPS}Jds7l-L?)KVqI2;uo0LPbRlH9d3f@^qRwy1P#Z z?QSbSPm*6C3-w#Nd_aFH_9y8zP?eLw#4yzM=&$FeG-fnGXWSs!Dy4p{j=3)X~vFf8So$ zL0tk6pd<9mPk9E5o*$JLLVEPSg7aof!Ob?cce*~^D4qUPLD{RBUe*}I9B_)mYql3>s{}#*> z*cb0g^L65;&9e-zITl{fCbI~-b}#i>I^0p9coddc9&6`;aZvL_RuPPf3T-kzz{%`R zNoF(kc}CO8x$xv#a`jYz#q`8LvcwX}69O!z*IIksz4!HsxV^{kzA7`Tqr-9Fz;6#9 zuJz{44N?+b!PFh3d-$a?{A#WX-CsHfm}|VxSpP2U01#l+@$J>XO|e%B%^l ztCv@;2uVKrXdo?9sgbNiXwDZx*ZiS2^3a!UQ!@{1s?YXI>_XR6i_O+z_E_7fr|84g zJNNF0K*O6`zIOA*$aMNfGE5&UZ>LuNS*PMqN}rNTg{!U~Ab;qi-{6>*J+QM#0z%u~ z4M#>AI=0QW$%-}Jm4~K~kJbhHyX-*E$}`2{R{By!AvEWMT5=Urlh1Zd07{HCc_nQ3 zwa`l%uTAHe_(A{%MDX)eXqGR8ypg%n23YNhP6_MOXk&A|P9E4)7H01~nnao}ho7 zpl?r7b3>sSrKREj(kCh^=9HI1E&21eshKYv#Ew4Fr=9`T3&sZdQ;%gUJWi-qu2`^hjuVlc#r7OiS-Q%XQWP#EmI zFQE%anuU2!f(Dedirhta_at5&73)M(#Jcq4$w1mVeIWCnPg}%^ghABZqmqgVI4EU6 z!2wFnrc@*8JSS~NK4IJ0e}HQKps75IsCbD%R4`0c&@%PY?|o42D7*uxzI#yb#DiGb3Bq=VgsSE@RFmZR3bnJm;8+U=+Yc0>I7>Tg%q9K^WaI7F_)7 zjx&~oY8V+=*9T<5pc|+VI;+L7^xl4rPnnS0=@**R9zjyzB4rVKTve^8p$qD6AEx?` zHWE&`fBNiV&~yuq_Wc&=TkYf%+E|D8M#!j2rMoGA+$UFZq)wSQSP)K^TaGr`hZlr} z7D@Tco{SLXTTu@I`KITxvoi&HF{kY*QAT+ zthy*YBTs{rt(Bj^{BD!PAS5d*rD_>R;+FDcYSP{isjW<2*Yf&BPtGBMVu_lcjFQ$J zk1TVBhLZ+~U979`xmy_mB5#x$}qNP z!oJ}CFzE<*0oZF68v~cJmKslGa_xtoHTT%5Br~a0KRvZaNTo6l7J&>fFfaavb{12e znS0ifG;oRb_5H5DfBx|B%vODUIv?U(f2xLfwKZ*da<`};U9aEW33Oq7JX_|&vfU{S z*ef9Bq`#Zr3mFkx?1228!`ao`oY~(+9c`*=uIifKK~-R5lfJzJMhuo&LNmI|ihQX) z(Or<=QKyj=fIQIDQi@~MNA)g!jFzdZ?Y%bW6x@OQ0#5^@x0sLAV`?T5MENtME>?pq zP);PN7>XPNklKvVAk7_X%dkj7wtSI0=NSK>4F}K4tT%7$h=bGQ@DW!7eP2W*gVl?` zeS(>yv2Xdmy$_sfRa>RpEpAAww?->>RtCL8{j?l$q+4-%ZUfS2Y#$o>E2y;|q*{9D z$(@8-=b5)G!ZVA*i>9^IgcA;8GUy6za<@hz(fbq%qgW-=#4P2mnF~WagQR5sXeye& zac7;tD6QSGCi9!{r5&o~-O#kd&JN>4*v<~LDgM>6-YU&g1+ExgSmUbKMdXDgJfs!_>Nyaq^>{~SOm0?dWP~URloZ92$de<}I4(<7NCi3} zl0c}==kKW1%6(Erxar1UYUyCX{C3XKZ1|Hq{^*7fU5>N_I4cSGa;(atS1@Fa7K3<( zk{^~`At;*YVW36}HVQUM;LCn91j2%e)V05S4}MK9px1Gc$xt3P6iXx0BG;E+eo4PU z&Z4jQyiu%Dmijmfz6m0p|1>=|m&|;qmFSBsQF*B%a&cqhsYz6_m2PXPARj?z_oB)x zfnN49;Msth;gUY&*(#-|ID3ctV8=PP)w|2QBK1stheLL?^$ zj}zpHINerFxz?eL0*ZYNpZxRW4o>08*VlKG4Y~0Lrr!4)P)s3t5!BED>VW~x6Juc| z62o|zd>^ODd!Zhcbq-7k6$}WrXTqNG2_+0Pe@vb;Mx4V$I4;%CE+ZQ~e%;VO8XKRb z_GcDN|L5m-+(icZm4y)}a9m5A6#?Tbf1~fECUteiyJ|W+$dm?MFd%J``h!c}`v?6Z z{dD9&TGet1oL88ITEQ4@hAOfYBSY2B?R)7XJ=9-*6L0yes&((iQUMl>R-E77OFvA% z^fB{Bx$?~MDt(EerjAqrJSIi{Oe=vByB{=ge#R8Lp?UKLXEZzMpn)1`AC6xiE@d z;9lyi%oW!F6VrvLhI(;}Hc!+h@>i9(=bcl*)r!i_o)NFeU%#tfpcB{aSS78sjVuTQ zxJwY4+2@Niw40PBO@T@7Py)}I#w7)A3c0{g`+HTm#tLvSYi&fmt}?W&xWJxjqPviO zW-7I$pRVks-wvaQ!!7_Y0kmNOk~|>OAnQ~)oaB^nxZ*HrvKwpl9z%WRRhy-%R3UMR zCH~Tg%bSX+WnPIaRQG|#TNhFb^g6!W7i#tU=FA(^t08X&n<6I^Xm(ep({gV|LNE5n zEuF&!8>_5gbqP@Vq-&1s>gtmIl38J=3b5QgUKC{e#I0k#;9N+fFFtcwkO^wpZZUdP z*b#Uz-XIq{}R_Pc;wI3;HR2tv(2~s66`baebk>P~~6V%C*+jfRt`I zOz$~cDRWaJ&nm5~)IF564$Q5DWL(#%80 z+ssydaz{{8rY_e;RE4U-d{vn$h)8k-ZM@3)Ilv`KJ>VSuFU@X3uLl4d*=>ww9Rmin zSQvo|#{{@osvO_6@%x+GE@u0f8Vmje{N(9=$5jECpGJ%}VZdu9tG@;5tQFJQ$Ej&u zbZz>*wAvx+6*%shh{a4W{F9>{9j(SxPXNl9zTQ^zD~$-4q@)UdptI>@m7`7-Q`ORM zCQPY-$SQX?8!->RrwznsYKnjs(H;>h8GvRlCL7Gu{c}#BsunO*)sSp_bYx`o!yG=d zVJ-dO)eS`rkY+xpGna!bWk8{hCR|oSpt(wid|Hb9@^?M1PFudM4?v9rHkn0iOs!7t zqTjURz!=VpDIm^rojMA6Guu>U^^b9gF$p05VMc#r)ub&@sya03a1Q3r)|c2A3vFE( z-XW_zGs2%Sip+Xrk|G$J;|6|t+$Jb(u@|bA%GqJa6ti_r0nk7(g7AnDWfM~JePqkzoI{TJe486T~^!LLQs3-F$@+MHRm31K@xfzU=2(kTKZ$97RGV_6s z{JF~DIprJ~uXrZ?aI;KCVBULKlinvxaW$ru^@c)^xLM@Rr?)o90>&nl&A6vuZWB!A zn>TfIA<|ZA<8a-;x0~n=>euz)#0WY_S3tw3-^g+!GBMkHg!TeZl(n-0>Wd`(e2nb* z=9_*8l2~q`R3E%cQ_q{s2`ET6(%XLBEwNffLZ5wqjoAl!ObWGBNcG*>bo2dpvH>#zR~L@Zt&OdAIxJgrVx z+FH1GZ_;^5bMvm-Zu=2x^#!L-3hl2fR+^*eZE=k34@qn`QDF1B(b2kh%K92~gNG`h z86hm(+}`%5&tmjn=5>&p`f61D`$|PdlOTUhs`XDN3+T7c?f`@61Y{1&;H8Hkr37-t zC``=d=B6hDk5^W@VQ$vc!QzZhuSU!59I%J@B{_wxp-~8>C!(TqS!OO9$|*V3Qn?c1 znJ&@R|Gcz&_UbymPA9BAXQVh}t5KJ$Vi{i*GVdO$V_YS}rjx7Z zh=f;^X(EQGq3WsL(8?9X0*#7SID2N^Et3x|uP6CsQkZe7)~7GH_xmB{E%6pv+D`9k zqxxQa@kM%pu5R(5Q)n;<%j%9nbefav%C0+#@KrQ4t-!;UVF!_n9&PIgpd1QJi2 zj?D#fctU?_buh@7P)@`Xj^`MB3=?$ZY?~naulTYb+4vm6*I|$wg}oH`{VvG774_RI zrKe8KX6vcU5F0ok0$lZ5QSb^LqnO@zQ2R1VSCi}LY4fNRowUE*HjIAvLo?LCmv!sal+TPK*9nD&|wi$d)si{9(*03`LRW|v+vNrim=5+$X zje~xF+55gGa&zqsR}Bx7u0n|u(j?Dhu~QXMd*rneHwZa-6*zMDYAyZMYoVaXAuE%+ zfJ)T_vH0t-wz;We>{iw={d5+sFdO{+MsO|{0?W(QY)p=x9M=wQ0u(8=7;xkN+-$lY zWr~#J5!=|Z!ZNe8B3O{jEhP5Z!T3Pfj{OrD9nHEBYCL3zDK$@SFR(&+hMf(OW%R`d zlgaDI7JAFB!-sby2~RE)8I{tYNyOKAgi3)x%stY=cQyc9yR^L0bfHgIEc45Xz9B__ zOS%v&f)vIBF_D^I%T<%a3n$h#NTLfT!x)XIcW!uTo7i6L;(<80)oXOg%DQW$PH}Bd znPNjCk$JXsM>Ei?hxwmc5498t0ORvb@=Ds=mMl)x8-#=X3Yi!K?*NW= z3B<|Hd9CNo_bLNoTmM38TA|dfC{g+@i_zbH5YDgY&})lTW>p!P)u9(%MW1@63GNI( ze%}{lhjiM#*TjL{Oc>sM&3&8y{$NxbP}Dv9-`y$t5tSljPMbnHvb&3D7%?J1Edtz& zX@X!Facj2cgihSC&EUd&t*bT!Z!;C;cp$1XkYf3B5< zpR>>TK$JYewqW=G}m-|~=H@3Go4GldW+I~fvv*?w+Mg*K#5EZ_DJ$KC- z>3Qe8{mYdlwX97Nm1%W+D(|BRE1e4GC{Xk&_GF)<@u@LYq;VxZO zv!AQf2+O*P$wPEYXT67fPYY3)93L@g#`tsfAJPXcg7!b4cTlG9{} zt(@l<+3ljzo$hAnO)O}kk2euhtfYqU=&L&8^lM}>{Sojb2{{T6q_{l()*EiPu&9{& zz+kC2T8&Ma$5iHs+AS~iKu93XSC>I&2A#{BOaVs+)Zpw;1A6!t2Cm48T`q;9#QAt3 zm_t4>8G$;#W-R;6wfmTx0$FITvya|A=TycE7=rA|k9WAvOz6X)HJCt+x?{?eB|S(^ z6$E+;M#b({NL~u%E^%cuN@xVU-_#p zMRIp+SFNRMBq(yp3x_+yHToh+odk&0fbJF^X-bp%oPHcOU)it|5-i;OzAU|D?y`JW z_8+Sq)GWY`fmsodItCl#RcNYPyiZps1NrJIbwR<>BAr*}QI?Rr=2#0+e*dky#vXIV zO{B-*ZLU^B0aIQSJ>L&S<$QH9`MR`paY;!X{n2wklJ#>_NU&Q-D>QM!NCOcW(pROK znO2-!n+p}_WiV+p-p7Soz?drdh&jrS$%L}Q?`Yj%&vND}H;uv8iC7XVyi=IE;%jG$ z%f@$#jG!*P?yIke6Zswt|Ngg)RM0Oz*r&7$JOw_HQUPP^g(|MTz$35){B~X_tQl#S z7W$Iz!Z+jgDn-4l>i(3W$R$Ygodxs?avR;xBk$5KaxuL!m`agIYb!k)BWC)ytkh?< zjOhUY;E~~)W5uXBrn)+wf5D?{lKzWc4xnAMvZmee~sUpDtfk|MD-HGc~Yd=LmMRfLaeSOvBSaMQafgIBaJ^ zhf5|MoOHvaJJ>t)lY|~eVRL1jD0_P#6kzuX0W-M>IxFzWdtxbGk+0kd@M}|{UGR3) zR%y&rx?TTFiPd}u%z6P`F#xbRYL5-Yv-rM%;)Q7G>Ijqz%IC*RP0=!WnLHGsdn=&5 z+_0lcj&+M!ov>9^7%4Dy3-Th~z}c7L+n<2;?agIWTuJWxN+XsPLC1_+ zoiJ&N^Pa7>l&XNHUlXDed3n7~jt6EkpnH3C{sXQtzbdgvE>dM@wlBl+Fk zt(mW>o$`V{huS%mIT$oW$~6+ZNL>~dISo}&y;omV4MAn@MC4M_904e5m0-mJ=XSS% zM$k3DV{!Z!+}!`m?qv%WtaXL{5$-d4R+#kmN6foXRF$77AOxR`X$xs52nc!p|Lq<9 zT9sI<giQN1&Pb1)d?*sv0th&2tZhiD>X<({z7@Xt*1b)RZ#vLINbIQHz2bl zT!m9B&Mzy|BwgwLLcM|O`7+RKln=HMPDiEm@i; z&p)SHQnw|@lW~gHl6sNZCg#}m@{YL`_UW~vk(^u1+eXO)-# zAry+!o2#k~VQrnRa-haksg?WXQm2O_u2UNYGPhJ@)g)8~zRZKbth8@<$SVY%5l6Dw z*4O138uap|Qp(-lW~bMvBenrsPIKsV3ji0|4!G-AIY=mP0TW*ggM8HhnnH$=A;!?J z0tV27K$3mUq?;z)1-k_F2C(jS;N-{sU}_%|6M^g)@0bsTjXce2)AA#)2Fl1k+ZXq%`{dGYb4BV)+MyZw~bpZC% zV|5lg^)g;VrKLhzBMp@{x>v!tfwXd<_T-bH3zDk(Em7IG-%e#Xx3R|v!U?J;ko^4U z^Unv`+xORVmL@p`U;pUlaCT^K? zX5%BX$jE)oBh}Tjs;Zs?R!M$^!2X%srz};tRpeBxGe-84rEmQD$`!TyEb^W4F~}YO=?!R0vg0fs7mSxI*+op;6W%H;W;uJ_Z%+ zyJ(}k%Vx9ncUZgfUEU5CB#_wtyf=%H@j&z(20f~As55G5o-=7ZP{eKpYrmHfGzMP` z(b$h;XqIgV>@?(=5MHrOAZ+z`pcICufN|Fhs|GWWg7=?6ijUpyT<~oedxdE+;3YR` znC8-%f`kD4N0N7EG5 zMtDMQ8&}AixpnJTUU#3%rVCdLtX&I&JyX}OU$LSEB#8=mW&mp}@|vS%3a>I0U081K zFW{TS1ziig=BhHKPf=F&R+Fq*PxWPPr=JL4(J2K&cPX*ZA1xh3RSt%jv`nNT^P1yt zI$WSCtwx1Jo{$XkihU`I)FM;_3RQa!^$w6vs<&+{Dn55xW$kdWT+7SnD%G2+!__xb zSHwW%rJ&OyF!GHFjzw?yr$!u5?*Cqo-$9BU+}bsegeSLZ-OAypb@Ba zu9!@0Fglbk6$=Riq*4Od!vg)G*Uw<7*?I6N1mf8En?IpubT}J`!?t7X1_SY&?Z)Sr zB4K)jdki-j_Bj^^PJq?G>(DbVM-$+w9_rnCXe9XEqzhc7A zKvWSXEjU5F5QRR>8#Zv)uO}m$Hw(9I<8ItYucIn5FaG_)3$5|EsIs!9S>KQjK(^#- zttCymc#8|PW!)`x`fIO`&m)=+P>klZad;f^IRLLX1~yOT^*%~RmJX!-5b9Fr7HPx@%mcjMa5xeLj- zT_*Noy1L9W=8`hcVB;su^TCmD@xWuSF&oqC1p^Sp!vVXP%gu6`GyE*j;Ns!HLj`+} z1w`gwjn+=kf(&O>@S;o@I355(=m*XOeig_>PP9mD)R}b?XD&EW|12|Bl*q%fqVk#o zXLG$asHtnFe_Q97St&y-REDdI&wF2D!L6qE8gh zD^Vyt-*bheZ(hXsTBl5>t;z$!c56r^A&hMWAUO{KL6~6MWKf){$LlHWk8WJ$1b+ZU2m zBaC3&B;+r_3IJx4&^mDWvLAW)90LusLU0P<+(KoDef|rshi#WLcxF83u=#ApiIYW;+rpzmrm<__Bxl`Slt11t5 z$y+Z4>Rl)Omvbg^8j1zSk*0rtPtUtOJyd;lb?lzOii+4ROT*#nn~OSk(pP7TdVd)luJ|arq>;{v;EFu(q8gFe@T6ig*iR61Lcke&gLZtlUfy=h@ z`}D;+P?|K-o^%%_kqM**B5*uL_?*VRBEz=0HsBT|#121Qho$MJoq+U#!T{hnQBxFz zUs?SfcanLld)oO)`FVk|MC#g{6mlVq3(M~^+gh!5YdhsJYDzU0O_{@BsMH&E)mOBN z6jDAg&dNcITQSA#@30s(fLFhdUeGA9*~NT|bx*UkUKx;?92)7%7F(juDV}p4-WuHO z?CnAOjx}tiw!_-+>`tG_k7vU+xI19#5LbRTK&KGuv4xtQIZWaM1Gf$gd^R*he>MA- zZ@wY(=ih^>=*OU>)jkxG_ju<=`9`BSJni;o7}RbR`!fe)jNo2kqTn8@9U>O|tGX;! z(Znflqc5Ou8Cr>>ADv#!v9M)(HD?if z=Z=2fNaaQa#~AEs-NXN=zWp(5~%7$|bMOI

}ahh3=>C#6Th@6CgL%`;ne;A$SxVnz;aK4{YV( z-bv4}*91)rt`(bGjLqk<)dQr-hQ$qlHvoTg#_9p0VDM(aJz}sf=q=!uV1mjCkGH0C zTYz0`_;nD6!Y>@lPFQBLoWsig%CS%Y|K*9P3>$V%!-CR2(9OXyz50%hOPYnc0yj@@ z5EkZ1x<254@P$ND3KF678_g&#N*L+OG z^tU7J0)25n4853qHMc`xDe=pIgs{vii~&U-uZHWOuP!b=k7(bE{5K+$NPB>E65Y~JLum> zHf&xU;;R(g+A9t=JZUI0|B54aH0UL|YHMI2knHLKB0Ong&mwHZ1uegAUd`zjXiG!(czsO$rdWM0?OfXz&RX) zD%OLO9-H*!q~|A;r_a1&8V-=SC!7d@-{V_z9r*03f$w zKq(MGi@wnf!g3;aO!NDX8|wkV)4D`o)uJ2Z%eiz{l zh=AiJp)5A{8cWZpdBmwPR4w%jv|7GfKOihAU&vCf0X<5o%X3&?GVB6T1pCnSWm30SS*Z$mkGL$&)_|>boxXI` zCD8Dl!!ozI!Q!_hiAo>rv%|MrdL(XBgE`NVT&XXa?8JXyP~tV#oAWJ=WVDser=Do5 zxjgd~rGRN;FPy~J#!e!RmW^{Mq_YY3JizX)X5)kyCQ{{a4POa&+k2Uf#+B$XGq z_!LZk3&%_+;Bo<7{V+A!L07lE*Q&G#+WFQ8$d|NoO)@zjX{H(xkVd8@lXWI2Xh`ki zz);%qM2)3ydMPE9@d^gptYjU10Y!GvtFLTonqDGNamy*ydMIdcA{^z$uuxPfI4264 zR+VZi`EvrOomFy?K_Si86QMxw5~u_M1y2Bx+CDmn;9W2ha(#_TY_8Kw47DMHD`m18lLIN|sWfbIon^PfVo1hSpFmXKJRoJw(3;zKsp9v)_k%OeWyp;Cooy zCu660S*HkTYwiI24_9^mv17;nf~1)$>ioel z+u0&dY>o0Wnd#_qq6GwiRRtg_pPME^?RE#ByZ>3dQunf^c$)J09clPhct0n_@QyL%6Xr%Q$rc zVFKo`s$2zf*@lUqEV#8o+v+3JfS_DFa>XL!Teevj4k}#Ykv;QVbeyA53niLfun+IU>^=KbOL>Mf|DNuf zuMaEzA-jee8P0q=-M>g5Rr$*7TIwGI+xp3G=*cmzVdtxt6iO@>f$!Y=)>>!Yw8aBD z+QEw+SwaUSPP<6tb5L)cJfSe!WT$`1@Jijy`R!QRZJFc;ATn|u<47m~@_vy0ES>?0ij*#0uD{KVqJBSi(y%x8Hyfid)lw40w<$})1HKbOpthBE@Je6-Sh^Jh>$oL2I z=y|;gk7(%p84l{(j!)WOPp40Wmakb_!YFC)+!Z5#(#*Q2RtSG`^ji9b*9~?k2r2?l z85dDJuE)__ZxrbS`kJ`$o3(#|OI08>k8bItukY^WSkAq3g-cZ|H_tsV_o*UPnKq=Yp!XN6%k*Ws2&EqY zDeWie;Rx4q@f&+U^1vqYtiNwV)s(}lTw<$TmUsSLi(vB73$UZt$8LlIOmbihpx**H z_M|>oD5xWPFso+R*3e?G=iH7oNt^(zHGExFj$NpnWf?!y*`v<>L;?ZaHxCZh|AGFH zETj+Ysxl_K3-~6nKix1_QdCwbs*(hPd2)L@Z-7TkDAFs$uJAP@BM$56#&(oq-ZIlk zq)J7lZQZR4gjU(~!{->Nclw{8pD?alm!iLS+p5l8?9-H~>?8BU;__I9B&DmatyB@| zZ-CYOdU96(?p`3K?N<#RTH}=l)rC85oi&4_zVr`!^OZ$1*QQ6-GsN!fa5n3x3=B^* z#u4$cyqN{Y!C#CA=!}0Y2V1aA#g0j#AtJz)8|N#4`F8<=g3&He1|(XNA+g5(zP>{9 z@Ww8MTimy0nw=OFil}47p~*srJicUlQgiYn@+jTNLBOaMuxws!<-TjWNXJ!stI4MP z=&pT@L?&q1d)~F_^!d%rMBCIv-P5zY8;Uq`|`ag13*9Df6X{ zS?3)bxV(%0eHT&n(7yrPuDDOEQwceX(+a(U3o#jAr7z3qMN}t!F4;zJnk0nk<;~ec z14Na;u!@0qEp)Tk!RM??0YvRMB0Vr(AA?0fcRoI(k(E+MeOP@~AQt`!PgWn6N+KHF zKB6jbD#S)cyz9+T9g>@Cqzu ziMO`wB?u>>nb9#fW)qtAn~)RVm(Mkq1~#V}g_igNYX20XQjXqnSyTjFm)1X@ExCn0 z`FMlW<&;Ej`Sko9pWIO@vO8o|Pnl+rX8G&pSHfF3Z#lr%23t z;ppxePL5*e(;>1sL{dItH4-z1g4+?FUNMwJ=ap=0Ifs$e%_VtRdmSUz@GR zLRly}VRqp(5SrglU5jn~yKzWi&*D8G2Jb7)?a3%g%Dl%gsNN4gAgeR{aP-chM&l2uZ_>)$s3 z5-8{RIfesoUy=u^M?&w$N4M2ayLPopWV1_SUmg<<4)S!xi&riyHEsTseni4IejKU5H)I;fw#X`g1KcUAp zF(hNm1AG~+>cl$}iNJ`x7Os>Y@t zOwPK(QGvkgw6F=?%}<%G(VF59g`q1({qCRtd<@;kr9(qr`^@cKP!kvQUNFx?3Y3Z} z$GW34`6{hw_|Q_*$+wX^hYSvAO~(EjN+l|4m&wHRJMHcHk3YU@6?Ol>%0Y5JJy$t$ z-MK#Sp3>m%`xeaOn)aPISR}RE#NG>^SVKztD>C6cfO_yXz;F$3LK&4$cY+hUr2Pb( z1T4h90e`Llzf|d7;Loygx%<^AniDyZR3DOQ@cPS5tE~I54ku+!G^0WVwkNL z31k{RPsHWI_FvZ4wzW;>Ypdn!jiPj$o;-kp*`_X8L3IFL68kE=cXX@Uwk_g9e}2~5 z#CC0J5tOI^QL)yGv*xZ>Cp+>XOv5HTwor8RvAb_@cH@uEtKWt zY|asSsCC!oB_$%QhF7`k+R2}H5s75x{fBFC+CF^AjR*KQ(3z*2#b&cGcJ~+Op8x6b z5K!DzKasf%*0coH^aYL+jE@LH7axP1LMqKJK*utn3$7z1>_3Xvkr5s44W21Bz{l`} z!>GOCQo@Vi(-}ZaF^4^M9Q@u|PPCmf`Q%N0>ZQ!SY1FOL6ncGq5QImqP{ilccU0z& z^jTu&?ve6gUG;)KaM>NBfOxu-x-_$dtcC;BRycL)CB?h$dVY!ACOqe*doPbrN)Ti& zzxtUER>LHSXvK+#_vUk)EtScyN!6PUsH|~RP+0?T!lH6jutZy>EiL`SQfH#3LI+{C zA`mRm(JRwWB{#onEp9Hc@f0B_4aNqlrgQSz7d97&C3dS=;Hn;sL&jKj>Nr4AP{mOJ zfpsYiXPh2Z!{0qIIDr8qeb%^min+OzhPj3?uAwquZkQ{wGU+!SLAZE7$tl@GdOnn= z50Yqgcbq>E63dM@CB*EkpK3MgbYJ_g;bn6%YXx7XmIEr{dN- z*ZK22JE}p84R}Eu>MmVCjfy8|Hx?{~E6p*dM1{X1-XbB0E46-X8P=QhSt$^zK(GpJz z&ukW^I5Q#HTD`Tq`_DKPpE8=%lvjYr1in1^9emT99J0RKt${7*GM?1dtuiO6U`Vo? zKBDN8=9Fi0VURn$(0+c5s_WnlY`Ka*cT4jsRm;*I2(EYoH@0iZbV=8pevU-K^6qtZ z{!Et?b;+llTICd&biA}_JL!`xN#o^CNotls$^{wmsjO6FU;&G^#$X^G?L;zJ_laFT zJ~Xr3s}3CGouvPLwj3fX%5&ti^=tldubXd55*0uB%RUfg3fyYUjdTS?k|=O^Azf$g zHIAucttlBaZb6ud_!>T+2so|@%Sk3}A$<`vpWYxutLeoWbd2sgJsN&p@Nc`VjorL| zOA#@I=~(Z9eY6L5w6Lk^lr}Z-T$p|^g6t76 zr0c8b4GNyxAnFnsbrkV2jNbw0|2T5&-7C|DcA0bAqcb8b&4g2%r>6mBlzH5W0}-%U zCUAkz0wfrdXX4l}jcIaLL3?vl1wM8rZA#2k;OB}xH||70=5R$ZuqusIj#v~$+K{T! z)G^?pk|gfFR+%TItwG~e*R>r&Y4m#rM`|iO?<7I+cYQWmjTC5&5g6|k~C53_=RbCmO!Ja%pB;r&`NJ? zh5%#|YNC&mo5a1Rb{F!%Y`a(AG``hL-A-SArj8FYaQ^72{)DuOfY~4`pOwuV1o?L_#X@mw%bq|WZWqJYp^ON#x#lzeB63_iD!TQ z`8j<2dwP4HgrQ0bUEm!?3FEOKl- zGwt)%&*^!sU(&Pbg)pOkZ~G~NRg^t<`Hjm8gpie&ZQ8sd4<0!aRN=*|ls<<3Nr8O4 z9F%^z<_tu&@O)Siut-MQ-rrI9Tk!xIyxoWQ1l|z}oy1^|6!a}EA`buj^CQ@r?(XPt zm#7en8 z9f+HC8Nj$IR4WTDErAqX5@oC?Qqb=fS!zoa<+9=$BKgv#V|ajewl1pRG)4{grtHko?XC~mbXJcv;pbfvw&H<>S z4mg-qg~i%c4!J8wm7{X!)<%{EwPTJgPvZe-!nys?87(a3#<%w8fD7lRuYYtlq&@RN zOT3^ZFAqyo0S3dxY+(*S_Z14}xLSiH822x+ZpN*esrp`?&sI*cDEMG1;bYCYcbmCwcs#Pic zX#?4?`cva^h(E@@M%^cNl-jvEBbDw=HEDxOLl}0~wKQb7)S(!CcsW<27cM&#LJu^c zRc*)U7xQjuZ(l@zo}4bE*uXUjK{bc>1Q4YN+k{#*A351s83Civ0t7G)`DdL-B^r0` zwql;%z{}fq^wFU|-<=D2ySV7_?=}oN?xsI~+9R}>1&#+02P$7CNXui)#a9xu63AOy z8O{&9y5YYo7Grd-1mfiI66fLOPof(*?ES9*d5I@}{P8}_pf{u&y&}wq)U|tc9~3X7 z(n9^zJ-r--iVAKVtGc_pJGu{jMysC>OI%}GxoQnnAF+#wTx)X;&^}f*9ZS>aiGd#+ zQOTwvNxIahsi#~{Hq=Kl(&)d|@pJPq;fE`ecs#r;$Q`(ID4B^`HlCe1hNar{_DxvD zsPqkw&B2UqKL>UXkHuXPri<5*cLR}cs1;X1&TxCqgly=_-gXxVjXL|+D zDk^FO7NBQos0-jov`!{1HZQt!JkKiW**{bJsveF2QfA(&qt2PZAlWQQF4IVL)%0`S z-M4miHPbV;MqZ+4k)}rskqKkdVP%W8HCV5^C$uCSW~sKlvp+}X6sK=^Vu9(pd)ENv zkx5vK`1b&5_Yx3>5z1va^2Wlz%TX~m1ZE4w;51BtdeyS<#8RU8v<{PXc%dC}MIs4; zOa){pxc)lQ1N>I>4c8kjOjkLDHeuFl$WK3)i%YM#p=EF7NG*DfPETnJV%GC@!jwuM z&mwdeB~jIl(qvvMH))E%>9O;@0$a9SgtmO~#ogfBA6(nfaY70Wp4odx;{YMNd4l$7 zUC+ueAGV;bJD!cUndLe1WQDu38GT4!YMItTe^;-qwS%~^Rv%Z9wBX^!y|2k;`# zlwfBl75$_(H|vdtK=c*LnV&5vk$Vd~67*y1vNoWzot8&xHobGeg&PW)>mOZIF!tEe zWWLTIDE;{;_!k4yGPt5@W(XY;1T#4Ho{FtvEG__AOY|4pE9 zCReq{HsYcS4iB;d0ViIq*NwiQ6&FI5#St7_v`_EOPirhwm8nW<$MS4{Wf6fvuK~UK z%{M1dn7;dl(WB4FWd)|Ww+ujuhTpSuqUK$F_v$WzM#1UdIAErqCHO)Pv~o=8M) z)IC*4FZ*{DIv+SIUHQja%(hc}z9`qy(2(R!YG{s@HknK1PO&CQAs|_iRh{TzMuOYl z-IFD-nE2@{&Mhe$yknt-GMI(7b&t%UJ&^kFIYtxuHhNK_(Su0MjA;x)d@6!k1&&Jb zoQqQ##+BG`hZgwsp@9frk>UIX5}IKgG0tiJOECA(Vq0G( zDdDEI)GS?k%lh@}11w`@1;;G%`Bde|JL!IUd0X4-^^Jr;$PuUsf%YzzkX786sY1&! z`1c&X;(L30@0ZJpQ&yZ9$A${VnA_$VFY0^Nc2gP^cg&W-Br;fT$Wg!$FQ8apH^n2p z2j<%)8C3GPm77ss3vBv4L-%XxN2{r%BnqUnqcy2pmMKn#^oDppAy$@g<6HY6=ri#$ zR-c_;Hh6e}1>4q)wGYn%(b-_m=N*XXV$+zhvLBwrjBT*!hY|Y`K|VX~wZWi4861P& zn0alO(6IyQ5#HR%7{*}=ge&kR+}=&d^O^`S(Wyb7c#8Mk-i$n8CzZYO{r87a1^xJ% z)>fsV=Z02^g$k}5upmMr$~tKP<4UcE`f;}SvGPuY-@m=Y*5g1>!K73 zjgfNVv!o_&VbkL8N#dc04&WtJ^P8G(l!&veN9IDmggaxeVVA0YT#3lUub9}RdoK`R zdj;l|+sV-wv^-enO9>C z*90WvY9M;7O@Zaayv66tFytcM3;Z7poWJzbHF|9dVfzAPQB7sK6Zm={Bdv(Mx!Wm)8p4eEk@6jU2)wD`(I2# zjys(G_$`b8W)ZJpgtNz`!dONHh73xu3BX9ARG4TXGZ7qw(AYzBpfo!IC47zA!S})b zJGPc0_J@ghN0%Hs-%9j4osCMn2{xD2#pbZ+BdOPUwT^BZ;(3fEKABhMErBT~OR>0I zQi!HC7)$hp(zKK(B2tZ}23AJ#l8Z1i`SU;icnbFoH}>=#1~D3E9_$C4D}VHsaheBp zolDy&t&-b$W3QP^Z>?>rZA0_(m&|r#%^iwPRg_q2Ev3fIg|e(HMU^5a`>)x?8e^WZ zG2pV+XfkBk?lA37&7cGoE*L~atCNm@&1h00oAp;PK>>Z7mY)yBJ^PV`rD zgVxflHyK((kyT-6$H8sYZhZSdwg8$(nQPB2Eb6{}c^d3|5IVO!I1$uO50ZIfqo@m=^B>@*#j@9H!uO$iH2P1 z;U=wH+ZfylYq=go`{{`%JjvC?%6vs}wJoT~8wjuf%TV8$CHYk&l{!XWexgzUWj^2W z&z9Zz$;ntF_3_IPFBywwjY)-z$~U(STx|YJiKe(vTc;~6rOz&2Tun!PMM_Ves!{_C zK&M{HpFeL>CSM0L>)m6=xj>M3sr{S7c`&wHnEx2l3f4pZ2Gx=)Rx05e6P-oeGmA&g z@f0^+ll`p%+94W#okLsbImzfE?R~Z$cF*b?+H5cz%q^HXN1RufOXY}jV51Y79+G)# zoGhu5=dVjch4f7?cIbL{&tgIHHDy!qnA9Iy(8kxOIqeI=ei>2Q+j~=YcMZKP(1d=z zd=w2?J!9I;aEW+nvmr{$O6ONeoG!bNm@n-;y}w9cwNj1mmO&ZqPWtjwHJI|C`1IFf znhzgXVaIK8_r}|fHiKL+p5tn{#E_6VP$g)L**Po^rY(Y%EpFYp@k{qV)SEpRcPK%B zr*%{C)xwJ^*x~RKk;so|Rp)yhgar1`9F_D)UFDg$=bY-Zo#|J0Y?;LdDA=Usb*t2E z%X@LAHFkASPrTedx8sxM-d1uVeE^qSucOPM(6Nd5ODB>_$2@pTG2dhag0|cC@{iKd zC#nP%P^7y*o44}gyIn9`A}Tn4X*Za7%#`x-aP2VW#4L~oBxZpc8I^!X#oa;th#20L z825pqItS0ZCP1H%aKhjCA6(m3Aafyscl9n<9?f5V34ZM(^wCc~uTy)}6%wm?W|=-$ zR3*rvUuuK7|1dG{%P$|qs|j|8LIp&Zg6?GiEM~| z3A~b@qZ2JfmF1Ontz<@ev&p8+&6B5^8x5JpmgSe*i8lf(W1&4uzxGduas(zL*Rk>3 zobvv|i{f30ho?iZh;_2gGoI9!B_ z1qAH6CSp@l*9?U|@~PB(h>XdD#`Z0t9aNk@+SfHeQ^3FZp2y3E4l zo~~B4?29PS~ARpud%;O@hnn7w~vZ|_-f=r}Kg3|%m0&m_%D#xWa41IB^Zzh#1zo|gl3 z8+nBM$s(~{lqFDK1n#PP&>?!90liG;p6}}F6z1e-^D6~5r$g*3QJ-`AigI_ZCO zO#c9W5o#QRpTO0&b-lf(t_hURYde<%1W(27S<`2Ne!T?Z?hdq|vb3_Ifh-3~HwgLP zF7uba@jKzqz~KdO=RjgO?-PvjG5ijgW?BmO%?@TLmY&2izpI=)n4OVcCsA|75A2J_ zMls+W7QoelB39vkJSQT}t*~=3PPEYRRHw3S(+n24_3M_^-lPpJ2~ip~uWNayA^IgY z*azAbsoXHvYJZ!4AH!&@=y>NZAsdbkFbss)9s#R6cm}MlUdQupIkJ~`l%^l8gbbMP zJN}OuOaJd=E`H3S^WSa$L(45HW1UW?Yxph@sCpwGCP&9ZQAyntY=o!Ae5jZKJ<-6^ zK-DWY#T*NEVwJDiBm7a^s3fXin&H+~!dEA%Ua{yKmmU6RGvq-uO;Cg``uFvLz~(^U zJAh*rp&@$Rc$d^ulthZ9T$A7ZnIOxP$uFYP9hsuP1XK>HgAc3Nx{Udn3U&5djg9LY z8`1VJzubwO^czbek(;3OZ|;&ToiY z=_7S7{?nK}sn;S&O%eH>4RF>yk49CX*$yiS9?Y(PPj9 z9V>$nQC^?P(r)eqYrKF=&%?ER<=UPFSurc6~Pi1pDr+QVFiFB zif0YfD~NyXY;ApCuPfDNOr@506I=jmyEgVMjLdS zvUi+?Zj*Za$*nWfC3Zp5gp~(^V8U@14Huqq=_=MzwL*cwJG@=BZ@3o^r7F-O4Xy}! znQ|4jHn`f19h?nBGNR&4`k>py#Ec{5^DFBgL)tu5oDxhYBwTCdxW+~m>TKFe_wnb> zMZ9_QX126Ehc?mk(DhPro^8$1(Eu4PSva{}LqD3~7&|6tb{aay3=jn$eRKj_vE`7T zNW~ugl-=Ddg@Pa6FrYqX=w93i8;n|)0gr>dRFf`(3YNr{ucser{(CdM;v*PyM>)}l zvRhk8bKjOhlgufS`dj+_Hx#Qp`CfIc+Et>7k=xOiw0zs^^ap4jy{Q0f^1%RF1A8>2d8wp;t4d=F z-w8-fu)oRRc=nkM8#QHR=nYgxKPm4LXO-Fk`3McB6t$*pQM)8X5MJ1>`)i}LVR4@z zUEa5-hWLB??B?dG*Iljj4$#^CCJP|iWtn(yI9Z@GHyDii=ICqB`Xl~J#K8_E5e}ZY z8Em3~>)m|#{L+u^^9by+;wOLD(3iTO{_6EIC{6jFMr_bHA7CM$AaVpx!#t~5 zkRqF~s)JjG&^sQ@FZrgkmX7ir&{LF2VolQqKK=| z3Mzy;HAVbK@do(iSS1W^S&DI1;~*CoX2xD|78=me zL^Xlo4THEgKc9(Y<_^j178k%|`6s~3bMR^Dh}V`KsyUAH6~P)gAD0dneldlk*Ar$J`T zAG-*EhjsHJ(o{juq9zUT?Oi=RCVEyFhyXkahtiYpH)Z#jF;Tv*{;7tBjrH~QAiOV{ zkWFoF)ERUwtGbXt+<$s+0S_7}x$AG)&OJi^{A?{{HdBSC|21#bXQy*TS@Plwzw823 zmzKdYj2^z<*thr?nq%BG9>FJ4WpRNygPVVIe`HSL%h#Zb_`{&>*?yvx$L0 zTikR)1tgY8BupumGt+2EoKK=e_8%Y+d8baTzjR4;f&L85pmzisg>qSb2GFMJ9b6t~ z@XVP#?INYZZ^!EffpVQqk4+tyC(r7!iQSqEDvzJ>R?1k9+%ejw$kAl-J(SH+pA@;y z$2UtngB>!jy|+W}*R^${t^fY_{{WLX-rI{>E77j1>#C}X&pPNcdTf9t(4R#>F;ovG z?VQmHpONA$j>FB7`^@=9zve@uGEbGP_HU8{cdXv0e&3|@LdxJL*6V#^+szWIP*>lX zlC3T()_I|hl=HtJDx{;*Aw#}+4ekcBX1bV@tpY?q6JRT#IETF*4wdj5w#&oW98*95 zOm_Tzf?Oxz`mklXHnjSk(4htsfAg_9R}(}Og1~b6i4l+J(z@H$);k=BDGahO3&A- zy-K6f|1kZp7hWQT9jk)SQ@q~B(yo7FZ#JdFap~Flg}t{eN`ZMA`}zkb1H#l2?|GAu z55=l;X;7bYUn^7W4Pi3`gWAG!#Wn@E|Kni*rWIuz0uCND@KG#6^D-R?oDSi5jrn)* zeSSx#=s?#_*1Wu>e5guR4sJm$={1Fb&?`3@bT|FLZw(r(*Ee|zJN$w!VL zac!;T^yxe5>H;;kJ=c*!5vO}?Q$|uvslp*Iu0e}F{qz{rL7&~&+G^2v4K+zD{I(ka z;UbZUJ=#e-dtgU;$GSlksjF+NyRW9Uwz;;xrlkg*ioW}34LTY9Gua>;x)+vznfUfy ztsYgrS5>6(`L{IO*Z}$YL}C9ikeFTS-1f-SFe%&q-hpfwXG+`n^bp7ogK=Mo%Wve= z1$K0JsUUWBc&*REE4{)i#`7vgip6RWpkU2}H^%E>t;6DEVpVqBE<-dI!&?p8=R{26 z!~ZTWbmGkqKDZe$g|AN0cFb$0pyt=MAZ)xOk>qOz*M)HI-n3-2Vn3{`Uhvji%P`>* zg_+AJ{84i_Jhn_zW#uOctw0oM9aTwEu*It@{=UKiJ`Ty^Y=`L z6aS;I*E!f}@aw~a000^a@d23#Rd=%}YsNc zsH`^njJ0*(D)qnwcZGHa>#qqQ(J`YM16g4vxM>W#Iitgg;tv)uTy2J^2kS4s);slLJ-eB$LHj@d z`~aq&nW}A_+k}e(?F%{#mtg2bKWRrdN3Nne){apf?&?CSB3}^@``-=HMw{zX>4Rhn zg!4o#eLvz}*5!`xN``erJjX)Bw~HJKr`$P1l%=jxXG!zLb`5_2ayH(;Ah*A%)fKCa z>M|sXED!1i?^+%^;~h`TY$6q#-rn!RgF5MJ8Iad}7(`NC(K!F)i!4$>JypeqR@;})@f!f*c{ zfji3j;fMQirE^O#*j!qATp;xFHB>oQ#-Y0!*b=jrqtWrrdR{+Lap=#Q>LGI1n++T( zMF@a7!kW&pq$hFGGo^y(pMReI0krqD0?jV{p=4TK-k7|+pL|qmM{ZFp=CWLQd^W>{MtkRI)nZ|icDo1iOQ#= z=<}Whi|4vHQeY|HwzKRljY~Uos+cR%a0GHxdf%Kepgea4-6MAR|6}OZk`5U6yC&bx{<&N;`pvW07>glmC?RR^mf^OWxz?co(}53YE{#x z=T%l#qQ2P25HqcVgF8*KuAnI1pg*m}?zZgvhex6)AQ>_NOY3t?S5^+&OJeh^-k4`) zm=T#aDh7dIEsu}FfbGY14D5Nal`11AU*1bB8pz*w_O)IfUf#rbINV9T@|sKGu!9h+GWPVpy>e_-6D?85 znMV{Ez_G!#PPnxzPj>Fr*pt0*FMhJkr{T$z3hta&AKK*~ezL{PL#-biOm1|p+||HQ ztEsvjOP|kNwx^MT@qxxYH@e;$tM_S}mG0;dVZEE`<~xbY?Rl2^$qjBPettnl>F7dV zXL%-mev#1KJh5s;{Q0B*?6?&D8I@QI#warWA;80-9Y@a-OA1L+h+Tzrv+5$zD%wOGb zs9jz*Sck{*s=NJ@TBOPR4xX8868q*%bwRUNZsU1yPkEWr0C8_U^R+BB!SI(COE6}o1u`N?pBeOe}mq~1P zS)Ib+pm)*_{V<9HKl+ucezXfr-0%Ky1lWiCY(US!dBL=-53dd^C1IN&S1l$+yrv(r ztxeTx7rdrZ*(t5{8kf4R6=gQAom@(kPhVSCw{B`VDxJ2zuV6~hg^;Ute1878W+y_n zx&g9IcCMl*fOmwD)IElD+Ur^sMciva4ouooy% z`CM&^in#0YIFvRJ9E*YuE$|+@wS~n zcdTFNf>f95n7U|b$=oi&tp!an@YP(~beY9DIXz8ZS*I$HIbF(fr90>2e0ff;rdaLG zrRf==S;WVe=fET9GHaKr;E@x(30s`8jCo|nfPf)NWDVF)Gf#fao#MuyGZ(PYZTI!^ zVHBx>FBNY=s~W$pb7Gn(E?)JCZqG9pdn7(dZef0&xy&mmkmQ!Q(d#_gg;eeBWb)`t zzOAFtC^QG!_C=Qy8L$O$OXQAj;x(T<$E_{_E{2ct;&1R26hQlN zU?0QN;oBdhaB>4tOZ+NgJxu6d;%peuMI1G#!NwGxGg05-g7?9nB3WHsPy&2cLZ@dH z84EqIzA3k$pu||@kyMJ^1#}wPM^Bpk2(UQ=P~@8)fkq=}6{zIzw28Dpu&HXy-*Rg! zzj5!TLb3^z&(ucyTlRg!_fR>}XpX9Z`H0GQxd3BNHJBU457 z#ZQzJg~MN=JH&J!nQ!pthzrHp`JO^UVXmZ9ji$u=1 z8-md9)lr!ZcU7sgGljK+jO^GGw@2EDMxWf}QkAIO?hn0+oE&u_)IpIj*xJzE*cl{l zk8UGoMYq*xeUnppu%p-<;n>yrd8!<>w*Z=FZsurPKvhT98!)UY*1GOu3dHf_OB`(s zdIkyZ2#^DQTnH~Qtb|F4(MS)9?ddYVi^3Y}ex*e2_NuG3zC0Al%PT&PZri)J0DucW))V__ z7V6<}YB?Nw4=L?m)}#P7Tv5^3I$|`aR^C8(43VEJcju@IfPnIkE|u4-$=CY)Q0c;2 z^Tt)TBL^UU7;BTjeMf+qkkOsryC=9J4A+4PI=zWn4GEVABLOh<7WyL$CEdtBlg>y4 zK*l>&^bE6KpYIYE!DE~KM!#EJEOPmxXYq3AuiF*AS$&w3D>A_&BfYlHfVNQ69Qgyo zjlJZ72hdRLqtmAujnYi(m`>FA<=NTFQdLgQ2Y$Fis!|nDpfz{iNzZBBy=I;hxX!tm z6Ruxb^EY>TZ^Tk)9X$r6mzK^hEBi}HiG$wwep%V9^70Ruk4Nc8dBE2_#AGZnU?{Gj z`$0P4QL!b!v!En{_oVI^btf$0zA);gQGbM`2=9;j`>3xWtW6~T@%Kz$f~mpa9EPbB zg3V+zpBcHKfZ47M8w!}RIV7yu;6P}XSW(5Wn-9ak7y(0O6#p5CFqr$RpK1G@pMxnI ze)T0)!e=Lb4$ic2#DuP~?w37^6t0(>Ot~d$7C@WN7PB=Ho<$&*qI7HutU&$u4*e}D zVN(iIEs!Dv(NrBn-wYD6TnK2tOtT z{}}r&l2ci4B}g$>0zbu9rY+B!QJ~haGhYNExW;~uE|M=`e#)l){^*P3eD>vy2sy2d zRq7m7Wy6K6 zAWTk?mP^vpfG)`eUEwFl8YaHO^IsW^MSwx}3eZ-#?RX9$-qB%?y!+T`;@S%58jyL+ zop>?BNgJ9)Z-cFrbE|W%UtCDaxW3sF=x-xDO;#$VbFro?IN(O!p>3!#EYqqRfp3DJ zUO@@?^cVH@8E4PVnL~`~GDSZpcQvTflY~;IL}*ECr@t=Qws%V*7a)3CNc9Dl$BhrRE&A82V* zAvMg3gZ-MZg-+noa1~@kXA_*-Rpnvuf=u?u{*9xAHU?87hWLCYIIEjG(|`KO)g{fT z%7(oYg3RJf<9l@UE4eg3ZPl?}mPE>p?4N7;J|`^_YS89s>tG|%Mm)%Lyt})<*)?x* zAxp;d&KO5u>Xf+MVu#%65J7ul1N3^{xxS6OLFAh~JqJK+?97329-xOa&pWr)A+lQd zDf4a~c&Z|)uCdzCY^-f*Vs+Z1?~w;;)V3sn1SW6rfpNbc&Yg=q$=sx?Ez!hd42-m11t(ZSF^y6CAW^tVoW7BQ;F z68)4s(4@9m1Tv>oXi4v&zb@Lmb5kLvFw9@JW|v#@1VlzEi(W0qH}bp zP7g>ouC}neHibyuv*(l3k3e_{no$Nf_Ch?v9a&eyv(}>)z)|Dh3`!B##<0hLH;nLP zfP25X(Zgym9ZyeUZmMi_NB4J;>(8G*PydUV#-uR_@8sywgUvbfmlUz&{MbbnrlpA- zayZ220+BYDS+9id?PlVp_V(RvZH@GrAaj(rRcq{45ger`IivHJQ9Vyy=ocCIT@T#T z2B%lWB$thFH}UW(CVq+SdBqNQ7EmLvAGMPq>c-oLUW-+Z63D~E`?TNmW*ko3YW>=w zGV36(h$8X$;PMiI4U@5g4AJj@Yt8R}>B^`f+|KxTp(gHNiFtUg=6;(<&B|mc|Ck}w zv9d@FV1R{ezJv$)FQ-WA)+tqN(_{jnY>$?Qm;0zhe49gDU<%k3N>=J}f-ERAqE|2m zYfoESMQ!o^T2ji(8r}M43rCt{04h$t#mI}k)(VqM22=^(fs%4LcoI|U(W_MKr0MXz zbG$l&gzv3}J(PA)fuY3?)6ps0;478Y<~=op+Ute^v5ZXF#_DnsOe-a0QMzR$g}HCg zo|-r1fUi{OYcmy=fJtcz6mtzcLN21*l`vR&T`B>d$RQI`dLH<`LtG<|P|F0x?V0M5 zAt&MsIN35G_F#NYBw&obM&4Xx_TY`BqNL;i{h)8zs-+&TLdq(?=}F0564l}+EEq;L{TEj8<45{A+mM6CTa zEp_i?c-c~wBwwPI26A~EnB!+vxM4L$9+DMhOZ03vOMA9OZen+^45$xN+yYDE#CqrS zx%q^g=b701Lx>|!H9@OJV1P+V;=_*Z0pzCt}d0V*%yt4J^285hexa3?c1jf7g-53qi{(-hE{W1D$L~0Ne%|<7=A8a}`|-n#l4N1- z)S1&fXO{itq+6JpE-k(g-HAAJBNzYlYMvU! z5g^_%fFraWA9~Z@CV5VEbXcq9c!xymd;(s5H=z?0p(zG}tXXd?oZgd+*(Xho#^|`=@m{KaBcxxN= z*~#2CjwOqJF+?TVjUu~5pRRwT#xgL=2ME%F8T~be$YejBq$rruWr^MeIGc4l4;}Ia zktEMgrOI+0)af9>;tF{JqZ~G55dun^!RL$E068O1)#^*+jglflN6Tzku)EoxOzq>0|%}i4`B}o&8kY{X*mY-x1o5w6DZ$Vv) zBGH5NH}3{ynZoL)zt>6?oO!oTf+a^15|kTuSHNkpdBX6$JJ1A&Ibd{~+Clbs_0Vf% zAfCs#818A@DVh)?kx0l8tNC4OcsZwvA;=*V|^27pxULp1vk$}>q^Z7zHhsPx@=fW(i(yJ(|r|Y{VCQd(F zk4hZA#k0~}Dbp8^4Q8$CfEGCA>1`-i7SuE(i){jHb){b!eT4Y;nCN)o`{u^x2l`I! z%mZ+A*7E&Ym=~T|EQIS1^o({1L9jX8-0?w=UtqRKOQk7RlqEKlt7V!BdUS=*mZfgg zxa{aXZFrv#s?Tg|c#KR}Tvni>(!|=bnlfGVZ}hXDfOSav)|wnWV%&8d@4ociz6< zEl#HF3$~aw+?KIkfk*%cMMyIwumywXh}2trl-VLFmL?}5y+~iCl&LG|S!KdBr>aiv z%0y49+cxC_n=8lM(j_(r8uV0(*xVj8Lu_VX0PBfC9Rr+D9q`glVituj8MS}ZZP@0- z03X;HVk;dF2mt8;#wd>RV5lm9v)RsKu-J*VGK}tGOAUv0Wk&vL4zDy7J9flZ+ofxw z6j*=_nlfybJfD8r`st?|(TjARC(Ki3SnyDDMw(z#NNVCFXQuIFQXT;|m!)yqIHt5T z6DQlFO6$~C1RR)9zZfdGL6Jh?&w$ZGgM-KA6v;(}0!xZa1iY|GT5dE6n2@$?KXfP` zu>ZM!ShDW6Q>WUoQxx(ky&QJZApu{V!k6*66qnrJptK8Hs7&Hg%jMQDLZJ_HuU|CB z#f8kXXw#OGN_v@IB6DR^3U+agQI(fNnl&}6<~r~=f&U2o_@4|ZFs~?cz*1rWzY=Cv zvZcOC&)0FZC8gRj)P)vCemX>d^Dl}=$R zl|{VK_O!BnuLt)eohv`YjEd=Fd}98&&I zihQ+$Wr{|_(I!3we93T>gQL!Cjs%}bIu1{E-*QVq7)clz<=O@Jf`~XAAx~&fK=O%2 zltD2bl|vkA)HnrgdD^ zE>g}<_EU1=SSK37PV}qy0y4Xx=9wR~|4CMo)6RqSqP{z}(PPfk zb_dX=rs)3>)1yCH(kO~8%LY}Kf>6ycjBo)W9TGZEF~Zb}VM^N309m?5PqDDBwiPig zOa$>98!TA@isY+BoNyxeUo(v-5Hc|en|7jC-|6QW&4PSbM~(r(hYuVm>O!*oV!jRH z4<+ZG5Od*$My1qi67h9*iW0GT6o-7M6__}JVn52nLzUmX`!4-5Q4swD;)OzIU@z=T zoo~x0oiF99fwA^zZP&_9`Vjp!2r-k&+i>*BVvypz!;=f~1qNM%MFm*n_=51gJJD2F zj%CQwx6nU__J!{V69QTRhjcT@CuXNRhh>!vaUrJf9SvKgCqoryXw;ft$?I3QHWu?; zYg*`CMqQpov5yMH>is1GGO41mp?kEj%YyE zdS!JETczP;l`Lrx=c21*O*tn&k%XSB|;Ogvdb$Wz6#x|=sM`-sZ^Zo4c(0C z9KP&eIvM>vJh|w%?)oH0QoGTu^myr)>G9CquUR$6!3SC_->o->Q1o%)1?l8-JBp^=oU4Xu`iOe-XUSxs1D7*;g@SH_QrWJ`5F?$N`3Dg_%qKEd~e_!zI*-l{U zYd?NxExJ+Nw$%+x>O9*VYt5MG0BUl(C%K`^|DB@_eOi77K*nGcOn`5Ef^22%t_qSN z-*DLocTp#TGn>gER9C=0WG1bT$BXfN{F)pmZXa;L1KZatE-;2DNl(W{g28w*B85(3 zf(eSiSVLR}*)KmUezO@x^nul}J;l z{GBJymf~#n*wkWS+~z>GijahtH}00X$kudR-m<~PmCM=op)4I7rPw{H(^4usNWX>GN7z=m!4<#lo= znaZ3PY^j3I_oxai&4iNTm=S_T7Sv8+?BZmKoy`P|3|Jxf{{nplN*~8j_8b z=X)hp;m&%6BTK;+CMS!z8b^bl^416HJXF`%4C2;c%^eRs)Cu8S_}(Mi34btnb4N#j zp6#N4f|8*;&&v~2q_-wRqAB*%P0;Al@MUf(PiIO2NLe4;*n3D^AWsGjD`IHw7}tY0 z^$p+3bORwbmUDm1jb0Z*-@Ft=^P(zv7&ko3Su!Oqej`*{ zQ{iHaH~_dHi3lDleelAugQPK57kwN(N8B9^FYOmQM>pX?yQ(&z>K`{S5Pg7Le|Z5> z(B6JiTU#qV-!eUWOkXHP0Id{rO=EM)G}?_ivB|6dd1R|)k?d|%YCZuod{ud1Xzg9~oEs1K!!)nx>aHF-n3O_-K+ zS)maUa;K7QDRO@sX{T(#tAltlOULYSJZE@Mg+Co<; zH#QwuoVbk%VP{OHPY}082WFGYFE2;?@ajd!;2=@j)U>y$se>M(ftIAK^9^A3%z_8-_E$uh$Hsn?kFP1a;(*h23as{&^e_*hemZt zlQ=1vsXT>@hs16LTbq-~h2+T0ar>0?)0nXmeGz?_xGUO;CUxdFFPqS!69HSUvZ!rB zDSb&Jl;(MbDt2{~N#o5Sc!9v~K%kLc$H?Ubc^_o?35pL)TMaK9;NtLx4K4nS-zQ?Q zyNT_Cw6o7cSfd}{x1Z1r^h&y)TzdING<$Fmh$Na}S;YaQX%2P}mqIs00Qa*7zI`6R zv>zm`%mL`HhG}E<0u0EA1SX$Z=s6O1#Mq#?9l8(4y-UdzmzSXf0~)irtCFo2SSxb) zV(OAcS(Gt;x}RsFTm$WT*mW7DNfeD9CC)}`(YBVktxG;nvr#y?kRh<6JPIvkWhWK6 z<*;~H>Ts+7R8_UAva+7O3tlp&V|s{G!Aq6`_yvy@;yOs|SmU<=N^$Y(1ynm_DeSo5 z@XU}G-s;Hy%ZJf}A^)up^+AV;8gu{d$;JLfGt-OHW(?ic3)tWc@tS5GtgiRPgn zXo^&Ya?5)_{xs#1q?UuVus_Y3%Z+NNB^xQ@}n=HCRM|vY5~w0HcW5UDF>A0%cj9dwP5Vr zLK&_8_~V^BiF4<&Axz%WeX6^tefvx+Uage5;^?!%E6 zkUOdYrf**+@gR{EUg;HE9lI3-<5Dn|2kH>9nQ$gNg03uVS%^mj*IE|hLLXNIbHr>u z#e!QQCsnX?PX&+xn_YSf(7x=#R63DfmeLuj=2|7ib*W;y|L31?znysbWp^Y3(9n}= zf!ymAC|Q+_CY9Sk?7MU+O!o*vo9A{XNi&3orm+jrD_1{96@Zv8ko;jo661MimR%~~ z&{14RuYIj(7SRzswLd;5y$t(E`lWBa*}IpxaKYQ%ZSO(v0fLKn-+i6YJ;a3QxG?(m zMeG+0fak0I-$51p-GKO$~DY0=qW|ju}8W7uq9Ak?=Fez@l zBl4@oA2CDCg>Z=RexIRNz!^-eE!}sx1v;jU`_`=skusenO(~MHxmqocvZN@oDsz*S zUvsUy5vs0B;=W3fh+9kX9UT}!$>rQm4PMc{JNwXv( zYex6Q2ZrG(WSOh#>6pZy{_wa%C(w~Lh;5r+cKFm7@Zj0HynQl0T3y}q(8$d~L+ap;i4*umcZN`N7tOmE3cZgB)22B#K6o8$$C>i*_FM$?Uq0*94Yx*s{-bsG zia`U(8S%o1zdi9JOeIy*9(zF8zHWj6N?F#~H}&y$g^i%V3kn!njT`!8P$4Zl_vFDC%_I4H6M|YSCj2+!W896g%j!m^E56qZZgFXT% z`$y3W#LdyM=#{D}GPPoIz%P?JL?U-}XI{0eVuq7~;#taoH>9tpP1 zmj;mhSnLe(e<{f%Pbyd?^ebbx0y`5Erq=tz;NX7QL#|iQ&wcmZEw^YMebfgA`a}=v>b^ufPo+9045mBM$4z>z z(UPgik%;9YK9@x$rwLif22n|P&~2?*KjbC^QW@!rP6(r~Uk;%KQ8nDHxxbtPBzPjI z#)bmd|E>QW?-h21zGt^=ViFk<}6)_*OCAe`Dx;0H26Wq z#)btQO0iR6d*H@Qzb-FZmLvE0z4QaAP)Q`^uu%i|2VY@nfXP53%@WCrLY_61n@YHP zi?l|XY<|9|Xn9dlJ^diaqZXQbN5Q1vL9k?KRpWwqah!bh>M<~gBtb6|8^74`2gWrQ zFseQ)oM9S#oY2^W?<3j=^o@h%IHxP>snC7}qck#^v=r?8%^?o#atQ2RG1fpoP-OsW z`+Bk4--tIzcU2&DcQ^em#+11Hw?Ivu{Ct>$_VKgX+^0~5_sgdATp<59hH8R86wZ( zI1yGmxQMt113rLZZ^mRU@NCx@u0+)@Rt|)(V_7ipH;@Ps2-}ua1KN~dJ(opD*!fZl$((7k-;!(BvFimZ*H7PN|P0SM(TFjX1gQJx{wn4n7uhAKg2HJoHY zHElQ|$44G}XeLjEtC4_#`$njJ0W<5kVPHVt^t>(!ab5HPx_O*#{?pq@iHyJM^mX*f z!s0bI&Pgv%o3Ua|&uDovzmI2~q;h-Q8cDW7?Q&+&^?&%o&=BY`6f-Vfm^rH@Y-evi zH#bFKGEut0+nOp3)eZHQfTgjep4hB0lxq#z>Su(`+1F3A1JROg;;hMUjMQV^s1i84 z6T{H}&b(t|M;H&ma9rT58$T+(lZgZ>k$FPq+l4m5B@+@Cquy?E=H=~ZO@BZAE%E;t z`wsZFs_TE>_ar?%ji9Ql59E9-@h^MBikDI-Fxnt-}60ZEM^<#hY3aIZ-hMacVZK8 z<7h#T{i0)k5A+ZJ@e6i29Lu{A1(;b_Z5te>*K@hZET@SHga|VZbKx8gZt)lXQ?Q=I zWqtewPD)ObU{p(1sQB<_mXl{5--6BoGW@qWME|SA+nEvvsXzW_WJg=(JU`}}FREO6 z^(u%)#LF(88$o>QR|) zS0*JEqplu4nE>xGV! z`c+a8gw9p+1bYKhd;9i*87(^ zeT`=?}4?9o?W-MJIgb+oIC z>@u{TyE#ZhFHG^OZNrn3kifg^o2!S_Mimd^O=2n@PT&px@~eaFBORZ!o4UX5W-Ezb z7m7LV55z#p0H>m`gkdX{E!=WNcx-gAkYnZhGnP8<1LF`fZL~UV3E`*rwA8jWv|q)3<8T8V zld_bvw{%NL5iA4hrErL7C@)_g4%f0@z=pYD!=B(ysT*2YvrSJ~j3@W!b8bGGg3b%)6V^cbOh~Sz&%Vp0z^Y=L_2jwX%7AaLiLS(T^`G)cUWiKhQQ}HS- zE2zHm_F>+@Emzc$Kyda37GPIFgKcgNmv6Nl)GRUwx@HdFL&QhliulV z!@YCZwdkCk`qmZf3vl$zB=R`5kcUp-O`b{kAtO$FqGvLHAhu=BC?@QgkKj6!crW8c zH_ZpMpUdy1G1`H)IwX+ME2eBdpB2_Y!_u5_5-p&MJ2y}8V9ssdvN{KGek8Iu9FG53 z^g?<0((>{o`>(-03X$0D24n*nO=?v^-=U7;NKZ|v40>g0k=367?_nX}3GT@iwRDhE z#shZhat&=b)Z`}DVzI=Y1gJQ0Df!sD0K1t-G=P+l@fjRLoegyQ*Cu71OKBf?V zTGO$tS)@}@tIqQvd6jRzuiQ{u&HiUVW}!v|=0hW6q(nwZjRfs_l@#$irlJP+U2J$r zusofe#E0zA0HVhG_H~`P2%xzZY5cWcIO^>wZMDoFB+7KQPJ`LlQ=O5uiJdO7z-+#< z-&(5*G6tJUN=_7>Oi@t~;+%WPV%TC0Kri$YXC_zui^tyByX41JTX%Y4Qh}hj)BhW(CzRpHpH)I|UQwD=L)Jqt;aHnX$ zG+fC#as`v8i0d*7EW|sRVpKJ69;)grW52NjzJxov6ou#-SN~wQLj=W3Q+;E~q}Eoi zatqZOfo+^|n;IKUCC277`ntS)RU}f!{;|FDtPf%P+u-i=0B#M(7?>T*h`D?@6P&#P z&Q;=)NI;VC(?9}N363%6mEhx?_c(CH4tpHL(m8W3!}RE=Os}pkT@x2tX}CZ6<#Uxl zGF%SJp)Yk%V(QOCBJ(0e_{P{hgM31r`78UyM;~2q0ebrB@bECq3VC%sj9-cRdMr2_ z>n~GnVgKd?C$W%yVHbXOXfJAJ;*IOLFG}zd5JVju3y!7{-aA%pH@Y_W0)| z!$N(T2d1!!+$CxOy4$w?x`k4+aQV%fy{I$o8~0S|lNA}LSRjVvO|7Xm2}r4ol6m@7 zW{WC{egirQ=iZu$mI-#{C~0jhuZcB*XK}po`rB`85^9vZ`u)GWw2r9g3<@OyB~!gH zEp;0LK$>T@AFDPL!@M53N<#6Wsv{H@J64moNz{7X{-(M{lm=pFr~pHf3^$WJJ7Fq@ZbNUZXpGd@0MgTe_ zpo#AaHGvqS$iqMtgJ}y2%N^5+{j5Wp<uBA( z@A6-Mng7{m?EWX7FdRE}EA%$6#D6`X^P|bu<4cJjMn*<<4DT92rNh4%CT>2ylpHVo z<7hajcaV31n#%uaCg4@@aU1m0j3&2DS>iqL__$+j0`aWc;k;BVX7~#q$Na)_ zX$&}WkjR)hleyRBPu)0Kb^Q4k@w^y(eNSF-eA#Pr=b~#DEMPC}vW+iKQZR!pwqyuB zXc}5p0bGg6m18z`KUdTRykUZ9UcjCD}ka~+ddV2r#97$nt*cD#(u;lA?}1b%k%nSPr(Vi7uoi3E@g!|cBk64eWd!OUUgKq~f2_D`5+#)kgMiZL`En(YpZGp$L8 z)Wz}YPSg0Nv?x>+gAv<8!nb+koMmqI*SX_@1GoQlver(trt=tkW82Hfas1lwXOgA2 zBq1Odgf6zWv>TBK5~=P56U1bp5Q@0Xdw_HnoDdu54z@#Mz^t4Zj+n5>%>dT1Ta;C$ zkfr8^BXG)M)~^%rF6_>KkExE)S5UD$1UxI3fkU?A!8vnQr6Q+ouLc&=!o_*u@!(sMe zq9QHR$aoBNlFBsx8xlKCgGN#v&cy_OlV&tB7%(A&jv@bnifyOhXZZewOG-?8x`ylphXYw#O?EqfVjJKf4{iXnd^^@1&Ut|~U zIL40PtBKe)pRJ!-JL=rl4tPIt>pCJ~X{=UNDykZ&QO{Z3P>B(DotCsVR4c3CcWCdJ zePbFjSE8n6yb31}^dw=fsB+YPN(;Q5Zd}oz@17`w)Lv++$NWgsU^^(~DJTkDOJ1%S z*j)nmPdQgrC1j9YuTup4J({tz0yI0ZVX5I*fkLZs@(dx%vF2rhUC4xuO&r zNGQ3PPe0V*IeB*jZI`FEF7L3;Sz9H7xwW&KYp?CzP26$|goJPRq9X%sy%0pc z#&t)-pk#Kn*##4{6hQ?NlP!^kU8~*dnA|dN6ADeVX#ln@HI1#U5oH#PqOUomfeP+D z4MZ`wa1w+m>}|OqFpH)b%(`5&?o=BEzZ$CotjW2I$n+}UL4t9t)N_8zY+S{(=n;Qx zY1z^uSE*7lLLzim(PAOHr={gg6#gQOm^95WFsMZ=lZ6sY_$M!gq!&S1<_1Kv_D zJC{8NI;*Rr*=RDicBR;h>oWg#1ET<`EQhRuP()B8 zna`kg_W>B7`j_@S=-BMLZ3iI5vm`EH=Zm#C-j{`2S48z!9Q{D))VQ>qe9$J=tI9^D>ni) z)Oi@viO$!mDl5)!q+slGZ;R&jDTT?{oq!&EW7tcHg|-g8m+lw1Smm)}d-mXH8r*?z zds%h&_w7hEGSc*Zm>>2w>m*iM>hdX;ed6!{8U_lvaL~bHCW~FhCX>(9qAuJ)F|c6V z0pKtkL*pG(LpdVPJ>LwIkc%1$0%9_ETJvmXiJUZJj{)m3AM9=%R9)V5!plM2vqlgg zIe!4Z@(-D#I2N8VHMQCkr3=a?1D5(~Wl)(+>4Mg#8g*Dz-GIiCll{PoBaAfq;~e(a zW1sX^-@A;0VeU;^mNeQ{?oL75P5t)ec4B8NwkjH}VgHo*Sl`s`t&6P*qqWsSy$SS# z)pV#z2!sVGnccdk^`rJbv)?@TB5{&s=-jXn7{kn6ql~@1K`kzk>$?V=aPKW3%ZCa) zBn<})nt{s|tOPb{KDc90>iIQ*x+%U@&|HNo?q}ksukffzxYnaTvPSU!{!H-L-a)i9 z#+X#RB&pJ~-_{?VB!_NpL??{`^uInx$c5G@Ez5XbeRbP5-px11dV7gj1kx4A}LBFn)7IZu8+br*AUr?dHS)*M~JgEQ@g{yqR!&8r8$&9AwBX{WMJt zAE`rkWd4&aW2Ak9U4|Az=OC*^VliLg(#o3#TwOJ1wvhK*K zQZu#V!Oc#=m^ild_A_`o@%(cpla@DH6d_xit(?%e8S9M=ieew6w_&g;`W#T=*JKu< zfkdM6c2rrSibT{QAm3U_8H_X`5(=!P`ch}Lh6JoXKcW*!ogzM;NAmtz-{s-K%oRGm zq(9uasI?4;9Hc_MyS%a3;_Nm$4eds+txD^W`AX0iUhjy{7ybZhm^R4C9LX&y&J|}_ z*aA?O?gGO&fA)F8y3se2k0RnYdcrCu0bwazoFMtY*9JB#P$>AN({A{TGnz$7LyG`` z{=qWnA7JGHo=f~ELj@*xp8(v<7Lc-HI7|2NHBnG4*$baMtZ%U1!DwJ;WaIwhiVP5n0e%Kf<4n3XZ)ISG zV8SwbFY_DX?968L*?xBW#q6F7{zN*De-I?M9^V6j17BmLL-4*PMqaAC3dpV(nfFvx^;P+L0~7XX=f zs6A$U>Myla}dq9>{-d!>F#x1x?vTQWW0Wr*v%+_XJr0>rtyq5c(CZA zQ>vA$@Yu04&&)0akiJ%KSRE1>^)sZe4Ev8zU-9BIfb>;u7~45Wh-Q<%K3;#umer*q zNL6^}ty~>LdkfbCL&{!&qH;cb$HydxS#2mVOL>Y)SP$+CuLw@!&T<|94b@a!QN0jj zDBXl^vbCe7y=5d#T##A+)Ng-#_SretqPnl|ik_Zcc1t&mECR~f{8c(c))oG368PH= z!l(}IwDW{x!ZL84rsIKpRH%c$1)I*SgIm~ynvI9B0R?+OPUAv#91adwD1IWmUD$Ro zL|^8v=bD->Y-(a(1$(-z2R+jxQYeBpn4zMw3PfKnlsRNQ5~FNPU~k#6gm02guB|aF zw(UQivBCttAp`4t=9yDYA+Nta($Vp^KH}7#)7UQoHuE*AX=DG6#(p$8A?c_H$i(P$ z;PSHyoulk{-;VjsT1Aji#JiW7r&a(gOQmdI*GHrZmj%!GJOm))5^h;Am1+dSl#bKF#ANCWgN^Krk*OAiZO{%mq1b3bug zW(1v98LBKL4HW}Pw@BudQs!WN$qVx9-m1oYPVpyDUj?HS@sY$S=8F{UT6dz@D3BHd zsU1w{jZ~n19h3u%%JNFPqgiiO1j8nSvP@}KhCeMUTNn%`e=LHW19sCeG#cX%XJ}4q z!E+ga<|FL8WaCe~m@vi>B2n%;DEt7AbT$!=A9I=lp376_gIklU4&gTdi!|3|cjEE+ z-JrH%C{9}?p^n6b{ZePZAoemkj|F}EZ5@m~?`^|eQlq#f3rTegTN%5sdx>$BW@>q2 zVLx9eK+A_@!I4(l$uxGm#q8_d)DZipC!d6f{mLsrhmxJD-dnD$hO~d|{L8=Al#CBJ z#0JXR-3J86tNJGU*7rwyx7)V-A$+safOw4xPpB568Ylwe6$Y=M#hdfPe$v@+yXImur4rf)Y51gn$PYUv5!mzaBE9otmp6`jL#Vp zm~X{=Ht5;R$Hex`ZsNQ^V4>e%&1Rx)>~~k&A%#IIz||lSC9EuG0zq|B6$&;x%!#m) z)*C6QH-H{B0-uCURl)ux|6cGp+BmpTes*3Kvf_f|MQyGhkc;%NJ;h&m39!1#-(eoY z0?}%LkB^HaSsx6j=TDTDGcjDU8(ji(B;Xn*+A#*9--me@(CtkD%rW znNHVS4*3h{@r44(ADbL?@^+?%J@1V-cJC%{zdhF1M|{zCTW!2{K^Ji(bBy3cBpyYD zqU0bHO=RrnH2b;D3)nkF8SbnW2$z6Sv=YK(Dtu?_&Z+X9cutctr6M@G`KC168(<4$T zRQPn#aBaP*tLDNsm0raUB0UgkF4@v#C-yd)qrmSQVZVfrfJCgv4F&{wVUk| zA)B$LR`1r=rOF)s345_BUUiq*J?5}GC*oqSl(Y!T>K(SoJSQM5CH%NXEOm?dlz?}; z*e4}*YEiJR-RtT+H%17=5`I!=gvp*_8BHCqc*dM|=VVOe6AO&O(i*!hG~ob79tl6D zkuYvC4}XRz`x&M6Z60UWIZ;9Y|BIy7#5g5lhNj^B^g+mY>$Dq!&yRtF>`iC5mVlbY zq_`e9J2+#4eN_B7JN*d^SLL8zVf$fgxlIKjI`Qxji@Lk}e*mP{A$F{dh-O~hg5vDU zE76DSrXlp`h*YhvEGDHwLy3@KAFR>`M0G;{OKE*n8)vNM%#oR*$*q4RuIcG%Jcb7P zGGC^UvyB~u>dRt_8=H16KO#k8y}22H2QB5s;z6rUlc=1X>B3IVJy1TdOglMQ<1;gg zn$sM412fA@#~K7*Sa#tyr^Wq5U2!@Q%)DVH=4Ni#jQJ(;6-B=tXWtpx+}HQZ-rnna z)TNqcsoBWZG-+MJHb@1%`|7JZc4YlE(lY$*@Ue7P3pnuWpiAK)vI&azxNuLY!V8^B zLwzHuDVgulxffkgs1vY3JpvHScIXn#kJzXMlQ6(h!mI_IkQ>H??}FPZtu`B(P7`h= z$`cTtLK`ofQ5=(T<7D8Gf}inCV;KNPeMVyG&z#ZJ+H($rzbKiYy){qxn6ilZ{TmSKo$+bLt!~UL* zjpb#XDj^Mx(lS48%%$m&v1~=h#4U}MzSZ5`jmLhVw9-ySCk9AsC2O_QLK3K75YYJU z;Fr1EO=6Q!Rvb_O&5O1|Wl~paPh9nb5a1M!;?#jI4soTFe3+9>17wk(cn$HI!lgRV zKZZqwOgY9r;N>Lad36njYPRqHpNWaTPEPWnxV@if&par?{0IUJaesG$vQ{tdrfjnG zSVVuT@#F!Slb$@q3XY(wF;2VW!MIuUUWG9M#Pt=Kz3;!jZ(p`8mh5`xop;#h*bU@B z$CcgR_o3sB>*sfxWF=y4UGKd1)Et%6ue6*t^vFfdw&of=0|)zBOp<^$ATTadB%GHs2}Cd|O8(GcPQFv(i&DowdLH;kqiJk*Qcc zwXwJK>^qlG2FcV-J5DRrMrCD8#O7KYr2^w__GQ;+m z8XDMNDbn!0lPhak-qTNS+C*M^Ep~Nm@zepR`$^s>_URI3314eGi+ zvOcAfMYQr@YXw>{d+D?7TP>jKar2BJ*VtGBZep6tk7ij=VA1o7n#k3=^6DQy;&?-s z0Hq0m8#kQ@hj>}~c%aqG`%5PrP~z?3;Z4nYAJtBIJ{*v{9I_N+GiUI;av2_@?88I7 z|MAvaJ%fWyBIqL$#zeqvD;ZG8Lx%qO;6KWR!Qm$5IgN%ga8OFwzv8uoT2};01#>f9 z&$zXKd}yP{OM0jlcJ`Cr&3d%$gXz7=EXQaHD_hF zZhoiKBJ5pk_!?b1`pr-Pll!KBd+huReH{>r3V>Nnqoz`gFuS)^U}6tG`|PQwW<`$p zu=63=*ug3ac)6k%H3`pqwg!{tL=K;{^pIcVl0~1~#9qqoMp5>~)t#h>{ib7c^Y*e0 z8^U-%aA47b;!pLuq}r^hG8C?p9O~v-gb9witXzJi9J)R6T&O8H&X_J^SJ9ck`db*g za_XOx8tzypsGQW~AGu7xj4c3lnAHIJ_2S?O*u28~FheU)v}RRi{_#Xzh@R?{mZZY8 zQ|hnw*e*Kw3q~4J4s7YAERxpsU9vrHa~)`!x_QOcT6u}0=2bw@Jife#kOjuOg?3qM zzgIFY_1F5P4pH-fx~9q)m(+@*Y*UM@%-W)Hn$Jp0rKp|Yi*_|LdL^%&ROoiKXag>~ zQ|Ktkv_AMC*x~*A!)7~Q3m_Djr+42Vma0vP=eVN1N*v66)LsJ_e z4xj904CxNL(%RZ&&>NfEi!F|>c8kN@*#rGvvs7>!C)=|-=(EVJD5PaEybidx2TwS{ zIJf12ox_hH*<6Aa3ob}Bj7e1#3{C};4U_h;DZ^g{2Aqg*c=%yR2wZkqS!*lw)Cn@* zBX+|E2#2Afp#=N$S4hg#p|{%FwjElVOs+lj`^1f_HXlx$^7fFRMfho&)`z^bOByPb z%?5dGt%8Z+S2PlX>=!jxf0y~--Rdg|!{+LH@2!6I%_~X7zLeQdtn7FpFf}>s5*dX4 z<*UO$de8-udl%UP&Oe?AgiUe)Oi?SxS+=2QOVJrX@^Wd>)kO!2ZYq#oGB2c97v?YA zzXT%c1KWce*mB>(Y8AjXaXugPBs@36CCG)8`47xXcQ*G09|h8_0qM>w<9tr+MCXTW zj5OSQXFrfa*K9j|)rW12me)yY_Mlq!85LHmeB2L=wh94yB!p>^6lxMmlLW|ZMd zT6MMBFc}j|lSuqX3lJA~@bqX`ufoAJ(rQI!`AaWt-%j3i69oBWOOrw`hndR^pr}FHsTg|#>`ieyxe!9E8@Tz9T%z<{K&df)`j+(=y{tP85y_} zh)@OP1h9J2iPdAPl#VX5+SC`)8XL3*T_d9`U+vPlmwUt|^XxLm0wSd|H^SWQbidBk zV$di<;bh@ikOLvXVL*K3&jQZ7l@_#q3`4ze3vgXs@H6KjXZ4_;4Z5{q(}BHnpo~^s`T3oOSHT zh+^p0%U}Sko$frA=+%(du|K@hiRZVa9{qZ%?ZyMZ@&k=7@%@JmwY}Y4rt^;4jJ65( zkM+&7&Kmm%71U&_=sfbWWXo%qz6(>1>5}XlK>I{qrf^^6)u2NWA z4H{!R^iyI~>^lXh2JB5&6g5IE66c_^w9A_z=abEP6gwPENmk_%Rz;BLN@oyA9{2PIg z9C4NnHtXeHMqSxTmDQ-35+DPw&ivl1sepjI@^WRht=d{^_`467MoTrxOO#1#wYADX zDhf}K0%qhLhH_`Vf`iL@e()%9%Q6marhqmp8*J~)`b;>O!5232d6kFP8kP|(I@X=J zIXSr`8a^}dQXC`x4=<BS}V1QL}E%{`~)3Iy;k^IDIpaJ@oP&ufu9#% ztI@z~X$d9x6)6<)>xFXanx<3>bP-+((}3TFnnF9IK(6MzSPX)}X;C~51_PO<6T?ej zrSKQF*Ib}K{ww3Cezw#>(i;wm?lq#)&2qwpwVV!bxA^S$@ZJCC^c-qP;w+Z!9(iKp35 z`k?ozihYjUYBSd9efs8(ZnmBdgYZS_Rc?PfQZy!?ypc5_ga;jSmK_-MhgZs z{2k=YkdVj&xv-A+=b&6EPF(;ZKtx@M<=A&KZLHEC%fR_%2X1G1t|3_h!z@3#UhD-mPrNgIIL;-AEf`?1~Dbf zOe#2|q+r2<11}!}faMk1x>YXdO%j^=7RyV!O(Gqoug}C{OUldR?D3#pxMFvjVI+tk z7&p|_fp5QV%i?o`phL=K!K%%b;Nu&>YdS#oL0sg7h^QJ)csIwuJ_o%0HAU-z8*+Qm zS+JgPueecin$Rr2C|WMv&4H~sYdI62LqL#c&EW*HKqRrnJVErR6GSrWb=48qLmmE8 zM7AKl7)bD?z&!{#YcXvome5j)W~3ti*X@iyYRBVDZ4q~SQXX&di>$IhYiwne*d1;1 z(+wdRVE$v}zE)WA-MowD0mSZ{M%zzGO!jb0h~g>^;do z_1Fz@shtjA`M|hs;nBM;E(hk8&@XO%3{ar0EySX6kz>bN*#rMz9Q{V6c_1Y7_E;EotO9H#t_b~_?3g9?C0wIm8@TrifXi@G(GDD# z{Y3P!a}S7jEc)1Ha`|0O;BiMy-Y~+vbR7S}kJ(cJP7kQvGMHA(J>u58EV?T8)9@^h z5?%k$Ll6z@+ZSwUfz_6=U%c>i|9R&%|M}0Yz51?7kzE>T+$WcoOB@b44AN#ydg`tZ zSaUB^oN)4?8#9p9i+xpnF^NqWAFL^n+}5dCw+c7;FIvRD*g}Z~s6#;SZj>67yjGrE zx3^L0G*fAT$-$1ai)~J2o5E?Ebx;UDdqLaB|8DuQ4SgbM-Jg;=sN@+|p2OChGSDi4 zuBJ}!?|)0yvUgLd5Qf+$Z(J2wvtr6B^2%I`*Kdl&sDq!k3$=Pd-5cy)p}nmEW_2~U zxh1x?W`o?AZujc#FcZmQYVC^1T?0K9pRuWvb7pSKk-EqsBZGMYYI00=`DQR&QU}ss ztf}+may+UayY_WNZd-6b?8`eTxqz6noVk6(!5iLBoQeR?ltVOPobD_T#eQ@ju%Ypc z?L#A88fF=7Syy6dDBZNX7E&-&&6ZUk$i;C-PoKBZ*WarDA*u^A71Hp+u&bw4SFUa8 zxs;G*zHwc0iRREDRDIP|=P6)G8|EHNgRWNK>cuXSU*;5bv66ptFj2 zyCG6nk-Dw{ef32oDp5&zV!N0pRhro|tWNAZ`sLs!ZWX9S^%AWREgrvWUA@yUQDc7d zuCwo7tBsAfnS?OnNL$-UTx!!Mv@UHGySP{pQkAMA=ub{_LTS;~R%TWWqOV>YL?>q~ zfXBpLW6zNFoMO`C&^`%H;=2H&iF1&cw03pTI*|DMf`jDiav}|WN80A0&wu{&RDtz}>;|Ty zdGcq9;~fw#Ei1ygj(xzrf4JzOqNj?UEqVbCMuBIOHN3HcF-QgFiChv+haGs%M9lc` zfT87Ta^|V&8u|b6?tFzk9~>0C`^1!1*haSstzLFTt2}IL)3~h{N0fF!jBkAmVgQ(LNm*cwiniJ&Q^|7cWFYVl<@;k@rYD^SdU(bXuMRE^1MvQDY1&C%r4)WFP4JV&y)!fXZC7qIXmUWHn~xFtLR|3=y+ zCN&Ci{XoD|v$>3bC;17D5}u?)0>K$t$B@-%8%ogj>_;TbR$spr@u6}Y2cOL?Au0Z~ z@DYSo31hed?%LDvM~Hcq8U@tUVMZ54Y$_Bo8Am<&LIFY;kCVYE^DM(HP6*F~V_h^j zEn3+yaHe%~rU4JT%GmkNKjzbp_`uH2hQT<2X?>kn5Sbje=)=Up%*08UFoc-vSiHW1 zangxR%RJ|`hR(ZrgtjxoH=Oxi8+yAdv%kKb80yOCPz}tq{SEPCrU6AqMsBQ82gG$E zKWc8*1eDbZ-;>qeO?w+DlQ?z8$tz72+ctQO-VNJ`8(pqJha>g@`+c3q81YGI;0=t_ z*tQ!g=e2324qBBOdZ(mh9vP3XdigGBkG_R{5>a+}P~ldV#r1|#xkgn!ZgSTKrHn&N zyCY#d%2U?B_&hn^;MWDkR3pT0nCl@`gsHWLipKJQy9QVqALu~*h0R&MRRNF008e3> zTq>JO2UCR;ANUQroPxy464$dKWt;dpyi&7$Drn02cj-Odj8 zrM{Y+%-rq5?U5iO5+0w;_c^lv{bm%aczmVl6|-uO;ximpindWt6haMs(=vyhsl@7@@cHY zjEttC#cKkL&SpsZUS4!)ww&Sx{lDZCyedv!v7F`yB>8gYil38Duw*AFNSIof2N7ZQ zSpWlqXQ2H6dl$g>d;+}S=cRiiC*7wk^Inz?opaMLZDoe8Kl9yo^hsCdY>@8BE+D9C z9v$89^^W(Oea8MV6t&b>D&q?1Ks~40)H&c0+9cJR#Ds`1g(@ewqnJoZ0-dV>`y+9hhhBS7z>Eka9)I~|Tbn=SV4 zH+5b^*eek^B(hMA?R0(Bq7I$JPOF;6UvfA`QCZpIqYtyE2gN`>6_eO)H+xi(uqvP~ zkFM6J+!m40L`gkcMP4Za2#>*~u{*;uBw_@9g+Oc(l6;c4PUMx48omLXA!~KFo&<7v z$TLc;La9tF6jUuVT4{=4TsXZ5jzmFONd!##UzA)mvGFk~%z zZFB42TYfCkcqhO^o2r-g?~l%|M&#B z@0cJxo3T;l8VzxtA?qE^zy!GM08cLWhz}}wcQaf!Sr0wO`@^j}_Th6XFK;mLyP?I4 zt7w6D$uWF!zdKO~rjVZfv*zoskqrgd-|D~p)`DW}D-RDUFfopYmdhvt8jAVa61TwW z^#ap%Og+&l33$_v(zj|YRk8+Y<%6xzl|%IiY<_kFx`Q3!LkF-O5{w%IFsLR0MEeUd zzUQmwo;&R{^1AE79UY{hzPS1ZxQbKkMcWi2+ToxTWH_c)27J4Xi8bDcZBc1JlhlQE z)yQs2H5gsShQ{Mn2iebSuSWMnCJ;F8)}{Vcs0ignWj`K;3Ca;}jUlH40G&KUDx0^> z4v`qnc8}wVAINZ)vjM9!7x2^N%3N>=`0%unsb0k{90=|aVghcV{FC8A#@H4aCY%@%pBKliB6s3QuKDhl>C%z4TfyoBr7IA4l8>9e*L7Zz4S(&V(F zZJ;3V&EcDM3ST9gGo}8A+LN6Oc7g8%2nj41; z>koW2lFN=?0h1E07-65-JT!FCD9C`!FcA^ z#L~HJ|3nL>=;A?Rc`>PJ-g4V*pOvy7f7w1?WKlFKY%=6}T22F>5iKWMppNaluSOS; zNgNWf#k#SnsqRT8=$WxD)Xd*8xahVIFB%!Mv#99l)Yi__J#|52b^3!)^`k(!g#`{wuGK ze-cH!v<&~d8_47~=D&M?%)TT6Wm0j)SQ9z|>k@r-Xy^^DyA`N#fR>}^(Qc`M-_O@( zzB+nzHJ{u$v_|hSd4=2b%R&Mpi)Mao*_vC2h|NRFJOUmb&2|_cJz(H z+@RIyo6y|CGpmBtxdF&M+P;0sF{&ez4^ zM{rg+eL1TXhJlN|-1*F>F7j#;vURz8I`)K7&^Mm5lVJdjm{^m6MES98=#Dw=IakN%T4?i zz5%(NiL)-XgK&XUjXf2(grs=m^U8C=!s3{bic%wQ8S3l%gFT zcE{19fVR5kng~$wI9s@X_0QV>9NpzBZ)m%oJr$S2c=7?j&4#Raj+G zmD_asO08Z~eOWs#6H`cD%s_EeHem!=)~lj1_I`F*6G*s7U^1VdHmBr1DUf(cUNc!6 zQwF=SF%2Dw1$YZ(Q7Pap9stN&)}mz{4~!?888Cx)ZxJ_OhSMwx*e}jw$Y~f1JjLo1 z9P=44B>n~d!s4AxzT%|oEMcGCQ5>>+y)&H*8b=g;%-V3Lt_e?q?Cjaw&;CwvoP7wl zqu)570U`j}D(x69k)o54pM4ASMiPL&eN5i1>y1L8nJR6l#d@T(c1?G;zC~uHIskCg zmoUUavMNo_VuH^63$Ck)XEL<}FUnpUJ1c^&-n#Wjr`;ajdH6ipk~J4goeo*4wvyN%3{D0D<$r}* zBi0$OkVDhHf_r+H1*Rs&1ADds{^(qoI(~W4bwxK8-BNUW(Y-%)@Nno;m|4p9ZDHp- zhdqpQCJtVO&ksIJ_z|RCt=2)M2hxKH(Eb&1I1D&DMG0I^Cotytyk5-AmWO?Ds(-qH z9zFp+FMr&y4$B9(__Of^`<=y@!N#t;|Nhmh$xAK)=*+jo-puJ+DuE@#X93SmZ4ro0 zs}|WTLOX;<)E+<$ci=p%aoaXN^i^-)j($kMC@cavArXSAj!+}wk$kC0Az=6-6-D#5 z95_H%QW_0q7pdfe>nEf}YA)aKYB&0A<^yzQNbRG`h2EzViK=3;iVP4c&Et;~M~{k* z9N8WcYiW;gwy#Kh)5u=S?$H>96i;H8h|!h<{*xA$&}zPSY|Muu(P;Ipo|?+4>ME#I z9hR#J7*Hgp)l~v9&y6}tb~DT+lzMNA*F-ZY;my!KFOe@xhNfa&vP*chkYw}J{!ez&qGuX?pW6O zC?wm@4yOQ?IB1u}yru9ufVFchaRm05@mId}_UuNf%Pe-vj7}>Gvv=$s8F>yJW(QC0 zqMVIM$}9<0n9%+v#%&S1q(+w;6!}ft#>VagN3(NPr@-D=1*5#^aNM}FQy>BKB40uw zu~)`-xCAPVitltu*(TC@3z=;30qGnxVMq+!2A8pdtCe%5@@p2d?s;TVQa0`rYXy#8 zWAlFYKmJx*<(yW7%r8+!n_%W>*?6%;2Tz)tFaOTaYD z_AC7E)pe$jyhN(dN@>1GuNP2u$1w2=xzYSYda@m`QNwUlu7(}KRHDBj)6=Ha4rr1V z$Ow!=#Q>Ytjai3p#>?eKGt7XyD5wWikrh$cIv1`70P+XiHh{(DuRLOrpVP?sY>RH% zNy!_~5bm&>LVWfIxbDGo&u;3Mm5#Ox)M`;fk5@WnUvlPwDQSIgf0Gg@*sK1$;=YU4 z`q1O(igXebP(>qZA2n9$({hK6eXGk96c5mWMd+`r+Jl~E>rNXobYZlY$lY`$4Au2P zVcr`g9YgGg!^0O34W-$A&})BY+gYcr2#BCN+Bda)W9{CadF4tZi>P#Uo8}y3zXBH= z{t++Ppo_<>t*#}_j((fnHk8@lL-h3Vbm4gp0Gaa5y_8j7mC!o1mDM2jHb}i-DnAk6 zY4P+$%nyzSV5PxRnO=navS6{t#hAPv6I`4}7483+WR-{$+dn$9R~cS_>v zF`_*4+5#+&=K<%k_?1`qPd5PKhGIH_AlPQ2tzXoge%9OQqw970q=!EX&OwiuhVXd%r^$}11|5iZ}Q|1-{ zb8h6@KCq925vAD6NrA^cvj_#c1}{dQ10BdT{`dXc>maz{4zhQRs`}vGTj~gGfMhWkMLGU|kVDo8#IRcAt_wXen>_fxA zX1x=l`Zvh~Y$w_;uid<&SO5}{yuSDUw*s@|;HF%e1up>Rs*G?@s1AUca7%y%dj?#F z#XYZh5zN7%%6QNZ{y&TTag3bb+SVp1mxIQoEn;IlbUAv2ZGj2ugX~4U$Ro7-APo@| znw>5So%!;)=lBmjL_G3{qnjr)>4d;kr!`2(`}-J`sEeDxX7OFdO)u68X!G$y+91&`kB(dF=B8t`&7S*k zga0z*5ftjf*yxq-DG^r89T5Z|F^Rg>v4xu0)R*bBz$xrqsPeJT=EA8*qA&BgTgyG z3b@4pWyD>BI0?pSaO|UTU4dMH25UPlle+0j3wUIZD&mST*#F1V9J3Jw-WI?G%-W1u zdx4R{iUg4u)z)>CkaC4EGT?>5pC`pX{`g}kaKL)69&oL!66o}zFiKi>t{%{37QXZn@$$>-Fqa-;h5-EwG#L!7ar338OscAf zssK++w+&e?yl}`*cA2U-p5zt5gp1%#bJtgul^c`E6#Irv+p?uZ2yGXxrG3$nDk)Q@ zRJE^Y>}hQ!wJj@q;&NH3R9sp=TCt~ppr7a*nUnckZxso7jF&+YvPHW1(F3(2n}hE8 z1Z$epntAUl8y268L$?3l0nb}W9L(XJDdf-*Kq!_2PHE9~K-vik^DP-pi93H5kXN){4n{`Xx$LMKRb4RKKaD9X^sdgpV9cXnhEHjGOhQbAkHzczx&HyDuI0GC3Not4?HbnLZ+qX^uhqe zmThx1kC>*mv`Wmv&YcTwns%ALm=C#$aufSiou(d!M)!gaknV2!pRy3hYiX%zrIs%jOfB1sbz)q=u)Y%?WN`fj`@e&yvJH7*D&A zQt=G+tLrYW@W&9@xR+40pH!~^VheG3Z-vL-7!*UqBdZ*$K%yELr=%6?G(1DX+}~`0 z^pMCXR7IlNK_710Q^!zQJ^Nw`JwT1Y))G=TLl8=zo!w9ef$cTyqYfuD-zt2NqyjB? ztSVLwbt>C*rJ^oT3H!heHwXZJcH3=+R-RO+rgR2csS%Txwuu#r zhz|kTnU9hZ+xwA~nYjDv8XBfQ#?HC=dcpPVkI%G#1rgTV_tlOwzr3$pR3fi=1{Ga; zO&9xNYsFu1#*kE$a6Dj_3-yvV#vn#!p2yp16q|*bl=1nFj@swYWfp6@*=g!l{~w3j z!X54iU>+eBG6P2YDYA`=jI`Wrl)T%RMavoYX`1ynw~r^-dtxTy;#4RHxq5Rz+ZKRf(xO0v;pxx94H}m)O*#MC zuWs@Qf#|rT%KXY#i3U?dk`{;9C4?^X7aeZQ{^!WZ{w`U47{&R)LEtjAi|Y7}CBRb3r~f$nDDc%#TR#o!e& zN~Pq7&T@39w2poNwhTU#{iT8*I@{GQw>bN44%_hA1MD^!ug+GZ&El!c%LOn^uyjvF zP?wCWD>TXKt0ZHWMkr8kfo(M*O{`p%RL7D;M}8l#s0JmS5Xc#__4Yg4aTsVT&f~No zngCsEf&%jcxflqyHhUrG)CLE0VJ>};b^dc$3_O(&<7M&T13e14zJl@3d9-vELXPnG zXIT3>fCGT%0p+(KW)Hq#WQ3@YI0F$AZVoks{f;@b)8`ZDI;aXro8LL(~Y2aTO0qO$OqEF{C}d zfVfFhyL;Ozuhiv`I3|~`k&2=#~1x*?%Jy3yxHMr0bnDYu@Sl4%qqL1^&o8G(?Q z`^bJInft^8w_K1=6ido?U3tr0n`?iuJrvn_7UXJ;VDew!(qZPD3QIu|ews!WYZ3vp zaky}ZkAd{lZV|ZsSo{3!N|N$nZLyV_6qvoY%u^X)2pj>JZ(p-iLhqjvS-miT#wO7^ z4Qwx3&R)KMd|X;3as|qbe5IN;hWw6`ME;0RST6GTy%M5BUw_fL31i~Ci%{k9k4nlU z5{hxT8K6s$5HVTT6?@~9QqB)=JAchM^1>=zsjE9{=Ng~P<6#_AE7uss<+V{LR@A1F za*zxwpyr?^*=;=JiOcn&9nt2MgKSw{~fo}n$ z|6f;w_}8#8?4c)xt}^y25+(|1!X8!I*ra!I_?1Okn~tAC8~Ac+&1DNJ?F2OC2~<`k zv|bm>mK&NneOil_XhcD=P9+#UIpt(GVaVh8bLI$>VpuX0Pobo-z%8de0qEeM?QVzU zAGXNaRRL$|sttb@+3XTQX|ZN<+r?dF*RX$Ij>HNj)$6dSBXWsMOjBr=5JqbA+%{SB zyp?fl`^9?`BrTH(+HDev!zKngDGFJ03#+c)zIi#UszYKMJ!u6Yiq@7((wgd2LIHz2 zP2lLfJnP8ihJX+L*M-5JAp-vo&Yu=68hADg;VUC!Tml}Ri{NQ6=Z%h{3bCsc->M3T zY6Fh>&>-X#R0^$jo9I5SD`WXw;LzZU*9L5efO96Hx^B9WQO1gl+0gp6cN|W`@vfdg64U;vs9SbYp zXy**X?ZA!F3n|c2u3s?=XIaa2D&l^3xJ5Ys+1v;AoAVI!+S7lkikc63h)uJC4ZnBH4apGV!s5~;^F0yI;^m)p+nwri8E6TikSB7x zr97)n5^EVMan_u&%ufJc>9PNAmL!epnp6_&1v7Zbc%%m(Rvpte;sa9)%}S7E!hi}~ z_TZL~6TVrF>wjNCbSrv$f<41Xgfp+Ba@(HeP#K~+R(I+Ald77{OF){$b5LEP?PKK3uko$2baye|G;gXP4kdGe8O;|4WF`la_R9a z(HRRC1O`jDUfd;wX`;zhiwAyf9X)AnQUZ{&7(FZ|AWK+Y~Ey7i=YG@Aq zKNJ|KwVCP))@EE%kV{{cp<(v+^I#ldg&4a&d{|vRHyqgO4u9K_)8Au=yv?+sMxKf3fE z%q@|`f>U7RU}-^+x@mUy4Dd<=CW+lHGx;nUAgxU|QB2`IplJag>t>LyG|2<;H0(Z; zS*j|$Qxdz^3#34)JLHuKTFz||Y*DtJx+DUFl(O)SLxWRqPLpdUiSgWO>S2A|$;)d z??i^}!$M)PwJjOGH*l<~Q>#}yx}(Q#?iS%@)f*1K7&?4&4`bGgd(R$=F?0F=T~QsA z>h-ihnbZg^si?#kk9#HA2Gg}v4O4iTeKq^Z5k=Qc4Z^Uezspo%>=+;wqffDZGUTe? zF=mA&nGEdcsjix7*VA@~)H1TYp4!1aZ&oU!5vjJUzS*KrSKiw&)OZx6);*4#kxb+(lTM`noZ;IBs0wdRWJ0l&DFeH0 zSQY-->?}lkQ2ZR@>MOn#(_k~cO zIhNG7w^N@h^pSF`h+-#i?Sr;l+H=#<7lMax8NhmI@U~-7_7vFb3(~m9mV&j)$J-b% zmgqXQJ+Nb~d*A1dlxg(LzK1puO*a`V+)SEXHJb*^jLjm^w@y@6jx}i*t4(Gc*i`qU zE^>4@8|}?1;qJ@zovUjeP>$YyBr1dN4emV2RYy+%`d%6#npS4*rKnn(R>0$gl!mYd zpVH1>3X?D5q75%)D!lv4`FT~hV`6g_UEs4DM{m|;^6egQ-|@CJW%ckM|Nrf&smCU7 zog%+Ex1Ri$Y50y~5v=rldrx;HHp~y$V0z@4*|v}+%Kyuwbikv$m;10ZywJQGR|RnS zIF%^Sgh*O3m&&OR~x ziKn8%3jw*dKCOb1-wL%=3Fa_CKF<`lz)XW#3YS>$KNfi?{B7fW`{3?Du_}ZD7eX&Q zIec!VMwTmOOK;{!-$?3blauUS=;(K9LLTgEg6J%*X>m*cqs3XDP;|-?Iredik&2Xd zHK?>qs}dJitBqoTRHelhr;Q`m0mk8$3JhvlZm7cCb$JxP1*JG|wW?!E zuwW3DojlKDhv+3KPlTDgI+>0u;Eo%icHk4Tm~+1iz#~WP$<)VHLzteiBH|zsKE?wi zvbe`gz{yX6`vd#7xns_f82jdB#gGIYY!MxrlDGm+K!+?&JAF4AjQ{Vv-eMkZpmefG zpG?mDE8p?CuTFuMEq}$yz1n$|->2?XxgG52fYxacjtTVk3l&dvJQK$VU6)c`HBDYB z^n@y;GLbf|r5KsO*{^lzL~u$%rPg@2t$b$0X?9P{2&~?b0hir5G+Mk;hzIdpEj@%b zUgddaXi zo1?+3PMnk2J<#MlK1If-|G`G@_eDV&Q4!p<<7eH@a&4tjp^?+#GREVVm$@zS-0*zd z({gHGoRX^4)K^QlCU<22CO_u9(2+BYtiGdO(QIn#%4^}$1UR&;ADpT%QpAd9GXMkL z#Ze@tcq7ctp}5gji5z9i<;i6wo{5mZN6T94Qr4sBPE&JlxJ;oId7CqJU{p3i?xfib z`-Uk-V|54gGC3vl$VEnVTWcNZkH{2b>9BymV*?kTbil+z1LVu|DLr z&T@4?Tx@k(X+hpJ^6=SOsoyUJ#O$e2LBT>zr6)4v_RX(6bLZa1%DmPgX=t-{oqX!` zUzLZ9wOM`4P*b;xKbuE%wTJd^4rr zX>!pA7nQ!?iCSQ6|C8c>v=T<1=*dzE&TF{C86Fa*>k=_UyO_31C_lXD7krT99Wu^- zx(t-@cLm6E^X$3l_g$-YWn@+po!+^|qa95=vHiQNA6ZeUT#f)`)eQg1r=y)N9vS8?%`mlkjF z$F!=VsW**#!&;@VWbV5ih6+E^OM5EVHAtVia%6-`Nul2YU<_9N#zM{++7)n#GGeO> z@Qyde*|#Q$asoC*-)3U_1F%4>Oq=uYT9bE5Z}Eqq@>G4bv{}z# z5>m*UkHLyTtlsdE`=JkRDB7p2MtcW*@W2u%F$)$SyAg9GL@}t^iadNE4e-cMHSR#+ z`1cn+6sin$M&fmvY)6F%mNRAt{-nyzwMc;g)V-!&^Y889HKClPJ}2*RO|9P;W8A9f z`n6;1Gjrntxk@6}iDi!G1WZ|eBxVGozE1X;Gh<^UCH0i!*a3QPsC8$d_Xc^7#17Cc z^~(5DRZ*p95Jgn@G7BrxZwz3RHFa)no9faQtwR$0@`<_!}z*X*{1trK>cR?iGMdo&S+-EUGrGBO;8YSkC|gztTjb3{IcF`-4 zcP43zMbb|w@>a;wYKd7p-kr`~cID-D42%@h`}XfizFvxwbtjH&3&^?tcJq!EfSwf4 zrOyKwnLoXfMimjWahUBFdB|7@E!|N(n3ey;4Y>~M9j@!+fe;=|=5BgPj0PkRq`l)k zFRNZ!QCWp9X-`Z{sPp>9ZXYO#z3n-Y#ibSZPEDDbbxl1%iBkbP;@Ov_kwloz$O6%j z;xulnq*UubMP_%16fzOTxIA*9F$R~{X%Uqt^z2_|l#!8B>u8^9_E2w7K~5Q42ZKtV zG&tC1qJA;>9I(1tgVFgByE-B_bd2d5KC^HZblnR9BLX+kzvb18r7Nl^S!+Eg(!j5guwWfELa+vZj(_>OQh~wunSV zIV7?Xm=jws+W&DCILF`SUjI@S!lsNvk$ICV-q>^H*fzLmVY`T@Q5oW5f3a(5h{PGY zABrU~Ha3*|Y_NmI;}BJeO*RWnTqCAVKO!!HJZQq44b`evMOFO+0Mz(bH`rqjdU-YpKg7h!0Rh znCTopw3VCbIHxynm&?-mtgOwDZ>v`mpP}h+g;=W=1$KBs=B7q#)Y{a%!2bT-(NP#5 zZaLKfbu3JHb#aXV-8btGtXtiG)3Gf9br|MDyN-}py0W__C{u(L%Jdk-0Rs#@OFlf> ziw!mwGpB5ZBcd}C8IQOepXFTgJuEzz# zQ+JR%ovRlz;36lTcf zjLH-Co?chR**5^67E3zxy)O~m{TyR(0(#;-Sf(RRQPOAOX9{wk4cQ+ZC?rZl zv4ej=UWebr{oyS~<`fLhIPTQ>6B_yTw5}tH+~;^>kle)%+%P-)C#s?FjT5tF`uIqz zP-m3Zbq3U5m=%s1_9VLM;r?loAjnYC;ORys$tr>~~JU;?V@- z3PQu9fNT~CI>x!4IR$Sul=WfNnkVaEd2U(yQ<3okn~aTXdaqcRcH?l&+C9I!k^P!N z1Ii;JkW1xhA80l_tqPT1EEFCfxybd7z(Umge^AH=*du)lB&9e+-akBb4IFXsSyF#`1S2+)g?5+_Vjsb|mqjrvld z{nVgfnVW!+-}Z}Psd@Vkzcoqx@J8OQgKPlw3K!BV zw(iu(sv9%XyuQA%W(myld%-!-WvE7s9i9=3pfSn zM`}cBvHkmQclVWj8oj;~DrHG9j~jM%q>la8%YA)!bTj5;hzTeHQG=uv9oyM=PzS%G zw^tOSt)8Gkpiqjfm4PX-!($f$DadY>fa(9E)F;lp>j_91X#ElVl?pDJjGlW@P|H44 zcjVBXO4$As*|M;Z%1;voe+?ed)f~8Fy^rgGFTGL$ZC;hMRbPt?3VgjD7u?Ssgbavp z9|nHmh2o2b7?pvK4^x4~LrKDZCpZ;>8aCTwT)FUNI100uT2Gg@K^BTXj-MWM)>@OH zI|b_`jWO`ZrT=I4p}+o>1^y@d=MBTd;uvlBhT-F@M7og2IxcbhoZ_g&>ax?|=9Ls| zjM=&!Rl3TgX>_ze2g9(JTa(~6ZpdL@tPY50p^aCH+%k4_w_h`&O*4hWL1&BjvvV@UhWdh=|765L>W#*J6JludNT&76X zG-9xUNQ4E$g%3zDHcrZnc1JhmWhUA)wViyR_Y19flhO9#^6nSO=+5E5pqyf*gX%xf=iSI z@W4)!akFI4HC?>-vpNhE$ucq1baERdlzUrD3TsE3NwRu>qf8;gwhYC(1pa@kch1P# z*(ck{e_k6f*Xkq6K$zV&KzSA;&I(QwU74w5nl;(_loIZm8N_ReW(9f}Gnc7#^z@db>IL%48TO3{_7fd8mG$(9DzbY*3a`{q*I+KJYBXo64eiEE zExBdylP9JffN9gF-krDqH>l$#*+c{~>Yq4UjhC)El{=Yr5b!)uC7<9_Oeo*cX46!3Nl{S->>Vz#lPD8r#Kj#P6PzMdJ zL7UA!a(St;hyH&DN0svcRSrT}E-7u+<{Hze6T|7vw*})I$Z3Sh4LZ;8MjO*0{pKnn zesa9nb5hmIBN;B2g7D740bqPpghNU{<9We%^Nj&szGWkzzf+pRA72uD;@sXl=jEP! z6_|W84Yg`Yu}T9PjVghPao2<8F#Cs1U}HBUHPu9I4H=kGr5gfKN4^$z71re0yO0Aw zu35d>*B?E0OApM7nC=@6y;dBON_x*8j|)VdC;N!$lfjYUE<0_3bU!i?x|_WLR=Ck+ zuoVa1PqBnNuW_Wc8e{EOzyiT8uZ5*n-%Qa~r=nKrvY#Ef3GQ9HyJ7pN1pqb1&@mHB zOtk0#PLr93Hs#B>Oa+!dK&_f)XZk}_QKKijmJg_WLUc`Yc#br+rHKDBHrlwGH z;jSkr#_(&65K!DCM;>heH{&Y4kc5Se(GJC#8wj(Tv1aAvNe#B34B7?C;m)4Q)eF@IEac z%-4bMpsv1Lpr&0_3@yF~Or3vbYZl7nVzBU+Q=j0c=Z|V@j$FFgFL%48u89qsom}3` zbMPps8#(u`V4J`b-?gK%ZC_Qa4J2*w5V%Jnq023i9r@tQ^ni_hX~d#yy?mz+maaM1 z?jyGr!mf~%kwDUfM@9<-qjkc_x>=8J)p~dWDA;(Odjbf!A|BmRbOAmwIcE%8We^3T;&~ z?7ldtUUg|hwjQXOHJ4V1afZ7C*u~IEDN5d|_NCHlAH5ecQM)K152N(5B z_fW5#+eB>~D*T$-QTUrP0Klml3GV_XsZEO{s;%y{IT}YiJVc zO>{73VgG_~kf@2axt$EzE3vp;W>E|6^t+`n2x(@YKY{ok!|}fGCdGoT8L`V}2SC{Z z^p6k5PLByroV!P$5ncED0kB*U#g5)KCcftFKC#Ilj$C@XC49czj%tM&1cb;xuAI#P3)oarzx%!0nwd!81>0o!L#}F2)XC=bdBM zgwxmFaqUiv)c`LqC~qi2Ycv!4P9D^TeSPg_FmTc3+E!Oo@7e5Emn$4|TS;}++udr3 zTe}7>%b(g4l!esM%Wv)aW+~0rojAIkC&tch0fI_-vVv(+Co`1_cnDZM-nT42@#Mp9 z&P)IVnK+ulclM*DUq52;pC9F-iWs@0+Me)esf?KmXMaPU$L{)S_1K6c;Z|OGVJ@2(K6{ zvvqZYQD!pdlo7$ez|Dgytu9|lDJ3qn!KE%6C2kHc z@;^WQbRYZqi-(4+l0&!jtCR{@iUFWMu%^XK>ot3KU-J6HwMst|*m(3hvbOLw;I)0v z6NFJdQB`8g$iT$Y1Z0CREj!IhXn=Z)XSpBD`WDagJmVm&l(4aZ8(buOUEuGQ5)eYu zMX@Fi%#?B!=KKl*dpeH*c$b2k7v*NaM!0#CVyD**Gy=2DMia@nu0rpqRt%|Xyq4s5 z$2H|TdzErXmGzh_Um4RzbdIcQNY&uCCfQ$1`j2&?4}IJ2N_Za6lY~ay;M#Q6rzVAJ z9W!+H$efw|TGo=OROS?w>Fdxing{vUQ}-GgPhPeI)dn&sG$9PcYbvE}+M2qwip*&J z?M`pM&Ec7igvMQ3Uz^k0YqPtjBf&9;&fDhjcH14Esfy4TdxLJ|bPPv$fs2hpLju$2 zsr8*EDPWMA`pMlbpUi^dLDi@Z1WETGTx;kNC4XCvb!YSgZRq4gRpYaOe^e_k@Qh)x2X{o8gbHnlM~g6l z-#X&gJUGF4l;ihbd9nY*W2r37Py4gH-1A z(#o=UTCa`-Kc7{*%#6$}m0F$bSG!LY?j!ei-TCY5txj+jQh7m(BNW@sbsKvO;PIkq z7)_Rsv;g@IJU#~ID>%rAw;VxI38MWtWKR{z6CV>cu&^pZirBrw4}_GsI|)C>h?D*0 z0)Rhwhp^s0&L~rl4WEFdFNfh$o zdqPL5qI9dKItwPJt&;`8)D-n1n*^7{Lzi`uOA0?D528d6XUI4m;&*2*eV!#U2$!yl z;4wVo64ws`;Ntvz=~G?!ZKJLmcTDYRk@_`_+eRl7$41mXCbxFTH$J7$G`Ph!yEH!f z-2r=TrF={l&4S6nwX;8)EXVmU_*nw4;5_0qsHg$cL41s%?y^kXeWDVQZD{Xxj)mK6 z6+vC)wkyWoH6_%$e7KMUF5)2ii%|Itfr&pz5JN6| zleh-F_#4iXa2_Xz*i#X5DSOp8^1GqpDg5R>m_lTRR%x0;>$;^=04}{V1fK6tnmE|$*!GA$EWy&-O*qtt-siURp<-B@=IxHda z?4ICEa!Y4tDeCi3*V73ISdpK|L(F(~c&qr+%J7{ve{Mp)IQcldwSl_4aJUj}J>Qv} zl;U8l-#EC?DYHxV-Wq;ip^WP%5BGt2LEG*@HLL9DIo;C(F9bk0mqQ8$8WtW8lH_AS z=QzyR!N{GPvD*fTZRpeN7X{_Rvfg8JW?4iN|K^ob0`(iN{($4k#WrAX^#M^))!NoUFy$P_mUIEDp zGNohTxSim}xT1>2lUoD^$s0J(R!nKC8+|~aV5$eI;bP5^E5^aWO|Dj`K+W0ihxuPH zuac?7QV`4t*uJi=8=ITgV4d>c{|!AIRLX#JQ5nV^j$1`w0u&87W@&&X#8os0O&n~Y z4BEEKcUPe9wf3>Z=%@yk*8Jn1aZvV@2`J#YfFzWW58d{^kAH%#CJzB%yM|rpD%>|o zqEP$YsL35av@M_ok5vE#mC(diN!tK=;I5JxUc(YoyCjE=ap%YH;Qp8xj1d=S7#MYh z@YhgRa3yhRgW^h@8&t9U92;yX`3kQB8IXqt2dN~qW>^HP#l~{K9fnta2V4^vUNN^} zuXoMJ$e%|>z)g0%@aZ4@ll{{NlTdcT*aRSMb*-DorH+&g7Hu&qg^>M^agix8)=GPn z4ZY>s{%&x|>l2w4X%`o!KD{^gEc+*-X8$xk-a9g4W7ZvOSE-;BrgTYelFHQWo!!}S z-Km9gb%o5k_L2iXx0xG^E<+xoydC&0pDWf2NQ*2vOH~8M1(wj3nh7ozt++l|$bQJL z3@jbavx5@n080m0fnu(!z?pkp=4JVhzm<#);MBk!}4Bd}xa^YAr` z3YIs=#@?RhnDTOk%b;uV6NS`MCpSs~ml3jsIgzD)Cm;mMp*2-{>c|8qmp!Y^9Xq@| zsI63cX1DHakW?hf=?QHrU8y`eLT1;lePs3OKDfVEvG-kWrPm&6RYLCoym|P3ko?g# z3)8#DZn|{d4O9W^z{bN6x6B_r422c$aV%}~tc0R!9uVk_;EH-2;#To$aKs5nj4&xg z(_-kiz|sParX;b3tM-v%t7tv6BEI4I!tMNM7NGuAW2;x?l)1l58yW^vU|=tecUQY1 z_xDlK!rvbH&iiX8$~2*#Lo;G1j22pa3de-ZAT&A602P4=QCw4I2)m)1b&4Z#^`ur+ zt4(GsFb>d1{8C`+!(a-$i$Em=*fpmTGQty@rhOp~Qm{Nu>9;E^&E`r=8}%tw=HlH6 zsJTSt>o&4KxaF1s_BHbEz|~`SpSg66S5u*MjBY)2=BGc0^lsGFe)~}R-&iwyHDLt zi9}^xWwh9PbUdX9=!8PnarY9CT#%cT3}bITu959vQbn-{i|7SF$g<^I@7xp zWMQdJ3VouiM^zp-!WI!K_z)$^c82r}MZ<{HZInjS8DocMbULQefe9C3%F4*}t~z^t zld*znm6VqP&4=qoNhlVg+tih*r~+P{NMhH9U})pcN}w^Zul$m|!%81KJD^s{p(g^L zOaUnqOWV%uA+y8mL0xRqDzDYQcFS7Y?qUQMoxF7>=B`{b;e!dDO4wqhH8F)yBoeZ( zz>-g?Fzi-!Z`zlO4cvWQj-r(+QM*l}i7O;vwJ&INc}E;R$2f#6)b_sy!^%?G9e_ax zzYDStX^tyG)`}az1%0d~xTk64>k9a5E@u|~*%2Fo*X{yuXao)NkN5W@X8{L0u#CbO z4LE@j17W{PY<1X}yHMf$i|N1}J47Z6z2%y>boKq^N*@y&ZZWXG85xP7yEE9tJSaem zp0i_0i`eP+h=J5h$)lPwQzQUWCcikA)RrE|hy4+jy&1n5eN}z-mmO#^lKZwJKG|iI zm8OgfXv= zSNwT)_RmuqAkfwTfi}=80|Kp=V%WZkJG#1Dzxc)3vn+$kic`F@0!Xv~#&PQMIVe}T z`K=3DYMIZ`)?zKUwRbcC_Rwmv+B$lh*c%%P@B4sHE6@}d9f`*a?~pgyFOqKdcU_m0 zQryw!jvd^}k-uG&o3<%YYQQvWGdY;l%Ag&3T=1h}dc^&fekd<;P^aSNv{hiM3hgw2 z5pWK8Zx$KVD^7|V=qy(J5JgJMErW0Y`Kk^pkn_iSa>XsTOrX?XLat*M0_5#=?9W$y zeMVt0z}hYlIwhbB-l0;}=r;BNkk&Y^BAbWGrvf=sy6P5v*Y-}vXb^X8?a&wQCsFqM zM+XMr<~oB=u;9%t4>(3a_K7zaI2APY`VgCG8|eqj`&E#oABBCp7rVR+Bh=tv4KNlZ zrQH8uOyQS$ubZx`^LCgLnnZQm!1dd$&=kvk#~zxyWwG4-DBq?CBFi~SEkE5+auTc@ zl)8f;P+0?h6~g;3uzunb6$0=NfQsR8An zn3gYm#(-1og(-Kkw)*mGngMxey!?_&`-#$MwMZF;$lXez!E3c8%UxRb=ai%HtKg{E z0HO?Vp>g`v!YlfFVW*}DY{JW|M<}Yc-tvjG%1_q{wZ@r2otGYwcniPA-eWJ!gVW#= z!sB{|@_>B?x-F{+OyvPGC9uM5Z>!z~^x1L+ZE|#s-F3x=Y)f8g7I*YHTK3=l46%)k zvA?aq@z!f|jKLsGUv|au?54txMrA%9Bk|fFY_+<9o1oFlzo;x<>(Rj^haiykr3J44w;A43I0%-OtAb^it&( z)S$CZH9VY;i348*9lDa-$!@9|lK{90&Y_Gas1p)bU*EIPf8EzbB)#l9MRzx@76&IC zARn9<8lr#_g;+eygFpl7oZv`e)w~AO!~SDnYd`y)#9pA}++1t9SkC@3nY=iK0NR$b65n$aX&i{^ z#R8c^EYtNH90sayV&c~E@mBU~(Bg5%GJq!@DEgmFZrBRzu~QK#;6yb^#nB!N}W|L6QWR2;&S|weM@07gW)me=sUT~gy;xb zmDY3E2-+R516LXx78PGiWASIaGnk19gh))%T4-|h0MzgZ?uyzh5H#XHm+qp1- zz3=(%9tGPJIl40WNz$5@L#TMGrmQ%AsJ>-SL-#~%`E#X1nGs2?@ zM2td+u#R-alo-{@KxcGVY4Wzu(rOJ`J047!fE8nDp>*S`3mqh{N!#+)w26Efim8V- zXJjfRR8z3y2Id&FIJx#y7dNFG4TcI;MT|Iv5r1#9N$z6wwT;$K7QQt~eYSM7YY*?= z=#zWAvhbnPbh0)H2t!RnHG(eYWtwJ0_HfL}ulOpZF*rEv=(vIJVu`e*?}jM_cZP_w zFT;Jo8yS8Jzs zZkWxX@{p1ZJfF`tQ5D*gZ?w{|&MW&2>F^{+8V&F_5_PKGSF4UxrA*DHbakA)mA%{! zt0;wPZc)(TE-)K-C_+@FBVB<4$|V&rhs&!|87^QVC+QVIjFa2o&S!6tIf`=CKE4j+ zdIIipF0J>%6T=@R>K0a|SUq4Y<$6c%`%6URgy8CP`wKmACK<+~sNOtDp0ti{N`aGI zX6v+*JwbjC0x|e%q!wn`mdQN+bse>#a3>-2^M|yy}8}o)CBLi7REI=3`V{r_QYrzPzR%i5pH_MQwOoY!OtVW^vl)O8K5SY{wc>G zf)^QT@Di(*t2nW0r*Jrd-+19%A{gmtdGvE5u-?Az=%rg=Cu3vb>q4rj@WOkOleQ+y zzzm3u?IUnd|U3@%)VsJRcptz z>5PeuBMNv3t4`kjtmpv(n)?8FfFMZ92n|+?9Dz!AMHsl9GY(t$ono615O__A!UeVSo2aHk&pr~~_Ykae7qnh~INjK#^ z|FvT(YY}|THURjn008wda5LpK`n<+~U*kIoi#9IMdC^DHH_ zLPNJ7Ol|nIuxG|e@p)h|h|-Ib;$pD{3qaualpwN7?3MNp4vLeE!(V|Fr`Qno+UJ0+ z;1E>;L42f99JP?)Jh^@h+Fhw!BURXSs<;{GpGH5!$VIdqTzJ_lac{^Nxu2c8 z?BySSvmd`zA!RITWx|Ri&=AeY%NV)vl|He%twHQiq;t0VCZ$`_Dt5d=O%)z~qg5M% z)!IJl+7Y5Yw~G2SxPBd6PXMVuqiw%DBGKwZ!QFP1PI$w2j&&$?D%h}1 zaqL)rq1flP7~ceT_u%+xh7GEl|UU8O2^hrcAhyd;u!@-gw55q6MD7+H^Mr!V5 z!uNw~W-)Q%;X^2Hq8rXf&7` z^cFxKWiaifz0 zbdre#qQqhkj4_S187Z&BvLZ*Am1Sx*f$TzK+u zAM6nt5Srf`(*{+r4dFuF`ZC@XX-drXn81EoW}n(o+pfwV*#Wx=E#knc&Fl`=N;!Ia zyZU;`Phl^m&S9vJSbbe)lLG@Ro)u2zuw7sBWF6!dbZ&z8o|kDu&@82m(kxB@C&dR? zu3Ck&fpc1x!Ld0l%@#gZ_WNp^+#3eiuiW!iv&yO$c9dzYGcB->RN5s8R7MP~<1x9L z0gqJ+`xv#ka9brVi21^>!k`C2hg{;yfRmDjZP$?ey7;{{2fWGPAjhdv4$z?F*}XD4^e^SJ3w3Xl5l_CI5Dj>8(R|s4eiMRjpg1EQ@c+BCaJy#GSZ_f z_euw8PpF^;GpR?McHyZwXy9YKOh0$?P*Xx064i zqsJQRET~M5?%?qDRoi#@nMiennb4(c5-M`LV&*e9CKwZjf;-`aF@e2WJYh^=F^