From 225763b4d2dbcb1b0e4645b6c91f8e542ae5dfce Mon Sep 17 00:00:00 2001 From: RealizedMC Date: Sat, 28 Jul 2018 14:42:29 +0900 Subject: [PATCH] v3.1.0 - 1.13 support, a lot of new config options, SimpleClans support, bug fixes --- build.gradle | 4 +- .../java/me/realized/duels/api/Duels.java | 101 ++++++++++++++ .../duels/api/extension/DuelsExtension.java | 114 ++++++++++++++- .../me/realized/duels/api/kit/KitManager.java | 8 ++ .../me/realized/duels/api/match/Match.java | 8 ++ .../realized/duels/api/user/UserManager.java | 70 +++++++++- .../java/me/realized/duels/api/util/Pair.java | 27 ---- duels-plugin/build.gradle | 1 + .../java/me/realized/duels/DuelsPlugin.java | 86 +++++++++--- .../java/me/realized/duels/api/DuelsAPI.java | 4 +- .../java/me/realized/duels/arena/Arena.java | 17 ++- .../java/me/realized/duels/arena/Match.java | 16 ++- .../command/commands/duel/DuelCommand.java | 7 +- .../duel/subcommands/AcceptCommand.java | 7 +- .../commands/duel/subcommands/TopCommand.java | 12 +- .../java/me/realized/duels/config/Config.java | 31 ++++- .../java/me/realized/duels/config/Lang.java | 8 +- .../java/me/realized/duels/data/ItemData.java | 46 ++++--- .../java/me/realized/duels/data/UserData.java | 3 +- .../me/realized/duels/data/UserManager.java | 27 ++-- .../me/realized/duels/duel/DuelManager.java | 75 +++++++--- .../duels/extension/ExtensionClassLoader.java | 130 ++++++++++++++++++ .../duels/extension/ExtensionInfo.java | 39 ++++++ .../duels/extension/ExtensionManager.java | 91 +++++------- .../realized/duels/extra/PotionListener.java | 3 +- .../me/realized/duels/extra/SoupListener.java | 3 +- .../me/realized/duels/extra/Teleport.java | 11 +- .../duels/extra/TeleportListener.java | 4 +- .../duels/gui/betting/BettingGui.java | 10 +- .../gui/betting/buttons/CancelButton.java | 4 +- .../duels/gui/betting/buttons/HeadButton.java | 4 +- .../gui/betting/buttons/StateButton.java | 6 +- .../duels/gui/inventory/InventoryGui.java | 4 +- .../gui/inventory/buttons/HeadButton.java | 4 +- .../gui/inventory/buttons/HealthButton.java | 3 +- .../duels/gui/setting/SettingsGui.java | 5 +- .../setting/buttons/ArenaSelectButton.java | 4 +- .../gui/setting/buttons/CancelButton.java | 4 +- .../setting/buttons/RequestSendButton.java | 4 +- .../duels/hooks/BountyHuntersHook.java | 11 ++ .../me/realized/duels/hooks/HookManager.java | 1 + .../duels/hooks/MVdWPlaceholderHook.java | 12 +- .../realized/duels/hooks/PlaceholderHook.java | 11 +- .../realized/duels/hooks/SimpleClansHook.java | 39 ++++++ .../duels/inventories/InventoryManager.java | 2 +- .../me/realized/duels/kit/KitManager.java | 7 +- .../me/realized/duels/logging/LogManager.java | 11 +- .../duels/player/PlayerInfoManager.java | 4 +- .../me/realized/duels/queue/QueueManager.java | 124 +++++++++++++---- .../duels/request/RequestManager.java | 15 +- .../me/realized/duels/setting/CachedInfo.java | 29 ++++ .../me/realized/duels/setting/Settings.java | 38 +++-- .../duels/spectate/SpectateManager.java | 12 +- .../main/java/me/realized/duels/util/Log.java | 36 +++-- .../me/realized/duels/util/TextBuilder.java | 48 ++++++- .../me/realized/duels/util/VersionUtil.java | 12 ++ .../duels/util/compat/CompatUtil.java | 18 ++- .../me/realized/duels/util/compat/Items.java | 44 ++++++ .../realized/duels/util/compat/Players.java | 2 +- .../realized/duels/util/compat/Potions.java | 18 ++- .../realized/duels/util/compat/SpawnEggs.java | 4 +- .../util/config/AbstractConfiguration.java | 4 +- .../me/realized/duels/util/gui/Button.java | 4 +- .../realized/duels/util/gui/MultiPageGui.java | 5 +- .../duels/util/inventory/ItemBuilder.java | 19 ++- duels-plugin/src/main/resources/config.yml | 31 ++++- duels-plugin/src/main/resources/lang.yml | 19 ++- duels-plugin/src/main/resources/plugin.yml | 3 +- libs/SimpleClans.jar | Bin 0 -> 276450 bytes 69 files changed, 1270 insertions(+), 318 deletions(-) delete mode 100644 duels-api/src/main/java/me/realized/duels/api/util/Pair.java create mode 100644 duels-plugin/src/main/java/me/realized/duels/extension/ExtensionClassLoader.java create mode 100644 duels-plugin/src/main/java/me/realized/duels/extension/ExtensionInfo.java create mode 100644 duels-plugin/src/main/java/me/realized/duels/hooks/SimpleClansHook.java create mode 100644 duels-plugin/src/main/java/me/realized/duels/setting/CachedInfo.java create mode 100644 duels-plugin/src/main/java/me/realized/duels/util/VersionUtil.java create mode 100644 duels-plugin/src/main/java/me/realized/duels/util/compat/Items.java create mode 100644 libs/SimpleClans.jar diff --git a/build.gradle b/build.gradle index 5a199275..dd245375 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { allprojects { group 'me.realized' - version '3.0.5-SNAPSHOT' + version '3.1.0' } subprojects { @@ -66,6 +66,6 @@ subprojects { dependencies { compile 'org.projectlombok:lombok:1.16.20' compile 'com.google.code.findbugs:jsr305:3.0.2' - compile 'org.spigotmc:spigot-api:1.12.2-R0.1-SNAPSHOT' + compile 'org.spigotmc:spigot-api:1.13-R0.1-SNAPSHOT' } } diff --git a/duels-api/src/main/java/me/realized/duels/api/Duels.java b/duels-api/src/main/java/me/realized/duels/api/Duels.java index 61d3acc3..60ebbc87 100644 --- a/duels-api/src/main/java/me/realized/duels/api/Duels.java +++ b/duels-api/src/main/java/me/realized/duels/api/Duels.java @@ -1,20 +1,24 @@ package me.realized.duels.api; import javax.annotation.Nonnull; +import lombok.NonNull; import me.realized.duels.api.arena.ArenaManager; import me.realized.duels.api.command.SubCommand; import me.realized.duels.api.kit.KitManager; import me.realized.duels.api.user.UserManager; import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitTask; public interface Duels extends Plugin { @Nonnull UserManager getUserManager(); + @Nonnull ArenaManager getArenaManager(); + @Nonnull KitManager getKitManager(); @@ -33,4 +37,101 @@ public interface Duels extends Plugin { * @return true if reload was successful, otherwise false */ boolean reload(); + + + /** + * Runs the task on server thread. + * + * @param task Task to run + * @return BukkitTask executed + * @since 3.1.0 + */ + BukkitTask doSync(@NonNull final Runnable task); + + + /** + * Runs the task after delay on server thread. + * + * @param task Task to run + * @param delay time to delay. 20L = 1s + * @return BukkitTask executed + * @since 3.1.0 + */ + BukkitTask doSyncAfter(@NonNull final Runnable task, long delay); + + + /** + * Runs the task after delay on server thread repeatedly. + * + * @param task Task to run + * @param delay time to delay the start of repeat. 20L = 1s + * @param interval interval of this task. 20L = 1s + * @return BukkitTask executed + * @since 3.1.0 + */ + BukkitTask doSyncRepeat(@NonNull final Runnable task, long delay, long interval); + + + /** + * Runs the task asynchronously. + * + * @param task Task to run asynchronously + * @return BukkitTask executed + * @since 3.1.0 + */ + BukkitTask doAsync(@NonNull final Runnable task); + + + /** + * Runs the task after delay asynchronously. + * + * @param task Task to run asynchronously + * @param delay time to delay. 20L = 1s + * @return BukkitTask executed + * @since 3.1.0 + */ + BukkitTask doAsyncAfter(@NonNull final Runnable task, long delay); + + + /** + * Runs the task after delay asynchronously repeatedly. + * + * @param task Task to run asynchronously + * @param delay time to delay the start of repeat. 20L = 1s + * @param interval interval of this task. 20L = 1s + * @return BukkitTask executed + * @since 3.1.0 + */ + BukkitTask doAsyncRepeat(@NonNull final Runnable task, long delay, long interval); + + + /** + * @param message message to log + */ + void info(@NonNull final String message); + + + /** + * @param message message to log + */ + void warn(@NonNull final String message); + + + /** + * @param message message to log + */ + void error(@NonNull final String message); + + + /** + * @param message message to log + */ + void error(@NonNull final String message, @NonNull Throwable thrown); + + + /** + * @return version of the plugin + * @since 3.1.0 + */ + String getVersion(); } diff --git a/duels-api/src/main/java/me/realized/duels/api/extension/DuelsExtension.java b/duels-api/src/main/java/me/realized/duels/api/extension/DuelsExtension.java index 9f6a193a..5b6f391e 100644 --- a/duels-api/src/main/java/me/realized/duels/api/extension/DuelsExtension.java +++ b/duels-api/src/main/java/me/realized/duels/api/extension/DuelsExtension.java @@ -1,28 +1,51 @@ package me.realized.duels.api.extension; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Objects; +import java.util.logging.Level; +import javax.annotation.Nullable; import lombok.Getter; +import lombok.NonNull; import me.realized.duels.api.Duels; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; public abstract class DuelsExtension { protected Duels api; - @Getter - private boolean enabled; + private String name; @Getter private File folder; @Getter private File file; + @Getter + private File dataFolder; - final void init(final Duels api, final File folder, final File file) { + @Getter + private boolean enabled; + + private File configFile; + private FileConfiguration config; + + final void init(final Duels api, final String name, final File folder, final File file) { this.api = api; + this.name = name; this.folder = folder; this.file = file; + this.dataFolder = new File(folder, name); + this.configFile = new File(dataFolder, "config.yml"); } + @NonNull public final String getName() { - return getClass().getSimpleName(); + return name; } public final void setEnabled(final boolean enabled) { @@ -39,7 +62,90 @@ public final void setEnabled(final boolean enabled) { this.enabled = enabled; } + public void saveResource(@NonNull String resourcePath) { + Objects.requireNonNull(resourcePath, "resourcePath"); + resourcePath = resourcePath.replace('\\', '/'); + + try (InputStream in = getResource(resourcePath)) { + if (in == null) { + throw new IllegalArgumentException("The embedded resource '" + resourcePath + "' cannot be found in " + file); + } + + if (!dataFolder.exists()) { + dataFolder.mkdir(); + } + + final File outFile = new File(dataFolder, resourcePath); + int lastIndex = resourcePath.lastIndexOf('/'); + File outDir = new File(dataFolder, resourcePath.substring(0, lastIndex >= 0 ? lastIndex : 0)); + + if (!outDir.exists()) { + outDir.mkdirs(); + } + + try (OutputStream out = new FileOutputStream(outFile)) { + final byte[] buf = new byte[1024]; + int len; + + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + } + } catch (IOException ex) { + api.error("Could not save resource '" + resourcePath + "'", ex); + } + } + + @Nullable + public InputStream getResource(@NonNull final String filename) { + Objects.requireNonNull(filename, "filename"); + + try { + final URL url = getClass().getClassLoader().getResource(filename); + + if (url == null) { + return null; + } + + final URLConnection connection = url.openConnection(); + connection.setUseCaches(false); + return connection.getInputStream(); + } catch (IOException ex) { + api.error("Could not find resource with filename '" + filename + "'", ex); + return null; + } + } + + public FileConfiguration getConfig() { + if (config == null) { + reloadConfig(); + } + + return config; + } + + public void reloadConfig() { + if (!configFile.exists()) { + saveResource("config.yml"); + } + + config = YamlConfiguration.loadConfiguration(configFile); + } + + public void saveConfig() { + try { + getConfig().save(configFile); + } catch (IOException ex) { + api.error("Failed to save config", ex); + } + } + public void onEnable() {} public void onDisable() {} + + @Nullable + public String getRequiredVersion() { + return null; + } } diff --git a/duels-api/src/main/java/me/realized/duels/api/kit/KitManager.java b/duels-api/src/main/java/me/realized/duels/api/kit/KitManager.java index f1f391c2..1b408fcd 100644 --- a/duels-api/src/main/java/me/realized/duels/api/kit/KitManager.java +++ b/duels-api/src/main/java/me/realized/duels/api/kit/KitManager.java @@ -1,5 +1,6 @@ package me.realized.duels.api.kit; +import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; import me.realized.duels.api.event.kit.KitCreateEvent; @@ -46,4 +47,11 @@ public interface KitManager { */ @Nullable Kit remove(@Nonnull final String name); + + + /** + * @return List of kits that are currently loaded + * @since 3.1.0 + */ + List getKits(); } diff --git a/duels-api/src/main/java/me/realized/duels/api/match/Match.java b/duels-api/src/main/java/me/realized/duels/api/match/Match.java index 4455583d..e138e411 100644 --- a/duels-api/src/main/java/me/realized/duels/api/match/Match.java +++ b/duels-api/src/main/java/me/realized/duels/api/match/Match.java @@ -1,6 +1,7 @@ package me.realized.duels.api.match; import java.util.List; +import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; import me.realized.duels.api.arena.Arena; @@ -45,4 +46,11 @@ public interface Match { */ int getBet(); + + /** + * @return UnmodifiableSet of alive players in this match + * @since 3.1.0 + */ + Set getPlayers(); + } diff --git a/duels-api/src/main/java/me/realized/duels/api/user/UserManager.java b/duels-api/src/main/java/me/realized/duels/api/user/UserManager.java index 23978bf5..d28c8508 100644 --- a/duels-api/src/main/java/me/realized/duels/api/user/UserManager.java +++ b/duels-api/src/main/java/me/realized/duels/api/user/UserManager.java @@ -1,12 +1,12 @@ package me.realized.duels.api.user; import java.util.List; +import java.util.Objects; import java.util.UUID; import javax.annotation.Nonnull; import javax.annotation.Nullable; import lombok.Getter; import me.realized.duels.api.kit.Kit; -import me.realized.duels.api.util.Pair; import org.bukkit.entity.Player; public interface UserManager { @@ -80,15 +80,75 @@ class TopEntry { @Getter private final long creation; @Getter - private final String name, type; + private final String type, identifier; @Getter - private final List> data; + private final List data; - public TopEntry(final String name, final String type, final List> data) { + public TopEntry(final String type, final String identifier, final List data) { this.creation = System.currentTimeMillis(); - this.name = name; this.type = type; + this.identifier = identifier; this.data = data; } + + @Override + public boolean equals(final Object other) { + if (this == other) { + return true; + } + + if (other == null || getClass() != other.getClass()) { + return false; + } + + final TopEntry topEntry = (TopEntry) other; + return Objects.equals(type, topEntry.type) && Objects.equals(identifier, topEntry.identifier) && Objects.equals(data, topEntry.data); + } + + @Override + public int hashCode() { + return Objects.hash(type, identifier, data); + } + } + + class TopData implements Comparable { + + @Getter + private final UUID uuid; + @Getter + private final String name; + @Getter + private final int value; + + public TopData(final UUID uuid, final String name, final int value) { + this.uuid = uuid; + this.name = name; + this.value = value; + } + + @Override + public int compareTo(@Nonnull final TopData data) { + Objects.requireNonNull(data, "data"); + return Integer.compare(value, data.value); + } + + @Override + public boolean equals(final Object other) { + if (this == other) { + return true; + } + + if (other == null || getClass() != other.getClass()) { + return false; + } + + final TopData topData = (TopData) other; + return value == topData.value && Objects.equals(uuid, topData.uuid) && Objects.equals(name, topData.name); + } + + @Override + public int hashCode() { + return Objects.hash(uuid, name, value); + } } } diff --git a/duels-api/src/main/java/me/realized/duels/api/util/Pair.java b/duels-api/src/main/java/me/realized/duels/api/util/Pair.java deleted file mode 100644 index 46b112c1..00000000 --- a/duels-api/src/main/java/me/realized/duels/api/util/Pair.java +++ /dev/null @@ -1,27 +0,0 @@ -package me.realized.duels.api.util; - -import javax.annotation.Nonnull; -import lombok.Getter; - -public class Pair> implements Comparable> { - - @Getter - private final K key; - @Getter - private final V value; - - public Pair(final K key, final V value) { - this.key = key; - this.value = value; - } - - @Override - public int compareTo(@Nonnull final Pair other) { - return value.compareTo(other.value); - } - - @Override - public String toString() { - return "{key=" + key + ", value=" + value + "}"; - } -} diff --git a/duels-plugin/build.gradle b/duels-plugin/build.gradle index 0dda6ea6..40b355d7 100644 --- a/duels-plugin/build.gradle +++ b/duels-plugin/build.gradle @@ -29,6 +29,7 @@ dependencies { compile name: 'Factions' compile name: 'MyPet-2.3.4' compile name: 'BountyHunters' + compile name: 'SimpleClans' compile project(':duels-api') compile 'com.google.code.gson:gson:2.8.2' diff --git a/duels-plugin/src/main/java/me/realized/duels/DuelsPlugin.java b/duels-plugin/src/main/java/me/realized/duels/DuelsPlugin.java index 5d3f0a20..00a5de45 100644 --- a/duels-plugin/src/main/java/me/realized/duels/DuelsPlugin.java +++ b/duels-plugin/src/main/java/me/realized/duels/DuelsPlugin.java @@ -13,6 +13,7 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; import lombok.Getter; +import lombok.NonNull; import me.realized.duels.api.Duels; import me.realized.duels.api.command.SubCommand; import me.realized.duels.arena.ArenaManager; @@ -50,6 +51,7 @@ import me.realized.duels.util.gui.GuiListener; import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; import org.inventivetalent.update.spiget.SpigetUpdate; import org.inventivetalent.update.spiget.UpdateCallback; import org.inventivetalent.update.spiget.comparator.VersionComparator; @@ -206,9 +208,7 @@ private boolean load() { lastLoad = loadables.indexOf(loadable); } catch (Exception ex) { Log.error("There was an error while loading " + loadable.getClass().getSimpleName() - + "! If you believe this is an issue from the plugin, please contact the developer."); - Log.error("Cause of error: " + ex.getMessage()); - ex.printStackTrace(); + + "! If you believe this is an issue from the plugin, please contact the developer.", ex); return false; } } @@ -229,9 +229,7 @@ private boolean unload() { loadable.handleUnload(); } catch (Exception ex) { Log.error("There was an error while unloading " + loadable.getClass().getSimpleName() - + "! If you believe this is an issue from the plugin, please contact the developer."); - Log.error("Cause of error: " + ex.getMessage()); - ex.printStackTrace(); + + "! If you believe this is an issue from the plugin, please contact the developer.", ex); return false; } } @@ -254,7 +252,7 @@ public boolean registerSubCommand(@Nonnull final String command, @Nonnull final final AbstractCommand result = commands.get(command.toLowerCase()); - if (result == null || result.isChild(subCommand.getName())) { + if (result == null || result.isChild(subCommand.getName().toLowerCase())) { return false; } @@ -277,6 +275,11 @@ public boolean reload() { return true; } + @Override + public String getVersion() { + return getDescription().getVersion(); + } + public boolean reload(final Loadable loadable) { boolean unloaded = false; try { @@ -287,32 +290,70 @@ public boolean reload(final Loadable loadable) { } catch (Exception ex) { Log.error("There was an error while " + (unloaded ? "loading " : "unloading ") + loadable.getClass().getSimpleName() - + "! If you believe this is an issue from the plugin, please contact the developer."); - Log.error("Cause of error: " + ex.getMessage()); - ex.printStackTrace(); + + "! If you believe this is an issue from the plugin, please contact the developer.", ex); return false; } } + @Override + public BukkitTask doSync(@NonNull final Runnable task) { + Objects.requireNonNull(task, "task"); + return getServer().getScheduler().runTask(this, task); + } - public void doSync(final Runnable runnable) { - getServer().getScheduler().runTask(this, runnable); + @Override + public BukkitTask doSyncAfter(@NonNull final Runnable task, final long delay) { + Objects.requireNonNull(task, "task"); + return getServer().getScheduler().runTaskLater(this, task, delay); } - public void doSyncAfter(final Runnable runnable, final long delay) { - getServer().getScheduler().runTaskLater(this, runnable, delay); + @Override + public BukkitTask doSyncRepeat(@NonNull final Runnable task, final long delay, final long period) { + Objects.requireNonNull(task, "task"); + return getServer().getScheduler().runTaskTimer(this, task, delay, period); } - public int doSyncRepeat(final Runnable runnable, final long delay, final long period) { - return getServer().getScheduler().runTaskTimer(this, runnable, delay, period).getTaskId(); + @Override + public BukkitTask doAsync(@NonNull final Runnable task) { + Objects.requireNonNull(task, "task"); + return getServer().getScheduler().runTaskAsynchronously(this, task); + } + + @Override + public BukkitTask doAsyncAfter(@NonNull final Runnable task, final long delay) { + Objects.requireNonNull(task, "task"); + return getServer().getScheduler().runTaskLaterAsynchronously(this, task, delay); } - public void doAsync(final Runnable runnable) { - getServer().getScheduler().runTaskAsynchronously(this, runnable); + @Override + public BukkitTask doAsyncRepeat(@NonNull final Runnable task, final long delay, final long period) { + Objects.requireNonNull(task, "task"); + return getServer().getScheduler().runTaskTimerAsynchronously(this, task, delay, period); } - public void doAsyncRepeat(final Runnable runnable, final long delay, final long period) { - getServer().getScheduler().runTaskTimerAsynchronously(this, runnable, delay, period); + @Override + public void info(@NonNull final String message) { + Objects.requireNonNull(message, "message"); + Log.info(message); + } + + @Override + public void warn(@NonNull final String message) { + Objects.requireNonNull(message, "message"); + Log.warn(message); + } + + @Override + public void error(@NonNull final String message) { + Objects.requireNonNull(message, "message"); + Log.error(message); + } + + @Override + public void error(@NonNull final String message, @NonNull final Throwable thrown) { + Objects.requireNonNull(message, "message"); + Objects.requireNonNull(thrown, "thrown"); + Log.error(message, thrown); } public void cancelTask(final int taskId) { @@ -334,4 +375,9 @@ public List getReloadables() { public void log(final Level level, final String s) { getLogger().log(level, s); } + + @Override + public void log(final Level level, final String s, final Throwable thrown) { + getLogger().log(level, s, thrown); + } } diff --git a/duels-plugin/src/main/java/me/realized/duels/api/DuelsAPI.java b/duels-plugin/src/main/java/me/realized/duels/api/DuelsAPI.java index ec9a7cc7..cf386f21 100644 --- a/duels-plugin/src/main/java/me/realized/duels/api/DuelsAPI.java +++ b/duels-plugin/src/main/java/me/realized/duels/api/DuelsAPI.java @@ -44,10 +44,10 @@ public static boolean isInMatch(Player player) { /** - * @deprecated As of v3.0.0, get the version from {@link Duels#getDescription()} instead. + * @deprecated As of v3.0.0, get the version from {@link Duels#getVersion()} instead. */ @Deprecated public static String getVersion() { - return DuelsPlugin.getInstance().getDescription().getVersion(); + return DuelsPlugin.getInstance().getVersion(); } } \ No newline at end of file diff --git a/duels-plugin/src/main/java/me/realized/duels/arena/Arena.java b/duels-plugin/src/main/java/me/realized/duels/arena/Arena.java index 2371a3f0..fe9e309f 100644 --- a/duels-plugin/src/main/java/me/realized/duels/arena/Arena.java +++ b/duels-plugin/src/main/java/me/realized/duels/arena/Arena.java @@ -2,6 +2,7 @@ import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -22,9 +23,9 @@ import me.realized.duels.gui.BaseButton; import me.realized.duels.kit.Kit; import me.realized.duels.setting.Settings; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -45,7 +46,7 @@ public class Arena extends BaseButton implements me.realized.duels.api.arena.Are public Arena(final DuelsPlugin plugin, final String name) { super(plugin, ItemBuilder - .of(Material.EMPTY_MAP) + .of(Items.EMPTY_MAP) .name(plugin.getLang().getMessage("GUI.arena-selector.buttons.arena.name", "name", name)) .lore(plugin.getLang().getMessage("GUI.arena-selector.buttons.arena.lore-unavailable").split("\n")) .build() @@ -162,15 +163,21 @@ public void remove(final Player player) { } public int size() { - return isUsed() ? (int) match.getPlayerMap().entrySet().stream().filter(entry -> !entry.getValue()).count() : 0; + return isUsed() ? match.getAllPlayers().size() : 0; } public Player first() { - return isUsed() ? match.getPlayerMap().entrySet().stream().filter(entry -> !entry.getValue()).findFirst().map(Entry::getKey).orElse(null) : null; + return isUsed() ? match.getAlivePlayers().iterator().next() : null; } public Set getPlayers() { - return isUsed() ? match.getPlayers() : Collections.emptySet(); + return isUsed() ? match.getAllPlayers() : Collections.emptySet(); + } + + public void broadcast(final String message) { + final Set receivers = new HashSet<>(getPlayers()); + receivers.addAll(spectateManager.getSpectators(this)); + receivers.forEach(player -> player.sendMessage(message)); } @Override diff --git a/duels-plugin/src/main/java/me/realized/duels/arena/Match.java b/duels-plugin/src/main/java/me/realized/duels/arena/Match.java index db912b9c..433f0047 100644 --- a/duels-plugin/src/main/java/me/realized/duels/arena/Match.java +++ b/duels-plugin/src/main/java/me/realized/duels/arena/Match.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; import java.util.Set; import java.util.UUID; @@ -43,7 +44,11 @@ Map getPlayerMap() { return players; } - public Set getPlayers() { + Set getAlivePlayers() { + return players.entrySet().stream().filter(entry -> !entry.getValue()).map(Entry::getKey).collect(Collectors.toSet()); + } + + public Set getAllPlayers() { return players.keySet(); } @@ -51,6 +56,10 @@ public boolean isDead(final Player player) { return players.getOrDefault(player, true); } + public List getItems() { + return items != null ? items.values().stream().flatMap(Collection::stream).collect(Collectors.toList()) : Collections.emptyList(); + } + @Override public List getItems(@Nonnull final Player player) { Objects.requireNonNull(player, "player"); @@ -63,7 +72,8 @@ public List getItems(@Nonnull final Player player) { return items != null ? items : Collections.emptyList(); } - public List getItems() { - return items != null ? items.values().stream().flatMap(Collection::stream).collect(Collectors.toList()) : Collections.emptyList(); + @Override + public Set getPlayers() { + return Collections.unmodifiableSet(getAlivePlayers()); } } diff --git a/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/DuelCommand.java b/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/DuelCommand.java index 1532be05..a4fc2229 100644 --- a/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/DuelCommand.java +++ b/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/DuelCommand.java @@ -74,7 +74,9 @@ protected boolean executeFirst(final CommandSender sender, final String label, f return true; } - if (config.isPreventCreativeMode() && player.getGameMode() == GameMode.CREATIVE) { + GameMode gameMode = null; + + if (config.isPreventCreativeMode() && (gameMode = player.getGameMode()) == GameMode.CREATIVE) { lang.sendMessage(sender, "ERROR.duel.in-creative-mode"); return true; } @@ -207,8 +209,9 @@ protected boolean executeFirst(final CommandSender sender, final String label, f } settings.setTarget(target); - settings.setDuelzone(player, duelzone); settings.setBaseLoc(player); + settings.setDuelzone(player, duelzone); + settings.setGameMode(player, gameMode); if (sendRequest) { requestManager.send(player, target, settings); diff --git a/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/subcommands/AcceptCommand.java b/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/subcommands/AcceptCommand.java index 35b67aff..6732e663 100644 --- a/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/subcommands/AcceptCommand.java +++ b/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/subcommands/AcceptCommand.java @@ -35,7 +35,9 @@ protected void execute(final CommandSender sender, final String label, final Str return; } - if (config.isPreventCreativeMode() && player.getGameMode() == GameMode.CREATIVE) { + GameMode gameMode = null; + + if (config.isPreventCreativeMode() && (gameMode = player.getGameMode()) == GameMode.CREATIVE) { lang.sendMessage(sender, "ERROR.duel.in-creative-mode"); return; } @@ -97,8 +99,9 @@ protected void execute(final CommandSender sender, final String label, final Str "name", player.getName(), "kit", kit, "arena", arena, "bet_amount", bet, "item_betting", itemBetting); if (settings.isItemBetting()) { - settings.setDuelzone(player, duelzone); settings.setBaseLoc(player); + settings.setDuelzone(player, duelzone); + settings.setGameMode(player, gameMode); bettingManager.open(settings, target, player); } else { duelManager.startMatch(player, target, settings, null, false); diff --git a/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/subcommands/TopCommand.java b/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/subcommands/TopCommand.java index 36dd8bd0..dd6dddaf 100644 --- a/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/subcommands/TopCommand.java +++ b/duels-plugin/src/main/java/me/realized/duels/command/commands/duel/subcommands/TopCommand.java @@ -2,8 +2,8 @@ import java.util.List; import me.realized.duels.DuelsPlugin; +import me.realized.duels.api.user.UserManager.TopData; import me.realized.duels.api.user.UserManager.TopEntry; -import me.realized.duels.api.util.Pair; import me.realized.duels.command.BaseCommand; import me.realized.duels.extra.Permissions; import me.realized.duels.kit.Kit; @@ -41,7 +41,7 @@ protected void execute(final CommandSender sender, final String label, final Str topEntry = userManager.getTopRatings().get(kit); } - final List> top; + final List top; if (topEntry == null || (top = topEntry.getData()).isEmpty()) { lang.sendMessage(sender, "ERROR.top.no-data-available"); @@ -49,14 +49,14 @@ protected void execute(final CommandSender sender, final String label, final Str } lang.sendMessage(sender, "COMMAND.duel.top.next-update", "remaining", userManager.getNextUpdate(topEntry.getCreation())); - lang.sendMessage(sender, "COMMAND.duel.top.header", "type", topEntry.getName()); + lang.sendMessage(sender, "COMMAND.duel.top.header", "type", topEntry.getType()); for (int i = 0; i < top.size(); i++) { - final Pair entry = top.get(i); + final TopData data = top.get(i); lang.sendMessage(sender, "COMMAND.duel.top.display-format", - "rank", i + 1, "name", entry.getKey(), "score", entry.getValue(), "identifier", topEntry.getType()); + "rank", i + 1, "name", data.getName(), "score", data.getValue(), "identifier", topEntry.getIdentifier()); } - lang.sendMessage(sender, "COMMAND.duel.top.footer", "type", topEntry.getName()); + lang.sendMessage(sender, "COMMAND.duel.top.footer", "type", topEntry.getType()); } } diff --git a/duels-plugin/src/main/java/me/realized/duels/config/Config.java b/duels-plugin/src/main/java/me/realized/duels/config/Config.java index f9a30da8..716d7ec5 100644 --- a/duels-plugin/src/main/java/me/realized/duels/config/Config.java +++ b/duels-plugin/src/main/java/me/realized/duels/config/Config.java @@ -46,6 +46,8 @@ public class Config extends AbstractConfiguration { private boolean myPetDespawn; @Getter private boolean preventBountyLoss; + @Getter + private boolean preventAddDeath; @Getter private boolean requiresClearedInventory; @@ -95,6 +97,12 @@ public class Config extends AbstractConfiguration { @Getter private int teleportDelay; @Getter + private boolean spawnFirework; + @Getter + private boolean arenaOnlyEndMessage; + @Getter + private boolean displayInventories; + @Getter private boolean preventItemDrop; @Getter private boolean preventItemPickup; @@ -145,6 +153,18 @@ public class Config extends AbstractConfiguration { @Getter private long topUpdateInterval; + @Getter + private String topWinsType; + @Getter + private String topWinsIdentifier; + @Getter + private String topLossesType; + @Getter + private String topLossesIdentifier; + @Getter + private String topKitType; + @Getter + private String topKitIdentifier; @Getter private int kitSelectorRows; @@ -186,7 +206,7 @@ protected void loadValues(FileConfiguration configuration) throws Exception { duelzones = configuration.getStringList("supported-plugins.WorldGuard.duelzone.regions"); myPetDespawn = configuration.getBoolean("supported-plugins.MyPet.despawn-pet-in-duel", false); preventBountyLoss = configuration.getBoolean("supported-plugins.BountyHunters.prevent-bounty-loss-in-duel", true); - + preventAddDeath = configuration.getBoolean("supported-plugins.SimpleClans.prevent-add-death-in-duel", true); requiresClearedInventory = configuration.getBoolean("request.requires-cleared-inventory", true); preventCreativeMode = configuration.getBoolean("request.prevent-creative-mode", false); arenaSelectingEnabled = configuration.getBoolean("request.arena-selecting.enabled", true); @@ -211,6 +231,9 @@ protected void loadValues(FileConfiguration configuration) throws Exception { cancelIfMoved = configuration.getBoolean("duel.cancel-if-moved", false); teleportToLastLocation = configuration.getBoolean("duel.teleport-to-last-location", false); teleportDelay = configuration.getInt("duel.teleport-delay", 5); + spawnFirework = configuration.getBoolean("duel.spawn-firework", true); + arenaOnlyEndMessage = configuration.getBoolean("duel.arena-only-end-message", false); + displayInventories = configuration.getBoolean("duel.display-inventories", true); preventItemDrop = configuration.getBoolean("duel.prevent-item-drop", false); preventItemPickup = configuration.getBoolean("duel.prevent-item-pickup", true); limitTeleportEnabled = configuration.getBoolean("duel.limit-teleportation.enabled", true); @@ -239,6 +262,12 @@ protected void loadValues(FileConfiguration configuration) throws Exception { matchesToDisplay = Math.max(configuration.getInt("stats.matches-to-display", 10), 0); topUpdateInterval = Math.max(configuration.getInt("top.update-interval", 5), 1) * 60L * 1000L; + topWinsType = configuration.getString("top.displayed-replacers.wins.type", "Wins"); + topWinsIdentifier = configuration.getString("top.displayed-replacers.wins.identifier", "wins"); + topLossesType = configuration.getString("top.displayed-replacers.losses.type", "Losses"); + topLossesIdentifier = configuration.getString("top.displayed-replacers.losses.identifier", "losses"); + topKitType = configuration.getString("top.displayed-replacers.kit.type", "%kit%"); + topKitIdentifier = configuration.getString("top.displayed-replacers.kit.identifier", "rating"); kitSelectorRows = Math.min(Math.max(configuration.getInt("guis.kit-selector.rows", 2), 1), 5); arenaSelectorRows = Math.min(Math.max(configuration.getInt("guis.arena-selector.rows", 3), 1), 5); diff --git a/duels-plugin/src/main/java/me/realized/duels/config/Lang.java b/duels-plugin/src/main/java/me/realized/duels/config/Lang.java index 24199ee1..6f40db5b 100644 --- a/duels-plugin/src/main/java/me/realized/duels/config/Lang.java +++ b/duels-plugin/src/main/java/me/realized/duels/config/Lang.java @@ -1,6 +1,6 @@ package me.realized.duels.config; -import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -92,14 +92,14 @@ public void sendMessage(final CommandSender receiver, final String key, final Ob receiver.sendMessage(StringUtil.color(replace(message, replacers))); } - public void sendMessage(final String key, final CommandSender... receivers) { - final String message = getMessage(key); + public void sendMessage(final Collection players, final String key, final Object... replacers) { + final String message = getMessage(key, replacers); if (message == null) { return; } - Arrays.stream(receivers).forEach(receiver -> receiver.sendMessage(StringUtil.color(message))); + players.forEach(player -> player.sendMessage(message)); } private String getRawMessage(final String key) { diff --git a/duels-plugin/src/main/java/me/realized/duels/data/ItemData.java b/duels-plugin/src/main/java/me/realized/duels/data/ItemData.java index e6a1cbe5..4848b82e 100644 --- a/duels-plugin/src/main/java/me/realized/duels/data/ItemData.java +++ b/duels-plugin/src/main/java/me/realized/duels/data/ItemData.java @@ -2,12 +2,14 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import me.realized.duels.util.StringUtil; import me.realized.duels.util.compat.Attributes; import me.realized.duels.util.compat.CompatUtil; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.compat.Potions; import me.realized.duels.util.compat.Potions.PotionType; import me.realized.duels.util.compat.SpawnEggs; @@ -71,21 +73,23 @@ public ItemData(final ItemStack item) { + (potion.isSplash() ? "splash-" : "") + (potion.isStrong() ? "strong-" : ""); } - } else if (material.equals("MONSTER_EGG")) { + } else if (CompatUtil.isPre_1_13() && material.equals("MONSTER_EGG")) { final SpawnEggs spawnEgg = SpawnEggs.fromItemStack(item); if (spawnEgg != null) { this.itemData = spawnEgg.getType().name() + "-"; } - } else if (material.equals("TIPPED_ARROW")) { - final PotionMeta meta = (PotionMeta) item.getItemMeta(); - final PotionData potionData = meta.getBasePotionData(); - - if (potionData.getType().getEffectType() != null) { - this.itemData = potionData.getType().name() + "-" - + (potionData.isExtended() ? "extended-" : "") - + (potionData.isUpgraded() ? "upgraded-" : ""); - } + } + } + + if (material.equals("TIPPED_ARROW")) { + final PotionMeta meta = (PotionMeta) item.getItemMeta(); + final PotionData potionData = meta.getBasePotionData(); + + if (potionData.getType().getEffectType() != null) { + this.itemData = potionData.getType().name() + "-" + + (potionData.isExtended() ? "extended-" : "") + + (potionData.isUpgraded() ? "upgraded-" : ""); } } @@ -116,7 +120,7 @@ public ItemData(final ItemStack item) { } } - if (item.getType() == Material.SKULL_ITEM && item.getDurability() == 3) { + if (Items.equals(Items.HEAD, item)) { final SkullMeta skullMeta = (SkullMeta) meta; if (skullMeta.hasOwner()) { @@ -179,21 +183,23 @@ public ItemStack toItemStack() { item = new Attributes(item).addModifiers(attributeModifiers); } - if (!CompatUtil.isPre1_9() && itemData != null) { - final List args = Arrays.asList(itemData.split("-")); + final List args = itemData != null ? Arrays.asList(itemData.split("-")) : Collections.emptyList(); + if (!CompatUtil.isPre1_9() && itemData != null) { if (material.contains("POTION")) { item = new Potions(PotionType.valueOf(args.get(0)), args).toItemStack(amount); - } else if (material.equals("MONSTER_EGG")) { + } else if (CompatUtil.isPre_1_13() && material.equals("MONSTER_EGG")) { item = new SpawnEggs(EntityType.valueOf(args.get(0))).toItemStack(amount); - } else if (material.equals("TIPPED_ARROW")) { - final PotionMeta potionMeta = (PotionMeta) item.getItemMeta(); - final PotionData data = new PotionData(org.bukkit.potion.PotionType.valueOf(args.get(0)), args.contains("extended"), args.contains("upgraded")); - potionMeta.setBasePotionData(data); - item.setItemMeta(potionMeta); } } + if (material.equals("TIPPED_ARROW")) { + final PotionMeta potionMeta = (PotionMeta) item.getItemMeta(); + final PotionData data = new PotionData(org.bukkit.potion.PotionType.valueOf(args.get(0)), args.contains("extended"), args.contains("upgraded")); + potionMeta.setBasePotionData(data); + item.setItemMeta(potionMeta); + } + if (enchantments != null && !enchantments.isEmpty()) { for (final Map.Entry entry : enchantments.entrySet()) { item.addUnsafeEnchantment(Enchantment.getByName(entry.getKey()), entry.getValue()); @@ -216,7 +222,7 @@ public ItemStack toItemStack() { } } - if (item.getType() == Material.SKULL_ITEM && item.getDurability() == 3 && owner != null) { + if (owner != null && Items.equals(Items.HEAD, item)) { final SkullMeta skullMeta = (SkullMeta) meta; skullMeta.setOwner(owner); } diff --git a/duels-plugin/src/main/java/me/realized/duels/data/UserData.java b/duels-plugin/src/main/java/me/realized/duels/data/UserData.java index afe85d11..7a1ff28b 100644 --- a/duels-plugin/src/main/java/me/realized/duels/data/UserData.java +++ b/duels-plugin/src/main/java/me/realized/duels/data/UserData.java @@ -170,8 +170,7 @@ public void trySave() { writer.flush(); } } catch (IOException ex) { - ex.printStackTrace(); - Log.error("An error occured while saving userdata of " + name + ": " + ex.getMessage()); + Log.error("An error occured while saving userdata of " + name + "!", ex); } } diff --git a/duels-plugin/src/main/java/me/realized/duels/data/UserManager.java b/duels-plugin/src/main/java/me/realized/duels/data/UserManager.java index 56716652..84bd82c3 100644 --- a/duels-plugin/src/main/java/me/realized/duels/data/UserManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/data/UserManager.java @@ -23,7 +23,6 @@ import me.realized.duels.api.event.user.UserCreateEvent; import me.realized.duels.api.kit.Kit; import me.realized.duels.api.user.User; -import me.realized.duels.api.util.Pair; import me.realized.duels.config.Config; import me.realized.duels.config.Lang; import me.realized.duels.extra.Permissions; @@ -115,7 +114,7 @@ public void handleLoad() { names.putIfAbsent(user.getName().toLowerCase(), uuid); users.putIfAbsent(uuid, user); } catch (IOException ex) { - Log.error("Failed to load data of " + uuid + ": " + ex.getMessage()); + Log.error(this, "Failed to load data of " + uuid + "!", ex); } } } @@ -133,11 +132,11 @@ public void handleLoad() { TopEntry top; - if ((top = get(config.getTopUpdateInterval(), wins, User::getWins, "Wins", "wins")) != null) { + if ((top = get(config.getTopUpdateInterval(), wins, User::getWins, config.getTopWinsType(), config.getTopWinsIdentifier())) != null) { wins = top; } - if ((top = get(config.getTopUpdateInterval(), losses, User::getLosses, "Losses", "losses")) != null) { + if ((top = get(config.getTopUpdateInterval(), losses, User::getLosses, config.getTopLossesType(), config.getTopLossesIdentifier())) != null) { losses = top; } @@ -146,12 +145,13 @@ public void handleLoad() { for (final Kit kit : kits) { final TopEntry entry = topRatings.get(kit); - if ((top = get(config.getTopUpdateInterval(), entry, user -> user.getRating(kit), kit.getName(), "rating")) != null) { + if ((top = get(config.getTopUpdateInterval(), entry, user -> user.getRating(kit), + config.getTopKitType().replace("%kit%", kit.getName()), config.getTopKitIdentifier())) != null) { topRatings.put(kit, top); } } }); - }, 20L * 5, 20L); + }, 20L * 5, 20L).getTaskId(); } @Override @@ -185,11 +185,13 @@ public UserData get(@Nonnull final Player player) { return get(player.getUniqueId()); } + @Nullable @Override public TopEntry getTopWins() { return wins; } + @Nullable @Override public TopEntry getTopLosses() { return losses; @@ -206,21 +208,21 @@ public String getNextUpdate(final long creation) { return DateUtil.format((creation + config.getTopUpdateInterval() - System.currentTimeMillis()) / 1000L); } - private TopEntry get(final long interval, final TopEntry previous, final Function function, final String name, final String type) { + private TopEntry get(final long interval, final TopEntry previous, final Function function, final String type, final String identifier) { if (previous == null || System.currentTimeMillis() - previous.getCreation() >= interval) { - return new TopEntry(name, type, subList(sorted(function))); + return new TopEntry(type, identifier, subList(sorted(function))); } return null; } - private List> subList(final List> list) { + private List subList(final List list) { return Collections.unmodifiableList(Lists.newArrayList(list.size() > 10 ? list.subList(0, 10) : list)); } - private > List> sorted(final Function function) { + private List sorted(final Function function) { return users.values().stream() - .map(data -> new Pair<>(data.getName(), function.apply(data))) + .map(data -> new TopData(data.getUuid(), data.getName(), function.apply(data))) .sorted(Comparator.reverseOrder()) .collect(Collectors.toList()); } @@ -248,8 +250,7 @@ private UserData tryLoad(final Player player) { return user; } catch (IOException ex) { - ex.printStackTrace(); - Log.error("An error occured while loading userdata of " + player.getName() + ": " + ex.getMessage()); + Log.error(this, "An error occured while loading userdata of " + player.getName() + "!", ex); return null; } } diff --git a/duels-plugin/src/main/java/me/realized/duels/duel/DuelManager.java b/duels-plugin/src/main/java/me/realized/duels/duel/DuelManager.java index 64620c82..f2b800c7 100644 --- a/duels-plugin/src/main/java/me/realized/duels/duel/DuelManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/duel/DuelManager.java @@ -25,6 +25,7 @@ import me.realized.duels.hooks.EssentialsHook; import me.realized.duels.hooks.McMMOHook; import me.realized.duels.hooks.MyPetHook; +import me.realized.duels.hooks.SimpleClansHook; import me.realized.duels.hooks.VaultHook; import me.realized.duels.hooks.WorldGuardHook; import me.realized.duels.inventories.InventoryManager; @@ -45,6 +46,7 @@ import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.FireworkEffect; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.EntityType; import org.bukkit.entity.Firework; @@ -83,6 +85,7 @@ public class DuelManager implements Loadable { private McMMOHook mcMMO; private WorldGuardHook worldGuard; private MyPetHook myPet; + private SimpleClansHook simpleClans; private int durationCheckTask; public DuelManager(final DuelsPlugin plugin) { @@ -105,6 +108,7 @@ public void handleLoad() { this.mcMMO = plugin.getHookManager().getHook(McMMOHook.class); this.worldGuard = plugin.getHookManager().getHook(WorldGuardHook.class); this.myPet = plugin.getHookManager().getHook(MyPetHook.class); + this.simpleClans = plugin.getHookManager().getHook(SimpleClansHook.class); if (config.getMaxDuration() > 0) { this.durationCheckTask = plugin.doSyncRepeat(() -> { @@ -117,14 +121,14 @@ public void handleLoad() { continue; } - for (final Player player : match.getPlayers()) { + for (final Player player : match.getAllPlayers()) { handleTiePlayer(player, arena, match, true); lang.sendMessage(player, "DUEL.on-end.tie"); } arena.endMatch(null, null, Reason.MAX_TIME_REACHED); } - }, 0L, 20L); + }, 0L, 20L).getTaskId(); } } @@ -143,7 +147,7 @@ public void handleUnload() { final boolean ongoing = size > 1; final boolean tie = size == 0; - for (final Player player : match.getPlayers()) { + for (final Player player : match.getAllPlayers()) { // This case wouldn't be called if ongoing = true if (match.isDead(player)) { continue; @@ -153,7 +157,7 @@ public void handleUnload() { if (ongoing) { handleTiePlayer(player, arena, match, true); } else if (!tie) { - handleWinner(player, getOther(player, match.getPlayers()), arena, match); + handleWinner(player, getOther(player, match.getAllPlayers()), arena, match); } } @@ -297,19 +301,25 @@ public void startMatch(final Player first, final Player second, final Settings s final Kit kit = settings.getKit(); if (!config.isUseOwnInventoryEnabled() && kit == null) { - lang.sendMessage("DUEL.start-failure.no-kit-selected", first, second); + lang.sendMessage(Arrays.asList(first, second), "DUEL.start-failure.no-kit-selected"); refundItems(items, first, second); return; } if (config.isCancelIfMoved() && (notInLoc(first, settings.getBaseLoc(first)) || notInLoc(second, settings.getBaseLoc(second)))) { - lang.sendMessage("DUEL.start-failure.player-moved", first, second); + lang.sendMessage(Arrays.asList(first, second), "DUEL.start-failure.player-moved"); refundItems(items, first, second); return; } if (config.isDuelzoneEnabled() && worldGuard != null && (notInDz(first, settings.getDuelzone(first)) || notInDz(second, settings.getDuelzone(second)))) { - lang.sendMessage("DUEL.start-failure.player-moved", first, second); + lang.sendMessage(Arrays.asList(first, second), "DUEL.start-failure.player-moved"); + refundItems(items, first, second); + return; + } + + if (config.isPreventCreativeMode() && (notNoCreative(first, settings.getGameMode(first)) || notNoCreative(second, settings.getGameMode(second)))) { + lang.sendMessage(Arrays.asList(first, second), "DUEL.start-failure.in-creative-mode"); refundItems(items, first, second); return; } @@ -317,7 +327,7 @@ public void startMatch(final Player first, final Player second, final Settings s final Arena arena = settings.getArena() != null ? settings.getArena() : arenaManager.randomArena(kit); if (arena == null || !arena.isAvailable() || (kit != null && kit.isArenaSpecific() && !kit.canUse(arena))) { - lang.sendMessage("DUEL.start-failure." + (settings.getArena() != null ? "arena-in-use" : "no-arena-available"), first, second); + lang.sendMessage(Arrays.asList(first, second), "DUEL.start-failure." + (settings.getArena() != null ? "arena-in-use" : "no-arena-available")); refundItems(items, first, second); return; } @@ -326,8 +336,7 @@ public void startMatch(final Player first, final Player second, final Settings s if (bet > 0 && vault != null && vault.getEconomy() != null) { if (!vault.has(bet, first, second)) { - lang.sendMessage(first, "DUEL.start-failure.not-enough-money", "bet_amount", bet); - lang.sendMessage(second, "DUEL.start-failure.not-enough-money", "bet_amount", bet); + lang.sendMessage(Arrays.asList(first, second), "DUEL.start-failure.not-enough-money", "bet_amount", bet); refundItems(items, first, second); return; } @@ -374,6 +383,10 @@ private boolean notInDz(final Player player, final String duelzone) { return duelzone != null && !duelzone.equals(worldGuard.findDuelZone(player)); } + private boolean notNoCreative(final Player player, final GameMode gameMode) { + return gameMode != null && player.getGameMode() != gameMode; + } + private int getRating(final Kit kit, final UserData user) { return kit != null && user != null ? user.getRating(kit) : config.getDefaultRating(); } @@ -429,12 +442,16 @@ private void addPlayers(final boolean fromQueue, final Arena arena, final Kit ki } private void handleInventories(final Match match) { + if (!config.isDisplayInventories()) { + return; + } + String color = lang.getMessage("DUEL.inventories.name-color"); color = color != null ? color : ""; boolean start = true; final TextBuilder builder = TextBuilder.of(lang.getMessage("DUEL.inventories.message")); - for (final Player matchPlayer : match.getPlayers()) { + for (final Player matchPlayer : match.getAllPlayers()) { if (!start) { builder.add(StringUtil.color(color + ", ")); } else { @@ -444,7 +461,7 @@ private void handleInventories(final Match match) { builder.add(StringUtil.color(color + matchPlayer.getName()), Action.RUN_COMMAND, "/duel _ " + matchPlayer.getUniqueId()); } - builder.send(match.getPlayers()); + builder.send(match.getAllPlayers()); } private void handleEndUsers(final Match match, final UserData winner, final UserData loser, final MatchData matchData, final Object... args) { @@ -468,7 +485,17 @@ private void handleEndUsers(final Match match, final UserData winner, final User append[5] = change; } - Bukkit.broadcastMessage(lang.getMessage("DUEL.on-end.opponent-defeat", ArrayUtils.addAll(args, append))); + final String message = lang.getMessage("DUEL.on-end.opponent-defeat", ArrayUtils.addAll(args, append)); + + if (message == null) { + return; + } + + if (config.isArenaOnlyEndMessage()) { + match.getArena().broadcast(message); + } else { + Players.getOnlinePlayers().forEach(player -> player.sendMessage(message)); + } } } @@ -520,10 +547,16 @@ public void on(final PlayerDeathEvent event) { mcMMO.enableSkills(player); } + if (simpleClans != null) { + simpleClans.removeDeath(player); + } + inventoryManager.create(player); - event.setKeepInventory(config.isUseOwnInventoryEnabled() && config.isUseOwnInventoryKeepItems()); - if (!config.isUseOwnInventoryEnabled()) { + final boolean keepItems = config.isUseOwnInventoryEnabled() && config.isUseOwnInventoryKeepItems(); + event.setKeepInventory(keepItems); + + if (!config.isUseOwnInventoryEnabled() || keepItems) { event.setKeepLevel(true); event.setDroppedExp(0); event.getDrops().clear(); @@ -544,7 +577,7 @@ public void on(final PlayerDeathEvent event) { } if (arena.size() == 0) { - match.getPlayers().forEach(matchPlayer -> { + match.getAllPlayers().forEach(matchPlayer -> { handleTiePlayer(matchPlayer, arena, match, false); lang.sendMessage(matchPlayer, "DUEL.on-end.tie"); }); @@ -556,10 +589,12 @@ public void on(final PlayerDeathEvent event) { final Player winner = arena.first(); inventoryManager.create(winner); - final Firework firework = (Firework) winner.getWorld().spawnEntity(winner.getEyeLocation(), EntityType.FIREWORK); - final FireworkMeta meta = firework.getFireworkMeta(); - meta.addEffect(FireworkEffect.builder().withColor(Color.RED).with(FireworkEffect.Type.BALL_LARGE).withTrail().build()); - firework.setFireworkMeta(meta); + if (config.isSpawnFirework()) { + final Firework firework = (Firework) winner.getWorld().spawnEntity(winner.getEyeLocation(), EntityType.FIREWORK); + final FireworkMeta meta = firework.getFireworkMeta(); + meta.addEffect(FireworkEffect.builder().withColor(Color.RED).with(FireworkEffect.Type.BALL_LARGE).withTrail().build()); + firework.setFireworkMeta(meta); + } final double health = Math.ceil(winner.getHealth()) * 0.5; final String kit = match.getKit() != null ? match.getKit().getName() : "none"; diff --git a/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionClassLoader.java b/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionClassLoader.java new file mode 100644 index 00000000..381a7371 --- /dev/null +++ b/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionClassLoader.java @@ -0,0 +1,130 @@ +package me.realized.duels.extension; + +import com.google.common.io.ByteStreams; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLClassLoader; +import java.security.CodeSigner; +import java.security.CodeSource; +import java.util.Enumeration; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.Manifest; +import lombok.Getter; +import me.realized.duels.api.extension.DuelsExtension; +import sun.misc.CompoundEnumeration; + +class ExtensionClassLoader extends URLClassLoader { + + private final JarFile jar; + private final Manifest manifest; + private final URL url; + private final Map> classes = new ConcurrentHashMap<>(); + + @Getter + private DuelsExtension extension; + @Getter + private ExtensionInfo info; + + ExtensionClassLoader(final File file, final ClassLoader parent) throws Exception { + super(new URL[] {file.toURI().toURL()}, parent); + this.jar = new JarFile(file); + this.manifest = jar.getManifest(); + this.url = file.toURI().toURL(); + + final JarEntry entry = jar.getJarEntry("extension.yml"); + + if (entry == null) { + throw new RuntimeException("No extension.yml found"); + } + + try (InputStream stream = jar.getInputStream(entry)) { + final ExtensionInfo info = new ExtensionInfo(stream); + Class mainClass = Class.forName(info.getMain(), true, this); + + if (!DuelsExtension.class.isAssignableFrom(mainClass)) { + throw new RuntimeException(mainClass.getName() + " does not extend DuelsExtension"); + } + + this.extension = mainClass.asSubclass(DuelsExtension.class).newInstance(); + this.info = info; + } + } + + protected Class findClass(final String name) throws ClassNotFoundException { + Class result = this.classes.get(name); + + if (result == null) { + final String path = name.replace('.', '/').concat(".class"); + final JarEntry entry = jar.getJarEntry(path); + + if (entry != null) { + final byte[] classBytes; + + try (InputStream inputStream = jar.getInputStream(entry)) { + classBytes = ByteStreams.toByteArray(inputStream); + } catch (IOException ex) { + throw new ClassNotFoundException(name, ex); + } + + final int dot = name.lastIndexOf('.'); + + if (dot != -1) { + final String pkgName = name.substring(0, dot); + + if (getPackage(pkgName) == null) { + try { + if (manifest != null) { + definePackage(pkgName, manifest, url); + } else { + definePackage(pkgName, null, null, null, null, null, null, null); + } + } catch (IllegalArgumentException ex) { + if (getPackage(pkgName) == null) { + throw new IllegalStateException("Cannot find package " + pkgName); + } + } + } + } + + final CodeSigner[] signers = entry.getCodeSigners(); + final CodeSource source = new CodeSource(url, signers); + result = defineClass(name, classBytes, 0, classBytes.length, source); + + if (result == null) { + result = super.findClass(name); + } + + classes.put(name, result); + } + } + + return result; + } + + @Override + public URL getResource(final String name) { + return findResource(name); + } + + @Override + public Enumeration getResources(final String name) throws IOException { + @SuppressWarnings("unchecked") + Enumeration[] tmp = (Enumeration[]) new Enumeration[2]; + tmp[1] = findResources(name); + return new CompoundEnumeration<>(tmp); + } + + @Override + public void close() throws IOException { + try { + super.close(); + } finally { + jar.close(); + } + } +} diff --git a/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionInfo.java b/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionInfo.java new file mode 100644 index 00000000..2984fe67 --- /dev/null +++ b/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionInfo.java @@ -0,0 +1,39 @@ +package me.realized.duels.extension; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; +import lombok.Getter; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +public class ExtensionInfo { + + @Getter + private final String name, version, main, description, website; + @Getter + private final List depends, authors; + + ExtensionInfo(final InputStream stream) throws Exception { + try (InputStreamReader reader = new InputStreamReader(stream)) { + final FileConfiguration config = YamlConfiguration.loadConfiguration(reader); + this.name = getOrThrow(config, "name"); + this.version = getOrThrow(config, "version"); + this.main = getOrThrow(config, "main"); + this.description = config.getString("description", "not specified"); + this.website = config.getString("description", "not specified"); + this.depends = config.getStringList("depends"); + this.authors = config.getStringList("authors"); + } + } + + private String getOrThrow(final FileConfiguration config, final String path) { + final String result = config.getString(path); + + if (result == null) { + throw new RuntimeException("No " + path + " specified in extension.yml"); + } + + return result; + } +} diff --git a/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionManager.java b/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionManager.java index 141ac174..cdd95451 100644 --- a/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/extension/ExtensionManager.java @@ -1,20 +1,15 @@ package me.realized.duels.extension; import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; import java.util.HashMap; import java.util.Map; -import java.util.jar.JarEntry; -import java.util.jar.JarInputStream; import me.realized.duels.DuelsPlugin; import me.realized.duels.api.Duels; import me.realized.duels.api.extension.DuelsExtension; import me.realized.duels.util.Loadable; import me.realized.duels.util.Log; +import me.realized.duels.util.VersionUtil; public class ExtensionManager implements Loadable { @@ -22,12 +17,13 @@ public class ExtensionManager implements Loadable { static { try { - INIT_EXTENSION = DuelsExtension.class.getDeclaredMethod("init", Duels.class, File.class, File.class); + INIT_EXTENSION = DuelsExtension.class.getDeclaredMethod("init", Duels.class, String.class, File.class, File.class); INIT_EXTENSION.setAccessible(true); } catch (NoSuchMethodException ignored) {} } private final Map extensions = new HashMap<>(); + private final Map info = new HashMap<>(); private final DuelsPlugin plugin; private final File folder; @@ -43,12 +39,7 @@ public ExtensionManager(final DuelsPlugin plugin) { @Override public void handleLoad() { - final FilenameFilter filter = (dir, name) -> { - int i = name.lastIndexOf('.'); - return i > 0 && name.substring(i).equals(".jar"); - }; - - File[] jars = folder.listFiles(filter); + final File[] jars = folder.listFiles((dir, name) -> name.endsWith(".jar")); if (jars == null) { return; @@ -56,33 +47,38 @@ public void handleLoad() { for (final File file : jars) { try { - final Class clazz = find(file); + final ExtensionClassLoader classLoader = new ExtensionClassLoader(file, DuelsExtension.class.getClassLoader()); + final DuelsExtension extension = classLoader.getExtension(); - if (clazz == null) { - Log.error("Could not load extension " + file.getName() + ": No class extending DuelsExtension found"); + if (extension == null) { + Log.error(this, "Could not load extension " + file.getName() + ": Failed to initiate main class"); continue; } - final DuelsExtension extension = clazz.newInstance(); - - if (extension == null) { - Log.error("Could not load extension " + file.getName() + ": Failed to instantiate " + clazz.getName()); + if (extension.getRequiredVersion() != null && VersionUtil.isLower(plugin.getVersion(), extension.getRequiredVersion())) { + Log.error(this, "Could not load extension " + file.getName() + ": This extension requires Duels v" + extension.getRequiredVersion() + " or higher!"); continue; } - INIT_EXTENSION.invoke(extension, plugin, folder, file); + final ExtensionInfo info = classLoader.getInfo(); - if (extensions.containsKey(extension.getName())) { - Log.error("Could not load extension " + extension.getName() + ": An extension with same name already exists"); + if (extensions.containsKey(info.getName())) { + Log.error(this, "Could not load extension " + file.getName() + ": An extension with the name '" + info.getName() + "' already exists"); continue; } + if (!info.getDepends().isEmpty() && info.getDepends().stream().anyMatch(depend -> !plugin.getServer().getPluginManager().isPluginEnabled(depend))) { + Log.error(this, "Could not load extension " + file.getName() + ": This extension require the following plugins to enable - " + info.getDepends()); + continue; + } + + INIT_EXTENSION.invoke(extension, plugin, info.getName(), folder, file); extension.setEnabled(true); Log.info(this, "Extension '" + extension.getName() + "' is now enabled."); extensions.put(extension.getName(), extension); + this.info.put(extension, info); } catch (Exception ex) { - Log.error("Could not enable extension " + file.getName() + ": " + ex.getMessage()); - ex.printStackTrace(); + Log.error(this, "Could not enable extension " + file.getName() + "!", ex); } } } @@ -92,44 +88,27 @@ public void handleUnload() { extensions.values().forEach(extension -> { try { extension.setEnabled(false); + + final ClassLoader classLoader = extension.getClass().getClassLoader(); + + if (classLoader instanceof ExtensionClassLoader) { + ((ExtensionClassLoader) classLoader).close(); + } + Log.info(this, "Extension '" + extension.getName() + "' is now disabled."); } catch (Exception ex) { - Log.error("Could not disable extension " + extension.getName() + ": " + ex.getMessage()); + Log.error(this, "Could not disable extension " + extension.getName() + "!", ex); } }); extensions.clear(); + info.clear(); } - private Class find(final File file) throws IOException, ClassNotFoundException { - final URL url = file.toURI().toURL(); - - try ( - URLClassLoader classLoader = new URLClassLoader(new URL[] {url}, DuelsExtension.class.getClassLoader()); - JarInputStream stream = new JarInputStream(url.openStream()) - ) { - Class foundClass = null; - - while (true) { - final JarEntry entry = stream.getNextJarEntry(); - - if (entry == null) { - break; - } - - String name = entry.getName(); - - if (name != null && !name.isEmpty() && name.endsWith(".class")) { - name = name.replace("/", "."); - final String className = name.substring(0, name.lastIndexOf(".class")); - final Class clazz = classLoader.loadClass(className); - - if (DuelsExtension.class.isAssignableFrom(clazz)) { - foundClass = clazz.asSubclass(DuelsExtension.class); - } - } - } + public DuelsExtension getExtension(final String name) { + return extensions.get(name); + } - return foundClass; - } + public ExtensionInfo getInfo(final DuelsExtension extension) { + return info.get(extension); } } diff --git a/duels-plugin/src/main/java/me/realized/duels/extra/PotionListener.java b/duels-plugin/src/main/java/me/realized/duels/extra/PotionListener.java index d2ccf9a1..d17cbd7f 100644 --- a/duels-plugin/src/main/java/me/realized/duels/extra/PotionListener.java +++ b/duels-plugin/src/main/java/me/realized/duels/extra/PotionListener.java @@ -2,7 +2,6 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.arena.ArenaManager; -import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -33,7 +32,7 @@ public void on(final PlayerItemConsumeEvent event) { final ItemStack item = event.getItem(); - if (item.getType() != Material.POTION) { + if (item.getType().name().endsWith("POTION")) { return; } diff --git a/duels-plugin/src/main/java/me/realized/duels/extra/SoupListener.java b/duels-plugin/src/main/java/me/realized/duels/extra/SoupListener.java index 2d9526f5..8d38faa6 100644 --- a/duels-plugin/src/main/java/me/realized/duels/extra/SoupListener.java +++ b/duels-plugin/src/main/java/me/realized/duels/extra/SoupListener.java @@ -4,6 +4,7 @@ import me.realized.duels.arena.Arena; import me.realized.duels.arena.ArenaManager; import me.realized.duels.config.Config; +import me.realized.duels.util.compat.Items; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.Event.Result; @@ -34,7 +35,7 @@ public void on(final PlayerInteractEvent event) { final ItemStack item = event.getItem(); - if (item == null || item.getType() != Material.MUSHROOM_SOUP) { + if (item == null || item.getType() != Items.MUSHROOM_SOUP) { return; } diff --git a/duels-plugin/src/main/java/me/realized/duels/extra/Teleport.java b/duels-plugin/src/main/java/me/realized/duels/extra/Teleport.java index 7473df6a..6798f1c3 100644 --- a/duels-plugin/src/main/java/me/realized/duels/extra/Teleport.java +++ b/duels-plugin/src/main/java/me/realized/duels/extra/Teleport.java @@ -7,6 +7,7 @@ import me.realized.duels.hooks.PvPManagerHook; import me.realized.duels.util.Loadable; import me.realized.duels.util.Log; +import me.realized.duels.util.compat.Players; import me.realized.duels.util.metadata.MetadataUtil; import org.bukkit.Chunk; import org.bukkit.Location; @@ -21,7 +22,7 @@ */ public final class Teleport implements Loadable, Listener { - private static final String METADATA_KEY = Teleport.class.getSimpleName(); + public static final String METADATA_KEY = Teleport.class.getSimpleName(); private final DuelsPlugin plugin; @@ -72,7 +73,6 @@ public void tryTeleport(final Player player, final Location location, final Cons chunk.load(); } - location.getWorld().refreshChunk(chunk.getX(), chunk.getZ()); MetadataUtil.put(plugin, player, METADATA_KEY, location.clone()); if (!player.teleport(location)) { @@ -83,7 +83,12 @@ public void tryTeleport(final Player player, final Location location, final Cons } } - location.getWorld().refreshChunk(chunk.getX(), chunk.getZ()); + Players.getOnlinePlayers().forEach(online -> { + if (player.canSee(online) && online.canSee(player)) { + player.showPlayer(online); + online.showPlayer(player); + } + }); } public void tryTeleport(final Player player, final Location location) { diff --git a/duels-plugin/src/main/java/me/realized/duels/extra/TeleportListener.java b/duels-plugin/src/main/java/me/realized/duels/extra/TeleportListener.java index 1233fa5d..d30950e9 100644 --- a/duels-plugin/src/main/java/me/realized/duels/extra/TeleportListener.java +++ b/duels-plugin/src/main/java/me/realized/duels/extra/TeleportListener.java @@ -32,8 +32,8 @@ public TeleportListener(final DuelsPlugin plugin) { public void on(final PlayerTeleportEvent event) { final Player player = event.getPlayer(); - if (player.isOp() || player.hasPermission(Permissions.ADMIN) || player.hasPermission(Permissions.TP_BYPASS) - || arenaManager.isInMatch(player) || spectateManager.isSpectating(player)) { + if (player.isOp() || player.isDead() || player.hasPermission(Permissions.ADMIN) || player.hasPermission(Permissions.TP_BYPASS) || + player.hasMetadata(Teleport.METADATA_KEY) || arenaManager.isInMatch(player) || spectateManager.isSpectating(player)) { return; } diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/betting/BettingGui.java b/duels-plugin/src/main/java/me/realized/duels/gui/betting/BettingGui.java index 4ab94bb9..cc396dd0 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/betting/BettingGui.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/betting/BettingGui.java @@ -13,11 +13,11 @@ import me.realized.duels.gui.betting.buttons.HeadButton; import me.realized.duels.gui.betting.buttons.StateButton; import me.realized.duels.setting.Settings; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.gui.AbstractGui; import me.realized.duels.util.gui.Button; import me.realized.duels.util.gui.GuiListener; import me.realized.duels.util.inventory.InventoryBuilder; -import me.realized.duels.util.inventory.ItemBuilder; import me.realized.duels.util.inventory.Slots; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -52,10 +52,10 @@ public BettingGui(final DuelsPlugin plugin, final Settings settings, final Playe this.first = first.getUniqueId(); this.second = second.getUniqueId(); set(inventory, 13, 14, 5, new CancelButton(plugin)); - Slots.run(0, 3, slot -> inventory.setItem(slot, ItemBuilder.of(Material.STAINED_GLASS_PANE, 1, (short) 1).name(" ").build())); - Slots.run(45, 48, slot -> inventory.setItem(slot, ItemBuilder.of(Material.STAINED_GLASS_PANE, 1, (short) 1).name(" ").build())); - Slots.run(6, 9, slot -> inventory.setItem(slot, ItemBuilder.of(Material.STAINED_GLASS_PANE, 1, (short) 11).name(" ").build())); - Slots.run(51, 54, slot -> inventory.setItem(slot, ItemBuilder.of(Material.STAINED_GLASS_PANE, 1, (short) 11).name(" ").build())); + Slots.run(0, 3, slot -> inventory.setItem(slot, Items.ORANGE_PANE.clone())); + Slots.run(45, 48, slot -> inventory.setItem(slot, Items.ORANGE_PANE.clone())); + Slots.run(6, 9, slot -> inventory.setItem(slot, Items.BLUE_PANE.clone())); + Slots.run(51, 54, slot -> inventory.setItem(slot, Items.BLUE_PANE.clone())); set(inventory, 3, new StateButton(plugin, this, first)); set(inventory, 4, new DetailsButton(plugin, settings)); set(inventory, 5, new StateButton(plugin, this, second)); diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/CancelButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/CancelButton.java index d0a1653a..058f8a12 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/CancelButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/CancelButton.java @@ -2,15 +2,15 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.gui.BaseButton; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; -import org.bukkit.Material; import org.bukkit.entity.Player; public class CancelButton extends BaseButton { public CancelButton(final DuelsPlugin plugin) { super(plugin, ItemBuilder - .of(Material.STAINED_GLASS_PANE, 1, (short) 14) + .of(Items.RED_PANE.clone()) .name(plugin.getLang().getMessage("GUI.item-betting.buttons.cancel.name")) .lore(plugin.getLang().getMessage("GUI.item-betting.buttons.cancel.lore").split("\n")) .build() diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/HeadButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/HeadButton.java index c651867c..4edca35c 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/HeadButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/HeadButton.java @@ -3,8 +3,8 @@ import java.util.UUID; import me.realized.duels.DuelsPlugin; import me.realized.duels.gui.BaseButton; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; -import org.bukkit.Material; import org.bukkit.entity.Player; public class HeadButton extends BaseButton { @@ -13,7 +13,7 @@ public class HeadButton extends BaseButton { public HeadButton(final DuelsPlugin plugin, final Player owner) { super(plugin, ItemBuilder - .of(Material.SKULL_ITEM, 1, (short) 3) + .of(Items.HEAD.clone()) .name(plugin.getLang().getMessage("GUI.item-betting.buttons.head.name", "name", owner.getName())) .build() ); diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/StateButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/StateButton.java index 29c7db73..9b615ff3 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/StateButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/betting/buttons/StateButton.java @@ -4,8 +4,8 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.gui.BaseButton; import me.realized.duels.gui.betting.BettingGui; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; -import org.bukkit.Material; import org.bukkit.entity.Player; public class StateButton extends BaseButton { @@ -15,7 +15,7 @@ public class StateButton extends BaseButton { public StateButton(final DuelsPlugin plugin, final BettingGui gui, final Player owner) { super(plugin, ItemBuilder - .of(Material.INK_SACK, 1, (short) 8) + .of(Items.OFF.clone()) .name(plugin.getLang().getMessage("GUI.item-betting.buttons.state.name-not-ready")) .build() ); @@ -26,7 +26,7 @@ public StateButton(final DuelsPlugin plugin, final BettingGui gui, final Player @Override public void onClick(final Player player) { if (!gui.isReady(player) && player.getUniqueId().equals(owner)) { - getDisplayed().setDurability((short) 10); + setDisplayed(Items.ON.clone()); setDisplayName(lang.getMessage("GUI.item-betting.buttons.state.name-ready")); gui.update(player, this); gui.setReady(player); diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/inventory/InventoryGui.java b/duels-plugin/src/main/java/me/realized/duels/gui/inventory/InventoryGui.java index 87bca9b4..1915acea 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/inventory/InventoryGui.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/inventory/InventoryGui.java @@ -7,8 +7,8 @@ import me.realized.duels.gui.inventory.buttons.HealthButton; import me.realized.duels.gui.inventory.buttons.HungerButton; import me.realized.duels.gui.inventory.buttons.PotionCounterButton; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.gui.SinglePageGui; -import me.realized.duels.util.inventory.ItemBuilder; import me.realized.duels.util.inventory.Slots; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -23,7 +23,7 @@ public InventoryGui(final DuelsPlugin plugin, final Player player) { super(plugin, plugin.getLang().getMessage("GUI.inventory-view.title", "name", player.getName()), 6); this.creation = System.currentTimeMillis(); - final ItemStack spacing = ItemBuilder.of(Material.STAINED_GLASS_PANE, 1, (short) 7).name(" ").build(); + final ItemStack spacing = Items.GRAY_PANE.clone(); Slots.run(0, 9, slot -> inventory.setItem(slot, spacing)); set(4, new HeadButton(plugin, player)); diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/inventory/buttons/HeadButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/inventory/buttons/HeadButton.java index f88d49ce..6424c5ee 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/inventory/buttons/HeadButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/inventory/buttons/HeadButton.java @@ -2,15 +2,15 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.gui.BaseButton; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; -import org.bukkit.Material; import org.bukkit.entity.Player; public class HeadButton extends BaseButton { public HeadButton(final DuelsPlugin plugin, final Player owner) { super(plugin, ItemBuilder - .of(Material.SKULL_ITEM, 1, (short) 3) + .of(Items.HEAD.clone()) .name(plugin.getLang().getMessage("GUI.inventory-view.buttons.head.name", "name", owner.getName())).head(owner) .build() ); diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/inventory/buttons/HealthButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/inventory/buttons/HealthButton.java index 6d94c986..c6cbc6f3 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/inventory/buttons/HealthButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/inventory/buttons/HealthButton.java @@ -2,6 +2,7 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.gui.BaseButton; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -10,7 +11,7 @@ public class HealthButton extends BaseButton { public HealthButton(final DuelsPlugin plugin, final Player player) { super(plugin, ItemBuilder - .of(player.isDead() ? Material.SKULL_ITEM : Material.GOLDEN_APPLE) + .of(player.isDead() ? Items.SKELETON_HEAD : Material.GOLDEN_APPLE) .name(plugin.getLang().getMessage("GUI.inventory-view.buttons.health.name", "health", player.isDead() ? 0 : Math.ceil(player.getHealth()) * 0.5)) .build()); } diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/setting/SettingsGui.java b/duels-plugin/src/main/java/me/realized/duels/gui/setting/SettingsGui.java index b4d3edef..37eef4b6 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/setting/SettingsGui.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/setting/SettingsGui.java @@ -7,10 +7,9 @@ import me.realized.duels.gui.setting.buttons.KitSelectButton; import me.realized.duels.gui.setting.buttons.RequestDetailsButton; import me.realized.duels.gui.setting.buttons.RequestSendButton; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.gui.SinglePageGui; -import me.realized.duels.util.inventory.ItemBuilder; import me.realized.duels.util.inventory.Slots; -import org.bukkit.Material; import org.bukkit.inventory.ItemStack; public class SettingsGui extends SinglePageGui { @@ -18,7 +17,7 @@ public class SettingsGui extends SinglePageGui { public SettingsGui(final DuelsPlugin plugin) { super(plugin, plugin.getLang().getMessage("GUI.settings.title"), 3); - final ItemStack spacing = ItemBuilder.of(Material.STAINED_GLASS_PANE).name(" ").build(); + final ItemStack spacing = Items.WHITE_PANE.clone(); Slots.run(2, 7, slot -> inventory.setItem(slot, spacing)); Slots.run(11, 16, slot -> inventory.setItem(slot, spacing)); Slots.run(20, 25, slot -> inventory.setItem(slot, spacing)); diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/ArenaSelectButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/ArenaSelectButton.java index fe44afa0..d29bfcea 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/ArenaSelectButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/ArenaSelectButton.java @@ -4,14 +4,14 @@ import me.realized.duels.extra.Permissions; import me.realized.duels.gui.BaseButton; import me.realized.duels.setting.Settings; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; -import org.bukkit.Material; import org.bukkit.entity.Player; public class ArenaSelectButton extends BaseButton { public ArenaSelectButton(final DuelsPlugin plugin) { - super(plugin, ItemBuilder.of(Material.EMPTY_MAP).name(plugin.getLang().getMessage("GUI.settings.buttons.arena-selector.name")).build()); + super(plugin, ItemBuilder.of(Items.EMPTY_MAP).name(plugin.getLang().getMessage("GUI.settings.buttons.arena-selector.name")).build()); } @Override diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/CancelButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/CancelButton.java index 9901e833..a378fc1d 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/CancelButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/CancelButton.java @@ -2,14 +2,14 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.gui.BaseButton; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; -import org.bukkit.Material; import org.bukkit.entity.Player; public class CancelButton extends BaseButton { public CancelButton(final DuelsPlugin plugin) { - super(plugin, ItemBuilder.of(Material.STAINED_GLASS_PANE, 1, (short) 14).name(plugin.getLang().getMessage("GUI.settings.buttons.cancel.name")).build()); + super(plugin, ItemBuilder.of(Items.RED_PANE.clone()).name(plugin.getLang().getMessage("GUI.settings.buttons.cancel.name")).build()); } @Override diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/RequestSendButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/RequestSendButton.java index bf35b4aa..13136416 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/RequestSendButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/setting/buttons/RequestSendButton.java @@ -3,15 +3,15 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.gui.BaseButton; import me.realized.duels.setting.Settings; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.entity.Player; public class RequestSendButton extends BaseButton { public RequestSendButton(final DuelsPlugin plugin) { - super(plugin, ItemBuilder.of(Material.STAINED_GLASS_PANE, 1, (short) 5).name(plugin.getLang().getMessage("GUI.settings.buttons.send.name")).build()); + super(plugin, ItemBuilder.of(Items.GREEN_PANE.clone()).name(plugin.getLang().getMessage("GUI.settings.buttons.send.name")).build()); } @Override diff --git a/duels-plugin/src/main/java/me/realized/duels/hooks/BountyHuntersHook.java b/duels-plugin/src/main/java/me/realized/duels/hooks/BountyHuntersHook.java index 71230934..4b081954 100644 --- a/duels-plugin/src/main/java/me/realized/duels/hooks/BountyHuntersHook.java +++ b/duels-plugin/src/main/java/me/realized/duels/hooks/BountyHuntersHook.java @@ -4,6 +4,8 @@ import me.realized.duels.arena.ArenaManager; import me.realized.duels.util.hook.PluginHook; import net.Indyuce.bh.api.BountyClaimEvent; +import net.Indyuce.bh.api.BountyCreateEvent; +import net.Indyuce.bh.resource.BountyCause; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -28,4 +30,13 @@ public void on(final BountyClaimEvent event) { event.setCancelled(true); } + + @EventHandler(ignoreCancelled = true) + public void on(final BountyCreateEvent event) { + if (event.getCause() != BountyCause.AUTO_BOUNTY || !arenaManager.isInMatch(event.getBounty().getTarget().getPlayer())) { + return; + } + + event.setCancelled(true); + } } diff --git a/duels-plugin/src/main/java/me/realized/duels/hooks/HookManager.java b/duels-plugin/src/main/java/me/realized/duels/hooks/HookManager.java index 50a5acf1..65b3325c 100644 --- a/duels-plugin/src/main/java/me/realized/duels/hooks/HookManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/hooks/HookManager.java @@ -16,6 +16,7 @@ public HookManager(final DuelsPlugin plugin) { register("MyPet", MyPetHook.class); register("PlaceholderAPI", PlaceholderHook.class); register("PvPManager", PvPManagerHook.class); + register("SimpleClans", SimpleClansHook.class); register("Vault", VaultHook.class); register("WorldGuard", WorldGuardHook.class); } diff --git a/duels-plugin/src/main/java/me/realized/duels/hooks/MVdWPlaceholderHook.java b/duels-plugin/src/main/java/me/realized/duels/hooks/MVdWPlaceholderHook.java index bcfc44ba..cbb8dc75 100644 --- a/duels-plugin/src/main/java/me/realized/duels/hooks/MVdWPlaceholderHook.java +++ b/duels-plugin/src/main/java/me/realized/duels/hooks/MVdWPlaceholderHook.java @@ -20,6 +20,7 @@ public MVdWPlaceholderHook(final DuelsPlugin plugin) { final Placeholders placeholders = new Placeholders(); PlaceholderAPI.registerPlaceholder(plugin, "duels_wins", placeholders); PlaceholderAPI.registerPlaceholder(plugin, "duels_losses", placeholders); + PlaceholderAPI.registerPlaceholder(plugin, "duels_can_request", placeholders); } public class Placeholders implements PlaceholderReplacer { @@ -38,7 +39,16 @@ public String onPlaceholderReplace(final PlaceholderReplaceEvent event) { return null; } - return String.valueOf(event.getPlaceholder().equals("duels_wins") ? user.getWins() : user.getLosses()); + switch (event.getPlaceholder()) { + case "duels_wins": + return String.valueOf(user.getWins()); + case "duels_losses": + return String.valueOf(user.getWins()); + case "duels_can_request": + return String.valueOf(user.canRequest()); + } + + return null; } } } diff --git a/duels-plugin/src/main/java/me/realized/duels/hooks/PlaceholderHook.java b/duels-plugin/src/main/java/me/realized/duels/hooks/PlaceholderHook.java index 00b5f2e8..3e950660 100644 --- a/duels-plugin/src/main/java/me/realized/duels/hooks/PlaceholderHook.java +++ b/duels-plugin/src/main/java/me/realized/duels/hooks/PlaceholderHook.java @@ -51,7 +51,16 @@ public String onPlaceholderRequest(final Player player, final String identifier) return null; } - return String.valueOf(identifier.equals("wins") ? user.getWins() : user.getLosses()); + switch (identifier) { + case "wins": + return String.valueOf(user.getWins()); + case "losses": + return String.valueOf(user.getWins()); + case "can_request": + return String.valueOf(user.canRequest()); + } + + return null; } } } diff --git a/duels-plugin/src/main/java/me/realized/duels/hooks/SimpleClansHook.java b/duels-plugin/src/main/java/me/realized/duels/hooks/SimpleClansHook.java new file mode 100644 index 00000000..1a740a93 --- /dev/null +++ b/duels-plugin/src/main/java/me/realized/duels/hooks/SimpleClansHook.java @@ -0,0 +1,39 @@ +package me.realized.duels.hooks; + +import me.realized.duels.DuelsPlugin; +import me.realized.duels.config.Config; +import me.realized.duels.util.hook.PluginHook; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import org.bukkit.entity.Player; + +public class SimpleClansHook extends PluginHook { + + private final Config config; + + public SimpleClansHook(final DuelsPlugin plugin) { + super(plugin, "SimpleClans"); + this.config = plugin.getConfiguration(); + + try { + getPlugin().getClass().getMethod("getClanManager"); + } catch (NoSuchMethodException ex) { + throw new RuntimeException("This version of " + getName() + " is not supported. Please try upgrading to the latest version."); + } + } + + public void removeDeath(final Player player) { + if (!config.isPreventAddDeath()) { + return; + } + + final SimpleClans plugin = (SimpleClans) getPlugin(); + final ClanPlayer clanPlayer = plugin.getClanManager().getClanPlayer(player); + + if (clanPlayer == null) { + return; + } + + clanPlayer.setDeaths(clanPlayer.getDeaths() - 1); + } +} diff --git a/duels-plugin/src/main/java/me/realized/duels/inventories/InventoryManager.java b/duels-plugin/src/main/java/me/realized/duels/inventories/InventoryManager.java index bab4ecea..b1373dd8 100644 --- a/duels-plugin/src/main/java/me/realized/duels/inventories/InventoryManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/inventories/InventoryManager.java @@ -27,7 +27,7 @@ public void handleLoad() { this.expireTask = plugin.doSyncRepeat(() -> { final long now = System.currentTimeMillis(); inventories.entrySet().removeIf(entry -> now - entry.getValue().getCreation() >= 1000L * 60 * 5); - }, 20L, 20L * 5); + }, 20L, 20L * 5).getTaskId(); } @Override diff --git a/duels-plugin/src/main/java/me/realized/duels/kit/KitManager.java b/duels-plugin/src/main/java/me/realized/duels/kit/KitManager.java index b0865948..258d3c96 100644 --- a/duels-plugin/src/main/java/me/realized/duels/kit/KitManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/kit/KitManager.java @@ -10,10 +10,12 @@ import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import javax.annotation.Nonnull; @@ -106,8 +108,9 @@ public void handleUnload() throws IOException { kits.clear(); } - public Collection getKits() { - return Collections.unmodifiableCollection(Lists.newArrayList(kits.values())); + @Override + public List getKits() { + return Collections.unmodifiableList(new ArrayList<>(kits.values())); } @Nullable diff --git a/duels-plugin/src/main/java/me/realized/duels/logging/LogManager.java b/duels-plugin/src/main/java/me/realized/duels/logging/LogManager.java index bccef990..95af68ee 100644 --- a/duels-plugin/src/main/java/me/realized/duels/logging/LogManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/logging/LogManager.java @@ -71,10 +71,19 @@ public void handleUnload() { @Override public void log(final Level level, final String s) { + log(level, s, null); + } + + @Override + public void log(final Level level, final String s, final Throwable thrown) { if (handler == null) { return; } - getLogger().log(level, s); + if (thrown != null) { + getLogger().log(level, s, thrown); + } else { + getLogger().log(level, s); + } } } diff --git a/duels-plugin/src/main/java/me/realized/duels/player/PlayerInfoManager.java b/duels-plugin/src/main/java/me/realized/duels/player/PlayerInfoManager.java index d80196b9..8a8511af 100644 --- a/duels-plugin/src/main/java/me/realized/duels/player/PlayerInfoManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/player/PlayerInfoManager.java @@ -43,7 +43,7 @@ public void handleLoad() { try (InputStreamReader reader = new InputStreamReader(new FileInputStream(file))) { this.lobby = plugin.getGson().fromJson(reader, LocationData.class).toLocation(); } catch (IOException ex) { - Log.error(this, "Could not load lobby location: " + ex.getMessage()); + Log.error(this, "Could not load lobby location!", ex); } } @@ -74,7 +74,7 @@ public boolean setLobby(final Player player) { this.lobby = lobby; return true; } catch (IOException ex) { - Log.error(this, "Could not save lobby location: " + ex.getMessage()); + Log.error(this, "Could not save lobby location!", ex); return false; } } diff --git a/duels-plugin/src/main/java/me/realized/duels/queue/QueueManager.java b/duels-plugin/src/main/java/me/realized/duels/queue/QueueManager.java index a25a9601..c96e8d83 100644 --- a/duels-plugin/src/main/java/me/realized/duels/queue/QueueManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/queue/QueueManager.java @@ -16,6 +16,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.Queue; import java.util.Set; import me.realized.duels.DuelsPlugin; @@ -26,12 +27,19 @@ import me.realized.duels.data.UserManager; import me.realized.duels.duel.DuelManager; import me.realized.duels.extra.Permissions; +import me.realized.duels.hooks.CombatTagPlusHook; +import me.realized.duels.hooks.PvPManagerHook; import me.realized.duels.hooks.VaultHook; +import me.realized.duels.hooks.WorldGuardHook; import me.realized.duels.kit.Kit; +import me.realized.duels.setting.CachedInfo; import me.realized.duels.setting.Settings; import me.realized.duels.util.Loadable; import me.realized.duels.util.Log; import me.realized.duels.util.RatingUtil; +import me.realized.duels.util.inventory.InventoryUtil; +import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; import org.bukkit.entity.Player; @@ -50,8 +58,11 @@ public class QueueManager implements Loadable, Listener { private final DuelManager duelManager; private final File file; private final Map signs = new HashMap<>(); - private final Map> queues = new HashMap<>(); + private final Map> queues = new HashMap<>(); + private CombatTagPlusHook combatTagPlus; + private PvPManagerHook pvpManager; + private WorldGuardHook worldGuard; private VaultHook vault; private int queueTask; @@ -67,6 +78,9 @@ public QueueManager(final DuelsPlugin plugin) { @Override public void handleLoad() throws Exception { + this.combatTagPlus = plugin.getHookManager().getHook(CombatTagPlusHook.class); + this.pvpManager = plugin.getHookManager().getHook(PvPManagerHook.class); + this.worldGuard = plugin.getHookManager().getHook(WorldGuardHook.class); this.vault = plugin.getHookManager().getHook(VaultHook.class); if (!file.exists()) { @@ -91,17 +105,21 @@ public void handleLoad() throws Exception { Log.info(this, "Loaded " + signs.size() + " queue sign(s)."); this.queueTask = plugin.doSyncRepeat(() -> queues.forEach((sign, queue) -> { - final Set remove = new HashSet<>(); + final Set remove = new HashSet<>(); - for (final Player current : queue) { + for (final QueueEntry current : queue) { // player is already in a match if (remove.contains(current)) { continue; } - for (final Player opponent : queue) { + final Player player = current.player; + + for (final QueueEntry opponent : queue) { + final Player other = opponent.player; + // opponent is already in a match or the rating difference is too high - if (current.equals(opponent) || remove.contains(opponent) || !canFight(sign.getKit(), userManager.get(current), userManager.get(opponent))) { + if (current.equals(opponent) || remove.contains(opponent) || !canFight(sign.getKit(), userManager.get(player), userManager.get(other))) { continue; } @@ -111,18 +129,20 @@ public void handleLoad() throws Exception { final Settings setting = new Settings(plugin); setting.setKit(sign.getKit()); setting.setBet(sign.getBet()); + setting.getCache().put(player.getUniqueId(), current.info); + setting.getCache().put(other.getUniqueId(), opponent.info); final String kit = sign.getKit() != null ? sign.getKit().getName() : "none"; - lang.sendMessage(current, "SIGN.found-opponent", "name", opponent.getName(), "kit", kit, "bet_amount", sign.getBet()); - lang.sendMessage(opponent, "SIGN.found-opponent", "name", current.getName(), "kit", kit, "bet_amount", sign.getBet()); - duelManager.startMatch(current, opponent, setting, null, true); + lang.sendMessage(player, "SIGN.found-opponent", "name", other.getName(), "kit", kit, "bet_amount", sign.getBet()); + lang.sendMessage(other, "SIGN.found-opponent", "name", player.getName(), "kit", kit, "bet_amount", sign.getBet()); + duelManager.startMatch(player, other, setting, null, true); break; } } queue.removeAll(remove); signs.values().stream().filter(queueSign -> queueSign.equals(sign)).forEach(queueSign -> queueSign.setCount(queue.size())); - }), 20L, 40L); + }), 20L, 40L).getTaskId(); } private boolean canFight(final Kit kit, final UserData first, final UserData second) { @@ -175,10 +195,10 @@ public QueueSign remove(final Sign sign) { final QueueSign queueSign = signs.remove(sign); if (queueSign != null && signs.values().stream().noneMatch(s -> s.equals(queueSign))) { - final Queue queue = queues.remove(queueSign); + final Queue queue = queues.remove(queueSign); if (queue != null) { - queue.forEach(player -> lang.sendMessage(player, "SIGN.remove")); + queue.forEach(entry -> lang.sendMessage(entry.player, "SIGN.remove")); } } @@ -186,19 +206,24 @@ public QueueSign remove(final Sign sign) { } public void remove(final Player player) { - queues.forEach((sign, queue) -> { - if (queue.remove(player)) { + for (final Map.Entry> entry : queues.entrySet()) { + final LinkedList queue = entry.getValue(); + + if (queue.removeIf(queueEntry -> queueEntry.player.equals(player))) { lang.sendMessage(player, "SIGN.remove"); - signs.values().stream().filter(queueSign -> queueSign.equals(sign)).forEach(queueSign -> queueSign.setCount(queue.size())); + signs.values().stream().filter(queueSign -> queueSign.equals(entry.getKey())).forEach(queueSign -> queueSign.setCount(queue.size())); + break; } - }); + } } - public Queue get(final Player player) { - return queues.entrySet().stream().filter(entry -> entry.getValue().contains(player)).findFirst().map(Entry::getValue).orElse(null); + public Queue get(final Player player) { + return queues.entrySet() + .stream().filter(entry -> entry.getValue().stream().anyMatch(queueEntry -> queueEntry.player.equals(player))) + .findFirst().map(Entry::getValue).orElse(null); } - public Queue get(final QueueSign sign) { + public Queue get(final QueueSign sign) { return queues.computeIfAbsent(sign, result -> new LinkedList<>()); } @@ -211,7 +236,7 @@ public boolean create(final Sign sign, final Kit kit, final int bet) { final String kitName = kit != null ? kit.getName() : "none"; signs.put(sign, created = new QueueSign(sign, lang.getMessage("SIGN.format", "kit", kitName, "bet_amount", bet), kit, bet)); - final Queue queue = get(created); + final Queue queue = get(created); signs.values().stream().filter(queueSign -> queueSign.equals(created)).forEach(queueSign -> queueSign.setCount(queue.size())); return true; } @@ -235,12 +260,12 @@ public void on(final PlayerInteractEvent event) { return; } - final Queue queue = get(sign); - final Queue found = get(player); + final Queue queue = get(sign); + final Queue found = get(player); if (found != null) { if (found.equals(queue)) { - queue.remove(player); + queue.removeIf(entry -> entry.player.equals(player)); lang.sendMessage(player, "SIGN.remove"); signs.values().stream().filter(queueSign -> queueSign.equals(sign)).forEach(queueSign -> queueSign.setCount(queue.size())); return; @@ -250,12 +275,36 @@ public void on(final PlayerInteractEvent event) { return; } + if (config.isRequiresClearedInventory() && InventoryUtil.hasItem(player)) { + lang.sendMessage(player, "ERROR.duel.inventory-not-empty"); + return; + } + + GameMode gameMode = null; + + if (config.isPreventCreativeMode() && (gameMode = player.getGameMode()) == GameMode.CREATIVE) { + lang.sendMessage(player, "ERROR.duel.in-creative-mode"); + return; + } + + if ((combatTagPlus != null && combatTagPlus.isTagged(player)) || (pvpManager != null && pvpManager.isTagged(player))) { + lang.sendMessage(player, "ERROR.duel.is-tagged"); + return; + } + + String duelzone = null; + + if (worldGuard != null && config.isDuelzoneEnabled() && (duelzone = worldGuard.findDuelZone(player)) == null) { + lang.sendMessage(player, "ERROR.duel.not-in-duelzone", "regions", config.getDuelzones()); + return; + } + if (sign.getBet() > 0 && vault != null && !vault.has(sign.getBet(), player)) { lang.sendMessage(player, "ERROR.sign.not-enough-money", "bet_amount", sign.getBet()); return; } - queue.add(player); + queue.add(new QueueEntry(player, player.getLocation().clone(), duelzone, gameMode)); final String kit = sign.getKit() != null ? sign.getKit().getName() : "none"; lang.sendMessage(player, "SIGN.add", "kit", kit, "bet_amount", sign.getBet()); @@ -289,12 +338,37 @@ public void on(final BlockBreakEvent event) { @EventHandler public void on(final PlayerQuitEvent event) { - final Queue queue = get(event.getPlayer()); + final Player player = event.getPlayer(); + final Queue queue = get(player); if (queue == null) { return; } - queue.remove(event.getPlayer()); + queue.removeIf(entry -> entry.player.equals(player)); + } + + private class QueueEntry { + + private final Player player; + private final CachedInfo info; + + QueueEntry(final Player player, final Location location, final String duelzone, final GameMode gameMode) { + this.player = player; + this.info = new CachedInfo(location, duelzone, gameMode); + } + + @Override + public boolean equals(final Object other) { + if (this == other) { return true; } + if (other == null || getClass() != other.getClass()) { return false; } + final QueueEntry that = (QueueEntry) other; + return Objects.equals(player, that.player); + } + + @Override + public int hashCode() { + return Objects.hash(player); + } } } diff --git a/duels-plugin/src/main/java/me/realized/duels/request/RequestManager.java b/duels-plugin/src/main/java/me/realized/duels/request/RequestManager.java index 2f211001..281184f5 100644 --- a/duels-plugin/src/main/java/me/realized/duels/request/RequestManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/request/RequestManager.java @@ -10,7 +10,8 @@ import me.realized.duels.setting.Settings; import me.realized.duels.util.Loadable; import me.realized.duels.util.TextBuilder; -import net.md_5.bungee.api.chat.ClickEvent.Action; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent.Action; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -72,11 +73,15 @@ public void send(final Player sender, final Player target, final Settings settin final String path = "COMMAND.duel.request.send.clickable-text."; TextBuilder - .of(lang.getMessage(path + "info")) - .add(lang.getMessage(path + "accept"), Action.RUN_COMMAND, "/duel accept " + sender.getName()) - .add(lang.getMessage(path + "deny"), Action.RUN_COMMAND, "/duel deny " + sender.getName()) + .of(lang.getMessage(path + "info.text"), null, null, Action.SHOW_TEXT, lang.getMessage(path + "info.hover-text")) + .add(lang.getMessage(path + "accept.text"), + ClickEvent.Action.RUN_COMMAND, "/duel accept " + sender.getName(), + Action.SHOW_TEXT, lang.getMessage(path + "accept.hover-text")) + .add(lang.getMessage(path + "deny.text"), + ClickEvent.Action.RUN_COMMAND, "/duel deny " + sender.getName(), + Action.SHOW_TEXT, lang.getMessage(path + "deny.hover-text")) .send(target); - TextBuilder.of(lang.getMessage(path + "extra")).send(target); + TextBuilder.of(lang.getMessage(path + "extra.text"), null, null, Action.SHOW_TEXT, lang.getMessage(path + "extra.hover-text")).send(target); } public boolean has(final Player sender, final Player target) { diff --git a/duels-plugin/src/main/java/me/realized/duels/setting/CachedInfo.java b/duels-plugin/src/main/java/me/realized/duels/setting/CachedInfo.java new file mode 100644 index 00000000..55f63e27 --- /dev/null +++ b/duels-plugin/src/main/java/me/realized/duels/setting/CachedInfo.java @@ -0,0 +1,29 @@ +package me.realized.duels.setting; + +import lombok.Getter; +import lombok.Setter; +import org.bukkit.GameMode; +import org.bukkit.Location; + +public class CachedInfo { + + @Getter + @Setter + private Location location; + @Getter + @Setter + private String duelzone; + @Getter + @Setter + private GameMode gameMode; + + public CachedInfo(final Location location, final String duelzone, final GameMode gameMode) { + this.location = location; + this.duelzone = duelzone; + this.gameMode = gameMode; + } + + CachedInfo() { + this(null, null, null); + } +} diff --git a/duels-plugin/src/main/java/me/realized/duels/setting/Settings.java b/duels-plugin/src/main/java/me/realized/duels/setting/Settings.java index 6e8db1e7..4aac8ee4 100644 --- a/duels-plugin/src/main/java/me/realized/duels/setting/Settings.java +++ b/duels-plugin/src/main/java/me/realized/duels/setting/Settings.java @@ -9,6 +9,7 @@ import me.realized.duels.arena.Arena; import me.realized.duels.gui.setting.SettingsGui; import me.realized.duels.kit.Kit; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -32,7 +33,7 @@ public class Settings { @Setter private boolean itemBetting; @Getter - private Map locations = new HashMap<>(); + private Map cache = new HashMap<>(); public Settings(final DuelsPlugin plugin, final Player player) { this.plugin = plugin; @@ -70,31 +71,45 @@ public void openGui(final Player player) { } public void setBaseLoc(final Player player) { - locations.computeIfAbsent(player.getUniqueId(), result -> new LocationInfo()).location = player.getLocation().clone(); + cache.computeIfAbsent(player.getUniqueId(), result -> new CachedInfo()).setLocation(player.getLocation().clone()); } public Location getBaseLoc(final Player player) { - final LocationInfo info = locations.get(player.getUniqueId()); + final CachedInfo info = cache.get(player.getUniqueId()); if (info == null) { return null; } - return info.location; + return info.getLocation(); } public void setDuelzone(final Player player, final String duelzone) { - locations.computeIfAbsent(player.getUniqueId(), result -> new LocationInfo()).duelzone = duelzone; + cache.computeIfAbsent(player.getUniqueId(), result -> new CachedInfo()).setDuelzone(duelzone); } public String getDuelzone(final Player player) { - final LocationInfo info = locations.get(player.getUniqueId()); + final CachedInfo info = cache.get(player.getUniqueId()); if (info == null) { return null; } - return info.duelzone; + return info.getDuelzone(); + } + + public void setGameMode(final Player player, final GameMode gameMode) { + this.cache.computeIfAbsent(player.getUniqueId(), result -> new CachedInfo()).setGameMode(gameMode); + } + + public GameMode getGameMode(final Player player) { + final CachedInfo info = cache.get(player.getUniqueId()); + + if (info == null) { + return null; + } + + return info.getGameMode(); } // Don't copy the gui since it won't be required to start a match @@ -105,14 +120,7 @@ public Settings lightCopy() { copy.arena = arena; copy.bet = bet; copy.itemBetting = itemBetting; - copy.locations = locations; + copy.cache = new HashMap<>(cache); return copy; } - - private class LocationInfo { - - private Location location; - private String duelzone; - - } } diff --git a/duels-plugin/src/main/java/me/realized/duels/spectate/SpectateManager.java b/duels-plugin/src/main/java/me/realized/duels/spectate/SpectateManager.java index c9e9e667..1be81520 100644 --- a/duels-plugin/src/main/java/me/realized/duels/spectate/SpectateManager.java +++ b/duels-plugin/src/main/java/me/realized/duels/spectate/SpectateManager.java @@ -2,7 +2,9 @@ import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; +import java.util.stream.Collectors; import me.realized.duels.DuelsPlugin; import me.realized.duels.arena.Arena; import me.realized.duels.arena.ArenaManager; @@ -101,7 +103,7 @@ public void startSpectating(final Player player, final Player target) { final Match match = arena.getMatch(); if (match != null) { - match.getPlayers().forEach(arenaPlayer -> { + match.getAllPlayers().forEach(arenaPlayer -> { if (arenaPlayer.isOnline() && arenaPlayer.canSee(player)) { arenaPlayer.hidePlayer(player); } @@ -126,7 +128,7 @@ public void startSpectating(final Player player, final Player target) { return; } - arena.getMatch().getPlayers().forEach(matchPlayer -> lang.sendMessage(matchPlayer, "SPECTATE.arena-broadcast", true, "name", player.getName())); + arena.getMatch().getAllPlayers().forEach(matchPlayer -> lang.sendMessage(matchPlayer, "SPECTATE.arena-broadcast", "name", player.getName())); } public void stopSpectating(final Player player, final boolean end) { @@ -160,7 +162,7 @@ public void stopSpectating(final Player player, final boolean end) { final Match match = spectator.getArena().getMatch(); if (match != null) { - match.getPlayers().stream().filter(Player::isOnline).forEach(matchPlayer -> matchPlayer.showPlayer(player)); + match.getAllPlayers().stream().filter(Player::isOnline).forEach(matchPlayer -> matchPlayer.showPlayer(player)); } if (!end) { @@ -187,6 +189,10 @@ public Set getPlayers() { return spectators.keySet(); } + public Set getSpectators(final Arena arena) { + return spectators.entrySet().stream().filter(entry -> entry.getValue().getArena().equals(arena)).map(Entry::getKey).collect(Collectors.toSet()); + } + private class SpectateListener implements Listener { diff --git a/duels-plugin/src/main/java/me/realized/duels/util/Log.java b/duels-plugin/src/main/java/me/realized/duels/util/Log.java index 26020f97..af6ccc78 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/Log.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/Log.java @@ -4,11 +4,13 @@ import java.util.List; import java.util.logging.Level; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.plugin.Plugin; public final class Log { + private static final String PLUGIN_WARN = "[%s] &c%s"; + private static final String PLUGIN_ERROR = "[%s] &4&l%s"; + private static final List sources = new ArrayList<>(); private Log() {} @@ -33,36 +35,48 @@ public static void info(final Loadable loadable, final String s) { } } - public static void error(final String s) { + public static void warn(final String s) { for (final LogSource source : sources) { if (source instanceof Plugin) { - Bukkit.getConsoleSender().sendMessage("[" + ((Plugin) source).getName() + "] " + ChatColor.RED + s); + Bukkit.getConsoleSender().sendMessage(StringUtil.color(String.format(PLUGIN_WARN, ((Plugin) source).getName(), s))); } else { - source.log(Level.SEVERE, s); + source.log(Level.WARNING, s); } } } - public static void error(final Loadable loadable, final String s) { - error(loadable.getClass().getSimpleName() + ": " + s); + public static void warn(final Loadable loadable, final String s) { + warn(loadable.getClass().getSimpleName() + ": " + s); } - public static void warn(final String s) { + public static void error(final String s, final Throwable thrown) { for (final LogSource source : sources) { if (source instanceof Plugin) { - Bukkit.getConsoleSender().sendMessage("[" + ((Plugin) source).getName() + "] " + ChatColor.GOLD + s); + Bukkit.getConsoleSender().sendMessage(StringUtil.color(String.format(PLUGIN_ERROR, ((Plugin) source).getName(), s))); + } else if (thrown != null) { + source.log(Level.SEVERE, s, thrown); } else { - source.log(Level.WARNING, s); + source.log(Level.SEVERE, s); } } } - public static void warn(final Loadable loadable, final String s) { - warn(loadable.getClass().getSimpleName() + ": " + s); + public static void error(final String s) { + error(s, null); + } + + public static void error(final Loadable loadable, final String s, final Throwable thrown) { + error(loadable.getClass().getSimpleName() + ": " + s, thrown); + } + + public static void error(final Loadable loadable, final String s) { + error(loadable, s, null); } public interface LogSource { void log(final Level level, final String s); + + void log(final Level level, final String s, final Throwable thrown); } } diff --git a/duels-plugin/src/main/java/me/realized/duels/util/TextBuilder.java b/duels-plugin/src/main/java/me/realized/duels/util/TextBuilder.java index 66f6ed2d..fb92a388 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/TextBuilder.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/TextBuilder.java @@ -14,16 +14,36 @@ public final class TextBuilder { private final List list = new ArrayList<>(); - private TextBuilder(final String base) { + private TextBuilder(final String base, + final ClickEvent.Action clickAction, final String clickValue, + final HoverEvent.Action hoverAction, final String hoverValue + ) { if (base == null) { return; } - list.addAll(Arrays.asList(TextComponent.fromLegacyText(base))); + Arrays.stream(TextComponent.fromLegacyText(base)).forEach(component -> { + if (clickValue != null) { + component.setClickEvent(new ClickEvent(clickAction, clickValue)); + } + + if (hoverValue != null) { + component.setHoverEvent(new HoverEvent(hoverAction, TextComponent.fromLegacyText(hoverValue))); + } + + list.add(component); + }); + } + + public static TextBuilder of(final String base, + final ClickEvent.Action clickAction, final String clickValue, + final HoverEvent.Action hoverAction, final String hoverValue + ) { + return new TextBuilder(base, clickAction, clickValue, hoverAction, hoverValue); } public static TextBuilder of(final String base) { - return new TextBuilder(base); + return of(base, null, null, null, null); } public TextBuilder add(final String text) { @@ -59,6 +79,28 @@ public TextBuilder add(final String text, final HoverEvent.Action action, final return this; } + public TextBuilder add(final String text, + final ClickEvent.Action clickAction, final String clickValue, + final HoverEvent.Action hoverAction, final String hoverValue + ) { + if (text == null) { + return this; + } + + Arrays.stream(TextComponent.fromLegacyText(text)).forEach(component -> { + if (clickValue != null) { + component.setClickEvent(new ClickEvent(clickAction, clickValue)); + } + + if (hoverValue != null) { + component.setHoverEvent(new HoverEvent(hoverAction, TextComponent.fromLegacyText(hoverValue))); + } + + list.add(component); + }); + return this; + } + public TextBuilder setClickEvent(final ClickEvent.Action action, final String value) { if (value == null) { return this; diff --git a/duels-plugin/src/main/java/me/realized/duels/util/VersionUtil.java b/duels-plugin/src/main/java/me/realized/duels/util/VersionUtil.java new file mode 100644 index 00000000..aff3fcbc --- /dev/null +++ b/duels-plugin/src/main/java/me/realized/duels/util/VersionUtil.java @@ -0,0 +1,12 @@ +package me.realized.duels.util; + +public final class VersionUtil { + + public static boolean isLower(String version, String otherVersion) { + version = version.replace("-SNAPSHOT", "").replace(".", ""); + otherVersion = otherVersion.replace("-SNAPSHOT", "").replace(".", ""); + return NumberUtil.parseInt(version).orElse(0) < NumberUtil.parseInt(otherVersion).orElse(0); + } + + private VersionUtil() {} +} diff --git a/duels-plugin/src/main/java/me/realized/duels/util/compat/CompatUtil.java b/duels-plugin/src/main/java/me/realized/duels/util/compat/CompatUtil.java index d9f98423..e21e0b6c 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/compat/CompatUtil.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/compat/CompatUtil.java @@ -1,20 +1,32 @@ package me.realized.duels.util.compat; +import me.realized.duels.util.NumberUtil; import org.bukkit.Bukkit; public final class CompatUtil { + private static final int SUB_VERSION; + + static { + final String packageName = Bukkit.getServer().getClass().getPackage().getName(); + SUB_VERSION = NumberUtil.parseInt(packageName.substring(packageName.lastIndexOf('.') + 1).split("_")[1]).orElse(0); + } + private CompatUtil() {} + public static boolean isPre_1_13() { + return SUB_VERSION < 13; + } + public static boolean isPre_1_10() { - return (Bukkit.getVersion().contains("1.9") || isPre1_9()); + return SUB_VERSION < 10; } public static boolean isPre1_9() { - return (Bukkit.getVersion().contains("1.8") || isPre1_8()); + return SUB_VERSION < 9; } public static boolean isPre1_8() { - return Bukkit.getVersion().contains("1.7"); + return SUB_VERSION < 8; } } diff --git a/duels-plugin/src/main/java/me/realized/duels/util/compat/Items.java b/duels-plugin/src/main/java/me/realized/duels/util/compat/Items.java new file mode 100644 index 00000000..5b4dcbb5 --- /dev/null +++ b/duels-plugin/src/main/java/me/realized/duels/util/compat/Items.java @@ -0,0 +1,44 @@ +package me.realized.duels.util.compat; + +import me.realized.duels.util.inventory.ItemBuilder; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public final class Items { + + private static final String PANE = "STAINED_GLASS_PANE"; + + public static final ItemStack ORANGE_PANE; + public static final ItemStack BLUE_PANE; + public static final ItemStack RED_PANE; + public static final ItemStack GRAY_PANE; + public static final ItemStack WHITE_PANE; + public static final ItemStack GREEN_PANE; + public static final ItemStack HEAD; + public static final Material SKELETON_HEAD; + public static final ItemStack OFF; + public static final ItemStack ON; + public static final Material MUSHROOM_SOUP; + public static final Material EMPTY_MAP; + + static { + ORANGE_PANE = (CompatUtil.isPre_1_13() ? ItemBuilder.of(PANE, 1, (short) 1) : ItemBuilder.of(Material.ORANGE_STAINED_GLASS_PANE)).name(" ").build(); + BLUE_PANE = (CompatUtil.isPre_1_13() ? ItemBuilder.of(PANE, 1, (short) 11) : ItemBuilder.of(Material.BLUE_STAINED_GLASS_PANE)).name(" ").build(); + RED_PANE = (CompatUtil.isPre_1_13() ? ItemBuilder.of(PANE, 1, (short) 14) : ItemBuilder.of(Material.RED_STAINED_GLASS_PANE)).build(); + GRAY_PANE = (CompatUtil.isPre_1_13() ? ItemBuilder.of(PANE, 1, (short) 7) : ItemBuilder.of(Material.GRAY_STAINED_GLASS_PANE)).build(); + WHITE_PANE = (CompatUtil.isPre_1_13() ? ItemBuilder.of(PANE, 1, (short) 0) : ItemBuilder.of(Material.WHITE_STAINED_GLASS_PANE)).build(); + GREEN_PANE = (CompatUtil.isPre_1_13() ? ItemBuilder.of(PANE, 1, (short) 5) : ItemBuilder.of(Material.LIME_STAINED_GLASS_PANE)).build(); + HEAD = (CompatUtil.isPre_1_13() ? ItemBuilder.of("SKULL_ITEM", 1, (short) 3) : ItemBuilder.of(Material.PLAYER_HEAD)).build(); + SKELETON_HEAD = CompatUtil.isPre_1_13() ? Material.matchMaterial("SKULL_ITEM") : Material.SKELETON_SKULL; + OFF = (CompatUtil.isPre_1_13() ? ItemBuilder.of("INK_SACK", 1, (short) 8) : ItemBuilder.of(Material.GRAY_DYE)).build(); + ON = (CompatUtil.isPre_1_13() ? ItemBuilder.of("INK_SACK", 1, (short) 10) : ItemBuilder.of(Material.LIME_DYE)).build(); + MUSHROOM_SOUP = CompatUtil.isPre_1_13() ? Material.matchMaterial("MUSHROOM_SOUP") : Material.MUSHROOM_STEW; + EMPTY_MAP = CompatUtil.isPre_1_13() ? Material.matchMaterial("EMPTY_MAP") : Material.MAP; + } + + public static boolean equals(final ItemStack item, final ItemStack other) { + return item.getType() == other.getType() && item.getDurability() == other.getDurability(); + } + + private Items() {} +} diff --git a/duels-plugin/src/main/java/me/realized/duels/util/compat/Players.java b/duels-plugin/src/main/java/me/realized/duels/util/compat/Players.java index 411e6bde..fba4a429 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/compat/Players.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/compat/Players.java @@ -22,7 +22,7 @@ public static Collection getOnlinePlayers() { try { final Object result = GET_ONLINE_PLAYERS.invoke(null); - if (result != null && result instanceof Player[]) { + if (result instanceof Player[]) { return Arrays.asList((Player[]) result); } } catch (Exception ignored) {} diff --git a/duels-plugin/src/main/java/me/realized/duels/util/compat/Potions.java b/duels-plugin/src/main/java/me/realized/duels/util/compat/Potions.java index 18f29b1d..9e6b9301 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/compat/Potions.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/compat/Potions.java @@ -14,7 +14,8 @@ public enum PotionType { NIGHT_VISION, POISON, REGEN, SLOWNESS, SPEED, STRENGTH, WATER, WATER_BREATHING, WEAKNESS, - EMPTY, UNCRAFTABLE, MUNDANE, THICK, AWKWARD + EMPTY, UNCRAFTABLE, MUNDANE, THICK, AWKWARD, + TURTLE_MASTER, SLOW_FALLING } @Getter @@ -124,6 +125,15 @@ public static Potions fromItemStack(final ItemStack item) { case "empty": type = PotionType.EMPTY; break; + case "turtle_master": + case "long_turtle_master": + case "strong_turtle_master": + type = PotionType.TURTLE_MASTER; + break; + case "slow_falling": + case "long_slow_falling": + type = PotionType.SLOW_FALLING; + break; default: return null; } @@ -207,6 +217,12 @@ public ItemStack toItemStack(final int amount) { case LUCK: potionType = "luck"; break; + case TURTLE_MASTER: + potionType = extended ? "long_turtle_master" : (strong ? "strong_turtle_master" : "turtle_master"); + break; + case SLOW_FALLING: + potionType = extended ? "long_slow_falling" : "slow_falling"; + break; default: return null; } diff --git a/duels-plugin/src/main/java/me/realized/duels/util/compat/SpawnEggs.java b/duels-plugin/src/main/java/me/realized/duels/util/compat/SpawnEggs.java index a30de75c..c7598671 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/compat/SpawnEggs.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/compat/SpawnEggs.java @@ -16,7 +16,7 @@ public SpawnEggs(EntityType type) { @SuppressWarnings("deprecation") public static SpawnEggs fromItemStack(final ItemStack item) { - if (item == null || item.getType() != Material.MONSTER_EGG) { + if (item == null || !item.getType().name().equals("MONSTER_EGG")) { return null; } @@ -43,7 +43,7 @@ public static SpawnEggs fromItemStack(final ItemStack item) { @SuppressWarnings("deprecation") public ItemStack toItemStack(final int amount) { try { - final ItemStack item = new ItemStack(Material.MONSTER_EGG, amount); + final ItemStack item = new ItemStack(Material.getMaterial("MONSTER_EGG"), amount); Object nmsItem = AS_NMS_COPY.invoke(null, item); Object tag = GET_TAG.invoke(nmsItem); diff --git a/duels-plugin/src/main/java/me/realized/duels/util/config/AbstractConfiguration.java b/duels-plugin/src/main/java/me/realized/duels/util/config/AbstractConfiguration.java index b77d7e13..e4cae6da 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/config/AbstractConfiguration.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/config/AbstractConfiguration.java @@ -131,7 +131,9 @@ protected FileConfiguration convert(final Converter converter) throws IOExceptio // Transfer values from the old configuration for (Map.Entry entry : oldValues.entrySet()) { - if (configuration.get(entry.getKey()) != null) { + final Object value = configuration.get(entry.getKey()); + + if (value != null && !(value instanceof MemorySection)) { configuration.set(entry.getKey(), entry.getValue()); } } diff --git a/duels-plugin/src/main/java/me/realized/duels/util/gui/Button.java b/duels-plugin/src/main/java/me/realized/duels/util/gui/Button.java index 670d321c..15c73c01 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/gui/Button.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/gui/Button.java @@ -5,7 +5,7 @@ import lombok.Getter; import lombok.Setter; import me.realized.duels.util.StringUtil; -import org.bukkit.Material; +import me.realized.duels.util.compat.Items; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -40,7 +40,7 @@ protected void setLore(final String... lore) { protected void setOwner(final String name) { editMeta(meta -> { - if (displayed.getType() == Material.SKULL_ITEM && displayed.getDurability() == 3) { + if (Items.equals(Items.HEAD, displayed)) { ((SkullMeta) meta).setOwner(name); } }); diff --git a/duels-plugin/src/main/java/me/realized/duels/util/gui/MultiPageGui.java b/duels-plugin/src/main/java/me/realized/duels/util/gui/MultiPageGui.java index 0fc3554e..ace2bc5c 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/gui/MultiPageGui.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/gui/MultiPageGui.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.InventoryBuilder; import me.realized.duels.util.inventory.ItemBuilder; import org.bukkit.Material; @@ -58,7 +59,7 @@ public void calculatePages() { InventoryBuilder .of(title, 18) .set(4, ItemBuilder.of(Material.REDSTONE_BLOCK).name("&cThis page is empty.").build()) - .fillRange(9, 18, ItemBuilder.of(Material.STAINED_GLASS_PANE).name(" ").build()).build()) + .fillRange(9, 18, Items.WHITE_PANE.clone()).build()) ); return; } @@ -73,7 +74,7 @@ public void calculatePages() { final Page prev = page; page = new Page( InventoryBuilder.of(title + " (" + pageNum + "/" + pages + ")", size) - .fillRange(prevPageSlot, nextPageSlot + 1, ItemBuilder.of(Material.STAINED_GLASS_PANE).name(" ").build()).build() + .fillRange(prevPageSlot, nextPageSlot + 1, Items.WHITE_PANE.clone()).build() ); if (prev != null) { diff --git a/duels-plugin/src/main/java/me/realized/duels/util/inventory/ItemBuilder.java b/duels-plugin/src/main/java/me/realized/duels/util/inventory/ItemBuilder.java index 5ae61fb5..3bd71063 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/inventory/ItemBuilder.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/inventory/ItemBuilder.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.List; import me.realized.duels.util.StringUtil; +import me.realized.duels.util.compat.Items; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -17,6 +18,14 @@ private ItemBuilder(final Material type, final int amount, final short durabilit this.result = new ItemStack(type, amount, durability); } + private ItemBuilder(final String type, final int amount, final short durability) { + this(Material.matchMaterial(type), amount, durability); + } + + private ItemBuilder(final ItemStack item) { + this.result = item; + } + public static ItemBuilder of(final Material type) { return of(type, 1); } @@ -29,6 +38,14 @@ public static ItemBuilder of(final Material type, final int amount, final short return new ItemBuilder(type, amount, durability); } + public static ItemBuilder of(final String type, final int amount, final short durability) { + return new ItemBuilder(type, amount, durability); + } + + public static ItemBuilder of(final ItemStack item) { + return new ItemBuilder(item); + } + public ItemBuilder name(final String name) { ItemMeta meta = result.getItemMeta(); meta.setDisplayName(StringUtil.color(name)); @@ -48,7 +65,7 @@ public ItemBuilder lore(final List lore) { } public ItemBuilder head(final Player player) { - if (result.getType() == Material.SKULL_ITEM && result.getDurability() == 3) { + if (Items.equals(Items.HEAD, result)) { final SkullMeta meta = (SkullMeta) result.getItemMeta(); meta.setOwner(player.getName()); result.setItemMeta(meta); diff --git a/duels-plugin/src/main/resources/config.yml b/duels-plugin/src/main/resources/config.yml index e2840e2c..ec4d8425 100644 --- a/duels-plugin/src/main/resources/config.yml +++ b/duels-plugin/src/main/resources/config.yml @@ -1,5 +1,5 @@ # DO NOT EDIT THIS VALUE! -config-version: 2 +config-version: 3 # If set to 'true', a notification and a download link will be printed on the console whenever an update is available. # default: true @@ -62,6 +62,11 @@ supported-plugins: # If set to 'true', player will not lose bounty even if they die in a duel. # default: true prevent-bounty-loss-in-duel: true + SimpleClans: + # If set to 'true', player will not be added a death when they die in a duel. + # default: true + prevent-add-death-in-duel: true + request: # If set to 'true', players will be forced to have a cleared inventory in order to send or accept a duel request. @@ -172,6 +177,18 @@ duel: # default: 5 teleport-delay: 5 + # If set to 'true', a firework will spawn at the winner's location when a duel ends. + # default: true + spawn-firework: true + + # If set to 'true', the duel end message will be sent only to the players in duel & spectators of the duel. + # default: false + arena-only-end-message: false + + # If set to 'true', players will be sent a clickable message that displays the inventories at the end of a duel. + # default: true + display-inventories: true + # If set to 'true', players in duel will not be able to drop items. # default: false prevent-item-drop: false @@ -384,6 +401,18 @@ top: # default: 5 update-interval: 5 + # Type and identifier of the data displayed in /duel top [wins|losses|kit]. + displayed-replacers: + wins: + type: 'Wins' + identifier: 'wins' + losses: + type: 'Losses' + identifier: 'losses' + kit: + type: '%kit%' + identifier: 'rating' + guis: kit-selector: diff --git a/duels-plugin/src/main/resources/lang.yml b/duels-plugin/src/main/resources/lang.yml index 1c11f90f..bece2e27 100644 --- a/duels-plugin/src/main/resources/lang.yml +++ b/duels-plugin/src/main/resources/lang.yml @@ -1,5 +1,5 @@ # DO NOT EDIT THIS VALUE! -config-version: 3 +config-version: 4 # Define placeholders usable in any message below. # Example: Adding 'PREFIX: "[Cool]"' below and then putting '{PREFIX}' in a message will display '[Cool]' when the message is sent in game. @@ -98,10 +98,18 @@ COMMAND: - '&6- &7Bet: &6$%bet_amount%' - '&6- &7Item Betting: &r%item_betting%' clickable-text: - info: '&7Click to ' - accept: '&a&l[ACCEPT] ' - deny: '&c&l[DENY]' - extra: '{LINE}' + info: + text: '&7Click to ' + hover-text: '' + accept: + text: '&a&l[ACCEPT] ' + hover-text: '&7Click to &aaccept &7this request.' + deny: + text: '&c&l[DENY]' + hover-text: '&7Click to &cdeny &7this request.' + extra: + text: '{LINE}' + hover-text: '' accept: sender: '{PREFIX} &f%name% &7has accepted your duel request.' receiver: '{PREFIX} &7Accepted the duel request from &f%name%&7.' @@ -246,6 +254,7 @@ DUEL: no-kit-selected: '{FAIL_PREFIX} No kit was selected!' player-moved: '{FAIL_PREFIX} You or your opponent moved after sending/accepting the request!' not-in-duelzone: '{FAIL_PREFIX} You or your opponent moved out of the duelzone sending/accepting the request!' + in-creative-mode: '{FAIL_PREFIX} You or your opponent is in creative mode!' no-arena-available: '{FAIL_PREFIX} No arena is currently available. Please try again later.' arena-in-use: '{FAIL_PREFIX} That arena is already in use. Please select a different arena.' not-enough-money: '{FAIL_PREFIX} You or your opponent does not have $%bet_amount%.' diff --git a/duels-plugin/src/main/resources/plugin.yml b/duels-plugin/src/main/resources/plugin.yml index 46651788..a4ba5722 100644 --- a/duels-plugin/src/main/resources/plugin.yml +++ b/duels-plugin/src/main/resources/plugin.yml @@ -1,9 +1,10 @@ name: Duels main: me.realized.duels.DuelsPlugin version: @VERSION@ -softdepend: [BountyHunters, CombatTagPlus, Essentials, Factions, mcMMO, MVdWPlaceholderAPI, MyPet, PlaceholderAPI, PvPManager, Vault, WorldGuard, Multiverse-Core] +softdepend: [BountyHunters, CombatTagPlus, Essentials, Factions, mcMMO, MVdWPlaceholderAPI, MyPet, PlaceholderAPI, PvPManager, SimpleClans, Vault, WorldGuard, Multiverse-Core] # Multiverse-Core added as soft-depend due to locations being null when Duels is loaded first. # Add any world management plugins to softdepend list if arena doesn't load properly in the generated world. +api-version: 1.13 author: Realized website: https://www.spigotmc.org/resources/duels.20171/ diff --git a/libs/SimpleClans.jar b/libs/SimpleClans.jar new file mode 100644 index 0000000000000000000000000000000000000000..5bb6d9d9546de4c32729d7b9226636b8efa1dcb9 GIT binary patch literal 276450 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

<9-u|ZVz8+eKdA|d8rpq4?bSCyBDS^>Cn&3<} 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

v1qcMsEcd}7S`id2& z-y5}uOqO94f3%G9Gb}!$AXULmYDkljRa^vaBa0{X9=!ht!u3+T67 z5yKLk#^N5z>J(EwA$H3!;cMd9w@+939sat4ExhOc#yv{4d zsAT-2Ok4PAaKJ%s%Wy&iu)N`vO8n5`=t;O*YR9IxWXBscDcFI!H%;N-iw26M4G&T*K{~BzW z3QHd?YY$n6Lr(^|=9cN|0vN?VqQkLAWr2p0pK~2GPjA^c3-?|ams>m= z)VcMfo5kjUt{7iuz?VvmRMGnsN!FZ4pWS078EK&@12+Xn@e>EvM$am0=elnlT*mNL z{>AjfQs$}H{ZR9S=3Akyb&mDnM;vX$G^z1z^dgG?Q;LI=by-I}3aV~wH>^~aggx8b z7TIOQJbK*Z=PAPYvb(m|Rj)K>9q8o)$dIoyl9zs=eb%!v$q8godaQty$H?*=W)WE~ zVc4tM^&}UeR_OVuICH2B{_k33xdUX3@~4nlqtr1>UUEBg08wSkSLvkW>VrBSVU7-5?Zm zyZva3!R6C&v*C zeitX!zGHTajC~Ta+o#uEiT??+PkbV**LvEr8iB{MA0VAM2~%&ZtU{JRPsIv+ZVzX6B| zE3LVR4qGQ|$rcQ%1Hj|=j_-NuMO&R4d!fwc$9Bb! znk~$jEeMSH?Y}$|5?dQ`HE4NDPw<(7a*Ha_Gd)9qa`NqIB7s>UC#@CVh{e0bv_YfI z)5YnV+ylUced)=)<7=MxuUr+~K)vWfQ4{w>I{gDnSn-RNV{;xipKOpmIZ`T7M>JOp z)zkiwQ5S5*@f(lk9uL_yH`Yz?MXhmHWFv@9T&5t$1jdFm*F;DrPqL5NQZ`SW{|=1_ z{AZ4#RNrrDo`Ggrd0&|5Mq+c#uKM*S@c$Dh{O9*pS?Iiz7w*T8ivKQ75VW;*F#6v; zdRQ;TMXWDh@$?MR7V1JosNZ); z9(xDe&p*|KJUdgP1a-Vna^iRAb-W;Ql6GA{c#r#zyIw#MfG_zNLu^V>L@)6Z-4}hT zVEYxIUeX~op7a3M(X}j{jbK~18);hfJsVmEwln^oA3yOn_WS6;pCiKFI$QC#73{Rg z5yx))0&G2Ra1rs)PCD?o4*F;i4e+=w`kLyWxb>gCX=QdGVSG-6sS#dlp<`ceh`1;R zVgc_$LLW*YBSI7V4DV7QWJZ_b_&zZuoiE@%r$h5@!;!kX%b+|!6|UnxTd=kp2Ut}NGcPi6!ri?|ky>SE6hl832FmK1CTDbW$b13`axxrPwt z!$#beQRx+m(P0^xnd^Z4$r?fVUAIO|{h0%|ut}Q?E*s)9Q5wCtk4_1PK?QEtpISYekGjdOA_hVa5)tN0B96 zHI~HK30RpD_rKGt{l*#KPH#)k>dvs+H4}Fvj)&@MKfvMKOp3ae7AHh_?G~1#i>P4D zPV~F{t#o*7q)V8Rf{}?{2O!E)ovvJp;=^`q4VwJtg&PWM8Ik6}S`aOQudh63VzIk9 zF~}f9fWb;@!vpgTaH2d=vEzPbu>pahfN^gPM(MP^bz-QjVXS1B1XksS$>-%IsFx{8 z=_Gj-QYz&uP$ZQx$%Nb$P$w%fclS`67HOrR( zNf$~r8&o*0rXjMjQwBrzs9zQolaoiIFvN!%ONkm5x?flnH77@z&o zYmQOqquaOKt<9EDe-CIgpp`CZwBc^mv(w**OTy-KJ=Iq%`bDW|)-BP5MjSMpxW+#W`wVpb<1X-1*{E=Slz=A6YS zTx6^?(v~~tkX|tdqcNuKROw!+z^$D>N4Y!m`;R)cU;&)vpi7H{rFoV>N_k^;I$FDw za1;yqLZt$1Q+eYb7I7`s25y{LYS5;!85vE$9-cN&p^G3x*`qjeX=4_RYFQvDO0EO9 ztdd!Ygz8LE<_4v{{cV=%U9%WHkRPCPD z6#G?}q0L;7djTSe>U5e6@fDRjcf|MTc*E#Sd@^zB`h01!SnW!xv(@7Yn?vP&qDY!m zdg@jw65a5b{(P~(WGRD0zxtIc)$yavey6#w+BfFoXFtxS;};T#1~#sXzb+WtV=x&F5UQE}q&8 zv^Ew>@-EYG*=m$#iDj7Tg80g$sIrOpEw|--1n*VougHG;Iz=31?=7j>b0i5W?H z(P9s$w;a$^d}@7Reu|{>a)?$f7eI$=xJMKbv$!~q%>&Opj<^c`ISqpoyGQjQ=p>bh zS2sw)wGlMdYaVtPdEa?vUour_Ik+bkJYK16Oe_4fvxV;YSTO}*Kj2>a&X}Oa#ht#xEpJU zQZa_pTRJ-e84n2isAqC&vC`S(&*<~^ulT8{E#u%u6$Vm27G3%ryMs9PZegm+P)&qz za;%}zFRCGBM=yXv#KPKEz+&23e4jWcHKj2VNekO04hU1#fPR5j*I1StW^j66;U2A< z*B~-`SXAq1+SN!fCdf(MrBAJ&s`?&K-l0IX#zdTg?fDsZ9H zTt{!KN`7R^=7woXC$`u>WEhG{8`m4Kb^GaB#)W=SkaRrghfR8{u|H$zyKaUsU-!wY zcT+i8Z@wGKTfF~ED&(Dw@2>ukp6bixfVPK7j_I2GM8=Y{zaXW@51%Gc@Hj19SOBB_ zRr19DkMWKV0u1F3RdrsRswONpM!Utf`h@&;!t7SdcL|8>z*HSaxFKB8-7eT}xCISg zafl+UL}R*Y{QYYqC0}WXL+2~Mx7|OZ0QXT4SBNBM2|spKzz&x_*xewgnmob0D z|GYdYeZ)DB)Rmoybo$&_1ONii33nk)5pj+>x{M}p^x=^uRmDW>OOA9_Cc zS{uZZ33&3cN-{@AOg6OqSg)rv*|a)L60YmQPdR3~MhXFum3A=|h2X?^qx6Q9n}$_g z0OP{aV%I9n%2Lfz0jM4;2P26A?bWLe+^P2MVFZu!z!c?!%~Qud%m602APu!3j zCqr6;bol0Aww?Ww2VE9LRy#qu(*a?|Km zf08%_9qA)J2{=cjJl$4PN-x>;GMpQ7)tfBude|(}q#)WFOtZ`HIqXnRtOipa1Kohr z5o}rbgX^g|*yhLl8@=^_OsAL;&KnuG6NnL?jZub(Q__)WH;gTK+VwW{>psuj0ck2b zJgw$z)`E?tQMPYQo&O*xvC^hJ{Sa>qaH=8Q?(Nuse!keonY17)cao& zZs*EQogwRoUY(O1n7p^X|MT;IuCmGHpr4MaGB$&l?L~^Vs zQ%;CTk}amxHBkNxP~ss=QsNoPkMG1wHcSZy4KBaRUcSEC_S}4%@7dM?uSM8)`x7lf zdo}37!{ly{;Q|Hawkxs^$5aqpGb-Sl?u@Cpg&9*b- z-MSqJ`SKj7!v(e)$ifr)g7n09o4XkphJh=`UdD*6JyVYyJOwGpHxU@9lUmDF%PzVR zXoHAgyiex=#x+6bolsuk0xy_c<3<};u>}Q$YXB{;ZX7JIj%d@gnGcJ{pcANXR%KEC z%pz{TKv*8K%*9a=u+MNxegh4`x@{TiXjfXVIcc_desMK-h&52bhjRM6S)Y?A{LY^- zAynQrKQBNZ(v;wopFLd2!C;9ULkkxvqPe-cRV@!1vZ~cQCM^}q9>jE{ghBDA9!ozp zp-)v*kSqTT?ws`0dPdzbhZ!jC)|Ap@NX ze?iNU|0nDfV@TNDn-a8D77(ZZikUN-kLp(}9vIdD=0&n+nQ59@g)N?smUJl>igI+T zn@fbh3N_wL)r4)&JwfLi_2e)%b}f&LVIPopv}BQ@KbiPPYIBfZYD0zDH=!!E-dc_j zJx0|ZZWVdRW{z5ONigUNM)y`aNfyr>nzC8?ra9d>D^9BXoV1FHgIqvE(OF5BBYfXH zH>5(NDcuC;*F<$7o9?X-$D%xY*>&8dhv0tMUkmFM5mW5Z#_{zioJfjytG{0U4{Mb) zc=M_8O;c|K#^ik1a6oS?59{J&mIR@AwHp9Mp66AGqNQhS-6`5MRWW$tYSSSa~!71;VS+B7L<4hr<%+5xi*$zwP7u zCNP${{%%(PiD8Kf2`MvlsQd*}|CF4Bw7_9RsrCid;t;a(L}t%Fs4vW{h-i_>C9LRt zKj-93x`}m0PK^r2q|U3DjnYQn?n9yaR}30M#wbwXfId_m=%v^)hMbs@?MX-hxnFO> zEbKI(bT&rNuU@?O8`4Bkq4YB9M~*rJ!<{l%OEq-;=^f2K&t)nD+PEP2 zENe@)ow3Lz#E3Zoqaa@CSPBiyJ=q0P3=8NLpsIO>TynLwfP8dfjHC z`z+6|n|KBEp5WWnbc4BUttOj2%)w0rz_#7YOW+s@urJL>$*PLRp&2Fd_c{@NIAhIg zNYwNxdNd&}|3w*<=v@qLBH8Zix<)D1^^5Z>p|TYL)meTX-AZ8|C4!(OBJ)p!o@kHS zxEIRQj!#MH&E!EV8lNIrMO$(wfu5*wIPCDj8Sng!df%^uc5mDb^nZ5>7p6cdQq?vk z7aGX{y(_`+O);sO)Xe15r+t!ZEF|?`{{|2*vbWiROJa3>!Mv1*?LtyjIB*tk7?pqZ z=+0MB<6BqZV~D>RZ}7;_0f)f`h}6^%r(8{UbeNOZvj}vyZ{+QABC!-=^6@3frg%XJ z#zDr-EA#1ddh4Os$$LSmLJ)(&;@9QG9dW%`^`L)22lG=2!j0P_0qwwmr{X;@C1Gz& zyZ1P|cc29KrgI)yxlh>smxz_dj&(5r18&U-m}UU>ii?%eWT{bBse$&&V0&E}E?>0>`fmAleqYP|cV0yk^Z(D@5!y@382QWh&E>hv zN+-r9zL}!P)qIV#gFBD7NEJb&U3`tynmn&}{D{Qer~%t$8$CdUpC5VfCqEeCO=W&S z?j}SnfL0Do9tjOxsq?10_b1T#2)ARk-nzN5=kmhK(VOvGDz$Be=l$qE@Ixh{`iIGW z@sF+046F^5-Zy(-AmV7Nbl)Y&%Ps$rmsnru&ljkxouMocFEspw+uI+1?G>SU{AC%Q zD8S#+KFoEzLi)5pywG!CckWv`{XB2L!JjExW&1EzdsEPGGLQ&)GjB40)Mzj>y}iUh_N>nFLc@sA+|U+WcmXz+;kt zh@_SWWqHz0B9ip+Gj)kInQ8Ax&do_|{%wH5(1@v6)KG&95JM^=(&*+(*-4#-NoU~E z&}D-X_XvD2TO&>wKO+o3&}*gT=CVrF=eGHEq~@k6g*~4j-StPZsY@f(3O=MmYR$Md z-1|vL6kG-ERFIK>1m_ihS)_7B$1p`J;#8w2yYNN=^%k?Jfc;NQ2BkMM`{k3?l^bVjGSN3!THjVL7ZR$lROA8p1^v(tu?LX_oslX!XxiwhF} z#IiJV6`ZC_v{d_duekVR9JEr(ILvVYkC`yoN-73sZS*NE(V% zcPj~O`f^frrLugDg;Im^R1xSXvWd8(bSb!?#uv4)7WpA3`Edb8CHwT7af4z?8H@&U zH{}U*M{>mSRNxV`QiIc|Sn$f64!1cRrk3w~v>PQiot_YUdFo7QHV(Z41rf3=E-Kt* zO4zv#os}n#_NQCF1EJ7Z7(!iJxswF;g5bDTUtF2|s`635#YKlwYqZnNQdkd3BYi*sM74zFI+edEGxs>EN;0CoC*WTnxCg`H0RmuXz4kg5@uMszs@Nc zHTE7*hJjh1$n_mC30@1>FC9)RVM78Y{f!(UCq-Y;Mxnm~kr`h&!nqq8HN%<$H;t(l zt{9h0WH1c4c38-CG94wf(<9E@qQ&%H#a&Z7@9M6@dKdaXg!II3t%I`T61<_w?*rT0 zNMs<GAn+P5r#~_*cbMno-KGq%tIIdcQ*X;xRA|4rSiOaL~s@=sHvkFpN z8k=W6qR{s4D)XXa&NhgCktT4hGLzbie!pGqv^Bw+yB-M#N_j5PVqK?^cnve~}3&L<%Q(f7;dN)q`6hwA zFtBW+i}!Z6d8Tnk zpPxkE^?_^hkaMp*c8xKy*DTQVU-M9?nfmpY*^n>RtG1I#AP+jD%jg>-{vUL>T#&#IlLi|W#VMO39SOOu+1IZ*Oo)qlaF7#+**fauf5hE7PhAk99o_e7ANXt^m!{BR~x?buG!6d@I4sF zqaMpuH&S|2%c^51@&pu$yQOx#hM*Y4-}_G#?>rrcOwwTYveM|YRovueJFXWG;vR)8 z`vQLdN)jY``zE{M@(j6xR$X%92s`0OAn3_)CXo{glO8-Ak`v*zCS0Y-SWM%LE~yg6 z&;Z?52+>9n^0gib6~IdjLJ$bn@FcFfrC$lxvBW^H#@uW$ycmIP_)0izuts?$8C8Z= zlMCDI)#+4gLBj2m`}uB9@+eh;G%Ik?&*+=wJo3f(q7~10ZIfb+y4r9JcFyN61p{+- zaO)?vei85LW?%atb@|opL4J@w{Oxio_^`gX-HnO*_XNiHfUtb0IZZgRc$bhb;_)`x zQ>D#Sz4k|_sl&OGflND-~RX>!eC`jPcCsZ zx+Vw;$l=TCPPNky1rKl-5+cy(ejmN1?#@uGn)+a^B}Zl{{fi2=9`sF@bLxe02qi&$ zd)gz=m!p{6w2WL2zbi6r79ZI()2BHgVy{he3jX6&7ENf@jacpv!y(x85p}$dECn;{ z=?f-oB!R=f7Lt9%rnw}ua#Al=QHy?t7nSP}um1{r)>l$L`DSsSjk?P-)YH}Xp!Xne@4qwDq(%?W3X0|y z7CTQ~*VppzZ`a2TUs{dzC6L{#PKC?9bq=l-8MAa^3)B{V>pB6DcpqLwu;wOXsk|&O zgb884ItkYjsXM{_1ANnD3#9l@6Q?te?k^L(>V6I$W~dbk_`*-IFu zf@m+wI-d+Mx}V6SX*ZSGBr9DD|R+}a>EWD7@45N~&X{Z?bo)Lguo?xC+B(^m44 zSE@-;Ij)l-hQZto#%G3z4(PM=9P|l04-o#R|6|CWzjubl%@OEoA9tq8!mb3`^bE6I zx?$c~yb%&oz9|64-82L#ar#C^5eR{FfD<@=={{bF;@JSO-S*R{BEq89O$U(0(QtqY zIqkLt_(?+p9d2rX49|+7r)Loqt#Nxg!Tuom6M#tfW(E}n_jF-Ajh4y*fjnC6;mg7!-O?SnmqyAh(HUe;;jhSw3Uz;&G zr!9aeCL#JP*m~l!S=_xvY}H;zuO~|T)&4}CrOivUva!vwTRnD|{;sjEOhFfjYtCEScJCV*lPK?jFdO45O3Rj{_3~nz;S-4803MY)OlQ5n{E_$ zrZxLwl@gkII5PEu2y@+7xUA3p(gYtKZ(t(ppzAcudA6|3PZyjL1&sp63Fe~SGu&j7 z9+V@Ckf!ui{StGPgwWLCH+XeJiUk-29Y$N^x|H~u7*R{AnK zbwzm9#6H+nvP9^4S2KeuC zs{fba=Fgfk)xUm3A-ADpz z+6`+K$VSTjdwR$pkBSwAR$ycw!=Os>!tqZpdO?r!_J7=4l}s*%g!&4yEG__9V)Op{Ppqf zE(N&9_m3aO&TJmZ-o)3Ji(m}k%YA$Zs?#{?eHuUI79E)R{T&^iB*pPNjWf^Ziii!K z1a;4F3%4Kr+Yv)vyyK4mq5d!v-)B=cq0pkO;R6if!=Sw5zj^R`P14S9m>80j0+jmz z;Ah5D0lxy0sD|73;J#rb8>F<>GvG=>_#f*P?vn4a3}$wvmEv94awpek5`Bwxn@9?F zz~c~GiI!$Z^)sSISI`;i@GCacx5hu(0+kgi!}Vg7_)&C{YbY(+nfsPZ6|0i4Dw|am z@L_1U8Z8-`luKE7cyl@N<~*GoSR3CofSjLRhfRAkWq5RT%B7?D1Zj#gMr7;MoiZB$ z?21@+I}@-I-r2e!0S{}$fDnme)-KPuSQ{N!K`gExA}&rdDMw@3F`47?${psO3>Vk< zwXs-|Yj|y>?-iL!QicA4D3XC&VyA2bKUIEkIhrBOl{b=au6Ag<2J05iEI52N;uPn$ zJUoe9Xcq019W%AkZfP57Y`uk)hTeptmf8USXFsl)FZ@sQ@-cS&&#!A5p|Z9#yl(87 zp4cQk_xh+agqTVM{b$mxn*j3xyl*f7XulTGD`c>2MG@pQ9eLJTlLcft$a==X{o5LS zy(fddn{q4Yn^!>j$x$-dv77>%O{X+1uI&}vOy9ozz`CWt|8ZRTBjHx**GkqgaVuKE&b*7^=MpwrMvE~@n z;Y4RjhLG<+xKR9yEGdsQPk3}NeZ%QXy5(H0om`Hky0|}OpL#^-z~`bP*+Q!iW%rM> zz{6>8*9lQybi~@0mRZDGp>3Vr?@&P?E>!Hpx!@>LaY4P*lTC1a52P`BOOX1lwDoH) z9ZJCDqwa(KeQNpl{nE^Jdvu>;)vQZr(`nYhf*ZCQKi-O6Xw#ve$WBAKe~M~=i;Lgv z3;}+?5rM*iJFO+bd_i=c$~0Iq2)GGzNjm#d&B~_k^LmQE&^a@>F(iT5O{Qo#e!WO&k~WD_Pskff5WifsE|OU@pihs>9?UZnx=!U6 zR%R-Y!K2axW##-#$pN?d)xGISfq>g$JsP(N7p{x!4W&Q$d`8rp4EWa6wS&s?DmGlU zVPAm&FO5GiIj~0|jb7EeEex_vPxXDuO{joJTPIkzLyg_tq8e#=OMAFs5vt5NzSnZcO5G;FB1Vjfa3>oAWl0=u<&Mre zxcH)}vpEZcpoO_jb+UYL)gpG@H7C^v`z!n`DZkfXk%WrvBIOlx!Zb$jWpU1tuDMmT zX@f~Cdi-+X8rBGgVANPksf3?!v9I#$O9lrORJvky>3Eq(s?cyXc(CQnJg1by+t)R_ zOiVG^VrJPuo-kkUID|;yBLk$tuNokF>W)xEsi@_a5;pW4z+-PsLeKoA0aLweFMmzUbZZv5##4m{Q?6OuZ#pYD!F%Ft|VH{bWfw=2zPHy zA_9KIL?a1F7FY4pA&uClJfvjCA4ooMqd~lqwCJ5Gp*#q{qS}NBqE{%awt-gTkbPNL zbVd)QLiQ(+RNhfm{vI?b$=XxEDq#hyqDz(<6}C1X8AM61ddhJ&dZz*fZms_wUWH`$pyX^6pGIV6^y5ed__kT*h4V4+enTk75SO=Lf{;`xtN}`ms~k!Y5=v|t6d8^t*5^p*j@V`*?D?g1b9kS&wB_Y= z$Q)YwucqyQCf4m$%9X9}N~m4;=KKYLs~X7zqLdR;ZIS0CZe=}@AXXLBp#DX^4g?Cq zqLbh>f|EAwh@vQtpOiL)I~ewN^mhzX2H9D1N>ScmCKd`v8Sy$e4e|69am$LIjh>%X zPF&d{i2qhJG;<}A!h3%=z3ncb1DJdgxPuFJ?dJdfcQSn%{NV}5=h)x-X{#6d{}0?s z{x@nX=d!4Y^=@x0B?*TC2{Bm2`Cv2wjIg5vl$9 z=~d+WRCAX7hJr^k2hgg_mVZ&>6|wVoYhU2mgZ?_DlOsM2CC6Qh+l)uwea5rzIzF)q#P%%#J?U;z?e4BQvdB~N{joZd zv(z{}7Mvb*a94&&uSj0BkEJ;3C^_unX*jHto%Cd`o;`|)@iL5O7zsYYYY$=+8x@&s z2x0?1dhX%_r6;E0fiulV;b+cl4Bcu1Hj6CVR;!1P_@4-_&%aS=R+|^3h-L~%&`Bwc zGxw~fz$CnR%mO1WFQ_e&N-v$;!x!WlC2@7=Yr>va$&`c?*-k#?ENmHk+kB24ZR=$} zgMb8v)>LMT-RvgsK9v6p**An7M2D9V$W2R0wH>Sa*_S!_QKo9O#lTwa5QI*ijF<|l zZyP3O2lG*_ChwT1;sJH#Q)KRo`P%WdYbjFfL~RtP_l~!)SVCnPSg{YW;-#%en0!jp zn~UFVPC}QcfIuS8bYreVl{r?#r~(Ugh#p!~sXxAk12D)g_4wRO+rEXi>%3q(T5HEW zYg#Zl$b9m4@}=8Mm$KFn!*Kr2ukhODW^XcISPVZ6OMk@?1{=9`F zBF(c#G|%5a2vKHm`i8`DeP*9w`<8-Td<(#GXvW!=ueBgM!D|(K-mbzErcboD?v;EF zs;#weETO^X+kQ)bC{NgF!j?EsnFWJ)sJ9BsLBDL=7f`MlVcg7wGtnxkWz8Z|6(Tv$ z?`H@PdFMsPZU+gA{4nKM79L~zr7&)R1$ILP)!FY?K(e>nSJ(n{)=3$z17gh5@j%|u zdVq?rb?R5TRd=ebaf&c}?$WGniJ!`)4KGijUhZYX8Q@0n)0a9k$amo|vN3 z)WgDZzYz6?AfFUpzYk@R6EJy4A>`H@xWxJ%sUs_|Bc15G^DpH3gnylbf&$f6)7N6>sssspgA-0=EB%vXe`;3+&j#j&&gX2f9 zPz!b!`0(+^!__ z+v?bsFDZw!hUOg8HxZU2=KPu0D$h-IrvFd)rZ3R}gK`r@P`jYh&oAnF9mxm3v~5ek z&v*YYdh=rPcmx&WUcyeXRo`2FjfV*tkihRU;s1l0H~8LP8`efrQYD)wOhbM;Xwtl3 zEwUCddX_}&a#{t^>?T^!CSQN3(5!%}KEJa|R6+h1+5O=oD7NW){#&>^&&mKPhON6BzK772&5lHnDYemkT8M&FhrEMqp`{3S+8-wW^rCqCaW@Uv^avQL$byVQ;@a?kQb> ze&UVnuEhng4r(5JS&TP@|Aw^5t7)UtljGbH6|ddCq2Os3UXMP=8NNzuL$M?{bVkrS zipEPVd)hB4?f_C|^(E}WzS#9348w}1ggX+pESmqnpX2{nDIhEd$Z0+;gr%Pr!vBSp zLfp#57-0WjIg?s19+(c_?c57 zQ=j`t6%}=1ClQq)7;KN*urJ>IMZ|x;1>9bPvxy&i$D6G-l9PmeW~L^yeEPclo_aF^ zuHJkR`<>rTK?2WymLO^;t0&_oRK0qQK?)%(&=2@cG_)!d7QWCS_gj;&_KODqZs*XB zJ;`JKW|WlQT9lvA#V7;|G3L{#oFiIT$P|Et^8v0sAGZL*@xgnZhKzB@+i%WEy!!7j z)xL!KDV|VzxR;aq-e^z#&~|FP5v^erVP{WnL49Rs*1*Acv21{>@OMuO@(s{IS4%G3 zWirfEKF-<7e&_S0z4t}EJ)12Y-j*g46W&Qd_zDN!Dl&id$RGh~MJjQOgePkuekuWH zk;*ijj&+v(pSi)jzuQx!wiY`5z% zdV0K-%Uo&Mh~s{zmSh2`4ydxRL|G<1Vah1G=?}QNnGZN;q(28R{m7F5)_DBHvRjM z8mXl~`*mo|%nmWB))JDFnav4JpjB}n16PZb>SAI5fSoMUCAS>&OZ-n=+CxR1C-h*= zlmMbTneO|?l|~mOM4}>0DnX4^MW%@`CD$yHCXKcq8`C^QjGPqS+rycR$iAd$4I*^O zp*BoF0ChHeFDIhO_y)87{TgXq`^&(Mcy)1E%EO3WARRVT z(^(ddK6O4vF@Ur93&MM7TCZgPdwXoqOs5{MW0z3G;0C)Ah6Jv%&MRW%lR@wUX19!d zCCfdPN@7U%(BV04k8GiubyE7qVa3gxprNNO&=E!?l?z(~D`Dh;agKw%Br1`%?^njq zwOl!cSQEW~v4gvA&7evahh)toEU^(D1!r1_z;`x>p9TG%_2+!YWv+?Zr0(=}E8BPa zk|6CooY>QZuc%ZFv^8fVN)@`}w4*`VqPxk~XvwFoS;>zWI|uX?;@hZ5ulW!mqpl>JLVAYHNr#J- zC)ESs{$Oy|cE>EoaEU2fD$p`15;p&LgTXSZ&R@6B93Df2|5ag?hW+Q?(EmIJY8q%^ zYGG~TVo-;uK!_kOw>B?RLvl<=)reb>i7vy6Q#4EW*;A*P8nGwM$kQ$b%=exJ_YDY% zYj!=%hrLJEY6QSmRh>|ay*QczNX3GqqY2QbM#E8WK%oDbsP~QMcpueYb>CXH)Dz zjl@-^^EZL$XR1Y$_S}}xI-e~^iGlqWh1KSNiH3AeDszHO`VAofr_Dv=GW}!sfkoU4 zfi{j9l}r(I!ol*t;+}LFZd--9b+t7az09_|58wZIML8gR@5weeI@hNuEzG?imtte` z*wU;};&|xsqLUciCI^k9#qx=@SZ*LuD2yajZQ@%^9$`f>A*dFj-K9njJ2IZQnAoLi z{qCgGR<1AKV*q;2RCEH<*-A1Ee9Y!4(;}OAq#Ut-n#c@8F{&Z?xEH461WDRp`4;W# z`HnjN-NPxZEY(1(4Z7BN`(iu=GU74WFmy8;=9I^ft%7T__0Bz8%Z-E#fvzd1EiCR= zZ;0fo46huG66IU0bk0J`>8iat)CvVx)hlZnRXH9`L`IT;D{uBVC{0T&W7Mro*JJCr zT-B5{8e;R*Z38)qxpOKt_sKchQv0aF@`*6>|DMsbRho_d z>bmHAG=iZNkOO?CiIW%2(cUkP^_MORdw78Y<_bQ`N4(;XI#X`=CnW1IH@TDHHx|@ul2{|OpOYW+^QX)wA(<^@E$YDvnDN54 zScOT=&mbsqGk{Y3=)Vrvd^O9VFm2y(t#ns=<^{iU?kH?8ZKlmbphQ~jTOuKiTG@!e zHC}nl2>i5t_C|Y&K1k(t^V^g)(npq=cIJQ~Tl}8c~6^9@?9 z=ALye=fB-iN6GIPq?;-eo@^KJ>xuu^DVRlgv4Kcp!R+kS``9sh_*#gY_e-!wsZVN^ zXIljEQ;ffwRv@Fz`wDyT+1#oG2MPj3e-igsF*Q#iFVFGK5mk`=h5H8;kZ*T}pS+7! zRp3|7Zzv{(Y>hnH>iBlH7d3{7L^703Du2k!m!=z0Sp~e>!cn}^S>h8QPT+vQo5$QQ z^2m!5H$^NPDT+9id!Q-&5K&q!uy_>p;K79Ys_gd)M>n(5Da28XI4AWto9g@<=Yl9r z$%r&rFem+k6hXy;B{IGIdF z_#VrCyL7LDz|a>biSSEqARI20WIq7;B(x|rOH!xq*zB4mcSjR` zc(yS`V=8;hu)+INnM_Yk3eKXT($|p%qEpd)CZ>`SCOb>ZDjwwpQQQsJg4f=>_qBH@ z7;o=gX+uf|A@&B}oo+9eYmYvk-JYju{pa1q69`+-50K@MCEjP{-jSpD@I32?qx?V( zAcVCO$zjmW*}V&anQG)HhAd1R4^pNh6@da-ZTOaz+9)*PSIuC;YIP*P`XN@k>I@=9 z93~)ps5r8M^=c?fqg!HF59CR>Q@c;(e3o-}Y@m9#O}~RV;^UOo-Jv%uc;{Ug`6LtZ zRP`L#d?Vs@Pliom7#p`IB=h8tjVhfVH!(_*1R6bRQj$(YrRNz&+pyXwU7b{3-D00W z`{sxd1a3^XiURwZ>mQ=rIz?#`7=J#UD!Cj-epYO!B?@T;-^~$OemhgpVBnDCO=PsD z#hNebQx?`{jOz~8w_i#k(Q+Az97&HSBr0UKfwXDu zN_jQ=^)P!0N-`B-6H}>bm8z~>%ht>yqP5U6EQ64@l|(;N4y0PnyLyt~+zEUk9FIXo%r<%1D69Zo`3}5z$BqUZ$>%iDY$SwJkW-$>_4wXauJxk)f*UrT5!}ehFFnR*Nf=_r~C%3AcHghqMO2~JC`rMl5|0x zk6vn;Q9EHG14Ly7r#%}*(5C-|j2n_7D)*bKE;y2vRqcuAACEZoKzSZ_l`9AhK|IkGO|Cn7?Te5QAFOgLl*>`7HM}7)d z2pP!E%d-=^*3UW6&w|8d$Pf7On{)|tf>PH@H(&9ae(Wm|yhrz0J~OedN&q{Yf3?OU0p$MhkUe_mrVp-<$?b2*y+Rb^F?OWI7)JGbvT zN5fB0q;(Tv)LvvFeNUF?P$!>PwHuOY^lm<*{V8)bS)IAvx>Hg%C*XHi^15uZ_@YzD zp=J+?Dpslyn4AeHF%9f=n~qI2gd8m8*X5gf^Y}iYvFvK{E+SesX)G_({0nKc;*aXy ziFI+n*+6YSsbNnVPAjlu-B|m{rlT_sIz9fK-!Yvyeq|+vi6o@9tWOFU$5Urk*T=3Ae;BhP^k;o^cYS1 zQC?T}DFnOQ(AF8}1oO6OHaa7pVngqGkWzw+CzBY&_pz<&dzX6^&c*gvXBR=UQ?5BD zro#5vL~n|t6YA&!_|Z8?D7$oF{wtBMS5y(N^AR)+p+d8*=zH#Oi2QgI4_`XdgX~)| z_}8ho#{SMv!q!I-Ns@FS{=2ZhFh?~)^+EAjzh4_Q93p-FZg2h}68#TX>{kmO3g^Dj z9!@m0cjtEDF;;t7gsaq|DhbFwY_}5X%Kz%ZjaAgTv0M@a=ZGJpwU_- zT|DM9*~$e{TM=#*mk_EhsG2rrP%hfLgJx_uNyFhhN$DfQCDgH60waUmWq9cgv7(-0 zzU~_+iDO~a-#%q!Y@3VeazBvV%j|SN`SiVdUmwkVj;>#{sb>(3aB7kF`1EH%|HsAx z+Vt`Y4)TC@q}Umc@_@Oq-=aJagn)LcA-Nu&7Vyan((`=%*WI2Hh6>G!>H}#xXonzF zzUNN;79WJl@Ejh^pZ+QZ^^A9gw0H0v60OAk-Xd^u)YFCM>+$7jPYpq+W{(4@J8d=3 zEPIx&J&x>&;ki4A<;FEHNFabjnRSr%)l8s#j|^rLTcCOm9Y|zU`_oi`_-H*X=$XA2 zV@T_ki?-*5hW~v@x46y=Zxq)#Ai)HE08tD%?i^6MtmkmPiKE}d%_C8bFiRytJ=8?IwjUD zWs7=RDwpRaB$Z7+D@^9T)plg2E_>BeX>%^PI-wP|Pz)+_hmb2~pddL{-pYz2a|#K? z`pl4{lg>ofyLDZs_LE`S_GY(0A02kPm2dsAk+j(WsxS23V6O(BjwEweTWHzEIIOx` zs~9hnC}>j_2VhrS$e_S8GO2}{6BxKd2Ekbn=@GA|t-#uC{v^{Dma!`R%!z9b{K1>A zW22gJi1Lf-h+dTxaIe<6Qe`ooq(&seJ1H%30JOS2&YuC~D_F56QP~aQL~g{_kV_~` zJ|fCz^>cBn*6x!2OHHXz8_aErk|%#cjn|ycPzMgtn%9oz$VM~FvBHO8HvL|Bz$d0J zR-WXE(ozzNR~YJJ2Uv|0U2eorr?Tsfu$UH`3P^C#9HgmBsn4}NKhf2pERcNM$q@4$Uw!B&!G__Oyeyf><4%j63j*~ku5CI$jyQupmMAA zrZCL$+!bx1@dh;upDiGyXyYtdnKu7XvH$b)3WxaI)<5Ms5@`t&o6#GdN*r5{h5a!Q z75$JHnWhu-u^%3(GJ!C~xnN#fH!Dq$Jd!{r$Zwfmnjn*Putceu(R@`o-W>E>FsET% z3YLq3H~%S7&bf4@P70^%Gd7_}Aj@0*6j%HjG5TpwH6$Qq`1GqmrY>ZlkXp9~#HGOsd@g;T?+ zFs@CPswj>mAgd}qqFd^u&T6mZ(O6Q=t=#7{cka~AkL0)!SWlEGEB~l0jKvUTG;PAY zt_MNUujP#5rB(*V*3m445Zytxlv@-ivqb-Rh!xkU|!v-nCx_Q`D8+S zyY0a?zeCCP6X%$s5{GP87Y;RzdrEE1gHhm}n2toUvlOGDU{cjLr5FDse{_Re&(4as zpe;lp_!G|0I2qaJ266}XiinEFy4~)mdlQi(1V2JD=2X7tt3-;&xrn6i`3qZ^VXu!k zF|u1{cB`12j%Tjfl$9n;Xp||_5RI~x>kG=+b1jb6AE2BA*SacNhK0gt){Z8FxH*em zWWKKqk9xdl)X7slt?j?UuVb#Zdoh=1k$%CX0+{H8OG(gbmd@n|Q`4>2X8H2KS2Nz` zY!(;Vd&r_456R3QSzb0LNUyK&8Jf*xDZk1z)T=GbFQ^Q5;Ak&371cV~aOm(w(J}j7 z9bUi>*)!3oQ?eMP8w{r^;rdk~{NQ(1m=HQsWC6uoG>hIF(HiCL-zbBuB z{_(aBSNjpa1VoaP!`DKy%b&}5AnPJ2=?Fe&7I*3D*j)l*nkM;Kxxnu~4qX3cpN4Vg zqxrY?C^;9kP;x`B*0xgmuq_#vP}qoBUcT8G%Jj#orzeZOtK9H+?CozOw}Vg{pYl1| zQNt~eIW>Rj!Za7?c0UTByY1OmAH8H}a;dnF znXNC`9a;1Iw(1y|R!{1X<06U#tv=CwTr@jc>&&-d`ZGOS&qP;|Uy#BHfg6DHJSyh! z)%$$T6aC{H<}LLLJ&xcPr@WqRiBIOJA4@tta+*_(h*Ce={x8C(Wg_g?8>8u9@WT+C z08xyW=Y70!B1c8IMtFK1xZjQyZm$Y;+>6$yJ`?BtuK*+)FC&S#-9Irn_a9&W_^ThQ zEaPP+jxGr(PEc?LS^1#DVXi-76tYo$RRb-;Y9C62c>s5AQ5HH4YHY{43mFS zLH%~s%3@AU^E=V<-S{ovapV3#%OOqPfmGX8H`keDa<;J_{>bEbF~U#wO4T=Sp3`IL zYAy-5nkPsV>RBT(m6;WG6|yx4(Rfvxl4N76@mK?>;+njOqFydr@>VDOZ&Dc1P%cKT ze+lx8HMu|&OQ`5A|D{BO*D|XsjL=l(?qnI zT3G7C*44f$>oa9rGg)mds>cvTjRU{h5ppgyr@2-Gr`0g+Bb65R?_k>dZq5Am_h)yS zE0h$rGpFpw32+5?RNq)g{40K7NF7BxQ9Z@y<91-uiJ6vr@-C zIB^>`Z%~#1)SMYAJ0;0=yif^y&r0%VNiD4ihb>$3(h-7lsQ?$ziRf}G5Oyn4aw~%N zYS36f(eIH}Gu%3x$((}Pnr;mlYkSxdLkq0$ggk>etDKxG))zf}Ra#pZ??j90j2aowKH+XtS&avTp1k+Ad!}2RHhg9eR^ADa6N#&JZ=_a4TeTtWq{{ zC7L)>BLU^rwwqMOcWHp4gPB;y<5s#X7$w*8rjT$h0Al8XkrthPtK4 zcW4f%gN-$cr?snQ;9lINT_JPy<=Zn`0smHU_C2bKbZi$J^IW7|*XI5e24{J1R-KV; zP82jehDi>|6@!&wa}hO|_3`z8?$w}3F(sEjEkw#F|0@fTsPX?$#wD6B|2Y)A6I06L zNh)K(q;(bo(mhpthVM3PWM8ZR9QIKdHo3^!*BA@8*Q%A~`# ztSuTFo0VxF2dzfYNPwuT%buc~5>l-vGAvDPCTI@BUkJWvP7zU#tCZcKZXW%I4vPL- zbT+RtjZ)cJvwkq}9wJbiS@V@V?1+t5n)P-sPyu4UCfiBAM+c}cL zNWQ=6Gt(v=VfXAD-SS)Zz-uJ#7Te#?DY-vCMX2=76a7X73^BvA}-Gb z)6EFRmY4R#u47X_2NK0Y$)r?K86kZ&^%Llqk^8g{ITn4V>JB}C+)2Gb*`d#y8H#RM z-a54ezmp0~;XAdbfl(=+{3F2;=L8RDD?&<-?Q7k5L*fmcqRex&OXWh$_@%(ytcnuN z@AN9RJJWI}vo*?5W60k48>$(^XW7A39%eA1e7w1+9HsB%>@~lB{EeVL+D%bN-VKM? zBxr{cn9(-bLgB5gVGCSdOy%4jJhRRy=yk*eHnv+oou)FKBaA!c^j#HP8Soa|c-2); zI?WW+80DL;P)*XDD1{e)fx`=MHzh2Bk_yqvfiT7RPu!sUQ zvh5TA+M;5nsK!eTrl`undZ9YF4hGDr?KFr+O5&?JY%(oHpzuKB1ec{s6VRDx%B$?E zOjFeIUz^WZvSnu}%eoJM*7TJk7;O>ROgLoOC-i|K3M!m@@hUc z!w)sV#8ga8CH?R6T#S0^E%e`sZlyE1EK8ZP@~V`Y$Q2z*Re5XD!yFhd@H&^pBl%M| zMv_%EU$%Q$wm5bC`jDCm&ytefn#%o7uH3!QgLL_m#EdVR`FMc zvCN5CqnY3+J#JlFIK@!9#V{HtaSn$OB+|$mlAkFhADI%p-zBlf#pn7A)- zl*Do*Pdlow9;NLD`dtDMv;J3&aQLz@ri~=w=CA2$5+YlcLB<$GZlK-g&$G^Q3Rtb* zRx$L@G~hkD)oG&871EPilenoz0@sy&n^>3F@A&oHRu3OChrj}E0Z?!kgyae%4+Yfg z_M1cKy-OAaJ{rl`3>R+v)eX9EJS6$=<8oxLCxG`8Gle1j@)jf#bt()$L4%)$58ZFqz$2)RVT2z0%pz`Wkv>>k497oQ4}>n%o%*yt5(rWEM6ltp zyM~VKv3)|a!_+UZ3yC#v!wK&jlx&46_u1II^oKF&bJcH?NnaY!x_4usJauh_iuQG| zXCsDBwx8ksEB9ewSUOcg^CE`RoNw9vbEC9w5E~vVBUjb`(*U6UraSi`Iqaa(UAyNY zdPr!$1b*7Tt&IN@rr#aW=6uWjPD^}E>!~&NmP8nJV{!YRu$aiF-Jyf){oA;2Zh5UnDA)iZIB2{S!!QRBuR_gY@=a7=2@!#W# zV_)AA9^D1Mg})w4Zp85Uu&3nX5h4YIjlYegaZ4K4^rptTod=c9!exoL6gfCa?^+I( z)>;ebT`&1fl`pT_HioZMK-P0$eFmH_%)%F&vtpR9B%;ZepVIX6`QOpi#N2Wb9#?-p zfaPZ=R$}p^NuDRA4MwT4mf?=_yBp}1P#;`3yB%-1n6PaRm#o2LKQRgE7ns*Et z!`VAFXBMq%+p%riwv&!+J006*ckHBN+qQkjwt2_t*iJv$Rd3Z>Ykk}M!>pRWV9s%k z>pYHg{uF{QLC_Lz)_idx#)c!+Ww98>jX|O)sXRGtFyYZ~yV+{ERnnXzjzwPi%#fd~ zC!xhquzP+%8K+dg2(HqsNtX`VK9oOJ+sS?o#_AB$_b9>1s%SOFeMo_PuO*oK>XE(Y z>KXsG-M)4vzapGxFWf@7Efh{1fdVJav)Tav0h(8)TZMduC}y;SZJ6^;B~J3-%q*13 ziX(x_+AZpjK3bfYSlEoAEHyQPQd$B93L71xsrtNGXsMN3rcfwXj!gQyL-JU;O94fV*kiR4$=K%KU9-Y+L6Y#+36jy) zk&+6{AqsgV@YYN6a-6y&;s`%GMCm#Bax`t+plW0(<#ZEPPvvzL%D?UiQ=IO8pHmy_ z|4X4hw8T<#&=iD6EJancOEYG%{=4!TVzK7_!Zr?G@Wu zAxfD@5<(M|savOJ4dQms;9xx;u7L?wx53#py~UPp3jxktaPTFyT$kkA37gL@@OM#b zCDz?1Ew@8bI&r6Q+EuMj%AWX1nsSceaF3A2Dsjl<)9^^i@gg&(3l(Dof^0-lQE4jV zO@yi?o}zOT)zh7Hxjd0CzO=HbifR?O&&fzpXJ<-v9#=5QCu`gLPUp)>7wXsu1Gm9& zMTn<)B70P@=lQwlpBOw#CIV2OB9y14>BOSsnp_?p7e%X`7>zns8*KNhFTt+DE=&Q3 z2vSt%iOf2QnHg-p)pv-!zwyH&qKUYX>8JmipT8Gdj5p$Kn!&rz^IgcrS=+Jr%P=&N zH+bZTO}23H@^D5sXg-cg04nG$Ik}j02l7xpn`ZUNF)&e$tRz+2)xwz1#j5N~;B|dB z#W|C#7u&pf4DJ%G|5P@?$0r*a9d8b7Uh^eRQF^lU3V3%k_OjxdDYEn~_3AovSX3cw zDQU+qRd+=#A$5m6?hklb5D-F3)uvp%!JRv9t-%6e@n9|RL&L7si%+u^d zkESVquwVoS-FA%oa$Pev@_AaG2^Sjgfv#E-jx}6hoMZIMvULUZOyME(*(Kboa`>O~ zH|f=}W{h6eDH}ndvh!cTOXHyZ@(xSfT^wWw7h`z4U^WL8;>M{%=gw1>F78JOQ%8rB zSmDNX9g1yv$D^)if(s8aHWm51*-4|(z1UaF{AI*nkTxWg!^R_+k)^8T$+_lFPLK%t z!(9!7@sASYA>It6kX;X3mwKb9o9F(eAA zr;0~x%lY{+u>-kUT3%PzrmncDo!=xXA~fU#CQlzCzZ@AO;sOIUU;(o1 zLq>IA>J-Gty^EQ@gNBlifxd1~<{eTy!3Tue^Z2jnM2D)#cZU_l1B$2MQ<33;xb*!L zPO7WGp^|XaH1h(yG!c!4I{2K{K%B6|(B8r{&k#X6JJ%^lTzqH?u zmYyI9QXqtR5;x;L>#QTNp95pX=;-Oqh#IL=pEplKR;hz!W&}IYl__Kpm#5pIVz_K(79UPI()8ltj<#Xwxle)|Y617wJlssM#5Y|+jWw=P zv#oH&F%MhnDR0_hL{PbQz64a;P;T!=T{=<*t_yzUn!aZ#saFxXBOkL(5Gc(MImNF_ zVw!No-{2f;bqQWU;8nQ_c0liKIG?(s^1xSe-0EtljE-T|U>ponW;R*1Ly zD)YtZX|>f#QVvrvYAYt1?gSJ7D<;`jO5^oZ43rvR9)4dYtpaBiC$%v?0f%eAILgRc zN#=pW+XeyrVL}IvxRZY=IN;19g>cjbSmx=$&M^4|P<3H@g9bS9T^$NSp)y_x6@~+5 z-SM<9AZoX;r3WY$b1+lI3FRdX}oW329_txxqXJ8D4HQJ(D1(8>h?AyWS z4!}#L_rmxn;|Y zyPEO1Wh{YMv_X0$uFhG_kZp2lrr~bTS9^zDYCgEn(${;2XQo@!wrjK}K+p~xUJDw(%k(AIuJ87K z+hXK8Gxj&t4tveCz|MBf48qsiU!Xekdt-~Ov*%oJ2m9+qH#K0@`0070V(XAc3brh4 zq^!4cu8a+1{T0R!BB(qEHm@Gq;7ygSl4?1SM1Jlf#i|5^vBcluY-U7|MEOasg}8dv z{C57XMU@J@6X%0+j$>(S4i##AmARgCXDC6B(wDc_jz?4;HlX#6M=OeDh^?OQSQ~0% z8h00*8Poz6FW<_@G_UtYQ+62iZ}pDQzq1~bbi*-yAZWlbsn#EvP6bMr^^f?lZA6D(eOvm!nHO& zLBcVqIGtJY1nSVVU!WNFlR)n76$DM{)V6dFqxCG8w!lVW=!;bEkj^A$lV^hn?Prtg zTW<^3z5Q1{j$Z^~bDg{^BZtBDM6hfnySoJ z_VzvM|DZniq5EFdihk^}vy-l~?3MaC|H$U`J?;^>_RW13wA}farC$W$+EXIa{3$Jt z_k3r}6NifG>zw!7pUebDH|P`Rs0rM8YnGB|?-$YGAhdY-*bS$GIF=8ADVYlnw(;Ii z0(9qeu)B{QN`R!ukQmJf@CH*$95%fDaL|v3V3gvQ5ZWm8>%Ex!3yTn-MQEbr2i3lc zU$)q*I6+?ZVA+i}L45QJN1W4Hk>3jfvCw4rEUZ@$Y3p)5LR)kJ)w%!x<+7!TZ*U>m z_zb+nPm+13%0gbZLTNqICazo}_#ZM>(N#O}o1bOa)*#TJ|Er@mEsupbNvH*PP?@Vi zKyJk1KCR9uHGkn}*wPr+s4%-(yL0~U(hTKcuv61zeBXXN*yTn~oYd&NkEk^!T-L`Z7072)dx%%cCa~2OOTbZC%6l4j zKAc=@@mR=im4QJ5zNv&u&wQP^P=w`*Fe%33g(b^7XtJhkPPVYqoi-~YScr+U zQKfz)i!CDYiYInX<|b3cbYAjSlthKJA25$qwubUNG(RO=;$HBZA8&y6XTveY~PXZ1OJC1fcOSUN^sipm)V*Rr+vr`Q|C+h zE<@{IE4fOoiu{mStG`+)+mU}+%ewqi4=Ph7kKBA4Uk%(7BpVxj+CH zo;3)LRN2k?-Ya93(J7HwX|zsnNf~o>-3A3-cbu0mTNJXg@HZ6C^b+8FCpQ~)X->0o z?8lb?6Bl;9LuzxjFV5l>@)dq{D^y}2p`25#l@KTTLk7O7$cW?0(XuHVMZbOJ^|DBa zcronzu5MO_>O06LMW$&)8j5Au1U5f}OKy0pm>l$0_h~tl@=VUWo;TdEAe}7E9rxfK zDzGevY3U%4a1JZM5#tuxfyF_`zYbDwN*_hcI`?C zKajt8FaCxbQ0^@vbxBKME-z`btfPs(%-c-FP-k!a-hDe=kg4b>>I9LcBtLJN3Lw`~ ze;p8qW)-2f%gjY|2+UpAV={`pcMP3Of?wsy9APon#rD>^ndRM>KJ@dY9dzcW=i@gj zc+W5uDD+i%Qc*=LTWuXd$o&COEdRWZz5+M%9{Zurd?oX|pP^zMbhG8H0d;z#+N48l zdJ{Gv!_*64QaCY*ntG=@+hN~Qz;2twOg9?*@^5Y7+k8H?2&DfGr?BWRKX6s1f?bWX zaD*z8bZd$n$a7SOGP zF=E?uEE1VR6xQUGDv9lG5yd@8<0y-t?l8!}?ah~(m!u}k{jsWa4JGV$bzm$}m`!E$ zdbA}Ca8+?v<$)WE6rIf_G3R`Rk*DWraLiRGihsu6;x@z?tr?J6x0Ok^`3ME$o*Ro{@t${v9uL z=T8fUBGH5fJU9o+Fzy0)nV3Rc=sCF9o%Dxen3M$-y8N<;e~ZQMc*{eOZhMGs`?C*- zkJ#PBzXlCn_&ZsHiBg4`^&&6r5IyQ!+Oufa#<@(eH-j!2Q>^Jw0<_=Hixw(HgQNwZYM4osdjLxj;pWNO9I+Ef=+F#;y?N z;E|TI-U^D^?4>>o&MYcHNB7uY6tO9Mq+Ab27v;4ZB_T45uTpUIZehW_?xB~|+INxV zxbxoo@BQkzG@h{Q8WaRO;s}neUTPrLiyhff@PrMJrf^7L7PxQ<$)NYKos1C?K0=j}eUucj$rC)HG zE`h)UggaPV&k3IXLuyPvxV+<(*|GL2jJ)9!oacMAUXp|Sm@ef!8FRPx_nsVn;VkgA45x8>2Gw%$oJ>ub{nf^1i+J3?_+#6qN5X2 zxZX&|+lMxDff@E)l^X+rfx_K`&s?*v-nu>Lmx37L+lP3{5ApuK327Y7s^4u6w^*P? zdM?7)<)>_DK1vqtMoP~%pU#=E9+alKe$lC1FWWf}I$~k8bKkY3H4zoV3va^u=fpDj zu(mXbcnc4K5!MK0`#ub{lvC0SyaLsfP*c)rwTP!@U&X0JR<6go5ETAxM3dSOo7$@> z^2m~J?ED@$n&L{@VVr2|D65hWZj&hnTGsq6FhE4fLaa-UHGofaa(|4P9PC(FhY%`t zRfH$Lb?#i4eU+jp`AYkDsMbK~k7Bh~9T&}B}$>^Z5A1_tuCHQ92nelX^*RyMmJ)?gcrZZXBiXp|> zg0`Viltsy4dP9s?@gz$IDGL5VHRr9FU3h=v_!|ke=v{AfDv8Rx%%KyTLR_9L>W`xR-C@TYJy@lR7s9woFFYw3r>)UTpDCP`{kSCBmwUjy z_Qx}CDeSFL66=0*PRNgPFR0nd7xFLh$VAo_5y35-xOn=a{aLR#QI5F!-hXt078Nh> zak4K}QQx{HhJVPI|IBK>LQgb4@R?zzviEB0Q*mUd9wNukzKZtyUWh595?I(b+wfU~ zZD_I=76-$u@y0_czMFn2fay^OV3jBUa+C}cwsHWyUnPyPW#qcqAp|DC;g@n~UJPm? zotZ#c6i6<1d23=S7Bai;S_L)xmb8d^D4Fc|&jKv3;ahrp)FLB&O!LBQSuZa8(`{Da z;XP9lpLF%3%5s$N2V;?jP#qORqp}=}b1AGe)4MXAX+~wZBL;=+IvQ6#XH=aL`Q)Aj zeO9%D`qHpCN(aM%HLItSdjmmZ-jnyqKq%YK{9Z{tIW>*GV{j}Z5Qj#iyZ~R zOAlM7#tF;hRN1p^I7D>g9H=FiMqLN3gQT41^M!UIY%I0%bde*9{Zhj$gGzKh+cpOm z%PGp3UtMz53}69AW*qjs1I21|Tn>qLl&*rMOB7}8e6ZCt?OpAdn9d53Xw;F|$g+r| zPTiZw>;d`CG0kj!;+}(g=^HfZGr@J7X6MFz!s%* zmTzCYPN<54Iwmr`ZY#KwtZl(IGZQ8^x#uf1Jjv*xS^6XEsT_>lvE<1RwM(b2gwJw( zI!Al|&~=EeoOO1%xp37k9?-T%q0tO{s(6BOv}r-f+f&FU)H`03I>$N~J)JRW>aBWr z5@;zrC9i&!;v3DmNaY42k&i$`*+# z<--Z77p2iG8v`ut3d;I5^?@MC7lAR>zn}M6y?pQ*Z!CbePrTwXuH(jV0m^(39qWA$ zfhr7jKVpP;NohQbIN)1IwNoWJt^?E`ya^K~PH{@jQKt%R5SF2>8%u?F1fyLYhO^Pl zXDQdgR+O>WGbyP=Rk2P8B^ev?b{SUVjV%<{)-ABcLuIXCW=ac4c}4>pcSVJA8`qEH zj13*aU(rNW*u>u~FNL0<$I>N8BQ0I{=C3K1W<~?)5g=!ukQAFb^(0B)8<6X-8W6_1= zWJ#l%w8r4#bVc7#jVns$HNRy;#Mj*L8JvLB^Ab(hbbh(kN@74(%t^tpvLo?zBQAd` zz+zsJT|!?2-RX1p1ir!Z?l&O>j{aoj8!m7mt5G}6wX{#UU}CEqqw**74h{-*oFGBs zIiW9qQ+u^cg^J|7EP9&SP~$0GBIP#qq1UVo??C8D6a2LzL+P!bPgW$`6u@n&bR#D^ zG+io`ClAhv^sNDAwFrqjpUAfXgPT0Y-)iVmTax%|(m8owAWu|3oT>qoe#l;%_Nhoh zAVOmwMt8WVU0fh;c^|gfw{i}6Hc&zYo|9YUoN=P-=9?=Te_~zzED#)j#p+3~R(JiEd`N!8C zS1x;-uMH7vM{`sP1|9MH%cT7^pT$^VC{1|!`8-}QxYe|Bz)Tsb}oEiohq%|m95 z(O4Y7`Lx^8pLlRMyigd8X2=ZWBLyP%v(7zVKMs-C{&59|A7K1@$O#fooDCq*d8kF2QDkv01x+a{P+RpmQD3cR;hd z&`Ybk@Ma(VAja_pMOcc6aFqKWs-@o&=;-b`B8R;il`wnL>m_gB{U_6|=Zwt1m+KQf zkk$iPg4i{5DehdX_#W1Wq4{Vb*!O*_{#@_V(EwvX^g&P{D~Vw)X8g(i*iV+QU^Jx2 zj6r9Dfq9-r9xB7|eVh?z)+av%a+AX$zw9B}z!y;j=BR|UeJ@;ruxux_;btlkORF_| z?XcBpJTdC?J9(S@c z#KhbJ5^Vy5S?WkxeyX0GiWZ9ZP5PwS-HDGhqP=p5T`bu|jWO)KLiwy5VFA6C=@WBv z{X%fcS{%5VGl&WbG*DQaf&AXzevBYU#eki9oYqxs2d?_}5XRJ#cJs5$Q!~sPNS*kq zgWzr)H%&l!NOuS;ER>jl?R#A1HMjUAw!$M5qm!9H9QBydh;_^)i%R|neWNtC9iu`4 zr8b)#25#ys!tObKX(>P2%$U>O#5Y`C&BCxsOvtGo+?m4kS8>3}V6fHdi@^|85uJ_d zwlc((&2aEMIrI9in<=QoKRQ=@M7>Z&O0*%>9Dp z5T?y>YOOm{pDr4;HaPT^Lf$n;Jlm({Zs+JM*53LP(^qo-z$D(g-J-#}R-_sS7(PQW ztRAGwcCIDZc+==`p-up4U7$N82+(|fO?!npMOICHtEh6Npb89lM=A^^{1wCL!Uti) zN-)3tO}EaQ6!iKDFUw|_Ce^br@l&v)JNKFeQ!*-cYg2U+Cc2~u%$6n)usIy$HDt;+ zS{>`go$175Q2iNhf*N%9oGoZwAA9byB^Q(m^O;CietYKm8{kx; zUQN9>6KW)Nfy39eY)ARUBi39-N^lT-V#bm`9;OpUqKxdL zp{?U&XnKCNXlt@czdKDEdn6uwJ3_X6RO25#TtR!)pA^0 zdW~$_3;G=)^;(n_AW>wh9$#XugALX8Vp;CaXIwTheSP*=ovyD@lsfqGl8=!QG&{t3J6Fe)jV=b5#1*uG z8i=If=ccp_=Po;yp3#(P>#KC+gz9_Cd1^p9NgZ^Dk55drkH&WN2%HScz7&RxQV1{s z<RRySf{pAS=L*Vkuq6oP52#1Ffplb%rT7yv?8zB^mI3N?PCcNZa6WO_RbNs zG`sjR+ZHG&fyGgddoq~2Lv1*G44c!lGrD0Cu=z*w)TSLwkdqp>_StBnyDGN^0+c{s zy59J*Z%@jsw3p_vbvCIx|GBmPWO^Z6^F{T@We}Bgf-hY_1aU$^@V(R-F!V`my~07JfrzQqDS#b9T|JV?D3z zQsq|eLw30C_M4!)#fRMGrTrm1`Z|DpkEVEzKw(ix5>A?Sf?=`#+WDAdy+I!mpACSn$$KE_w0UJ8!bc zp}JcGNDG2SdPtNNN)^7ozO&tKsTtpKjh23?GGS6gkPkryT4epZaftwKKb$$#RVz-` zhow5z1WplLmg-6dt1wKN#ZA-2uy>Un(hYx^vJD^6^}gh8-wuTeIk(aCkx2-;+5l1n zV7xvTOo?Qa+SFroa|)ip5z|Do`JE~4Rjm1<4k$No@8l0Y+v>Ly2PVs?q0{J*%4pB> zcQCmUa9KBDIP;k3p1)BmBo5+L9*ru|Dmu5T;K17fK6_S$p$R3zbw|Kn* zA*x6a9cUp`rzg4IQ;Tx6t^DW8o<(d~jEGP+OZ{$wDN-Shl{!CS4VohEL=+(@b*_r7 zSly^rL`(YHlsE4;FWz*i!C{+qncP$Jg)p7*lCPUCk4y{#iY{y7PZ%xus7<<7D5*O9 zo0|4jiHpHW9iueCSL?-VV=Y~X9%nd*Y}ihBqO-Uby#A_-{t3-VgA@kckAw(iVya~> z;S38eid{7)&)SWs{-?p|viFpbe?#pRh9oz<$2)moeJOZor zPNA(Hq;$8c-*0TN)P2EqAztB>*sdv^v7eS$LigDBysJ2B}S-6LTH5XsAsw`GsUs! zVgXRGPFxM(G_lO+e}nUT79LQ(YgO&BJ#jei)KqJIPQQCX$LHXN#0YtCIx*D>D6SAn zSO|S$)*=@8V>AKj!-^)f(W3O21vowU+>wCdc^JtGv%vx>)-VGrfbgk9j48LbZAj~Z z#g^#sJCrY;uM@rQ4HbXnrj?>71I<-pXpfn3kVR|ZrGOjk`%IA*AmE>OzU}+31_b~G zqVEhjIq8?9TNocLNI2hchSS^+L5F|;brL{LKQ9M-&w7sE*wFu_SHjNN!Q#K{!&*B3 zpM6+w1QkUTECh;1Zh$lr!WdS^2_Ik8DyJUDiqtK^d>u7`l6*YGt%#n{t;n|ketT1E z16OR5*5A04-Txx~Os#a$)jVlvz?i^fc1)}D#P1~g-T%b!_4;2x7wk{`061gZLeio7 zaHA(ERusVC8uia#Frebtd#C~vQnw^f9m6Pny#373Vmu*(A39_qV*msI92xZvjL8Q(#0WG`BWHrCi#pSz{NkE>!`D!Euh32#5O5@!@c@8r28T*y=06Nk)M&DC5= z#h%feX53kidmELPyU>bueZGlTObv0^&1`wX0+an{>^qTOW;(oS2qnT_RpFh6(iU=% znv;<9Ilk4wVD-lnLip&|L31o*P?Z~iEEm^4c8Afn3OU+4eGZPo=XmhY` zVj?VW2?p;nc*XBKMI^y;v2VZoroB*^S*zz1sPh!hD;1}td8cRo#))b0kQt89Z=GtO z)&aYJuS#?W!jm!WD}Xvidf{LH>9X!fBs1q^k{Oqki{fRv%`WFdz1~Mlq1hMgR)Wo1 zxfCc1HAcCQOPm)dbIU9Upt}YiSId;WBHj}NC60VaFT0J5P;$-~sKW{4l$@mAhZ91- z>4^C5BN|HM8Lf{ik}>s>OUw|+l_d^+J${F9729c z_?;A16314ZfjF48s*2!$Z_ON5UdWe)sRnF>LB0p zQJP*8r-3fBB373t%W2%y<1}nN-5>M(HqiX*7O`T+Q?ZIX>augk^yoxKh+VueC6B^y zLWmwD-02E8*6CiTZZkM^!CMuP;t^82@2T+=r)y!}O|hmufGe{wZ5I_y;mV7vL?{!5 zFgWM>j0HwTxTI7T1{DnlRJxXLh)e^wXXZ3oCrYpqj1SXNl3ow3*RCdlSL}D!Ew6`6wRd?#?76YN866f^O zG`%ZH3tf%YadDEx%>rO30nq@OTCrOz*OsPQ{e{Kf=9ZXgK6D0nZdxcGPMr3Vu&cIZ z_ff!$+4R(!VT|yl4fTp&R?C`Gt)&thVaW`?@Xvp^HRlm)SEzH0*H?gPnwKzpaCqjs zJs`}Dizx%q{Y+q~CtK_){ajMst^=#sU@HBdyFpF`sq*A#YcTuxORwqpEH^k3Vy}@I_zmR>(y;5voWZ9Tvu*f&!KMS_ z!cvG<{L|(ofB_QlgA{Xg$X1VL^r%@fE3;n7P)@JBT(B( zFf_szB6BX?)6PU1ThawhRFNuD^y_Wyco?pq=@?FlG-{E`!4ciU>V_0ma%S%6dNyJ(y5dUh_E*%V1EU_PxBomDh4eV8fU~2CApM0s-yRVuj?ms{4 zOxMKR#srZz7AgtoupNMKe~WTzDjS^jDBg;W@+}9i03P z2?hb&zPqwF4l-FJ26ARdB*_O4hA>`|z@j;UMJ6pQZs{15G07;kH<2N+I1UxMHroXW zTzaZ=$f{H@&At%P4hb+;-XkKMn{|v8*D>`LE4P<3q78WIcZURfoqWrb`#m&nv%Q&j zhihHi1Kw}GsQf^P4}qYt$WZfv$PIDGw-n0+jC*?>(0|#b#azf)EKjr%Twhxf4iT!{GW;) zV2Ad@ETkAYt!*k|_zXGR2XkYNsWlieTOPhaBue&5V~L~=J55eiO^(#@)5?UU>HyC& zDdB}UoADrpe0;Lo?2NcL?9x&<{z}|d2kfGEHX9XoU!)P_szsaRxrO-<1(yZExRn^@ zIh8V^PmV&*If>{q*++UqMCnUQ>c5zh*w_0w zZ_KM$u5!5fK)_bJ+#vO4#Sc2o+2vhSTi)3^4wL)sA3O7>L_d1%W+?ii!NC}pRhW(^ z6Rr$MJT^`Ax8+1L(OWaK@l@}TzH?H_L2@q)8o?n_G?9=&k@^GjHeGJ1Z6?N1ZVi5r z+oz<4ka>eAn0}x}$v5Re=sXpBay+z72cpzZm=E%@?38{w16nufL3R7KV3Y8vnJb;z z!%Qs<(gUl`Q3L|e&Z{rRjMnr#u}Nq%G%rv@mcJe8Xc~r^(lwlrlwhheEnU)VFkHj9 z!s&tEjy7OWze1-mCKc5~v7*dM%IZ|LgO1M($vpP0J**Pl3sP^@p6^SquvVnfs-5S^*)Yqe?%aF1BNKdqrYVZcbqlHT*&myCtIjN4Y+|oVYhGHd zqQI02^w8VSP6a5RrTaHV>iV{A7Pk7uGZ9Y3j?K!~?h)X5%n&w~^=$O8Z^^7Dyfvy8 z@93(8jXp^WhLJ3TVdn$CXY{6yo$T=G9}DOAwG{Ryx}(5ffUGS;@QhZsuKfi)U!Wm@1Wv&j%DXug+nZjhrkwbUA9LiI1*zN`op1YH&=6Mtk< zWLe*S8NzVd@$ZEuanTF+M048^{m@zTf84?lR3dDoRA7*owIZztFC0=zD(+faCh_!VhoTFa$4PAH_pXD<9qm!0=+ zQT6fcnhgjxxN{`>ZLwzg;)g*%xOsI3BMwUjO~~y*eukht!Z?9 zc;}E>`8j+xV{2;|Zvw5V@dx^Tve8X#LCtq2W7x{OVXeuo9d$Z9tZf zyXyAf6OUJ@9=Lp%AO0mr@}eSjz;$99vqSo@x#oej-|X6*GeYtSHn}GT)5D>rPj=By z_#js+o(DfykA|iq_Th^q7sfAVMKiE^=}H~D9ZQI9S>Ny}@L_66niHrmn$M2GP%!QZ zI-wmbx0;mtH91wAt}%q|P)zCukC;=C)~-B5cX7ZNZuiKbJBhZ!BCBoF{W~p=GsG|z=YC!p zP;oWFusZFmmk3S7}(4dc$ijR$>Mx+k6jRSHrq%+ERIk=gtWB z?Ri3R#NyaQlF5c8_@|(qsQ(728t}3tm|G(Z*65(-8Ht4ByLuMuC$TSiaAp|#Kpmhii0+#>*$H~sFe`M%SNcK^aKZ#t_m6>U05|?#mj^aYX zaw-?0jFqiClmcHO*S2q2mx2^uQ`VnePtQh1lvmvP8l`LBUEgcp_jjQm-X8;|AgL-` zA!qIMAzjY#2*ij$)0cLHaI-g9%sd33p`YwP*>_;vVE6?=he`}^(#6*HK$dEW{Kd7l&$dGZhyb5z|=WuT~W*p&3Uu}<>_6WA>mRtNXy4D=!k zsRN$>59Es|5};~T^Z3{%%vYW|C>c1*kO+_x=GA1r$XD5#}$-|Rly9S?7W%5FX zI>t*>Nq63>vP??JLwjCxaRq(F$5U5AIp$MRz_w{<*c`D!UaMKK%Q4SdDz?~u<8!_S zwr6)t{nBBr>iMq<)-tAjt9Mc@oeFQdM=I>1;`GGvSq2ke2#k#YcAbe`Mw?4kER)cy zr+>)CwXOvzXn`kH25@8xp$a=L|H z{PkvG8DRrlX!~6|3I-jpP)piW;V~}mvO;L(VZRa8w{cge*uFGTqs+cn4MnCWd>Y0j z2Hm3#WZf*yOfMn#EFpr~(tB6fl5Tn6Y7gf9;Ec%7g?$n28DlBJow40XQc=|k zL91ER6ccY$A=Px(&V$mOpPtpn)i^JEUefY#RN0j-D-s`Hp)BK&^LK<*X#u(cfmZCu zB19~JL#03lPob0+FNb_kosKd&ZjEHW)S`Gbp=6FDwsa8zz)P*U*IAu$%EAVhQ#CK2 zSu$^zDVA?pGhr#V$EUXVJLiJt1bzTsaveVtHI*P zW-j%R4OTG|k$Vvzp^B%W8j_@1M8ilWkETD=OeVT(Yc{30csgelS)Edr82J^EGp^e@ zk9x~SiDu~|NW{%BnQ($Dg_G6tz(n5Y1;ZM!Hc|T2L!c0wx_}XyYTca8L?W)lE{#`{ z|9w47167A6!Wvs?MO1cgr|9FU6{|UUhv%%snKQf1FcRH_B~=}(vT2ELqk4W=y-o$(e!e{6 zZ-=SXlDHnHemwqKR}($G z3hRrLAz;0gTZNZhwPf1-k$xE7Wx+6>fe0V5RhiyTyq4%ELb3rAPtS=tO8l6`@+|q- zC$w;S(#l5^eo6`J*jkF?X0!Upu7$r%ya})6JeRJ2>a8A98=>!&ARS-_Blr|iw^Mic zDwJpU@A#K_m1xe`E;@_N&&PQzry|mP3{HfHS!2bh-{tlKNuQgx+&rtvU{x-VON-WGY<-Q@z@Zsk_eR?u zatS8siwP)$x0#?uFgQ#&*`sop@HXX3_1d-+?dn4;A;LAOkQDEkTN~cLn9l5KSRQD3 zBc?jGGEbzAT6qD7Qa4SB4eTe!n>l5QwNdy+)PIYX*{|=az3@@Uinx}#M8f5(miaq! zq|nN=8?0N}Pg+l8Ru8VAt{w-En@Imc+L+P}juM?{mqAz4{Q>EcO7d_iNJG#b<>{T9 zC6@T0+~{B;f#bS!U!jL}mMwDas=>*T;=+$?4xz?aU34)_hfe2Cwq=#vux604-U$nz z?~ydLJNulr`>p>K<>63kTVcKxmU;Q;%Vl3@eL&u0u^ET=q^xHzCbp=U>wBu8fT-VM z$~d@_&hnIXX%WO8D3N@*Lm6h>t(>%{=YV_yqvg3?ksEQf*{{(W$Y174i+tj9JjOjO z9=*Pxkdt!xt8`0}pr1KMNk#Ee_e<`of|FE< zRS2wdD|p(u^1y9ou(LqliO3UPG6CMb12K!2hQYS{%VuWJY7%__u9lY`ltAuj-cG_8d#=9XGozR{ZP6cxjB1@ml1B{$KYa+=}&b2N72=t>MW( z)Jp4)$o(BIisq{=`k6?g1zQesWQUO}>EnZF+`e_+0v89T=@@*#;Y{4PIX;{RMl3D& zU2NyTDJL3H(ftUaMKwRAsX=2Jqnvp=&Ey>-mn(hlv{=gikwH0?YichQ-V7v8=s3f5AeRxd|4ovc9Ex*e?RD z2|-kG3A;~5K13+F#Om1)Z5ogpmd3NEYH6+$m~u2T0ST!|mz{zMsj10Fj~(~WovvFM zhb%;3bq}q(0rr*JO7;cuT681z*oN>k1w|l8JL`x3@W_NRg&0eBCS!`okuivE*r|Z& z;Ifz^k`YHUeRMfO-4Shc1;Q$ia6Mc13~2JijSsZ4L0;1uBHH+dh+Pb38WwzaB(P}h zV(^=;RF2Pg&>o1E81PZ4H^ivMhCKg%O=y;0!xu<(;l9&@nrkQH;B`Y;jBBYP3U1Ao|D)iQb8Temoq$0=B9gm$egLqZeo8rP4XU z5qahRarRE_l}7EhZYmYqM#Z*m+r|h-Y}*yvwr$(CZKJ{pYUNw|WUhI%=lliZWL&+! zPwVZu@4q#}+`B4k-#GN<9?bf2#HF`M#an|=x-S>tgWZ7oKX&Usw|%bv)YkTUA*$sg zr8;efte8NHu_O?j$(Xm|K))&h{U-?QBYyr**QT2#ueG9tB4S;GmRAx2fn$FMIsG~8 zjk#|+5$sGVRaZ_By0Gnpm@X9~TMulu4r&~6Gh1ERBJN#BXa(;$Ez!C}`q@5SV5re_ zFQaa=dav4UA;4Fu+%fCL$~Gx7SzfKxlh3Ms+=o8&@Pp6Id(kv~cpXmIy+u zUkJRFXPuZ+o;c((0?iwU>!*KMtsr!8Xe!^8YJX+A^D;P-{(-!6i~!m3=imQ3y#yPy zI_iD<*|fj?Y=ZyuNK(ea*y_Kfkrqy9VpzTz)~+i6RY_13bab%>B<4c*1VdKna8Y(- zU7;VfJL@wyaqHVuG8VUu*#yz)f)M> zXT1dM+-7V4d3!MQY zC))rvw(j8<>5|(LU!tEobxbbJ9G!eS4PEX2M}fT!Hh(~vlF7~ zueMCN_5|S;l^L4+WL7#$K%ki1XC5pc#VFou(=Y_a%p+Ttq0xrz2XYUNg&y*Ak>7Kf zr32Km3zW}(t3ZDXA006o7Pgh7bH*kkhQOSR*!ND(kQlJz|Nw<6zJw_+i&PETDil;vd}i*^)fRXrDLdxGr-oGy!9M&_k>d16@l>;?_2N|?rFi#?t8$0Phj8- z7Vg+yl3NZxvoFbrpvyZ+xZOsa&(Xz7_tCqgi7egWYguURx1beD(*S7(_Z~vQJC~?Q z=^W=D%k9?#aI9Sc-7q^#cPWp@Ht^py#{{zM_$d8@04+2R@LLOa10z?9R}jL4NMl40_~^OLQ&=z2K?%ohI?4!WvXt6cILU&+-zHdK0>&lW@`c2J!ZlX!sBO^z;+Ll^ zq!@yD;n`@aSJA;z=F;4KCwPNB8Sr;j?~qzH@1V~ICDXHyTlh))ud2;pZm*Wl{<;F+ zc#GmF_c6xSUx7lSh;7CwyA09{{}isf{hO@QNEeXYev2RJ`ECD|j{j|kR~`EJ@?l5T z)QJp_6?JHx!{l|U9-2b++Cz-^S9de{qUPLSvW^k8m73$1K0WMsP>i#g*-sZbfeB?B zk+^r>V&*|piHp#A=RF-D*Schq|*_Kzw@!;RhEDT~C(e@ssY^t`|U~OaX z%1jVQT`})gu73zk!fk*dKm?W+WfBf6w6lxxPe>NIp4YpjN*k`{qfA&uQb^w*AWI>* z+fr4SIeC(+a^q)CO=||CKZgJMcj7;uiNVJ+U z%DDvlC$w^wW&+lCUReX99}=1wq#Xy7xotR1W~7`ixi8q~q z!~GNpW*=$v$c95;Ht|wj1aXkia}3mJ-F$i<0?W0PPxQT}{5L(Fi%FjrnHNP;K&unfOxSHPX8$i{G*K z*L`C?L1=#7Y2C-v8DA6vxX*VYm>Jl7ZDZqSY@Fcy5=O^(_uudiC845&u;0O(EAIbF z>89cgaQ<((n-;XU>M`=a*&DOn&FP@vV_iW6WGK>gdrAq=09`>zs5nu^yo1RTGLMFJ zIX44;&1Oq02D@vbjg3KVZ7)w}=mK>w_m<_I=IZL_melHHb)Arzt`}FQx>uRL-1Ka_ zp0|_C^jm>HJ_@bt~@xd)`ys z`?V(m*YxfuI>-1eqG^9D+K1+_g6fB=xPZ!iR>Y;+hwkt+@oUJ{n~cMo$Mp`mf4c7xJM%zLNykOLmkNcPI-bEJ=je-#ZeOsZQ3f(*%U<*GN2L zgaVH?+X7x(T5u#(dwNBY<&TJ}#$L}QmPG00&t9;r1UE-J3{uOS&lk-jFK)gknr&Us zUtX_7$226ZFXFNkF!AM3N0NJbKDtX(R1Ggwt46a_{GuHBL9$_9-%lnM9d4qb<+Z!h zU7}_-M7Masu!*tw9&IvwGZOjabAKQdQqV#scg;gPpF$76|7FRI*-G}x1IVdZwpH?Kd?pkzyeYx4737^=t|+I*nX zq|;hq9Db%hurNP+gQEKn=51Y|yReX}KKHYd z4(I$c%?W@hp?kY8`H*nJ&o}aXD4v^)CLf*gK9xoVd34L@T$%aucyqn?^F`dt>lKR| zb(~ z5Y;IM05~r`L7O{YhGo27^ zzK9onvXBlly?92OF>7@QO;ce0tl%vE=S6vbdtL7v|=C!PMk z>0A92o&1pTCo;`?YC}}a??qSTc*@Jm@90W;{W)t5tJH_8d-6B!coZz8@z#cKJ#sTE zbqQ#QG%Iy6RK9f-WRX(3XosjZ?J^L1`si=w;9k?qBCvfbht7gaBB4G|of+%2$~1bQ z+l&^Y9)Kftk&WnlLs*%~e9@D;Q&f8sMyrHBvrw6NL>Dp}>td_-MIN35$ zCuGKSxY4c?2Y*NtZG>H=8qfpYZKG!}Yh}(sqv_FXW8)%&&z9&>vl0;kYKV$dBva#T zGsMd{qu&$0xm|WtBR6M3r$$`sViRG^U6>BNv)j|J)Obr(rz530j{lC`u+@FCh;U*Z zWw=U#^HkeyL@f(OnixMBo5f;TIMT?}((P|Q zrLJ^iQia4ji)*`=n>Ym}yc&K(ZtASKZ?B2)&VR>iE*s))8yzm8YU`U_tB$;@uRe?x zzk66&I85xE^r}DI$CzjoSi4(Sk*-oP*kY`U&?!n*x&@A+2g=CIK>prsS8@VAtTw@_zMX0setqxWTVC|sm#(jBHqUby1#H%!v@uM!fONvLQWZZ2S z7wMz)JEew-t8r>X-E^#f6~DCBu{@Z;LJ?H1{}T9j8VefzTo}t?v9^1~>%f(-o5B)l zxmyFm>LsRf!o)j6uwr5`bf^;AOk{?~xT$6M^ar&V_(H!fbr@cO)$8nqC9L})M)5x2 zv~wS06`hWlpjc9j@JX7UBuyG7$fmZvtGGF}>qF7?Z@7kYBk8v}-HG{v6-A~+lz2 zR#s(kLxH840fb5@zWK@UukHYb403vnw~q$D(A{ENrikh!r-YezL4*bDPBPAU^p0x4 zncC!n)8XLpB1>l0YxW7qD197+uhh5Kd73LzC;()N3Ra_0k@-+Plm@1*Y~|DJQRW=V z5ZfDf$Tp@UakH+vrrzOFzNRQU^Frs6lLa@ka$`-^M$KuEAWXw1$4+fZjK@sy>pt)( zF}j@SUwMpQxZfWPLWu2e!g#i9&<8BqKp6Cyk-SsV9DJf5G^TN_ao-ClT26@DH3+X< zv4#8MUGh5~c`a`&wx5Hflt?$cQ)DdhoGVtpSA1@$Iu1_i$SW(%0wrEwu$LyAYSze* zqu<)U*YJtNP^z#`3t4)N0c#Iwgh>?z#hero8eZATqx~RFc4brU%2$GcDE3;^g{hPu zSxjvwlxFqMSB`9rGxHgPI0qYBKeDK-2@>ac$&2$Fv-qx+)+mU*hChDLj-}~o^7MM#+x~)D8`O$Jtl>T>m+O*ByVrs#M(4swzM#(4Ol2k3ewgfKza@N zX;GExpyn}00O`@ii3e2~_6-fiYw{bktVeZ_!)c~@pg1KIC4;?)7_`K}bKh(SF!U6=GH!h+)UC-CbF?*a>mE9=(rJ`no;xOE=1g zBr}qv-)87kFIvAV=zWIs7KJqaV6DU*bHIom5k5zQGt}pd zW!px{ZFcWRTPaRP;0u*|Zy=&cvSv^zy0_wYTE?)Bf3K}On$($nO6}^5$I)lAa2-?7 zL)Y}ih%@0cEHO8Bd)Z~bgKSNNS5!Q}hMYUR;^+r~uoc>ZKg0=xes2bIh54bY>O(lb61!c1W|!naP`t+E7&DwVExuB#o&LdFV+P#)Y;7?JyiOJ* zWSf_p5WFoezdH=zj7(S=WA%!{GnTqa)YEe#LBUoK`C~g9+z52`&@(i7U}JU<;zU*d z52dXMeIL#3pxo5>KaUPr4wlqeb=zUODGSQt_18FfQT}bXtaQ}Z_-SZT?3u30pQoS| z17Y{b&yNvP@D`T_<5_)nkPk6{is-6X>b56NjWVO3H#oTZHEBN}mF?|${^6f)D-;~; zTZEqCx~I$NF?#UaJ}_mzzy4QU+RXPBuYmn*{unX{$Q|qdDkPILwRQP_Lb7U|??GdE z`CqOHvlEMl6nQ*|kf~Ci;FyWMkSs`me?mqc3Rr(fS9%v|>=cSQ^iVNcCAwR=m13n4 zdX+?me=gtuG0+P%a&KH zfWcqKRbvo@LXNI9e>Xn&*+||lo!@k?3=FY3=7;Ta6Obm=6c+0r7aUxEdQ08$1HRl z_>9Ubtr(IwA2AuY{@GGTZXQ{WR;lH75W2)e?1J$ zU;qZ>h3H%6i3MW7a*NN^2c|$-qCMgZjY3X z3hXG7IhA3^p`xV6g?^KgJ}m)rfz_rNcTwIY;Bri{&Y>%Ja*sdLW$=kzf&JTawX-*j z!L2ZdSY&qUbp|R75RELsNz^74x?`(W>RjGXRYqK8KMyzILu@^}R$@z!unHaz3O!A` zuEVjZwUHWm0(yP&VmQps7kWAp5cOJazywwjtxOCQ%XzBmWJG{9zdEvEo#Z@}XiCD@ zDjs%N>txrMgw143SwvWlZv^8+SXBeq)&}>+V>W6K)U2xI&f;t8Fb*tGoAWhE3&eF$ zo2RYCg4PYuc{jM}lBAh;0@UQ{-MwrWm)FZFteSz!3eQV9Na|iq?%ny>GbJ*5p=kr5 z&e-0;4(}t3ZOYf4N%opC+^ty7K}E$uJgm*lL>Mvmyu|S^+9vvCk@mot-zYSNu`JDE#lbm1Be9}pJRHg;)XBqgQDrMK_opEkx|-JW2Bj*Bl#znZYvOPtuAE_Ed`m|F zC&mTo)RbC4({J5Yld5jMDhH4@VkT_IVLBhs>&bjrWLuyL( z!DAQ9z+>ml^s&HWoq}xh`^>lUW-rMX&Z0Y{5aCC8lM*Rj zq)Q1W^bKL1q(y)fR>awS%i6E;rtK6HHSq=6qfZda4hlejRBI5EFg=#aVb(f1M8l?q z3`8BCVNn0f$}&*WjP+TpB>6tL8DrhsmC>PF2Y%EAmV6NhG;!GcbiqA}#d8bFHL*!& zz3DxAuinWHrHjM=Q@0C(lQl`~D0Hn^fGeXNQLUu=&h&m)( zfx!yUw82e>7h{~$a8Ai&|BiZenNlRV0scXJbJrMim=|b|Z83hNAU3@lg)n6dAJS|~ z$Lj>v6}CY$eriZc-mQizxp+>No_?;#Qi;}hbj7z@k*;~glPHTgCEL2}j7XB67BsMn zV{3ItA=zhdtCKm!Rp0!T*OkYl%1tmeW_8Fyu`$6_E*Fc~gIct_fGR}d=q{qw)Lsck zeMxTIid;;dg~Os?U%HObLKvmelodQ>|$YCQDDTB zSF1ZqE_^$l6lpg~T1yW`j&<_49}@W0W670myh+Sm5}4sgJc;`Up+g7?N6|e&YiS;f zyg}zh`7zgrE?VnCsJ#y#YT&BvbMfs?4ydn!6BtX>eNk(D>pSMRMO}rCUeIT8J z$J^}{xYDg-9m{B`+UAi|l=xH|$#NAo-68iOj)*qmnEJ6i4rKKcmp~OF3>hAI?7{`) zo>y%^%hK;VQ$tp9&r_<;lsG4!*h+z?UP`gg9ntUGT3A82?2Oq=Ce+Sy-CY%VNN8RZ z4H}-?4|mk6!2Z!hy;Gw#7pV@^^j&URP8po?F*;C{9DTNXjG~H^xEaf55GgBz%D zE9-){3UertOOJ@&R!{&^Xf}sJXyr3js1{yD$ao9r+8;>4LfJM~$|On^k$0wO@L&wTf z6#f|3q9@2~PWqe$ptAWwl+aCf;Zt<}}vf&=n(g>+spi71pXx%(|KZiAPltX?Eh5xN@0Xl zM8Nc>9QJLC)QO-9`fjT-jdr)q4&gpgMYIu`N?Z#H{fXjld*9Qt{EFblL=9Q?xm!V3 z#o$FmvN}jw-m3(vR0PmKnk$SuOJ+ZCA3 z3qSh!qZrnrp(`I~BDK}qZ$^hw@Y9Awd^pRB5h3k{=Lf?TT#;(;o(qPTOr#lb~ z;m?RZ^VAUXO41kMSi+WVI}%+(x`E8|71{G3pB_;xNA)DZx(9IUXXZz5HbAdc zpSrev^6-?NZv_=|(iQQvgU5&&D?(}h1WpH}Wm`pFLmO|~&wQbi7oD98>-LkQ zDc>e`^QLEHdbu!`B7Wg9wwbu>U49czHxBWv`GWSs;jH-%M+u%qY`PpC?E!4Mbd?op zuAeTaU`;F7!0exMkC6Kt;RM2ZQl{hbSz>3y)>7GW?x2O2(l7A(S{Y9hZ{MxlVkfv{ z92SNYz%JG4iOKQHGr$yM?k{r5@hy*t?U+>SpR54iIMlhf89~e=utyQ|JXj~tjWalB zC3!(io}YRNsB^_Lf~i~}YScb$U6_d#ECU*KcTo>CS~Eu*0dkv_ZhI0I2rLP;3HLV% zqg%@(ysK#+;+5jhSh}k>eJ&PBmt>N~$~G~N&wxKw2@whUQ^zs56~zP`W(vmsNxMUJ z^ddegSEHXBjrs`&82S&U`((9vr!3t9x|~QbBZZ)-Og|D8BZKDs$2G&L&W2R0B+%K7 zxY+>^wj%I10fc@+{uTCEbbb5I^k(zJoC!IDN{_fp$I$~>T~cY8ZqzX|Izew9ZiaxJ zpTMzqu*g5p2WcPcnhCvF(Qml+x?jh@2|s9=KfA;CHT9hHY~Yi+)G3`S`=qNun&+O_ z6qxRH9frK}RGQH$urosz;4k00PxHKvfH*HW?QJ@sQ>{?vJHpuwzUJW<8bAS=IL8?I zPgW@Xtl1FXX8hd;I@P{#Yg(*J0XE+OaTc9zAJ+k$w}N-nQ^;a{zWt9G8eU9HG~2$A zkX2*j{qDA+J1t%9SA-hM50aWk`9ZZEPu*+1NULtleeT=Fv!|ZOX)$95VWiUi zvD5vOg3-F-GncIr$~HahSe~TiwUS_m(gt`ps!sdX2d*2snbGeg#MsLL^@d^RcUZ)& zsKLFJd)uqr73~*Pr*z5Qe1b@QCuzi}41FIenZiMNg2ugbIp%CiOuthxoqPTxT$iRN zi9UTdYHgCQzlO}efK_kbuKmi<%%0}gVmm(H<4)w>=k4HDpVouco|pTWTam8Qcevg^ zJ^{O_?RR0!0WXsXqmZVJ_xVcRo1lc3%;*Axu1OQhnQEblOP}r_U>fVl-vksQL}@Mf zziAAF=%$JHj4Jf9l(=E|YvG_vDIWE(v3=1HyQl7Go%{XLEBj0(VB9{n2M#4L^*gPR zvk}{OMum1fIVMTO)(dpAJf(jc``9<(Nxag7u3A%nZfkMbn{tPx4py)>@akbc@D4v8adu{Tg4ju#pKefhK1_6W{@F)K>&i=Fe=FIo!_+)Wbeydl>-ea(Yk)^$;+oB8LGo-L3vBw{R%_8p|#i7is& z3*a3^a+wS8lom8uioi^Ii$(VHj3%iJcDYrj4FkcA#doujNRto}@b|1zj@#|`?)UBM zY2MFX3VM*WC_nHzJdq!8hZszF3HK`?w!@pGz#poHXE373sEuuK^rYfLgJoDFpmPqI zRnd@fg36)Df-vVGwj$!8RK9fBTK7CehpyNXq_Qw?JfQA8JIH-J_w@B1rS4raBb`6p z5qD_nb|?-%jZT05@J4c*Y?F}mmK+H)^%foJHoD|z@>YeDpm7i&KnmrjJS3`r5CkC{ z938$wHF_mMd`;r~Sp4A)k(+$~4GfZcd4pO!Rl&u`3cukqngD+3v&r^ zJ5FB6yI3oR+N6vxKio9rpE5t(*m>4C;+zQZTH8|}TQb5XPyo)4N7-r`=Rc;691^K0 zl%Vpa%)zms$&e*xAajWL{0&YybIjSmBJ~X(ZNT_pTLE9nT$m4Z_10|_-l}u9Vr~-1 zmwS-iw12H*&kupJU`4Axi<)N#IEZcRm}!3ftr(J@jAEvx4+M~yNVo(6oWgmDpSxtH zq_$CISXfibsFTd19>Uo|Lz$gJ+O?+^R6?PokeR=t?&t;se-{sryjWQ9sG<T1(jra0)b-r;yOiNhh77b2tre#wZ8)Y<;_Q$mM zJ7)lbMzjws1*zBYz+4yt1)5iE-`WBj@;!~$=Dd5{ z3L)+-cE)n8dM3b|9r#8ejBnT}9>ikHCQ^kQl}jhU3OZ+2MM=|`H`Z*4EprrG{j@w$ zb|uX<@uH|iBXY65cQg^^%l{O;%O8`ht7tEFjLIFmla{b_ zZ!Z^)Cc6zOj!XVjn<`o5Z$}sl7;H>NzSL-wo_MPfkh)VsQHQ3Li_w}^kBs4G_Cg^V z{;_&1Ksy7uka$;H=Oxrr2R{EQclyI8L&!s6<(e9s;k+y@|BW$t*J1rvQejd6T)xZ} zo)~=$ktL$jQRfJ2B~7v}5~2?T(Z!B3de5J9Aa| zTvaWdkz&36j%LE%6>>vz2ExCDje_6#D2)+NZsf}K4ihAaYd41_KzF#!hpsDi$+7Ba zC@G8=cD+T|@Sd@X^tx+Gfsm6k)YKJ@8oAX%s~P9^CtYG6>1LK&+tjU}SW5}v9hlyN z9FSY=*1ai8HR=~9LL!e0@69qR({U(AJfPie%Wzm#;(dI_JTrUNXLAhsIn`$0o?$uQE`s<9-zAk77C^Og-K(Qb! zfV8;KQA~EV_c}f{Ln&f|9PvjZG}r=H8U;N;&BTI`D>ZXPmcTX10R9aLt^N9&H>Aae zpFU+m5n{i!ZQjMtEn(3+pfzdeCshe2W`h;r1u&kw;)8`9m zeglEuIaz_(&xbH@LRf8*7ApT8yTcm$+$w{|kM z0$8;Jtev~Bg>t%xJ=C4MC0Mk_d*MQi7ApU8D1&3MC&INwrFysNg*yIL4N5@x2(qMF&D9al z_yj~(v*hR6Y1}()KFrXuAeXCmyYlr$*|5?Vdm-~>dVLjlmW>q52rwc!qNwgO## z1AdMuMRqEMc`3%e&-<$Yhb$6u2FU;V+YC4@vFZu&t6!>Ibvrow8KKP%~*F! zhvc(>tt+l*qS;2yqc;xQrw>S_S+Sum=7Sv^`&)u2&%?QHJm}jX$ql}W*>e%wSd_-? zHIly=)3$;fF08pPl(s|q4^okCSb!@Mzo9Of!9mZQb+(@=k-&cp>@scP1h}{>dPC#OG!Do?G-5$r>$b%~|J8KUA?}N~V&%@aMu@$!My?!|Q`GeR0w|@@E#JpaB{?&1(kMGqf z3gl}lr2ztjJ(SPKRX+&906-uH%pPqNlrsj^mv>5l@LuG;(7=D<*yslk3+h*lCv5=h6i! zIXUW3x=J(ZVk{<|7|WR-!&p}nK6b`PO)41~4p5GIlt$VP?E);EWjqaLoE_1|CIbe7jurCV*bS*?*7_GvM>DGp4# zi1+>jGjc(;+xrj3h%>fTYMT*XDqb0fL2Vo_4$WBeAVw*Qc&EP;t?c*99lr>?K#H@@ z0kud*G2)rF>=5K@9H0jf1Hs%6F0D7Bey{4Qcyo>jb74shO`A{7) zf7R{7{H7(zARFvkA@A;?a5#nMM@${HB`QZ0lDB>Sc~u{B`@aAqr9K5>-w{(}4f}6k zIIPoQLdLH~?I^&eo(t~aUyD`F=40o`On}WjHF)^68mx$^uG2GCOCc8ZvYAYouXs0C zuHtjF%0?lUD5XbhC9q3XemJG{8)P)97o?a;jwW629X5W-^ctfmrVw{4O(~z6&dRkF z@O^V*h<5oN56VlGvgt$0<&PaX+E(ToQSG*POR7+lz?7EIAMMAj;#pEl+iwN$GD)1* zLVFNTh^eE4Z>6)UU93xI7F^F;?~KD`!Zu{xB6IEHDkVJ5ubeLaR%3JVR5wqy46R@iJixI*GVL&GF6*Rz!sHE_#=*L0zUhu zv>B2x+(;+)))ZN%7iu~>Q-paN+jSF8vA>at;6z@VzI2}HcWa{Xv7{EAqB)h2$F`5E)T&A&8Nz^;>HSr~j&w zl)IEDvK?SB_cE%wUje%ROGrIzGSF0O>W^Rz6&gLs)*FElEX)v2?K^#eN5hnG!u@B= z#$fT0A!DT2JTh%gp6Ui3y&YbE0x~T;Y=48H2gW3Q9#N~#4d5|{O37&)9pE=dh}NJf zMezb5<-FW>V5w1GBN*SHf5B`FfUag6ngUe?5Zx=uSksErq!i#!o>kj$#Q?}us|J3l zAJSgf$3O`vBpHy8)F9<*9o#c4eBfSwbCue{qh$qQbwcE<*|gWcx1h|L>hae`Vo<4T z{f)U&{-F1{T}makcfzkpJ{=fK%mvCFnbYK3k6=6~4GSD;rBR0O9b({sJGWVxZ;$xZ>j`3hQW*1WgKj_l7b?Q+_sxN*;@YG_~bD4cO{KL(1? znxVjtb6T{kii{@Z>ZHoR%8Co*$-_*3$qq~f2ex{?a4ZSz$q?R=VXQ73CnA1<`9)Of zKc@%8{c2WhRG;B$oZZ=ddp^EO-~IY~Zw|t+k1LQftR|p8n1-kSa)?vo6t!v?Xq;d? zff!>E!*O&Y3)1MWg1`a#o0#0xLEyxm#lMx2P!JT>QS(Uip%A=kSJ@t?;^rEsOf72LlXQzh@Vpo)&4C|t>gXkb6x`+{T$s~m|A1JTVC{s~BdFqot zJ9CCH2wXyPT~lULDQd8E99@FvL7g#Ijfc_sE6z{TRAs5TFD#@Gf{AHPVeGk~YQtwP zigm%doQCPz&w3OyXq+B^>}l>Sx2-&Al7TSl6dsro4$YG&BWGhp>}Qx=r)I-fa)K|8 zMiN@mR9EU$LaxlwcoD;>w|29`{Ow{!Ta4$|P_28a5{bOy)y~;pfc{L+o97eJj<5+$ zX%LyPU_ZfcmfB8;Z0pz;eKZKhO5!4s$#+x2-YDc^!I#HaS#{x|h0|$u8z@G-JWPNZG#%tp}Wbf2Yg;FNxip{A9g;@}SLt+&BX1`xu> zSj0)ebvD!{G$lBe+KzYvOlzT5!ez-=!MxA^kj~W4Q@m=8{8>ZS1B#)oC=HOFmW|vy1CjqZ(`cH(} zc>zc-57eSC8v-jTA%krLC@u?tGbiT|+BM zJKv%g5_Eh?X)Mdf1s{uQM$R?~lOdK0bj;17YnH6?_Ez5ao8@HBp#ht-WSHWV9eY)A z;(9H`#ue+0v2-Kh=3v@1;|DQ@fp``63=4o2Ha5Oiv@&CBggmc^0oKE5h{Ut2;=kfj z#_6b&iZ8;xp3)G=*+tE3DBLkPMO|>`ectKjGx6D;`)!}@o3J~yeY$}cx{5ADVYPhA zU4^~Y?)(f<lIJ3Aqo_z|KhbY$uhzzLSbXRTYd${YCc`kFAQ&;3%%sXPf zr-j@>)U4Ap5|mFYd#O4E`I4n`_w&>1pGed72qZMn9`PD%$o2dKy-X5C zZ#5rzY2H0%1i`T;QC$zM!ggw|P0*G$5tU|$S89t5jyReKE9uAi)#TA2oG>YVV65vU zqb!g9IVSxc@w5wRw`gv}W5OuPxdC~vsUo-HCxs`cIH$fx@UPM29D%)jyAcgSB0&=D zC~lAFkN={D_|NHRR6OTd1`7gGg9!q{`#(P&#Z8@!fu@fC-`SY00qw53jQ(Y3MsD}; z@M{nW^e1$%969P(-I$TTBuXABoDL{3kFG~nKcRm;%cD@(t-iULZX5HuK&`^HUX3Qv z5b3mfdOV+=tm#M>90cVIl>UyzZf-J>506IFS z5;)?GvIECWd}Hj`ej#;OYcbdAy@ql8y%jL$ir8ChW~Wr^!NpqTKi56J@$Z!%S(5r zht%94rLmUswE|Z`a-g;xn1Dh!yo&BEqU^2G->S+RZYQ&)Fuu>T{7Rpre#eJi=}>_4 zZNQ}Fcr<5AOLf@nL-yuVx1WJ@#-L&?*g)#%r*^;H(Y;;e{kLKg z!B6o{f+MD4EwpsIO-uhhG3mt|(;AxkE3lXPH8ZdmcIoD3y}6mDsrY5?hK?`Hv*l{N zwb-rJe~p&0_QFnuFIHg&htd65ljlSg|vv zsLR1Z1!JJ<+65?hW!Ilq?yv|ZuKzubU*RB_=O{u-z_eLb(W^TYQ1S^nGcyDNz7$OC zU~EplVpsHh@u?(YnFe(^|LI9hy!!mT)e(bq-J!U}7-Yeh#SBs4`41VCF)U~tu#Huh z43DbKoi;8C5%~V>VzXnJwhxfm?@(@$NI0zeJboo#o*&@#38Z#(8y91WOHx}cCN7ze z$KoWe8|WcJ-!RLN@=T41#Rae={I1O%6WY-j^neNY3%gx9{Fja?*@DINjH$d=j6e#^ z&2-9Sn+iVWRW4ToLw2zods z5H2oemZ;jLh>X2Q$1?9Ql+>?o z*7CO#B3$bPH;AXV*^M)qak@-MEDKIH!!Dy23wj+%vN?IZe8^CgxhgkqgSpi0iLivE zs6Fv8cvy|tkJo%*^IBOYCj#nU$CxNi>VT9G7Q^+qX4NvhQ#DljK#!p%0+P$ZH$Fr@)Dp? zMcI6?1j3?dbl;StowEt?{ErMd_hDzbr3h@e4bzM=R2DWSSP8WK#UX1Z3DlzCh5{8sHMvLg96JzHC(416iDw5h2@z@&a%AMi}dpM&_ls29q8t9I?GetWWY{1I24@=u}ehvuDB?ip^V#uJEt42au zGRDsjIo1oK(hO6}=~Am(wc%7@^xQk{pwDXjArNVeY80N&Tre9E{t8Q5C}#cl3l}`md9%Ny*O19=^kjvb8bDrhR!W!0*O-NzLK5P`kojG@+_xxfX-VkDkL}Y#rbJ$0 zQ+(-|@I|{2>25!iOEl-?Y90CCle^n=(>MQzvv-QFtXsQ| zDzGsozogK|Gwg?n~3?nFC{_K_gt`5K-7 z-1$4_u*x>_U$;;xy}QyvxDZ}EP78JCV{HCLoAc=jgB3BX*b-$sM-Yecjz)!59E%|%2dkAKITt(Ve-IVvx$Ese$d6tFez0=<$?tp zw-WKU_O8cz7FJN3R}4~@+@IHEZJKM_YMSu;s@x;iG?R+w$%(-e zQ}TkKK%RfdHo<-ITNrRUm&acC{xDVba8*6+g}u9Dchu4Eu2X9fU3M?8dP6UrM{!gi z;%kvyJ~%$Wa6A*3K}G!fHYh*C{&h%#1AHRiE>jqg^M@qiO=A03iV@y^^zDmX-WOJN zpH%e_cN!3w3yx!izW(&<%BDVe3^QfhSD_5c$H^~(*pTd20%6NBk1=u(-I6&goL^l8 zS}d&T1xVkMdfIR`baM=0X+jhv`*F!2*}$4o2(=vbeukIfNu?9`q=`78ug=mGUE7|1 zEEf7LPT(fbB8|z1qmK*Lh+7gEhG_lt6j#5ri=_&+93~vlA$OTYoyzJ*|BJ0PhGtZ9 zawm)9>%#3T%^$uhU+*G{?liHPx~ZY@oQ9_{ZsTmiD2DJb@pNE7>yy4GS*Ig%r7J03 z4s8mLZbbVvBH}0A*qTJ)M%93ms`hw&PZ+ZPxhzL~k4?>^5B1P=kA4b{o$I>B_*mWy zceYT^-lG|*<-{JPh6hh0>6xaSkxk}+p8^fdc6GzPRRhD}yAx^Dtm`i{-Js+(SA>@CdSHTwr(4q7;OWGj_56$@Iv#6>U_yJIvea{iTWJ-)Oor zgevy~@J%(`&}DI3O+8rAM{MIbLQ2`zkhZ@p9LZoMwHW*gqrcHGXwXTzO$5_o9UCwRjT~TgR0>ZTVwy^=(J2vW)Iw| zCf;2G1Nm2>d+8IyV$ zrQ?Z&vd}(ywqpoOaOeiT?Ob)du}J*L*SsURI8ZT*+k@VeiAQVO9UmUX25A?U zxTkVk)iQVcH_T@BHaH9))F0igSGXd6vDQGJVU^=Go(s5$wTo%kTj8MS@YLoqo-R+3 zn}a%E^ktQ0IQ{_cimS}O|8WBNrx>o3Jg#=_lXb@>1_KlQuTKD0=8iys4Zy*XUP(yA z251g+lm7RcfAb_7pK<;NiGQ+a%#F=G`|Xjr_sJl(U|K^i^mmu-cl*VVj}X2LKK5s+ z<6}kcZ~x*P#Tr$RgvEqGT_!z$%#lZAY|y?)!=DCspQc+AT-&ft#y_u{-aw4&Vkcgy z%V%*8x$yq;_v5Pb@5WX3$Ws*W9j*`QeGWnSbpV0hP<-lgaPfP{o;gG?1QV(cl+DF|4?Y8cBwv6A@ zHjlRO0{^TAH}7XO1J2mLyrXx+Zg1TXFufQ1ZNcvU*i_+;NBtY<5^x?3^JiZSEo-EeSHZT7ljH|bsFMm#l{_gw*yoJCKgxQEeoDmyWq^vig8C14Z`5uywa$w>L}G>m;v&D zVT{E&WA-VrxfiQ6LQ@Q={I4t22`kc!{c-@eAi;XnG@0wiKtr7%3H4dy)0vz?C*k|a zm_Y(Y_l8#cdoy7f{Nhcq}P z+t7!mvshY9j}SsPnH>b$2AOcoI$5xd8Jj+$imdGs!oIN6B76g^)5R18Vy@`~pPHW< z26Mg(XPOP^^1Ab=Q9y__BVJxnmXfD4vS>Cz1_;~8o^la~X!Ov4Clr{W7|w5vbpxi~ zG8$z_zH<+J(X3u9tj1Somh9(YYKY>i)Ay z8WNK!oldJ+AZ7YcCY#8PU>HARo1(L)0=)VW{D?fsD}zqC%Rwko!U4c8?#~L5j~Ucn z)1b01MYA+*f0VL78YPSMLtaRuLF0-)bJOBLKbgjXD>axKT*?dkt=U}!5?0R*r26eQ zsfZ*<4_PB=s)QuvTF0VXnj)!8Rmc=Ls#2DdBN(pC6^u^ZAY5435aDFDqFy}fpjkBA z+Tdq5Szs9>nW!w1Vjss;tjJoae8N+vaN?<1s7PC>8ZuQ;%*w=4(vY-RIxl{vvieKL z3MnxSq8-8@QPVtMGTn^vi?$aR>S~1|jQbOnom{J6U8{8N?$8M16Ub_l`G4e zCm$_Ic&ai&f=<3Pk`q>C*8r+&qI#Gig(D!fwcaXr5k^z!`@DtOU#Ui1yHdnP3>Ph^%h2NM(8q`VkOSerFA+}bnvfrM!@bPy(mZUzP?eJ1;B z=ROI%a#swk9Ig7ahmyro5!RtunLS&>gFR1RS$j%$DhDFEiK-@Kbc?FpT3g>v$#zoI zz(sgK;immiy&sO);b&U5Vj$^OTVw5}7reeqU20;$atNLU837^XedzJB1$J`(y=arZ z?yQb;*VsseqSGs+opNYDQWfN@86@F6MkK#Uo<&4!3wwd%^9e&*ucA%K*1FZ!oluaC z^*k|7g#2(5x7OC#`P$fb@~%u6B}Ric@+xkxzSSbJh|VBw0mp{PNv>3EdrOdBS-}Y#=daU#5Ej0Tr`e*C1`=>DIwNw7{J|> zM(71=yLdpmj-AasYkbhfiw<&{$28BH8$u*Ww;)>6x|hOQvtEs^U6^adX3Sb+LO6D& zVIz~PLrS~A0LqczGIO@9i#!aRy=F}`U9gKQ#BDm@C{mx_@& zp`;U-VJx8nS=XxIOHrVV9+5q-F>;c4`g4-MEDau8$z$fAPDty!IcneMo zg2xQ-T`KF^Koq9Tf+>4^M3b+Gmkb_yP%*I!x(x$TB}$ZCK&b!HTQr56{I)36=P#M+k)XlwO?qD*$s0bf0E8*_Y zt&(Pl#A()3gL)YkYS__mHwBJ@3=GT|RJ!X{s*M8e@8fg;_Y7@9-$xjtn(fgKk^(^JdiV;esR z98&Ks3+-F<0!*hLO2&14id*+3jQe+Jar^{B`q%@c-CiMgygF#;8NMw*q$I~!7LCz=+->;}-3CiJef>1ag6H=RSL3!UeToALxeH_a>0yhbz373~wLIbyxf3%w< zz_%CGCE4%8=k>>0SiB(KilmvVWPK~J`nJm(P%k!91ZyWsrTKMtqDmQ=YfwQxl@f$n z1%-NRama8u7MC6P$Q8vbOc%}E33+GCHI|#DLl@2oaC5vn9ANy5h+lUTU?YnQ+mAoO zijvJ4(t+ix1;gZVTU%4C$Qh8ae@mkaV=<%N#g^Y;nEtS;yhut}A!)5DGC6CYlocfd zQBNsfcZJ<=MBD}mi9$3~YX)^xL%tyB1Qi~-;URA#)sG=nUI&w)&;SU)0llbiI$~1W z?3%VPwKGshjhZSn-kB@&`zG3Fkc;gv^xJnmrK>kG=l^_Tuvl|$!y{<8xF3hY9XxI7 zD+$l%i((Zrv+G5&tYpwqi@_7ydlVX?Me_PBNRVn9<2qHd_d!atTZ`$HK=k9_9Yq)d zJs(+0A<(fFd7)&;%?$KnCPYgojAyFOd-Myus-J5;;-Lk$($&X>U_h0}-};%*dDr?J zaS@P1}4WSYV79{hgpY+3GV z8w_vgpenEhq!LW618JXlrmKC?MzGY1Klo5JWH&uI6U_0WTKLQ3o}#Npk~`eC&$}3Y z(GHXLWWAdDp4{#Dn5XkL%;2O+)tfz9U)?oZ_VIS7*p}V(^%wXZi$SGf5xw4G*CdJ5 zd#I}3Ms1v1?WY|s?Wsil!Z8p$&)Bcda!B?%VVhFuP+6J=22nf2Ec=oBpu85emaSRwsu+};r6q&{5LfuX1W zJ8TBjVz_^R8??*PjF<7m+$aW=NlQ0n-wB6y#31f-!A;+8lzGbW3${wHPbK&sWuyu! z`jItW^tb1BnQg%3dBkQQOIgdtWbdNJx;4s_`{GqAzNQe&YRn25r9T0ay`~5OAb%~)-E(YOat6_S@`WaSOqBhwbzDv)+cF5F{R z7A%z}ZRT;k^0LmpHTd%7P0;aM+aF9LaCalrsJ^xS;Pdl7TyI4;T}wR#q#mvP9_(A~ znoPs>Ne6t?Z}6`x_hL)_y_SdfilE=4zE*@idsWGzj8h~2O_=O>_wy)g>!9&1IQ%NW zroGsB`DHcCbBnQ}h8q3v<|APQu{!G$aRNtVo^G#^*v`>RD%$mNYG(Y=*yzXkNq7OK94erH06Dgpn{$J?>c`E}qfW!Zy57hsiOEGdAH)165 z^Ot%bz970rV88&$H{=wOUq7K*fJ|;A;PI*Un*kz7T7{KnZ|03E@vCjB+6oGgf~XiY z$_*+NT8+DkYhIO&bQfyPX5EgP>8z>0kiACMU9MV>vOY3AHo5;?LhHdS-n19ycY1n_IAG^G&Tn+?9yEl4A_wcnE)*m&fcUpMwpWMckv6q!u3W>D~ngi5&v3q=9P1Na+0aAMC4Y@^6Nj#K zf*W)*g3PIGQOKleSm=POW>zXVhFbQM#6yQRQkLByX`=E4)~UU(n6>5nf!kBIxw~|F z&3FkL#>upPsgP6Kxmj1;a(v8KcYFwgV?*{Yk)YsY1DBv-YOw$@Tpj0zrjwLo=b@HS zwF@Ij-=Y1oj+1k?(xQNVUiU~TiloQL%EA0cn$}${9DrKq5ie~DJ>Zjsz;A}8zGGou z+kmJ3owjsjZ^p%(l5KSNj17CH)nsM=3fowjwx)N?8UyRWp+v_qkQY0!Lppw57+{DN zPb8IK%s@1LLEzZOS|^8zCDeQ2^6G*rx_qpg9KQm$Vzy?rWkGL@gbi!?L1RdKMTHRG z=K6E;(MPj;qqcDLl9dM(TfI$&KpjZ6l2@*kqEfGVG@sd_vFq&d?%X}MXA&NDRuxa^ z1X1sRWmxF?TQ)kHl+^gir-Lb^cNw}V&FLHKc^?_KB}=|(bK)`gdK8pRzYa9tjauFu zy)%wQ+4`+ynOC=RsieHgQZ;b0Y2mUcSI%37WuQBx-3_t+qc*szI1=!Z98{%N}_#K`zo`IJGl zjLX-Ug`O>>b()Ztw9?3iCJtBDg6x5+nHv{bru+`ZuUw*8h^<*VOQl))$r&h^(=Jdp z$QC-9cM9StuZka00=pzJravi);7O$s*#|1lkh#=4m38qn$@BnGVpht1W%GJ{8>Eo% zG|q4phcU)zpH5(`AYUTzwtQYtOJ!AbO=Xo33S%r*%D5?>PQ@%)GI_>D&4$T~FWB`+;oEu`vtj%keB!A8w)WPq<=JA8l=Jqy)_guuYdOOiq7g8rc z_db<92TOG~PA%_8oMq_YrA>I1xBkFv#I2>FZ-U zPu@Yo!Y>?BhMATOL?{8qtg3L4pi6fNE4L{ZBDiZ8k{{Pd%7y)s8#y<37tJN6;-&uP zB{M;VS7-$DAzFBJjFlKQcHQx_>sPnRiHqMu9vuD1Ahd5M&Dho)HB6@@=K6v#RVNu$ zw`?$)yHFuN)NQ(Q@vPRpSm37WNx`&h@TST!Z{lV#EZQr|P6qQuxFJbt=~e~j`z)nX zr4`bB{p;$Ho!-nx)IoXsR3`~xrNW(Bn^X73#Woigxv6G1_Uy`sc~c7K(>Kua!R+S^ zW73+RGCD=U!EuIpu?2_;vr+Z#ZDqkdabtp=Kb!KR5oY2LX^}KZwAMUvdSI*-gIaVx zl7|E##RHSCb8^qIR#wO;8e5)^y@fi$){;-z+IDfA*}iR1#Iy)4eXKOOt>uP=sF`q> zjk%bc-rhfPppI+Ky^2*B zyWe+QSJhw#<6)yx;V4x`;jdi%m+`~I82p4WGwzK;*ae@TG^mXWoV<|MwuvEb#S$jp zt%wkCF7nXZrK+ufW4wLndqGmBhq1Vl<10TSm36OLl+Ea>#WN1)(s;F6lW$L~-ZC;c zyuz;9mAgM}7D{{g;Vu^PH88^KIu0=LPQ{49GMO6iet~3yt|>}-r#ozn+P;F-V&KHf zvn;7j#j1DKXdcFcCY8`8y>snfR>(y=gw<_EL&f-8bjn+C`eS&F`Wel6Ol=qz;PIK#`!JQ#B#;A**en=1W^D$* z3e0z7F2=@mrV=u(nCw<(>6~jD2%4tuH=PFWA*tsX0p#*`gonI`dQq# z5$9^Pc#_Y2Cl_9pNt*j<3Q@x%rf8|vl7NK+sTPOj-3xS=9c0NNB|C}F;<47EjO@au zxH`1kz&<6M4jv_3{N}C81U@Te78R4D@`L-OmMR=7vZM-4EyGQga@OFvGvoH_+Qkd6-^jrI}(lwU$o5}dKH-8i6X0mq`%6Qvh z*W@_V0#aF>u&9+F%JoWz_WpWO-p`Pe?16(EmmS3Br!wa1yu#iqgHm_ntj%5Pnzu$w zY$MqPD~8I_&UYVx>P2Il>guk|{BzfRZGF%HkWHaw_WOdvx!rEiTyp_IqzfE0+YE@A zs0W>u)_9cqI}_axwod5g6{oH})+lI^A1-T;LElmM%g9F3<+r$5YoC7F)SX$T^Q>8{ zvqj&8^2_|(d6u(g=v333!h@}6ixOj&1)j3%GMo8VqJc9TGO2Cil4cnaW@Md>Sr3wL zuwu5DNdoI(W{ye+^GiK(L#2?*b2k@YiVK*boKrKC^dm1{u$H z%)fndAl8Kf7zPh_uupxcXG*q&irbKD(i;WxSMf>9U_q##g?Od64c}{L zzsj%q&GmzQH->}Lmv{PO;CnzmP9q7I^+Vr|`gB6X9o@*JA&;$ty?}O{l9%2mS42WX z0>nd2=_B2XzZf<$_rl5Z*KRix6HAcw@$QFVzko3W0~0mKI>FxL#GErD%Pgh;Saqz1 z0>KClVQk`I8L9b@0!o%Ca#DsAgTv(&#jZWk(FsX`KGk=9?Ah3Gxcxi5FMlUKPs;tCrpI{<>Aa>RES%QXsQAE0JB14L6L^I0mUKF3=zCTEAY z6#XL>CBq&MdJ!{KCpz1q5-Wz`(} z$gjx6%-hDuq>#TJlQpJjIiN<3fSnlhhQF}PzhMW^=8%9nTSTST?a>hTS&K0{ZQ~MSB&J|>A9a1KZ0mU^%;?OE4A{IuHs-p@tQ*b5KJjv@sGV(?gY-{Z^!r63~f(DY$I`pISycP!|I&&RyNId6; zHs;$Gmh%DEFQ}w)KQyJ-sOnNY0u8W5Q?Pi5oD+x-6=7+ghWf^%ENj2A}s60&;R4WAn&byZSxuO1Oi`&F#4c z>GmSIV@%DOa!BfJrvMnT>fw6r$G-8{rbc4W7IGNuUk=Ep9(^Y!M?17K64DJut@|~! z(GuM5YqT8fVNXCld9)n(=9bitDz^P)kto%T%Pre6nUfoiN+M1-x8rE#!8JySVTuX& z2V)k*KoV*`9|`6PABO)R-BoLw#4)hSe0C z!;>V2X|ycs(PY8csrmH4vbAN31E|LU;`OyKxbNEYVJx9GeEYCQCqxF^?{T4HaAs26 zO%8r!CZyj{?rBo7pxY|NnOYbz``&6Zm9$n-p?96DW;2ZGg?H-^QhB<1@!jJ0ZfTA8 z@S;XsUYy;tZ4>$PzkBz(zbAe?va{S)E(Cb@1bg3Z+(EkpWIHtc!D+sWtc<3~Jmq z@(i82ZbV`aU+yqvCYXyS=Xe}wmoU7IxpH&n#W!juVU(#qOlGbOxe^mR5oY6NEk{v( zd(-0Rr_F=Z zBU^i?P#~M^XJ_8;+*-qA1Usnsbx?unmV?Svo(f$NTarU5dG6Qz^v{Zebk%dl^g_)^ zyhnis$D;A=^sRYULesF)+Gk?pRIa9R!bPcy7^txp&W*iRfAZ+P(45uaXG#(_(fQ4V z`c=g|=h`fj?c}=ARe@dXzdD$!*xTOHx2TF-2M(Ynig^`}~jZCOM7$RWivA9$9T zY4$Z#@`@SJ#bbtW?a!9%`$o(*QlCL5`-6Dg!6MnUXY(CX0pa2?xyrc%8h7DwI5xcQ zo0^n44QUhUz#y|e=`w>E81;r?|G`VL7>Fs%JtSmfY9Vg>I4@7x#s97JxcVBDS_cjW zHUtd@#`s?=J%kN_0LOocIuaAL9M_Z)hyF_9mMa9{XznF_TNP}5o)s=QP&`FmCu4E4 zixU)-1U;y8*(jrOsymo+jbHb`C7-}%f5X&Wl}_COzaAyu4re&WAB&>(urP{N8}fL3 zcb>Y;%J2U3`<>iJssxL}znp86u_nX?J|fq6+fCcZK63y$9DsgR+tO=Dsxd0~JFd{f z`)~cN#1;~~A5MCMgx02AYgka(7!OVwN4O)lVy8Nu78xIiZEBP41_oUk zRb5-3amX+$aA21e{nPS@N07eUTNNcI?HM*D?HNTc?Ky(!TZXU}0PdjoOfVsos+b#l z7}coINqrHsTG|c4a;z|^Y~-j~SH8YgntxzPw4Se_0IykJZmlR+$0ChXdXAD*R!$f{ z0WVvM-++fe0qe$xPi+W0p0?4p1!;2@&MSbYAve1ksTt|n3WFw_$cd-LY6atP7G)e*0azms*%yZ(eXJ*09*ROn6#Fl-1Y5g=d|Ig%p3^8L%{x z=3%3sF*KV}HMG|d+|S9L!kRi5%9q3*z{;NjfHPzbuBqs)C}o-bU16I&yqjfSUnN$d z{09*W1lT8(Me>QD|AvrP|i;XdtM5z44SErHH1yiCvCqTwglZM_ZqAl9K7 zI~SREwIs4dGnS9@Xr@VgVL~=C0DbDpN~&8{>PlyJch?`V8sA0|)Cx1#2y!ZP6`qA0 zV*0??o(@r2A<@roFV$JLizVb)tXSH`Y3!=t7-;Lhjvdm}r$qqSbmlU#M~7iOSMMZxcLiQKhbT}4Wa zPL{@Hh6gQ$;OgigjTY>ods0`PE=p@%J(s?CA{JspFX7+=)I1H$unOmai5uR=4oR&D zE;yJC($7X}{dJF`0mm*rD3mRFqp^-V)GcfbOjCf-Lu~gU+9OuFX%;`-`#^Tc%`Os9 zB&r~mB*;NmO`byH|B!17soTUS;%?(n!*Z{2lEh<#+SfQAaLERtngKwjGh#{fVWKZ{xSsqud^jCl0A08lm+-L@J ziK_E`u;9(%qk$2Is@Tjy0kQ&0OoxV;$?6e=q&KxeZr>XX6D{F13kP`RTHpq;bM@@q znyK61rfB58nIx}uEd$*gr(8O60GACd%Pj4(9z$qNW1UqJ(3?`pSJ3?26e@YUfH4ci z`9({W)7T9Pt?F{8pxN{><;Y8iX7WbfsRMcy@k$^Ygb>JqN8zk79ppWbPWLebLO8R< zvf#8#zjBD5Z60_3bORvj7IpNE8t%lgpyGg? zg4>J}h<(#me{hp?q(n+e4qgjb!z0o9gr#nEr{@ips(6C#)xD=yhh4#Izus)cx#4zM zN02!M`k1^MqpOjGM(YOa z3heTS`?~-Xto-fW^>Hr7Z~}35s)Pu?_Lyh?cRFIE{F!Yv?}Qt-P1f&3jP}+JvQuyC z*-iZ3zh4mak)}FgYIpm@WFA#Fwxu-YLKHEk_BY(F4B*R`OvcE)|}4TULf=*yNUuXK54RcrMRORSWeBFhF?GX(3banr2c z%AqEbYplwX>dSU0O1O>rJX6Pa53tmIJ+!cZ!7!WPa44e}xn)k<-) zz2-}jCS=0b5VY&)?7aAkUiva`g!+mCmc5s*i6dzFFAaO64I-WyM-dG%jWA79^izye zKp_D*YUJ_L3RSo(^SXK*4(6xYCp|QGIO<&;Vr4qz1Jxd_YW0IlhWD`WGv22iyhm#8Q{AFWI9U?V;S1b$#^;5f zrp0{N0h?q9W*o`P%S6_RZZGWrGu{7L9C|7?aa5lRBlpulD)?V7j(<&dSp#c;vVq}e z%$%JS0Qmn|NC#B4Tu}b8*QW!EMj8S)%_!u5(Mb4y*Swisr1}7e#=At<-)dfs(dXl#(zfqh66Oa9w);BB{aTQ{}8`CZuUn$Yy|WpeZFe9T35 z@`1m*^SeGK0b~tc@K@Jw!RfW|(ckU9p%}iZgGCeL_mC7BOT+G$M35WvP!bdFr9>1P zj}LRu?U`ed8)qcgOM;lc0MXWYar(`9F#2g+5hV)xW0G>d*GgD1gfa^lGhp}x)g#v- z1ED#CiaIV$So{q*Y)WM34=JT&&Ujk&&4ZXRCZ_CJ@fsVob=8!(*w4*C@kWC9q<4%H z(;4RJf$eJ`0PsB**i&Oha%HQ~*k0O2gnJ_@5|dTMBj4}C2-yP)VL45{%m%E*%0^oWmEhr; zkL)@9m@rtlbelvJ@OlxP#eD&ME4jRbC@wc9;L@WFq2B3MlnP};Wg|X@IVo<|sO)Wr zDOqofJ`)RhLqsp$64B>Zi4NKzS^Wh9RwlTsqhLKQ9d}t7(Q3^o*YC#-Qr~js zIvjA23NK4GOGOEI{(3rHvRKlXLiK4FH$+nT`|oR0fvTypDX0d|rXWP?tuOX3 z@W7_yMIfhMS}TN$0T@L5fZ)hYNuoT21nCur!$Yjd=em}=4?~8kRQcnU$IBGIPE<_+csr69|()ke-3Zcfo?y-2tn%xGFsB%5-Tg%~i>=(IWHMH^)3S6g!@X*=ol_C)wV1U|REfJIBhq}m3 zCODUwYJqj{`yTV3sZ}D_eJnUnhdxYp5LVk%*j)m9YFVlQgQ_gEEeL!SVu%-*h-nbN z&p|e?Oy|8n&EuHKE?JB7_b&yJ1Z< zJVJZX3Hc)58)3mD<%pq{F&>2Yzbb|JlXyC zCLVw@zy|0@FJNWm_OBg_wXHKi;I6dpfT_jKZ!x{+qFwqWtxTx4LH=1GTQ|DDQrmFccsTZJmF<&Q=DJ9b zbU*e`E9G`O;QW|buPZTyiElJXPnsTU#oJLTxhgMS=F3dp6ZO%;o~pM>B`*HlD#D`t z0vxBhbpAx)T~gdthn!*fG&3o?=%w06PD1kSvY}7cDEM0Emq}xx3+>6xVd=hC`@xNM z%S_`e=jgQv^SdBCEhr3^m-n4CmMwifek_UY{7mYBD}%7Okg9o%hsC_egx#N{1n4Um zk*$c-Ia#=-Pm|vI9Af5=Bj@n42ARvjGYxn9A6P{Qm9LI9clSKIZgk|tyEyeRW=vr- zjZXSG&Rw5MyFxrMwZ!)xlBdjB-F>$-u}TeSH^gx_1=Zo4qmOiyQ7a#iJ*em%;M|HO zQ+Nis@j)n$@J&Oizd`)p01GXI82I+N4?g<@nD~GFtN%B^{`JR~v^BQ@82L7o!`5eCntUo-(r-wv9tw{9iWlBqq4;d;U$#j8ETWDh%U?ia+{!tY!h0M1f z{8~O_uOFyX>Jy@kn~nSS^!qXN?qev~77RaEPY9xuN_t(vKqj!AY|)Y;*K{{4^bIZ% z`Uj7mFr&~AbUv>K&&F1AC~cH*%<|ew0rB2GwExa4kNz_7YwR+k3-Qj2rzh^n&rc5- z3LOu35@c|f{F$MLaBPVKD4#c$foHt8^X8>C1htbCJe3Eq{lU}pQpx6g?2|u@0w*K( zefQyBpC-@6^IQqA0gZ`Wu{g>7+?Sm534edx$1pu>iYQix2gKa1aaoCXs@JC-G)fRya|Pt>Y9|; zDq$pGTBesYEcwJ5140v)1=3XCAF`MNj!jO1Cs)xIF%XMOm$0{-q*f4XdV-;>0?fR~ zNuYrl(yB9$4jqLwH+CP** z1kfpg@UsWL?$eX_-zSp%8)=_(0q{T2)%dxcoL5HuGb>A;YVK}eMh#K1qx#ux;4e?N zs@T)CY}nd_{sn0^wNKiN3@c8$aMRYccPyU%7RNKDktU>~(DvAY_HP9LuZ<&;%t;yA zi(5kSw{yqG&8;r7?vIx}Ik3mQate1lmBB^|Y&%xJ;@q*6@Vt?&0)R1U4F#(9(Ho7P zgD2y&gFpS9Ldr08O=N*ro} z20i7Q(`;P|v&CuEm^QSeY%>#?W5{`GU8a>q6$ihqD`is;4L$1)fh<-PJBh#~^U^|n z0STLvklwUXkqtm;F3U(=gA1X3e3U^9)I}NYMyV#pO=EQG7!JHVPz=nNWTIRe#*j`T zlVBJ5Sy5lqHH;e<#X&O>0pVM)p{92a$BecdC5@vY^%RDnK~T&;5qzd$7PWJ2oaNl#w;;!3 zl9?$^gO|*bcIQ+|lk~rpX%+GE^2%YMc+5atjk?MWzU3i#eei>ti?Fp_hST9)fQ91N zZ?C1&%E@kkarrG$FXnR$6ju8rw?8Btt4rOJFxJF6rqpR>;3pL}`9cdFD(s5oStAK2 z$u;e|rxqORTTOL`e3eHd8$}QsG_xN5eYcNa%cs{g#ORmu;{1=)4izgv@%l`eB?eXY z_#%|{#YyB=ELu$`>TC*}cEmtau9Q~)a#@psd22E>ltOwRQOQ4hIEa}|;j(F&46gZ& zNmPbEf{P6i3B;FQZK;&cdt@a+lKo^rb}^A$Log2#E4>@XI2exd^r1{EMmfzv+d_?A zW~*=-^`-%qx3XMyRTs zF&|ze`OJo#a9{wwWAQXZjR^9CEiBL(T*a%hCz=AZ!oEnzY_x*#8%qagJ4&8^{F)hE z!`f?m&X5Tes)mxHvaaVBZ+20B~C=yR7g>pkdF@qG>{@<%%C8ByaIC zyZHOSFF3qfYAEaek&d6%5);FNw#p|M#TR$|&Scm@dP3jm`xN1-v=+kdgs>q2#U=5> z$;>=EFE~wddS2~b^~4Gh(#$)?**hopkBx8g?vI}X1i3rA;4E~6!p11EJEX&*LuPV( zL0s3Ek}k&>4Lp7hjOcDY$5S``$Z2~cq$M}Lqz(P;LQ-a(VyA)}!j`xSn(T9QL2N*z z#z1{*(mh_+tPCy~c%%J&39BK4HqK+AUPmB|fV~>2fW0Zsw}B07R8$w5fZQI+zcdo2 zeZnsJJM>J8BzqwdNLXS3+<1H3kZ-YWzQUp-9VELkdF*O4sDJUTx58jQbu0RhFu<zie zm2BJgvu%6mH*ix#j%blIWK#H?QlKPsnT#mO)+HQ7=oz{%WM$J2fnP29#ev)RYp*<% zIGkxI*Q7#Ku{pcH8bdf79TX%Bfi`6noT(p|0m*{YB^)f|{~_%ym@@0KW%5N4tEDil6fXc-)l^tNE;lV#=$8O6m)QKd`9rVeSvT+xsJ zUDt)_iJEx^Q?oqSehz0eTH_HWwmj%{2E(PS|NM%V4yA-N?VA&|nc(q>_^;CQmx}Il z`d}FWs^}qLll1?52<<;gkGPGSsfpwNrf*ay6*q-31X8oIxE+Jiq+m&UI7#YQV;OxI zz@oyJ5i!vw8`(&~M@8B~hmA0;!^J5C3yCybtV|)(Wck%~y4c))6}VmV6bJ=g6M^`T zRDf9ITS+2^+WRZ3kI#5=T;vPBx zCyL7Ae@mKuCl1kg5jNNtqmkzMBB3>gq_p%RLG58MxQPL)v8J9Z+m7pfAkhCvX1jLf zK|T~#LHbe`cs2RleIquZ-eX8SNQO%HWhO;)LxbGxSG+;oVAyr_FjacjuY#Gm;iqW% zO-b9D#y^6M6d?cvLIcWYx`K?aAiQEi=4>!*LwAS{A#Q8uKZ3WkbPuLZI_lJ1X!JX> zy!HwYO$j6-HslO&+x|?FM63s%Oam7Xg|9zcxK^I=SZmFT&GSM@vIP`smoExx99nzi zco|R6_9b<5R>HTjg!#RjJ)mxe7(NL#F1j zuwNAtmyobUdxJPy7@tGEsMtT^u1qvYOd&RMxZQ_Y%rUHQq!07fSwez2+FcZWR4x2?Irn#Q!%bEbZiA0UTNUZ%U;s%|QuW1lU^N zH1u=e0UQ=l6NhNnd@HL6k|iC$DL#!I%`%og{0UqzK=p&LvpeM`-=D-*tT>veAK4=B zXMuwQ)95HyvtRRl?#uO5n@~W&2a+*de(9j?Ah3tLZqYctB`#)&*ZF}20pRDw^&hyT|2gQ{9W?hS^L>P)D zefq_ED+f`icGNF@Qxb`P2d*s*yUMk-xZ*S?mzP=#R5u& z-I;ZHa=v*hX;%<=BQ0^2HjtMt5Q&POlmkb_NY%TObuN@yPpkR^V$GcvGR1D;>h51T zvJ9_?i?n#9&vFT=wOBV9ntUdhYDM)kI%w`@R7NQ7&I|yP+MtJuOBSwFv{b;qV#;q$ z&5{YII#SxQK#?=CZ|b_dS{Al-_$XzT9igo-+ZEQy+;vP|NoVlWGETu+eyn2O@t4sv zGp13)S6#RyrS}h#lH#>VAZ3N%s3P}V>HUe2O^q#ZI8FBuF~~ab1}3OVBiHjmHKW() zWd%GX3LbPg`>#mF*chaeA=ibC_wkp!R>%A$Uu|K4LwSiODz^LlhtyD`!+qNaWZe^=SRu#}O*Y#kf8xSHahCaVhObRMCg%_xy2L zA*NVu&9Ge+Mviad`V-{ni(X|D9uvrFB8)OnX{JAYC7N17UTHyE2AXZ=wvOnXHHMmlgBOt>CO2JmvWP4Xw%2l4k-2p z3YHj$oda83_Ga|N8=A8o@mSs+HYz|4ii}z@tsH$HlX0bPnzGUx^QadcuDu4icB05o zNyVAOgEXTo*m0o(tEX-b`+kkgeUybE8s~e?RgBaYIkn8ynT5@FLP+v5B|9wIiQ;nb zhTg)iJ#SkrB{0~A+v9sQW!l7kLlKK~6!t1mC_plHib$XL!dxYwYImw;{}Zq=d^ztdTG||&8nebh||R^m~d^3CL@0U$p(RI-Ywh90blr>u4k1> z`!(wImM17%c?YiJ5&d6~`K!2sbYa=P0U_fDbP&YuMKJna2Fa(8^84=(WLgQYR%G!FLb_#}I)w@i zj)QMU)yh3z?qwBhe`k8-;DXbNCHCw=W*>HDq>OGvLp4&hm3FEzJtr!&N_ z=7_ka-vga8-g}16umzURRH4(~n5ou}8CIs&SYf@UIUi=SEZWyJQhY?TDkm_{YQ9f+ z9saIY=8p8?1O?httI*o-|EApjG7Z>L4_hUGHTfC{E|LEhT>oPlkgNMRTl_O>aQ&~S zfjxLS$sb{r_TUDuRap5NQ{x1F5;u(e@LG}?kQ?})qzA4Et(sFhM3C1c5o!!B`tC1QpzDxu?r zEA%xIj-Q9p%s6}nRPSArp~4UdPV`D)mi-P!1RXtJ_W2CgI1;<`39^D0`CP*u+mTG2G>^jZy|99ngn1?{pK48=Mz-#ow$R#bmsO6 zGB9D_VGiEB8dQA9l9Vjvyxk9PZ|yy`# zTtA?6z4xi8L2Tje^%H}+2QS~xoky07FxG{q>E}h$3!!UxRXwdfqPU^Q zVw?kkhTJbkl8`^APzFZo>f-NuvEy~YH1nIt=sT!)oFgQK`vkL#R=5Y|RrXqCVNgQ! z8zq1_O_Kk{A5{{8!3ynabLiBY-b{}mmblF;MMg^URt;+C(Wk%R2!gbY>?&gL{^f=| zO@zNGQBvRAlN>qGzi36`DTq{MBrEcb)Y3aG*zf!v9hKHs4~jKlw7*+t!_uj>Qx2Ly zo_|2u%ba*y9yyZKe>PH3Lo+XW^1}ci`&fV#?@d15hW)uF$A`Br)4jSt2(Q!{ST*6U zoXU@99r*Th+8&9i%$juihCH=@>Wp^$V#-l0SNxAFku7#m^_<0q=f{KFQTN2$ME5wm z`v_gtyDdGx?`IH^8@xvgy}F5xw&=7dE@s5>*Hgcmj1BN&ye(?|5=e8t@HR z$#e~2t7^o>Y}>RFf5g>APR@AS`nk8bt;lR|6>KN#0SLy@khp3t?EV*@j!qQET}`;( zYJc}o^-bf`7*h9{+N!J=wLPPM66ZRVq}S_H89b`@6*qV#>{H=XxCzJa6ZQr_Dg6s- ze+B)9yF4L=fVH+CD9=RyYdUnb07icQSD!v*M{)CSK7CP<4YhJ%oGM&g?n2S4X=Y7F zm9V~eHz_0w;On*T~dLW_O{vPNArtQ)ygyL+E+Ia{iqL=Nb8B zoSCRnI{;wtWbR7pi|Ru=z>G0pC7s4&r6`4r5#RWksBsadPM<6)r*_xRU1{=L|Exa0 z<>%Iy%~}f4M9L6H)IZoVle0m$bDt++D&<<=ZP;%TB1_2AA}8WH_?I2tVmq(|{cB%t zltByf2@OOVALH9Y--9ejZ+8#@VX%Mmv;dJN%qQJ>OQQ(t49`Jp zANK&AdUDgL3}i~4!GIG|i^@5q%7l_}HPDM0bBhNC6Q0TO%WT@#tE4wx8LfsH%-m5T zXmcAJpBmh)8RK90cZ>Fykmu(1s5R(qj!p$SPazIT2-gi65?5<1K?~@4&CpZ+Qhz+* znBkV~!O#2tO~L;q$MpQVd;aPeh5;+)f3M*GDaTYT{-kp*St<;nJdz8enO{^FCPm{z^l;nl|Qr>weYadco%V491kpRy``>n*_2%JLUb zk^OwTy+8K?nQb&H3X5lrv8HXVno1>Yqd#m^8TLd~!j=63cnyw1kMQ7%na$h2dDkyb zz=>w|K>CqeFTa3|V8OJz7aW(GW-^N?aYnus8%}hy9jP5*v(tIvw#OGupbsI6Nu`)c zUz8D(5RM%#C}v_5!TM$Vrk+D7)5q3J31`aj5I!P@PVCl_`y~3A;Tkfnsyq2dC^|q6 z(@KWzQVy-??Qe?Aja-Uf89i~B7%zI2R&KR*R(vBrYT4#;hDwX$zzL&9+28w3`7cdY zp_>IlD|X#;4Vit`nW6fFHzA^t3aPZ~{jAo{efu7@y)o$DH5uOQ%~>CZx%P`g*mghV z#|Xu1pPP5-jHsbOzT!8HUM%6?Qt=l8F^VS249a#!p{-vH2CT0QNW5fdz+>^)#u-!U z)P^WTGsnSm%;H!lgPxXf$^|&ah(852n^=(QY?*fcfE^q-+=nO%&LRGA7PK3q=7XP6 z7_wvAi`1UpRfNj@YOL5i%~zYLa02ll^6=r4p#;wlV{0}(b2Bq5>ymW2LsNBpH~LiQa+kuEp$` zzgU;wjo)#qM4i}{cE*s&bWT=*+fzbN_+`tE!=v1Iq{TnY>Qw~}t;9&6dz34zqT|q$ zv9|W2iknJQ%e-(4yso2ua+}{6T7r)=V^^tv$IE}R_@nrM9>ZQtk2PL2mVRq6w$A^AKA__&01Z+uks(51VkD5dT_GcZk*gco+Tad;E$5*U|u#D4SN5n;x zd^Y2y9f2l~yC<3wajUs*h;xCDh=p*8>EyZ+dC!72k6;`;ckrA8`xtf*KepPq?{D6_ z+?|hAs@HU~Un$)&@%^oB23Aky@_G~&UV$j_2J+BG1^wt zk3J{Rq>4BhThxNCzM-k;*}VJuVO7msTkaMq-%Y9gK#{#H@=6i(9H~{Q_6+IYgMKrb z;+B8;RXZDgO@8-4k5bL;(q#_Ys@}rXL;ZjYx5=7ziXV|!C(|Xb+U?VC>`7+CyrhpC z^E-60AWG=wpRtAA|A{SZ|M^>N;R0eH9IxZx?OHve-j*o3g%7QIaU)N@+IDoOTBFGO z`YJhR>56HVodZlgV%vKYo^`~Hp)9VI2+>sOLe}H<<(AJq;f1H2CHy}KX!_>0uf#`Cm_lA3wDV}=1Q!}R;T_Arh1c>_WI=R;#PI*gEOhkP8P1JMb?u?dSRvwC5QVrM-0X+m znDLMQoq!UWr~Up;Kp8*+LY=&7v?ISS1`<%s-wB9lyAVh~%Q!#+k|#1g{Wk*o%cx~F zPs0!bl21Nx74Clxt-mZo1dLR5*d6cc$Zor{e9sP6aXzFF=WroY@ zcycxIE2#cxFM_(hoEb{2X$NBjzG+9c2&$Z^2HKD-T05)sfi7BmYDcPgHi^dSWzL8} z;-2}4OM8p$`HS1)>N98i7Y7FJ+N^@WR1$}iwgHCNRh%`-P*d%$X=bg)&Tl?ldv`fy zT3-5#Pv^SL_4hf)+41Eg;a@A#ZAz(GO2(OYppT2nuAMWJTuNlvku?fVH@jBu6y)9% z?SF1HdGsB*Mx>9qG=9ocBu}~`M9hDrs1u0&R*+gsqRweM&BQS@f1~*xNIS3VcQ@`Z zXONbUry-=y;_#<%xzhD_qhae9E9q7(;!lndL3Y}JpX4-|pGisfP)d4kc<-n?uKAkx z^$kfVWTe?!9GVTb6h(2H?A|yZG zFt{rE$2~>IOSgVNOJSa>WWJm>YEWI?RAdAOsfIg51=EbXdY_vzMO(!MyM`9YRCO|C`w;7j3s)4=;Os=R zebAG$ZK#v8t*Em`)?(v{bPfm?3pNB5VaOJcMHm}pED|qDYNIwW0%Cl|BvIlkHp2A~ zWRzMVYV!3EH68k}f^a4zc5pMJr}W1D5%yLt36cY9B|6UthdU%sy1X#5ur~Zui_jua zgAWM5k}p9Mqy}CJb_v$O!;i(BWBMnc$%~%{1^sDuQv%fM$`#|dd|JX=Tc6D+9 zK2Q3$6I%AqKvBit14RzZ|GEtaD?@Hbgi!`lUM?uqanLJJQsuX_oA$HAk^_PwMG5$d za=T!o#zt<(8v}P5`?&wsMcJk4(ny=H>L2`qxuWiEY|OZtXVhF%4#MJgtA#?rQ;yp5kFt>OQV0m>@OY4(2DpQ90;== zAk4)7TOIoM=$bh2n)CmNGDMtz#nvcG!GI`B%K9hD%E|u|W#xZIS)&`!b4mCo%5eXI zGH_f?3vX+ay1$`J$9w8;D2w7YvF=pqxkjjfh7LFbwgAd!JljrQWnM!D9>4&s_Wwvl z;z0U)6TF%5dLsSMkINhWN&qE#C6@;(Q7lW7_*-J)h8_AhtmYS zzNJ@2LT8kC2(h6@v0G1G+!*gjWbg_4F5pea0PuEaKsD`tk?O$o*_h$V?$YG?ZJ1nk z#4fv7O!shB*k|*){+FAVNJ%#R&^-`kxqm|$>|ZD|0HTal4BKWA{-J`_y)1kA_dNR( z5M{ot{-pfrq&;0A7&Zb#KEEJ#hxMD4!%llSkW$k z(}HdNFw^g=q-gTMsi?wTlqM22EKlf^w5yP!U5q<7!#qI`YD+oE%#j+7ki&G4!FVu7 zy&BWY#4I>7EJy332W#o90?#_J-3i7xH8f4Phq<-vY%~N6NZ#B30<*Ji6OHLxFW2R< zT8H$ExBniQvE3=#b@!hjd#et9V)_@z{w8CMHj*#cKtM7=KtP!Pk3sgA$?|uj2DXUl%y5@wtN zeGgecaLN#G2b=?HBZ+>2&m<~@{_&@$IH1N=8izpsdIJ7UgDX1afF@gh9E0hrY~La^ zO_4b-1siqt=|S_ez3lPafxfJ)K+hEP&zHuusgjhJH2T6r2qL4gNgAEQgV+}|TD`NO zLvf;|8w+S%I|pr<)zz`N@aqiY2q}|^L~he-xI$5zC#rMK0m2+f4A7{PuA!T#lgEcG60mvL3nK_OnnO7x;0brM)Oo2&fZE8)SvVgn0$f`X>CMOad z&-u4*8XF2qKv8Ld?sd`OY8t=nxS9Gbx5y1d^jm49&{3$HP5;|{#o`OwJJ;~e$C51* z#jNUxTbf@%%8u$C-`O!F+P#F?9c$8O$z3M(ivR_a+7S`;Z@Au1sgP3*yc(h8+Car$ zfqUOn?zD;@c#pPkZn(ZUqX*LE_f78)x< zt_wA}q^G!B>(EyM`B37}M_h@>f2vO&yI0()coX_Ec&wt7iQgm~g(bTYZ`o465E?jCyR2nti~kwtT_JyPqp$7nDW>BmrMDMzy0mJmSf z$WO=lTX^R%Y0lL|6qoGTlQe0WKS2xZt%!4nr z6r3uPGW?k-sFvRKNlU=;AMovw-6hp4f*S`U>jI<2&0kIJ0 z)j!N8C!DDXbi^NZ^ZPja`_=Y-P^M>@t;Kipq9H74gyUI3kg0d_ZYgU?xc83f*}J4Q z703pDF?Jyz?!So?6&Y_>))J$~p=CsrG+R^C^=asuA+jT8{Yb5*YO!!Y`)(>8a{f+2 z{)3LTA$LRA0g^OGzV5eFCF;IfWMaO-lI2SYhs7UX|IQu$S>ha6{zUGZVdwh1P+J{UK=4@N{O(I^=xQdGk} zcAT23nCDfp$-7Q+WugQqGwSs)V*_SR*htHpBnp_17H7=C6b-yu_$fPL8tfN3QBb^Q zXNrVwA}OM;8bw$&u*GW?H1^eAG>^t}z=K=KCasY36YJ!x?Q zZ!?ovCny6bWSO#^0$TjL?NB+{q2#mun21)p(8hgX19}`gdP9^uE-2Ci8QUSF*a?MD zH70o62kTGB3%_2rj)F5``vMN1V$XUzxQ;4pqPBe7S>|EXUs+6NvvDoI-#71I6T0z03we<1)sx#|u|?Lxp>K2$dW77j2t6 z7`<)9j6F4qKeXeXkbE9>N<>e5AwZ*3Y0xUgZyUc{i4yQ&*vl~EiKpkQYGEh5m|4@I z20PXZ9$XWT%!H=;CHE{*-4-tb;}heJ98(U3MD5@0KCzccJhCyB0JS!(2?cvbYt6(;;M&g1ex287+lt>5?*6A3OlsQo| z&DfP`dnTi*qEDbVan#ebPqxwMbBemLx8%6S) zP^swgE%8=-dH0z)BVn?5Op_koi4sP1orq3wQyDhG%>uwJ6>G*< zNa8y)cHk-ODC1UYbrsbijYrwGO3X?1WkmRSw@Ss`M5UtOvm=Sb{K!|iO)1P!wHv@u z=w@WBwKR(s!YbE}^nat*7f3NHVZ?P;QugoGKkJb^m*3~m0Jn=mvmp!@OY5rpzO7q- z+;M({hULPqlWia9QPmehd=Ud0DErHR$hH#6RH}rR`|gO92@~dx2ht})CChIhk1#!8 z)*!74kEiB@zB^tm#g!rkenffGw1yl3$fpA|e>ko% zuUwr!?j)x+ZhA|%IPIVF1gk3Ln#b2wT_a73l{P%CmsNsG&)qM^iRb-yB#H4QDDZDX8k!=K6D5&I4M zs@bE&16*=w6tVH6hjA(Io8cbj%ehnQICPR!f(%uXrIQ>?jB@FRZ51?sBn>qWuLEx3 z)$)b}M`Yq^CQaremTN-OI{*oYHHfQ_cnU6zGV>$ThW@d{n^(k!OJag0CAxfZCy;Z{ znyb{h_6U3{=J+`Ea;_WoTQZ3a3Sklg`}}HoOpG^C3gv6`jO-&4+~WJDw{rSqX2f5m`CerKoI!sBs!7*G)}L@72}C z?;@di`1f|B%PYrn5{7b7hGsE#>#S<*Doqmh5<$Zr~Z6t*0jemkzGATIh1!OZ8{){p29G&4D5mT3S6_kG+Xt>Ychf`~bGDy4NTvscd zS8AM2%X4UAt21w=(H$WxUlU6UWB@p@p|iknt}kAg#w9A;W_fR6C>2&mQK3S4!kgRz zhsUYiAyD)cnFBR5n)7U>9y3f_Q?SyQ)lvA?3B6+G$(zK(-ol2cP)QqlHcJ;w<4zFZs#EgrLSBIJBi#7A+4@OE@5s30*CT>W`$Ac!eb31l?^F+nm(cqNuA7KM3NAst zC-Wdbzm4+aad8ycl$Xa6IXf@gk`iSCf~#F#$}N+gtVZhsXhO_w0dP#b6)|e)qTiprna03ups_$HAj3mryxQQ~a=jGKVi3b5b{E`&ehd0b%a_wZmiS1Y$77X~k zJuA_!JZbJLUB)2teFh43xt?iK=Z?0Wy2yzcR<;7IhGW_>Q5#FXc3)7q5v!gg!WUmv zT-hl;XmEwcg=L{sShJRVDD=Wr#Hx*#7!_kA(M`GRQaLIvi%E+xC9=3L(Kua{88-EF zHVLU1{Ba))U7{q^J?~gU2BL-x(cHCDtsq4ohwCyu8|oBd+#zW2lKgg6?7XsyDeXwu z^Z*$t13XaJ;*ou-B6&9LJSbx4s)P*pt1mTGzpDr-HSK!Q7!-?Hz7Li63BXk*3{bo9 zn2o-7RmD>TFaL=^fpnU=-MBdGawcb;%b0pb z>aGYyaY?XZhM_Bw&YpSP*dd`Uice5n!C$m}Pd*Fst%^OztZhJ2U=GN09o(mJ4djvF zU~vCrHwecDMyA| zn5naA?dk4VtC`(MGwLoOl|}HCT%o)B!Nq2w1V%Kw_p21&(vh{x%>Zs0jTAE#nsnTC zL#$&Y2;*Sgkcu5N-KJ_tHfo@O{Hd_XkCR2+C`Wd6NUd+cL9W(9ma95aHQ}LZ`PJpL zC2EG5esuRgY!59}wP^{Fcvt-9ruA0x>^0t>S#H-<2qS#yhCEmT8)i1>nGnB8ePpP; zbtJ$p&!N<&v`mC7qqfQ|=>Rw+X~AvTHciU|-@5iJEA40_MH)DkmLpJkeN@dlivmJZ zpWuH~aBE@W;Lky#;AW3@IzQ2=(luduB!E?DYHto2K+ggeJn@XB{j~AR?+Vp3q03fY zhS=}8&q{@G3~;!CwFg$4D&nbLPnZ5;Dw)N>{A#x|3s8qVKdM>%^NEB`wKus94_lrU z%8c3AIfjyE?g=WtvPdtatFw(-M(9@&WO1zM9o6kqO+ojW&8O`!^$889s8?Y@^vKbva>&}Cw^&N|*Y&>iYx*hG!$vtS#bBw5`3k=%k^ zS3V|&y5j--)CM!X=u5zJR~X))l}zGmrD@r2hQ%&Z{u&ymQ+|K;fEb`VjVM>e1zj{Z zjs{$xQ{P-`(pD<_19S$1pH~HN-cZP0go<`glp!M6luPpkX#k4w_x^(JW%(h6WQMvn zeGPeCeMU+P?l`|zXKV0Ly+TE^snoZVK^TXrWGS+?U6^YMgAgj^R9axvD%<*Bq7|I1a&bg+j8yr#; zob}V&S&>#tztDa>4&X4{(`ZM(;!ifRVmLGU4SP`85++nzu#9UfwnO8I4&UyI2NioN z+^XyBwurmGdX*B^vt4xEjdo3>fHW$%juA;jOCdRW!F5Zyn}`|Y^GoH5osYZo$>z)5 zwpBVsQT#-e<&Lp)%H9{p0!MBQIB_dEk1`aU3r)Jbzt z?I_-^exBzBJv0JutxHA)8hGjL*Ur$G)losk?f`u%CGpc7Izt5oC5pifGyi0Qsoh=I z0og-F-SqsTQ=m|l{bAj_V)&$O>|(tcJx4=XqtQMnzPqem1z#fmF__cps6#!K&-DPE z>;1x%ppvE;n=*f-d%Fm+Lu$AP!O< zqNP|N-Ggy>EesAmT#&`k&5kpt=rK^n-g&jW3P^q=nEaU7IZ*Fzd=~sjQ0qI;=!Uf? zUC1ZD|8dYaE;Fl^QcyuDpkzidbMOAn6*`^vqI2fe_L^Vvnp^WslipXc-)&(JD8Iiw z^+D;sY40+|ZU_nsLrk zl>2RYQ36(Qo38RA$Nls-sQ8$qIh zKyr{42eQV5oey+}lVN3DRFkm}kH##PzHx1wIwQiu>jQg)b_>w}IOq4W3%v^y<1(z| z=JD#;*Af0<4b}%%NdVsWGRzPQr@P1t{=p{ro$>~)@q1WoQU`scV^)HYygsEcqG zH8fD3%+F9bwn})b2X%7`ydMeTtwR-4wQo-Z(Dw*?rsN|xamdV1QrgJA0ROi zJ;y|IGl7Z}QA=xj?lZ|@-&PPM91>>#rZ%{s0qa;4W=33M4Z*{iV@Zroe9yz$8SxSy z>CUMEL|2#6twyI+RUJ8sX!oq-9(5WIdhrTwkx;eLu0Aw&-&xT%1b@TT|2?^%=SA6B zlWHIvteWOhWEr_9s~|ch4^nDiof$j;G~O90FZR;_3EOybnla0hoB7h&cw;YQ9OMtU zz9KcGTJ@#MxUHX$Y^%Z0N_8ex6|Ol3Mlom{zV}yp2Qb36uH(eL1}kYdv3sgvTSCc> zp|K_C6r4^D3NjD+3uaPsFv)?!d}fa9WWVHOhf8Kw$^GFIS#2rGyCE7}9u5xD{8U^Y z3|yaDLP<$laZ>smu;hZ@6f8|#6l5$vI+fIC1SXH7bd7acrI_~V{l_I}CrOrfwO`bn z@l-a0{R+)>@-`T=3}q=Qm)V#T>z$7svpi1QN&$c3EZ>+Iv!Sa2u7&V=KUU^*v5#0hf;Bbj-^UZKyW}*A5gcA_tw5;0{o^NOnt6 z%E=&t4A>WX{MW{r1jvbDk`G8eDOS!c6MJsHOm#ih3?zS{L%%hjw}xH+Y71;_u|dvp zQ0`O*%|Zo@LJQi6V_t;Lh~!64ljKwP>~ThMPHPlKQ*1N8VlGviQ0!COZj*q8snIc^ zdKAOhl$hqgXm>^#87Vmtt6`B7=dSLuLpqmY^zM!E6at^Z}#$)W|`7pyx*m+mZ zG%=tOjTOaF&f`I{0tG>Y)-nSa`0%*)1T(MEIP40pk4uZERaD(uxPnVH^izh(3*tu< z+0>kDM;P4;EG=p-XetK31sa@n6kiy%#Ye-bFGEHc8pv_iAsKyt68dVDwGsM^Ycq-g zGTPZJe$Z~-)}$#G>amhx(m-}^;BL^^5-(glim)=-sj!JM8ZHnRE*wszc(3m#ZI+J3 zQ%pNR#tmL_3`e(5zSu=+YDbi8`tKU}s!m`e^6cM=bA=ITBXl)EapyP$nZRtjShF6~ z#(8MtPS(3X6%YsujW4yvRMBCs9VA3m6)-gLXV=^()!Zl7Oph&xuf0jsk6GpoEpx}x zWycnk9l^eH@ceO#SeRnO3Z%mbL;~hR-z++v}!8aJy7Z~=Q2bCKkV*9~Y|M@;(RI9TOL_h8Xp^6pjm zK0T9D$M@Z>SNCgYa!2sbsGg^A{TfXjZ3bik$olmRK)C%*m~Pq$nB>OPZ`nPtF-dkk z$P8p|lHk*A92;;yl<;pC?K9`!8t(f(lMRAD;O8&rd+Ng-f?3k#7|F0J{n1 z$j%juN4M3J58j#M-T}wOIakUGUZmT{X~Qi`!`}rU8oTpuoWA3g>u)mWFOWm`YN30# zSk8$Pz{Wl#*1Jq<99S~sid(T{NA2YE@?WI0+irpL{%$+4i>SG|DMPIzFb;iLXiFw#am})G@nf2}K))*@AietXF8t zrG5oLmR%z{wkvT7;rN@b9w0rQo{>^BPt)mpv#W12uCE|oPuV)O>^ZWWkfwi1)0vZ; zQWJ?ZlU^{j?0;x0!ly4#+p!USyt;8;=*6rU8PAh#adKL%OVV$=J*TNX?aU(x%eIVA z5R~JRlZP>&UkAAox9IlRJEwOkTS$hJUen&M`_9n9NimUw%x@UBO)9?W+RC833eh8#C%ekVo50cir|#DGW?Gk1_&H`ZS|^_V1piX&UNL){6QG!LpE zRcEt-SFAPW8S97{Pt;K&hB@w;F^&Srk{4mS`gyPl4iTa7Mdffx%&!T35?IFfImr5) z7$Wc^BKQ#^s5dpJEp~-MP9a79bn?fmC4If9SogWR;sJEE`|Sfd??~K{dM2y%X%?j4 zl}Iu`;hjAkj$X~kU${fW0_$y?!GBslg~7>k$)V6J@EV0!JM=t49Y~F}2yY>iF*g%6 z@n6Wy{$_S2!bN*ZYt~UNL+~ZSCu>2rtuQ`l1M`dAjVql7{Z6>>jC3+c0)P$VjFeGy_;SN92&8yYL@LY3Q;3ItpY z7%U@ck46j0q|&K>j;@n&$9PozEy(vX!QBhaVoC_sj!m z(>l9Qu4>LMZT=jvo`kddI#NE%gM&#Or)Wo1q9FuL#yVtm9j^bf3D-v)QV!pNuivku z_6Hi`N($l%1VL<^3Lfb`94a;pNiG~(bPyhK5E?%$8?7f8$s3;FM$xT5wgr@FA52N{ zS$+2laAXi&n1v5X%>_`J3Se}c!fKI4 zSCBPhN{S>Af?7?LWyf3z$I5w?|Ho3zbNC!D#O>*NJ6v7**Pnq2-c;_HDg|YcbPXc}k zuPTUOzxOp*MH8wGTp~#b+8wk9}aM zgi65JAr_)iGeM4!J27=GQTSN#-T@L9deexR(%%iob0I}1 z-dHE}2v#G7j34PP5^4Q&*|2pv_=u$>C6$c&nU2xYHGNPsE3yQ5ALzgXSQfuhrb? zGeetRDA||89r%V&-BTTgP(-?X1``mvyf^ob56hRakgyEITWzSEXD z%=zyY^>~AruahG<4^NL>GDNLkGOKSzS1%(p5C7yIxC&2YHrAy92u}gRI7}ni#>@Fq z?P)IMCbpDue#ti_4Mq*&MI)$<;k-4z1W4QQRrs$RGa<3&Cj&^(1=v~3gy6FkAf}He z~ES*ufqUz*?|DeUU(Y0ieF1A^Q>pqdOH4)IUJ2 zL%@}nKu^@4bR$6qaVP)0ewOfJS7_$1qGYe4W^O&b`%&r@W@AZbJ%2t!rgS+lE&Sr;*rbcl$>UPy36kcoWUSzy zlVd%n_FzI`lm(mtCl~UW-5==m>$uk$JuQ zOqaFQIdn4FSn#EREQU#|Y%Xrc`#BQ@M@F1%%}&}da7(Z&$*-OomF})uDEp&Y+W@9E zzP>T8gVEjgvthCe5MnADY3D_Qr`0;>iaTM$AuC$m{?AnrVtokEV*;OL>{QlgU{SDo=_|s$iKmQRxcZFxB<&4mkp=fs+3WkIzYAI zQ?ZCHBtjD&yJ6I!rF{^>O_P9stvYw$6Wz?YTQt*kVbGvT)5vnZu}ZZ7(Vrja;cGzP z)<{`Ie(T4z2^MRLjz~FED|gdI9A%Ofh zQv7>7t*8aPBRQ;K9i)%a5c2N)%2OCmB%GYYYqcq;NY}v~xrq5;UQMV=4Oq7os7N!` zV&%`c79w>E8)xc@kOa&?r50XJUFg2gwMvIXbdlcZo|Y}1&FV_Gop0A|*f<_0>|pjX z`K*W(SLzfkG~Va5EJ6X*1j`7)J|6#AW)C!Z$Mb=~7PC^!+&< zV0A0?0rYEihvqggtyXIt;l~IT*7%CY2^WvwaMP*R2-BWa;U_&ug_+U9!NPZq&WKwz zv{ISYcBq!1ION(JVA0^^RKVHZWbB)`HXfe_+TCD{op5{u*AcV15%Mgs^EZKt8@&ou zw$6B0>0C|eTvlAmNqnXJzE`;L?P$hBKYf@8#h7%IBlM`nXu}?$!yc%^9IE$0K3Ugj2ron9J_?97qfANum1 zNt|9#=;R8^XABBv_C0hvI3_vK8r;Kz^Y$B%DRFfYy%%ChGq zXG8G4&;g4)f{A&*i~%!@`nL=4VeXW6_VyUU<^cqptYNiD-Qr4y6)z$;UPNKOh(kVq z8yJk%>hWN0>-e2-h-6hy|E_~sNIbWALr9Kt$`gQSdIerCac*+4eQ!Zo+$K`Eke1?Y zq@!2O`DqmXTdWuAsUd+sb?>jrVrJM6eHK5|l)U}9)pe|811Bj==Z7xEfg5@%fi;@?bX&0hsgnKL}d3>OkehkDo!b7L~rVHdp8OVn71#mHHhYEuE6h)?~+)j*k*f4aPG=rO=O{f9Cd6CIQ zQB$r|8|LW!LIJQkB9wL0- z;LhNsO;Hq1$&Z+}jkMuqt`<(=D4d9;ys@Ud!KS>)q`cXryyXZ_*mQ=Hq+*$VOmr42 zR>2!LkC*W-e_!=tVttd%>`3dl5p5b$ZFc4Y5T0A1!$+&XRz6e}tm}{S-0(~>#%vG& z#;$(Pj9ebN2mq_2x0H8bEI7gG{1I66*<;&m_#!_yM)TAT>|Guyi7?dqE(g(m4sVyN z)4|5o!B*Mb;OS5%677bCUAh1xeqNijOG)bd`x7*nEXn)Oz^<_s`9_>^oOMAQkAZcd zD2P-+KgQY|rbk5~L*>i63-qxmRJP~K?#!zHA-n@*d^7yrcyFE{9QYl@q3An>W=i`6 zvNPsOnrf6;nrrDx@%dK{rKkF?uMiC~sdB^Cf$zPb$L%sm{U-zC4+!%Q@%vP|LFRXp zwP5>}pt}_*|7gX#7P!Cu1H=F{ugmR3PO? z{FaEY3a$l#v##Yi?7Lsake3Ed(1*b@f7jqZUwbiQV&qCxpS~wK(Z$DQQ;_am7wr3$ z>;Q+<^;WhiW=T)#MOucFg?;s{a<)Ne>&n2XyA#_+UqhIkQe9d{Y@ys9Pg8ti^?X;9 zT_l>ui(7Kfr8Yau*KulVj=Lh)T!iJ?qIc7&PVcmO*sU>+E;S+(F`Fq?Zv*>&v8ZHl z(Fr+ba?%vU3`9J=ul3`*@OAI^zM#H6e}X>aEPhG+QRx@o-F;I~VfP-2K8;V6wt5Mj zw-)fWVryT>&HJw7@*NsDjQ)_!7mh}eKTI{if6(e{SE1S;!u|YX&u=N=`dxl5%IdCa zV9!?g4@KC>I~G3s)E#qw;*1qs^0tjh(`Jl~TX^D79=jK3`hXen*2*(r^A2^BLLOE> z6k`qHK?9vln#xSTjb?M!?=P4B-#Sx)aiAmkvmtncTGLc2?u6PizxL%Q7Sk0q;dgn) ziJ?x@e1zW$H?TZllG^;X7Y8^3m;uF0I(E?l4e9s-=mS7)bL+> z8+)#Gt|A@7y871I_dGHjonCtr(d<}mZd!{`nP5E@G&2!+VZju{E8aZB`sVh1P{@ba@9}hx2ppjYZAASsB)R2~z6561r*aP3qpglxR<(_{8?_rl4uI^xFpd)6-48VaR>>AKtoaWcA^E8}s?b%a=X2AmlUW zloQ-hU25K)n6L+jKQwiKJ&!WDOmI#>2CPB~wKal!VH2I%FAYi*!;|9}W|%Jt|B2`z z)IQWnt=PljMJb&OJLZiwry3KRqna9DL8qR5zLVpeyi2D`H5!o)RgL-)XLP#4OxX?X zIuI_ff_`aQ9<$z7YeVkciPqk7I%XoX98x9o+o)pP&OK%JMkbUKbsl;d)yw1=3P?V!Vae(=M4sULuH<_zj0(h* zg<)Q9LLA#}c@0yenf^o;Y|WeCipeIMLNiKJR-u~M9Bu5YuT6}2%)Q%_+tU_wv~z6T zPU7K$8)N>EYnM}~@c0qSqHd}nQ99{W-HfcYVP*#3>|_?g*5c=4@unk?_@H}3yl1ME zNC8FF-}3}Jo4=aQ4Q%rrVY~_ z$XYSg2K9|#dhB(9?yFg#%S)iIlzt%lnu zdJ)vE*kJ`|Jeu5*ofcEgzs)-tbKOsL6%=2D;ch1^)#6P^-W1p5f@f@yZf97IG5Fb@ zZOqtsS39x0K^Oc(`jj^D-=M@iJP=d_ri#C2rl+sjmxmtV3*gHu4>8x}*e4$E@?z#c zdFS7T@S4!~ye(h7xwMsUs|8Y=nz9;|gmbq`{^3I;T@X9WcIM0nXl+b2W4=#~k7JOmW}`nU2VDLOs#;^$<*YPiAx? zhDi!j5dJ!OkYNR7PMQ+GAKn_3LVDa)9$}i}BJ|@FI+MR$;~e&T53< z8>?5OAP{AE;Dlw(3o#r~W*qUrCdZonqoZR_&z|S%nMM}psy`Ti@-^@V#8Qu0iuDJg z$~7p?LFq%A&byMun!uZeudS(=Gp>Y|j&xG`IjzQq=CV$ZX414F_{qZ1Q&!<<$+}vp zy?{Yys+Q3J;j&YPeaECfDApTlO{7z{TjLhuknSwigNxJ#8?zrQ{{CMRNjAo&C-(CU z0kE$ZioK`k7<2HybgLF3#-Kk6el-Xc0k^RHD69@gcmpF(sqgdt!oW3eU1v%zo+-=cu{cO2{(>G*z-6P&am|XJsuftn0Q4c9x-p2f5oL|{02|Q)c?aa zlI{?F@7}TcI&lo<&QsNz%||96ytrqm_cy%jSGX!ZKdd61+?zRSQ}SWMt&(rvNO<|T z96itZA^9Q29NddOi-Uh2`|7(~T)f1%L^-J#ua}gVSeaRgGBOE1itu@i8)l(E?r>9i zL#j_o5!*zh>$yEzYlGmpzfMthG#1Ya8g&fzbbMmJu}0uk-oR)R$t%JCP7eJi1!=ta z4K|1Y1T;?v1jP0~PY(S9T?^UR8(aTZd?;5F#z1*_`{(CY)@kvmEky`AFpYz~gf5gA z3_3*|M#}=JA}9dbGCS>e))J}cpH&yi$Iwj|YFMnI-7Z=7d(}&oGCN_8T<#aYi?ZFk z-JSew=imLiKU>+XDX-^cM_bObTt6?5TYis#^mvqcTK=m-$Zoiq$Apm^UTTwgSUoJ6 z;72|ajY%*&eDYZ#1cXy!F1|tGM~{*zA8-us29AkVk6)EPyu4Xo_*qlNpaU9MKFld& z3e@JKpObt(`1!XdVw!sUC#iOJPR`BQ>YZ;O zn%Zuo#mK1ADO`d}?8`LZ8T7u9evgk9TG} z|3IWzTN6i-Vn+LA4mB*TsgXFD50{6HCe*0XwJ@UIgWO0AM$DTB^Lce^4;CKgoa0B< z8|WKIRTq+?MXJ)sk#lur63lG*RP|&FSTLnt$cAMGbu2J7!xoe)nysw(@nOP^Z>~T9 ztygX0Zm=(iAodZZ{TTZ1m6jHU$@5N~A=0@A_AGEY@>Y@RpzBM$aZnz+V0*piW~Huy8m(V|+_m$hfnbAmh3GH)y_)G_}g^S|;g<{$*Jh4249%|QTOw;10>yG3G~`ii%p z!o^jzieAyqaFHpjH|d~5iyUPf>MoTum%xRhNJ?}IupQF#F4=y7bXVt05g{K4%gh@@ zF$f!E5mFMZ%tKU0GvY!<+qFE0Zw{IeF zGr7Ky6JJdsQgJ>(S>g)bREUPPGBHqD>YI_n9u592`iAMGjF{pq&P>N$G%g4VB zT$u>NAD2}4)04Ze;%ssHF42ADAYPz|zO9>yrrg7yV-X{Xtyt&K7JUSJVABD^4X!!C zzmkBmgw{$ERm`_APgICxsV)Zm)l)b3+gB@GCgU4`u7wZ;M`uj~#x*JSX zkBNmkOq@i*XE+q}`erUx%AGM{q*w3Ba7yk)p0%VoTj z;}~fRtw;4Wj{{mges83#W9EgV~?!Pw0wRts7{| zd{{h3^rU1BoDEDoXyvzzV?=*gNNGwV?PMm4)v|@F@Lfa>iGxVy2wN*LMR`WQz%3Lv z!LG43*^S1@_nbXRi9q6Ek9ZH_);PE-XnZ{7DYI;@L^5Gkt6fr9qO0f|x^c=3sy-E_ z2MtUe%MZ>G`H~9FvQA}yr_`iJ+Ymj+^Hy9MgIBPf7aYWy`IT_T*u6H~ zOTddx_0e{q^l+J;=H{8kMN0)WO(G^(D#XpW>P`4~{JlfU?LLOdzJ`-hmZJ;nDFvhN zf6i)7hK@C0YDCqD@sJ{u22I{e`D$HUwV_0fAVVA1%YIcyqOS?yTEl3gx8(pQi*(TR z2}9db+qu&R<}@Z7!>w2%h!0gd^wK#<($~UCMOpiKd${6)OziW%J}>BkP|ri49V=ab z67gpYsfHJZ(Cv6hjK)~V-9a7fDVO}yz5_B78s(F`W!)i6LT343CDqnPf{9S%bwET}g8Th=o@d#qWFK zp6B4$VI~6vhgbw&F*_$d#;=M$pMoR!telY%Wz-^~YKPc~Gq)wY124GWF}F>Mdw|VD za({a|58re5j_f<9;1?!A=NqfVqL|?Fn+u=;<{O^8akqHx+7uSi*pLD&utOjR$rmeP zs8N@p)(D{fDF^6|P^YlofxA-eer@|kVO+Cz!gb}o>0(3tiC?6!Nz((-z|W%zdo1dD zKuL+G2*K;C@2x9Z*>}gScf4Su&!0Ty6$0)bI?dvm1uCDJACaJrO266Oktcb1N|tB3 z23ZuqH1WdS3bR1h$d|RN3PgOY$g!%#pB2+80OiC0Od3YZFW_AOqGEt(&g3{DtJllV z=qqLfC(rFT3+qC#<=!Q!4;GJ@&hU|HaKm2~17qGafH8tLd-$pOe}@&Px+rx1l2*1jtZvhE z(WZ^#&l)gmY~zk*YmbdAZJvVD=SB7Nm3tk^B&_B_*%465nlwn9=5pK;7q`KMF+h{u zr!?=4AAvnCB$39siDBPz5#TGR*cJaVHP(Wc=?bkR#whdnw+)6#nXl1h4t~!zIXX$d zPG=DQuEY4F?9Bhs=G0~Q<%a1)srU`T^;Fz;^D@~30P?ieUQz8a;L(XKF3KNSk@DgB zs4x+zO(98W0BB;n>ljVm1IaF0!{+Zh6XA??7R;U%-;boZ7+^uxw0l{0ToL`gHbu)Q z6>rHm@o;#uV%V^3Txn3F2#~7Pt{;Cqe%l_6Z|ELVzP#`D^;~Y%i!P1q;~h==sL9WO;)TQR)OFjX`BsAKWUXjLP;UEwpreKum~`th(maI>V$ zXRc$293*YGA}YJG2!qt(_dn@pP+k#vMaBSLzL<{#5}P?=-W>c>%HA~4wu zBf+^VT)LYrtFJtcbiF0Y`KT6FZ{c()M=SVys2hH7X>D8vS}4B-+r!Rj;x?>BMOt4#CQQ>0%*I;m=MV1}18Y-u&)kqTKvcyX zWy1rKdqWlsfOu-$m-|2{TN-rt;9huatnnD|F9l6Uz|2~)@^?v1p?u>>s1LNo8)l{# z*qblNnH(<+G=9N&@3_J(20xr_`;(TSguf7Y9Da~_PpTfI)o*wi|N1n_JKf~KUSEtZ#ZjwOw&;)LT>8QfPnCmb?}!opZ;a5kbFAPv z8~~ab8)C2cVe1R!52>Y&OO_ZGphocU6?J-$|C>%spIJ^nXk9WZq|rm@J_PAk1(v6< zf@XjSh2&{6YtWDA-px+VnTZs3 z9Oe6|5pDoiERne=q&fdPjx0Z_VT#oo*O^$>7__fprxaW@_4QxIHs)juTr%%3c+#~t zUl?x)Kh2~_$u;B#UZL*?*-{-DQ{JecD|IyX2$oU<;T|FE^(dLz+JgF_n?dmexeBf9 zw#e3(mhHhTP`snYg+HJl$oC*480R={wfz_wrJZ@Ia~8+3Ug!F@z$4=_l8kjLSa&?5 zYQiCYRu)%yubu|G2J#kAOh`g9Ws$t0)SlGSdrdKjC<754<;rYrmPBTP4cAf;nE=_4 zDE6@?b#+>KLE~5C-Wn{-ZUg<P7GKyIe1cs3Q<$<5H zISoDVZZ@H-G8uPxW_B3nP4IinYC$hF7Txc;_)iB2wUGnj2ixW0=sR#CLa{UMS06qS z_hh=4yFHjA>IYn!2hdckCQh0JJ=o6W0gS`}409?YPG51yM)}-O3Xh}7^4K@4?)hwd z-oQ8lQ!|0%RJ1MM--$@Xrf0}eL0vXnrAl@GevB`==Hv|#Wl^e_6DItYAR6wtm0r1d z3Zri1%rl)JL0v2e&F*A_Q|PqR-k0VZYo;Io^fWNCKWA73M22+WFFd0oSng1Fa|WbI z1|+Ph5ogA$UsxoKEjjff=suPeGzFINs=jJdLPU5;f2nUBU*KXRd zq-j|41g)F{#$6l)iNI?+CX^W)JQr3cM9dWg3BxY&FYiPv==7EZ>>*<`rfP0b!7j zAgD5q$O69%>Jw7-aCDCaL6J=$aU8>VzfC~Q&H=~{`%46k7>Z^xmCYnbFfTm$7nPjU zfQN~n3MK{UE7jK&`X0jbHH(q8tqegeZIgG6pOqE0)kvxf+6~c6u_(rx^6Gri^79g> zR?A3US3G)cYgwI8j)mlGZ1J&C7|gO|k7kxsIG-;4cq-E^R();O#Ofh&q}$$ySCX>SFf^z z1M>^#X29wF<-Xs+`aV0i#J>?Cv?!l#m5b(A-ilXOF}A~-R+(*`$Pu~wd-RbU?QyeW zufMSJQ~PLNpaAfhn)bMB!S@r~cGr!1=)WMxIqGU5%U{N{U1#a?+j*`xD;t0Q;Y@N` zSl${;YTdf92{X1pzeoq`%AuvhyK^4v zQ_6P`C;a;s)J)AbFCp+s(JWD!FH@P%?Vg5gl?vN@uKr&B9gA0P!Rm_-yY>r3obRC= zW3$naO0@&WX4DSa%pZ@Y_KvH{I`_C}bp0|lc&3d%zE>6gQI8nrF>#(jH@=-KI8)fy zXCZ1l7N8Sk=G}BsPI$sH=fbcc#e(sJ?6GreGmmrjqL3ER7w`=MZ0>nNxd4s`Bqx02 zsi#GoQtU3dF!`?yYm3hMO(I{s?GD#@ZzQ^l`$JTn5yKZJ~}0&rDZ>k9TuH#Uqy(R`YXy-3@VV6KCT z(GU5W!E8~A9DB?xZ7@svG2@8!A*K;CF`>aM4Ik7}le3U>legG!&ro!%Ub zG$6F7vr1GG<8Rw(zG?+``gx1{k1c2=cw|UgJ}Nc513ov*Eo)Y!Pp$IH$u@#pq&|pi z2WolB_=M7}5tNZHyIUv}{%tMFMzRaV4E|i+IB5)*1qA8mwuNyUB>{&)JYNk}`;c$E ztLr1a^lH+xx;c3#_?$S_#8bbKu8t~bPLYu3CfH%&Um_`TiF5(EDVTC;|CYRp zsb7!it^noJ;uh7djOM=cG{k0+qLGoG|AWr`pP_))o)p&oKeM_w-2V$Z`9C5HF?%Ol zLl;>~b0_EZoSr!wL%4O#-GXEA z<935KX~#TA%m87^aYrw~Qd2N<>utBCeTn3^7h18BaW5 zUhnL_dI!ZG$On4p_#;LDk#6pqd9 z71)IpS(4OIgqd6@=*U|Y$|2(opQt4Y3@YI87vZZ4r;s3Buuypy`AW!-)cis7EyKpU zQer_zpx?S3{6!LKBSRi;N_5i)P++f$#D#69pzIetQg9$y>AEWj3U`nifYT`6GvpOA zM9Uc|hE*+Epq#d2T1r8WDN8=5HC4I8oMBv&X_5nrKZF94Kd8avE8VlqDfRmhVI)XA zRKJU9XaEPBg)VnKkiN(Aa`~6TWw@CnT{fhHEi(EN4 zJ#${hXq!@d2>$g&Vn8y5CqGff_xH(%J&q@!q*q+issX5E8K+i5iZ%W17MoJziOA)* zkk32^D$AmLrSZVBwnV62!h&cfr}Pk|y;mjDLpg9I+CfZJeO0ebH+fTURqV8fKB6Pq zLH~D1l1G<9#fheA9Q(w##9BGk99lUgG_u8NwIB9BXUXFUACHxtN8-*Gq1Ijh-fpL%U#OUa<8F@a-ZqmCeh4)T^pn${6S%Q&3Sw$mX zDWJH;HK3Q%v6~Cobmw6bI+!7?$wG|isp%$mu5vRK3(aK1wiTnVZj!~P;$>u?gG`ok zIp(FwC|G)2aap$dkvU%|%8t~h6P-`&s7BDypr=vWbiQqqy4$=~@XUkp`v&1z$Eb&)e*}Th-_q$@6UGW)dcp8F@TPLF?L=#(eC7>yut(D$Qh1)adTBm|krx>(Hv! zc_=bQw|FnIdLMh9((-0$*<`E0E72ud6)2+`&w@m23a(hulK^wZjmT(sMcAqpL|g>T z`{Hy$8Nz^BvWttkNY67tJ~tFENVo{)?giE#PV{|J^u^18a2D1}+_X7+O`zKXq}w7W zPugJ$$OC4rJ225t?8!U2v_tQjKk@+P@7Szwh*sT}8p*a{JFHQLwSd^A7U<6iHy4HA z(?guCAZ^R9+#@EuD}tqthVjtNG27>(@L-YdsHUAjDn!hR=P*Za$6Hk4%;5(yc;OXhz+?ab01Sv@sOP<0fej zda~B)DEfT=y23Q}hGp21)NvrK_L90IjfY2?;AtlesNo7@Qk?x{D4&(N>ml&Xd!17? z!<{zb-4-HXod3j2uSLqw$In_mtFHy$Hed)C5crMwea8KI#evYIf@k7@Z^lv(cLRQ0 z>;5y`(F=q6kkVa%-ygRPwmd_>X0#2d{qyVpKVmi+g6bpuM?Y}{l?NMEeFPAy1x!Ekgx7b3y|JOG}fT+qL z=4iMu=8!m4jZti^Ya73rb#QvPqfZbnL;S%js^_z<(-^vT{F^~``Yf_X5C{X0kAg~L zwUPXQL$MhyRJn!rE{AAc&7RSB=Ka=OcAn~D^zhbuQ&0y%vneh#7}ZaY*&15!9#@*K zrd{#TW!b)_tM-6M-;D}D>2dGR10XFM1jTgUD-BPi(yZ6gdr-092o*L9^a3N2Bd3c> zCw=bRMqltM&{TUTD(K0DqN#yzl4qga^yzpm>-5~r4NYYA!nBGdsokb=nU@yIe3Wwe z=!vqi&6*Qk0Ai*>y;TQH+Ed%3%Q_>Day4cFsnAokSCLIb)4g^`O!f{=$5(twr1-`I zZ1xURm;0o;*q}?moqBK~K?rR>_uPXj_q_P1;kfPMN~31|H@C15S!IQ1gC#4-g)nG4 zUP}K0+=?`zT%mPs7$SBn>5W@Q(K)X4DCp`&E;hwfLtsI{(~O#RTKD$+A}O#tzxd(@ z-Bq)qOlw1TSfheHciCElNqbj`-kt%R{hl)%ONQFL%8=`nbw`XP+($?8K5`lBl#$dh z26o?Hb?m+o4(h&T0|Uh&G@a!;pj+#VKP6$v=&Tu()ri=3{}ff!*m^^k(C9xyv~!!T zWy^;PEQVf6mR)Zu{UdYQLPf7eyI!qXV3yADI{FJa*Ir?^$b-m|@AZNbPpE~cA>v;( z9ob>FDj91RG{Jc9R3RI&f@3s42m}3ld4@=Q$#vCgaOo7o`JX`!dCpTJFGnAC)cjsE zl?MFVJT5=4E3_rTeT-iy7Tlv}#qbpocL|AT`;{p?)0JE1LAfJ}H_ZcFaQN3ylp)OG zm)QUS$y;&D?(8=-8IOOE#Pd59IBE{z#0prO(K-%=LUX_29a)$jv0o5qzNJsvr>0TA z=p`<=B_3H1>MO&5Og-`>*Fh!9r1#%L+o-X3w0rnE-~}lXVV|`Lv(Zc zo)(H^0E#!Rqs9jg2HPDeLLxRcv&0KUZo;0~7P5QLvV7{dS7(k?>Otj&l5dTTW z!RCMIhn)ZW(9wYKz+FcA7Pob+P9>WZ9Z?k<;g{YU!VI<@Z&KAwurVG7-)vdles_63 zm%F;5${;0`0|{hRlB5I{LQV$BFv0_eSb&ryEO|)?0Z4f}oTpeG< z85mFHA+v&8II8M{o1ZXGf#xG6nk)U?5=5agb0@r2L(-Fc-92qZ0Scd%~1N5%G!@!vP=0|8|9Yh zjo+_)=Z&Uo)GSbOmiQe{%`W{zfu>#h(;TID{!?U>O#@H|^H+8xic>qdUHB2s@|Sw7 zm-^IZf0rlwrul*?ditq?6zO40ZP2Vx5i_k}O>H)j1Vdo=0bwpWHdzLNHVpcRl2I)s@&O3BX=sykC^uC91MPZJf@PCssgub}%M;yh*yO|`DC}W6eGKvg^Yinlw;D!tywi#&b{B@3ioKLwWza62X65>y?Bu!{_E2c`Iw(a`}Ug^N7?7Kb9`!P;jc zl=PR*%B=6xbLbE{1*YR$-_^B-I-*r(wWB4{J*hhp1kY&Spy%c^sOdoO!H#NM zCUaXhpVt=iRx!XUc>^_0DQAURd+1(fL-8Y-ip2)-msHK_anL!GvTlEwa|-y>dD40< zz9Nh>jI9UDe%^t`Zm|Md9Cd-Us>~94*`g!SiVgRVU}%}OiZ~1Br`+@<>zV`=>%SI` zvuGc?$Lb*gKiHxJo8eS}$25MKF)AHtC0~hnjxmS^>ar}ah?O)Urw2RKQ#csP`l0M8 zBsQ$tA)>);;-xf9eJ>Szdc-jHVi>JF_JO^pfjDo8L`-A|uOk_6)tkVAHC#^FqE775 zqE8H_L^A@1RZ9d8nr`LH#p(#!(8z0eeLFV9xOnC!1g|+42r)`Xnw2{^O%BRRTt~np z<4^&cF8OiU>oHVJFspvfDK@J@vzX0T)H`FX8+yBNDEUPYai9$Zq=4M zdFbHtn(a(TWxb}7S3`y$!6v%`9;Ha-?0pRX=1z-@u=Hlsy*vAXz7>Q;&AuHb!sBY zZYX+J;`A-rUL9epV;au99GVT%S+kpuRg-HFc%_a|o0-9;T&Y1y+A6WbQqEmN;fDP= zC*L6|HQmr`#)-s48WpRYLwlf5vT?&)(}0EJD45l$NA=Bl!!d50@*do(%Py$a&YBWH zI0gHTuVWgv{qI?9mo;r|R^8}NWyrMRn?f@*n)A3)CWQ0+eJ}_aX(I+AsW=AW-%ecKF)bVI&jSKMFg&eWfUz)Z>^o1U5ZrTx*? zI5%LO@Ky7M6CRr1>%o-$`QA=PG`JVcCq4KaCY>v}jagNZ=^bm~e7$ACPZe$R5ao-*Jdu@4Tkev4?ly_ZoHGc#s+t>@cdtq(bZA!a4 zVs&Ku+ejdc&lA?W8MZT^CoUO$ZWw zr4axWe$JUwLntCWXNHOjCz|Y^Nb0wTIeQ~)LmRRkjIQ~*xB)|FiHOhX0xSLD%>!%Q zSnfn@1sjcML zq~XkHY6T7t-2HHc?|{>`tfA{(_%q)hi2vQv|3_+q2xdef@lR^f@vp7t{2$+~MGS2X z&HrhwjP0FF{_Ap`nxtrtEQmPzGUjdgjlknVbL5+da%55>9d%8?(gWG}af` zEsn%EzD+0f)H1U_>{v%DM+Ua-R>Py&Z>vmbb;l+ZnXr&vQE@x(WN$iTu`MWDh& z@Hk?5w>|rb1%zLnt1m^qVb>R`vDJB6$$#|_Hb~R#J$&!&)~qAoAyk?Es=jAzN@Fo2Rw2CFriXi}V<_6acUCK8H#<2@Sp-B!Ung$c>Qn>xha> zR?WJVlh#Z)3L+Zktb{SHBu}SEEo5h5#=6AMm|E4o(_6dbNkX3PgYFuI*-e7 zv-I+NchiOv4RDfEOmoqoU-?6Xj_q~*s3srYauk7dg zVqnfDI?F&0k7S6)D(0+`dgSM`V$?cNc$GalsLZ9QR1PYblJW?dwsK&SvcMWogKDNB zB&UOTOLBVs18B(!FFR5#_)04$xIMW%g68{&I7bI*7m}$;J~7YPV+GQ<3W}OE1o;g3 z&^rMUOj|G$eq3Pcm_ukw9ElD%)TcN9mvTqrIO%HaUv&}_og?My`f`{RF=Ypsg3GKwJLcNj1F;6nmO1cQnONE7ivumP$OWi7OoDlNQM zmd%KXVRQCIuEt5d2ViQLT67}#czxGI^VufI2nlg+Xa)dq^WSaXUi`QoJ!JqwZ%F%1 zL5`9UG#?0B#`f=xn>5_lie|jU$yPB)f%>CIvTD@9YyQ_Dts$J%C67pm0 z*JrW^eGxGH+Kn}2r3Ylqh}r*Kpm2SIbU=1y8oDX30PldHli!6e=N#@CVg8rUDLvR) z_VZc7%kPh9^2V~&zFjj$#_B=_LfpFL$>LQ(=BTc(yQo!Jo~YPe(^e~vh>S>lMt_|a z>K^~aC>9#t^!YFF`}JPR3|7oH+E?x8P{-V6+ttozM?q_hCR4 z`$kn-6}p#J=-BZ4IN+?kONnZM#;p&MzqpUsz%M&hx-=Xtf4NZm;@-NwT`pbfG#yNT ztx)~qcZq>j&MJ(_3;4cbF-=-$`j-sosqp)D;EipgJnaqr3$a&Bko92oOJBslK@|2o ziFetd#5;@v>tYqGcg4`Q-tm(cC>fKQ7c7=%E}g#ppuXi>f%k&9B^3P6D3R)ymWY3& z|6ImirAAD&-dVgDfWN9=1f1~)KIlIOK4SO4(!rkVO*A9uEw(yfyETuGjc88QvNHwn z#H6g~z1Vt=^jTjlDD?$9tZW3jXjgTE;8iaag)BTJmhN% zRzJHi&@M}x4X?!^-)ibeyhwpQ^cS<+k$d0Lkq&1hSWT=#$350e(~;EHRj+x|_!X_j zTsz2k4Xr4~?Rd?~CZ&_7Ty%??#jjZJlR%EuI)FbT1EuI0sJ-?^ zsB7xN1R%;Y7Pgw?;ByrpCMztPs~vJCCo#E=Bv^8bo3b6WsdIl%cJb4M{Q94GH)vBr%2{ym^rKCJ0?D+mXw%=OIR7Z)*=M-p z`sBi^z78JxpE9asEc$c@cd|6EekaE~v`H+s(0{aXkg4T#{LV>x+|*{qqH)8+!bE;Ea_)WaOnS@%Q@e1Q1M3l!r*R6H-)cS5n11_r1?ZPFO?)|Qje?ZuQ88$r zKrJnVcJMAi6Oxpsv{jjEOIikVNr>fQY(iC6A7P^O5L>8$$4U$H6tM3$+~grOT4x=A zKEnb;d&}J>?X3GJP-=JWR|1FyT|=UeI)II6ps}HuYLP6RCR9cfW(cdV=#cq9gNu)D z9emf!K3+B8Rbcv2(oPtU!9V$t#v(+eo6w3GX%+vh~1HHu{?bXaZ38`xd;CeAc&vod!q;f-glBJB*2dfKRim_>H0P!;zd6W@OvHTb74;NR6 zt_95f)g_;F)b&<)&>$_N!Lh;hRHc2**}V)>4YQ%Yt-49fMXPN<_^+mwO9?($csBoJ z`*Yh(Y6soqV&`-;u~S-}ao7>?CM|ztxG(O!Oh}{+ZF6ipDsh2m z&E^H?r4jIb)CL-R4}#(`6BMMjjWf*?5ds>>vV<#|bHkR%heC5r@U>W;DKiIuW1?&g)h%+7gnPUdqQ zO$Xv+>XClIkluDHeyS`Z1CS1$FWV4_{D;q{a`QP9DzG%*k>v027S7!&oF zd2Iw4;DXNAAQI)arw7P>BnUO>oJ*u)j-0O%yp`=cy6)9jFh7;2{)8H+N%&x8@rX<( z*Ccv72wox}lPTv%9`+AQK7%ghM;;ugPP9^guRcH}%;}CVOVSuK^L9ArPAO3&iadx~ zqLGAW@*s>ZRWC&4%Uf#thM=(d8(wxCmfOPzaDsEs-P|I|$><$RWf% z|Jndl_t@H%yh}35S;%Bah!QCP)XyPu2p`XQ@hZ!jye0qz2^s+W!K&6$0ir1v-*aYq z8F&7f{_HcvD$LCn`?4aDgjf`2nCa z%jum7Dc4<)SVeYQE){}`NM$%xog|rjeGvWeDI9Lhs`N}L~|1$9sjMh05yPY9_|DyDX2ODY~-Of#+# z$Syi8PCkFRVpw_)TC%>dcW8Ds3z{tj?k%O)uizFU;BffI8b7tihU&YEs z&3oe4H?HG(qJrAANeW%M^jgfhbrNrMyqJ9PwkQ^^XvPNFBEq`~sYx_AO@tulB>R2( z5t#*?bV=)qw3xZkznm$imb`XpH~t4n_xYUmsV}-@ZE}>i^UcgA>It$%oujY*N#nP= z{C|K!FiE}xTA%16-&5BzW_D-j(WC21fcBUwm+JB4A+Ey)U1=2Pv@(Le3Vh@PzMgke z9AjFa=QFbo)m$0M9QMCxXk3?GRa@B>1M!p#oC*dD>EaK+s@sFGC8}083arJO0Q|xc-hh$OB3|c2KPE`897iOpOwP**!8ta%dtGuhIo-nUiwxL zJlB12fCPRFdgaypvz*^xYNj}Rc{nzBX2$A-?$STssGnK# zl=8|mJ_APkFZjSKYy+p6sr3l^5Xs`Yl>eq)WlQY3Z@AH5N1=j;Cti=Cna=5@yl46# zH?2eIOucm`Ip#kSV{cSn!cQ`CG5dg9>6p2zh8+P^e&Pb)oX4F>Zx5pK-&A2A^)|Fz zafXB&1K6?SC#8#j;LQ{8MD=XvHtyXlhqcG~boT8{`f9`cMOFmiB?0gA32*R3DwgW_ zC8LO-Hb?So7Cee}QbM?eQ=)9cCHW(gQWRy1lS*+8|98qgs~m6o@5g2VoyPMnP$g2W zarQ5IHkupD?Ng4gb}CfO9vkX@Wuw?Ef7B2$5BrYkS+b+%`s%6;KS9T}wH%!gNJ-yO z5vp$IkT+-oi*cjaNxZgql-hn&7vs$_nwP+HVLKTT|NTv%wbN2!nngmN{Z0qyMvGsl zB9F73F}Ns>&sF)rL@01@pAdRKps{&!HYT7U7~mJ4%|_!-%^)Zbffbo?b<6ebb-ZV5 zZv(grZ9`XRMh>EtuHlqdAibtma9L&Q3pC?VxMr2;Jtc8EDgMkci^-g79_zjtzsn@G&N%vH0qba|I3$EF){5!qVy1E2u0@pudte?9f>c*SYZeuUE# z#Muw3;qch_s2T<2tk(_I*$MahXXO#)eI16{7u41@1v5#%!EJB19eH6fBjHDyCldQc zv26ZgUoBcG(zNQ0O@jlf6j(K7wJwE@ax7+H{X9exZ5AT7nn2F7m`GTgNXc)CrRo9A zXIw^XGp$1;Hd(4%T21V%jiq$0t)_gi&Zc|-f~jE4`>0^{O%;#_iZci!#`Ilz6B-X? z39Tl;8Cwr+2`wg?cxO@$06?nP#St=U}!ItZmHsWTvu$===tDdl$F~ z_IC9R8%F1s(VlTDks#m}T@$tjFiu*9HXRqL%o=N2%S-r`!7;!M7^hy#*h>c3%6v^X zNj_IV8=98T$YoWaX$C{s230@qjgSPZ8JxV$C(>8{h+EDYy_1`~~QWx{wV>0eBPk z%ze`|l6bZydezJl|i=utR znDHxyg{y)G(uSid0<~E2Rt7OUAu9&0v!FY~@wQ~@j94KG!m@AKr-5Fk-2U)Kw-D1I zAFMc9Su)?W-@ z1^F)g;t+XF7&C{izo~CK+vU4#?v`43#BK;@nROK`JZ89gJHTcR(k>qe_JGixjbO|h zU>Al4Zd-obsTv}%JA^6_h7P_Ed`_!L;LZttFm)`duD#mD3U%U{PC)K5>qBqXH0aLh z$AqR97M%55GKR6-fN+T=s5|*ZzcQs>d1@z@s6W8Y`A2^{jE0QpTtW~Uuyg%U&>o{9 zIeL|U*g>p!=Fy=!dUa};fY4k(tatu#X?-}?5`-Ozi#nXEG)tN59jn;8Oy-F?ys4<7 zlWRLUyh&tEBi1|Q{?7s9CN0{FZ@3=Vx$G|DjB%3@{meUj4fJj}>szPZp~1NEiV}hX zQ@~=#@R1X5`^?oZ;Gqi+;?i(FIf_V%u$KC^=;gDaM>?q5`<4eAzF(5`;8SELru4xi37~FC`L;=);+cPkl=MdeooWWErp^2I@^G z43qTee=bp}PNFi zYFk_M&D3xZ-*6Z3B_!HpZ5YK0B!dhHAq{i@3Fp2x0M(WHSE=G98?+SGw3s2{+WpV3ARps($(Or$PVlt}h%s?z&cjhkf9 zP~hZ{*hSHqaN@4jB9MgL!X;>;MC4D_2cy01#tv| zp!+WeQ7f7nSfyKzsGC6CHYsL)e>S%nc^xofNuXsNkMOvv9fGyI{q! zjY3{i3SiK>>7~rzhKsZ|RJUItj?SURZs<(3~{f@SE7&Cyq zs^`*j!QVOJfwOh)i|*w16TafYpmV#8^?!yA0( zYyigA%?{G$*6bj}b>hC*b0X?>|-c>=z6wGNBo*FHcz zOVPOcz%2;+OZeooeOtvtK>UClJoYpEHq1*{@a#ueWv@;D;!f;7-c9~(ofnMYO#p)N zV;=&Gk4RYN&)t58ox(k>8|T}c1!7~Jgb<#zrrQd3q#gB|Jx40|8`_I~qa%E8lXav* z2ETm@D-!>@%Se@_gxl(kSW9AmJ0pCZ#Wp~j7hFUWa&O~k53I^4>~GtQXQ()HL_y8P zMeX{?^G%y0-wAo@mBn(-&`ahatWI>ncV9abAwK=^+P@xYb9CPH;fjR$(%OdD{P}gA zcZelB2s9taKJW#6y}tvQS82Vq$LjvAHn^>@%;mT3pag_j{Ve_ShSiNl=lulMU1USs zsXgF^DX7Crt2gkFloR-^8+cM=cwrpShec(0EAn5dL^%Iy_mD5j^1*%&T(=dU^C0Ncq8)b8cer8l+YI-6iLvz4ujCa zh?y!u7s+nTxYh3RHGc?Qe-c1aVPn)xkMp72Qe6qycZe*A$?e_7Y@VTLSbi$MK)|}o zSfgv=m+lr;J9(Sp4w#bCajJMVl!^FG)283*8a14N0fLo@;-Ku=c&*m+}-@>?FusX zkNAv;E3Bf$o-7|_#8$BB7V;67d-N!lq{v>ruMW}QPKzQLrx`A9vEe}M80t?~OMB{| zs|xM)et#wOAaP0mbo3STN)D984zWZzYbBw4aMxe4>1PgtW(X3SrNJd}Um~3lL`(@C zH;rn~wVXE1*GQ(|R}&NA*VRm(ftD06eT!@yQ} zmxNhF1#cqb1X~s^%^Vzfw`j0N&N%>wxm>=LEyhNlpmL4)2NrAfR9?k29sTmKlrJ;d zH7%PVbwf16VWsrD=uSz+9P_zK-Y3+5?evw{s&kpI`O-4V|E$x+EG(>C-2eMd*D>(I z__E6=FIq3S)3zFFbiuBrV2``lb+xKqV!_)DL|}ulC{{=aaAw10%N18uMeRXh-T--e zfx2R-3)q>=0s8|m|AL*FgMw$7J-TKo?KE=C;p>-YHf&~hcGvw1oo_h){w>TE`KBA6 z>%`cv&C@Yr;HU|SOL1m{1R?h&kh$N50vPHfY3AxS6_5Mc z`AkMUZI-Y#Yn1461_!1B?;SIM2RG8qm2cK&qQf+imR_}il@j`)rqtnECYxC2DOZ7= z5T;2*c~ODccm&P7n)C*(v|6VR9of;FO4c!Os*YFj%4Osj8y;%!UP*|UT(Ra%>sqCe zVDF!=d8{v#GttO5mA^bxgWeKXMYl{BgWrT7=c2pPlapc}L%lnfDj)G-{0r?W1K6}< z{5vHrOkchaxym;a|3_D-RQ$i-EgFSZKnG?cZP|6s&jYO^KUxH0qM>HSmc8^+)k@m4 zWLC!48(Ta`s`TwGf$*7rMdN$GK044&;nCMO!rg&?{6nxHJ7%hv)(Q62v9^&^MUH61X<;w1MnME$$-uEwMOK|BY5?` zO2Zd~$4F?-ASN{D10t}S7~WX7G+@;8t?&^U2*Q7yRfET$Op996L^3{tYjFv28}klr zCiW$3$e$dfL9CSQq>6F6Ej)EQ;kiIAJamHC@*1DjAakt|;7Tj6`q3vm1iJGNK_F)a zVR~f$!24sF#htVHvD6yIu}WYa)scXPw`=G(psP;Xb*W zxj7rBJ=6j>O!lXvYSJ zi3}<)q^AoO@nE!0vi#VVcc3!%d628;q1P#8LhN_v=ND{)#;)b!{vjKc4%rrqY31QJ zu_++PZ6$CQ&gd!dw3Juy$do>NPW60;U&f0O7GVGRq1i{iyL>Yu=rt`U!IK~6)aPk@;zaWB&! zqCG;j>b0Z@R$w;O&I$kVpe?XyF-ugW;l5T$G-BvG6Nb^E2IQ*>fgzCVKze8j^=^%Q zp|n6tFk?$7P3w!8VvVB0rOx<}Bz%jNcXqQHDYVr!Q8N_HGH}S~ct`lJcqIWQo=p9P zSD9aU^*K9rSeW6tmtgI4(WoNnqyi`uRx*P&`E3CI!3gX$^gyOg& zJe2dE(Om*>WXjME*Et5k!>v;UW45z-EzRUQsX^w2r#Mm{z`-m8=fqL|Q2wRmDVdaaxVRhkCP#ws}f5bxIEUvgLN#pr^?A z+i%Q1<7KVd@PYmBrxq^I@mYhaSn3|-0{Kz2)mN^P6bee?QIq@ILuc~vhl$Js(1sv#^@Dj6lcu%k5()7$y3lI=BR8lS0bkDqXr)*Tq z{t$`BbHYBV8MYgpnC(%jy*|&n8bi#JA#N7B>gLG)+fnCbwqzI)Q2%~sh(#T@C@)@ATHc9qNkQ0wmkmJwE&K#g&-O&s!fv5>M5YjB?Zkj^5(X97Z!J$aJNMG;|`^Lw{wiY)F{aa zMv?T7vH%xG2OyKgzCaejzbFp-5Mtf&^`YKT^`Qg6aC{!PByNLvL(2~CJbZrJtxKj4 z&FT8W4&B4yut!XGntPmAP+h30o2EAGSJapx6^CI>fo$p&R*ra2cJ$eG$qB@(O4(i} zs1BX@#I`EX43kSYUB7Fvc51aOX9&ry>GZBBF|2Ky{&IjqiodBWt^65pNkISfHO1%4 z*7RQ1*N4r;vVT}Jbd_Pxbc-TpUBaQzbim5UIP`Xe@368|LR61NFP+xsqTma&2XRy~na7rssSLK34EogdSwL@j2A79<%`!Lldz*$$o=+=P`dPJ(;H2E( z0Tb7fF27Vs{O0crLt6y%*d^)s8tYg9#CPuGCvs>~PjYOl0%1lH@ zY3E{|pFG>woojoVrGDw?*dg#&3oaibeBV&#ihi3v)acSa!){L-q?kYM*?Fiy7MGc~ z=Q1OmuDproXMH(^`P7$m#QSsR7`;)>Y2P#!yylHp2f(%3?FS4z-D?QoA=}rULYTqR zt06`ES${MkPMsC*JfC8WjnWH1h4g9m&oFO{3Or}bZWzM={#A{z=!R3PBc4%JQtcSTa~YZ}8N_;&iSHnw zGDL10sK6@ApK+dfQcO05U-jp&NnRSz^O9CxeRw&7N?ksaX4p#^*#%$p4mcX zsOci7d@|S>=L6M1?;TI3JDuqkG2udP2QSmoWsJTqI9r#FxTv=j6KiP6wMmQlAU^B1 zxUz69NOl5X7jevr;27MyxG1!`rKzhkT`S~NWHVy6lsp5UJ(NS2)90U^y-y)qEttDu z#OEIJ4ox1ZnVU+`YHmx@LWiqW-Lv-G!cb>c$~c3=!+uTCrmM7?oSKR#J=1DBcB~A~ z#wvdy;si}l^$l{t=PoWFQ>Deu-eCVRv9_K69>D(i?qvuqwLATAo1bE8+8*YlV|s7e z!?7W(O2gJs=dX0UXha~Im9SrD$8lXCsc3RIW4p7EiI>2m8$MhCx8CuU4$V^OJg^vaM_^GbZ0Xg$M;&U)>5Rd1ED?AdK--p6pcuDXQe$)YDqzN$1u{417irW@sK~> z)=I4?R9@&=H5twHq==!!$%m9QEVZ&4%c`nCN@vG0G3X9h$dmBenua4aFQ;cxiYIg;Q zPkk{cw`3BaAX9#TgY%37gPoV2vU$G|&$o!T=58@bN0A>QC_*N z#eti;IM)w+T0fOIFuAWLb10jQ*LI*?@>2{S;yUG|We8YP=DfVkXrN~0o&4S%(rFs# zr?^|!0Yvs*IXbs+wVHd#0FQxOL7hn1hxj=j<=FwWS88+bq))P42>j>yyaG6UlJe!K z9_XczTvG^wwPzxKlOFxV`89Zwc*jSuY_H_2Z8Owc2!QB3B z1aN+@!8QS!f%n!b;36S^W!}`C!vzY4;k5S@KPbG())XSLUC`moJ-O+ERzBffq}Xq! zqwQJL7b3DFuLt>^=QLOtCyxvWb1I2y1nG(iz>kExZGn8G0{X_A_DScEU}zSi>6)Nw z{<8QM1j<4w*OB08Qa=qF7VoiU%=BHtQJ3gJkS-4%B2WO zyrI1~Tj&l{Z=P!3I?S3pO37~l6!;!d{_kJ&{}@#bsp%wxzDU#gFVa-}|1)X&rB415 z(|@Uz|0BOt`rj9n9RFLVT&}72#g!8NQ}Q}n=oUqY+6yRp{Fb4hM#`n@xS-n)yFYMX z)=jiYwQ1BWK(#M$2MV?IXBB=cj{CRHy(X$8>dC?J@2%kPpSL%ZZ?U>cMIOaah`*F~6-d*#SzM-UUqPI3G$*(#^aV-U<5!|fhQ>mOgeu&1AJ8~l4DLB^ z^^Hc?;o7Nwz0ANldi3sjY3+%boCCh*{#!veJc)H9=%1&nkVC2?cf;1TdRPO<4c(G> z^)K9BUOs!Yy%I}W;E2}i50au4gQ}?dosy`jv1y5BZ@&YGlR{s8Fx07cI^UBPIyE|$gQ{OyM!}iE-<|47f04>uHg*o3(Bil(KnU151PwU z{@t>aXSf^I;x0!ii16M#x=R@qji+n|GBip}sO2kq{4v$$E5`FaTCXSJHx7^(k1*k2 zwJ|3~psw%dWDAzUQ1Euxi;lJuqOYR2X61sMSVf_;(ZK z5D`fFZ$tyxH# zcD@T)pbwpoB8lmMS%?u%RbfD#ZkgCOmQx=Bm+~A{3~KlkCZ+2gr*TVXSQrCaBIb#A zLUdCqXRoOpGlC6XGO2m=w36Aw0g7@_=EVCGcZ26Nck#+is&LLGVcyH#+(%Wa_@~6L zCt|xRi$k;OAATS+!d2TQ*qkD)QbYC51cI{Mh>%>!vucm~pxT3=Y+g0bu6LE;N;{$< z-t+7PJUrr4-bH{wO1A`*#);5YVigK&bTX};^i1i^|Iyz60sC_ExLRS>FRzI2w{H^v z|Jz&ROOpT9=>J!T|L^|3@`Ll%lv;V>(~^6wSfrej3vO%=rVI;fgu}%~qLd{?ur$*u zmdlw#U1;hFEdur3&@%7!jT(s|k)C&ggi8;&OFA!#5;$f~J0bq@d1PL1o{6%*e{C{% zpMz}ASANtOOzG`Bto&SNx$(P{`-V&L%WY6~>!80OkJLqleWt%5{{`tY-ffqk?ymsN zzr90&`WGAcPlR7yAe0y9K#&Z~=P;E>6FdR&wYa^fSELc}bv1Z3e3|3q3DPQnCq;+~_f8|EKi4oTKy zBw!A4C09oKE5*%8hEPkp7M6BS*jD0Fj4r&6pykCWpdE~aVFJo%4=qb16hY9b`K%g> z``x9S4#yYs%4(Dq{3D!d)3fO=?Av4s0P*;&fgcKgyRvh#MpoJDnO7ylsp*N#+c6S` zgtlyvX|x#Y?5|rR+}d)o6h;`Y@yv;FW>1v0YN7HBs-mUbmk9`KqYu2<#ww#m%%dZ0 z9+qqOyYLIf*30n=ZZJJcjE4|7dsT;GIeT@76gYb|ho(BiRfhiH8xO2oA~#laVdzXn+ zJllEyia@b_DT+X85`9YAj)~Qk#Bl?iltrg1d_8-jJkM}+;wZ1~6SVhf^E68sTu!+BRnU9dR(uyv!X)Y~80TNRzjdDl#BypL?WJp4W9 zg<|T$Pw726(_4sU)ehv**EcXx$mf%q+QI8%fN^vC$4L2eaDrN?_XM>kFN<>Lz!Ul*;yc~?y>yf}Q4^8&p1wKQzPC1(6Dox0B&5Lg=h>+X+%(z_AHzqw(r zoR>=K&vLk&Wfc6rihVx^o`2Q~FKQSfb}up1fyY?yCDA5ace&JotHZ`hmy5%JO6c&v zld9y3<*Fwjm8esECMeOX-Fd4i^-^anv&oIVQrF`Vr7G;%l~T94)+JJ%lq$ZnOQdG! zTvksQ=Uo1nU{rbnjQ7FTFH}&QxagPiVBUwLrsNP9;J+)uT1@8n?*o%Mm``h+ADN8^ z9(lquaX49?U(XT5Kec|x_jOA2jD@Vn0JBn`gey`5tik75j^4iaJ;rxi87oNP9syMD^R7yh3jQ-r5AP5Z4!JS0$9$( zpz}He)mPCd(%Ww8S?a~aMZ9ukMeq2~0vo`8jZ} zb{ZSJ>BT{COnrO$+8zRn>8~H=I_kRogXn_BOKs_*S}QuhBvVkXlkAi$u?MPR z8f=a%yP0hN*ni}kD;gt|@5oT>d~gyY$u4wm>mu};X?((8(S8GdS_P8$pfZ=)WXxkI z{fYmM!}7r4KH1n2(%;HFhYQQB{WpyIhQ8)>MRDf3*5uOB;n7W!^(ORlc}Kcih5I@) z#mmlP$9fl(VM+n#tXJ9*QbRNa&U6?oc&=!#2%zfiq#AxsC^yb=B0>rov0N7Rt@`!5 zv}!k}sAEQF;nYA1-tz7FhuCuUYPZ>I%cKiC3WWO6klVus8PA-Q`Z8SRHaoq`e0l*7`=2U*M6=Lfa@n!j;m zM@Tsj*txw=s%}b}m4TpcfPKluUd2Epe`HeOTHD3i z*W*1sY^FE)vr)m1u912pNfej*GWe~qCURhdT7)dX?kDhH5)1Cih;h;)R(Mkob#j@3 zKiLLyic%|Q%eSt2+A`{->de!YTGB#}$z;<$KL?`UR108(^X%l^$KDh0vZ*{y$ z;Pm)SVEwr7QT zksjRnwl6_uCt2=gWvz6V-{(p>1H)M#_DVh4MFv^)m3>IdGKN#mlNSR)80J&_yFd5Q z&|EW!uRMx#zD=bQC7xE&{iYlNlgZ6yJFE}1S0}QCTlrh@md#PVx&8)AycMpctAt=n zV~C?|S}uX?Ix*lH6)S$kh{HT&j}tgO0WW{J?^-2c-D8hn&9omOe5A;9{CLq1@ z$^chho5yjp8Y3x3z3j0~bY#XSo@CVQ{zIRPEJBCq$Oyx!D;cDRrMC>9=qT@I8EXv; z_!|Ym+Mi+@f1%x^Nzl&X&lx>e%n*(pk|)(DWH#&_^KQPmvGV42Rh=?3g5xwSNMlt8 z?dEtd^SfO(`kpON6=?PO22IthK~wj{8UGCU8{^)7vu>KBAowQ)Titc0v&pA4^2o

ye4{Ry-58o+IKDtRly**23C6R*#FSH-OsAGcF7ZXM}(iP<`2&Chn# zxKUDjcew~^xT8nv_9yL#ayGikYTPMHeX_DM=3yyUYi1#;jB1+ zZGn^xGUWXDTbWxzh!V{4<~0mtii&e&@hxYsQ{Jv$1pIR13C>tIOtJrMOw9OQ=Ks zNNyt(jUxSHk0YAlLub1xa449Wm*|XIc&h(idU`?wUJJel-Ze*t({|iAXv<^-F%kcfge+r% zHYCcBCzyQ*ZvqoCV~Jd&6?}a}+^GwW1~pvrC7!${%A04%U^*>-5}v0BcOjB>JlrrC zHiLEa9J&$@&Jxunr4pui%Er5XmFyw9uyd(QeB*8y$=Y1oAZ~aMDJKV8=rzGAoVW+V zra)})oWS-U3pcnm+bG)X;7?{2)ao1k*5w*d9H|SYhw3Q9mrJ}Zg$)(D)Am02n@Z<_ zUimP86<>K}GS%?jk}n$iSZ8jSO!^km@P)DA4YS^8>`M74K(~8cvTz616>FopZ+!7u z!$@75{l{qPMYge)-gR`00;a7>YNbF~WVwn(A=#|^M9U#!q~IpiY%+)8y`fKmLIDd) z(Uqa)Wb1Z?u1|6AI2Fq%kKsMKPql*a*T1BHPeCdJZ&ykxQl8<+#B!b?MT5sge4azf zYIaKFFEr1Iiz6gtpHc*#$y~yF>&V^_D(55HJiKS2CWRep=gP?vY85$FTv%Ul4-cjR zQiTtfg+(F<90;O&RO(%wB_?q1;J7vPNPhsya70F)w-%v~9d$Np4>#h+hlH)@(W#XfxxvFsTvQB_!kmJ_;bvH>pb|IcgPw%+N=*c2s!6gbV?%RS_xv=~ zu34QA{|ZORS>AmgEe`hg5!BizLVEE`hw1UrFc3QKl+K!1UPkB~2t$_N zUCi}M@ayy*p8CwYJ~HukPrgi@n|B5=8oBN2P3Rw$G8pvth@?a!!7TE9j!Gov4_&U# z`F9=Uj$kXhm!kDnI zh8W6viebj-Tr3n3$TO{>c{P7U7no=r>8nH0EHtL6wKDUhXk_YsQe8*STn+N`>lmS0 zUZgDu9Bc(?Xdl2^U|UD}809B&xj3LC)5Xn4QpqKY1yPI0;F@S^OL)9uPY=7Rr~#U6 z^sV$9eWYOg0zdh!FsKGwvkD&NTvgg53c94U7OgS0j=ZHw0AZ0wtUs&T6?f^?8tBxd zqg0p73e|oiFC3I*2_xF5|8xi4(ak4r<|PZTdbYhwYq0QK(#yy|nk&A*LF}C(Q>z(j z@#Pv;c3Sq)9GBA~8ChQ@#)~~#vuz%(g)lIfgU9os<%9;5Y7sp_FZV3F21%#}xcmu& zuunZ=>-*-5{FOc>!pS!yqN1jxBqyarhh$`^r*=?XU(BWSBcH3bb<|DwoyPDU;rP2lPPDzd*^$D%=eym7+_^7t2sEWnT;mK5KCvs zHY5^0)@mq9;;vZh&-JF=TQ;I#Y&4Z8OqV?}u!{!% z=*zuA3RgyioN$^1jkgBK+1VuC$9@Fi9VnE*niO-73_j(nVO*-=yKY@7OD|V(%1KnKNxCJUziTc$Lr@hk zkEM*;N)Y!j@GoJgBqxb|JX>MhcIRcD!9+CaQj#srTaNOp`NHQu_|3N>K{<&qE%!cZ zkVkU>pw(pPR!3AnfM7syThYn&V&DeDv}Zo*{d!G@jaSN1GwZat$r{CL9h zTa9=$iJ#`4EldsazPPYJrp=ksuNuQ&?rf)XH5a6lrTFo5mS3xX(c5&4l8#4{kSfkO z*6rf|f`@&x$EB3d-|E6~T|5yEJ&4;&*5C%r-~aBQExdk-bbrG({wx7q1l^h2De-$L zl3tsj7kLBo;^)!}pSv2bhRtLY;px~m9QYub7Uf|TMTecCbMIVsz4B&i+2HvlZHG>( zhF3z;g!N1E`gwq2GT>TRUEM0LSEWh5g83*_b}6-EU1zHD=6_N4jAGO#1_)VW}wZ*1? zz+Nl@d#i-|xrR6RV=`wkWQ#Kp>}VG+&T7DFVt$0hJ=>=OGv`}MD#gGo_PNk7PaLXZ z!m5tYPM7UC+U#YWP;aP%)qZP$4W}M=V?kyMx?DL*{XcILe^y)%Cu z8Yg2Vbyinx>$sQx{N*%cUCtM`spBPGB8Nd5Fvm&X$2kPN%A?GfH3U$rDVNO`yfdc&+4+_fN}QdJ<=@PCcW&!n9~Ug_8^hU@*izNP z`u;W}X;nFzW+_l+ZDl>b6;SoDDx!Z3?0=t9lzYMd;GW8$5^LAs3`l5KrOa)&JU3?1q z=rmJP@$p+a!-pKmS$A)Apv`O^O9hl~K%5#on|Zr>ofRgxV44GOtr=_0pX^{cGd1&E6Z9}IeyaNdyV zA%u7q5~1`iUo|7fxqP|UJ?h?pUk@2`SJ-3}3F-~e5Db0}VmfA)_8D0cs|Q~hX}xy| zVk;+TF+93~jX?#xi;LZhMh@GMjBJ1k$3GgUx^%mc8RrCJubyq&QJQQuw_)VK*aQSo zQ3*tk@((JOD5$H%Dg+F5Ah+&cP41I=}Gz2@{Abs{%=w(sLSUufXopZdepA339U|**1%9 z;c1TKV>AlAyh{uM9a~V1dP1FUq}6U*Q+(sLoWDBsXc1I!a2xT5NknIyVe#f54i;@k zbQ-r1P{Eq||4MO5;Pg}51_N}AlqoUz+F_$|=EuYcT?52K#7yTTHZb5#5PMEZ-U~<} zyudvv1j${3*O*W%41rY##uQ;O2XxzDjt81mopAAB<9Z!$!05tC4WWM=3pc=v1DJJi zPlBL6h!cAfnt|Vm8sB1kg# zZLrh*TMiu8fzCI$TnZ1tuqh&wL}2Zycs;;rNw)%KM^Asa&zC0otdHDuu10}fFqN+p zVb<*(blk50>=>%KT}xV@wF23JG@Cy=o#Rj{#_ax4$sayC?71jpny@ljhH1oP#zP?n zL?SF)S!&~=p^~L0A0h0(EJ&%05G9}d4#$SV&1W=|_Ech}jb08RZ`6MF$5~(?osY#y zZodAG#7QQ#4T8R!tnXKL0Kpyuk)o%?t~1xL59TfjZ4pxQwA)rMn^pl;JH!QzndF41 zpq3q#whUhHAFLY8-kp>_>}($<;})oO{kHMMmpAsCB)i*}4GPW73+ap(#NNe0xf6#$ z$s_`;2}gDS#e?STCu>WGyTPz_rp4aAGPQK?b#=f@*_LbfwyJpUgAG}z?GL`8puQws z1<6fJ@B@u2fNasGU<-mXCg(sYnJ!j(+=QLQ)lgzc@WPIe!!oQI8GtJ;$;ZvS1yg>Q zGR+Yhhlaxj7OjQVaixdAi3>RFo?Qv7#P`^*-F?MRRHd-F(?6|AyAI7q&^_pF77#f% zWl2xEF&+5m$@Al0eu1aXG_n(_N!QWLX+<5Us#{b){0Bxaz*vAXKF!)(S0)!qjgAP} z9=G&wG6FkP1$l>1+6|s8uvyByP{> z1*|1$j2|>NVNpPXg+N9b8%}Io7PV|?PCS;(Ov<~|C<})dP`Vzi^517Q5zB^Nz&WrnQuCpYpHO+zNbJ`jo2r!p-9cJ=OKrMAobPoafXuSEw!Ic_KFJ+ zNNdj==O#51`CvaM_d z%zZjcMPjX~P#4FhJ~5ZM^MzH?;R0SdbJYOxa+&(6>A`z#A(~SAH?&|hFK9RhM*69sG}1cIBw5y zS6o1Tl(?%B7;S`JBv%*HnJ-Mqt;0diSxeW-_%gc13;eimaFU1cL6`b0PJV3O>_@(hmxi?HS4r5U-*l zj(l+?JFRiyIXkc&&+EcEz--~iczWO+A2@YzD6K(rVGMA=XsA?9IKt`29i%XJiK+jI zEBD~Y5g}kAK)ul&C!aq)(%_A2Q$tbhZS~+k!W%>s7=WcJ?NjzZWGvEUVe8MmAsOd3 zV&{#+RAB&@FHO-E=El^8%Dhz`cO`vo-Z%5$Had=R0Iez2b%(jp*hlvuZ`;!=(>P5N z%1I8wy`h=Cv0QJ~i&=^9(il)2*Q*41jtL9@xsp)ww1m+w*UTfr&x*^u`4#C-9Nc|Y z-9J424@7bs(lSzQ)L?G z-6>N^zFMrL=9TjNk+qBsCqdQ1P^glk>76uc^;yr zp=gdmY3{1ddoVu?p^Ofjl!;L{=ZFz0L425-6Z|gn(Ucm`f~P#dw54LR5rSz05_5_DqirhP;JX=%7l#^Nx^!Ee|^oXVHaqc zK9WybA=ofEXrftgooJd|d%B=>%7%QrrM>-P zodH)cbR9|_eu9BwH1+QrXqrWH6c5_q7<>^$`USlt_R8Bwm*~$)c8D znq)KzEdAU^*NV7eLN;rXGcfZ5@Gu-?Rwms+F<{^*8qAW1$o4Ek`@jygm_6GxJY4cG z#LUOour!G#G?$ih*UX?yP$buE?IOaJz-WZpn|m!-*Ed~b_{%4q_A6WLeFYF4*AC&a zs0dM7NRDkPGsupXTL|t-u@M7XUOxlhe?#|wgD-|-+YSi=#Lvax7NTZZ(zX_clE^D0 zK#c4%#BLCrN?%|RB9mGI%n(*@bdP{SS!nhKN)HN$pcvLj7*`JpwPik($>@JiF4*>& zv&Ap-Mxap%PDVHbQ`5VU@yO=E)*uv^_&l9ZA5>~JOK!IavC=%8vl3E%mc<<7GCQXE za5|^?aM_;uk39}-=RvQH1hfYE2}{$hFKx$z20#T|pTFL?2#?TT#eGq{m|0n^!&>5AHX zB?wCM9_#x@>d~INdjuSm1_`ZCK;p3`d(#lQdt?-pCIO{SFvQ)4jv3!cKQJ;X<&Kp1 z5x9JVcY9cB`S+HMdxq5mQ;#sOVd@2iuleUB9NY)rU=Z;}4V=|G50e2j?fS5(07h3h zcKotPQwXLWm5yz7j1CV_4JM4BeWnO5fm7W|7~_Z_6qnm_V>hur_p1{giyhj9}L3BYzz3}JXC@2p)K{-45m{jNF?=*FxTO%3wK32Iu#LDCF6c&FfeJ_& zI03PmqHqJfO@mMX0P!z~Dl24)LAntj4s&jZ2IdLoycn(6z~7Tja1JJ^&ITbzn}kN( z5Iw~z93T$Z*+;y;dd=>lTI~jPQQ!k6OfA=i)5sv&WW`$~P7^1A(#A%Y#W68KbtyZ^}$At6rN?*wQ@1 zICG?Ur&wiA-+=F$9rxVZ<<5^q|-9{%iXr?`43p z@=gnUNANTIS<3)=#ohPvC#`v=51bV+)b2?}c0r(8_y>(wl zxgIiVi_3Emh{X(00W$_5X;P4>M}g^5q0G@H)`?lR$&(#$_X9MbF!f10_O3|K36ZSY zXKl-InNg>8`rhL%VactsTi7{r-Z7cklwuL2nI z1ZSbThwvN}k@E5So-@&~aG>dG1F~t*9)gVLWI}^P%ZkHedrS zhWde6z2^ybD=vxjx`7V+s%v2u3W`$_wu1EOdkD|XHvbiT^3#?ymW5=F=IA(iism@4 zhbr6(+jz_q#1s1ldyo1F@2W3J1n3wNvlp(W{l&(#e9$ccMz4fw~}#pl&cV2CHP!NQ;m7S(t` z&zN@=xJNWN5xd(JkCEL??@&co73rj69C8W$s&FrNmNyh@#dp`|ymf8?Cd>*J<8b z{2eNdtAM-SCM`j-_?B?^<-Zg$*7FSz@XovN?!Dmdom7v-t~)!nY$rm}L&OSJ>Cf!z%OVV6k%{r8^0!45{V{60 zrh@D>j01pn@Av-W4&aB^x9=M6g zAq}qAJzyWgd5rmL-`!NeKWphJ@r~9u88WtqJo?*z^lr5tzBoY6mYH1wAS41aK?yf> z8AR-BRf6j23`VL_m;L-}$UUDVKI@<AV)p5R;$hA{%R>lDlC`gP(mBLxZnEqMj04 z6QNaX(i)*xY+^lFH_uGJ-q5j8MUC%$`fRsBb>@cq&aw}G_Qyyf@QJwwef#}i`?Sks zw9`8%xVsk5M6$y9IW_KtJX# z?VfnaB5K#h1y>)Z_J*=7PU8a?ZH8x&Uwpwwzlrz9))J?l;pP)kypxm4936$4?xcqP zWF0!UjM~kEQGY9Hf@?k`yu1LWHKQo&jUgU+Vi@E>KoObEWY7g9GZa-P++_>!rfP#H zo@sSrbDhxA5C`x84-O(H`$HRWtj-NIDaOS0r^|G+;lHC%tn~-=WsRIk+SXh5Ot7-P zwut{cA5R;jDc_3%2ty`+Uus-6$qttqNiUQn;)jq)c_xUs# z-TEMI`EAh%do7GP6aK^{gQOy>m-K5%UrHf`ebMl98IrPLndNGkk(o|FA{i**LQQvD zdq63ZajP3q?Gr9tI8J{8c4DcHtcd)A;s5qY)A-@<*z~xe-@x} zT?h3Y(r{>d`4#yKzFF3S>PySl)M5HDm<=g#~ROpvDKVuHZiP}{yNGM>JMWN#a+l$KO)ntShE=iw)IaSwX~@YG9J-XPUdp6=p@4u|iCad& zm%yA8vgF++V__D;_6<~itsI!TF9h2nEY?J4<LLd?w*4`hV}w<^ zYzMyTz#-AkTFVj$OV%2PZHxR^7roDqE5cI9wS80f_<1C z;*LTo1TN4GO%-+1j{@gOA+{YF&B`Ez_1rmNku*vHxD~0wg#eS_f9V3mx$!bg395=e zsGaDtC?xu@o!E3KM+7VJ?5S&kV4z8`z+m!w6-}Vwm={+~%b05k5o7c@m!}zPZdQ$KFg4XKK-y^>GIc8)ILO(>%XucsP9)j<$SzAnE z7vnlQ7aTR;3vbT;*x1Z}m4Ypj%`B7s{p|C8zDmFlJL4iL34Kk1_FMnL4XKvgiujz<{JtNn`$4S2JOw((@eK~_~=6!wYF=KVkJ@uuFtoEdmId()7$0qmU&Z%+g6 z!>x#FL*9^IhE9u&@h`Y^1z$a?T(25*Y92Jq&=3BdF&7MCuYL1hJ)s;4uH6hC;Qbw+EgY`uEn9xkaP5m58LUPGPF@Img&FNA>T} zMd73-whk$o)><@cp0#ZA()4UC3v&?_u|p%+h)CtZ#n!TF`|>)u$X!seq1LipTrs8B z0fEmK(CU-PYl_UYqG6w%&F<$-=V`u^&HEqoG4Ja?=Qv=^U`*>ef|c;uAY9?ofiI-( z5Ktq$5FBv<<;@~=OJXp`h)iHRmd#TmykVl}GUoWB9Bg4yIyPc4>BzxFB^RDb8JLr9NifxRxH!TnUN%zhm_YengyRtrJypwHw zq0KQLcWMtxMt^sxfBl`F$9$WcsQuoz{Kq|<5vZ5rzCvBO*#Az>5UH?~9F&Q6&0Q>B zX##CfN{)x|+0AUMM6L*1ToHpu zD=4cOYQ#)vSTu~wxDP7Y4Njikp7xJ$QYK1nx^t7>C~yY4C~YG!i9!3CG9RzQ+rm4Y z+l&?qc&Qtdm?d{4uSv8#*_OEdK_8^Ofc>E3r2q!3_X;$WIYOjwM_J>&GYp_auZ_IyIK-`h-7{dgi;?^ z0?1IE>&_l?5skAJD)6olY?MCzu;r%oZ?S1TzNMl=V&S6!~ z)cOYPzvuBMe~0bCtSO6H9|@P0YXCBOZQjv1m zLIJ*HinQ3LtV>`XKSBAhR6lx|I!nbuCB9>KMpK-1z#07c#0NUI$fmM;%LWEy&|RE# zP+@zDiN7h~N^=GhaSEOL4!@BxAB+??N@LzcPNm1u#75rs{#=@r2Q$NZ2> z^(t@Nx_&*iFI?^!o}QjwR&5G-cQ^uU2P~G$v3}-ivaCFJ?!-coPkv##m4dfLn4oYw zuJ>ybPTIfSP+TmkjO-=oAG6BdOpFFn{H0ENy39#i3sOUOqlQ;%?V9p6^9Qm+nL#q4yxSr= zg0~ySYg#E;h~8&2c{b=$$>PovAhCAks^QpXUqA-PfcmWP7J6ngo2h-#)^mN zySbHEcu`-zM~?YF)cMD$;lvp;{m*$LjS1^Ow?OZX?9DM^47$Mx|CllEn&#jMvrlQx zE7rwZsY63HG6;jP#MFSlm{noPw1<(9ux{z|V@XaKa4xOr^UT2lRZep4A2E>%jM_Ng zLOcS0If-umP@}|L6fx=y(SBI#>gP-PM+UN0n6;J1xgD;7`!s22iUxuMPy`YDLBsqx zolW`c{x@9D7_SQ>xFBp?Q9~AWMb>b&Hzp_s9f^#5JUe~dcf}S4?wi{smRq#29!pXo z>1g;vl^3b8`wh^1Ik_Vj^>jzn_o~aDCi9$ONBoz>$Fy(L#zWX$B>|FBu3O_E8J}?l z#kG+j%NclLO#zy~w@OvNLeWuKextKgN||RxaahLWJxiOQydaOO+I;!YO<_Vi9$f(gNhA|Wv|JuW!t;u5e{dQ*AbcpY8LZO;6c)g90$kg)iX5W20(FKy+vKtam~XkRkreji zZxuGlrw{CQST+x$cJ&R=D19m&a?|c~sMDV#;a8*SZw>-9qig``F(M>kcIV&@?TjIu zyD?xfk44mh1a}3?t!Uk=!?U-|DZ35XJxfr3L$twHe$I)&d8QXSMU>*nKw{7?RqJHp zClfLA>0w(KEBzAGYy0gGqrFEp;^BQ)!{rEG%CgYDsqYB?Ur_k3rpr<5n4}5{1cdk# z7R3JNK|$Hf(bde^<^PuxidFUgqZ;z1Ei=$pVu*f-Dk&utM7_{MkrWirQ;D(lz;8h7 zt;svO+Z>j@7#7Tdp$ed&irx0T7|VXZ^1rgmMtfQ4G{x{+c4TH}b2~q8J6~^h=Jx#c zh1^A|8L7v3N0rIxoh zjSc23OMMp8*8fb-7=Cdu=NYdi)|I$lFXJ5Pafi|OCQ*xSaY=d(Hc#4AVjsEDPXiun z6T?grR4}chQ=J$3imp^CuC_~$v}n+STh`BF+{4ON9f0S%JPt8w)AB9Qj&LWZnGGMp zH)1D30x|7?kBqWrJl1%`E#a)Aky!!yiz#=xtYNEQCXkh76w?_(TsBLr6M#|0I#*#) z$YrtH1%Sn3b(k9@FX9dYzzxgE?luI{UVbs2%gXMv7=8Owvm`9}mAV{O{^4+hztX*Q zT?Qw9X}{{A;SY6{yE62MYVl=CHbeV$A4-`+Wu5Pu(5Ep zt9L#8vpvCB3jB0;#}TCqT$;i)`~Jrml&fB4(G+75+_fxO!1D;R_=yA0D4Yq;JG=_v zf{5$6t=`g4VGG=!{v_^WFXlb8V$lM)@h*5LKZPfeiC{26C(hOuk9NQu@ia!-E_B3p z{FFEK;wNc&Igpt_$+#w&ey0%fpYFBxTc-PZ$%7UX5#GYXa3Rb*1y+7Q!r&7oq~8bQ z8%E;m^Yn_8d4M~3;3eDYb5Z8C8*nR0HLb^A%@=cIObfj{95F5GS{ZBHif$r$gO>vJ z?lB4v>^|10GE&epGJax)ouUjSutoTd%QbdXi9AwAi}C%_l?DZa`PraQK>y`?;#uH? z5k?>&H8&t2!TBL+vYJ|zyVh{z`=0|v385Q>Os zBa>-Jv=w#(H692u=H~5$Ku;& z161r;{LwePX#Dd7tglqkW<&k5lg3B3(npFkY3DIdH_SeC#l!8d9*DWUaSpenfE7^^ z38e$6hgVC)nS-SAEi`Gl;);dSfd|c;8CYGPFvzgGeog(ssPZ{klE#Qh3T5G#<9IJ; zYPIt{v#zWLbWs|>KW5e1NaZC4eUYJiUZy}ona7inpKBsAjN1RPf&ZZefQfWU7vJFbK>MK0H+Gg?lJwthBWyEHT(F$ zhDW>?hSR+pr-2Zk-q|swN{m|l2bv!Zuscq|0(2y6L{-UUI@u!~r$A;#mdJP&vDq}a z6M<1js`#$YxW3>TtkhW))gvXz#p%FM@*C?|$Ka2eI&mUGSAIxC@sn0+UQM(n_Gsk> z0daGDW#q=@)s=v3rSlbHd{gjH+}Ihlm_zxTF}WjMIg`p2wwMF8Jq7DCW!%pBe&g&J zfyAHm&Yi?vIg~!RV`A!G$&Po#rpzHfNw%sHZE;KctJ_<5?kEBYB9dpk_$4u?{~t8} z5NU#9if^L$FR40#QavHz2 zbViCYfx%~V8n31FT!?eTBYkK2Z=qVjc7LAxcL5Q9w3!t^*WRQ%gPK3pa|x?KBW;)1 z;qQ|NN}kghFO*vZ^lq6$K9YYt_u=c80uIM<^OefiA|!;|KNb{BU)e)c3%^+U0~L~7 zYWAJ zUgPW#ra$T_Mku}vEd0W93U6P>hWwv;XFf0yzf=CX-R|(#Wq$APd-K+X`#pQ@y1#LS zeao8?%EJJQVj*8+^ph7!aD^-cQ*+9NsBDoyT)-eEXp-P0aFN`KqC}9PoP`=jkx7%I zN)abUst7;CqWg;Cm@QCmtkA#B+56LA3z`x&pGca$` zi?Kt|qS&qj!M%CLf$4ZZ&rte}%v<)RNFwYH8+P)&t zp`Zwi&>we*QKzILQ@cmOw3ZdgmQHkz6xcAw~*c}Z<{@p7D zbJL*?ae&xEAKZ2x-)e`AP#stespBoej}Hi%oKI~DW0qM@qrVRyegPr&w_L(1v_g|P zRTr+{aZZur+let{Yh%T5&)(Wp-LI93ZN7VdoPtK}d*JGO0{$_v;Y&_MRc}KN zRt~RK#Uv;_6}|0SP{XirSJ$Rmr}2@i9&AQl0?)N~y|ko9F3%pR#Q zj)y*6wMYmjM-kD1K~RQT=cCJrrZl@~nh7?Z;i+jmu&He?;@@p4A0?pJ1tOO%BVjsn4u3@1oS?Vsk2BzQ0f7Ea#gb&*M8S5%#0qn={Opc&h9} z>E+6}<>*cv-_W^G8jH9_I2}7rwzs>df6R>r z7``i~MD$5gs7m%=Q69`cl~5QTqC`1zM%^M@ztwGY#0jus7@NpKIj>Q231)M16f>V zQ|456=L&8LWl^xj?#yIWXYt-8moMH(#@&v07GvGqnyHQNC40X5ILbhYSH> zQI(;ixuH0Dg#Paw3f;EyohuFb=I23xLp_@!& zEd;1a{IYAqh>z!;Xa);g|X zZjRUH_o~!)7&=!HSy@wz{p|e6aP0&@)iXv(&t+6JSO{XqM@Y}G7$_8_oTETnCw-z` z-Uu<#`CFk4Zr$v^`4kU7g$J(cn!*o*vc-EXn)Px}dLJCZq+|)wbPN5Kk;+09{ox=< z(-x9eK%y6}B}Z?`7H$e_d609C(ZsqVD*#RpFnT|qQ`H*~L+3N9wY!KJPObYDLvQBF zP%n!5!xb^1WT~a_nXCmA7YL!ofT&Oc%rY!drm)JbNCb!IC0DC$3n{c87v(ZE8P;`4 z$^b}9c9?BX&j=Uqr^l&pbJm@0IkA1M(4S8C;>wHv6iM85HuE7Hxyp za#>@kHe8sgHv4pMZXCta$TqtBx^h{R%PfDK98~%v>6ZqHE>k-PUo+YSb;|%zgSl+= zv7TKvb*CKJ9dw%`!mdp!hks^*82Xa%cow z!#$g0V;e@Hnw%|4>rZt9FvaH38u^z+awGRM-}}-!fOY*-?vd=ALvEAddUkMUaAywJ z%uMlIUd|TTy=_o0qfO^OK*^BrX*&iDqfpl_dBrVDvA)rT?!KB_7sXdKU}XrG;kJZg+t}V_ z|Fp!GoiM8o73nqgYA~y_vI(vh<=G2LRLJRXm(>~yfFH{07hp-{fO^qy}`1zJY|3q zcI2o&!iq21>m^JW8#OFXpNzrUl!q1zE7@;(*w@2FL6F5mlCT=5;pAXwl11?z%nWA& zD=D(Mu&R_g6l+{;Si;ymg1gJ55N{*M3y=Y%C<7r|_NWZ>iD3?b zFFdC3+M?aGg~HkNdhZs;-(!jrPye2jjT?tD=coQ}{UdK1o`BBa6(-qXv(H|4iW%mz zd_aLa5MOyueOdCc=J8`5WkJiJz zDSwL}9DA-=CZ36mEY4bvXOf;+Hzc2@B5y>k<+5u{e^u7+tnoh(VB@%t!#o(!1IwvL zF2w8nmhl!ZbPr`5z|6z<@P(+KDN~{Cveb$c5*4VF?iN_Bj^%}ZR%h^xrl>TFp*WF( ziK)hTU~cFs91AC8<2G2%OKYLwcufr>S>wNs!3$uv99OVJO;WD6n!2l3`dr1QeBEekSRXT(D^|Dm@mXG{#)w$h{p& z;jDPz1xMdV4(RM$B1R8mF>scV%<4v4u(wB7FPN%4HLUMU_qYG*{KHYTwUWe| z?e<6BxkuQ7-6f#CyJ6~=yu4?HkaAo+e{H^Z{niC+3r17b}iNxTez{< zhn9|Zk@WV2?0;C_0VfBVggucgLn?q9ZXP>&+@bpRlHQZ?n2w;P8Ndc2Md9j{+gtge?pfsYQtMFF>$ zYrBn6W)ZPq0P#X)Akwz3E^7S65>&9%p|HQT(~EhF*oAh{9-3w;rKh-mcJ%ly^!rbQ z^r-DDp=y4k!$Z^XmEzw~crNtVxj3oCcEVVNeE-nDWB=eMA3527UAOnB=`kqCP0exwAe_bv5m#AaY{V%+7UfUqt&q3r_G2md zSl=-FyL0`V71G8Y{0sq{rm4iVtSGF@tF6s#AKrl@)pFTL7_gk>I1>zaPOJ&c;4L@1wa0{%jV1`Td@% zVT6rM*XT8z1kOOI;3_OHw!@C4$rjXx{39VIYkts$LNEELZZh?mQ#Vh9R`A!_>hA0j z%T&S(H#4&WeN5Hhw@h~v9MAC#LpilM(;X1*LH`w^u~a3eYDvz%2U8T^pp;G9jPyZ; zgG(Ienv!|LUH9;#afSdFH|C z#4nEAJ$Nw5QcY35*%E`vf+VhZZx-Lx*+9;uV0;v-(79U4@?7?FkZJ|f$GZ2I=wLQ?fqEY91;sM!&CbE2=2i zq)F{i05H-sl%?zGqN~ToIIdAqmG^VA6gK5KFdU<8p9_fx3{~YcRC=~(mh9vyDMMoBsmFpsjeZ6@oE_)nOKhldn=@C9d;$gT zb4rR@T9IyfQ&fMVjA?1DVXSE!n#|EKS5%1yBl6O9b@iBQ6Qf%y+5)aCVC%sV1c}Qd zADjBu(ADlMFlVYVG=j9;)%re$SY;|KOekS#X(BxLE))CPhmN4)l=A#zS)I)8t&!MG z*(xiFnpCM(*jK)E)tF2mnBA0nLR2YUq9!nL`65^wO88?N_LYq>H8^U$IL-~sPjfZ3 zl$7<9^aCq0x?M8>tK*(#Db6zEm>P)zntF%(=NbF2;^9b9>E{DJot*M2j^(tMZ0t*l zaX5>X=2py)3o3eA$|0#bx;nNZd8{sz6*Ls;pRBOnENy3yZ(OYB`y%FvIP?WY4*X?y zK@zT=PjOH}j*iO*48|#!h;KBVTXK{caVbn1Y%e2Gs9mSq0kAuilbhzvZD!hM2{BLzHY; zvq8DjZ~%pcA-`b}$?gjIbg^iTo4vb!`QRz^c~WK58UD$IBjCu~rMnuxy{3 z)x0#ot04%qktQ`juT#DhO?)%m$XC_T4@46-vPEvJZ^Wy4euzv^3tq`Pq#N7P{0 zMSa$nu0n9zais$HaD&If-KzLx5eJICSRavcEvXn*PiPCW>G2=#gY9yz9FmnKRE^Ys ziF}p`w#L(SNQph0?l0HS31uI8T=>M$A5J^^Jw&c9o?ke2U5D6C*l>kFzVh)CDb;=y zbTH_-xL(lcyajz@o+%9_;8rvc-nWU+A1eudkDhj4$b5?Ou`pUeH8s6HIKyRB8QE*Y zNXytPX;SGhC^G7@Ei^q=-9lxur2dV>L;QS<;tvrArjw?aCI9451*^8hx@069pUa$$#Sv?%qP_ydf1NL zxJxdp8*1?ctk{7&5=!!%jjlsXzxTSPS^tHzvUecDheDYr0-n!jgbV76@5`uDU1+a2 z$LKW})~1sJe+lg&H{F75K;3*f=q1ej&07J&1ft7?vXE|ci9+XAZQI^wN8y^Tjof)D zAJO+W=aqvq?(G-GK2iZiaZ|-_hXPex*hJ|Ekip&d^<8cR?@j1>d?uiDYaS!2GwCt; z2o+-vkpd+&djPu8Djqy@JS2b#JFK5gl|(=`)G-z2U=^kXMJzYk3fhOtEw$RX^mM!q zd~__-fFpgJ%*@PQf+`Oc<^Iro5V^6NDl?f<30H%X%w1R-lI$XV@v>+;d$tr*S5qqz z5Q`tLo|%++z6x{ZIqhQc3qg3t1<;hco#+2+96MgjB~L5J0FwH(Ts12{F}U^Mr5^!H zJM(%IW}s!j0f7Su71=SM9ZHZoLxLMF*u;=Sb%3`_$Rra|#*iP(5I7_cV>%?%0XcOW zE(%RhZ8uEyP^3=syaRlR!i|PUZmplf?H7*-a66!SI9U+d0-N5PG?#Tv3u=?MO!eSG zb$2+B^f%&Q$LiXr7(e_g_i{WZ39WHz0{t%|u!ICr7CF zF&8Kf5%?<{i2o{;g=U4tX<_u;vZk^PT)9;Vx~uS$kB+wdic~!wr7-S8py8hoHW}dz z@;zO*9OC@dcq9wS2vTT0i;?otrzWOUM~n%smelN8P5oX5HqB`!O|NL|mFyiHyhrDO z7f(7r0ypGX^xJn-9gCX@&KIl59gfkfkU4ivylm?xMudYBtxdM5jiJk#A9rW4PSDiv zNz(Y1V%ULLrZ8xX0kEh&@=-;qFuy91)#vg4o>=;cHR$Usd92pZ-}Sb9Qd(zIqi-0Z zK&51xC94*v@bpjJtHqJssK!f*j%F!#hTcTLF^PKODXT{viI*@(XEml8*nClnrap*~ zn^9A9xP9uXhhLvm1&9}ZXhMM+jW%@;WJd!JDa1yQvSmxYPsloZqcs8i>st!AGIEd& zI)4q^Voxt~))_l(61H3~y+D&WOxh%<(?pZZ3(hDH=mog_qK-&M+`uo?z|Q{{XXhB( zOW3XbcGtG;cGtGuUAMco-G6P{wvAoewr$%sPoKOeIe9;xldPFpnfZ1nlgYj2x~?Cq zM6l1k(34oILS$VJcF{X77}6OZVgk+zT=0jx@K-KmnfR(Ag;QL)+<_b**facU@17wn zfF>+JelMzN0F`X^!Y-R=R?-CEsJiimGc;q)=!k8T@UmgF@@UeZIh2uZIlxeD#Z1T0 zR-IZ=Je63NIo#XZ6kB-;)y^zDW8!NUs{boK6$G4_9oCeQA>N!JeXv(8x%6RFs1yY@ zL^eIDnFYsII;@w2r-^LHUwRGX)+`*}WkJ2x&zfb2WBf!c_;Tkr5O>(rj1jWulCZyLY>B5ECf&p|N7g{Cbwm<5inubYz23jmUW-nV_ z7w&u6Idx(eWVgnf%_<00@KOe?W+}6kMXosv;~09A2(}OgiOFH95m=wAbm}Br11ffD zOojOXl)|uGJ!|x?H@6jT`wF{e2SK+rol>)gR~v58oPcZ{H)C7DKWp1nU?q$C=Dr3d z!^J_n^z0zg?u_2dz`Q*sOkZU28kNY^c_Ign8XVe$Ra+?celeAQcG(!AIc9s4p1TeIZd z*%S4V-xb!N4%c%H?z<=^TAJebGz$3sN^yZ(DqP2xbLC;rOR|Rd@?`WnbEqKr7_0fP z8(f(<9%sncYU+`J%L;em~N8#Gsp zqwcC|at(g9>>ui+9vH0ObYp+KbHgq%pOiiKpkl0d;qbiA=(R*_UiVeSZoBs2+Pq}c zp5Ph>aYl@q&)`-xACnpnCmmk}l4^N)igA*stc{$)%xJdUbOi7{YKvU*KI{|p$Uh;` z@e%A3-$OlpJB<5>7{Cby99=1>Y)3QYN2!Ul|8eA0h@m5BAP11y6D=-d%{Jy4aGxy_ z+JYi{vDpL{aaN#w6tC*7N^*RtEw2NA($s5-nXDFO9GU=9(bu3RIa|WcQ&8ri{InA1 z41}3R#PSvy+$w4|z)2BGuxe}>eBaOoU-1QB5gzpU2`Rrt<$o-ftJ6Ei-93s=)amoK zHNW0n(Ye<6?a-T~s_S#rO)r6#uzTfc(sTUf{eFB%kRV8;xOZL*_=VWl*6zSjd|!MG zF`j}05P3d5{#pZ%`cI+ynCzIraTLXvaqaeT2UJNBxao#1BMtV4Z}C65J7w0q9Lqa< z9oLiIE+X!LXnlm3AR?`RTORo611N^D=Q^Gj#D)-YIFAu#uBiKfPY_cq=B6D3`utEn z%NLuEffd6G-L|?Z-jxZk9S$OM1*|o@SgluCHi*B_n{by|HTfW7*a2CFlir7ks%NrT z5bajXf0l7Faf<}i8^CW`xAgudf|rO`*Zj2wSp0ON)`0A-od-&|sn9jO>@7W~L~v6v zYX+M9DRqT2!hF+$jG-g|#XnMl@Q>+Js0G&DTzD3Z%ypFVU0S`A*}aZzy(lxg?pXtC zxfZboj%_nLZ@HeIX31=pq|Oo^Xq6RdL`MKdug#ERJTD09Rd)rY4kPG(+q&T;!Ge*a zLiD+98p~-JPhc}jY%>BO_X@h;D(B~dTX1y-Qp#NuQXRTR7K#lHWfUVjct4jd-%c}! z|A?OQY!s6sx>m5Y7oL4_TPNYMpsD4StC7chMq70@iccTWAbw1+zHbbn7o+cVGro9E zw5fp+CO5}=Bu-5_Z0*74e(X*70(5gDh&auhOF#fS|B6U?D4dss5HSA=XbFq)?Y@t@ zL7onLexW3HMgMcKdI6a|eso)Fg+wr&d;?XHM9^EcBVHHfNxVK9V^Dn~d4b{0;&R86 zJxFmc=?TrBEq6$9YyM%7J$-!;@xsjxp-)?az}#pR9U| za`?GHowM`jfKG?P<=%Z*plg9KE9W3}G=($z7`PEIxulBc5H++Q3k!|~IV|)P2z|p7 zjr~Ll9_&vWAITd<6_##mGOag8)MYZhTAw;Mol4Q?+sU9!J2@Ry#E<2nhh028OF)t( z|ybX8W+~0`X)aQg^T)qKxSf;oI>lIZi zD|+nQiS=BHNI9)PEWN8_7+^!kX+jzGi1v;HAMr`$Gw?OkZ@_;Yv$E}|b|Lpp@`QsB z@rm_woBo^s!gdScU1s;9YzMu5N2K1!L1YwsynX!!MYRapZt}8sHZcUxQajX+=q774?oeFD(b8j|tIIBP=2ihg?p;;uUvrZs5#IHNUZdra=I`IhLO~{cZM@j3J$Y5W1+Ro>BEx z&f=^}yc#x{CE9l8yVw~1{6sFHN48Z(vQ^)7McdluMK={D4~Qh>pJ|beN)hsF7ttN+ z!-b<07X!5i#D+!&34~S`n$0?V^Ld}r;Tns$%V`YN>3m|{?r>W1gI}`a1~$$d#Bbh0 zsW^Q2g&pDfoQP3@W91%SDNR9{HR448^{5wNtMnjlMX%y!)p3lR~$1n(n8? zRJN(2-pJpNaj9-PK0ifOL7P)bpT?cP{)&qX>z?PYca!jUM>BLHEisowo~&vXo~=JU zyP)t=-DGEd1Eu+xnes;)eU$>JCS`1LM7+OP>TXTrR>h4)s`&I8IKF;89MkX7_&|~0r|84` zfJN_D`{#6nQ{4OXzkWEi1a|{xyk^uSb%Vv+H}A53!FvvE2j#qYO!RJ>mVJP*Mf!yH zZi!dK`b?C+P+(qojjg?yURZr`wkP`Z+8pTC(SA@r47aa1d{{oge+OUgZP#tTxNP)y zAA7wb@C1B^=55P8snhEkz0QaZErjnUofvL0PelNju6C8cWb5G(;tG7qkb4!h8Ua+JHbC5Ud2EYhZf1Xv8050FuX}B=g-VB0)hz}+Wc#i}lVsQj) zDUz^$9ws>L%Q~Hy1_v%o04n?ezp4gDg$V9f836KhwmAwUD-2!$7jsXbxkk5!KB~x$ zkJFn=TZsSL!FoyM#Te(qB4@8m70LkD%;3&jhm%HMmq^&dydYkC$*`=N@li%uzg=?0 zRv{2Azot$Y{mEKc-$P<$i?T0TRG;EXe8pum&}+D>Iq(xgiC+Zmi5qGiLsX3f+LGHy zpTF)K+kq2*W6YU7H3K&|dYtIGrmkY3CGNzi14Ndsnu3Wt?Zh{~rXn-Pnp4(6ICFyG zsWKUX$+U80V@PXpJ$1dMRG-l?Cl;$RYWS|HJh?@9?Kr0`ECwfZ;5h7&^`;J)Q30vU_TH*O=VpckQS2{vhIs#WZ z{8u`{S32xMS1zuAGj!rsNI&Tf?vV`c84d2S4DP`U?#T@9(G2QgYG1)?U(st{cM)q} zC;N`9X-ZOfsE){NDE`pZ`$~olP&q{>U3B8di_d0hQ=Hdl6)~!{Pkg0r0UrmGv`q#A zlu7dozA$GMW)ZD<2t_2hxiYSeykeZAr5toRiQeQN&es?=8KL!02-t|vbkuj)R4)P? zS&F=AKZY8BF^ zl6BpUi=KFQ3#_>yTLDm32+HT$prEZW(44pSQcRU|Qt*3Zz^*c`44iP;8eI(S z&|CqNo2o1m&fI8l{1if5)v016#rm>7z8FLOE*=A$s&gIE)8aFshx~~zM_SZH!`48} z^~6z{v%{>zy@LMaHB*LZ+T`%@)+FLYCO+mtFryhORwTSBL$N8iVLxUhBUU6cR^mQn z^tJCUXn$apOiWEiU(CY14Qn*)zuP%@wpwRu?%&gCmhQchuqR0oc698Kif4K@QrX;_ zQU1%qT5ZgmomqI3`d>$0)z^A%jhwBgQ|+qaTo>tx%?VZF$&YMrHXk~VHBH&W^*};!Q{24wOJLASTp}hp6llf zl_O+TtoZfX2*eEQkljarOC&AMXzqE-(E0Axp=WK~#*)bSn%gtV_Mzlyx$CEC{VEyf z;?P{`=Q<5oKTvcPVC&&GCgGv@yh-ALdKxp99wSdC%utVptue0)LK|0M6Q?tUV;V^} z3e_f5ts6fWtx&2mKp0h8LAhgjYTyazBvY-YKUBZqzq5J@;7NgT!;eX_d=+p5o=(BI zmyF@%U%hUr1v|tYT{wz;1CKgJr7OJ{1V8S z*K9oj#fVu25pBuIdcrx__i+n&-lMp(t8Ev%DsJVU8#MGOIc9pJ&TV(@kM%l%&U$+% z*gu4b=>@HXfAH~`e+FFqT7c3fuh<4>K5=Z3?|xv9+~JYJirI_A&@4NRHeyrygh9$l zJz?R2p-mlqv#fMwg3qL%ntZ>So~?wYUDe}=R}B6;SUBuhr~Y6Nk%^oUC37HR^=MJ< zz&lXLU6<5aSz~R5O{#at6nh8#kfz#)boZM>N(W@no>zI)Qa^hGNYD)=liD`${!pw% zVhc89L``436A|e>&=qiFR`^*{s&j_dMRsIiw92^`Rk#?rMuq>7qK{aG3b>Bw@bGtKzaM| zP6RhwCmDht=Wj&+UPK>pWq`{T8ShIMXOqVsNdfnDcKS4&LspKs(^e7h`&JzTcm~3t zTS^F{8upKlpkg`8#dx`RIFNO+INSN30-6d*am0NUxyNz>>-s8>uN?al zXjElD=TJHT?PDat4Y~>nBv-u>-bM#@(84Knmz5!|B%k7T2DC{fB%)$*m)Ov0=EcI$ z>0~?w=U=~s4nY%Ft_x$Kx2@zQ9NnQdy6_(UNn^Luo(rbvIp}pjmkEN=Ot`N8^+zLq8gPiusFt%;*A93AA-v`5pTNfVq z`Rm;8Rl|=fHgBIL9}#rvxWBKbduGWLG1GG2{QqMT_>Z>-^hu_869WiHo$vp|DEt4t zJ^#-q(5VTfr@XkxcWivrIeJhF1_=r*NNAL1v_b@>$wn9tDlLR4ze{#65iD&omnKR0 zvb@w-`PcGa<6vWi^_tYVBAlQ_qe`BdwPmHXb)(bim5`-oWy?*D!*xbVn$a(m8Z^)A zE{|#6=gjL&kEvFdhcE>E4?Z9o<=^wW|3Ym>1VsB;*bDRa#2~m@HJ#>#_xVy_=3Cb* z^@DNfgg2uK01Y_9J8D<>$HCwej{84hGecpig9Qmp045Vl4l=yyzA~HC(0NxYu6pha ztZBfmG(PumQ2h(nHy2$` zP{$ncQFkgtGQg4wfo9*&z&o+!v_7#&yJ{Djoko}pPj&CNO{KFwR`>Xid=Oc=ttQ-j z`DR#yT0_lQCJMICO zh{)Te?S_O7*1;!`Kmo(KwI(B@UArZO^N}H;6U&wHD<_!1so$o96ofyRVEIN-<${U* zVsQM`P83`xO!amjh37hf<_itmJ3Pv}5r%(~rfT*^gIz0VnQ?x)<<|Y90_A`oh3Uq@ z6~tw8Bxd@4pWNHCH%Ry3neWKG9>&&gztRA!|`V(|!pguVniS;}tE5GbSDV|E4g z9x%&hYnq||)`8?BZrWo7h1nb0EZ9KZq8+{iok4KQM53_A(q)n|Ywg;e|K;nFg=GGZ zl`D*}vv(VtC0|<~CC{94(0)~PL!%Q;L8HErMU?aGu&;>P9LcGb|0JeLL}Gl>QV5_N z=-IH5itRH~aeijT)*mJ2;Oow0DMTxlI|}*!x_;&;vi?E(RgSuR$>1;c5332RG-;bO zsC_b2EejIGA;coNIf?Wq_LpWPRxq$Ocv{umIWWI?k}N(WU)d@q3b-Hyl+#)yO`K{! z#Rh8;mV^eg6$lcGFE6-y>O{{s?N=`|G9zSZG$e46jh)3sVbkoKfwP#fe%;avhidt4 z0?rI*Ja#X)(6iu(lw)}IRH~seyoTZHNS@v?uDHo2COp~7-|Iv?bRlWQ(-;;U!5kTb z%;-~bGqb0bGreYh**e(nmnP70QvXS@79xwl0=Ch{Z{tz1@}Q>m9ak|rwl#Y#d-qjF zl`&nkkaM%M-!P!=7w{>9y74>_Lua3xVuTw?_-s+m8RWbZo$(S$HlZ~yEC4;XBy{^D zg+TK^+@b=zR?3hwe79-6_}E0-W{f0A=9r+m<>LcdT%vd6yRmUq0?HDHC-AoxWmnHF zt46@%<}4i%$n0eN{;P9Bb2HJ}42rCQ=44BmC6KuM6csFWY?9+*!T{)Y#4OCio?La{ zfWGdsDE0zw;VUHUfye@FvV2;l?LbLTAiuv2%&2tXO=+TiMui#C&-)-o z@xU$YEZ0n$`CL!Cz;N$QJfZ(V@(!O#8{bEP z7>d$Ex==wWbi#@B!0t*_w8p} z=lZ>HtNUV$w{5`hnnCd0>*B~0eXZzdun<+FZX`lxU%ltCK%E~N;}K4oz<_*B!I7sN z4vEE49FOAo0VEfzZy+6zmoGp$qA6S_cOdQH1f~`a#nh(YlbL7c6BmFj?9NP!4waRF z*|$Pr7c)Sr7>hAt1s}3Dsn-!@J~cCyzxic`GipdHm_4iCkRX=+RnmGOG^9FpOa>oh7FK0K z)gG{{b*BN3eW?wdxF<8!#u~gAuT5Fm8?xn3ADo)EiVx;fSF9~9;ADt0FvVF38^a72 z9#b>UEH*kDb2a`Yq;7%KcR`MMAy69(PY}m8uR7R?3!*!l7}geFBu$L9k0MdC`Cx}V zn=~rLhV)y>@sP&&cM+I&npjtvwCdDS64nc5Uq_q@dK(i8<$z4oj9ml+)a8b{5t^_l z?FFtMP(L7=DMFUZG?Cn7+H}UNTa|TV*VVBo_Nhj30D+$WXcrii z6lVIk8tj8rgUd@n;vySgM!l3eg0h7w!p)^XRW+I6Qqh~HAT|%x;hzZAV$$Ilw6=O# z#az;&R9aOcH5%k#i6NstRUn!vD5#M4nHX^=%Ac@6csj8WI|#1w(+lGnNeKO~P`N|p z{^s=AGdsReoIGd9dx`XUk^@$<)`x0A>=1%KtLBrW3RIi}lJM`}m1 z(=yl}Zg}~GF1Xn*Hb!0O?D6BW6Sz~EMwMBmfxFkGR~OZp+S^p9|5>oJs1$j7p|NKy zd9yF3b9!554oL+xe(7$Xk=}xEX_px-iFHLwonH{sq>!!dQEa2DU|63nGNHH@7F z-_>zJn_4(&E3vxRag;-X3F+6W1mB?E;_aUI4%NL4U1p4*nOpqTF0wLKUQkV9Rk5c3 zSGFo-qb;j@-n^{Jp0v0y?}B}cgK8s7t{GnDxFhfOex91sC5va*-I0EkJk;1M67z<2 z@VI}ke98#G@FiI0WDPUktawp1ZmPg|l0#qwa1XXE5pQ77qvjP%)Trz(^w|S;o{uCM zj~G90kV0|+leF|1dK9DV*h}F~mEN!v6*k_j5lo-JN+)h6qvn|_$XiF2Rd8uR;t3lI%oM3@3&8FEMr?6D<*VC-HKs&F#6p}70|!53`kW{wmn)5 zJT|ghI{y83K1DVqHLfvD3IjuJzB_kkL8wi5~Y_6g7-sEiXdNN`I4OZ)6 zWj&!(WE|><2T;wkNm;4LhR6;N?bIKW)zEd(Ta{j{?a7~M-W1hrBQmS0xI_JdqRmL- zxr-L0-;Nc%*bb)3#4=tEk2-=xL*T+-PRzatW zNJ#TyP<(s{HvW;mEo-Gv_`$!Z5`h4rzTLCFw3$8ju>6Yf|N~z;xdM$65_eNnNNPNVi%=kcApV#;F@oCbhg81zDX!%ZS)6F^5$iATFv; z3MPoBFTu$LnWC)S;+$?6zko52axH}X_C8F|R#e(aTBQAXvJH8PZ4is6RTU6U%F8S<)m ztN()9%m)n1nCHE@a65v*NUUeIh<>P zZ`U^py;>78E0bW?!5epC<}0R_{!{STHPRZUX^!ZqYUH#{timshJm#mjO^0=rLNN|j zylU>_#_xJ6{1eILuCjYA4l8z}Mz>w(oI%%Ogb-~#Fq;jg&oj}Net0!0%3T~&E}GV& z|EXOneIc7q5z2HBNG*_!dBhglK z=8*U15cTGe_4-Kq^SiY9e}j8lE-K?0ssHS9Br`>w9@M0}$OyIS5T4Y6l$#0=lI#BA z0S|Wuh3H`=g$+InN)jYO+iKe!Z&-yS*}dzD5>#9S{6&WmY+ie^kYtZ7f6J|iy_a{R zr@>UqC2kTpyn#_xSEEB8+)AGWd7<@Fc<@Zqx-w2joRLZ=mR?~A*{o#wnU$i@+NvIqV{JkR{3}{-^3>LtYUx)P&pkpwK5avq_DAV4wez#qKh1LU6PwS_!ufuQ%P>G#AM^aLt z^gW+36^Jr*-lT!q?re+a5NAQrz$!wbp65Fu@48#+U8=ZmD?&Q-pcHu}i{ocjKSg#F zqj%egR%K_64&m$)%we|ojp@}{h;zD9KDnfsABPoWjFq^M)cK%E+4usgBWHX$9Uj#= za^xwplxWIS!ucv~20??J$0BZx_iu)5%{R|a`SvkNnN*m#Zcj+buWHWs|0K_`}>aJk2L+1=QwgXhI z%(8>qyDY}!*_Ejr!mVJYR4%(#hxnNVJdvDZ`>FqUg51WKQ>%GG@DI^wl)wD9SP-WE zoDYDRKkxT7bnnJD?6ue4jBxC(l|*E9!5I=f=Dn_Inj44h81ZXv?33qLu%*J zg8xn#XdPGdSR8X{U2g=kPF1R%Z}>S)scf8F^xbD}uAF>e+SudwkROw@th%8#bNEDK zaOe)eEZVhbXN7Su;Ib$qu>FIXElJKROE&!1hQGcrK3lC5(7rHjDA0)~eCBZg{*w^Txhvs3v$uCvtxWVUIx}Tx;_7 zQjMIhj!xNR54ZfP1w13dG@^V`@I*F&8FF9J9$a0oF;mbvmEJU#75V_S&nZ4r@Fe=@ z**h|40FAuBBFQ8n_e2~sSIKwv3q z3h%(wXTNQB6?!{=?12?f{%+`KAsZ?Ch`4z!T|!6N#-1vx34n5L;u=H) zt(sChmZVW zFho-(pnE<~Sh@G%nGEhr&<9vn0D;mTR)AAbNwLWDty@4H)*|wbpw|CWX6y2?>bpnk z5QMV9!_e!x_jSPqH#{bS`@v_3u4C3PtMrNo)ZPqZ$EAn*?oM}ua+^#<~O%57c*GD%R`__H7_5g;Ir&3?7eeeE+pC=m8! zqHSj}?7Eu=X+%&baZ@w#LZPe-h-GR;Hi4%rw>;9gtV>KyZGm9h~)3xd||m7)ZID0SzVcCE$vr+LFf?nv&~qXqr4m$$gK+);K|Tnie%e` zzQsurVv-5m-(&lxZHe+1yZE(31Mv23CAPZJg~qbkeg8LlJKRG7z`u>cUBv0$W74Zj!311#^KC+P(#X>bTYro zEW`sw-Mb|4XHmpg_}5xcN_X6$t??^2#itkWXF$T20)x-*+#IO4>BGmI@Dq%OX|M-+ z(TC~>TiG|4*E<5yh75129G}Dd@4|27;O^w*?Us|~2YsZ*Ss#qq@0sthySM~CX9c({ z^uTS-QxuHJqGy;B*lg*#ng|CD43QP0KiM-Mcmq40uR82?(n7rh zz@_f2Fs%1E{n=F^m(Xtp^{6bY_PNxL!ayIvHspJv?zWVBCV$!Y8+nE$9An)6(mC1t z;}#b|zdtD3rFBAQXa5Jdxy_7%-sujlPfs05ca#~lZbLM}ElA!nVfpD-SGlh$G$4rv zFQ_AZxkci*kxpkg%YUBiPjkXD^I^zGEwHYyxxQ&nXd6izg_Y~4`?g;VJtCfC2)I-K zdGt%Luy_CdG6<4O^;+|I7g`r2)~>!T=^l)~NGCDl#XZ6!*z^15`$H=KnJjS&`-*0! zBX+hPA%~~0xonf+lIpY6eHaM*bS}PedK#Q2U+a1;P&FZwW9~G;11#gBle>Ta)u%hD z1?ao5H;)&7bN0)X&MdcMu8cFs-^4`bK1ac0e6O6VXi+ckXA54Ym7)+|rIm9W$dg&M z6+I1hbi*T?V(dlU0PvOT2{9f_e8BTyaIhzX zEa6!MKEU?o93m26d6t4ot2kk;h(E+QNb6HZzY{@cI98d_3>IvS;GU;oUP7Vg!e-CJL5w-y05TPs{x<}Qi68@LK?yD@aZCV&t9val)uDqGb($a22JTR!h znTE6}{|>M@<(oR}s(6cU{gjS<-dnZU45oeZ^i93bRAz~x4Afy@>h@IJI= z><;Z&F+v6+#sXJkWnePV5{KAw%#1YRUW5dmoI1+QTSoU-nkL_5+V{n8`${^GG!niG zTtJPM~SO8_{|LE82Bi#z{Ou=Q_*&&6&4m@WUQ~@3r}L#a7I&c z?59arRn&&Muc-%XxvLdDgO4I?j6{MBQ>5D;Sc&G>q&H)G5)VI?FtmXPe|7Ih=A2PS z8jEiT^u>lq+9~FmGi^vZBWNV$Ud)3iWi%1!e26}+By`|vcI_rupa!({S)c*RxpReK~dh@PSTU6FnLz3l(vMpkwm6Pmk7b1 zItP`$d{z?Sb&x8BxKgy*k<6{VYN*=8YqUzCTWZ~02?VulV1IbM|3$aC2h`RKs~w`G z=yEjqvclj*bxAbuXhc(8Vs8qtTR5U@o*d{zvEQ0R^##UO21KQ!uvw_ES;z(pJH*E% zG@ErKHJd+hWi6c0s_PUdNG~3j&r4gn6goP#mp4PEoCz>!Y|@8LE^hW(jMFdn0vheK z7a(2XY@Nd67vt0@QDMb1?5^WKmYy#K&6i#*wyI{e9V5hY3eH)#dbzVY{_Jmh!d+On z=*f1e7-qevT1;0P&zlikF0Tkbn_n0^f_`En_`)EJ?d|i*;?J#2_hUnFgw9piNdTUi zgc`p-P`ZYYg3%ebAf`=%)ifuLRcot@j1Ekqp6{Ko3G@c0k6F61ZD(G@zB-0W3Ouq7mnnMelnV?U}P%8Vdd4*yuJaM+GZc|>yOG~h~dvzrpe5vw>bPu`Hu*v0l zS@=d=%stsRL(Ej!A%Aa@;CpJMZc&?b$k7V5l6K--e6ZFoe}4ET5G=f$`#&S{=gvkr zD(?$>sufTU9z2po5gduLcq_jggazx}r}`4496|wOi1AF0%oj)1#(?GTVhZ*DyJbHi z)8gr|8cFCor}AFw;5bea&-#cQn!baKFB_V+TN&M6c+vc@F2*wb6N;@ZKH|rEJf$yP zc#Gr?K_Z&0TyX31;zrR8gc|G=9rkP3*u_7F7-lj5(8EJyALErQ?)TL}3hNtD&VsA5 z!8ux#?%}n?2X<$GsBFc{L?zpq{#=e_Z0n;LVo%xr;b!Crm-v!tI{z*aN&!~gb-Dm) zIRsDeL&ZJcVxdNQ95kcf6GZ=JIpM_Q+|tB&rkw!EG6AlDqjB%nY+Bl@azO<&gcV`= zACPzhY7`o;HB7>)T4i2i>2>=0`Ir(J)=|#We1}{$u*LM(jQTULhYuQ_mY@Ykx5XS2_+no-uVP8D*8=>! z3FOg>#Z$%o40k9w>j^reG_f#j}t$CQS^wl_)|@mK;q;xV2uRBn<@#?vTzgWhn8*6CxMWsBq>EJhwO828Q{HF<2#R&QZW?n=bs-jFPnw;2?2zv7+CGMo3mrQPdW?BWXchIsW zu->rjKeT#pjT42X2EGCoD<{QrqpVj`Mq9Hr{| zTJCj3-9oWRkrF2Ji5M`*46inRlZxwO!MwPzgLa#Ezf7$J-OwCJw0#@ZwB}CW<)&vfn=xYX>g)0r=4jpAO9J_%jFx zK*?)Eid5K$Bqx)$;c>jA2rr{lIYpcM<3M4!Y4pV5z=K=k_pdJ-DYx#l-?hUMF^?(& zTLoGIVJger(pulY54Ap-4!cC657?@|NDsS3rtbU`lv~iu=+wiFW}Bkr?M&SyuPl|_ zDoC53V$E)m&bNKX5h72JEYHH|?* z=9t2n$%4%AL!nd4CX4D{sS&0GAIK%|UkjHpsjAsrF z&t4#P)A0Q>i@DhMH;MFT5lddB;;O{{#D)JHV4IIJb{ZV^M;MZBV~b_H%A&%`!rp=F zHSq=5+y8dX`yXnUl!!NsDC+Fy+USfo&4GTtDCv6u_7N$XZa)qmIAU%0@Vz_v;sFzd zzH~XDSPI=6XEm?{_XK`5+eEr?qOcJ6d+GYQiuTbtE1QI()jf3a_^CtNxp*lEgF54b z35a5s-GC+Gh0N##z_#McB)TLIrMP}Qb!xn`hVQwcgqNsy? zPTZc2P#<^bBdOxXIfqkwlDj8M8h*iWEp@^1Db!o=-33mQ=(fBH8?A<*TS-~Jq+E8f zf${R&AVF`uw44{TD*gE0SpeW%8}PUZc;wC5TKoZ9$P5!jOHq=^AN_mYR_+vI}fA z0ykBVr%VH+pRBnI)Llq2$!*$!IB}uMvdU}{tL%3aD|q4s?H8Ir zW~`y;<Za0q9qfD65C6vqY#FCEI)QD#{8(C2Me_na+<#%~kSd#2_~CQVk2 zEfq=~rsARdZM$kav&LDM(de&MnIur|PV&8~HJSHRX<`E7a71WO|p3 zCq?zP!)U@zoEWm^k4cNcZ<^Os=LPA1X>49%mA`Srq(6(XKo0P5Ko$&(FPx5V&Wh_> ztZ+dV<$*;q5kP2t{m^F}yCReC3^0%F*ZTg9^jA`0j9Q8}v5S^@j#0&RWRZMFOwAp6 zpC?Z>ub)?%RX0b?Et+^}!|FG6ORme#U>D`BzGWBUi7$fHQWMh$Oji|_b!1w!(26F$ zCQ~NZHHw|0)p#vRt&$(KI~$8=s_YjoL(ftlk9_}dF#@@n$u`{lo$*SvP2&J)q!+${ z|A=_|NgBLi)FcGbx|&vB8jrV;_qQ0e95VRmF%2vF<-eNnN1c@E?*Ua`LBQ;$_r zqlI*riVi14g#*yO&ckI#DiSpPAmwFe!FZd)l~3p{jI=g6rbY<3{Io_*+!w`D0g?mj z(SH;Dt79D;SRtk0$LYUkj~<&3K#Izct>1ieJ0c|Su~!ojlHd0lOp!ai;)BPkd(l6n zdZrO9`t6`u@c&v*lb+-iV0B>iovHM=6rdts=WBH(L#vlaTJ><@m+t_xnDSZd@iv5p zm~pIqI@#XvoW48wBFam@q zKC>-oQ|6)Hye{qt17MiXJ<8=bEOkpfP9e(W5AxsN^Ry|`N8QrNIZqMRG9O6Z0?`dE zzcSpwFO}(zG#~O^lc=7>=`z1-FVh*!B;}k<%XR(5cT?yNQ%e0I6hG#S-@r^Z79qKV zHE@&QZ^MP%jL~JGTDr;P5C>GD`yHX#472P}Ge4q=#mA~S!+n0Ah3{hE&DVdB$K8x+ zi2T0YOq_lugxf@@-Vi_hAe=l1Da}Th_2iST{9vd&5-$xQDANAGJn+tZdzEa<&dJAl zF>lMt$>VhBjx-4n9A zXqaH^z)v!QDwz9t4ahs{uW$cZ)cRkRSQbuEZvX@s7&r_VnArb*QS1LRH=Ba(|E_11 zsOzdNh+urSG7g0|r&N&{ps38lhh`UHM7QjhC=o0T@EAOq;m@LGBL;l8&O*9fVnuEiT%fWAl=ETFaT*?;vq`|qk26*JdfQ@*zoFl1 zJ?8A;1ep?)PUF^Z}`d}$M4hjy68?8aQ zJQ~kRV?;0LGrYXQ0%OP-TsG_{$w8i4wJyUFVVdA3D-)cHRO;}SFYX`OH~P#8XkWu~ zaSuVN+(jNs#U?MJJZviZwUM2$QLR0+2a~fX2xlivAcXNgN)8c!Sb3C1c=4mxNXgxV zb;gE|JYzlPG9P!nZg$45TJ_VyBqq}+10qZWNTZ6BYPudRmDgk(3ahAc2(o){YpOR~ zhCAp)r6CEHA2z}#Bsv2ubNhCTF-8cmw2>pn#q;j|JD7ek za-nAPi+CCFSUU$N-Xk-g>cG^@On5$Alyps0C9xdll+g#oZXC&&vDOI(jD*YQ`7anmWBRoDj7kIloDh5j3}1wMOcl{T?5 zxAX7ohX$4{?W6c)ur-Wg9(>Y~=eB%#>oHFBDP~)e|?r1O+uyfR$We1g6k}~ zl!i(Nm#2hpaRXgH^eOv|?0xcJ$JBAYi%s}Jv8n-l5!M|D?*a*YJFUb(KTfzBSM9ZA&AXe)6NWGU%6-gQ2}C4(>PBs0zNP ztLpOAwqR<6$_clhRR6e1qb)t?-A1xiaZ(>u6>Q1-`L|;EN^t!_eAMO~cJ=-Y21_2J z!O{e_G}4$MQ)?tDNCVwQi~Hs~K0-&fl<^)CmDSi==J%*~XD=M8+A8G1kuQD|9Jmh= zI@#yP`@ybwg#FAsF7;ex$*;&Xl_O>GF-Sva?j#DGFp!rOon?+v`#P3SKJAV?rO(tN zMdzLW4t*j$#HyV@VLCbZDWw)&$*Wj=tfUVP`42+M@)#UOlFW$!=m|gZb9iG`z;R46 zLNnPsl#)B(-y9v1;1o{D=&Z#S%!Em>O|=&n%k9D|EWW33p_-Xo)1C8y+uu=Qy1;_g zsODB8FRjaC1J8^B{WXT*Qmav#bd1Ygp_5YM9dJ?aQ^c2mm4`mb9GWh@PwYMDwIi14 zT7}UV1Z0og6Hg2o!P4N0H`+Xj#iI(a8T4nbY5zZLozHSMg*LSW?jQ0 zLjXoxIa6J&EEOs8{xGri+1yf@Cs&8g*`5p--q`FC-L=y7zS;aYpP7@B6WWhUONNOw zXKAH?SwD}huB)vp`zyho$9!x9hEU=m3yX* z5BqdNg}aJ+8aFbCgr2IyW$FSY#@yAC0ZsN_;XBRBWe=IziCXvpev1au0KX)En# zfST2y)678=8Y_#Y(!;-2#|_s1IFAwYnrnj91wv@K6g#HwQB>JzRucq_W@QQ%0~uJ@ z191FSW>kpOjN6}P{kd{#cZs3qoekZIu9NB`83qN`9!zQ3?33yY`O|;dekDoXHB=kV znNt(XJ#WRQP{EQXG{mL^8#zzQPot-L3FTtXf@q=fNA<~hmFoPeI>(SQ*(FKI$rLKk zvS}ikYX~ll>3=$&R9Tr>{m|CG3%=fY0c5%?v~u>7B?6QkHsmsxymVFmm9|Z`cx=+J zG=xjhQt(h~+Tiu9nM`?30Qxhd-?dDuN-Jg_c{-gv2Hby{!b@_YPw0+xpE!w!*-pET z$g)8inE%5~@zcR*_@00k( z()DYU8f8V8n|L^NBN+bY9yeF1WAKL7U7kR~n$Jub-`~lKyV`x@^A99GeMa@K-lyiF z+)$!i?S1GCvy~imV~9Gz=Yw&S9wo<_Pwby@je+wJ8!Hye8&tqjtafgSDvF~NP@>>0 z5-|V$8gb(Son5u2Fsj>+WmTcV$7g_I*rxfaqv8hPt__?99jdJV`!9NpKZOPR?p{A{ z;0c-cF$w#I>RjLP{yD~VyDN<*qW%I0CS%577*ex?FX-V-q1zBF%$;;8^JKwWcOoM_ zuRem`JjDE&50Lo`28p#@`93KczM9%MREx9RCU=;>BYg!N0kb;kmMCXtTRxhp@X=l3 z{Ayi!Htt5`<9*&)cQI{^z7TZ1mg|!i9UUlMVP=}XQ`%O=F0z@mOKzl9mLew}znb;| z#}4JAkMtY>op+T!OAaXipgO;%9TAq@|6KTO3K?$VJ73IW=<=%GiC9*ZIL&vVdA^4q zWBW}`U^f2h;~u|II4h+YWgMOA_V`UORj00b{}A+(aEZS046A6#xcDQ7VyugTia=bo zowt$ec29o!LdRA~z%(D<0~-*9NAKyk(kMTAHwkb60*6)_q%iI`9;*#Bq!SpuG^I|8 zDrX6!-tvM~TYxSD6Mp#(cYiy(sw9P<)!L((J41YR{uC=RfjPT5bBF_V z1wUZ}x&z0ma`rJLUP=14M!drI|JG8{=sz$QT~eKPMZq$7ukQhjp?ud62pIu28!)$9 zk^-T|aZ!49z4N0lM5!&kwdPP|X>%+sP!C?AQI-s1T|tNv$Gfo<61F;G3kn>?qC21) zy^>ZiapCIWQ&!gNHC> z0q3P{pKxOxh(IvfURJUY!E;L4eAyfo36_{cL*8{vzTOiPM+-NJc3Bz8m_W1JnOxYu zKH3uY0{O`LvcEAY;yEc&-p>- zN}OLH^;P_q_9*y$%+{$zx%vL^tmQN4C-<9icZwXM!w2rk(ceM|^^NCG{A2GTarqT; zEA%?VOi@i6WBZknxRQ@J>RTODs!iLcA`o)9fLJ}u>Zjqa?~-GW%=1A1$w5-0h_5;V zW;kre$N*K@TI5Eme#P$%(OD}}cIQPG=Xw5*@;RS5RGhri3s%{bSB~8xN6ZZ*%uSkk zMsCs>NGzdcnOn3uWEV$qqt}WfhmGk&9$pM?~S9=@)M;f8WHy_KXXNRZEoVQLKCJ^}A z^v1ueN+#QvrN}o3RPL%rVE|6yol=4+)nE0pGiR1c&N*T4nM*V;91}akLc$AMnZ4TpgVMb3^}sb2c?QhXocC{~UM32?#{|Lvt1!6lGdi^5>DN z((e=idlDFQX5yJxJj|;xL}FRH}p>Im|;}5C6-KyWEev@etLHeC;NPZ^MzykaD%S}EaG|U-@bvID{30mKDn^ftnyfz z&!tmuAj7dC85x-+tj*G*&8$;e$%Sy?GH+C4sXOFd3gv{bbP!5tUuqco3#27_sbicUH&$K0nZX*`Fe(UR zo70YO=u{6pljgP=(ye!LX0JIwD zKBQ%zs+P-U>-r@;a(u;OJFj6M1dPCzs3irfStRVdB>Es#T)4!Ye>LN_w0pWF3VFCB z96a+A-`AdWAcQl)cE<}akLhCIxpG9pOWO^-R zGW@2_9?pKA(;$jVa0|gSzXtf(9=F67wPlox+V|faET^G7T$BH_^YMQ~JM90F@2lzB z{A1gF{z7kZ=g(^4wC?%io{Bfjh-KJJM@a)~g-P$1e~vVsHf5WU$$0Pt`>JP&>3jX{ zxp;^@Tclno^}O+@^~m>#>+Wr4#t^La+7TSvaUyXY9IqYS2-?GMrlPHD$+tXt_h2@ztbylFC`RENBCq5KBvD=W5Xg`sLQp&8YhnWxM2aiMY% zb4%otU7^fc?lF=zzgni>lo9veq1P`-B0`o$ehE6Kl=L!?>(xj=t-d}MK8(FE8H{lK|B&%ob*I4t}S3gz&Ve+qxj@~1?WfKSQi%a%|< zdUO7y3fJV74NGmJyvS&f#mUQma?R0p@Weu{a;3&Iy50>d#K#cHDV2O0DURPq`{{V7)L)!rSc8(3SKO!P6Mc*2V_&0K}wqQ!K|U(fxk6ol6VWf zR^0KE@(ah}`6nB!9tTXa{AWc}n-rjz!6@RMTjw-)gSrH(b-DK^#D5Jn!DAsgga72R z`+r0(|4(YHwywC&g7cZEw_xe5RiMnGRcnDU9 z^Gi_zi!yT-A)AmfdL?RTj01g>z1VdwKEjW5VWkqtl8j`r&ov&8@K97|dmp!Z#`uI7 ziX~`e>#KDTUfq*;RW3wZ6UB_+Z6{m%MQi+#QTS(CZG85ahVf}a^k)|N+?1txZ!$F* zKb9nKK)03)CHu90O$jNI4Q0pr!XZIV8Panp0Pfj_sqC7CS%J(W1-|2&`S~J}2Q%f0 zJJ+m3qqB`V+CLA*bLs{LRq8iy9PXsEBZG4_NfEe0Cb9TJSS;L9bbzapnW}OKmE5 zf{kkjZvgz7Sor!sf1$hoP`>A5){D;1^{{HIJ4~qk?59d7fm>iIwXUvtsB6WmH0c>2&^No7fhRX|1Um*XhN~|!x5%0o+ zfze|Ak5bJ4M%MlhPn?#QC;Bq#m!Qm}&b%`&JPQ;W1Zg8{8e%9E6vs-a&d>1^&Jhrd&|lL5rS@J5)QsQuQ*{@w_;gRn+K@^BSkl}0d*{0zUO??6Z- zA*2SIs6#B05T3M`DULtE7H-)7_GOPpP;?6f>SXwLL)0BCRarYC=XzV(Irt83AsdlsC;c8L~V z-_dU&9}#kD`)cL40u!2#19xByQ+huU{Wt(0BWP+@ap5%n-W-W&@%*>-N|qp+6L;}2 zzinborlhMg&kCk&D!s#J*l;4e45uA@DCj#@x$#6BZHOWiRYl>x6{jdF3Tu!R#^R8u ztP&H?C&0Yaq?J$l4W4-qZT)mPqfX6K?H3kh4sCT<8+0ulRuQf^#b~o6S@qzYLXH6$ zJOlmAFV^i_G)y(0JKr91R)`gEdWtuFXjlcyrbQ3N&lJp5~Ggi2`Z?jWNy?Mu8c}iS|;> zKPfN5mYq3@iQFcX_zeyqNj(Dpyj{(C9By_^vCSf<=~F6L%fFW6E8+IIHjX_p`1P72 z-nJ+ioU{pOM2R;}zGC6Qh-^f|PH^$#&lHMdJdq3~+9UsH;Ve}9PC13Yym2?9TO87E zXaz|38Q?Sd8wA$bvhvg!;qudNDDskSaD6okc$b5-pRzTZa+6o&wb+yH7hN}3Ev-ri zxMIz8Mvkt%=s-@pn||LGLm7AB+44rPDSc%|*q_3#$x7WCYlur8Nwpz%Z#P;EC9TuaFP0K`qBaeNYLpf@wxSu~%j9aKZ$5BG zPDk!VRk@ecRw6P__d{I#S3Y`qMB-h7#Un`v^6l;9Y{c>OB^aH|whJ|krzkIwCD=vW zsfGOK;f_Z`!I6rk9P(6&nPzD|yMHiCdi_KSt35#+o0zt=LJg(!-t{}5188MEVp4-W==$}ENxl1x=WY0XwCO3eHDbF6)dec$W4B?!d zp6}_IvWu2!(3zc`hY`y!TTbw&e9XEXML|xf6I#tIS$s-6kC+Dzw?tkd`FJwY0?zLR z&ILb!o~Bcg^$aPUIFT7OHk=I-;>uZ2`?P=;;H=I}JFIXrRjDIwr6ICjm zSog%6m-%-M?Xto94BSxyoI$VSp=%Zu@%GrP{nEBE!#5$B+U?# zC2Bu6!B*e!PVCTNapwhkyx^DxF_h*4?>8s1HFE}H7=Aqxkr!`lYD1Lhl5UG@b-W{3 zkFTx97cxboGrVj(L1 zTxiYj0({2y?5&mDrP^^`4^KDrRvspz0r)vl@Li3VX)l?$*z7qO;}bG##O@j6l8mk> zPs<$lke!bF=XVTj;q{Xr#&a}m2kWU2`U~%A<5|x}4yawQ`l6!5v$uR}0K)iVZ#Ripeekit# zB_O~|Fi%{1Ao?q|AdF^=Z?Z9(}La8CxJto?e7>vH;rXS?F5%r7A3q^wvro`tN17yQu{2_}0}d|%5@ zx^3>dKC>5J553KUknX^Sd&2C`e?t`tH1xo*M7Bo8v_!Uv-&rmey=Z`#7x&qi%@cX2 zP|ag&E>jUQwVWyPou18;dI>J<`F%?%?t=^87rdh(?t^%E7XAnW;zqn+OmV$rV-|Bo>BI62X7-@AgAaeUMQsm;I3_x;IiUKRN%%GE+S%yWLngd z$POC46og`u9RFfLH!lQ6DP!SRLz!0qLCR_P)ez<$AsR*J#`SqLKDgD~AR(Bu=*E2D zYcYXQeGttzTw4|pDGYv;a|SS6{HPuk20zj>1z4#Z$F+i!LK>n`T+O=TPBV&U>yxsN z&aIUDQEFf?Zn%4k-735geYtwkJuh^!z z!K@P=5`;`iXgkz<(H!C1f`bGRT2ahHfLMikw)K=W>3FtEDL%Ni4k;4|t;irh#8zU^ z2ckO|s2+%?!i8InTVh_1l~My^BaX|u5=4`Z&k)tPX~df16hf&?WL8fBN&(K(u*2vE zIhO!63(r|rfHcUgD}^-3>?^x8@hmHeH1TXJb2Ra+D-AU9>?=1kN-QgpG)inM<1|XF zD-|?K>??5i2Eknrgpc4(4$4MwX9wvbv|=6B!01NYa)oTh-6Dn5NOb^> za%rwORwPqAaL?^i{(XiF@_i!bck}ZTKjgsQQa{3Dwr^&LVb-ndg%KaqfuCH*KaDCCuaOZ? zb(AeqFosO$q$exmxph-!duVCx;{XG(DpgyuB?C2@QAzWqmOPs4Sc=RDqiM?{#Wxg` z<}Szxb+F4Kk~RwBe7KP_zzEW1Ug&A5%fFL zru_?LW1#bdvxtAwQihcsw0_C~WfAUkk=e#ZMry50Say=83&+L^xJJpkHJY7qRR$*tVkWVh7w~-33Dp*8<-`r zI}6JF3-}~WIWtT%j$u>AL^J-Q=_qP!5d#54F83$%$@(9ib9k}b;l+%MDH!3!bI+hK zO_1!2Rk$pjs@+X$v?+bH8GzD+b0&T&7SPXrD05aIPhrKld!jH8dY4|aR*FQU92m{~ z*A^8*J6ro6E^Wh*GfhzlGVVQ>sb$(_Y)e8f11oE0#k1ET3PaPpoA+c}L(u2DCvI=# zPt;k#i5sr|3q9u;kt#pl5LC0DrK}>u6~>R26vfsMmWas{>gf;&E)zJ{k@zU>9h7R@ zXfn&C^X=qMuzX_$B8 zZESk|WU(PtTIW=n)us!)v(2r(CI+CI0-?dnI7bF1Bf|j09{T8rnr&Qj3w`IuXD(rs z5vr2YYkIs4eQF-`d=#e}hn7OEdI#AUX1{d5hxma}In$VM4U{6=bCz9LwlP$RnP}dh z1S>rZ87Vtw*3zjkXHC`86eCcP8H`j#&xq0dUIuqVeM1BIU-Zc$9z)_=FnDr2{3eM~ z&Rv$|c3rjZ9zg;dEXDe{X3J(skZd!4e(&nWD~}>8{#3n5ZDYAWkWIE+oz}&(tTu6E zp+xjvQ8=3t-gFF2C0e9Qjh0R4)X1&|*Iyy=o|XJYT&n6?rtcBjlC1r>nsPko3SA)a zvQT62gUy}rMrmY^tTO&6M_Q$UPUDgz9Y(7{Ln?-t=2kB?ii)o61Jx1z{w^o)h-Osl zK=WeAO)mCun=pFtv?cfZQY-46UdX}OaH35`>z<{pV}Pca+NNpiqN008%aCHo3t2Lq zz6=rd{n%8(v?JZUHy}Nip)^BE+rd0<@u%5UN1Vqw)F}U@KJL4bc%8?&dc24CYQ=&{ zgD2G=vla_#If=C0o1EP9TfLIpwEfZzgmne?xETfaMvwwXpdvn-)8@~6hK&()dR
Y!0>-9OnG(fv_TkMBgEL-=HdbYS0p?Y%sRIJDP1gLrW2T zSKXS@){{j=Z5L}o6UwG|i)cinT>3me(Q}I7HVsQpjJ2Pv79#`R*K!o7v0Ah%0Y}#dWc*CoM6ukA-*hsIL%vYoq_z1r zrcHsKrj><^IR}N>9Wf4`9XbtA!Bac65_a{dChE$tM&49^tVI`QZ7>;~R-VkYSNitG zrSZ~6<{z&sttt*Jm&6)|1Bs;3Lon|T6rzU6PH0o=6N}RVn{2|Q{)+YUF^8CAMUJa* zac^P7F@Zy(PW%wu!~!Q&Yhw+BS}f_Vv9 zG!aZo#JOwVA&-f7q+LZaDYnc3Fa}$WK;Mv!8E6?T2v_%%(Bwxb?tIa{aC8o|j|H5P za8xJH6$>@mV?dpGSskD7)z?&GQYSm`SK{!>n#*ZZaBgCwi7k=4M4KSGmT<4+Z+jLj zg%(;GQKE%(A{DbFW$nTt0EJlfqsS|)wk&bH(VEkwRHLLpp^{p8ML05|nYddd=+)N2 zwvN0|HvKo|@Mnc00?Faxn6~?gi+ftCLx6the_LjS5m^wqXP{hUT0bWlFdc{W5&oA} zBmnvb|JRdFMq~;3#h)Z;y5Kv+KT{m}HM7O3Ojl;SIMor^*>)eYPXh^D$&P_q#;e01 zsZNNy;pnqp*FrRC?vY?vK3zkGvg1$>FFU!=w-lU2l7j&*X{SUojOv6MvLa8eS1$#V zM2?s26W2LIOp5r29r}@F-=rV%Y3OvEzK!v!_Xh@d<_E;diJA1Phas!cP)g6L1f zgGjfF6owXgfG4?u_9W)L=CkU#rR3UPTv?R96&aw?wZwDdYWf;V(@!5aYNawF;)sX| zvz8#8+Pfp^LsawMf{uya;Pet_Y>SMttTOz$s>&MI%IofH?z|JK6-Mx@m?6V6I+uqY zHnYjAJj@W@vpFo;EF9gDROft1&je!C_@_C=QbD&wMc{Z1k6y||;-MhFdwRtuJ0(tM zwu|2aVrxFbywqjvS-DUD3aVEHjxNzts@FVVraRKz>~amfX_;71uVQPdburb{FzA~0 zu*auA2+;1;PkY(n6Bz5&`9u;6!s`awDLL9>KN$%+H=bwL=XEcqwprJPNiq;q3J6^1 zKsX&Jsu6GL@m|XCPr1leyOtctuUUbbis%QqpGw`Fkj`r+U8Z`hKnq5OKNYcElrkAH zyVA_xI*T@Jq}^?o{^mu?pEsU&6tN7q@Z!L%*nY`CQtzrB)d#VYN3%fa4}^?o@>-y< z7>Qom(PK>Yq=l{6N5#d#9r?}`} z7)0o|ZC+ZP^w@>&NP9KFo+X`HH_VsO=;krU^R@*YvaR|MuXMq?JeL?Dr&2lTkB!Fj zq{TsQf4qfQsZeOdm&qOBM5b0CXHaUVuS>~aN1i5V2N5RvOosO6UwLQIU|Jx|42I^+ zcSOvIHKg(!&7lQtO3iQej`cTb-rqA`)H0lxziyb?NXTX)dU-CuwoF7bvHK^!6I z&7wrqw$}3(;BD_Vlcb72RZc@a^ee?3x>XHowh=B>-O{yiieN1_X#`=rAYuN*l7Bq~D__`{mF8MbyXON^2IJ@hf57)zBo>ZTuG~Y6v1C`Fs;*b z?dM?_So&#=woOB?vnVj)!&G^C6gn}Y5hqWB%qfPpHR}pOnT81FhOg z+6W0T&p@sRB5$SSR%M(QgaF&UjeK>~EYuX?A62aP&i0gauFN`3(+Wo^@jW z1b5%OyBPMNGFCpi1FYEb1O{lan>3@G8U`?bg&mk0G|4bBMIsT5{I3JRc;IkvV`aualeS?b^* z#jib*=+)A96^>b~PKiN3JXb8|Ij-7r*nHPklV<_A3`{t0dGW1~FuyUKx^79SAMLIP!Z} zsN?Tk51zjd4R_rN2@-MF>O1aX`g_t0yPk}L`*1k$RbswoGIccvYTFIL->?gzeqgVX zRXwkjbHNajSMh(ZIvdabEa2QNbu|k+KmVm{F~9Gq^?>zKi@QtbB#?%)vq17E8pWV+ z!i3sU;`XJUFGmOI3^`a!?c2%%6s6)2+U5nCb1HUKpp4Q$=KS(FR6t-9#&l4EJVy(D z^ZrdDy4F&~7;v^dS;aI_x}Mu3IWM>pBw=038jH=~&RAyNw04jhlj}zJ>!z*!lm;2% zJZ6D4q)$n+Y*=M}nitZA&Qp=|nBMywdbA1b;n*T3cOMSN-ecZ`S0!^SDv-^X0vTe(q32<+EnoLpZEHdZN+w z&1SFI4vPS->w;POSlCV^HpGeGA4e&t0obOB$kY+Sh&y8kH}NvUJJFD7b*+X%VhTIe zlF`V_P`OC7m0!#p*k6%y4cs41pMLhF+dQ$CEO<^T16|gsD~Z~ zR6Uca2rfXy-W(;;yp8!_@=?1fQ%l5u!+$yS$B$r@+-N($tKDR_>&#!wxpH2~O*;O< zxV%bmLCojxB@pdQb8y*WxT5Hcn_*&@qk*u?_J;g*?`q*0$$i_gH{}pCQai4aF_hdS zQ+H&Fu^BI}EU7@%gPWVIV85IGovJ4c*@c=H?norLc6jJgv1qwKwS$N6-l=(@CfGW6#4legot*1JDDY^veS67>qA&T7lRH{+?OG4%Q? zM87IwI$&(w-<(-!z^9>#O?9r=w_vZ>*|H=|hK+^uWM4qw_F!lzw_YZ{zxy(;o5~Al zIZw^HU^@zLVxcY&=BGk3e{Hn|P%<56lYq*cxjvKwtRO#9`C(0rtG``r0cJW>FD!hM zg=W-l7=_KUA@PUdwc60BZ#`UzYztnf{QeCou5|GlTb*_gC38$Gb-010e@a*zs}qxd z<=XBH+(dFB5F*#Kh4;K$krCfUWCa3&6A48sM+bY|%ey4mRCumzNx{0vWDGi7-a>#s)`IM|+Ig`Y+t zZ);((GLy3qk?~cxAUxce+-^2Y(DrR7Z49LNYFBwF2{YC7NsG~KFH*_+)C+q_Y zK%0Z@JNikZ`UxuKIC>?9K{!{zwegq3_Qqg_c^*vA@`jr?;>Xc0V^TYCYpCma#8|^m z<#p+tzcVqOaeIGJ*5%=x(Fqeik96AoIElL}&PKad;>oJCi3J8#rwM1rt+u+Ev|=h0 z@PEIFkcGq1u0Ju}zN&TvamB%K;00Jg$hJ;}%Tvuy24t%eJ8cDAhlLo1P8cS_hJ9@p zqzQY|-j*s43{2H$97Yl^?bOw_cNI7^Lfh=C)JskOO_Hw`+#;~r?ZZdkP45F<}*)PrG(ob zv`R^bN@>p+kxHqz9JEU5w+OT|DYp#TGpk7faq_}HL3aQFLl8WmTN$*ZYCv%~tZG2^ zpig&bu4=$^h}pQ2ie^Z8xWx8>M_ZSA%SXE`?bVaQE$vmD!ae@D!EngP=2w%_CflJ1 zS_gFNgZKe@%!e?v{3YFLpjg!{%CipLJq6V*^1~k0E$YJ$RUwkY5LKanfLT=`vcqCk zA*wSky|`p*fUhd3%e@6B_CuK(NC79uh%r9~x{e)hxmu|r@`PQxC2r+Uy z<(5(VY8|bQ{IE;4m-_Hc)jsVOl2$myTX@fzb8g$lf5RO0LB29%ip})Bwy`Qbaqq?W6AHoQ1QR7VDDxgZnJYv zhDeX-Mgd4jC?u1j#b62q9Pma?vt%OlKR2mFLPH>-wWgybpe>JLqv24FNd6s92`HeY zof5D}2K8IS0#g$fWHjMsfzgBv{iNM1g%AWIz+DIeATSYvU>Gl`wZW49;D_r+0Sb!Ke3jY{92@cl5xg_ji23nRa%>z%^YQ6Tz@u z93#QfogFj5(p_9?QFdgJYSDJA?bkUW^d?+t(TxzlEyFuPe&hb`h<>!e(9cLvjk%+V z^asun|63cp3=k4RU<@b@AutIf zhY$b(O(6uPf#?td<5OO;fn{FP><|JIKo^&|bJdLqD~^ks7$r{*DXy=O7Rp!gn0_6T){2 z)0e!zP2h+hy!UA58@T_0Q8bva({&SApW}5ESfA5%7g&H}y+)ug@3UNBAFA?zC~pZ* zegzfkzH~ZGze?T@QI0e`v_lt0Xf(G$CozS{?_LIpKZXfXrPVVVn1wCw(9i zj)oy;xLtfKUa>=8qNdyYoTUdfp$qEh&ls6AGhFhUbj*el5-D=O%Au$;kr%A{eZ+Xp0V>T6 zjaQO@qyc$+a{L(j0l!EVPAB75`Bw%q|a%_Pp6ud zg@0q6L@bzmVCWPXO3OXiSY`V2GcI41VZO3AcYRXTEDDzh-V<9X{T}p&{%&<8;;=@| z68wmGF7gIlI`oGPld*d}aOL#Y3 z#DA!-=rP?DcA3-`sW|47q&Vr5s|b1vRh)iHRD@IQw5iWfM1Cx30iwD})@My4C<2;7 zy5{+aCNxA-xPy=H>0deLg2|WKW&~JJCNJa9ni~K1JXV z=ZQl$KVeN!+J_@$*MpG0OG7Jy6P?e^;+aemZpzr$?-!bKtNy4O?hoH#1H1PE;BP{z z9wnRbXs0iPZM4hIs!hheMc&bc%4{T%%>9Kvnc-7^h5yjd6x7$$hgw3qYD%>Cz$UCp z%+4L-LSE`mT-QXRG^f8g={MQGVMGP{Kt}#rD)5iLoB;ttv+8YzCIIf(WMd9d z$^ONvU^T8kyePrvTY!X5iLVjI>=-9JR!MS4dsKaMwANG%D9*JfkNQySEYsDG`9^c2 z)dRaGTUXvqxE%?zV@neKF=3zGBZ>DWSYhVf!;n|Jq9cw2N6RtP*#z=JQYmrqI1Mhd z%!LGVJQqAwvD-$(3KO+LB@TUfnpey2zA7cvhs3lpimOBF{8EZf=HucZA08J)I`IX1}{tc6Ud<*_-oo*c!DY?}*5s~QgXW{#E|MGWf6 z4x3MZLdlt-Sl4;J{2uPX4FkE?1zq5lo6*%pT+fFL^XS&eyg{z~+;>8s=--djwBN0- zg+B;eg)1@Xe;H73j@;z#Px$nwKm9|`BEy_RvKSFNBWu8*!Ili$No%6v(`luMP8T zynW7huID%N0Bos^WBY+fsJ~4&3DTtcFuaS`3g}@N{Xd9K)BhzUi0L35oI)#lnEWD@WZR^!)2;!lk?~?wY)=kQ2@-E z2!RuM^-tC}OGwOhu)B-9HJU?NA?c2Y#n(p^JAO*sm{3*eErX<+VEYY8z6HYNeVOQcB(v>e18#Yf9b=>N@2ln-nC& zhQ!Oi9?!m3x8#^<`8CbHIY|NS!F@X8+oI#b zI>0`$apJoBjSByn8Wk>oDf7cJdOE|ZYF}!~FL~&Ikfgq*#-r)SzH$mBRri&tPb434nY?O>x`*WLpGjpj<7e*&N~s6>sR!#H z2X(0j6(A?)B9k0jmAGUp5QzUH^{cSjw==1GPU=@yl3rEw`=#E5cJKTxF4A_ARJUk< zUs=xd-(9WxoIf>#p`$l05MTF%c3N<>W+i|WjfA{v{*wvsPCC4U&XIn{2C&MU3XT_{ zuyM!~su|U|OQnwkQrUouQi^~}>UiZO3wp*cG2<7@l0!Gy&!6A@W0U&2lD=|-`-+o< zzdbXQ-3ULAt2yJ>#oQjzE!o{vWw*qho)Wsbsp{jFzkN6*87g`hiU-3snkpUV9nI_i z?O~&@4nuEhEb;k%N=RGAph(BsGH5%@f_7X^BO8MAgVV5_;;N#$W6bdGQ1;e9);TiY zH#e!fElKY$^>z^jvs#{Y>C1Yzfy|baOz)i17J%ZaN>3~Pp9c|{7W>af%KJX%J9X;& zN9um{mcu)|>^}1BK$3vO7Ttly!>Y(xQ=cqJaH(k$j z!*;?`N;n7Y)1T3Irsp3r_L@og*U5dVNsJ|5#H!CM5;^GY<-^w|+n}0)xSWD`hx+HgDp%@(q;N-m5`jkRi&;SSH`?(FP=)F) zHL_ZgDJZM%E_rF$$cggBTbLI>L7j4N@qW-Cdn*d+aH@5%J=;$`05twBd*{3=q9{vI z8K(ctYU4DKr^mmIG2C=5VZ^0;;T6_KwTJKua}M()^$45w_*siWpZcDT@$M!2NmoL? zeVvToI+sW&>vr|LbkPxeilkZTGgD{3ZKv+>TXj>{-z|2%{8G83bIRYX=HC-bNhk8h zY0hlkIOt-|I*8cHu};s1-YcZ!ZJdbfRJ zW5wo*ZQHhO+o&WfwryK0wrwXXwrwXj|8v^DXP>uy+kL9ms#QHy8)MAbYxb}I`YQwJ ztA*(=A-6klqBlj7Jc3QpUw0L7LNSWiPRZMG`$-|Vm7TI}!}4l9DFmf>wN^u{Uuszp z)f`=sYMpexTKU;|Hlj`2zg%DZ3KDq!^Rdp{A`l`-@9U|J4&g$U;M99 zq^~NZo^iQ=>I6W>ou;|RRYQ!gaOwk{H|#PCj36Rym2^KKXVDNpA6mp|9En z!&%2!Lvk|v3$^;TYHlG(%j?+BJI=`mpq~e&$^W?n4*A|mOWnPWGc>Legmjma=;x8N zyo_ZgAHXJ?(LZK>rYCf2X*w_J-?K~IiLMPrWPpAN-X$gg!kN5k9x}UBCA(ETljj%A z-TqLHrBYg7T~=}`n36}t&yF;R;FrS0W^A9(u@b;S3Jx;E&CxUm2KpSZyCU(}KRLtJPV-~_)0Er$H7 z69G~_r-qUMLiQ^MkZw2PHs%(3VI%pL?Qtu}!iSmrsWAL)L#@^aX2Q;V-*cUQ&EE|G z{~Ps)`gThZjf!6yKPZE(dGL_Zq9B1{zucb{>hZ!h#WSmxB)LZb-d(u z0ioV3F85PW_wz$uG=(+-uaOzct_Se2L!Pk&QDJP>)I3U~N~HJMNa9g-h` z5q7E8K-JHy_ZZHk6i@g3?0I6@Db3;v0{3M0D=bcik`#(ok0|UEZG6PZ^gb^1AkTL$ zs4={S&t4fjb!F6+iDW}Gq!{((qCRF$kwR zxA=rZsY8!wyJ&5qpfymS2p(}+ z7}%!(m;MV>%6HHpWIyugYz_$)COjMp&s=;z)bJn7`DM({#pasoIFq-NESjv|7dU6{ zX6Kr8XXPX4w-|X^#4`#wf=@A&fsiQPDi;@dUYR{ET6AIMM&u-E2zG}=mr%o9bV0Kt z($}8N#~!IHjt;;sPC`SYoB>{LW(*z<{s|YeBY8@@H2A`?4^LP*B4hL%ho;!{{x$jk zor?*tx_4yxNl!8U>~pUFF?zxIf9EslMTCUyolO7t-j0r&lIs^h4W6NB9FP5>#p7tO zO$)Jy;9;thkr{0uE@UdD-aU2yJM*qW(*Mg&UbfOW(! zn3$CrMQ}}tZ!Dk2Y*)OtqtXLsr;n)Bf56gm61wwbUVj~05R z5B|bbvI`)JV4MG)S*kg|P2o+bOuVnhzEVy6|An|U04D(A(%h= zd-MKW_`Fdfnl;v_YD35Pm1VIat*xhHtKhY^m2F;>?v(9u>ut)Q%(?wWFr+eyhF$0g zm73Al8JT8JY> z$j;P--r3OD$<)Ng(8$xt($2+#-oe7q)P&yI($>Mo)Y!(*&YAwd)Ei11n>kP&M-m=b9eHwUNiE^X(55jO)pjJ zOHzv_HES(VaBC2xV05j&icb-e6#XM;0OBzDJ!Kfa>K$gI zH%;(d*gd`t`X_>4v5=-bs3KTOdx!T%PYy`tv0I_*e?&sux_0wb%#dGk(-KuYbp=fPDDyfH3ywOXsq8%dZ~^|LWFjY5@}1F+S{d} z$}w1o&iNxU4?&rn*iTf@ePziKn2IBf$jBw031eNi4nAg@P(#F1YAVk`LOBXLrRi=X zC9G1Y!^G8IxkN-g>ru{W7trZyt>M=~22JS<+1egrLql)L+T|MdLuDHCHe^xDD*A(e zxgWw9(2&JPTF#m&w-zE_dl>02mu6pBALo_x|-9pNMfjP*w250pQ1`ihAjg4NK6KVi@D z`mS0Q)?clj(@@);2-Oo}wT>$L6Qw$EeOAi5!A7POOqr|N3hKQEe6qK1M(|| zywpqUQH^Iw+b@K@6w4@U+YnoWz6+oFXNb1O+Eb(4_#5JV%Ab4RAyBXPCL zMhF>Nv_-;gNCdm1)R0z{aviuWmEDL}z+ex@O}#vsLURlMjI*#5%DBX-W9LADv)_&ZR_J!<3XI^gx&;f^GsE4*TzB zJAzrTBs?bH{Jqqd)^>v$s1)Vq|&krTe_RN>Z*TN=5(yLwHexq z?~8Q6M^8ns>Y|ZNSG)lECEb#v`3>uve5ej>i!7SIX++=%Gk37I7+5q&+)IgRyl{W@ z#W2MDRR>GT$w)EVU_uAU=xx5UqSuC2uFqdZUA^4mpZMmto|Ijg|Cvs>Po|{KTCr`g z2zC~`p1#f8O{yy%h>5G=)=IzZu{`s3?bzJuN(;lTq-s%~l^9IWEm`0ej4T{=MZvq= z8h?iqteti4UjM0;pKT#GbLt6#TNX=*iZ`}d9wIX3v?W{*d;Ibxj#qF_x8^vu%QI4( zKUuNO-Xg;o!9LVyDp5)Q+Dy58d<#zH>{rb@JxyOP=wp*?5S2fnJ0F*B$;%Q;8yK0$ zm%dB)nhTacd4KR2|FX|?u{@wM8RH<^QF|G~8~1N##s?KSjrD|k%?!vGW>v6Jrq`5}w0b4>Ba7%-0rlzCvD z8SWw7OI~#jX3OJ?jSD7>-hR#LE>* z4xG(lj7sM*g_5#ZhMq*{ssUL1oLvvEBrg9pVG4plEB`VF6`6f9+nG|JSOO8x>8nT1 zj*-z@JD$Mf6D-D@J`gY+0yaacTv)<=uOuTPwH=5Md!#`1F(6gNk`Qd^7iAmDN4430 zrmr{6n1!s|zG#lf%zp*y?O!!UBvNycZV+k(i!?5Ii46@`Hq_=1&Rp2Kc7TI#gWxFc zh=}jt3_YxMxAA{`kxn0F668S=aQW=P2jers=vag$;%!HaX_H7Y-07{6={D7;MFla} zRX{~XbXSAAmIKjP0|PI!oTIOSqlj6({Z+d{?tc4V5b10~)U2@OdyL=~Ygh<+0DLIl1^N*T|1v3l{A;Rlyz3`LxDyxNzmX>I*7jUGe8LydvH`(> z9(Li9C}?)65@z9&1@RIn&r6bfdl;#QQPx{cuV}#4{@Q>}S8gi-;TPoCG0~pifz|7S z9!{?5%IL9U4e!vB@SsoHODz3xlg*E zf`fD7JBMXQLkEf)x%q$bq4|Te@xfs~En)2EeECM$_`!{8sRgWMLxd`G`>7CLqh`+( z=?HcUhy9w4oHUaL4sDHmLo2V5Z@qQ=wh!yGyaOimoS+@d+q}nMj+;$e8;je*(tl!! zv8qAmlFz?~UjG}P??38|-bQjq3N8D{txM8w5S8{o>MsxtH^0HHy(_MX|rBgnNF*~g-1ayTNd?+D>45juv$I^mN0 z4~u?6nqic0CVD{zNp*+^-wS@d$hQ?abVcrZTU6Y9}{NS7LvrlcXrg|5!Vo zGti8zi`=`-ZIETShaF`Dcfz(r&fx*Gxl{ea>E+uX-M<1-*{ImTpWCi9=sDT0-r)nk zMj8MG?!>r8;ohd-2Zcd^U_b~3c_HK@+4luU1YMEX!*_^4)iC^KTgZ+;@g!$?@-XaJ@^OaQ7ss~%D;n?~ZXvwi}7bwFNo zr8})au0nmKXaKRk1sFc+B0h4t7XV-PANr$x>6iL|M3@|;?NU^p%ALl5+R>LExj6RH z4yHe8k;ss57ul=}OImF~GZ@}%(MhW^qQ{OQ2^AFWp@XQc_?ynK>Ua7-bXe8mQpy8+ zcI1>GA#=_WMZrWo5WF& z(HDnYsgq{=OYp-jt2@f3tPowBt-VN+!rWYj9~fpNgOF1Ut!%x@eAR#O_EZCl;MV;y zW$2MtC4BmIy@ZY|OQ5w>Voca@)@|`o;#O`Uk8-J#j-MpT`R=A3iN(P!%huU!3L!+l zV;gMSRSzBKTlX~09h3!IbrJ0!$75v2*5at(f0tMbF|p$^2iXsMslCTD6r5HD$w8d7 z?$LDL5n3#wjHN9VX{%%wUKd^2N^Wk5g3odM9zZ6n_of}Onu#hua#LO*UQA5AF!}hU zuNOo(D6s5)wp)Zb#lxHhEOvCxT?kFR>%}{R%=^hl#{Hx-5wD!Bt13pbDhPoAN2$~R zdJ`OtiHOiq0U|3l4|hIMxR-`>>Oh5|t;(_wfo46MSAZl-bv9&?Y@t>tILxjBK-pGO zj7+Ag8G$!pwQ)&uzbL>u)F!Upy|ZF&*JU>aXb-vH=!T35#3hee&=h3CQ4saaZnZO@ zD&69CkKE`|K+HJ*O89GmmDo;-56@hkqG6_#i)6PVLu+$tCYzPG*i2$+OV{BQlF}F@ zwpmToTo!?GQxKJ^5_DT1ajrm4eE=ttB=q7h_Nn0RB#0ByjKiAv8>{`T?Vj zCCyr5nI<>|bN8}?jr0N=7^UW3w72pS9kIRV&g5IWhv*^NKk9!=XE-(s6K@(xzF|x2 z7IC8?reQ0rENk2lmd_t?Bv184Q*cWELQOObPi=9gHXjAKa7(vuPxTe!Cy|zB=wC>Y z7V?d&SNxW;w6wyq0+-}!_8vW5SyNt#MRPRyRM~hVkM`Z)W7=7=$Ny3rwW9hV&%nI3 z53D#EFgGR0O<4}mn3a^aG6<9ET&#!U4i`IBtZ`w$mbbnE2OoXK(70#*Xs&RL)Wtf^ z&aFR_5?{#5x3#VxQ8kir@`PRtp8zOT6qxr+!$O!~8#^`_vi)1Re{fcj^A0TQ)-o@} zH`htYHWn7s)g<}5lw+$|2WK83sL7)dhb($};8vm8g--5BqxmRY(Qn>W%49bVbXv87 z0&Qh}%88QuL@I&lRbggwmM=Odl3a#{^p5n`-=F;iI}fzkx~{0(ig}89EAF#^!hj~s zr1_uAiKBFwS6=Bcr51@jPMT0z(Z-=uzgAm| z_4;Q3pvzz7QqQv7)C$XQSQK5?%F0b&7Kfezw3gs*zs})?X8X+1r}Xfk@}Bs2QYPK6 z@n7)Q2w@zIVr_^WcXC8!zU-jLz4c z7h^MysBT%+erke}3v{rQH^Wx^WnU1T%-FBA11K3eSllMy>OA`4RiCKubRYZ#Da$XL z>6v^HtWVV#iV?=3S%2!k7|yl{0UOGpW35Q+bBhSxjdNs{xzZbCUm*j}R5gkDwh41w z=@S5n_N&h5E+D38gGjkGHH^nyC1^+@*lkzAa+Iz#ej{r9P-x3C6dMBCB18;FU#y-~ z2U|)XO~V1|f~)WYK5(lH$VG-1@pmfd(HT;_OkDxii{O*d1biJg~ z#inZyrI?2qIFB4yO>Z&R;V+-I+VCx40KY9AR6Gn|o7+!vip-GusDt}_(&+LV5t*GF zind^F$rz`ehGX69{`FnfNW|pAgwY?C63>G)I*~;wKKO7#>kEb`5wXDBV`<^orl^%L z+mV7wnQV}SJ}f<;_3SZhRE__J1$oWUn>+*FO~n_v0W+)R_pg8K&zSGOGls$&Kzj`0 zD}_DpB%3ysJP~TrXs>tBL#*Kndetl3I?&+x);WS9nCb_ik<-?W0W_~;;*x!)7zk-5 z{gX@2q-+XgY)>q9z-apyt^IezEI&w*E4fGRY9e1mG$WSRlJCjm1*(_5GCrtNOfvj9 z3zA%2pMxBhE+KJ!Yz(jQUe2jL71>?!h)-%$Hu9Q?{5c`<^WdNtr&n?hz@h1}n?=(u zA$LVijyO9FIW{JoJ6s0Jkqj4f02v( zG24YdQdCY8wT%zL7;^Ez?#K(#JeKj<+jHTmPKZGM*c<6mVz)+Ozh-pu8J&E)rIhjB zu7z=hD=jt5ueMl;AmymQ*Nq@WQo>jsxaNljrpNr(_c1Vc&?#NBOs>9)Z(voq6?LWn zyL4eOmMot;t(#MavZ)r$P{?)-EPfdu#m+_MUvx_=SyqAXt%SuxhQLK~n+1h*=Ijn@ z{3WK%4odTej5a_g-CQ3tU}LzE zHoAt^$R+Y~=d^`t{FV3DOhwDre-o(xq3oJd`*Cc80RjE{5viR2V}UAcZ)-SF+fqNAt{XY{Q^g0O+ie!Q;*BD+bB z!Jj;74VvIW*olZ~aZnA7vA(-rzw2|wQ-vuG{f#e=^-I}y^x=!^m1Sh>-IEGe3M=i=+N^?X$r5XYABe}auU2U7-#_t=XOa4Bgtfps~?UCF7e zqFdXdb*>xD)~GQ_AL1_g=`+|hW6^K}_%Cp-ATV`XdOj)5>FC_!vTIByrOJ9!?sHcj z7TBW6uFOm(sj2^9vnzCI*7Z^}c{+Ap{4awM!QS?toe`(R%|f1nW%vw=gw*!ttJ=pL zY7WqtB9oKR$VY=Z(ldvo`Wy!sqN>tGM;>gA&TWwt4Al7;s*^PvaFOR=-EQc^GH+9L zu@h5N>lw`1>hO5_kuhz;&Q=jAqy$8D_;0Ax6cW6kh)=Emwto!PPxvc4z0#azR93*z z{%c(M1r67UP1a;vv!m6fHdNudQB1i=m|W>Yp6P`;=6geLxIuY4ap#si@@AP64`K|_NjL0sI&b^`a;vc(fc>@nt#?rQ>0g#Y| zNGVDzDmy8Q)j>CjWPB!$9t1HDBNmF+{1bxImt!%n_y}ODJM86dEeAdhQ`xMy*><IDMxJUs`VILVGe}FjkJ%X3V9it1$~Vykd5Jl!d248!fn)XC-Dn<@n^Ti zJWxG`aam}E4D~c$jKVZaJ72-KyEa9j|t;587lP-iB5HLZIe!)03BNX(ZHdp)_fz?x2$W7G2Lc~U%KL(b9tnfat) zJKva2SM>V!8mlatb2$8W#SMI6;EM1D9&w6c0apP-6v`YJqbzdxpl3w+dmX_@JXsC2 zSL_@eao-M@9M$E_oVAc?nhId;L=~mw=x3ra9Q(M(5_`@;Y@jHl;TQI_sARHzUffyB zLrQ94Dt zo#!1%bfc`j+=3}hK5pTHM3v{x0*^Glu8S~Ok8DRV;Rq%p7-f&&G~;w4UxQ&G?DSNV zAPW`MbYK4s9QPj+xTV4RK>5cU^Zqe`nf~Wj%^z!qGqGI;b@o9 zqVoU>C1!;zB{B7Z8zFA2J0Dn0l-IInEbIu(=2siJP3*+1RotfWtcsyyW|oh7`yA20 z`#cZS{Xxn)TzSa#uL+xlJJHXftRw4mgxagLw z@_K=LB+;wm%itQtUj8D7%n1bhgOw(%Qb8#r$gk9nj_4B_;70O-OkT?hX+Yh@xD~y_ z7)4^ODz8CUoIwrI59vay3!B)l&2FRrQiqhjx>j{-Qnx z_1$~U`06wRdLk(o--Igmur3_$Ny^j#fC63N*9Rpu`!wgcTHDBY?rWN=DBI* z@Y7Ivj~`g*Yqy)08{)h%Q{B0;6VxY3Q2N1=uwJxEPE8lL_b{6hi;1R4OX3O-78*VpiI>J+U?}6?9&QvR3`|#fr!+I<_|X8F4K29OiWZ z(8WSAq94Ppf=mi+1~8?S{+0~{QN7~{1COwiEER8dyyvI zRG#Oty|q2|l6yixybOwDC|vG(9L!w^!bzvKHsJ|{rz*mN4v~d6N|mXJ&vU>HHn`(P(lv|=x5)EUy`cd-EA)X7i^*?N~C6Z z@tgybC29KIvA9wEq7a$9=pj1U^}I*n5KAi?a>H_S(?vaUW`9QkCiLPkPX8S3u87E1 zwxE3lCkVE(wXs?S7nYrbM)cfG&65a8idBuBErNFR(wKy_^`cc+i1FB&s#@cc)TA+$ zm5sG!wR|wnlZ{jmj(~)wV#!?7ap-e!C1X>0`|`=rOpZhaww8#}<0t~uXf#I zZTND}WOGJG9&L$Z6gK(FK^903L26I&WrMr6{M+&GMD z#co!#5IS-c-%=&$V1S~GGTn*b=MuP^CAY#sy2h1cPcrcSY(Gh}ZIDKq1}zjdP!Z6A z6g#kPF|Dc}mJryOqazKvd~mQF(|~5>N`u&+;jZ*d_7$21%c@bi;Y{QBE?YHOV>h|w zhQCVdo|{*jO6^thvQBQmCDrsDYsGdb;;!d#J6V| zu2(Q51m4Y@NTQmtO4Cxr=h`@Hdz6wH_<(-C(mf@su?H7gCCy#8frk~}UQ%rPUsrAD zgf)sgc|bY=lHMeh2U#hZtD4ABw-6+=#F-LriFx2>Wu%vKyA0D^?zFY>mI0`OO%l+um(>6aWUZj}I_z1jMG%d$LTWPL| znTbPlPABuLdK?vo?mv&`fyE_>y%9MwU$?At# zRNE>cce^^46(EP^*mIdn3C&?Ix#cj)mKA~(P;(plt(aDS%R|cYOJK?jOR%S}(SLP3$McI`z5v6*8=%vaG7Cycs3ee6?v0?Oanu z7$>62vdRmL@@R%pzR`oM(<-I+-cU;wj%0YhZ!+`E3JzG7Xwp4HGNL6DZ$8t7OEL!8xXec^m5+i-FZf1O?oGx3O+a-$`{}|ph_I)Mi8-Z^GH=}2u4F2^={yrEktbp0 z=#``){iiRDiLPwQw8|5*O+qZJo2S@vB);`Z)gTPdxmB{N!p~_|O&-&KaiMY6g^lX`y%q*MBWF@q&5=fdytQNHg>@%$@*U0*9 zA(L_^(dGv&OSq&jCAeE7>us#F5Bd!`d#6;)D_2Xn#50_iJj>FaIicrNxQ8AL4~?;} zVW5f{9E>^8QZ|aYxvDd*QiaY4&N5m>_~Qb+c{KFv(kld6&0gDmJOfEAsH891R1(WG zR7oZzc-v-Gjwezs6c^ypSXCn<(s}fU=59cgn<~11RFp|c&=cm1iY%4iWnBF|?0nk< z{MyQ&*6odiJDVzD;a%g)=~5IMc+f5XF&7IeL3Ha9XS|MIKIq4|XkU>;ISKm!;s2pb zg-M(!YSYO;lyVN{GN_dDMN867p)o=uSu*m`)sfnmQ}FLWvocN+FV;i@UP`&=Y& z4Vd}Yp~3@Sx=O=5X13PbSiR!okC8;}8NFQ7T;fZI-2(KQCnigi4l^PWo^Ak`m&sbI z*^;_wpcihS;`H{=b6YGvMkiKfXDO}h5C7Z->5%u?D(cpIP*GVvVRp6ZO120mNpupL zvbneewoY)2={6}6fb^LwAMW~{?!7Ve%?Mjc7h){_bl(2*S<_grOU%EqW;KNUNNE9t z7O5;Y%J@s?Qro4=-L`}En^+xx<#_@8P3sWMeM!1LZ=o&n>0EVMdfN2y#+|pEYX>QmT^u5#3IWYah?z+}Cq2ql0Njg_^H zK11nt>aVAfC5PpsW7K5TZjEgc@gn8L(6aQ}Wyjsld$vE*xj-$4dP2Oue}8l|2P$yI z=CSI^oSnFS%hHI*`&Hd@ld+dr4C5#4z+K9+N(TZjr-bkkdRx~xp}XYr*sSX$YsSD> z)3Wbsc$%-tZym(QpkjG#nTd^Mq`)O@?{%6#i=AJ?&MU_Vg0{bf^)G7IY1dQUM`8fK zV8s)?QmywfirhWJcy$&~BgtvJB^(-#wW#BYTb=7vlXwe|_~2bl(a3qOy#7`b{t~x& zPVy`RUa-k}V>s^?^R=ygD0z z1f1AMlNZS4xYW%RYH$`kV*-F8n=R?J%zA8E2!!Of%NJpf5T@$OKLn$HrmffUk%!aty-2G=zMvqohtdbN9esc_efF^G5S{)R7)?(dF{b>bGG+G z_9mDle@WnwujWm+pF&BfLx$~ZkASa>r z*j3D@hza4Mxln1M<8+rSy1kx@tRSavw$x4^ut9LP;VzW$m;KB-zaA9>vu+1Mhq$Fb|B-LRr1#ZNN=NdWi+y1kC`)_8Pe%ekLo z9JjIj*rPp&+@HSzqO)1U3)x8|ueA|LI>bl|U3al5Hzqvy0pel&u`vbjvv0Q~R7CXA zd9j7&Yl$bmZ(up#4`Xot6lPwxJWY`*%h$0{cuh5o3Asb3c#7e~CfFd&SBG@(p|-0;uw4=0OpT%>_h? zHkL$RvrWJ{#!AcB7G=Q&F5km=i_po?Xbs#;=Aub zFfWS?@%j)PZrj0XgEWXVN+R5pn$SB3Q-b)!Lz`wZPX)c8ocJy%Ok-X0$faJxwu`eN zeDL3RgkrhgRLq$8&LSwqKrl*BKAx+*0LgV3re$xa)ZbU1||hGv(0x;49KIqbEyIgxh*Hlye*4RSXFO)c$X!Okw9G` zdBS!uD!G`5c#to`?1tB?Z?4u2{;XTVyp=BKYW*QhJD5`uIZb7Ryf~p=Bb$lg33$VZaKK+T{L0}Cke`6!LLk3dXx7 zhrJ@Xzi@+!T*t`P2b`&g`O47=!@SEmunWYifKp&@RUQHw(k&W_XK?%Lov5$nlsg7Y zHjPFqDH@CzJ6~Ak!bp25v-nbAd(mci_57rR0rYh1c@!a(>CIQnGf<@u;sl{&#(Yul zvh{dpXN7`aVcFk-t0|G}>4tK?Q9mevA1pXk7lAv?Hx3$y!nik6zgMLA^r}zUg`QXH zaMn=C7AlF{9v*zWy@d`8vwlbE7zpyy-sMU&E#JL z1@dKb3lnx#$$+f+3H#RGrr3cKc!qp96z>C59$T^=;Kc3uYuwPbQAHcnhjc2e&Wuxp z7Ye6a%lcYfmTGmFBg3STA(cT=mHyJ!2VBvfmFB5|cY^wdMsYp2(j8=O@bCDq1E@R8 z*RI%Qatx()-3bwudQ{NT=0usj zCw#aLawLm+B1`r;GmlMr>lWj+;ap38w>*4R96rqgs{Nx8e~W@9-YsB1P$11qb)L4a zqIet?C!d6*TU;jDaRr_dsunP3?mGNF_S($wD2{MO<#hQ7u81oPS}7i6qNocPzL8SU z5q0)(6$@u{iBRi5r?^$%mwMp%JL$FRUqY-jGFrRjd5%ZIxn8~S zaRhecHs6UbF16S>hDHzmz#i=leut7LY!I5rI}8DO4{nIQ7!oqitlK#237u8W&1>TN zaNh>CaQ_R9TUU{hO}Kl|u@=NeFk^1wZ@`Y2@vJC8P3N$rHuivPkD`|SZzc^}hRtjR z4CF_2yrKl$Hd55I!k*WPb_+*HDANs^uqv_6&=3dM?0!b_eW4e$XO-{WPRo08Ied6NlpT5I0?HBOhI zv0JWiZg2`#wSKA?5F*;5_i=PWB>5}gymug(Rq!P}7Tks=HSSUpmG%&qoG52fT~88( zCu5VtlkF8-DQ)pEuVmPREwcvQX#O5JRnBo{H+YSIu1nAWh_*+u*74^5j5t%`b1sJh zEtB_$iW?Qwq4EFG26Ynp`bn6B&*VLqap7gmME?q#!Mw04^+$U~C@uk02IA#62h6jR;IS<^`O*%ySOI z(uIIY7Qjfc@JXtwS*fZ$R*tvikGtoOKj)1<=Z_=ijYqbr?h3Je!>ba$5Yjo#wyz@r z)Y^a55p~qwusQ+%eba1(P0|QdLD&_>>k9e?e|JjFi_HZqBJ@Qu*$&w5k{$YB_xRkl z7N?U08-2kbEa0+mRq{dS*c2IZV&kD)VIE zLdLPeacU~@)26uy$;PQUtO`dJ*f}m9a@R3y3l%$7QxEGw6YC76EjPqI6Yj#XbtJb| zAdUCX(*Cxt^Le@HlF}{iD2GaCqB@}4d3@`!D1r=CT7X}#dF6K2Gu98=ybT~2qqL`P z*S-c-3P5RJcL=z}C$2qaFh$F;s-j+ybsLqg#pPXxzmrI&7nB3q+cipI+{^4+ zlI4alaxWkxXSTsW)8>>+5URNFWXrpw%5vGUaKF$@!9h%4m+-<^fw{6*j8fi-muxRQ z+tF^K8gpILH(!oWTUKd_HY{4D(oY>>Re61Qpo67_FGG}@XWv;m65?At@(6l!Q`V7< zo{(}=s^WNMtRaj$wgS9QD6Iy*bsMjtbZ7lrKJk>^8o5uF^T%X@%caV&O*f+^P2+42 zTumw-RSMYVEmY-~e#W5`v@J{4#GDsn;9}BM`pj=^E*Xta1ij#}C&6q|`;nU=h7#^8 z;B$;`HukagHSMBp1~VWxkM2Q6S`9~96Ca8XgCQ-`oFUglFT( zL7GtX=60A4NyvvdOK8A5f&nGAQmwI&BfkpRS(Xr?%Jd`VOA_faGa-d_wM~w)9SDw1jDnB^KJEuaUlzZ`5*^C z*hjp71=_4UIos*f(|VhfD@YmU40nH|d4{pX zQ~W}OH;=|O$6c)#mCbO#nb@T=JN#%VU&?x^-B-_^^2$IdA53mLFrVvhz!}-g;?zyK z_KtE(f2m!d{3b#!7gTOLD4#1i;Ee8Nar36!`+K`|gRd!Nh4ZgRsIs^X)NYVEj?;!f z?vov-L@5W(Gt}mqWDBP{B%WrV|N5oTQQpN79xn!5m)+AMXi_Nx=p8{(oYy~92%FK1 zJ_vI}TpoDAs8gk#L&g`XL$O*61KMXDB{0-m))FVoCU0KLXlxgiiRAaAcMQ(fxuDL zltAGTO6bo*Cp=9Fbgm}75J~-t{ql0-v6Z#TbE&_Om4+J3LxToYk~vPz+|136J)YE8WJ5G?2wOd!-HWtHCoe#N;v@`GtMs{`dY0?fzhut z=+S!Pd-ZebQLSkMs(|DnR@fEVMKGr(3b^9ZPYP5H9lsMk$Ly{B-c?3=n5gPOC0m#S z$gf`bbva>bewzi$YCAVm<6=67?t{?oZsNZxSm_qur=KZpB?2YrO+~%=?F8f8w{ICL zl~-DX@V*Caf(xqMtBBE9o44K|>gV~3ax;%fHsDulWDTb=3zx0+hYuf*c7(ip54f9( z^R|y!OCsCX%{sRK8sZuwRs&sz6ePyr{ZF&0FzY&Z$FBYoL1M2x;%~ZjKtpbU;H-uj z9gbyo@2YGhepX4E>|>hQcE%R6l{gL#!^LQ|8X9A<(*kVwaR3uP@dwL&^lsxVhIvy` z*Q)+I-qlFZ&A2t8&0*V(I)|0vXAPp;F552rcR^_?|M?kEv!0~XG<0CWmb?6hyERy)Sk*>{c2X?X5IB9AxgA%#>MX^@ z8e@4mIbMn{mY*Xj#@OD6HxY0MF501Nl|9r#ra@@r+#n-d)EhQ^(wiTs$9ZOm7LQ66B zp^c3bmL??k$t`%nGzcH~wX*YRe&U@TW1{R3KjQ9F^1Q%PKmHIFUc>pEdiI71(mr6H zVrLu({r<)Z!%Zq2mQr9o=@Gp0!E^*f1m>YG^**x@nNVm4v6A8)!`KJ|6D)WI6v-!S zP=4W<&GnxaH6laH-A8_hF&=f|qI+gsgDJ_vCa1cQ3xU3xBHG zvwy1EdH%;oR@vnzy=t!fpVX?QndSdGN2cznqw-VHjt|G2x=Z8+b2ezO82}0@6DS71 z7XUg~J|NI%fYNlp$g^{rNy=;=6+TDP6lvR7BE42rExEwPq6^(Dk+@v4YBNu|InS!Q zz`FVT6;Jkgl?f?^r9DrOb)W5h-FBSgJ>B-a>ACm%{u5IT_w$^K_R)KBs5V*gR1En{ z(7o;hrr&U?f`gRibPL2_-y=h`OX00e%?h+-5|Qb_kV`zl;3IX%?5FY?$qD0^GAdN zDC`J>JVQmn05o>={9~a2Dm%s?1Q;(tz2xA-U{@%Z7#u`5l>YLtGEiBlX{awzy`LaI z-%{Ig1}O#Oqrb`P#Q?)c_R!ct@)rlkN8zB|d@bnRpI;~Ec}WNuZ+?ndo+w;@^Iq#H ztloY4x=C5a2ba<_or{yUat(6q2WX!ik$!dw00)&P0pcF|?ARf>EsrVnA;DXFnn;JY?&LsoiOt)t#OG~*dLWK6Tkxt{{}Y>2~NN%b1| z*yZF_q#bVBZD2Ej9K$@yp*?ixti4Emt0DgkF-KmRLS^~Sv|21w z@G!+2rm6X-p0%5GSWz*01lGT5(0;IODvjbik?=z!(<9sS3~FzAJGH$K;4F(__*muG zkyp_3S%~xsh9?>+Jaof?(dp-KV+J~2;^MURxBFRYSuN_{HJ^vbg}k;^ez=P#u3&Va z>-DvF(s>Q@I&3{;8DW7FeEI?$^3# z{?uR&rgLZJfH$t^nOl?p%}lp#veTb-b9o1wXT8NH?VmHLahS*#pHSA#o)+lMpJ^Sz&ZKVa9vF}Bug!)kl!cgct-cYEkj26r3A zQK!eZ=$I%URi(H-oH;k7wM&!pE^EmC@<^V9=q4HK8+_?%=W)3Ao}AV2SArD&dY{yl z!kHsSPZmC-iInk9V3yE67pD3-Dx{)&oZ^P-sOES$TUAyytT~xEIgg}av_;6XkhITH z>_(l{crtORAJ+obCpr2-9`?QTJdd8f4vogFbQDjm5I4QnnKYZHCNcYswoxPpHX%{0 zBg`r8SXJCDy@t^|Wu$(uOdT0%Otbw(YMMlZD1YOe>Dwj(@3Sn8IkJ zC#P}yJKL15>>WyrpVp81vykc2dB<@vMrB7c6CR}pC4IPrB}$QW&dF_Qk?DIF&2#Z4 zeMq_xd4ot^vv9rCktWRk7FD6=_b0gOhP%|9a?-*m6<F*MLw9J`=bZXN)Am#1ANlxZCeMF6F2`@G^tM)v|Kf|?b^Kdr^Y6~)Tg&F#zF3K+6C3*3eTm6C*>{czDMfUuc?z+>)OxBbn<}yWDk%;fQ75Uxxva)A`yL;)L z!iV|+N_#SJXRH6YH6%&4or)!?OQ!!ylTMHf^Rb_>E~CVN!`T=Hhs?Y*mJ3#%XIvhP zWRqV$*Dj$xpGWS-qIk+VxS~(w#ay0RX4=`b4wE+)1k zCGnX_ss~Aacs8+iKxoYspna0<7f zIA5Nm_t^rKeK7h^k=RX3=e-;S6X4(`r<8mXrZat>O8XfGEy$-1Ic53RGoSwQNr|RS zqWEd0um1y@HpxAhyB{jIk?!3`B{`!`%I|vjd1W+B9(rOYsgYE1ZRLY<4R(=1i==#| zryd`-k?*~jz;^$qm~s!!oftjP81%%4wCtLqs$pPQ#W_0Zhne5A^*ND0BLiJ}8=yk8uU3@TMQ zy6M&^2qLRvt!607xz245?Y281?U(;dLYnJ?k7m~~KIV&u0uN7U2}(0oJ)E$o|9E2Z z49N+ZNWl>86l?AwW~r>3ZTj$MFVkx^I~jX=5yEz#wM(pzNQ`=V*}fD?jLNl9ul3Tt zY048HbMG1#-%zdB3$dx1#E9pgW0KUJ6JLG~RYusx@%dXC%K7YVyHC+KmgC2_n<%z0 z3lYR|>KKKT2dACHw^1I3;Hg?MX&uJxQPkqi*QG?&DNweu!X&isk45uE@e-X-2Io*9 z;v4V!ReXOiWN*@VNypQ6ALopC{yZ~NXlLVoQIqlb?qnS0R99q}RR&x$YRXypbMdiQ z;p&qNLLMk({`j5`rc_5MIfCQP3!+@6pVpj~v@^+d@U}0Y$F%z&2$Mc;q$%Yw&{Av` zHC>1(zuhy-<^5zqe^P;7hf{sn=U&ywaK+;GlbNIKy@jWyr^ikim1h5w9h6{_>zzxy zMgGv`i0q#(v}*nfV3)Vkw}%m~XYOiUTrehjW53YqLSoA6Xfizdp@?GCuuarHzP(8= zfLeI8c*k(V9hWJ!2V*iHo7xlioRFi^X-so<*)M&@@ydB@TV*Zd(Kw+|bR(~eN=7E@ z$tcl;J%hI)q`qL$C%gF-s)ZyK9&QygJvcEVV<^+It@EIKzcF2P?qp%bK5aMct#RC1p$zU- zXl1TveHqtNY>b6o&Bw)ymoO#pMQJehW^#Trno1s{r++QrD|y54j<6or=g?F|CfA-w zrel|mQJ1~V?PfZCr~9a2r+>h9TZ4*?<>8^HeG_RbeL=vmsGnqXJrO0y-=cVTF z-V+X^maVO4^7gxVeumLIuZNyGzlV=HzuSdc!*b?Qu~zEMprAnU2@Pt8p2s2Ph#67u zw6nKzo3BXONq zK`F^3aZZl)3ygl)7nAq;o&Ry0m!BSi&)IZ2M9F3McS_4B>W+_Y`qUwg2$7u&{vG~CP3 zGZ7JdDx@gkHosIp>%mgrV>%s_;kafMj&SbFbi5#RhpwKgUG=DME`Rn*gfRy$qsuwt=FZK85TN79J@n}>hhpWC0vn?`*NAq2y5P8@ouN9Mw5JvI<@<* z+^6fj?6P~&BUnTZ$C=vos+3sqVYq`%$r~r)3iAUt{$6=?@lQS;usPW4n;3lB56w|X z^*p{#md7TQhzr$oddh3mx(kLHm^*(Ymho6>Pcs)yrbMP6>DU4Kn&+}+G zRFbJMTwV;p(5s(5KE(UOuTGR_H>ouZDhEti?FhJUBmMHB(zb5J>-}D(mir>__}}l~ zm%)@e7-sK?DG7ZNwyoVzGNIBPxQ600rSVNfYFKsV)9vRpKYW$v1&ePpG5hm zA0F}Jmune!DLx_#Yh^0F%)M*Dwj?H!nqt8>jMQJIk{-ih+s2re2 zN(ND@eQ+^Tyg>Tp^rN}kxKCK_}Y;p4M9ecyv)zIt5BG&{7=9^bxm z%ERBi?8nC!p|USzekOK@IKJyty~!*3?F3uNq6zzj*qmA^>pBNc&fR2=C4r(T6m}kV z#&jw{^*6%f@A**;B#3yoe4H5*b^u@}xsultw^`_Hc4s znQw08Y)nDx_{7e9mbT*|My$LB9$#rXc2Pa|Dk=|3rbn7q{$rG~Ep`W$LFX&2i8LmM z_oDq2DOOXwL^nAPB+l)|AKPnAg2(lPjm6Mld{1Q4xx%kW=}RjoqV?)g&0yt3yL++P z>312N<0|sRVV$}USqoS%lboQ9&@i9Fp6~qx z_5C+zrKbg_MyA7W!puIMV&wP|@1~2zs&EX`_q`FAd|O=<%#kwlj#7F)@S0r*v3&X7 zt85mz<0N0JkVm726{#*38O)||&tY}VQf+DUn)DYbl z+I`v`n=J80u`Ytnv$-xdkKgaDJO8|D_JBpu*+<DoHR4x*ns^Nxvf% z%j+6`HXumNG}bG4P%>qXGm+D%eCoO~cc{s%ngDolQ0%?OvvS6GSWQA`5^QESYJ4OG znX2?w^OViIsU#~}(Qu;NfdKgs2IT0@^FEXpng=4Ijo&IH-1R9V+0hnzyZDoiY2A!V zCfV4C?$jrz%x|4Pj?W02Dae?9sX4pPQ|)lhf(>iVmGs6!JKouB``E%#DROdCqpsxl zRa-*lsN%1D#8n2hzcjhT9u%>Mvh<_eN4#AYW zFf5{PPNa|d(rZ!hjdaOuV6bK|z631g&$S)=rln*c$E&8T%x`bu3PR{~hRpEBw1X+fwmlFx|vMnk^#}#GzmfCOaJrruzR; zyrY9XpPN0h!T5wjr`Qhf>HG=5vXJ{pw;HG#jIW{WLNi2riaNP@-w0WS>{5N9E%vQq zTv1(&UE}KY+%Y0H+VGG2#t)5at6Yk|enCX2YBq{;eyZbL95Td7y~u#|dW5Z3gaLW7 zPjTgL+W=)78p*PDWcY_MSKA9Hr^q+9R~8?;KZMmpZPm0@P*jxDxR+J*^n%dAK(#kk z1s1z|%${lQF=qCg>_7?x+!Tlw?7x}Sbhr9tV_-3d^IgT~(w=m$wu-7os=kSf?Dw~P znscIvLqz#TI^%8H!}3AJep2vMD$|HM-?J7c+G+Zq?{hTGla%9szEARCQSim>Bwed1&jrIeYV+|2CLxp1FYo2wzM zk>>f! z%tVF{hP_tEm%Ape4R2B94bBi)@Ou!#Di-&|Q&zzXwtuh1!5;T6>*mB{xU^2(@$H=3 zo!F&vY1IlWpX-Z!+7p?`_D%9=rJjt&SpN4z=V!A9+93auhCV+`SUke85I*@4^#`oU&Ad7nKbN4YeuWv~IxFP@z;)6W;0V-{^L z+vZ#l!L4z(H}gfqzO>i_UtaJ~Vt(}b_B#jFJm@M*W$g1aZHF7{zssE^JwYUN!ZXD4 zL}{CPwpMgqjg21gkBNZ=ZR)>64kZ#f9c3QMb@*ZY7%o|$f+j~ChX{Xd(v?+Yy zK56iD(Dv(*{tO&d_6|>e;ZnLCxdzn+iZ4CIFBKgAer2pCtjD~QVcKKtEtwA;*V)}; zGW~)~I)0tBOr)XHMpHE-+gVCyMpVyDc%MMmTQVt_bQC378u4>mqxX=zJ`+PnhAyax-R6Qna=e$WB$aA-|9n!%5Bl)zj)2Bc zj{DoCGCMT~JS=dxE|M*5-Kz4jyU$f|FP9Nx&?3)p<&~j^s_XT(&HgQtB0qO0<#*+) zaYqPYX_!%ahO{+ki?2Q=En|A5BZ)}AF#71Q#jIG47uH%&*w)_;uJ7Jt5^Elk(058& zUnDwk8w1gpMYGNLu+aW9x1Rr?6e)4T)~3~e?jJ%wK1^BU^ggQW33I0C#R)d*^A*BV zN6mX48X&VdnzfWi1IdP*^|>DB9ckIVbr?+upi=TYR-NCLDJ;gJ#nY;pufkrv*tGTAL937akltZ`Z0aVE*XG)vTc_+I1?-M&zeCk~rA%oo6ys`3~A#(tEo1Oh=%_V11*H zuErLkUBqB1J-Ai}F0hB^?`sEa42mMlVQl#}GFTIccdbUY0k+@^-r#2!^v&NF4tp5< z_9yyj$!V)8E9o2XX(=z4073}d8Hyr*E)ZFMUl6zw{0{9Qy3rlWOz4i@-*>Evnj4k? z79Re-pc3do%D4W$r7NEVdYiO#C-lkj=MShHtqse;kKfA`vARrtyfPy;U8dEqO%I&$ z1c&xe_){MEh5OGR&;x(ibm1;82y488S3k7?UcraK;^Xx-x>6HJgfj+?f}`;tdv)o& zc%{2+x^y_mzc3pYjsM_JHea+G+{y)PDU4tGYJKBZCJpFUY)&m;`w9!2|I!K{o>ojZ zUHH=OyBk?He%ZG-UG~yMhvl-#U@w3XHeE`2TfZ9yd#?wBQT=&t7z~G<0%e1&)5Zk| z%;#>8Tz%)|VvT4AMi{IG7&4SyFI_n7(B9=cc|C0Zc5}{TjY9%h1wY0NgZ*mve%+44 z27u(-5$R%sK>h8$m=F$w4A3%t1kZ|ppNbR=X61l7hp_qEeJWwQ!w-Ya^i=d$KP>(6 z6%T8PUVU=|&=E=9r7jcDG$G|-FtH^u!6y!jFy5@;Knc7q(!zb|ef3IhLS9vz7dDa& zrmjo?RRYYP3y0n9yjjMdmgXcJjX3B2d$*NeW96%P9Kr{9%*cQYpwT}5hX%=X0EF1h zIl~{G91^)PjfQ9Iz9KN#f0`BsQ^KRY_am65hj6t(qCvpkP{4he%1wPBc=CYv3(9!N ze?kaGYB@M#G!RH6+stEd;@jDcr_Xh0Uj?95MQ0*4+!STTcGULRVO4} z+SHMf6rj#DK$F9(yyC|M(+vJonJhc+FkAx;kxIV?S4A)ma)yolZ=pivoHNkn;+nd< z-9RwTz`@1_xv?vNnM*@$ATmr*uC^7AR)TqYaHNC9`o0c1!*lok@i%~V00cXH+r0aZ zV4kLfgPn`xhSqX-3kjnpkna|#LPb1l=^h}Mr-F2_v_PIaw;^$`D8G#s)ZpkE`wSl; zmn_Y?iUCmF1|vO7YXL+!JXk4 z4Mn|m6$+V5Yh{*^H87dSKtct)Dva5-h0vG_!oxYlfB1x^KAU3+$g(7;SKFxRPJ)3z zM1&1$T>+s)DJFS{#v9n@GzdrdK7rXoFi!!@%>9q>7faqZC=BE)2WA5uapn~{OA+C02{yu8SD8?FXcaj1(*-!Z8Hn%r;Q_%% zFwhVMcj0aP+!7NIqg#I^|YiE4pB^DZZ^lD-+C1eB!W@>z!&ggPtgR! zj4akSOvqSh<3=){0?8bJVd7WcOAmr!P&e~G!g_EUyDS_KlIU&N}*1S3x(Fc$xjdj^<4M4tg|wFzjekK>7mjV73oHB(~bf5ZGWTDCEBoG389kQfGg29i!eJdO6wZI-DBvP|c-B0<*ZOgi#; zKM`0{1`I?DulPO~(I$h=Nic>3QfC+B?@6mG2jZZd`D-MPDjYC&0;|V2z>~zAWh@Ua zvMJbFpipq+T6rJ?JXeK&TL)NCfF+J6&+cu6u<&N#t`rD@m>Z(5a{)jKuylDmhzR*+ zA;0Qg+rl1hU;(9C;D9=i->nr2vO5(bo#XRcU@$DGBxO8aIn8Eyzu!mvJB|q=s2)gy zT;WR4ONzfUgVRZBwgN?t0Orbgud78e}xDd2hZ;fh-e8onnC-&j*JkpH^0z-IBTxuuTe$T)P)M<`M-1m@ z0n`&1jv}6%76%B0Lc`#Y#mHH&M}&+RI|2YI6dBQt@qPf{Q@jubc?r{i)`fC}*I)(~qH1V-k z(@y|%0}|r50B-yQ!j@Xq_3adLM<41DnBlvYUG$1^@M08S;HSxDDFD z#c>@8At1$d+%VLJ_W%j;n;d6R0)f9Q_4f;#b&!zR@IIiP20VT*hO2LQ(cFutNKo)8XJgrk<`39OHW z8WycQ^N!oVaM^&D;A6kk5{}gZ=ZgQQnjyzL&B3YY1M2q;s9$-!`kkxaEcVX~A;_w< zeoYr*6JBe^keKO~SMD4G&2llAa)BT7IvWY*>Hj)M{WtROz$}Vf^BOSrR|ER#%6I~L zED{V{YU!4Q{Cz~l%8U?Fs#v~LqyY%*+W{9p&ZdzPZ!)m|QR?qZdjlk-*8{J&L_Fh% z!3Q4~A()8o{eM#`gd7f#5PJ!b^J|bkuK!o$I&GX^oqrLdZ&j3EKAd=Ew1Co9>JJTJ zmgHa*8PpyAaHv~8p&YQ0*S|Bq(0|FpA=c_smY2lBVZ}-aWvx1Md8Js8fvi3+ZyD7N z#@II3yZxQQtUPOHB?f9VS06C7jG=zMX$;6)mKIH}EFaR?>eGRi%fAbDdEcBE>peeI z{_0KKmdi&BY_|NRna+RR(rvXstGA$91~LzC7WnrKsaBGps#(3?#WIQU>t;#oj=Mv; zTfInj8KCrYvjF@hv&$l^U6um+1HZ2wu*F5MIpXE@B}=O-mzPqkUemHXRsh|cwf1IU zNt;@2xjsT}>G5C?V(x#7SkcX1vCQJ{>o1pxIIJm%uYZ=?{8Go}BwC64y&7}563AeG lTLiUC)g;>b|3h6~5~Zs_0@6Jg%oqHN2k)DOiMN8k{s*$A1(^T< literal 0 HcmV?d00001