diff --git a/build.gradle.kts b/build.gradle.kts index f132018..663d9ab 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,7 +3,7 @@ import io.papermc.paperweight.util.constants.* plugins { java `maven-publish` - id("com.github.johnrengelman.shadow") version "8.1.0" apply false + id("com.github.johnrengelman.shadow") version "8.1.1" apply false id("io.papermc.paperweight.patcher") version "1.5.3" } @@ -17,7 +17,7 @@ repositories { dependencies { remapper("net.fabricmc:tiny-remapper:0.8.6:fat") decompiler("net.minecraftforge:forgeflower:2.0.627.2") - paperclip("io.papermc:paperclip:3.0.2") + paperclip("io.papermc:paperclip:3.0.3") } allprojects { diff --git a/gradle.properties b/gradle.properties index 3964064..fe85956 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ group = gg.projecteden.parchment -version = 1.19.4-R0.1-SNAPSHOT +version = 1.20-R0.1-SNAPSHOT -mcVersion = 1.19.4 -paperRef = 67ca7ca471ee339c9cde858683e281fa46673a68 +mcVersion = 1.20 +paperRef = de19eb8c4a490ff4f427e9ad8b8bbe181c368cc1 org.gradle.caching=true org.gradle.parallel=true diff --git a/patches/api/0001-Add-Getter-interfaces.patch b/patches/api/0001-Add-Getter-interfaces.patch index 0685c69..c03a91a 100644 --- a/patches/api/0001-Add-Getter-interfaces.patch +++ b/patches/api/0001-Add-Getter-interfaces.patch @@ -427,7 +427,7 @@ index 12163a7b0591a7d022dc7eb9ee6608a1b6c39d9b..d81c7307127b135417e06a3b244416be private static final HandlerList handlers = new HandlerList(); private final Player player; diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java -index 6bbf8468bc47e82b0aeb164e49cdb73d93bae87b..1d7077f3a1be8068747aaf0665a1dee797bb4088 100644 +index 1a60a18e15780128a1914826daa952ffacb92e9e..b7b881a66536b9f31cad5d00baebea83dcb834bc 100644 --- a/src/main/java/org/bukkit/Location.java +++ b/src/main/java/org/bukkit/Location.java @@ -30,7 +30,7 @@ import org.bukkit.entity.Player; @@ -454,19 +454,20 @@ index 6bbf8468bc47e82b0aeb164e49cdb73d93bae87b..1d7077f3a1be8068747aaf0665a1dee7 * Sets the world that this location resides in * diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java -index 69b50eee42e8c52063033705bd23a5ef5231ed83..f61ddf47ce33a4a1708e7000bb43b303e3b1a503 100644 +index 72175dcae49f75b494ab70958053ed994a8828f4..4b7ff7a624e94f9bd3a251976b33e289de084f04 100644 --- a/src/main/java/org/bukkit/OfflinePlayer.java +++ b/src/main/java/org/bukkit/OfflinePlayer.java -@@ -10,7 +10,7 @@ import org.bukkit.profile.PlayerProfile; - import org.jetbrains.annotations.NotNull; - import org.jetbrains.annotations.Nullable; - +@@ -15,7 +15,8 @@ import org.jetbrains.annotations.Nullable; + * player that is stored on the disk and can, thus, be retrieved without the + * player needing to be online. + */ -public interface OfflinePlayer extends ServerOperator, AnimalTamer, ConfigurationSerializable { +public interface OfflinePlayer extends ServerOperator, AnimalTamer, ConfigurationSerializable, gg.projecteden.parchment.HasOfflinePlayer, gg.projecteden.parchment.OptionalPlayer { // Parchment ++ /** * Checks if this player is currently online -@@ -139,6 +139,13 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio +@@ -144,6 +145,13 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio @Nullable public Player getPlayer(); @@ -520,7 +521,7 @@ index d124768378d6f0c5573f28ee815ea3886fe74868..11a00998b1cb5ee582e225553f15b1b7 private final UUID uuid; private final String name; diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 390a2a2611df35a9ea6f1eb996b47e2aa4597ff0..e7dcaf75283dd222891e4f20971716934291a672 100644 +index 1c3f54382d66549dc881d4577c7104be6673a274..dbc7e9c460cc23b08778934cbe400eb1e1ed88b8 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java @@ -32,7 +32,7 @@ import org.jetbrains.annotations.Nullable; @@ -572,10 +573,10 @@ index 2e17b2d4f759531fbe9ee8e9b00c839186af09ca..8f4a293c131cb8b63c31b410ffa211bd /** * This is the name of the specified AnimalTamer. diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 8c58018b155c52a7b2a139f784abceb6aa00a268..dfa0366e3f46ef974f9d3397f057a6abc5c0e08c 100644 +index a2a423d4e4c2702ba5967223cab0432dd7d04732..88704047f596440bd9c68fb4f61417b2bde09757 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -27,7 +27,7 @@ import org.jetbrains.annotations.Nullable; +@@ -28,7 +28,7 @@ import org.jetbrains.annotations.Nullable; /** * Represents a base entity in the world */ @@ -585,7 +586,7 @@ index 8c58018b155c52a7b2a139f784abceb6aa00a268..dfa0366e3f46ef974f9d3397f057a6ab /** * Gets the entity's current position diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java -index f17ef44bc02e97ff084e5abfde8d6c6822f00d62..aae9eaa7a0e42cd9bc0a4ccf56bf056441d47c90 100644 +index 8b0d04d5b39ee817555a36adddc39b18fc6f0d02..28935c1ff3de9fc2e15e2bca0d254c0e805ed3ce 100644 --- a/src/main/java/org/bukkit/entity/HumanEntity.java +++ b/src/main/java/org/bukkit/entity/HumanEntity.java @@ -20,7 +20,15 @@ import org.jetbrains.annotations.Nullable; @@ -606,10 +607,10 @@ index f17ef44bc02e97ff084e5abfde8d6c6822f00d62..aae9eaa7a0e42cd9bc0a4ccf56bf0564 // Paper start @Override diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 8fe11fce80c3b29164b79ece8dc9ed8da6fc1790..b494ea7863a06fd9c52fba124a66d83da6432ed9 100644 +index 1e5e757b1e3bd02e595020704d14244330555bf0..d4235e9633eeacc35f45530a63b43a4c0e07c5ea 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -39,7 +39,17 @@ import org.jetbrains.annotations.Nullable; +@@ -42,7 +42,17 @@ import org.jetbrains.annotations.Nullable; /** * Represents a player, connected or not */ @@ -720,10 +721,10 @@ index 4e3c406ba883aae553e8d69b6b719b872cd6096c..d0a92dc9eba0f61b596e9a388f3aa407 protected boolean cancel; protected boolean canBuild; diff --git a/src/main/java/org/bukkit/event/block/SignChangeEvent.java b/src/main/java/org/bukkit/event/block/SignChangeEvent.java -index c40536f781393cb39e6a1a4ba6e780713d5dc126..e4455679b37ac38bd505982ef12d323c9ff466c3 100644 +index d944d67f544494355f03c5bc9afd8ea7726e6412..800db8e63bdb8c05ffdc88c3a3b0f1f268a1357e 100644 --- a/src/main/java/org/bukkit/event/block/SignChangeEvent.java +++ b/src/main/java/org/bukkit/event/block/SignChangeEvent.java -@@ -12,7 +12,7 @@ import org.jetbrains.annotations.Nullable; +@@ -13,7 +13,7 @@ import org.jetbrains.annotations.Nullable; *

* If a Sign Change event is cancelled, the sign will not be changed. */ @@ -1023,7 +1024,7 @@ index 0d519813c12d98b28d62e6d01d7ec6e8c2dba3c3..469b9cc0c4b77844ba0317af51bd9ad8 /** * Returns the size of the inventory diff --git a/src/main/java/org/bukkit/inventory/InventoryView.java b/src/main/java/org/bukkit/inventory/InventoryView.java -index daca40b63e95ea33178bcb54ad45911da591ca54..e9b5206851db890d7638ce94d793fb909be20307 100644 +index 77a0cd901038405ed0e267f0432f13deccae3ab5..abe9b0d97d24e9e2ef1a61e34249895eb35b800f 100644 --- a/src/main/java/org/bukkit/inventory/InventoryView.java +++ b/src/main/java/org/bukkit/inventory/InventoryView.java @@ -14,7 +14,7 @@ import org.jetbrains.annotations.Nullable; diff --git a/patches/api/0006-Add-UnsafeValues-canPlaceItemOn.patch b/patches/api/0006-Add-UnsafeValues-canPlaceItemOn.patch index 63381fe..1940769 100644 --- a/patches/api/0006-Add-UnsafeValues-canPlaceItemOn.patch +++ b/patches/api/0006-Add-UnsafeValues-canPlaceItemOn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add UnsafeValues#canPlaceItemOn diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java -index b92255a9c87620f46adb140689b1cd328a476d61..3ed52d016314c01293530fa760fa5faaf59586ed 100644 +index c661eab343ae76488de701630424e2d589f44fc0..b0ba8331fa43f4584eac1b1d9f4c3cad9d47b872 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java -@@ -245,4 +245,17 @@ public interface UnsafeValues { +@@ -250,4 +250,17 @@ public interface UnsafeValues { */ void setBiomeKey(RegionAccessor accessor, int x, int y, int z, NamespacedKey biomeKey); // Paper end diff --git a/patches/api/0007-Expose-MCUtil-Executors.patch b/patches/api/0007-Expose-MCUtil-Executors.patch index f8748b7..b1a25a6 100644 --- a/patches/api/0007-Expose-MCUtil-Executors.patch +++ b/patches/api/0007-Expose-MCUtil-Executors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose MCUtil Executors diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 8621dba7f10ab822b5b99ce0d05da58823605cb6..5603db21993429e974b037894400caf429ceba38 100644 +index 1d1a1d087dabc9794e0062a064da2cced4062309..bf0ceb5b59a5ab63e618984ec82e9830c228fa75 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2136,4 +2136,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2162,4 +2162,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ @NotNull org.bukkit.potion.PotionBrewer getPotionBrewer(); // Paper end diff --git a/patches/api/0009-Add-Furnace-Recipe-API.patch b/patches/api/0009-Add-Furnace-Recipe-API.patch index a44ba0c..0940af2 100644 --- a/patches/api/0009-Add-Furnace-Recipe-API.patch +++ b/patches/api/0009-Add-Furnace-Recipe-API.patch @@ -64,10 +64,10 @@ index 0000000000000000000000000000000000000000..28c01caa9d6379046f6af6612719b404 + } +} diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 6716a1185e733f3ddf56b295f3153938f57d4229..ccf72e766e34129fc5dd874c83d966b3fff4d2bd 100644 +index 72f1576b8ce5b55b50f053f346ce42c52db4b568..edc65af5cc0593a04c2f7fede69de0781a31ee97 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4007,6 +4007,36 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -3974,6 +3974,36 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @Nullable public DragonBattle getEnderDragonBattle(); @@ -102,5 +102,5 @@ index 6716a1185e733f3ddf56b295f3153938f57d4229..ccf72e766e34129fc5dd874c83d966b3 + // Parchment end + /** - * Represents various map environment types that a world may be - */ + * Get all {@link FeatureFlag} enabled in this world. + * diff --git a/patches/api/0011-Add-Player-getHiddenEntities-API.patch b/patches/api/0011-Add-Player-getHiddenEntities-API.patch index 7a083d8..e327884 100644 --- a/patches/api/0011-Add-Player-getHiddenEntities-API.patch +++ b/patches/api/0011-Add-Player-getHiddenEntities-API.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Add Player#getHiddenEntities API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 64734c0ca89859294bde01da3dcaee6dc1840894..205cd1d53bef3a8d18315561543f815ede791570 100644 +index d4235e9633eeacc35f45530a63b43a4c0e07c5ea..aba730b762d6a0df8a5f115186f2faaf7a2cb75d 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1597,6 +1597,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM - @org.jetbrains.annotations.ApiStatus.Experimental // Paper - public boolean canSee(@NotNull Entity entity); +@@ -1649,6 +1649,18 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM + */ + public boolean canSee(@NotNull Player player); + // Parchment start + /** @@ -22,7 +22,8 @@ index 64734c0ca89859294bde01da3dcaee6dc1840894..205cd1d53bef3a8d18315561543f815e + @org.jetbrains.annotations.ApiStatus.Experimental + public java.util.@NotNull Set getHiddenEntities(@NotNull Plugin plugin); + // Parchment end ++ + /** - * Checks to see if this player is currently flying or not. + * Visually hides an entity from this player. * diff --git a/patches/api/0013-Expanded-Insomnia-API-methods.patch b/patches/api/0013-Expanded-Insomnia-API-methods.patch index aefc770..6283e94 100644 --- a/patches/api/0013-Expanded-Insomnia-API-methods.patch +++ b/patches/api/0013-Expanded-Insomnia-API-methods.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expanded Insomnia API methods diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 205cd1d53bef3a8d18315561543f815ede791570..bb67075d04e31865b48e8436876ecf6f342d4d8b 100644 +index aba730b762d6a0df8a5f115186f2faaf7a2cb75d..77db3f6bc082cc92c27775bd804fb678b377107e 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -49,6 +49,45 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -52,6 +52,45 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ @Override @NotNull Player getPlayer(); diff --git a/patches/api/0014-Add-NPC-to-EntityType.patch b/patches/api/0014-Add-NPC-to-EntityType.patch index eaa556f..ff30655 100644 --- a/patches/api/0014-Add-NPC-to-EntityType.patch +++ b/patches/api/0014-Add-NPC-to-EntityType.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add NPC to EntityType diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java -index ee3a3bda9a5b9cf3bcabf80ee3c653a2959fab0c..3e9bf06682373686d0c6f40defc56f23e785cd4b 100644 +index 6cf14afd2c1b8018c67c6cac302ae28bb12ab5a5..9ab641d268cd10a2c9bd888732d4754d520c56c7 100644 --- a/src/main/java/org/bukkit/entity/EntityType.java +++ b/src/main/java/org/bukkit/entity/EntityType.java -@@ -297,6 +297,7 @@ public enum EntityType implements Keyed, Translatable, net.kyori.adventure.trans +@@ -295,6 +295,7 @@ public enum EntityType implements Keyed, Translatable, net.kyori.adventure.trans */ LIGHTNING("lightning_bolt", LightningStrike.class, -1, false), PLAYER("player", Player.class, -1, false), diff --git a/patches/api/0015-Revert-BungeeChat-Deprecation.patch b/patches/api/0015-Revert-BungeeChat-Deprecation.patch index 25806f7..81956a6 100644 --- a/patches/api/0015-Revert-BungeeChat-Deprecation.patch +++ b/patches/api/0015-Revert-BungeeChat-Deprecation.patch @@ -5,21 +5,21 @@ Subject: [PATCH] Revert BungeeChat Deprecation diff --git a/build.gradle.kts b/build.gradle.kts -index cad12a2632b9ebb569280441c42869685db1f31a..50014fbac3aa4f8c7c930405ca89f9cdb83b771c 100644 +index 4b2330bac734cd07f8798ceeb6d9c67bd3f3521d..3c4eaa792da395db739f554bea69faba46a7bd12 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -25,7 +25,7 @@ dependencies { +@@ -27,7 +27,7 @@ dependencies { // api dependencies are listed transitively to API consumers api("com.google.guava:guava:31.1-jre") api("com.google.code.gson:gson:2.10") - api("net.md-5:bungeecord-chat:1.16-R0.4-deprecated+build.9") // Paper -+ api("net.md-5:bungeecord-chat:1.16-R0.4") // Parchment - revert - api("org.yaml:snakeyaml:1.33") ++ api("net.md-5:bungeecord-chat:1.16-R0.4") // Paper // Parchment - revert + api("org.yaml:snakeyaml:2.0") api("org.joml:joml:1.10.5") // Paper start -@@ -106,7 +106,7 @@ tasks.withType { - "https://javadoc.io/doc/org.yaml/snakeyaml/1.33/", - "https://javadoc.io/doc/org.jetbrains/annotations/23.0.0/", // Paper - we don't want Java 5 annotations +@@ -108,7 +108,7 @@ tasks.withType { + "https://javadoc.io/doc/org.yaml/snakeyaml/2.0/", + "https://javadoc.io/doc/org.jetbrains/annotations/$annotationsVersion/", // Paper - we don't want Java 5 annotations // Paper start - //"https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/", // don't link to bungee chat + "https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/", // don't link to bungee chat // Parchment - revert diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index b5fb1c5..b56405b 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Build changes diff --git a/build.gradle.kts b/build.gradle.kts -index 9cf389defdaeb887e9cad4f0fed3f3b95667b238..3bd719aace9df13f5d82a6206fb46913efbc4f9f 100644 +index e7a03ea1dab56e7725f718da0b44c736018ac995..61677ea29c30ce02c9d7a19db18582d1f3024cb8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,8 +7,8 @@ plugins { @@ -28,11 +28,10 @@ index 9cf389defdaeb887e9cad4f0fed3f3b95667b238..3bd719aace9df13f5d82a6206fb46913 "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -79,7 +79,27 @@ tasks.jar { - +@@ -80,6 +80,27 @@ tasks.jar { publishing { publications.create("maven") { -- artifact(tasks.shadowJar) + artifact(tasks.shadowJar) + // Parchment start + artifact(tasks.reobfJar) + groupId = project.group as String? @@ -57,7 +56,7 @@ index 9cf389defdaeb887e9cad4f0fed3f3b95667b238..3bd719aace9df13f5d82a6206fb46913 } } -@@ -134,7 +154,7 @@ fun TaskContainer.registerRunTask( +@@ -134,7 +155,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -80,7 +79,7 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..bf6d9879810359216a60d1efe1d1bd9e /** diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index bf42969859545a8a520923ef1836ffa4a5cc24a0..2532e265c5dade55f71c34fcab6d1e74bbb58a87 100644 +index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..325561b00d1ed2d5cceb399b023dc59e2d1c7807 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java @@ -31,8 +31,8 @@ public class PaperVersionFetcher implements VersionFetcher { @@ -89,7 +88,7 @@ index bf42969859545a8a520923ef1836ffa4a5cc24a0..2532e265c5dade55f71c34fcab6d1e74 public Component getVersionMessage(@Nonnull String serverVersion) { - String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]"); - final Component updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]); -+ String[] parts = serverVersion.substring("git-Parchment-".length()).split("[-\\s]"); // Parchment ++ String[] parts = serverVersion.substring("git-Parchment-".length()).split("[-\\s]"); + final Component updateMessage = getUpdateStatusMessage("ProjectEdenGG/Parchment", GITHUB_BRANCH_NAME, parts[0]); // Parchment final Component history = getHistory(); @@ -104,23 +103,23 @@ index bf42969859545a8a520923ef1836ffa4a5cc24a0..2532e265c5dade55f71c34fcab6d1e74 org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 9f15d9dbdfa74a0640b1a2b4ff695609d4758a4c..ec1a0f01c116c0a34807e1903b8142509d456b0e 100644 +index fb82bb52f219e7683fe1d3c0fb3acbe2251de8d4..476aa9a9921b9b6026def89c64d730ba08495dd8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1682,7 +1682,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Parchment"; // Parchment - Parchment > //Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return "Parchment"; // Parchment - Parchment > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! } public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index f9a9d2bb7b6d1bf4a0931438de4d8c7ee0757479..2a8ad9afaa53d80d3926d9f1e1181c54aa8a849e 100644 +index ffa27c9c02dc4d12411fc089de3af8e8e12ba06e..46831bd86a010c7f0116473876fd90af5abdce4b 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -256,7 +256,7 @@ import javax.annotation.Nullable; // Paper +@@ -262,7 +262,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { @@ -130,15 +129,15 @@ index f9a9d2bb7b6d1bf4a0931438de4d8c7ee0757479..2a8ad9afaa53d80d3926d9f1e1181c54 private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 4966a1e3dd35357a8ea6a7d2944c84c9c3e9058e..d9e66c74b41da9125ca153963397dfa4fa5df40f 100644 +index 717e292040ed7779eb4b6c5fa26665d3df9024e7..9f0a8daf4d9488d348de9ce880a0cdae6b19d738 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -285,7 +285,7 @@ public class Main { +@@ -292,7 +292,7 @@ public class Main { if (buildDate.before(deadline.getTime())) { // Paper start - This is some stupid bullshit System.err.println("*** Warning, you've not updated in a while! ***"); -- System.err.println("*** Please download a new build as per instructions from https://papermc.io/downloads ***"); // Paper -+ System.err.println("*** Please download a new build as per instructions from https://github.com/ProjectEdenGG/Parchment ***"); // Paper // Parchment +- System.err.println("*** Please download a new build as per instructions from https://papermc.io/downloads/paper ***"); // Paper ++ System.err.println("*** Please download a new build as per instructions from https://github.com/ProjectEdenGG/Parchment ***"); // Parchment //System.err.println("*** Server will start in 20 seconds ***"); //Thread.sleep(TimeUnit.SECONDS.toMillis(20)); // Paper End @@ -156,7 +155,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..6f1b3fa6ebeabc7596034663ed06686f if (stream != null) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index e9fa7faaa4451e36b3908cbcbbe0baf213abde96..3bddb7d19e46ef774e15b0f865779f5a1198f3b7 100644 +index 98fba0288be9ed2cb18ffba5cf81148157dd4fcf..69a07076e8876a4db8f068189bf67c70f2a74e27 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -162,7 +162,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa @@ -168,1354 +167,3 @@ index e9fa7faaa4451e36b3908cbcbbe0baf213abde96..3bddb7d19e46ef774e15b0f865779f5a // if ( net.minecraft.world.level.Level.lastPhysicsProblem != null ) { -diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png -index a7d785f60c884ee4ee487cc364402d66c3dc2ecc..ae0a8a3e49ca755d43034df04f2d7d04b6fcb63d 100644 -GIT binary patch -literal 57907 -zcmeFZWl$u|5-vQryZhko?(VuQ3oNj}Fu1$BJFMaEi_7Bf?u)ayySrTWJs#ivb0WU` -z?@UDZRA*&AnfX+9&D3<%M5w9Aq976?0ssIMc{wTdxA%cR2R!WCxlFq}0|4Op>Zzga -ztPXMm+B@2rT3DL^ojvSLfF|x1rT~EZVp-Zp$8EVUCa+bIdXU!sD8p3<6s -zUM5neks5AV?tJpJWaj|RnUdQB!@2v_*TdGA^EkiYB%_v#_qzM}%TI}3Ck|)Q&3-RL -ztNr%7r<=E{56?AcbEgJ=zUcRw8%_`RW{mCnuaA%G<1oG=C~clE`w}+K51mhkXr3=F -z&o}i*y_u?mf)|I+hZ4_oA?i=};&(0q=a<@U`(-belp~jy_j9MOOi+HTqFXm}OD~Cj -zTAFsEEodd4>T4mWRcyoHJ -zY2I><+QI?Lf_oR^e!uRwG49tg@o0HLzI;5c<6!WvaE)h~U-W{3hpMIhc<&zf?l!ai -zb+?Vi_3S>O@!WqiLo_i-_0B|h@!bQDzM8!7OxwDlS0U7C)nN2w=ndy_B=v#6}DzR9In6ET3I!ybqGLo -z^WLdDwC`)ilaQ*%!F0w;^cMvdRr-9~PP<sc&3|m){G771(mJ%cn#WqZ -zyPC4HYrSQ6pYHq)*DmbdiO)I4b?I%I>{7R|tDQ7HbokL^W~O{*Zr-5~Mdhga(6;&1 -zp{w(oipV&9VTS7i0c*ic0dM=b?#e@5ef#EkdB~xe?(6orpWj^9>8GewmHVy-v$?w& -z9X|sKc-lCxzSv&k`SSx*!-+}ZX59gPecN;|*V}L{q0i0U%V{Lb?5=E?=$X7v3(c>K -zjqOKE-!EV1+Im+7-5On9vHm)Pc3)gpUq;Jqaz~q{uaDzx_i|PcZZ}~HW9CD}kK3Q` -zBb}~pNm=c0OL>L7wjUDAFbBum9+&#*`A2A1?LID#7|C{F$;SH3hzxyX(l6GdyH0RA -z28pr@mm0~(>?IlPU|Q|m)K&K{oBa+61G7G4nAPxbmoBX0?3S}O-_$+CHrE}Q%wO!L -zotFYcF4QYOBee)Q5DQxKu!U8hUy$_gZOhvoa|+oNA1@x3J+_1#ZxLCL&Uf>FO%2W8 -z@;s?NzuIjb=WNXVG9|1V@nqu@NDQj?++mqBULF74_^iH2XA}2JQsfprwcAO*qU!W6 -za3abIwXA*(i#BoUHloyC#K(X(Qi(CqC)>kRruP>|wBdj&m4%BPsps8!Bj;CgB)}CYQSz1`L(N2&X9F}X# -zdpUX<7-Up-`|u<**lpM?QCHbN*&GpzokK_4k8s1j$o(uss%I;&Wpip>)jml1uo>ZU -zF2ZT$Fdyg^&tpe&p8d2TZF48W_rbmLO8Ktb&ZH`HWfnA=_Yc9lbtMDxhtUs`W>9P(1v -z<>YbqfE8+hSh>$=d4jCw=<~qDoilA(l0)jzeFjOwhU%|Y5~^UXVy)bt<>FaBa@9p` -z`=rb}phg{ku>Xbg7Kir^!H?igFbtl&;_r$^x`IfPZ;jUMxk`&*k1sM~4wYO||dohTfP{zI-cfEH`O -zdRfD)P@onxC3N#9drhwZkDjR6iBBfbBYHN5%b*w1?1YhnDmUmW;f -zcYR>BYY{L)=Els9>M!ZCgv(>H?a6)HArg*7TGD2Gs^-UX&#k}rnw3B#^mg~(8Tpoo -z1T`ZbZ@+vjcn5$q5>1f2O3tD|g7E*@{ZP6~p3yFi-3xGK#?aHtGTWuTGY9|BG21Sf -zI9pL|T1;cpc0Fow7zaS#+$B^Cy4r@v@P-Z++j{D*>caqNMdh{?`j3-Xphqc -z0U~a=itrSIei}F?gwI3;tk2Fftd@sbw*Xltf(keK5ccLp8M2NwRL0MJ?)cANglhvD -z8VjP4!qQa&V8tOD&=X?ByD998{6nz3E%k0yaQuw6Hz|tS#HJO0dR_ua(fXLYU2u19}YuT!ff(jI8h~-7A!Z`1_Mo!u_;0l(tjQ -zL`(VRAOp`ao{E)&`aLa;x3wsnD0Q>}8DMB5<0HUj_fQ7vlMxG=rb7q{9HeSA1E0ZD -z1WV+W-*dDBwO=nm@_eLL|Iqjsv0d!>s4VNAc(U0pbY~h -z4ElxrCawBRHR&P -z8w+xG{6*bnEap!GWJ9OpBdG??%LF38 -zl7*AOP|_DED8=WCG_LY`8=B101jxxC%HbH}8m2!}6d~5CDb6p;37!Q7P@bhWuc2lk -z5l6YdO*6+W{SE9AmHmZB&4nM%LQA5n6ex9xVH{LB80Tzwbav+8;754~CC#Fg`|!E|HNC@RbtSA{*xa#d -z+&3Q3t0iBN*(!_RR<2zqaLbE*vgcvE=gV;$xg7Lf0^zz!WEUpVVWC1-0x6bRaO(|o -zvGxWL7S5hw#Mn59^FyebTiNZ?fn`XZ^7CDWRkmt~oRCxDQSddlp&JO1YME2|9s&0- -zi49HHhBNwBs3)GWNZSsq;X=(Q-`tMq=Mbr|`XTl3fp{EZ<-`yHPzmjWz -z476wPwNs*f(8ahd*P}gGlRG!40s4ag=iF|64`SRexA<^=9S-ftcsm285Z2>Pn=b%d -zRDQ|P-_3A&XBysk)?b}4K;wEuCrs}<8nzLE^zYa=L~gr7JoPJ)J{c6!t~kC@1jLJE -zecNt634-1#i$`B>3^W0&^Wq1-+VWWI2^liipkvpkWUs$#u?xBebL)nLS>(CNO1Z-1 -zKn5~D+=aI)p9SEKc4!(9u?}c!Nn8!tvWrsD>h~Ozd270U$Sd$bY(GNE#_1qcmlQK= -zjk-qVeP_Hf9tEVuwguaFY@@*SGEuC*3Ux^N@AyZlp*j!3NXC0$ -zL+-zKf$_a1@2Pe?O@YlgP2r=n?`2eGl%R)aFWm3@05*eSIT0fI+`g>67;>CxucTEN -zDrB3)DmH)4Z-@}i{>8?eB_I|*$OJRk-QR<}%x~oZg6eZ`7FC0e$itX0rY@(*Zku-x -znKYqxi)2SA{Tf824c!N1ygeVM=~TZep8mD`_~K>S*%w?X5}8FvBkRmq@hXb+0jSb- -z5lqH3{xpvd83Y+~N>c&$5#5@J)x4AL@_l-bXOR3p*_pR-pj!yu%#dEq!J^3;JXA{l4$J@Oh}E?fEhdA1e| -z&&m#jo6jzaDI7P*??J=2p?-t!vN_zO;h?;YI(tRqTpw+>(P%tHza}A2hIvN|=Mn)z -zG!|$w0zWh~iVh%htwUpxD|~TrSb)4fe6p;tx5@DT6vpWqZV@&!kYh#-T}xCugri)Y -z1ZA8Zw+_f^H~0x}+xI=|eUFnhE&|54!il5{#>gM1{#d3#NS(Qm0jb5=NII21GzdgZmPMRkI1N7JN=ev4h(18t_is;UFls**_FK0pUxVN(N$ZTN^ej -zb99=spS%5y7KunRRF;$#M3@$cd^ohnnwJ?m?OP;(C^#{^u_-uSCPH-GDfBsFm8YHQ -zT5?_{7YhnQp|ZAGWzc>v(zOj1fS3dcoVT7m_NU)lK#rTjyX^jmlp6U}B@4Nnl2_2` -zwJrB>~UThL{-(eg<2 -zEf_4qMAqy`$Ta9Kd_iT>8dM6%;RD}gxZjQ1ngsxMw-uh9KC~F4!-M#my$91+?j!F6 -zJ6v+r6m{MCtAom#$3jcH7IZQZ;I|1)wQo?yLpl{Z8OgU*XwaLA6Ktk18Z+1ffH2nz -z&yDdWcf9^-GsH)>?DcH%3c<6wIkr5ATKzOCG9I~F@1T}s=_bdX}knky8Y53|-wxXH8D;ot)j6+5#(e`LkwYSar; -zMn_JGxPQ!5?SbfdFR=n(eH?=JaQS|YRR`}B0LMr$0naCx!qf -z8UAewc@MqZgB)H>>2h$YX(GGcE~uP^oIKc^!p$9TXDs5q>G0RZ6QOOYK#NnFWL$`9 -zUc=E+RIO-tLLPM{$tp~E#R--f5z=ym9-JpXN%~53Mie!Q={tzvXsyK-q??zP<{H)_ -zeJ)%_hE?|8@wIIJYzc0#4h;p94kks%MRvytQi+sNWvUwl347+J@YfwN6^a%Z;wT(x_?$L> -z>uXl)DNq-{G%3yFOju3SjgC3L^f%tzBva7^Gv>=(8_SACgXjM+~p*4$y2k=qR%gqs-t -z5YnGr2*DVSW9h}Zsr8ENm$CwwvXcX5MXaY -ztGzEo?hYE6t#+wpQT#j?wj?$9E`Ir_qn8xwXZ$#VgUpGTk`C`~2%M0KiuMSDrZR&u -za=-tTRQJ=Th(_9lFXvQ-M~)xax1Nb+Zb#fzdBBaCFneTkKJ1d>i;eg1-BuE%Ybz#EM -z+s;6}!J7R}!DEWDF_{oichA`GpG_0;RhsG$mLMKKN!82;2dX7Cr{bgD@sU{5#YrP} -z=|=QBozQ~RZoceobiL2ctA%g_8~!^$D;&=TXiS}5siry0a>x->G@#xZxt&yK$CTTX -zb#bLy(WhpGg#0gwV(}E%vAREkLd4Mivabd*PQ{E_bC`>D?U)-;R^HEQrClo?1Ha1u!50l -z%+7QMgiHWLjq_^jk4crO5v`QcwrAAiP`*$AP)s_E)5!ez6-FhvS@oJ|@dC9Yo~@V$vjUv*5$ -z=#137Q+{kHe+}%z6rDuWbWRNcl`W`zGmr$Va{=)mN)Dgp_vgo^Ap?&@Zg5e!f+E18 -zIeBHjE@9(C5rSxLN}lJ9pCa7E9Cv&{YxW>pKxlLlM7T@?QAM)-3DJ4NFyh(KQY8N* -ztF_VEUG_Iak%e!ffEhc-YUtMl?+lI+N=Hc3yEq -zzl1oRdvD`YKDX3+QsX6m*c-PTgRmm-XfQ|uGYN9FG2%HmCuWX{;37D^Z1foOJy22t -z?udlnPWrJn2VNO{29-2P$(@F^R-OJk0HGQ2OVEu(<(Y9>I$0LpB<*pDP@rWdZU@3g -zFE+N6v6h%D94komDW7C+Mcmy=V9x?|Rn= -zzftF-S3sHrs}Xw!QXa0-l_OyfkK#h2YK|c`7w!<)p*jNkRM{-CC7wE7;q>;JIwKiS -zmqH+0qU-FwYBB1PL57wbIQ&N850}V1ihvHZnyE^(fF3?@(GP~a34(t`501o!R~E!B -z#V0HJzR*s!O|QO79AWtc&3ctTT1L$1g68?WN@d$%9Y9POOS|!d>oBGRhy1G;$Q6ZJ>{}+=UU2?mwlTw=l%@o1|7Dp4 -zOAj<6G0(|i)SdV`i4~V4S&>E1K+BYr8vCjn_b$c4!Mr3ry~0D{&Bgl)sgJFAB?!eI -zm=fh)&+aMt<$MgIKOm2zK$4`28DS -zKF{f@G=$ak+tb7g(|$-sM>~fNO(J}iY1oZC0_VvIAZNH7h1N|)(-sq~h+Bo!1G86Y -zT~C=cwHy?LE*l`MR&qDCJ4KrHG8;wPc?l5>tiTWbaW37!oepnXSvh0Ml@LUCOX1-m -z9M20u3~129e=uscY5*-3P`G{Ev*I3nbcCuam)>JTf_qy7eH*dOIr$ue-*AuLU?^?^ -z7FEkk)|4S{DTH3jG~i#RI}5>RH+UDsP23|G=q3f9L`uYpp-z7b>x#`I!N>kNF^>mY -zi!eDM_vaErY^@NF(8vgn -z=n)9c5@7*OBfa-Uk|?TlHcNkjEUnJpo_2j#&1IxQ_i)TyayySMaD+~bwli?aByr8r -zUUP2V!gJE -zsJ@?Jgzvzy#?Wv2X;!tip^`!PTSZRtk(k(ogqE@)Ir<2hIAe{Xz|6gNZ8|(s6CmAq -z$!_~AN`RwigPpX#ZeaJC~dbRNKXYm!AI -zOkuxg1K`-@U%zg4g_WoY*_gOPVt($em#?%;n`NIDIDt?fNkAWP^ZraxAaZ7F4;g9I -zDV}@Za!#`6YtFzc7TqIj_m~m;f$&!-*F&H4ITx>gIz@f^k(LRl|U+O5I -zQ}Sm>aM|P3Y?k(Y!o#xA1L_tI*?}-jb?CO~OhQ_yy-Y0;Xp}pHM+lXHQbP3Zcrcl@ -z$%!Q`v(sZirPcZYnMp}T5o%b6)ljpjUy7xwG9hevz97^&hto>Y2T}|P>-6Kt-;hn2 -zUd&iS?8FI33F)!DBm&wIWS)8>)ka&r7tRY)33ghuXL^w3c`jgikqkufT8N;yP++!o -zgcg~2A_8*uk|gk}$pKvtAMPJjP1zY|yNLbPat9JMGmjabX({)11 -z7|gD}vi5LvozXdjPPQf_rAVkCJ5jKZ5lp4=aEBL?&lycPYM+m!9zx*Ur=0XL*DP|( -zk?YI9HO~gx=zr&cyl#E$<_k3lR -zNg>co7x%wh2!UlSh8F}xOkA|j?u)m~ -z)mP%kPVUf=T1W2D=aHKS?R4L*Al7eu7wkHtyzNyNW^0I_^ykC97|&xMe@`|fXPwWB -zZ}GbPo`rOJ8P7^q443nGSz0J(7v9HpHa#6QfnMWk3m^&g5n+L+A$S*bZ1Vk6H)r>H -zY7YJ?(%He%4!7>aQTNZIrdhTHN3=RamrGZ&H0rXgL4%4;lew|EU=x^TUjl-jfG7(B -zs3l&60H%A21IOgZ58V1vwPAfd!@-^7!Yvj -zGrAo-Yw5j@^;HcICWbE~!)4X3%@TGq3d6z{xapK-IqEbTmWECmek=NtDA}s6Zlm+i -zLunl?%Pc`Y*)9j)6O?kP;I^^Wdw5bUM~?~cgCScj8rRFZBTWBoD>@;KaM=OV(P -z;oPTMUybzI2iTLN4;@46Ve**KqnH!#WWkH7kaJ{rqsZZxD(Hc3;>ZOw*i~#_A;URc -zbGuuu?ImcHdI(i+!^H) -zoQ6j%Bg8W>1{vkVQTOARLH}2RjX*g35hl72qU8 -zUCDXUWC+s2#*zmmc7f!3M6TJKa@Hkcw3ne?gQI~-v3^{ma2|}u*{lJ$h$NH^>@p+H -zzBymQ^YC;u=Scx7c05)>e9_XNUf7>!{XqjlnNjGe2u{O17(h~;2bYW-@6bkaoQ?i? -z4+^D2)$N0a=U%bWMZ>s_ihdu%F!mWh5#|bER(Ebt9F4kC=EA9YE0c~Yx#uUV?&pQ9 -zFtN$m@+wSl*yg -zcC~jE<)RA^#|4;o;uw+^L@OJv*4eFjis(JvRJIOG7)^sTrD!M>xU*lW{Ugvq?4_~$ -zAMJ3P5FulkQeG)|Ms4sKM%jUM-q*3gDW{6m3@Z64vN_Q$N-@=tb;z0ZCc`-Q9iYn| -z!S>*kPfc=L70H-c^YObdgnWMQtH15K2uy0iuL2rl(dJL0xYMJ-ol2|gydn~9X{4B= -zm`6k`ZQ(0Ns^T7a=*HiX!!ITdAy -zWxsFAZj?Ne)&1zawxA>13?Yu+Y@p4@MevCdvqC75u4bf{YFD9yu<;!O0`e}DYH%z@ -zan9)H{T7_{+H}h=>d0R)P}=y%T+%$%{ZdTWhHc3zzEJyZG92mp19}8m1tE?T>P*n) -zf}z?s$E1*%ZagNfZdfG;#Yb6BdntkhV4$la%um3BWST~+>0b%=Y;%ZH@V>DH!uEeN -zZQ@83Kn|N729={4d1GN5h5sIhrBFgm?4qcW*kXAEv^!9-O2qhMcOA4boZ5=+f!!j6 -z^==RYrR^Nb}y5%l#&qmIfVKcfJ$Miq&OgA&iH-5hx1XF4s6>E -z?K}oG66?Wa)pSB>9!CEXzgFyr{Mi=^FJ>g)Cdk((p;b8HzgrbQ!P=7d;o7sFAm9ceAhpX&M*)(V9M -zpd?{RN21Pgiu9Otl?OH*)rVy|FdNqUbW(IfO@15Xf{V3kxXA~`eHR;?xZGZkOvF`J -zL*m;s%T+743~!@w`5=~1s`Pu<7=xdUnpZM%?Gv1cSfPkfc^Bj%E)za(~p{CRUboPD|Jth#2!4G -zC!zO)VdlDG;cX}j!>?#~LcpRZL^EsgsO2lbsH>B3p|4 -z`HnD8X&D>}%&iR&QC9zc06ms?I&;+1vgS@dy;d3_p@T%y@WWIqnG@^cFIt7M2O7d^ -zk}|`az?fu#Q=WMlsmx6U=spuDzS}K#mF_y&XqZ>p9nsl~1fTS?(iNq6^67HJ2#%)P -zodPAVyndZ9LRe;iY|SXzD725lO}-QNGurIf=mpJSH~Cnb(u#xpiXogNsczx`{KbD&hjoVjpSc1rQX^TKUJb}Arj;H=rZ8OqSRVyK)^Mr^TQw8pBfK<2U5Gu -zH3Zu`FHC~gxx1{<7YW0f$%e=0)&?}uaF55m^7LLP*#l4)u}-7t@F7fL -zk~>7^kd`=m+K@Y)cLF~qQP89UExee1NSm;M41FOp@$F0k5lGNX#TCaqsJS`5m(HH5Nc0sq= -zEasaf_z3f6-UC$rN(zka9{Q>Q6u=Ia>ADk)g3cSTUzoLbui01Ze{yNkRO28Xci(HYN#V|~NsjfW)3Ui>9q -zC<$mDMxWpO?S_Qx(PAz&?Q~oczbib`XFkGd97U6)BqhT#r-V72@s>cWFA(5#C6Qyb;-K$`Y*peY#9EJ;BL5`*qj2 -z>>a`^AhJK%U#&QsKP@i+P9~3toM@qycFRdGJa`Fp_VlA`ZH$(P?tyX|TxXS-nO6FB -z?IWxp1Pjnnk^SqWjGc1RS&0ADx?gXpu;o)>5x4ax+4nl}K^6GD{$621x6pZ!KaUC% -zU-h~PJ{r+OE{q}I;`uA0X8{+;jmxcbtWCegV7;?ZxuM3;)*p6Oqi1_5-z0>kkr4Ss -z%+vq&^r*%ivs6XWK0Zl+8CdYkU+-w?b1vL?1e(f}N#yfJ0w`m;&(R+%Dj=vc2W^T* -zf&xH%i#<*BhukcSL^@hnLo`VzLKKzruh$yd -zi{Ad%x%soS<0R)l)pvfHnozer+23KduGgtTu^h1oBs6^o^pW`rwe{%h -zP-gl&d80*gfZ5P-$zkhUvJT7dlyrHndad6*@rd4{%)m4kv;rU4(b$N#n@hd;zVwch -z5dp=2e7Ds_hOINouH3E&bObPCcOPQ^fa7P1<3Bq~Kw3yaI(N7+R6Tl5A=!b&pxb{Z -zmAs&^+Ds&CS7IP0w|YCr)348K!>AYcJe^=^;y_~=cm&fbe#Eb`9({#%JtC~>7ZYC+ -z8j1SN2v;;}yDHF~&X^J>apWR=e>; -zC>p7yr?t{g)=~Ynwg>*dtDsU_TSm0%Suy6bK0})t8P8QY*7XvN)&%mIaj#c(_R?zx -zVlaFzyo$zHGaLyybIM~Ho=W|SFt$NRbu{Jp(#w(b@r1M8C)zXPnny~2D@|@W0R}g$ -z#hMp(t79+V3OTmOSc1_OsJfdofo~pJBRZOQcsOwtz$CFQZXNtV%tLSb`F$O6x&qG5 -z0*;C(u5Ru`7rJg7_Ll{Tm~4)k%13-1ah|1^`}6MM=_b-Td>jqro*jpJN;lL>3(a6d -zib8Kh49EqhZUR3iJ2sr(JsCD|Nujm+xy!UtlUk!WOyjKc=vuhuh&WXMJF8Wjn%5Yu -zBUR;UB+bax$1a)+&m5>%=o38iMPXmI^O)zZd>;3q#NQrJm1dY0@f?PZs-F8lWlFHr`*G`_sF!SO}O1vV`X>Ev+zjVW^x`3>G-$ -zu(;0rHlCpeC*ujL#~G?9(DcYoa|xGF*w`e)<`C>@(vG -z%W*2+*=;i1DR=86(Yv-Y|b^FXISUmo;`(yYU8wR3`bbn&(OW1_7*gQ7)D8ETHB5#|fFOe_vvM)voupvNIf{9z~ -zMqICv^3)$dDZ$bScJd(!$ON!gh_naEW^4`2&8eA*7L+OWN&;rDE8|x^WHQpu()V&W -zf%IDNbVw4~K;!AoIM9GCeX)d%5r>)>ZNXb;t*&CQnr -z;dLb@f+<7V)E{|aXHroHDwJ5UAnWT?CKv^_=i92xxt-mo4~NA18WM9E$5{)HQSZ># -z76Gbej_E%-N!@Q4VULJI<{ypChTVh^=2zeB -zxIc~IrZlgtD<_8=fm%bBOHf{n# -z7q(tgU#*TB4Y5&GpgY`wn%u9UhkP_klti -zv$Hb7^-xj$%glywjAeaJUH9zV4u`a*Z6iIC^O^{a(=inJhIvBL9z>aP{N?>k|PinZc?$Jgx -zoLVESiw`5svPjM86w9i>A_L)Vj0}5x|iMY}fSlzz`y^E4v@H&DuQ_X`x>2<+kw# -z7DipQAuQ0(6=Rb0?sMD670Z+dA=ix+Cm`upr)K|NOct?%M&VEKNs;g=^W*8l#1oyh -zCGI;1NE$uI6FxnC8(@>VMckN+(0Zb%Y2HuKqWC;6l6)_AaJ`TMBo&Ks4H7S9*;$PAlcIFF5u -zpLEGW)4ZC4mUo^AHl`9mv~}a;o;3jIi#WKA%1Lq>QanjzC>}>%iGCTggb9|V1m$9P -z&GpXiOo=ogrq7SE!toarUc#AD1=oFJPf_`=S+?B){nl6uA&a^_A0kLKo>8+rc^8IU -zwUH&iB#T@n^`DAWp3i?k6ldPIT1UmSAO0#gsXK#=Bzwx2e&KGc^iv1R<~VRW5j|b^ -zg04mvGc7$rpU>cDH@A-YvCtxXsC&k9DhxHLYRRjqQO -zMpWwO+pruqW!Z{R0yJ8ZV**vWBZEA*H8($S`|Y^-ib4B1XNFn!sIV>C+QW!y|6&Ul -z{G&hB9vjI94J4^*6|4~paG8JIdV=f@{ji5)Io#s%h1~wqo^Ywg>3pIdxyENhtLmzS -zK+NA90^WTsSW;a|uHQA1Q>z65*akhg5lxr^Lpa?&CU+T#A3QkUTPBbgP?ot|&h0Be -z)|M=Tf2}lOgw`FPyXM@0TyG$}Y`B!2E+jVVI(15w?d6xWpG}wOfm7t-*zoNz>^Ajk -zqC$8S8vM324rU@NEJYZo3kX6}?1s8&jrXY~u?#Li7HSR)qbNJEt9+264Yt#se5}3i -z#nHz(<*}M)p8gi{D|P}z@xq@-uv%f@3~^{L98Za7ar+5k8uyrjs&C%ePM!h;j?2U2 -znLf~J2}^3v=rea=^z#1&mM-~4C?wHSl^B<&4OnjFH_^}0fl#TMEb1MzgvJ8(K-H`; -z%A&<}Z&$%aPg4$y92ZX2@((?b0Gf9_%w7rA+P^laRwGcmFCykW1XP-h!-oO|Nd>8m -z)ocpSGQ2#-LJR^7dga=Mo{Lk+Z43}QJV#X6ze9g+x9$1@=cJpDvM;zUm5m(X=guqp -z>-(@Mvx@f5_(p50RTN3~s^Ah6rQK>hyzC$k5z>93u+6KL{ydG#?d1sk~Zx+ZrQ{9(^Xyx9NBqR -zPyfyMy3Eqy`a0s%Hvj@xyJ$b%eAvN)cvY=>+k0&01QoPSL02N(iF^0W3#yj;MMYCV -z*q>|$>xsGb6*kLQd!eNtFsztg=Icj|sH21$&fI9?CJA*1&ge$Ym`^BEVZ;7Umo -z*CI+6p<9M%k|?n}qo;6D(X+$`T6K2D^%e(3)s&-_2LkUPHgCHgAWt|iDN%12(KJ(p>Q4sfUy(=0k1&BXzkE3(F}Q_4yJqRDc^ZG_ -zZ<PDWX(WlK={E0I5*n^?@?ZbxC#=Ea9a!&&;y_>vaFo`f31nkp4_&4CI -zw9P^JAs;7yh0{jl78ks4i$B-iZt4BV_(6L!<0)i4t*xcUB}G!s5F#obC?O6*MAs=3 -zt(lIEM86pKcn9~XU5X_{kH~N;~L&J`^xb -z_#ru$dA4%jI6MIIew1vX*xSQLW7Bz!?*2|MYkl@Am|R7Bo^f>Fx~e*O+eS!e@wQ!1 -zTUki}Y-hs)GPW}^VR5&yf7?z700@b?+k?PXCeA=36Eh22VT#k{b_$?{u`q=ew=$cu -zy`+h`g`B6O$$L)~4X~#bnBSN}R0L7TUEmGC#>5!}bhoj#brNtFruYk2;H~{f%t`_L -zOU2nrm_l1w4Jc{nXaeM7;bLK9mUg#r<)9Ej1PVDCn+m8)$^0GS?Mj%!+}YV)fR)wF -z&5gy4lf}-_jFp|ApP!YDgO!7W`Avh_$-~wevoHn4TR-q0@!8lbEB_PT*6Hsoyz#;64zg!uXJKQtv0?pp3nyo3*Ef*A2lRin -zaMF0&b;+u3;$-LI2sV*+HL-Q3{C5ar@IUSCT^z0dO2-(?YGQ3-^QP+b=9T?FT*}HT -ztNqjB4+UlxHuis6y^;MNn$8xc|03%@V*AtcS33V5$eZ~;asNa6AG!af{HCR>EFfhE -zcKH*Yyp%A-AO8Zzc3=x*fxnvE#vEW?FgG7Fp9vc;GncV3Co_nh&y*R=Z)ytSW8*Ug -zaq;{cl)SBzGsqTf@(1b-oWWLeW#*;R51n^1>7xENuUhs9A%YP2UWJDU>X1 -zUEKfGp})I?Tz~ca85V)J -zWZsAc{i)M8fWPE#xd=!)nt+_`95w9htc5B5garI!`B!-Zh5j}uau!Z+8XkWt{_i#a -z-o)W=SAV+&tS$cP0s{XkTLBRGZ%&**t|rERIeN4ETNl_IWNT*fc7Ol9p#CAZ_`eJm -zh}Q@V;xy%BHU@!Bn7R1a-v-Obgol}*?Tu_sHg516&Hst+WM}H^268kJH+#$UEt|Ij -z`YRhC-CtDF|EIQ_xyc`%*f`jk*?5@Q`83!#1lZUFxVf3xxZWBRtbb3K_0L`XkBo&_ -z|391v{iX14)4-eE-(+vo%iCiVf^|$nOv2P%E5{2PO|G#T4D0*T~ABQLh)DBZMBh8ARMQ19uc)Iy(F}1{Qck+ZcM?L_weBp?9?*gwUSg;ssjr -z!eF+JG5uemDp4Cc{LY`;;};ND{U(3@RGUGe7pl6+rO@D;E3aY -zfoy{pf*Ij&X?ZiYyHA3DLbyXvLu2z(q4sM5@z42On$uh|7`sulwAy*8g6T@oB@`2= -z4V7wo6IoO*T2-|>y#grx&HNS7ST8{k_qswN@TKCpYTCHouSAL-YjLL=-@pe19{21T -z*+ldRJU)F+Dc>kM%7P~XzbbX`4`T}5{f4GxMsCYRyu&&B1axp8L_-=_?V5ysg1F;X -zgFD;z%NQJ1%^VhO@k7ON3~u8_3lv0$52fy?BL@+gmrn&!MZGq14C0)| -z0NXR6PcF)St#7W8gw>993MWAD0yZJW^cIG8EA+aidYR!N7RFc}W<{er$U#;mUlam1 -z&Bf)YujOU9;jM>*$~Da8nX)&(9Vm3-;L#*=cW#4M9nM!A8P53Z1u75Ea`~*qQS)sH>ZGpf9Wu?K@bGLM(i!%Fkl>TGov-S8S%I}>T#MT -zL1P2O*5X4XnMx*2FU^p@8DT78=iZOFDw -z_kd(!Ee97+@2vNr|53K;(In4|B<~ly6i2qG(;OCyLBni*ncXVhc`_1AVtPhaxk9k& -zNDW1#+FG!`1ct5O@;awzyx)FX=)~C>R)*kB1Fc+GTsP!JNi-V_oj_v0$hCK9;b^LcuYc6$gvDv9 -z>l#VbjUwGLmO+{3!MoP;5C6KJY!PbG@VhT3m^r~q7JBFOV-o-WLcp3$l6U>P1_Q3W -z(q_dHn;q?vSGG&;e^znJW9l!h%OLQeCoGS7?%DrYm+b!%%xeQnJeO&i=Q6eK>&>a8 -z;GZv_&WXp3VfM^=CQYm%nFuir<+_Zk%?H14+|Ag -z2f+6~WAl#rHkNR3hC6Vx9SrY&iS+0NyyxOYOrKoCKVS6}&u@Z%`i8?VznElvi_kHR -z3ZY;Bdj!xs7@ohOhLLoN%4y>)rjE5Z`#8AfLy9fCC95|nZhu_z{H78_?i}w2AnUng -zj~hRIhXv&Aam@8B!^yx&c!|4m$D;XFyysn0STw(hsZ(m1IIfziszl(vC`0KgsTkSY -zMtb1Y;I${7-pl3hpN#_SOl82U3e1&&p%KN`{x_3Q -z&w#dW#g2B##+`~sS4-}HA##Zoo>Do{`&|O7fd{;wM}gtPF4o`1QH`dPztf8&ChY5t -zmt8cG6W*b%!^H8`w6;`W+oEJs`-hYu3k9-W-Hfzt#U0v-WeGm^tpc|{sYoOQU7Iha -zq9Vc2j$I6Hd0eAb#<`wa=W_9XXaV_;PfsG-)5(8bKLWtTD+HguC_!_*h&+_$#ix_1 -ztL3JjKgnhPz6F5WzLH?UR4X{Ik7oJ&tsmT6+T`fxrcn;76i%&x)n=i32uK<;W&!+&McEB -z)?lU65sTxWd)?OX#dFS^%fxz@apPX*<6qgyjSnjBSykj4AG2A$#K!iJsiB?QX=+%+ -zic@ERCm_$gDp@q$iqcTRz0Q_B`nCC!peiFGLSB@i#ZiDzn!@5!Thb|LsTZ`=3+7F+ -zIO7=j)J3qjN3vtDV&g8wL(fYd3&kMit^3Kq*MV)o?Z9oo!(e1a4-3efc8mhfN7Kho -zpiIK^%$2QNc-~Z&E^cAUq*{_mE3#?#c_?tR!{mFq8E)H2VQ^O{G+r!$3i(r$M~545 -z$F3nJPpm;ClY#Z{ktKi~?S|_!riSYJG?#y@k#S?!aM{1Cr!Na1{-(=E-!1vbISHyO -z1^J#$pcc~9TFcTI@a#rdvq_&vD#N|( -zQR!KU%e=V4j=$mDv&L}2c~d#^h!!SKtj6-7Ba_b*7ZT+;@r8jQvYlNNySGE39U;JV -zqE^79eMpb`F>zEVAe*-6Ks}L82F|NO=Rk^%et+oODwI;#sU&Bfzl3|o)bh_)u4468 -z_~C7ejXNE_^pPs2%$tKkpe&1AL4UTbTWOccik{Q9^u`_W+^2C~Ft0ol;|KP_bRWI- -zkV;1v{(bru#n13NZYWrm1r0TVqh{M2HQVO>XDYVtQ9S#K8$bA3+;pXsQaFQyWIH<< -z-n$J|=t3z??VyZ%WS+UtEd(m -zyP}$k(W6$ -z3CI<~i?6BF*YCRFdieJv2{ZBnouiR1I7Y0JN@yabBaQFz%(W?Om1)7k>4F8*EG{`! -zv0GhHy-6|OfElV@-QSWC1@C)F2V9#Lzd40k5`+$E07RUd%^oSZh{J}XKcl2nc -zO{pyjuFb;|VF0U?BHyotqR_bo;q*}Sn6&=pDcN*Z6vgskRonZ2ZIxj8LU?EmTz|t3 -zzVlUwOez6FAe6$g^k-ZJvnPeu`Q&43IqTR2N0zJWHlDWq!xbkx+bHu`RTyf1yY}sDm;=jL-igYMkOXt`D -zZ3QDiCog{MR){v*N_DjBc%rSPavZ3jeJr4h}K0dpARyo@Zp&8nV56aGh)bcP0~|f9*r1 -zzIL?j=%!L0(xYUksTHA%F)*yS(eIyc|#j&+UPuq&e*DBik -zpuP&0%(8-A<>dRx?%hG6s+l=QP37#9Tj<@hn+KmMu(wkOL|0v6aq<#7uzY?j;&0g1 -znqP751K_a35?Qc4N;|1Sm1gEYG!l0fz -zQU}BS@$##EoP6Rq>`XQ8AQX#Q7^T$zzw`{7n;w*GX@{@=Mv_T7TyS!NWWp10nWO*Z -z2Pq6J!AUk#tZWY4^mojGi%z!57h^dZ1=7*y?=-elQ?2LT$uQGyLfJlQ!TV3ryp%|@)Da(J0%aVk^JmW$`{aTbcN){yrBNS -z&~%soGl@bQxDZ`GvDEy-2QHb!r5DX$>EafuDie_yqMZAq6u8+e*{&{f?b~oi_5{U5 -z{=>Jd@WEMDsVin1u9lQqa00&_gTfKBRHoapVTa`O&pMt38O6=NI*q=~TN&E^bf8%S -zm(GT#*1Np>b74k(**v)9RGV?lI{5A%Qarg<@&kj+IBz2S_h%A}Z?VEyp^QuU)n66) -z>D~HsFa9h^b%luJOM*Z3ijoAjtQH#BsE{wrZ`*k&j+()`BEBYDJ0{O78>p{WF -zgpLDYQz$pIX2DO)S{EF6WxM2_XC$|-ima;ye&cx@+uv>iat!eQd9elnvu9NBub(=C -zmCMJ|+LDQ0QJKJ779CCVXx~k-cN3sWtcuTa^${LlpiGz+qV?Ur09l4WN);8Np{!y@ -zyJG7e$=a=oJD*VO?%DUvzVyU7OlVMaz4)g%ckYGMdzPzaC`4-xtaP7iS$UIDVmE${4}8W{bvJQ9_wF*Th^mQ)vYPMl|Ud -z3D`ZoA1Wyoz{uqUL&X3Rg#snm)g^g&wdC5nBM4aDgNMHXZ2DUlkSXX|?Q{L_I(kVh -z|N5yTSiWp5)gIj=PVorV*mcSE^pWdmBiFS7C5t6Vzmhn?(5S9a!3R-G666D9Xvh7{ -zoG-%8cFC(dB&*gbZg^0Y-E=1$V{!V)Y39#KGdLu~=^+Xm?=wF1UJQiV5D*y?64S~E5t=CFT}aP> -z;)!*VAKjrC2no~j`0+g>p48g2j~Z30gy{9xKAC#Fmr;%_!cW@BoWc@hGjs#b}C%N1Sn8OGKO}=BuoHOssLqctQDMf -zjLq@$6c4YF{P!OfMM=VARa}DZ3vm12nt+^V3J1W~zVjl(BSn@k8_TR2^&}F)d&r8y -z&@j1<4o3EF2B#;YvHX0454XCKvUGBP1G&-=npl8uZmP~c#rmz1KR+k=&7aFZ?#4Q} -z?BWzhEzU4~N{aeA%j-lUwCkX~0h$_ZPCmin&yPyhzuF55Y9>x4KhS}42P0ZGk%$Jd -z{`L5l&WE7=TadE6wvKPw?*8z)weUhsjm7*qX%@^)bJ2MewFLFQDgd#e$rGE>_}GA6vi`|2U5iexQqc?%u>#zQ38heQ@{v9o&6? -z2jd#yvwvrC@{u;RRl;A(FcBxgvZJExBSKPY?d^XC8AWt_41aHrV)aJJ?T<_Ddb+$& -zoP2`CnJX(;Fekg3HAj|H(MYe7qWZ}F<>|}zvN#m)T -zG@kt65ZUftvYl<@`?jGx=+hVUWHO|PIIdwG%D6S*Ug8F(3N@56wu(Z{7 -zsp0<2g=}Bk#H1sS#Qoq|)NI?yrnNiix$yzipe9jei}0h{72uMxT|Rh*VCig&8T$|x -zRSs-X(SSx7?sPn7;{U$>RhK&-SKRq(^!$rQ!Krg#W-C0uGZ2szn%Vv1zZDB|J@9^j -z$NzK&OBc5Qkn8DX`;&iS)jG+4|K8;#1Mi+a9{%-Gn-h-+YavXIl;4Ta5@BM>ks(FG -zjlqR`do&Dt=M$3Ko>2RYCr&;g!_4U^Mz4O%g)E%c#K2II!J#4p0|iF14*9%`<4SUU1MJz_M$dpo$?^rr=3&DgXspsi!^#ZQ -zRSBBwp`k|i?ro^iN@O?-j#S>-24KwXYs*rR7NPZ^6p2(y2kBCR -zay{W78l)q18>HJFm;Ca<=m}1m49jQ2Ks6eEu&h&qM#7I~=8Kz>@ -zcfPRry{o?dyUm2q7Yx9RbRf -zHek?LLqGO7CR!M$&Z>dnsoGLi~oHUCU -zrkOf9MRk>kK)j}vQb5AvS=pB7;sx=Bpy;RoDz;*rB>#GzeIdsOKR)of7A~EFR7#LZ -zLtPCtHwkL0A(<4U(*nm)6bj(F$_wfR^|gZLCX4zyi;9e(s?uWlvI=Udt-yl#g52%Q -z=9@#OvtDJ4RJLJS;=zt6O-~g%`xx1{i@vAVGkC|Ul6x3a4;P)HW0omnERu;b0^*r8 -z<#_-deTwVvmE7@c`23d5hI5V(jIRPWr}kOw_QV$WQFs}j^Qb9@w1E81^9OnSPiF+Z -zX_f2Hv+5QcM@FjF{J?wFI+v?|;B^mQg3akCrGhBPjNb5?t|1UY*R&@Rg5Ew!Wn~!G2vORj*9^4v-u7H0R|T-J -z|Ney6-C?h@g#UN&BzCD}X;#$qzf>$?qrxD*H#3QH;iff~6 -zkdqd`JCCuLH`$`LLMxm{*0_A(`p|Ru)H#Bci@o4ql~Rpd7kYNOaP?L5`23Yig0&smwvC}}Pif|>;KnO -zTh!KAC7sseoG`};K^YNO#45_~^4&1AG&WA*h!ZIL2NapK2!zZ0j49|50f{9P&Fg-p -za0*`@UQ8i=L#QY-(fbl5B_dK4WeQ73Z1bU66RZ;6Lse2z*xSSK=H2u>@*>%X*F@+n -zmn;`pz^}YOe8w2K>LQzIt>Q2D4e+{#vw&1DUyZHLZtU#JYU{*vBU@0j}f^%WT5< -zgXl{LKKaYw4Sxd8I8^f>!G+D4RUam?T!)dK9i_=2RcgI`g|>XLRrut4WXg{*zIt^f -z?>w!FbSh+}3QGi(1m9a&`*M-h>t0{wX5RqZ^hXD?Dq>8l;KK7#95Fw|v?(c?8|_l} -zFt%CaWWTspFPA$ImX0MXp#$)QC`~BFV~>5UCqnSR$oc#*KgkfX7_-q!I0zB@qBv#O -z>^?yV&jv|L<(=Csj8{?rG}Ty3@~FAg9X*%g`%b6->GkaW&hItUexgM~McDa1juV8< -zBUEr7=_)}*ogmw#6OSc -z7F4Vn%@RVHO%9Gfrh-&bgbOCX_AB6Aea@;%!IdAcC!6i%j{97!Dw~C$Jf3uY1)bYF -z$PHytQlVUlausggLFQeY;R1#JJcZpu$nIzq*w&%=?vL|m5-FVb&ID(ioMFM-G);|m -zgg_`=O(QY2xfyeqJ*-RuV1Sl+2~pPtl2P}|Ctmtqk>4#o78Zb&;g3V_<=4eAkxd?G -zeBlwfpv0XD6QClr7QTOI#R^5rNxNBHWqz+`I)x=j)>YAP`~up4@<-Hgfz_KN^C#I@ -zCa6X{Nva}TJrvZoSmXv=eJKu{I2C@c%c|1oE}C~Aj7@zoOK#5x-Uaa4PtIq-+^{iv -zwtX*7|L#b+YARXkkDGqHBS~C+okM#coOz1P`R7!Hpo$UL`!o$7RZ1lVOBSVBvo^<` -zU6PT3VMZ^VNZt4bT*t+gE_OPBU6CMJog!7AA=6St)r4AV=QdNbpoz*Eb)+U#VbvyZ -z`t!Qghj+ZPQF6z<1%CSLEX87x>MB7)y{%It2+jZiAOJ~3K~#}0qXI8ZMUN|RvqaTY -zzy&YYl1hbvdL)_V(`$^+`s`R&)N$kR1>96N;2YxSc`ZE -z$}orGFM?9a4!KMXkv};7VJ0V)^n?T5R>rc36xsL;-0gcMYxML0PFRCzFc0!Oy)KK8;z^QzdoJ%A5jg#*f}FlP4zm)|d5l -zbU(419S>|kAZVR3icD3-{@<7-NY!Vkncm2lGo~^6?`Bee@>r~vFkSrEQ<8uBmq9N7 -zWET%TK0>jmB38rPgRbiX3el2NrAo_Hr7CTLP#Tj6hTO?~d+Mk%B1yoyHJ6_Z8>|6aXGR~t$Dmuy-LaY3YZ?w_&tJyH1YRfxmZ)trI38!;z^u;?$n?pw9r35u68I4r7)=*Jf$xzQ= -zghjgF3zoJ?H&swGtBLfaYFu04dNkAaPPp^F0_$GMF=3odYjYwnu8dfQh#TZ1S_W(z&4GBE-wT|= -z>sQ)^GSDyO@q|PfRKm)n7~Ii@v!jFFL3r0YtZ;95N>kXORf)J=W|A~180pgrX`}#a -z+k;a)25dZ3EJ#2SJ8{{Vh~g;@^aT%7%COi;2uLTr#9Yh`+1e&q?J;UDyD$~_MqfOG$|a2v -zi*m__`}yV%dTDES%cE9hnk87CTLGo6my7{(Qo`>160Yt$jSVv8Ww$9Ag%IR7O1?-$ -z-7t(Ani!8>nZBN3)`TaFK_y@ezYp9vVeary$m))s3&7S+Xz%sQa+Sx`3Y&zxMensT -ziZGFcRHc67#OOS*;}0bl%cwPvS~jPzJ?JOpYfnprbNXyMiYN*Jn|6gOv2b2GqA}x% -zyCC2-HibzKZ>Y2Qw@+zTOAa_}yZ04Pipu&bs$U}>+212sm!|2cv5dZW2AO%GGyIDi -zioECj-8}f%NRTKrxmu+O>HiKQa(LIpER%w~;szVucR{FLw%zv%N-C1+B(=?T9PA@As*2HPO{Zqr -zsE9TBD<|TX=D*jEY47I6XU-w{eU^TNzH_V -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 -z!=@#S=1lyIyj_(cFKQWa;S4 -z(zSPhTp@~gi&)FdSPefzUi+4Lvjnx(R*Ao9E`nKg7ugdgEy-Z1T4mh2s!C&Mr3agc -z5@ze0jA&J)NH%5yE7E!EqbScmjc9tqPgUjI8ewEkV>EUZc>t7_FA8BiCnIiAvFSbW -zGEjr58&o4w=0Q`&CGyOF^%0uZ*WOp^Mh8fh$Ac8MXE|haF9gaa)O81>^$s*D-3yGn -z{Nt<2{;{DFj-4l%J4GpivX*aUHJy4=ik%cG$PqqCys -zb(tflqNtboe9fi^evlqfly8NXWeHMs6%;0ADZZM;-LjXFEqkb*GudF8h!TfeMFN3+ -z2)HovBF2IWzo)j8T -zFr|}sI8=^gb(&;Dnxe>pg8t`UrF#BUggMJYNkl@|qWgWRf?a2sialE39&w$}(6L{$ -z;lD{KvrN=6?FHAmAR1*B`vmY?BMaIyIHeEm8|2& -zJ@D<{ha-qDSrKklfAEXn3{!|mGs?)O4=1ULXv2orumDOyO;zZ|$)a1^uigyF)(S~z;eOTwg!2s0*#owx+vEt6mITree~ -zKCqGsfg3>#f|6a+tQi^6L|w>Jf9NI2^P3fqys{s$n+@~E!_0AlJDyeyhx%?1uN~D} -zB_IXhY~X)@zn2moeWr)+ef@aGk3ACQy7ad9vFVA&=;$7ytxK}KUGd0^if4_EMK>7p -z=sx%5AtsDVFmHAm%`FldiBd7^L0D*ICyeQ~vMh>N(&98>+_^6xs$46>H~FyB350Et -zXiVeo&^5^;Tid9aKP9?>BaMFJMcYKn@=7L;5>ywKFaXVt(WYN242aouLoHF7uQCNn -zSO`1TvC-_&<+*0=aE{J9pA0_xojXgPLwyETEP$zF1f%K&^;J+?0o4`Sd${{KX$r?K -z;N8IUZ>4~M?&|y@bU)P3-}68Rmwf1cetq3aCXKJAacmO{S1zahxd&M^UDsm&Qm-q48pEfXSMl$H|5g9K)`8u4kec;N`RDfjCfO$Ou -zaf|LD;$~$~j--$gsGMTxkmbAPPPd09xAL+_g$@hb=5ZFkHAWp -zO_ZfV7F^tcVG<3sVJp+f1A={;X9Wm_%of>k-5(jg_qh<8O~5;k6wICoqw56CHF}__ -zAKEAx2JNnb8y}Wj|4?xLb?8Y0yAD`k9mMDQXAc!Ssja=hvoEx9`Y98rsY#N|WJpvs -zG2Fg2KpQhjL1V38%2 -zW0R$PH&99#9#;JN_d0&7o7qg=)FzyQ!$4R6TP`5daVZYvkw|2(OTMj>=64>4unq0+ -zm%hd<{qG6cuBmLf6^p-g1&J+L6wF>@pZhaK1ck-gvjJ+&t-B2irt2Hk#c -z#%xL_;z7PZ69XZ!i=7oTKkNH^fE8r4G0q@`ib!t$omdR9J_fVq<` -z{_`UV5|$o2@P)7R(LW#~9z=XPlgZ(WcUCkpop?8lw82Ys@_Jm6Q+WNsx^fjA4{T@P -z<*oydLoynuuxq`#mCiv5U44e%PFS(054+m9{V^D8|x9{QmKUs_P=6N?vn?kZ?e01)) -z6$K`zjr?B=x^@-;{VuBK8*h3f1byd*o7s5=sWxxLAP(?|8 -z^C10?wNvQM9++A8sNZ%)BDksCu8wG}wx6HyiHs^rLGd{@zU2^QMi#^^a;*Kk;iD4N -zEGWliV9h2rUws{ecZAcTihYCLN22xX(Oica{KLQt8|b?3E&$G63}+r`1u{%*Adx~N -zm3A_`?w5BdzV*l8qDO#pJXfDXSwM>DQP7Zozmd7d>^1JC78_efwiTDOLx!;&&u4czW6%7kinG!y;bXF>| -zJNB~e2RF0xi$BBN))Bep+@7vTt4QUzW$E-jBcRaP%dT(U0Knu%xO7E0GMZRFEQCKD -zSLqJ$3fkHv-?=41;r(Y|&B5NxZxs2c4fv@4%fDUo6n*`=#vxr-OR{+$MJH@#Ee-1} -zJzB~oD-+D|%CWAzdYIj9PINX11|7ldtSD7U<*A^wb!kOL1V~n{`@jVRpmLg~tmj`D -zAlET`KZB8yI-jfDtD0+`(xOVWq3bk;{eTQSj%GQ>t7CNB02u;<46 -z*z$?*G4kgZLrXUv#%*D-ktjw{06yhal_e{pK7 -z1fMuxYtKRvuD@Y0(r_*^N`cqztY|{`e&4K_)AR|lJ9W{Nb%0!~bZc1a+4uZj-3{b* -zyIIM=G6Bf`5uDz^Fm^CdEZ@fuyY+;$Wf34(F>6!SbcrxeVF_feK=+@YyVN}Na -z!rpet<~@qrUJmooz$f0QP5egFSO3M!mGJ3*e};}O?VBenE2(Im6BP~_j!O2A#WQT) -zv&?g~ep_VCx_q#3L1#sKKRYXWOlvb9bPt4e7&1n6FN0i#!Mrjm3N54Kp+NyLlXy}wxOx*CzIZKd-~1hTWKOFg -zLDN|i8MSf>>E_C4ET40<`$kwO6$F}o!U};qoMX=~?$qmL!#PKbp!*E*8Z2X`ijpwY -zE6MgL9*8CnzXY`ZtqRB{;O7AOg5usk?+VtmX8eRmXH2)uU|P$93s!_${b#=!3IhIk -zZ#1);yCp;{nDr8hMjIf@7EBx;W%LRm4#l0v+$HSf&o$Ybq9$?s}R+#X275+q&8Qqg&YiZ`b0i-|3k%LDM@YG3LCPR8FXk -zDiRq*w|q23*miU*f@jkEo?3_8sePkQoUNh$;GQf>==$dDm%&cSu0D7;49B*4NoxL9 -z1q9&hzHa!|f3Id_#6bZS4Rs_kO{L9*VDo4btjBw>J^Krnbr^y))2ij@$|67(=6Q$zGFB? -z$MqVuYN~*D%(7xZB_&9mZ$*ZCCCY_ow@1GI8@`9~w=5uA(4ZX1p?fB1`?6=S&*S4OEQEluHhoovwy)DJKYX^PH2?0dfbb;Tk+ -z@+545@OWeSz1`7tg`WqBG)#zE5+OvS5q6LyG~BA8^;_Ba#h=jr{ab?XPtB}m;y*25 -z)QZWtc_&aHf$;nEoPt+~A*;j -zVlW4{t`C-l+vpafFPg!Wi|3PS$dKz8j+O%i3Pme!HKPBPoINq* -zWtHjdCW{W8w>=iD{nD9HGp~&J(DJ5BDNnw#Lz*75Ihy|aUtsv{A|Uqw-2mVG?^oy_ -z(2JX{twD;{o;WLnrpNooQ_pHG^m;lgn($#mT__BNK~F#u2S!g5mY{M@bXZ>hOC5i8 -zjY*_MrzarAZF?jAu}bnE=4^6GI|P~T&cF*B*?8sm>HFQo!E3cAjArT;OQ@gQLUFi2 -zz9(B|xDLpI8xH0f)B=*3JUZ4~!sy@#WVi3d*{~acOHUBgSBVf;h&9`gUYW13^>t_a -z^moMEtKYmC8~4o;kRouG|I3C=eZeNEXqvoVCzvzIqQWZ`x$zG<3SK?3(R*OuofTyW -z1W4n@j6t%U!$C6hK#$DmXb*m8dzO69UzuGuEP|Ex(6)gr%5lTKSJI%H#7kaFf(4%< -zGQ#fv{S!OB@Ka=)eh!IoX(s%`JjR|nl|)5?Y}YWwp?$mdu1C$0h0wC3TN=Wdab||k -z(^7+LHV5xLW|kH2}{YKx=1fjWIJ -zv?CpPz(G1_4wc_?*FQ#{@4?OewPeV6;{#~X1=>)~WJh|?X{i4V?BLz=b!~03KG#Joqw1Z>5tsB*^E$CTC -z32ejT3n(R$2>Uv4Jv_s^t1og1_rF=2_RSQKy}(w0Ki=II#vwKPKXzc!Xd@1JE+2GO -z)O$q*JS%B*Ry2oY`kfWc9Lh0Ey&k}hqA-{{V7f_Q@utMuF)7Hl{k6e*X-$Q4!#WQQ -z>DoczQ_%6yc)vTGW!KN|V(+(qAB{CWu!zd>wJ52`b&pUO$nW13Nk!2U5O**XkYsaR -zq%UmHIK#HdZf^@+~@2ALs+^=T)eZQS&0~%XQ_SSF-E8N_Q8YJ8!J(p -z!fJ>jV$SY7g}&T=3Wp)hGTynum`A>kj)&Q;ZEU{gI`U6%@LZ}ClRvhIx;ZTfA#k!q -zvYq82-2HN|a&ABksb9Xhw8fB8%(V;rTgBb%xL*?-XOAX8uMnX{k1GZL@2)4egZYSF -zS@&jc*f(21f=cu*Q$XtWe^&XVQQ=1D=yJl&iZL`Z=&rbr&Wer;2#Z~H?+nh@ySWoP -znFvcq4+QQNg34J9C9m%8+KO2bF(n0@92O$!sGLxVOM3ib?{<- -zmYPR$frgs9pV*BoIAkgh&YY0UsH##l>%}e|N4%DRnAvyZ-&QhFz7WYnc?Z{SVcS(d -zLV0de?eU|SaLz0e)hSSld`~vmVKUVf2jynV!M$o&lHZSt!$>Qlq9GuuWaLK8 -zMBdQaE$sOGPXd>$VdXf+tek?Cvb}p72_V|nbNFMkWkDi)^z~(y%_G@V8(h+viC+Gx -z_GU7o4I!YnFT9V&DxnLW3`=1}Yr7&A#eeTeG$pg=?JOVxSl8E|kGLcIdzi|-r%#4i -za=$*^in`;LF(DTLSv8uU3|z?V#m2yQshSp!kQms}d(b9LS!tWp^inG_vTN|QgJH8i -z-m@U~lu?LO!sz`U#w#P6cd`BR*9G^~bml}_mrX?27P2UHyiqu?t^kTab-yh|Z$5=H -z5boH4?LU7J)C@G9F@fe|#vv?$ -zn|H}|4eys*_ge67VL)3xr#)0|)wA>v*$<`n@ZOpmu^5ij-t_f{-&<2@bS1I%JP*s( -zKXyWBYKe&QEdhq3F4o}NSwQlB%$YN?uzDl!-=!pMsPjCR4VyJ;74PsJQ0I+IbB{ZR -zZw{Wti*APKIAcMgu8OKt^{npx7dt5o<`0^im1-*EW);+HQcrv`Ab=XsH!5n|v#UORDaqzKK31`V -zGpc`wEu6rWRZ=Ui-o8*kQb|$bPQ{w6#Jwzik5Spqy`2Rlc(kVPY$Yu0i -z4`|zyutO*}URNR&v^h(-rvEfvktw6`nE}8ns6TdI=w@y2p{lOxpxkV-HeGgO{w0R5 -zEVw$~fbN#!!>Os}x(LTf6&!Z`@@|~~Vpp8!<&K1H7(2%Z(#20>`?m8-3N-fI7CZ2J9I}1n0&U7R=e1$Z{#Hs+H8mV&zvqcKW7`o?~0LmS`Vlu+EDD>wj^yl`Wn*RDD+c|`ET$H15 -zwrc@tn$gVH7Iv^Cc^8hWa2$m((=*a%ARZ6;^&UY>FGqJP@na4pJr^t)1zC(e^tKg{ -z3SU5)n=(-W5&NH@D-=WX?6{>J7JcotuCS6X3?0P)R#-G-8gLbM7)&-ULu=;IDaM^S9V=;* -z@5%l}ChlK*Xg5t;yJBxHux6jVc!W7skH?1GsK`*OqN7R}y8*;YXf>>az)Bbay5)7Z -z@pfk_x-}}_&H@rl`x(_z5ew4y-$Cy2a&0wLLc3R1batUquqyjbzC64D*XS%547v1p -z@hXNbHk`01_^s{P9S7~EQw^E2&UL=4G!Du4Wg}zE-0l#TO*Pg60%u@^o!`GXIN$j9 -z&cUuolIuP&7`JpID~9*<1rWHiOT!Ft%cV* -zIB>gMH*~)e-iV6I=MiV4^yF!onEbGqSV41S!gOg|UfpB+5g9 -zDoJu3n8*DG`(6oBXigifwmfM^KS#Ss%zXfiXKX}y+r-6w8fX)*GTQ$~ -zYfBW}kl3viQuv)xcQX7XNF-Bn^hjhZ<-H~v^*Dju+n-^@{74)d8KDLFL>5XJN -zMn&of0Q8_% -zE809D4pw)VN) -zF*Fjs&u8N1`@en8t&*;Kv*a#! -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 -z?y -z9rg7Ml$Tezo?rURm$oe^D>eAb4<-4^w=&%Fv}DCxFl9hCu6q$-dNOkg*N{B^;kNW9hgtuqu>5{jb_x9QR__|^4 -zdcb1+T9db)pJerlB%MbsOf$+Ur>NX)#|}lGTU})ai8pE;tb0=lv1o=}M`7Cmhb2=r -zGCAS3naEI1;&~M_s(!w*MUZ%0lC^y=@*s-T`t@NTPuyKqa^0`ex83!iodWpIKQCv- -z^pw9F4R>^77e+&2|76DENcjC@Ztn51i-|Q>hw}%4{!Q?k0?Zo5M5^nE&q`ZX6l?$m{u>kpjw_v5mv4%&nM#hy_h?ry!bkg(ld)yT$d=Dbx -z0-2N8>2YYR#!ipZdHvn0IJl-BkrckFlhqltyOhtbo!~XHeHn&#^pM{Z6cQ`T;cq^Z -zNtLPa&9W!lzRA$C#kA5lsKjv770%W&16T6 -zd4KDEo3qY3i|>8!d*t(Z?!W(jKJ>v4kj@H=%VgnS?@)_j>L)KJ -zQeLWR&MKrbLb}|xT7*JtQ1o|vpNY^6=0T*Et9XmwmoyWhm|SREth61s^Vdrt98Epe -zt>Q;aR|QIh(J_P2IBlY~6x%9bjps4SBG?qLMwQp;`T1QcL^-XQ!f4J97wy5I?qNg? -z`d{oMdvFA2APh5?uV2b{E*oOyl5yfOq17#9$TL{BBw`9biPnw8>#K^G0d>#nl~KO_ -zy~o+JXAcV&Ea1{hFJ;DKk8}Cumyt@9asBnzbM3X)0`TZl`e?63BA(^;U)M5yszF1Y -z$=`o2$ydLf;rd4;a~lN}Nf9Ek)<<;&Zq39|xrk{9Vus}77a6?tGsh#8ycXEvhFd2r -zinZqVcjUj~%|G4n(>JkXakYQ%3)w8aySE0-P+m)c4R%3c;f_1lfB$nfn-4(6JI++d -zl|qmV1jYo2mcUrTVy+YU^>yYSA;RtPe!IIUs?58sDWbST*pU;CFDE4Yn!#yoB}UXB -zQKM=OhMR|2>2Zc%+y$0H>P-zqE8^sb$JOULN?*h;`0Y+JzG(nwz{03aQTfhwO#O%V -zv*d;^@XLRg&l$@zBokV}PTPHLw?G#{QN7~aB%79Zjc1=xN@cm^>Z`BjzyY;&pK{76 -zTzc8txc9!>`OMXyrn0h<>#nB8BsQFHY5iB8)TFbZ8vsW+K7vY+RbYv)2k*)_32?G%^h?d0>5yP*5kGFO( -zzNHnBGAW-|jXhrQA!8?NAzeAL`cGcsZW;z=GLD&ufniW39KKxk9MfYPbw?Q#{ECWy -z9s|BC8uXKswUD3)7=HS#3O@1qhgq>=1>g9_H)v{V;+Mbt319iTd4z9&`#T5$b6aBmajPl}zHoIZ*L-=D`?f=KmE^pWbr2({!b=&DTMME3 -zwG{E3WJQbM>I>jU4@kx{Q~-Aarve=(nt{x5dt?;E`};%u=9YF=E-R;HRyoZL2{MP< -zC`~95<3tQ%rXXrcHGL-30M6hj{O}KIAvJyRN(JjW@)gBi!f?4R1R}NkLk9VTt>-+_ -z_h$b0dYr$cB;9Lk -zKl!9MxBQ}tTkag=um0+4>g(&sWF%|O6xg=p+OPban{N6~a=9F%=@D#4a^X29AG)%V -z*)yUcBV4;W$+_z?JoJRkbx%PeDp@gGC@x;1kgtNRxOsC0Nj48T3oO)p`&b^vvXb^N -zZ9qM6E^y;K7BDdY03ZNKL_t)EW+17FP`u>%O~X9DY531RSmhOGQGLeA$H4d}hAbfj -zN?+sznqFc;#8nic6{A}|WryP*Pa5H1T?nD-FER+zBt@+N?y7TKBr2*AIK-<<$@GmP -zN(|(fgGd^bOjGSR1&`KT;wRr_=Pf5zR~di^2<94j{yOz2mBuc`Q>BVZfiZYE177YC -zoO^L^m4E4aPZ~0`AH?H=gY6cXjLqQS5GBb9{^Q?<86JYSzvJDcQYn7&lb^6=rQq*B -zSH+Y@6H~iyUMd)i2|oJ%6c0V2An_kR3OxF%s5{r3h#}S#@0;s>csf!_4z{P+-!{O@ -zFLtq~L?4?k&h(@i&V!37u4 -z+S_AiSYd5I{H}u?2DwZz@L8~|ugR3AXDC)6tpMbP%#@jkbG}jVIm4@d+iiIbOD(j-S -zPC{TzYG2g>f^eQAT?R)qq|9+ih0T)iZI4%%Vw4OZN({`1LIXKL7d8^R9Qj -z3n2va=g()xjF}7%k07Na7K`!8PkxfGeeG-9cF!2APECYvlb!;arr?})Np8DGO_jdm -zRF}vhqJEZ$Ls=B!F%_1}5lLxGF`bmggWBtOc%&$PA{vOlL^4?`)EF2qO%jhn)D%>e -zsD~c-I?uzh`E$LOxZK)t+!mwkQ$4m2Y6PhA}(9IfB#k*oH_DC{HysnI7 -zV}+lv>l|73uzLCxm#o1oQ?-u^qQhKOb_Y@VgOtioz{Q08!Es#OAKmYST0a&$a72p2$w^^}b1@q?3W5Wx3eWC`TrFy~b -zlI-5ALdl94T((ju^vx_{fp@Q?|FE32`Kn+Yv+M1IfqDH?Os5N>l^RLJR11`*N9Wi< -z&p%E8`>tQ={zBgJXR(Di)>N#V#5lBtX*=}Z@|c1}pWDND>ygRLIutU=NoPqzBfFBK -zLZcS13o(hVh5Cbn%ep-oNnUwN4P~=}S$*51B-QlD%THAz@t4N>`9SLT#Et&&Lf0~H -zUn$m^7)E)lA^zVw;Z!W}&KmsfF7k#tlX)$IYp%J5`Sa&<^2sN2&t1Ra+g~kZ`BH;) -zI?X3O@d;L}Sizn>d-&jcVt)QJ8P+l~D*3k?RVaDRNsvtFu(+GA7{MIRv0g>A#LkK6 -zL44)~U4IZD>WXw4Zb%+_C`E15Elt5q7Z#x`Ljl -zfhRXpws5AFOK97tw!p((b7%>1Q4X(d)4~uT$XK|4C$+X%d+^xg6h;w4v*SK-I~VAY -zC#N;={zMlSmiz&OyatrHpW}L1N852HAX9n*?tPY&s<XWBBmpAf3*P9=-rhWj_qDM~u*w~Z8TjoZ -z6b8~0m!`*SWoi&iNdLp#g-614Lc_N`O}>A)$ZJf3j%hKwNBZD>j?bS}oY=e963}r9 -z%}~@q9nV0HV^p``$}KxC*>rTtEIu`5kPDMHBV^vs*}}C>Z7Ndp7>*NMvZv$dEk2)> -zop7sa -z1B4+akSL%ThR%2x!XsojdDqKE9(9;^9RG6M1Y7@{x>}Q!rx-{H2M*?gD!zcN+jCs~ -zw|$&`K`+0#WdsQvY%g%{L+bi2I0 -zovYb_c(zMcu%|=uLQS?c$|9Im=um86 -zC}!N?r1gq3rm*!OnS))ypBbv=aOB4O7=7p^x^80EM(g^MZg9XK>^8P&-NHKquK}cPbe3@hxE@>0?di8bvJe -z`gUD(VM2(IPWhiwdI))tQJ0t@Dki1(^h2y;FdphH;!@KR^Z_q-ZoimHR0lqE2YU1E -zBYfd2WBl|NIX?FfV_bN}0N?xRAO{W=5F(JI*wZF?>e&om{^xOGi&9K|_adzE0&>*h -z;~$Li(w3}$+{;%BqFP6>VW=T0+X_NF>8OU*W4#Uygx2By6VX5b_WAXP{;KpA1i+~$C-~NnRX$c8gHvV*zuw_-`Z`YFMZDbgSSo#%4KD@c -zI6c6~i3sxo?7*Gu>g*b$WoEgSL>iPe%p`qupF3I^Kqj8#mMjX2&tE3E?RoV^=dT~6 -zY|$)?*hCdzzyFDlj5uaIXz8$W7E9K)u=nXBASLM?2dFyzB%EBHftw$pdU_cH?V~QV -znkP!Jdt<_gonKV+EYgu7h*&yu(vsDmNI`Ji0Suk|Vb8uinXE%TuOycX1$EzIF*VN- -zF$IZ)ARbqRws>3+j~VK{nEF{PD*VfEWZ0N|L`>^W@I^PJ2U)|}XT*8td8MRVwXA{E -z!Wyzi#~9ey!L>geWXp~MEi(kI2PK&-)Lk-@XnBnOXOCbX&2#lfl -z_8Ee8z4O67re1o0PKNj5ov-GCezgtcW$&A|10$?GeM-nnlsDIr?%L4KX#Nb)bYF|=_9)n}ek+`c<$?N16t(c>4A#tTfDTZ<79IF_XEkIzxHdNG;9 -zJ;<><%iptvhkvn2iAs*=Caz|2j3TYu-r={e6!#VjfpnZui1nu|#HTgYT*0?~^4}Nn -zX>Jspy40Yt-lU<C6g}O=UD)I*+j>gFJA18#3*lchsPCRwbitgACqxghlfNtClCY>JzGYwV@PN%oeU5 -zVUhPTwOiojPS)fPd?2izvH3(ckQcpgp5Azr4_-Mxw4TcAE9r1U9_fU~%KZXXQStD? -z6@ptfDqV?=AKgM~Nej{H)T9ZoKKm?$l2a3@I5M4MWN4i7x>8oZV=>R(w4LlTJIQwS -z`_=U+^XpXeqa$6SHZ?{ow3(0zD3sp4D;=znF$#le@&h9j`iIFK?I+heNcQDcoPp8f -z_8`)6cr9KXU6PJ2TW!n7c+H+JSi2^|^yUclbtd(-CbiWjl@%uOxS+n)h5M%Nr$9y7!`Iz0IrJP{4#h>IXhzxD18zWe|3RFnr{PHA-+h&a;9 -z9T)E_KtrYA(-#PSbiYInjL~)b6HNQ?#cn*HH4C9fKdPHo7zU{~uVCbkXBap-!qj$* -z9p7F0Qx-C@FQ0e(-C5L4t8~4uB%3cF9L0TQ+YXK`u`QeYcmbTtzxKk3~4*`+|)`#t>6b=FK2kf<~O&fI-l?zENofE1_h)DrTNS!o`kvpE@$nI{IuA4*6)JmqGQb+sdUV86&2CMBTD=%nq -zV}A*zLA1PdBBh4_dvu)f{hf^NI>^ACPvP{8yy6;Puyz{F^XsW=t|XR-^2;whFlm%l -zd;<(aD5WyZNTVfDqUCY7T}Kijj_I?j2plOfMIeth0U2`~q%A4rEUdgmb~H~monv%x -zoPo{}`VI|oWKSRYvB}%cZ5tkZ)aJoQCvM|*SApK&@25{dd_f93qmChaa$NXklh1s# -zf|3%!$37cCO;@fJM2g1tkpW_*yhYIV>l}kke=HBr9`^rv7&vgE8_2_+fo$F0A2JYt -zs_FF%?B8*W}W>_LF4QiGVX9v>Mg4<5;6ZUR(hQA*24^L*un50o;oHPRoPs^ -z;xlH^FteJfhH}bkN-$%l3u`;%^nUDP6&(EC(`{=pgX_pU4z}a?!I2PxyzRJQWtcDz -zDNz8JBx)D|lZh#mp_N1_sSK;`dXBe{vv3Lyg-n6*ku1Y~qYQPWIlQNb_AR}y92!c< -z?o#bEkqG?lH6>jB)-oa{{N(x}_Oz+WVj=PFd$JHV{{;+W~JY>1X-{c -zYwKWW;|>OX`|zZ_Q>8UAmcDr|Q|HxF*_fiDrW7eWrPp9)-AisG@d$<~lq}hwP=E5t -zs)Zt}mTAX7mbaj7H&5{Z4#P#$48WEON;fsZAjgpyz59Ic0ArbX~Bh+8Mj?RDi -zEv+xKGjnkx@kErh?^?z^-+vZ_V7Pk>GnU0DNsv9%P3MjG`HHgoYwF?}mYmr_)0|qW -z8q2{{3A!yE9Iw!cmJewcBn_yXUdF(I^q({kL(>s4QYLmYnlkGyUo>2&Qe%nWz -zq&g=dP+^#lLMciZ)9={|?w6DjTS{yomnrbj&sDB_!PTo-c=`;b{u_@_(NIQZLyGB( -z8d-!R!_O6}n#vhC -zkPfcXaqJ)WI-aw)Gxnq=XRiR@(B46iwAzRk!ajx<|)lCa%&JVRL&y= -zL}L*u8dFqFDW~PsX3n^5Dd~YR`j3uqU|T28-WC*LKe|rPQm@U_IABE7=HXSzr7p+j -z*RbTIk!{B?bZ0~1)!?hWkj>Y~K#l;{0HUWi&ATt38w#^xB{7a}-~Hz|vIwXu6HKp# -zr`-EKvaOZMHA~c_otT7wR|w2x9HXw1(Py@k8P8HTy^50Z1a&j2IJm8oolhL1@8D1f -zv3k=x7xU)#FXyzkokZj88WLr3RnU~df(wf862tA{lM)P6vMhw6)wHC<&f9eF@27j; -zAQl#*d;1xB{3xT_`WfFnM7C{&+@Vnlof(`VOR=}-f=c@E(J{LB4bZWzheIzNW#7~7 -z?0jTDTkqS;uBY0_3}?xW<&loWjGLGd)n#D2p2HLZ(=b9jSK1tuTYm^T0QPM>NLfvi -zni=K1c*hdZ9<(L?i(ZF2(G6r6I18B7*_GqM -zbDNpcP~ztlX2fK4&?Y<77iuz`fNB*p>A02F>2)er-PR6rXpGUWJ}Or(#E3`363|+6 -zV{*n63YJC3{aZ=ZCK>7-<&N(@#dv>E6s(?6#@Qb@mGeHlirLGiQd*e|SLwA~*4B1q -zL*vx)e&4cehPu7jvX89pQy&0;^!N=b3|y4UJPXrGn>g-$AlG&YM55k}VIl -zGB!HS>{F-m@D0zi`-yf2x`&x{auXtA_>3j`VAjiz?B%iFYyn_aHC%m>L8>IU9y0=w -zsBpDIf+H1>)&XvT^LYG+lGsw<_WGD%5UoMv@sg -z&mZFcpTFRL)@Lsk)Rb$?j+!?xBSF4qm@+`LTpO{DvE=vlKrT4WZSJPb>&ZZFMN!k& -ze*a(h@E2DtqrhFvlSA3fioXV_s!C#3J$$l;O% -z(>`)BMm!dp&qjbOSoGYtf$s0$?jLW?X;WBv;Ub#n)?u0kw(AZ2+M`r-n8ECXbYt(J -z7fU7Pkj)l&@|Q2N>xqe-)=f)lXj<4n<&+fVHKmkPB#4#8h(;qg-Z9-B-gITGEyuwS -z22wccTw(?#@q|x6ZA%5=+ETLOilt;na*XwjF?eK{u6=#9zubkLb?9#!;pw)`2q9Sa -zu~TU|eFk<28JA>-vpoB&ElTTSYcD-+YivVHEjim^;hI@&x^ovBZdD#(<=Yn1)z;63 -z-|yh0wX;dpl={bO+tSJH-+9`<_J6!gFuPGqfby+EFa#wX)yh5@VRj)iG5K(0C^-lC -z`D?X^UrPhY0@ne5D}e_eJX?6a3#NojI!7T> -zAeU8Q8&&mXYJ62nB5r*oA`E&D3?d!L>F+z4jlbQ-ru)?DYhF-K)DXl|aaO(kB%Z!u -zGr|zmHdW9#tA@?@?4#%K5Xq_}5yPN;XBW4A{c(Q*{PkM|r?!X*lL=lcz9S`u6j=Gd -zbC?ljG-edC>B(zOhx%c2kb7(ao_ehovB_)u+68J -za?#bNv-TZJsjN@Au{r)i_bcWyO!#a|shwBwv^{jnmXc^JLd&XY%sp*7Q|8uE(U>Bc -zN?=Az3bsPHB8EZEb^^m95CC#qL-EKB^m>ZtxlExDG0)f{ZqgkwCepr`5rb$VLP>do -zSb3aORgy?Fg6Se{xDc=qf`gkn7)xhZ_x|Pd9U0{CrXE&Zv6xw>Hv8lgkywPCkM3vD -zIkT9%W(LW!IE74}R6`k64JkTycXRXCf;!z_o+CJSnaj;(iqPD@rSXRO9a`k$8mhv}C-$H`Mdv$Dr;k -zveydj#ju9Z3`#&{nZb&AuyLnkEDxEj`^k=sl3FyAj$b`M`mPPkUDM3vpIgV&d3Amg -zD2hMOMZXFf%r5xDY$?exZ8Nj(`2`)HAaV-mtOv5W`+Af2?KPw**{(Igm -zh?Sc>|2RAVzj!g!TJlj|MVg<s=Aai)9IY`gPb-z%7r -zpg8DQfe{#nPz%8h3()$*e1_mqm&4co)A6UvjJgy~Z<?5uSm@^%GYlL@ -zvg64%9{Kl|0?)BtaQ-rv_)TaABET+4-w>oDF-(COb@>SpC2NF=?|WuHfJ58zAc)J -z6JaSq%1Z>xXA5?X;Td2jU3@TXgru!L6I8(J`#Lb90 -zri+%@GN3+{Zk@$nz#=dXTS^>9`k|N%EqZmHHjpTbk*G}iVW3y^^ZC{vQ;**I~DLuRQX_I(GIf)TwxF{kK3BnBr%94VW -zErRX=iK|@3&PVssFtdWXrpoXG6Gg`1Edq}=$VI4pyVaTkJ!msu6oPr7PSjM3du(8w -zd%yn#y?Yc287+yh^sNh27(_s9Q4)S -z0316>L_t)-1L4z -zKi)rFCRp7fLeC9%Q}MMvJjzi=U`CXeQ642c>yb-OEDYKLez^gT1`X7ob=MVd1OrLC -zh}qcy>Cp`5oju)8k`rZd(t{S`gS|d&zlv2A2{Ufo8k#P1!ik%0gOyh|I}wFbXRG;v -zU7hL|c0SXN#AeFuTB1?YU!0ClD;hjdsWFlmlN1UIu9pdtd_wg8p220u3p{e&M*8=T -zu>4&M>DfC#X?=o|*3b3nbtDQIGdzPqc`*;d^}43Kh3kb;j(cvNN3dN;+75+k5Oo>w -zJwx)0&O4UW>N%drGKJO&pwX>5QqsAnm%G3B1U-9HmOP~lzIKIR@l;LC%Dq{J>G5^B -z&(aE_18_w-?QmVhv7nHdWQXm5I|FC6$qldM8^u5Xo(J9yRPWe5!jgp*%%2l*(Uw%D -zIJ#qRFaxc-WQkULa9y;oP9@xN%wT3fN{B^Z$xOkN3fSm!&$aLDrG0M~Q)bsvQl9V| -z{Q@~b;cMx53&e69-?QL{Gag*47P87Gq#xpVi)qV)d)W6_JM+$(&dKM`XY0LtscWgC -zW%YC-E^I8NbVE0_P(7A*!~40PDS1i13az4sf#s+j-}82U!Ob;l6(*_Ah!`qgDLA$( -zXApQAuUM##Yx)3#9wz4V7F!?Q%OgK|p2C>g?$^wQ&t52Kt_sMeh0DF=^LM!t5`JQC -z5F&>y$=BZAz>#J;P69DMVSe$`w8@8nga_Bl}u#B!7Ms{rxv;~iXn@k}Z!6mM@V -z8N;#@q>py`M8%<5^`g0TT_IOGZacIL(c@wWm{}({Z4R_`DDI?@-VB@mxQ|qAlA7iU -zBBtr*6%j+I+`pP>k0lL0kEXh-+XDIyHFIa2sJ -zR?IZXJGSdN6uj$&N=8u|i|}(ILb--SGSE4~)4zO)9S;VxNFP2^aOGNqR4kC*_K>L% -zsf!Fat-Sjq43}oeLjg_ozLf*3X!PE8;O0%x*6+V{J@B*tsYUxgX&?Y?z;s|)z98xA -zALZP2Q;9~^gDG#QVDLzq{Mc|vOD{xxHVNrBjtqk6w9=hqjxKNDZmVXA9i@ttU9NrIX6$a*`DZKU~}M%t1P~ -z^>Eh5R#H2wip*%9oquejwxyEhlN)J!?l6!1U?bU~JoDGiAW<4~*#iybm3(j@$UP!P -z03%Dc4&u`k3&T(1z3Z?Xg~&x*T0}3LGerP46nFfZ!XRo0zrk|PGY5I#+s`oEsoG{{ -zR>2o95uCA55OqT+GvLpq15Y2IjxK8H@_kvk$qR$ew!t5^hniq7do6md -zP80(HcpSI_sM@tRO;tsNm8aCXa$p8kQ|sv7a~Nd7PZIsPWX+p|kS&L>ykJq~-LWBN -z!bwvFC(nR`M`17ngPo(i{KtL7$|BS@R}hIs6k_A`UAf2c!zZ^mDBOh@i<(q6rFikS -z-Ryew0IB*CYNu6FC|Er5uNx_ADB<*XF2#%(IF`e<`}a{bqnt!4!NcDRMyD5_KZpG< -zcd+Nl{nRh0!!hvN$%Wg6>n&=_t+Evh_;}}JXvl*Qp0T+AgL{uGCm^}@iiHusja~h2 -z-=RSsyWx3u+#hhTUAac^$qNmpR0!2*=z0pr&HwZbOc*Nck~(tb_Y(;}M{#WB{j(zy -zS%gO&=!fq<8A>(Z$*WB3b0Qi@4%i5M05BhWx|^koDw*3-fdC@$C?&OZ^zLo*7kDTq -zDK4urxku621f|x&+E6JtV}YO|4x8O5_Tc6&+O`~~0fH8N>AF#k$_m4UZe8zDa8$j* -zc0G!t?S!e?QU<$+89bck;7dm_5(bH~INR=NW%=ccXqa8&0|Hy_-9tPTrE^ygV|^KB -zt)9YA$0&<0n9HU+wsZKU9!hJI)Xu0NCpCm=z0LS2;lbn+BtV!6H^*X)Es$v -z5+dac9X=dlALkf)Imd!Bba>d$OAN(MI)94bjCqjH!+}1?4CUGR}?B3RhJ-yAR09}+Sbd_ZT*b( -zW?262MWkxW=-l2*^U`{@-_?pR1w9A)S+u@I@ofcaaIRs78zrHr>)9oA@M;)dO-9A? -z($7PphC;F;hH6zeRXLyin~reb_nx9-v+8V!8Strd1XsSvpuR%*G6WuUtJB9yJ1|Nw -z5to|UZZX-UFa)Lx^Ja=#N-_nwVFT<5#-E-9KKNQz%uh4}0X3G}1S|)5@Xsdvjt10LfG@!wUA(7)eT$nHraHJGp<<1-j@zx=Ol|Snu{4TiJ7KiDU6!5J=@NlwbPh= -z+H}T;vh3f`!Ei^K^`BZzb#n!~9^TK?r43Xxq*Pv^6)n{)c~HRg>J?GL^y?q0Q^4`% -z2qLZyf<7%MT`0Nl&>%0|x|NN;+0JOM3a8$(7_L5FuzH?BTo(ZKG=y9Y6whOT2&DC7 -znA=KC3kn~l3K@q1V*^fzkh);Q?JvV00~+RG;2d6MDxcSrfjGdOz7>=a(zyL4av7HS!Ze_4t(e#|N06wu^wThG{f{jHXYud!1Es>50 -zRJUCfP){+;UszEQlA|`M}SiR -znj541?&ojjq=nUhAl;Yd>A> -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 -z*9z#EU)l=6SlBzN0UKu6PoF$RkiM<4O -zp_3Hj(qs&ij8*mb0uwn|51$qcydbnUx~vJdD&(07d6MKHMhY}^-_xid!9&#A)x%BJ -z)pa%M!o;|6>O35H1NOA~gfZ99{h2G_&KS%z1M%4BK6e3+pu_&PH!r~xy+E(9Wv#IO -zHp4A9s>rgRn*bqeNC;0PS9Wa0CLLk}wKk_1==e*`h6L^4kdQYWt;EJgn{|sn)4{Dg -ziyi*aOGN{+#GGYH5*4W*#GC`0D&VVCHyuUYKaV(8fk~+Tm6|CiSvDqw$#LP`cZ9)n -z&^rKqLoMe#f@8Lqol -zlFoX1QDY9$Y-%1+t!clcG2xQ-{4y)lMM;p&Mp9x<-ukJEhc}S1dQ8Io+_$yGP1HeK -zs%nZ{GaLUcpKr*N?^3pa_ne^^;hraJ2xo?cqbG!Cj>3g{%efwKM$ygxQG%y5kSm8F -z;KwMn;fv@#yUjr5@M$=FTChfVaD!p(ZHDEGTj&37BRmKqk# -zqaa4tn2^AX)g?Y|_QP?Enhi~k^QMF`Q|}F?GKteS`REutv@2)X0(gA84V9}f<>&Ge -z$%>1Hrv9A|qkKQaR$Ud&`pR3}eS!$}It*PDj-7!g_Y3b9*P7?R^T2O`Ke{A*R-rnJ -z4P+SATKYM#3U~l*KCU=^4vz0p_psrkuyK{)V@s6p6lWcr1gU$Q*V?s99;qC$jC?s! -z34fX6%(kmyHDkhEpmrqQAys%WNwP0VsAkY)+jsAcxb+Nh7sbPT@n%bZ0Yf}P*AVdU3SMcz-z#do%?HEzbE*qiZ1gFJ_ki^A(8N^v=S -zs^!`Hou~Lc@J4wRN)K{5h)e8`xSZvFQ~`1wV0s3iXFzZ2rcU8gx2tElz9Iz))Sw)g -zM+R)5m8ZEy9`l!}iYvAfy@8$59cN01+*X{Y$Xv4RLcBbKk+;#jqF*@Fs)s%aJc|lK -z@8t?FqbUt!W?>X1MeYPvxbSN$uo|Fe5PAmnwtjvkZ0J;m?fkh~*41%ZPpvnhVikH4 -zQY8I(3VztpXk){$IT0rr4M~?jkBPaKko6aw9~B192)+Ll`cAeyR}TEmg;0N(spZ)+ -z#QNZHhx063Nrt!psusSy2G(^NKGI -zrvGd)kMVzgXIu%7`(6?D4P4eU9&}ZxZl)n=ur!eAiFK|Dc0bTju%g9q-<^il%T(et -zMW{6S(rqS8G~t0ALg$U}(`}ZvIVSX0!ius)mBn+&hA#?zC*bK9h0)fI#H*+P#_!6! -zq71P<2pn{uN6`6{hk*NlO8+qQ?-drb!N$FgQ>fZ`;+Vs1uAxc$o -zn_<({(0LC38qpAHPwR&8w_W)3YqX&!<$qJ@L9Qm;=0d!%zBQ;kC2Eb4P`qftC>J1>je})6BwtMQI?@4;ED=|E}{Y -z7F2O``@M$GbQ$K&i4`iz;o%)QOK*TjAGA8VQFZ0xOviQqbV%4Y*y1gI1MEN<%_aWF -zsFX)=#UQ}zF8<%`3}mH1+mVyddrVk#9o%$-p{-5dQ!ftchTe@UP1q1S^cL*ipYw~q -z!pT@~IsyF1d8%iCH_PKL4P-jwEwtaT6L=3;RnNHQ@2|m$Az^uk4tBkCQsqZK-DPOx -z@Ryf_A3i0#8VTeFfbTi4bP(-hlqfOdFc%#YKIJ@(e1Ef%uYLl#w-ed*Z7XYUDQsli -z3w*Xbwi2@q?amvV2c&9|o3BR}vLF;);w$B`lqgZeCg3~3 -eobo8H4*VC(Unzh*$|>Fe0000O - -literal 14310 -zcmXY21yoy2uugDycPmm{N^yd_Q`}vP7YOd|PH`>8wLo!q*HRn`6f5rV?*HD)IX5{c -zxpy-=`|Zxo_svGBD$Agwkf4A-AaprdNp;|J21vifLD%hMrT$lZeEex|7Xe0mqFAZArC{!qp)zJmbab@utqA`6 -z61Z~|e!k$IbXNT?PvGuuzT7G514$8e!}lsR>%nURMm+~pde``@(!O=ISt0%B93;Ez -za-qRi4n0Q>zQ2#2^_y08QOl3jT*!Ir5@<8VrFx(6f9sP|H8ttjftN;wrX>jP4BcG1;MfU5x^L`zc09u!bDBt#+ll=7@ -zB;}A$BKgu}V?#qfHvm`~pt%wG2y{MOc%B!8I`p|pc -zO#?sq!Zd&j8UPmvY4RQnfo>!6{a}GFV!}g@qu<3Wu$07X(O`vikNW$~q!ngF23Ls2 -z53p8js<-B_Qd?xX6rtq43Mdz(jOg2QXx#Wng_9^1^^~KqFNq{Kvb@Ap9}bf&xFA-C -z5+#cQ`#v$A=kd0O=agATcleBaxXf_(dnqbQz|cL9R&&Ni1omTs+6~YApmk)MCghxj -z1}mq&IU>1nEiF=q=PI`%jQbyRd=hVI83Sm{E-4uTc#w;NNwEW)C(C`xvWzY_%`_MmO -zD&g-sEaE)}6(&g)y-N&rNy;5@+{M`}!{60Y8wMgF5;HmO#B~hG`W$;7xLG*yF((rq -zxP6I#r#o`B3FppK{v(q1!C+YLFSfySDcHyoW!}EfzuCB1B|C5+oP}dtocnwkcNy1EZ6#5JX4=ePl&cu~0tMnt&79+I4%PaK>VqFx;r!QdNmnxlEqdU-QR%Nmu{aWP -zJxwXvt5fFTCOVgB)Zq -z%H0U=9q7Y0lu&1kc4zYT3*lHA@XJfoK>3WFM&WWf2u6^+wCm8##D$x@Gkw+t^HoO( -z4pxDRqg;$5S=t^k22H5^V3V0Qfy%Ogl8I%LD$52=7)J>Ki9Ej1HyEi_ujELlz8$-+?cdD1Zxi02kW0 -zaY=caFq4~s^R?zxcc3Z0X|az}Aww<{P$>6rk+5Di5J7$kWor0{Q&>+DWSBH^Gf`SP -zT{4}IOFh-hB7xwBdewq%de)q6QvxorV(()2>@j8i!kj)=^hN -zl_N{$9xTHHA;V&Zx#tX&1pOO;v^NiOP#_UK@J;;lp+OOhOOO2mlMdxM;Qv-mWG+^vzox|8t`w| -z=gPlM3)y6G*hfV1WwuMe>bO-vP9g`h5BqgO9x{ROBD;aPl>XDmvt(3PUxt|4RFRpK -z5OEtRz{(Oa_W_!Z4XHf#h;Z-~71XM7wlF*L!-#h_Uy2tGuy-rAZ)4{qE~feNkp}qf -zgvBtLkFPI~I7%C=OHZfPZz$j>L9)rb;l -z@J^dxncy52;wmHg=wC3|Xn6jPYCR7xc}~D0wNjoYxmoRh_zh=6@8coM1UQIa_z*1)cZPw4v40qoZQp-uy#DLv=oP -zX9b3vzFA2r8}|_AO8W1(OMG__0{1AUD&Z%&7-(>s+Z-X6Sv}G5QguIbZ3mYa--?09 -z;wNw?n=yAag4%m#w$$-YZ{(ZJUcwHfzu&!gykNjG)e}!=q8xy2_KS=ULsQwv45NK! -zVqqD8#S{vRjg4(Q6HM_F&tihNIQns<%DVjE$cv33ET>Dvc^#{z&#u&&9RgXO?ZLuebczKv#;! -zCS|2lIa37Bp#3RWj0$V3=I2>o40{(J^LD|EUH?!2;Z&HS*>7*V%{v1)wHaUP85mcX -z%q!K}Ntr*IzJD%++btJ;VQO*OjJL1t{GvR3cy@OC-~pe^bV?N`z0QKCr?Tom)4u%A -z3mi2k&eIgh0^rGI#Di+&3lrsy-r+}zwBkDQtswtPbkj!Y^l`{f!# -zLseC0M;DiifDa!({-G4{W$Wxsgv*(NX%HMyXhArVwY105dUHg?+=@6Sy8n@slS76x -zU7%PI8ToKm#qahfR;7kn#|t@9y(0EkooWBDqA1(mpO)>BBz))giBi8xVHlj#dR9U8 -zRo%`iBdlj8%_tRn^qa%T>{nsLLwTNld&WHLyfbPzv2W62m6q=Nsdxnk -z#{P==5!Lidx3bcr_qlUl%BX!xjywA?jv>FU^mJDa0zQT9Kw8RRHq>7B -zb~DXw0(oqBrOQunsm2ghWV2i1VmN{F?)U;0%*j{FEUxazAJ3)KSWomuhklkDi?5h*MTLDS5ma_Nk1sNZYzZ#$maGRyiXBzjG@(G__fuyBl(^A>s&{jF+J%5| -zv#7nD1XK806#_U_4#N2ANAxznk%;U$Y$z#{K*O07mADqx6LjACqwP<`HFV#C6Q*wx -z8JVP_qGF}V7B?^8)f*2F5AON7v$L~Kr?2}oPai_kG!_6MI(U`LS~+Mo*CSyrw>pPE -zllqxy -z^&rnDn4XA@AUY7~`1lwTCrm8KlVRqX&!kZFH&;i9@=R}UDxNSh*)Iq2U+#9}@ag1t -z%KUOEw0DXT)>hQoLTprY^z=BC=8NAyi3pZWT7A`?;rI<3%65Nqb93%pJ=!+dNtB>W -z7f3O-e-S7ZBgBntcyt~wOG_p$AU2zlGH8=%TEm+z8kLYReEMTkIo#2YiA=iKWrH); -zS%uT3xAyyY=!U)0Evpgx{{38MPR2nN<3913M<0O#YCO=TSt^4IzV3^D%2zC>t_OO} -z_h~AVOk+IIi$Ov;-g93a4j@WaekCC#HFm2_Vu9s)8-GbYtr{LgrxnSIN^PW9)!jYX -z?%-yssA~&R3F)C)wj5i|@!atCx?Qy%P1QEGSZm;iUNai`-F(8a%y+_a>CMzx$XEKx -z>sW|JbN36s+Y{4SZsrspH%UH=+Q6J`c&_-JLGL&5|$XUA1vFOC+rgoc&xT{dFT&pMaEBKwyD;plX0>2nla;jTlQ{!fn2M=Ak*=K*g% -zBm0-$ly1~}CT-5gv){jex9)7&b8u!a+vYHXU>=NF2>g3+_rN{(LUMGwRWKk49sS$v -zazyX8zZ1hwZ|U*5{fK@i@hRl*U%Q2cg+!iIfb)6W%S5F{91qinEZE%~4Gl>rBw9S< -zMP5$exl1jESyt}d~jo?hf`z^32b!}UGtJH+w9(0UrI#~Ei*ii&6z(AVE?(}k_A -zE9Z@mj7HF-ch46I0ipe3gapRj{=zk_J1E^b_JwdrhKi4ytBuwP)m>e$@9v`A{1N{h -zwUN6H=_W+h(a?rGaQ%%LP5C4)XiZ*`1uUwgqWvk`LyDD!Ps#Q5oI($KDJ%8n5kBi- -zghsLx`~mf<>WT)6-cJBbp|htk1NfkZ@e#B4@l?UH7!MDMpO?1NETGk_Eg{z!N3!D< -zWg8gtgS%b(0Bg7dw9u35xq)1vNdnM8iu7Eje*u?#sZ~%^q*HDaZC?5z4ZzhSA%ndS -z4&$M&7(|(9nWY%QShCnuN0 -z`n9&UeypypUgx;R+x;XM#8uDM{p`9~j<49)^dotHJVO*A@HL&g7F={FP#trj@{dzm -zeQUiqRWJ&pkKkA1O-|vOf8O1UQ$$0lIExffio|}F@ROV#MXcPH$ -z?$$kxAF@B#KT}u;R@SVyIO>1sw1!i?C(_013w9@?8$bKaLQi34zC$g*^}F&(%NEO6 -zQzD-^6}HQMnGJ{h$J*)HjSxjblWegsW&rLC8Ov_r_20jLjUS$Ptnm|p9fK%r0j+4; -z57^mjL&lISh8>DC;eB$B69$h4XxE3qU4T&zUpDeV@4g>or%D-x@qhie>6mqD959ck74(h?S0BA0}YQ18d?hr6}%}y{%ZNJ^-(?=Op~; -z#2-UNh)jH9>RXmvPJ(Y!8(uhyW|sFpyvv)AaNeljHj^Fx+RC -z!`@c->W1C^FUKHmG2w_atkdsMnzY+l!CV8havQ8-Gu)<8t{#V*2Pwp4h?ayXsi5Z> -zo!guta>TA~iv#iJpQkN>#)QF%As@2WgU&V_Y^qm#E*O}M_ijJfFWq}ts)-l4>D)kCqJJ@MG2$69ph0jzwI8ry1u8D@CyinC$oT?7S*Z}Eg -zYs}PWLqr4u@)w}#!{cMx;KxO6W2H6~3k$laJjAt+C{0mmCRnfs=OJYbh}HMh&e`#> -zj;jrpjqKCh41OK{FOS`@_sPP$iCm46G^EMNk8(l-1f>!gEV+4vMVRZ#8infUenP+k -zL^tBOHF^=)k&U-Tw{gfijqQ&^ -z-RHHII5yp}2|o8pTsf6x7$teW9Em!~iy2DN?D@|U)g%I6VG%JBO$|~;c~1Q^3|x`1 -z6HRbq1#~Ke)wWpALcc&@P;m+*sGavR0{aOx3=IwUE3YPWAwV45pzD$~02inxi7(6X -z$zk683M=_r#M*+6fQ)&FK0y|lm7JLwS)K=t&ZJk!U_-y%_o@fhr{s37MUEQOF*M)3 -zB$;4>Zx;Xk*(hwFjb>1iJ1f*D#nyWL{=>{2|9*^vCNN!%bF8Oe<`xz#s;jFz?;I}4M3lL;!fy_;J-E96Of+;sG%K=fZdR)99pJ}fM( -zq%(s8UrsEL{NrdF`!#RY+VjFyPpE_vtqPMM!MQ+QnE)+_g9Z^{4^;k&Sa^=w*yuxB_*Z!U%!3{_9Qr)Jfz4IeS#io4oj_Kqhq`HCUub|Ke!v$1-$v=kc+O#rlCej?%dhY -zxxKUTsFPG1nfoFp3%7@gh9S?vM0N27#*fpJyaX;Vy{!pt*}!9_mX9uC#J5RyjknW2Dm3dCvZYU -zSW?0kvI9!o2un}*%`AYhr^CQT1aZF=-Nt^atn@Kt%b2!hT(pK!|MclbBv3-<+6{>_ -z8toMfWc9rpOk(8|KW>Z-k>Fr(xc_+q9ocf`8!_n}XYUrW?Ax|*_|=5m*4F0V+46wJ -z1IGS^Z5t=0Zj86J2MfJc -zUq#WKCfhoB<;P2&&`*_G4^_0uqDR20m!>T8ay_rxSzA&9_v5##g6tzXTkx+KRfz32 -z9vvpp?+YxHTxDthCBu7)&Q052y4s9*$M4_2w-OdPyK?F-EBoUuSsIk@@(!gA*A_!0 -z2eu1y;-Q$Ut(M>8FCOtw?vZR-%*ly^x)<95vK@P0tJoZws@+M*NGhg_NU`!}DZnWBHQz%*@6))$BWN;EM0xAF+B4Mph#S??J?K+&viwPmes*n^HGDL9iBf -zCk|mDu46wwughN!isu&G((DO>Ws`(VLY?^#w=RONxUgFGby--Y=5NJ|(>qXOS`;lZhmXyMEyBdVM@jJh71E-})~`?t4w8^Kwy) -z<+KACjs!F^TS-;FT24_iWF+=l(nR}j7U#;Vd -z)IT3=b&}A}1PUKFa6DKfgHkJci!~7u?a%k9h7Rri^{y`|;;xNDoQbV}+oJ=LdApL}|77o@C= -z;~aed)XpbrMtt1x3gHPWxbliQH4nKBCew{9 -z*-_PTyn~`1VrwKcc4ZrhI^!MsZ{D0O0%O2!SHHi^Dfyr9*x*DGFKwc()b;q6nM*M7 -zvA$x_?$BMJJHN5HIn9Ps{_7-sn79~BZegaa5V;s(BA<5BnU?^AeJHXtd)cIj_UCjA -zW|N@MjV~vrJz{sE0Dzv}tXxUDQAXm)1(kX7C_ZVFX%!TlZ850i(P1A0BxaJu)#LcH -zoxMFRzxoxw$bM=B6gpuMD#vcsa^00?%=D+T9-dQqV*=zD|)W!3BLun2&^n)~$ -z2_^{i9~sGXOAsF_S=k&4mWJ@`mD+G%MiPTlhuomboeFNwHb(< -zVpVR!mwf;JmpO3JL|B%L-!;@7TG}+`HZA;-{VIlQGY|T=f|!9!S=!c?sq5|KeEQ*~ -zm!1xeZcJPbSsfjU9e>K|=Ni<+YgrIG!|5@|Z>4bjx+`1j^O-{QK8XARf -zUG$nLRiTEtt;)9F30rvw>nj)@vCF{$d7>o2n>}~Y2^^C79l@s`uXRZOcuy>^%2@t- -zRGv={pKlDXFUgvG_^DWGR==il1rIzn{$p4r(FVOQxZi!_*Ksfl2hR{Aj>01RbFAM= -zpr0wzMwlOwlkt4|JLK)$>VL+{4nv>^`yMa)T;(9f*B(9;{T+)_=M4dN>M&&hS-#(G -z)-sW(WxVkHR)`x#g)25Lu7qnN;~Q-bvKDZ=;^fyLy@okDpvt&ZU{!U)WVtmnp -zAN-CzM{jPFWep9NAKDDq@=kynkGi_GQ@Z2y_Wn)xc_q3-&+9`qdGy_{PF-2c^$)%x -zd0sonEJhtG*2|P*Q-f_3`Akk96HzBz2 -z!5tnJaCcA2hGQrSw*{F)epvfYX?7toP=O0dN -zizY2w`>O@4Vqff!dBhQ^><#TjMP}loM9ProiD-Og@$V=*zQ|Avg0D!+96lr^u(1fl -z3J52PHoJYDdvdiIW?q?JIC*r?88VruLx#bp0lys39v$(c6uC*j}2IFFh -zViOX|K+DH18cd9%Rgjs$*sXuoW<>p^Fv-7CV|zpgTUnj812pyyX-nhA4TZ^UyYY9; -z?}BOarTT1q;0xSTjV_DPWE11?Y2+wSA*ybzebDoy8JwhznKa6SvYxE$WswX7Z6pG$ -zsA2GgHFFL3^zA@XTYK{a+6$Q8di%@1-|q9U15y+~R-L7Kwx8*xr(FP{g*JDPa`e((jSl#~?Rx=3ne(nLfeP9k0grubJK -zU4euzZqt~$Cl%k^{-!e6YQZi|D3#+MUS}VsYZ)0S>y@)kyqRI?A_esvAu-{`1Uq@! -zC+b`wnMK&<_mitl+k@e*$*{&S>vayX*>D>Q5sw2FZ?l(8ff%(8lo<^mBMrwQXOXe+ -z*7sZdWzBTIwZO$y^F)qZL1XbOMY<@M_a56y{({Vg@YN<_y}toq41V%~w=+4ZQvg)X -zVw~l$z-sId^nKU%dlk7W(mG}eS&KV2BdYqNJnX-p=YrG&&`_m0fzA_|iKD${5?oL* -zdS$heR@%Q+(3!!T&k;tIN|v2j=UI))rgkvyC7MTTrKP3g>Fma@_R0`GE5(tL%sS$7 -zG41ag%(Y(xZ5cjlk=R~(3XC+$25r*Fo=G5OhGgR}i!nDoG?^sult?Eo*x$x6CH-3L@LtZ0dfq!Bbbw-S}RwlN%lpH8c=4l2qH -z1wRszHSPh~=esnWvXD8B{D4<}?}6cA+@Ob1760Is6`g!zl@WL(L&={LA}SxAt0>Tw -z%b7i^&yNKM;(vGcNwuxAK{g|S3Y1&pH_6U1G -z3M4zx5FU=O;=l_?VzQ-~bx~xN1axPgYI0am3d25BjYmfSTX7Q}==Vcryl6@Se0(Jv -zxKW_o%H`jdnC7QXlkFbCsACHN1Dx=0gf<~@PW-&<=`1Hd)@#ypH7%OpalDj-P=ts+3^~yWs~TV}BD20HjkW6zc1L -z0#HzMkn3JV%7N-18_@tgE82*YnmEzxirriDSx#_|<|q1vL{k}7>^mRzO(ueTSN2~H -zG}kxp)Qn!&)><3|e>62+GXSpQKcemfqU!&BHZ5Ca;DT<63bBM&uV1BDS?MM$M;x8w>gShAPMxJM^BbMZn}Unm{OC9^4x3%% -zlmX8!km-u$N4fQXQ>jRe`7)3+RFGjhz -z18zf(Fo2<>YV^7LJO^UTZ2Ivd#mpN}o?7pBV&q=f%ID>haV7M8R3jsF*@a%iwIy>| -zsZ!-y{!%&j7`B?W8TcF4NH-RHH1xZ{;7BsA<#APu!;cND)te)FhoXz$BIU}2&^7WP -zT}TX>ZO58$VNPuh6JV7~s(W$vAj`^%AtUamex3YdVl3~4+pqk?G)qUibNMrj0*M25 -zY>5Ac|Dnv6xBQmV#$3JA?&HTN(lYl~J}@$l{*TY^kORrCB)3dDO}^^v!dcLf^CHty -zanjllIQeSLmpuG+h&ae`r*v!C*0A&W^a&q>93?BAXzG7n -z2*3TGPIcN`-_hY9&oaiv#fiv~>}7`T`4=pInEqWX*3e8+yPm^9h-tr&ts55$l+388 -zW)~F}2JH!}VLbQ>?6~H@&k`MnSsTeVj0TRVP4jGbP*!!CwM6`Z11c)yI2w$+R0zxo -zT|obYS1&&`{>>Z9(jnVU&=yI*%PGe*f78ie*_9oap?sd7fx7{r^WT>=XHF -zl`f{=UJEn2?tRw`Fem?eRE6#*nOes(ebRcmaK3~a3{a3EyE1zXSF0p7I_iDJ&%;3V -zU;AS}e?*mH#Yh2P9E3QBigIqu2iXf=@t)2+I~f*_E^JtEP1@IR{CBfTj%T}E3e#n% -zUa{@vU?D$l4DEANwkkK@ruP4ta)E*e^KLGg%$PizyPmHvKNMWtuJQ6sPXY=(1m#>W -z7V?9E!Vj}>a|KfQx5ESpH+q6$@gAp-P#~lbz`aj1_?xinN>3o8b2-Z3w>UZ3QZ}W0 -zWg-!>p>AADDcU^4;0*L4UFgB0QLlXd^y1E&4>txV!T|!`RwjZGl`;-4ZgFf>luHIy -zZ8d8Rh{I3r!g-ht6mAZxMB6VxRqnA0UY`h|mJZy2 -z17BazT$jMKFL3J6Ue_HL1^)4s%$Jj~Qx~1HG#tS@kwL(KP_ZI3dWz0SH(sqj#-*TNGsIWqPj>cj?!GyWvfdEiNOu4$>MIqL=F&Cc0{g*~L5 -zA1wt)=_zMFUkCT5$l!G{1-Y9QtGQ#qm5E(3fYPms_EP*sSVI)bfXN|uNO`BqVuCvd -zv)z8IGRgtM1<_trndVhQ^xA)wn~*W~#d*X@E=W)jcQWI8+?kdzHe;DZ`%+JE%gE}m -z6H=FO8rJxM{N90S=Gi!Mel)TyanxPa;E}C?hJl@e9UWad->;S|v;axgFjrY$z3(rV{MiJ}3M)t;Q?P5wZy0e3G{dcDO7n}3slDXLMrB$;#*W@Qv)D$=?Xs$F(8eTcyGIQ~IWgD%Gn&E>F9y#o>cR-7spE;Rur<_E~Pu)e0I -z#&y1|@8D~8c55<|KMf;&x;hg!A%VOZ38_+uk`jH4#=b9M&xcpxV-7cMN{jXVRnKSe -zlKJJ%=VBV{$DNeI1QkiA;DfdVT?$;O#22z6v6bTK9)fjrfIh!Hq__l~KzuNqT{&kA -zKs@YV6^1ZLGjTgR%(=NHS-DvWnnP)NM#qbHINqmQdCE5??co$3nuikqgm=s7*#Kd*+j_weKrZjMeLeHEoiJm>zuDRU` -zh~ggr^knneWU!Nn}AQt=0Id6Hk; -z4bJqse|V$H`stT?NS0yreYvaZ9YF!fw+N}{3#yXRU!C7?exl35BDC%+!jDMGT^DN# -zN9FGd#5t#;$h}5UgQ?q-Gr15>C6=nLUszle9<+_!!oi_m@_L^-R>_Qty7_g|C%m|5 -z-7^5X5V_ARi?h9_LW%2vByD3X_IvUktqBv{%SYXO1&;e&O#Ll_cfC`Wv1u+l_#RI< -zQ5Kly0;P`%TXaQN(heOg~>V&L{d+ZDA%eq-UKo#1)$rkjSm=nzAE2r -z5--RyKhxfXoGVU3^ab{5XGlyL1+26foG)4HZvN -zG@&I3h0fnK5lIjcrg*XxPy1(gK3_TN`&VYnxP;C|j$~0rT$0f|*#=OzM^NbE-1T5D -z%Csnt)n!sx3N#b(8G&+G3W~Q_B#StA6jZZ=p#wuu`DrAMXm{T@#S;ku4Dme@{Njmk -zCtrh3z6O>o)~o{&Htx+6kn*)$NNBH-biu^aYtWUq -z(G>4rCEKr#tO>!x8A@%W@6g)Xs%2Hq!y#Mbb@9R2@GDWi&!{jhZvzQ1D9nMuPoOS+ -z+cj{9nx5X{jJOIavbFf)Kz5Jnbe5Bu#(XE-z$j&iaP%c9W59OoT0~|N#D*(N2kz={ -zs(|)nH!_+_g1)#ZH2xk>ZTG#6WN#qa3BxZM{NWxq`*#$H255k6Ky?hw*hSA6`c_fl -zT@Ua%E5Ez3;~`kQFmrC#$Nlvc_Uy3#yzhd-6UYuuIwgIBZZC-`dwOBJbfurL(FfhH -z{YkjE+9OrOveY`{t{sGw&51YO1@{iO4)Ki=!Z5#q=m_Hi)_j0`>?;t2j);vv%BUif -z;wpTZdLQLsGvZ()DCdxYudn^Pt;BZ}Rin$4F8h{R`HxT2z`uc&aMXIQOvwgA5%{&) -zFW52MiN!$!EXgx}Px~e1!EMp;#&kY65oDho95j~!qD%YJr`+aK4jCJ4UJ^;q>w@Lf -zvDfg|M`S^@DGxu+7aR3Cx#;%?advj&1~L-m -zJqCP9&TW3migV*`Z$#)Qa>3>Jf)g9D6Ki28P@iX(uso)hic8Dp1F< -zeF;(n8Po8A*~^T{De(J)Z2nqLl@Vv3yoSlGwq0aeOg4ymI(KIkTeur-=J-yp9z?qe)it6gq-wl@I -z0D-_I{|T<5kwD9uH3yf1GWXp5*8eOgJf*q0IRoK|+r{}Fug&0WpNDKMTC@(Xc)9K8 -zy`lByMn!1fnY)1KYP(0Je1)c~WilUuh<&Q8^OE?L9Q^xK*Y@M$`6D6TDCZ^@l8{|} -zxmmNw)mng$hYBii+&ZqedxWT0dnV#LG4zC%+kzcK+-??vEHT>Q-T8zu|s_1IbA#OV)^+1pg1OmmZn` - diff --git a/patches/server/0003-Add-SoundEvent.patch b/patches/server/0003-Add-SoundEvent.patch index 5127743..a1f5538 100644 --- a/patches/server/0003-Add-SoundEvent.patch +++ b/patches/server/0003-Add-SoundEvent.patch @@ -39,10 +39,10 @@ index 0000000000000000000000000000000000000000..44245b61f64e4e2eb21ac4f5e540aa9a + } +} diff --git a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java -index ecddb6fe55e8ee1ca3b163503dd62200ce2d7d04..7d613f50cd0c6469a74529a834f30490defdaa00 100644 +index 3dc613116c086444ece88bcb0a569eeea953074f..c454ed979e4a2ef36bf0a8c7bd1bb64a62f59a5f 100644 --- a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java +++ b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java -@@ -325,6 +325,32 @@ public final class PaperAdventure { +@@ -335,6 +335,33 @@ public final class PaperAdventure { return asVanilla(source); } @@ -72,17 +72,19 @@ index ecddb6fe55e8ee1ca3b163503dd62200ce2d7d04..7d613f50cd0c6469a74529a834f30490 + } + // Parchment end + - // NBT - - public static @Nullable BinaryTagHolder asBinaryTagHolder(final @Nullable CompoundTag tag) { ++ + public static Packet asSoundPacket(final Sound sound, final double x, final double y, final double z, final long seed, @Nullable BiConsumer, Float> packetConsumer) { + final ResourceLocation name = asVanilla(sound.name()); + final Optional soundEvent = BuiltInRegistries.SOUND_EVENT.getOptional(name); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 5a5ff40df37db9cbd53c584ed26a3ce4888b29c0..30c05db4ad0fcd5aa83cb3168ed32c7b0d205972 100644 +index 18aac3da3c88f33b1a71a5920a8daa27e9723913..f8da87074468b34b18c774fba6868373ecb8a8a7 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1718,6 +1718,43 @@ public class ServerLevel extends Level implements WorldGenLevel { - this.neighborUpdater.neighborChanged(state, pos, sourceBlock, sourcePos, notify); +@@ -2818,4 +2818,41 @@ public class ServerLevel extends Level implements WorldGenLevel { + return this.server.getPlayerList().getPlayer(uuid); } - + // Paper end ++ + public void playSeededSound(@org.jetbrains.annotations.Nullable Player except, double x, double y, double z, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( @@ -101,7 +103,6 @@ index 5a5ff40df37db9cbd53c584ed26a3ce4888b29c0..30c05db4ad0fcd5aa83cb3168ed32c7b + // Parchment end + } + -+ @Override + public void playSeededSound(@org.jetbrains.annotations.Nullable Player except, Entity entity, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( @@ -120,14 +121,12 @@ index 5a5ff40df37db9cbd53c584ed26a3ce4888b29c0..30c05db4ad0fcd5aa83cb3168ed32c7b + // Parchment end + } + - @Override - public void broadcastEntityEvent(Entity entity, byte status) { - this.getChunkSource().broadcastAndSend(entity, new ClientboundEntityEventPacket(entity, status)); + } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 1d4d02f26391ac55c7631817f09d05e2769b0d29..cbcc4141c904360127780d6441a960842e661ef0 100644 +index 5fad40fa88f697108e42461c41012d5964ed7d75..26857b67e403d650387cf789f3778bbced7ea0a4 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2270,7 +2270,19 @@ public class ServerPlayer extends Player { +@@ -2328,7 +2328,19 @@ public class ServerPlayer extends Player { @Override public void playNotifySound(SoundEvent event, SoundSource category, float volume, float pitch) { @@ -141,7 +140,7 @@ index 1d4d02f26391ac55c7631817f09d05e2769b0d29..cbcc4141c904360127780d6441a96084 + volume, + pitch + ), -+ gg.projecteden.parchment.event.sound.ParchmentSoundEvent.createEmitter(level, getX(), getY(), getZ()), ++ gg.projecteden.parchment.event.sound.ParchmentSoundEvent.createEmitter(this.level(), getX(), getY(), getZ()), + this.random.nextLong(), sound -> 0d, soundEvent -> java.util.Collections.singletonList(getBukkitEntity()) + )); + // Parchment end @@ -149,10 +148,10 @@ index 1d4d02f26391ac55c7631817f09d05e2769b0d29..cbcc4141c904360127780d6441a96084 @Override diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c0c14766adaac855112f85a203a6163b8adfdded..d59d36c8a77524d5ac0c25a4ef1cf57f339eeda2 100644 +index 683b5d78f9e3dc34e40c54683f64be32317797ac..96b79fbd763fe981862d5e1d73a3dd71f5da445f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -932,7 +932,7 @@ public abstract class PlayerList { +@@ -946,7 +946,7 @@ public abstract class PlayerList { BlockState data = worldserver1.getBlockState(blockposition); worldserver1.setBlock(blockposition, data.setValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE, data.getValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE) - 1), 3); } @@ -162,12 +161,12 @@ index c0c14766adaac855112f85a203a6163b8adfdded..d59d36c8a77524d5ac0c25a4ef1cf57f } // Added from changeDimension diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 0629c471d38a77c44fc1c86ccdfcb0690f61ca17..791e9f43afae265f7f32588db2d6f2092c5f32c7 100644 +index 58152160d609d0e9d105153aeb166a56a7955603..66866e1dabe79a78df255fc17842bdb36988d86f 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1891,7 +1891,21 @@ public abstract class Player extends LivingEntity { +@@ -1918,7 +1918,21 @@ public abstract class Player extends LivingEntity { private static void sendSoundEffect(Player fromEntity, double x, double y, double z, SoundEvent soundEffect, SoundSource soundCategory, float volume, float pitch) { - fromEntity.level.playSound(fromEntity, x, y, z, soundEffect, soundCategory, volume, pitch); // This will not send the effect to the entity himself + fromEntity.level().playSound(fromEntity, x, y, z, soundEffect, soundCategory, volume, pitch); // This will not send the effect to the entity himself if (fromEntity instanceof ServerPlayer) { - ((ServerPlayer) fromEntity).connection.send(new net.minecraft.network.protocol.game.ClientboundSoundPacket(net.minecraft.core.registries.BuiltInRegistries.SOUND_EVENT.wrapAsHolder(soundEffect), soundCategory, x, y, z, volume, pitch, fromEntity.random.nextLong())); + // Parchment start - sound event @@ -179,7 +178,7 @@ index 0629c471d38a77c44fc1c86ccdfcb0690f61ca17..791e9f43afae265f7f32588db2d6f209 + volume, + pitch + ), -+ gg.projecteden.parchment.event.sound.ParchmentSoundEvent.createEmitter(fromEntity.level, x, y, z), ++ gg.projecteden.parchment.event.sound.ParchmentSoundEvent.createEmitter(fromEntity.level(), x, y, z), + fromEntity.random.nextLong(), + sound -> 0d, + soundEvent -> java.util.Collections.singletonList(((ServerPlayer) fromEntity).getBukkitEntity()) @@ -189,7 +188,7 @@ index 0629c471d38a77c44fc1c86ccdfcb0690f61ca17..791e9f43afae265f7f32588db2d6f209 } // Paper end diff --git a/src/main/java/net/minecraft/world/entity/raid/Raid.java b/src/main/java/net/minecraft/world/entity/raid/Raid.java -index 879c3bb661e24b9682b654def57c2800f4f8ca92..78c2067b9683611ea31cfe1c95755aa9e23e5982 100644 +index f7399737548483905f3b5c08a03876b0da54b714..e668de87a5b58febf451fe4be79e47143f4eab01 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raid.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raid.java @@ -538,7 +538,7 @@ public class Raid { @@ -202,13 +201,13 @@ index 879c3bb661e24b9682b654def57c2800f4f8ca92..78c2067b9683611ea31cfe1c95755aa9 } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index cdb8ec04f4a19ec3dbedbd5b17a7d1f3afaa238e..42b9f8d0b038a26fb3689bc0e974ceeed4de4254 100644 +index a9a58f0bb19e034cffdafcc38fdc9003744a5d6c..f238fda2543d3dae4d66c83a2230f858aff822df 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1945,4 +1945,53 @@ public class CraftEventFactory { - return event.callEvent(); +@@ -2011,4 +2011,53 @@ public class CraftEventFactory { + return event; } - // Paper end + // Paper end - add EntityFertilizeEggEvent + + // Parchment start + private static net.minecraft.network.protocol.@org.jetbrains.annotations.NotNull Packet handleSoundEvent(gg.projecteden.parchment.event.sound.SoundEvent event, CraftPlayer recipient) { diff --git a/patches/server/0004-Add-PlayerUseRespawnAnchorEvent.patch b/patches/server/0004-Add-PlayerUseRespawnAnchorEvent.patch index acd490e..f1bcd44 100644 --- a/patches/server/0004-Add-PlayerUseRespawnAnchorEvent.patch +++ b/patches/server/0004-Add-PlayerUseRespawnAnchorEvent.patch @@ -5,22 +5,26 @@ Subject: [PATCH] Add PlayerUseRespawnAnchorEvent diff --git a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -index bcea8af63b9911c36873290e5c34567b1eeaacf4..a630bba5d7b8e5e18346cd2b8cc5d6dbc66c8a53 100644 +index 2ed78cf83c0ae66a6ddba1ff307da89a24b0d0a8..15d4d703762d54ebab57814a28ad8d0e6500df6d 100644 --- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -@@ -52,23 +52,46 @@ public class RespawnAnchorBlock extends Block { +@@ -56,25 +56,47 @@ public class RespawnAnchorBlock extends Block { + @Override public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - ItemStack itemStack = player.getItemInHand(hand); +- ItemStack itemstack = player.getItemInHand(hand); +- +- if (hand == InteractionHand.MAIN_HAND && !RespawnAnchorBlock.isRespawnFuel(itemstack) && RespawnAnchorBlock.isRespawnFuel(player.getItemInHand(InteractionHand.OFF_HAND))) { ++ ItemStack itemstack = player.getItemInHand(hand); + + // Parchment start -- PlayerUseRespawnAnchorEvent + org.bukkit.entity.Player bukkitPlayer = player.getBukkitEntity() instanceof org.bukkit.entity.Player ? (org.bukkit.entity.Player) player.getBukkitEntity() : null; + org.bukkit.block.Block block = org.bukkit.craftbukkit.block.CraftBlock.at(world, pos); + gg.projecteden.parchment.event.player.PlayerUseRespawnAnchorEvent.RespawnAnchorResult result; + // Parchment end - if (hand == InteractionHand.MAIN_HAND && !isRespawnFuel(itemStack) && isRespawnFuel(player.getItemInHand(InteractionHand.OFF_HAND))) { - return InteractionResult.PASS; - } else if (isRespawnFuel(itemStack) && canBeCharged(state)) { ++ if (hand == InteractionHand.MAIN_HAND && !isRespawnFuel(itemstack) && isRespawnFuel(player.getItemInHand(InteractionHand.OFF_HAND))) { ++ return InteractionResult.PASS; ++ } else if (isRespawnFuel(itemstack) && canBeCharged(state)) { + // Parchment start -- PlayerUseRespawnAnchorEvent + result = gg.projecteden.parchment.event.player.PlayerUseRespawnAnchorEvent.RespawnAnchorResult.CHARGE; + } else if (state.getValue(CHARGE) == 0) { @@ -38,18 +42,20 @@ index bcea8af63b9911c36873290e5c34567b1eeaacf4..a630bba5d7b8e5e18346cd2b8cc5d6db + result = event.getResult(); + } + if (result == gg.projecteden.parchment.event.player.PlayerUseRespawnAnchorEvent.RespawnAnchorResult.NOTHING) { -+ return InteractionResult.PASS; + return InteractionResult.PASS; +- } else if (RespawnAnchorBlock.isRespawnFuel(itemstack) && RespawnAnchorBlock.canBeCharged(state)) { +- RespawnAnchorBlock.charge(player, world, pos, state); + } else if (result == gg.projecteden.parchment.event.player.PlayerUseRespawnAnchorEvent.RespawnAnchorResult.CHARGE) { + // Parchment end - charge(player, world, pos, state); ++ charge(player, world, pos, state); if (!player.getAbilities().instabuild) { - itemStack.shrink(1); + itemstack.shrink(1); } return InteractionResult.sidedSuccess(world.isClientSide); -- } else if (state.getValue(CHARGE) == 0) { +- } else if ((Integer) state.getValue(RespawnAnchorBlock.CHARGE) == 0) { - return InteractionResult.PASS; -- } else if (!canSetSpawn(world)) { +- } else if (!RespawnAnchorBlock.canSetSpawn(world)) { - if (!world.isClientSide) { - this.explode(state, world, pos); - } @@ -62,4 +68,4 @@ index bcea8af63b9911c36873290e5c34567b1eeaacf4..a630bba5d7b8e5e18346cd2b8cc5d6db + // Parchment end } else { if (!world.isClientSide) { - ServerPlayer serverPlayer = (ServerPlayer)player; + ServerPlayer entityplayer = (ServerPlayer) player; diff --git a/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch b/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch index fdbc32f..2e42bd5 100644 --- a/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch +++ b/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add origin location to EntityDamageByBlockEvent diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 42b9f8d0b038a26fb3689bc0e974ceeed4de4254..7f6266a0b4703a580571928fa4aa1a5b0caf0a39 100644 +index f238fda2543d3dae4d66c83a2230f858aff822df..34849bcfcc18d547efa3141ce1ec30311988da40 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -971,7 +971,7 @@ public class CraftEventFactory { +@@ -990,7 +990,7 @@ public class CraftEventFactory { CraftEventFactory.entityDamage = null; EntityDamageEvent event; if (damager == null) { @@ -17,16 +17,16 @@ index 42b9f8d0b038a26fb3689bc0e974ceeed4de4254..7f6266a0b4703a580571928fa4aa1a5b } else if (entity instanceof EnderDragon && /*PAIL FIXME ((EntityEnderDragon) entity).target == damager*/ false) { event = new EntityDamageEvent(entity.getBukkitEntity(), DamageCause.ENTITY_EXPLOSION, modifiers, modifierFunctions); } else { -@@ -1014,7 +1014,7 @@ public class CraftEventFactory { +@@ -1038,7 +1038,7 @@ public class CraftEventFactory { return CraftEventFactory.callEntityDamageEvent(damager, entity, cause, modifiers, modifierFunctions, cancelled, source.isCritical()); // Paper - add critical damage API - } else if (source.is(DamageTypes.OUT_OF_WORLD)) { + } else if (source.is(DamageTypes.FELL_OUT_OF_WORLD)) { - EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, modifiers, modifierFunctions); + EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, entity.getBukkitEntity().getLocation(), modifiers, modifierFunctions); event.setCancelled(cancelled); CraftEventFactory.callEvent(event); if (!event.isCancelled()) { -@@ -1024,7 +1024,7 @@ public class CraftEventFactory { +@@ -1048,7 +1048,7 @@ public class CraftEventFactory { } return event; } else if (source.is(DamageTypes.LAVA)) { diff --git a/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch b/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch index 9f23299..56749e0 100644 --- a/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch +++ b/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add UnsafeValues#canPlaceItemOn diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 64c50c52c11214740de7903e5592b8b6b2c170b3..be2739875ba1ba1a973c4a45c7e6a6996f0daf31 100644 +index b059bb46b649cbf82debdb8d58fe4ba77d040276..407d39e3c9eb8cd68f5c82ca7f4d1ff5f2c380fb 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -618,6 +618,55 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -626,6 +626,55 @@ public final class CraftMagicNumbers implements UnsafeValues { } // Paper end diff --git a/patches/server/0007-Add-Player-setGameProfile.patch b/patches/server/0007-Add-Player-setGameProfile.patch index db5332f..d0aa11c 100644 --- a/patches/server/0007-Add-Player-setGameProfile.patch +++ b/patches/server/0007-Add-Player-setGameProfile.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Player#setGameProfile diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 791e9f43afae265f7f32588db2d6f2092c5f32c7..460edabad8327acd4ba86924a220605181a97cd8 100644 +index 66866e1dabe79a78df255fc17842bdb36988d86f..fd0c584d459f912a714e464e40803d4e3dca8bd8 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1509,6 +1509,12 @@ public abstract class Player extends LivingEntity { +@@ -1510,6 +1510,12 @@ public abstract class Player extends LivingEntity { return this.gameProfile; } diff --git a/patches/server/0008-Expose-MCUtil-Executors.patch b/patches/server/0008-Expose-MCUtil-Executors.patch index c1a03df..743d419 100644 --- a/patches/server/0008-Expose-MCUtil-Executors.patch +++ b/patches/server/0008-Expose-MCUtil-Executors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose MCUtil Executors diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 2a8ad9afaa53d80d3926d9f1e1181c54aa8a849e..bc70b8d1e0954196a82e8673bc49b9438a4d838f 100644 +index 46831bd86a010c7f0116473876fd90af5abdce4b..bdbd310a227afc59a3a5142a9408016d3bdc0582 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2919,4 +2919,16 @@ public final class CraftServer implements Server { +@@ -2972,4 +2972,16 @@ public final class CraftServer implements Server { } // Paper end diff --git a/patches/server/0010-Add-BlockDropResourcesEvent.patch b/patches/server/0010-Add-BlockDropResourcesEvent.patch index f36a2c0..b64f0ce 100644 --- a/patches/server/0010-Add-BlockDropResourcesEvent.patch +++ b/patches/server/0010-Add-BlockDropResourcesEvent.patch @@ -8,20 +8,23 @@ to easily get the items being dropped by any block instead of only blocks broken by players. diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..c357e09705c5405dc8fac666fc39c993febdee50 100644 +index 9522e646529f3d849471931b4b3c0d133e7fcfc5..622632157b0815d91a8fb807aa9122bbebb213b1 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -306,7 +306,7 @@ public class Block extends BlockBehaviour implements ItemLike { - ServerLevel worldserver = lootContext.getLevel(); - BlockPos blockposition = BlockPos.containing((Position) lootContext.getParameter(LootContextParams.ORIGIN)); +@@ -300,9 +300,19 @@ public class Block extends BlockBehaviour implements ItemLike { + return state.getDrops(lootparams_a); + } -- state.getDrops(lootContext).forEach((itemstack) -> { ++ public static void dropResources(BlockState state, net.minecraft.world.level.storage.loot.LootParams.Builder lootContext) { ++ ServerLevel worldserver = lootContext.getLevel(); ++ BlockPos blockposition = BlockPos.containing((net.minecraft.core.Position) lootContext.getParameter(LootContextParams.ORIGIN)); ++ + org.bukkit.craftbukkit.event.CraftEventFactory.callBlockDropResourcesEvent(worldserver, blockposition, state.getDrops(lootContext)).forEach((itemstack) -> { // Parchment - Block.popResource(worldserver, blockposition, itemstack); - }); - state.spawnAfterBreak(worldserver, blockposition, ItemStack.EMPTY, true); -@@ -314,7 +314,7 @@ public class Block extends BlockBehaviour implements ItemLike { - ++ Block.popResource(worldserver, blockposition, itemstack); ++ }); ++ state.spawnAfterBreak(worldserver, blockposition, ItemStack.EMPTY, true); ++ } ++ public static void dropResources(BlockState state, Level world, BlockPos pos) { if (world instanceof ServerLevel) { - Block.getDrops(state, (ServerLevel) world, pos, (BlockEntity) null).forEach((itemstack) -> { @@ -29,7 +32,7 @@ index 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..c357e09705c5405dc8fac666fc39c993 Block.popResource(world, pos, itemstack); }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); -@@ -324,7 +324,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -312,7 +322,7 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, LevelAccessor world, BlockPos pos, @Nullable BlockEntity blockEntity) { if (world instanceof ServerLevel) { @@ -38,9 +41,9 @@ index 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..c357e09705c5405dc8fac666fc39c993 Block.popResource((ServerLevel) world, pos, itemstack); }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); -@@ -351,7 +351,8 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -339,7 +349,8 @@ public class Block extends BlockBehaviour implements ItemLike { - public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, Entity entity, ItemStack tool) { + public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity entity, ItemStack tool) { if (world instanceof ServerLevel) { - Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, tool).forEach((itemstack1) -> { + @@ -49,10 +52,10 @@ index 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..c357e09705c5405dc8fac666fc39c993 }); state.spawnAfterBreak((ServerLevel) world, pos, tool, true); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 7f6266a0b4703a580571928fa4aa1a5b0caf0a39..7681fc8163f6ac17a7d26fd6f5c5113eb634640e 100644 +index 34849bcfcc18d547efa3141ce1ec30311988da40..902cf45b1da660f1901bf334396bac50353d04e5 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1993,5 +1993,19 @@ public class CraftEventFactory { +@@ -2059,5 +2059,20 @@ public class CraftEventFactory { } }); } @@ -71,4 +74,5 @@ index 7f6266a0b4703a580571928fa4aa1a5b0caf0a39..7681fc8163f6ac17a7d26fd6f5c5113e + return items; + } // Parchment end ++ } diff --git a/patches/server/0011-Add-Furnace-Recipe-API.patch b/patches/server/0011-Add-Furnace-Recipe-API.patch index 85cb8fc..01eb58e 100644 --- a/patches/server/0011-Add-Furnace-Recipe-API.patch +++ b/patches/server/0011-Add-Furnace-Recipe-API.patch @@ -215,10 +215,10 @@ index 0000000000000000000000000000000000000000..e7114e456f818d7bdd4081620f4b9b93 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 5e9055fdf411029ea2fed91acd6b981f79156418..9f719150a0369ddb76da88635e05ff701759a1ed 100644 +index 89514af7f3771db496e7e2a40fa4e7fdf527f095..5e6a5b7bf9ecea3445ae3f8de1e8b826afc3ccab 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2395,4 +2395,11 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2430,4 +2430,11 @@ public class CraftWorld extends CraftRegionAccessor implements World { return this.adventure$pointers; } // Paper end diff --git a/patches/server/0012-Disable-sleep-status-announcements.patch b/patches/server/0012-Disable-sleep-status-announcements.patch index f47ad63..3228148 100644 --- a/patches/server/0012-Disable-sleep-status-announcements.patch +++ b/patches/server/0012-Disable-sleep-status-announcements.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable sleep status announcements diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 30c05db4ad0fcd5aa83cb3168ed32c7b0d205972..206bc729f24f679bed3b945b640778873699676a 100644 +index f8da87074468b34b18c774fba6868373ecb8a8a7..bbe67e33aee5dae86eda9eefe74db4ffd781cc80 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -974,7 +974,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1116,7 +1116,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } private void announceSleepStatus() { diff --git a/patches/server/0013-Add-config-for-ticking-TIME_SINCE_REST.patch b/patches/server/0013-Add-config-for-ticking-TIME_SINCE_REST.patch index c912d4f..e9c82d5 100644 --- a/patches/server/0013-Add-config-for-ticking-TIME_SINCE_REST.patch +++ b/patches/server/0013-Add-config-for-ticking-TIME_SINCE_REST.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config for ticking TIME_SINCE_REST diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -index 4532f3a0d74feae0a1249b53e1bfbc18a8808b32..c66db0468a9ab09cc89805e7bf7be09e7a7a1746 100644 +index a33de97340f14219291c4175e9194914cdf441db..a6341580f9c1a163ddb9c380a2c5c1658cb5bf0d 100644 --- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -259,6 +259,7 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -265,6 +265,7 @@ public class WorldConfiguration extends ConfigurationPart { } public boolean disablePlayerCrits = false; @@ -17,15 +17,15 @@ index 4532f3a0d74feae0a1249b53e1bfbc18a8808b32..c66db0468a9ab09cc89805e7bf7be09e public PillagerPatrols pillagerPatrols; diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index e428299aff0a75b8a9a82cac13429a6dc7ea7002..defe3bdf04b274f16e99c7d25e5f167480465c09 100644 +index fd0c584d459f912a714e464e40803d4e3dca8bd8..870fefca60162ca75bcdd04abf721f321ec1b745 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -291,7 +291,7 @@ public abstract class Player extends LivingEntity { +@@ -292,7 +292,7 @@ public abstract class Player extends LivingEntity { this.awardStat(Stats.CROUCH_TIME); } - if (!this.isSleeping()) { -+ if (!this.isSleeping() && this.level.paperConfig().entities.behavior.tickTimeSinceSleep) { // Parchment ++ if (!this.isSleeping() && this.level().paperConfig().entities.behavior.tickTimeSinceSleep) { // Parchment this.awardStat(Stats.TIME_SINCE_REST); } } diff --git a/patches/server/0014-Add-HangingFrame-Tick-API.patch b/patches/server/0014-Add-HangingFrame-Tick-API.patch index ab7c7d6..417cf1f 100644 --- a/patches/server/0014-Add-HangingFrame-Tick-API.patch +++ b/patches/server/0014-Add-HangingFrame-Tick-API.patch @@ -5,25 +5,25 @@ Subject: [PATCH] Add HangingFrame Tick API diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -index f7d031e9a5aa533d78a49ed6147dd47dd0f27f01..a22139bd4202237eb6977b95786b9a3647821874 100644 +index 66cf0a6cd1525ecf2615809210a26d55f445d07d..360ca6458083fa4018f11fcdade3ce930835db72 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -@@ -42,6 +42,7 @@ public abstract class HangingEntity extends Entity { - private int checkInterval; { this.checkInterval = this.getId() % this.level.spigotConfig.hangingTickFrequency; } // Paper +@@ -41,6 +41,7 @@ public abstract class HangingEntity extends Entity { + private int checkInterval; { this.checkInterval = this.getId() % this.level().spigotConfig.hangingTickFrequency; } // Paper public BlockPos pos; protected Direction direction; + public boolean tick = true; // Parchment protected HangingEntity(EntityType type, Level world) { super(type, world); -@@ -117,7 +118,7 @@ public abstract class HangingEntity extends Entity { +@@ -116,7 +117,7 @@ public abstract class HangingEntity extends Entity { @Override public void tick() { -- if (!this.level.isClientSide) { -+ if (tick && !this.level.isClientSide) { // Parchment - this.checkOutOfWorld(); - if (this.checkInterval++ == this.level.spigotConfig.hangingTickFrequency) { // Spigot +- if (!this.level().isClientSide) { ++ if (tick && !this.level().isClientSide) { // Parchment + this.checkBelowWorld(); + if (this.checkInterval++ == this.level().spigotConfig.hangingTickFrequency) { // Spigot this.checkInterval = 0; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java index 62e11bf104b8d39ac73883e2a5d207e5f7393253..639bd33ae91ed818bda29fed776adb8c169458d7 100644 diff --git a/patches/server/0015-Add-Player-getHiddenEntities-API.patch b/patches/server/0015-Add-Player-getHiddenEntities-API.patch index 9e2fdfa..dab2313 100644 --- a/patches/server/0015-Add-Player-getHiddenEntities-API.patch +++ b/patches/server/0015-Add-Player-getHiddenEntities-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Player#getHiddenEntities API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 0ae1fce0c1a2e3bfbbab756a088fc76545e263fa..4d768316f40fe6f239a8b75820d16ab8018f28f6 100644 +index e41f5417304f5b05fa7e2f6b6e1c0095e820f1cc..50a1a50e13f54d3db843d5f378432409e159caef 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1903,6 +1903,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1913,6 +1913,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { server.getPluginManager().callEvent(new PlayerShowEntityEvent(this, entity)); // Paper } // Paper start diff --git a/patches/server/0018-Expanded-Insomnia-API.patch b/patches/server/0018-Expanded-Insomnia-API.patch index f6d10d4..1e45da7 100644 --- a/patches/server/0018-Expanded-Insomnia-API.patch +++ b/patches/server/0018-Expanded-Insomnia-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Expanded Insomnia API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 4d768316f40fe6f239a8b75820d16ab8018f28f6..a3d3051b82b512c855fd87681a54817c32727b95 100644 +index 50a1a50e13f54d3db843d5f378432409e159caef..11e4bd75b10c2f4b292d2ce3c683eb2373609a20 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -76,6 +76,7 @@ import net.minecraft.server.network.ServerGamePacketListenerImpl; @@ -16,7 +16,7 @@ index 4d768316f40fe6f239a8b75820d16ab8018f28f6..a3d3051b82b512c855fd87681a54817c import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.AttributeMap; import net.minecraft.world.entity.ai.attributes.Attributes; -@@ -179,6 +180,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -185,6 +186,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private static final boolean DISABLE_CHANNEL_LIMIT = System.getProperty("paper.disableChannelLimit") != null; // Paper - add a flag to disable the channel limit private long lastSaveTime; // Paper end @@ -24,14 +24,14 @@ index 4d768316f40fe6f239a8b75820d16ab8018f28f6..a3d3051b82b512c855fd87681a54817c public CraftPlayer(CraftServer server, ServerPlayer entity) { super(server, entity); -@@ -2017,6 +2019,33 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2033,6 +2035,33 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this; } + // Parchment start + @Override + public boolean isInsomniac() { -+ return EntitySelector.isInsomniac.test(this.getHandle()); ++ return EntitySelector.IS_INSOMNIAC.test(this.getHandle()); + } + + @Override diff --git a/patches/server/0019-Add-spam-bypass-permission.patch b/patches/server/0019-Add-spam-bypass-permission.patch index 7e6c558..4b9245b 100644 --- a/patches/server/0019-Add-spam-bypass-permission.patch +++ b/patches/server/0019-Add-spam-bypass-permission.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Add spam bypass permission diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 2d8488b9aa088b6d5f0c7e557b8ad0b29bc4cd88..64848434496e4897b696f975c330756befa1e9b4 100644 +index 4dd04aa5f4affd42afbce718ec3dfaf7f1fafe2f..ed35299215a8f01d7a4c53fe2a63d07bdd6d53a0 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -865,16 +865,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -882,16 +882,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) { - // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); // Paper - run this async + // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - run this async // CraftBukkit start + if (!this.getCraftPlayer().hasPermission("spam.bypass")) { // Parchment - spam bypass if (this.chatSpamTickCount.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper start - split and make configurable @@ -22,14 +22,14 @@ index 2d8488b9aa088b6d5f0c7e557b8ad0b29bc4cd88..64848434496e4897b696f975c330756b + String str = packet.getCommand(); + int index = -1; if (str.length() > 64 && ((index = str.indexOf(' ')) == -1 || index >= 64)) { - server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause + server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper return; } + } // Parchment - spam bypass // Paper end // CraftBukkit end // Paper start - Don't suggest if tab-complete is disabled -@@ -2547,6 +2550,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2562,6 +2565,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic // Spigot start - spam exclusions private void detectRateSpam(String s) { @@ -37,16 +37,16 @@ index 2d8488b9aa088b6d5f0c7e557b8ad0b29bc4cd88..64848434496e4897b696f975c330756b // CraftBukkit start - replaced with thread safe throttle boolean counted = true; for ( String exclude : org.spigotmc.SpigotConfig.spamExclusions ) -@@ -3268,10 +3272,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - public void handlePlaceRecipe(ServerboundPlaceRecipePacket packet) { +@@ -3284,10 +3288,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic + PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper start if (!org.bukkit.Bukkit.isPrimaryThread()) { + if (!this.getCraftPlayer().hasPermission("spam.bypass")) { // Parchment - spam bypass - if (recipeSpamPackets.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamLimit) { - server.scheduleOnMain(() -> this.disconnect(net.minecraft.network.chat.Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause + if (this.recipeSpamPackets.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamLimit) { + this.server.scheduleOnMain(() -> this.disconnect(net.minecraft.network.chat.Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause return; } + } // Parchment - spam bypass } // Paper end - PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); + PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); diff --git a/patches/server/0020-Disable-set-respawn-message.patch b/patches/server/0020-Disable-set-respawn-message.patch index 90f93a6..d127f1d 100644 --- a/patches/server/0020-Disable-set-respawn-message.patch +++ b/patches/server/0020-Disable-set-respawn-message.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Disable set respawn message diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index cbcc4141c904360127780d6441a960842e661ef0..0abb7d69f534089b06d7221327a9be282bb6006c 100644 +index 26857b67e403d650387cf789f3778bbced7ea0a4..e07d651cbf8730f8427114438307ce216f2fef07 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2220,10 +2220,10 @@ public class ServerPlayer extends Player { - angle = (float) event.getLocation().getYaw(); +@@ -2278,10 +2278,10 @@ public class ServerPlayer extends Player { + angle = event.getLocation().getYaw(); forced = event.isForced(); // Paper end - diff --git a/patches/server/0023-Remove-Hanging-Entity-Debug.patch b/patches/server/0022-Remove-Hanging-Entity-Debug.patch similarity index 85% rename from patches/server/0023-Remove-Hanging-Entity-Debug.patch rename to patches/server/0022-Remove-Hanging-Entity-Debug.patch index 9acb89c..a07aae5 100644 --- a/patches/server/0023-Remove-Hanging-Entity-Debug.patch +++ b/patches/server/0022-Remove-Hanging-Entity-Debug.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove Hanging Entity Debug diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -index a22139bd4202237eb6977b95786b9a3647821874..47e93f5a3e9f8a71a121be0309e1307b1241bcf7 100644 +index 360ca6458083fa4018f11fcdade3ce930835db72..94f105c829d196c1526c8251527fe519a5e0180e 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -@@ -273,7 +273,7 @@ public abstract class HangingEntity extends Entity { +@@ -272,7 +272,7 @@ public abstract class HangingEntity extends Entity { BlockPos blockposition = new BlockPos(nbt.getInt("TileX"), nbt.getInt("TileY"), nbt.getInt("TileZ")); if (!blockposition.closerThan(this.blockPosition(), 16.0D)) { diff --git a/patches/server/0022-Remove-Unneeded-Override.patch b/patches/server/0022-Remove-Unneeded-Override.patch deleted file mode 100644 index b82631f..0000000 --- a/patches/server/0022-Remove-Unneeded-Override.patch +++ /dev/null @@ -1,18 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Blast-Mc -Date: Mon, 9 Jan 2023 19:21:16 -0500 -Subject: [PATCH] Remove Unneeded Override - - -diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 206bc729f24f679bed3b945b640778873699676a..e035ee2e499c6322c08ce6aa14fdebe134777fa2 100644 ---- a/src/main/java/net/minecraft/server/level/ServerLevel.java -+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1736,7 +1736,6 @@ public class ServerLevel extends Level implements WorldGenLevel { - // Parchment end - } - -- @Override - public void playSeededSound(@org.jetbrains.annotations.Nullable Player except, Entity entity, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { - // Parchment start - sound event - CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( diff --git a/patches/server/0024-Add-PreEntityShootBowEvent.patch b/patches/server/0023-Add-PreEntityShootBowEvent.patch similarity index 83% rename from patches/server/0024-Add-PreEntityShootBowEvent.patch rename to patches/server/0023-Add-PreEntityShootBowEvent.patch index ac2133f..8857518 100644 --- a/patches/server/0024-Add-PreEntityShootBowEvent.patch +++ b/patches/server/0023-Add-PreEntityShootBowEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add PreEntityShootBowEvent diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index f2094c52196b45adfd51d8aebcc4c46b779b0925..0498d3d0cee58e10351bd8c4ce7b9a3dbc862d09 100644 +index 9ca1e9d95e62929c0015d5ca2c2f9c70e421842e..b3150821875b4dd1c3fd0f10b56b51fac40f68ff 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -199,13 +199,19 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -199,13 +199,20 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override public void performRangedAttack(LivingEntity target, float pullProgress) { ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW))); @@ -24,16 +24,17 @@ index f2094c52196b45adfd51d8aebcc4c46b779b0925..0498d3d0cee58e10351bd8c4ce7b9a3d double d2 = target.getZ() - this.getZ(); double d3 = Math.sqrt(d0 * d0 + d2 * d2); -- entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level.getDifficulty().getId() * 4)); -+ entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level.getDifficulty().getId() * 4), preEvent.isRelative()); +- entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level().getDifficulty().getId() * 4)); ++ entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level().getDifficulty().getId() * 4), preEvent.isRelative()); ++ // CraftBukkit start org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), entityarrow.getPickupItem(), entityarrow, net.minecraft.world.InteractionHand.MAIN_HAND, 0.8F, true); // Paper if (event.isCancelled()) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -index 10573602c9bc73713cbd6989762d3dbb6f6fcf8c..b65c31bc257e362247855faabf49aec6347cec86 100644 +index 63fce7e3d9f59f36e29bc827a46396d73143bb8b..54dfb3cbaeb37c41187185068ab5573ffb9fd793 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -@@ -189,13 +189,19 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { +@@ -189,13 +189,20 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @Override public void performRangedAttack(LivingEntity target, float pullProgress) { ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW))); @@ -49,13 +50,14 @@ index 10573602c9bc73713cbd6989762d3dbb6f6fcf8c..b65c31bc257e362247855faabf49aec6 double d2 = target.getZ() - this.getZ(); double d3 = Math.sqrt(d0 * d0 + d2 * d2); -- entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level.getDifficulty().getId() * 4)); -+ entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level.getDifficulty().getId() * 4), preEvent.isRelative()); +- entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level().getDifficulty().getId() * 4)); ++ entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level().getDifficulty().getId() * 4), preEvent.isRelative()); ++ // Paper start org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), entityarrow.getPickupItem(), entityarrow, target.getUsedItemHand(), 0.8F, true); if (event.isCancelled()) { diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 5d6d26cfe8f0ab68a3145214b3fc126ca7a71a66..e43357fd32866c340bf8a8cfe415529941512f22 100644 +index 7226be19248a1ffb8ff2c89b55882529d33a6c0c..990d85daaafae8938c99ad9f389a76b1c6b7937f 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java @@ -129,8 +129,8 @@ public abstract class AbstractArrow extends Projectile { @@ -70,10 +72,10 @@ index 5d6d26cfe8f0ab68a3145214b3fc126ca7a71a66..e43357fd32866c340bf8a8cfe4155299 } diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index 8b2a3a8482018b7db7de81bc295862f783e17ce5..bab146d88cf52e44087868a06ccdfcee67adf2b9 100644 +index 1b7cf6d06bdf36f146656727511a461f2520762e..38bb93521820a2cebdbd72b6b76373e986a0f15f 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -145,9 +145,15 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -157,9 +157,15 @@ public abstract class Projectile extends Entity implements TraceableEntity { } public void shoot(double x, double y, double z, float speed, float divergence) { @@ -90,7 +92,7 @@ index 8b2a3a8482018b7db7de81bc295862f783e17ce5..bab146d88cf52e44087868a06ccdfcee double d3 = vec3d.horizontalDistance(); this.setYRot((float) (Mth.atan2(vec3d.x, vec3d.z) * 57.2957763671875D)); -@@ -157,6 +163,10 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -169,6 +175,10 @@ public abstract class Projectile extends Entity implements TraceableEntity { } public void shootFromRotation(Entity shooter, float pitch, float yaw, float roll, float speed, float divergence) { @@ -101,17 +103,17 @@ index 8b2a3a8482018b7db7de81bc295862f783e17ce5..bab146d88cf52e44087868a06ccdfcee float f5 = -Mth.sin(yaw * 0.017453292F) * Mth.cos(pitch * 0.017453292F); float f6 = -Mth.sin((pitch + roll) * 0.017453292F); float f7 = Mth.cos(yaw * 0.017453292F) * Mth.cos(pitch * 0.017453292F); -@@ -164,7 +174,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -176,7 +186,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { this.shoot((double) f5, (double) f6, (double) f7, speed, divergence); Vec3 vec3d = shooter.getDeltaMovement(); -- if (!shooter.level.paperConfig().misc.disableRelativeProjectileVelocity) this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.isOnGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity -+ if (!shooter.level.paperConfig().misc.disableRelativeProjectileVelocity && relative) this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.isOnGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity +- if (!shooter.level().paperConfig().misc.disableRelativeProjectileVelocity) this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.onGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity ++ if (!shooter.level().paperConfig().misc.disableRelativeProjectileVelocity && relative) this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.onGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity } // CraftBukkit start - call projectile hit event diff --git a/src/main/java/net/minecraft/world/item/BowItem.java b/src/main/java/net/minecraft/world/item/BowItem.java -index 08d597db1a5345a343777a01427655e6bf2c926b..c047a2cf20a3f02b2d4a2fb71306234ccfa84429 100644 +index 08d597db1a5345a343777a01427655e6bf2c926b..789c7fa48fcf4bf6f462f0ca188518ca97c6b342 100644 --- a/src/main/java/net/minecraft/world/item/BowItem.java +++ b/src/main/java/net/minecraft/world/item/BowItem.java @@ -42,9 +42,15 @@ public class BowItem extends ProjectileWeaponItem implements Vanishable { @@ -132,10 +134,10 @@ index 08d597db1a5345a343777a01427655e6bf2c926b..c047a2cf20a3f02b2d4a2fb71306234c entityarrow.setCritArrow(true); } diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index bc4f04c2512191da3c9e1c49f0716bb9128fc754..27276ee045cb0475dcbd47130d943fcaf597d119 100644 +index a433910fb4d0bd8d7b6b0d66c8fc88d62a0e4879..880aa7780f577bbafc6720400768b0e055927b72 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java -@@ -228,6 +228,11 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { +@@ -229,6 +229,11 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { private static void shootProjectile(Level world, LivingEntity shooter, InteractionHand hand, ItemStack crossbow, ItemStack projectile, float soundPitch, boolean creative, float speed, float divergence, float simulated) { if (!world.isClientSide) { diff --git a/patches/server/0025-Return-Displays-in-getTargetEntity.patch b/patches/server/0024-Return-Displays-in-getTargetEntity.patch similarity index 50% rename from patches/server/0025-Return-Displays-in-getTargetEntity.patch rename to patches/server/0024-Return-Displays-in-getTargetEntity.patch index 2d87532..67c52a3 100644 --- a/patches/server/0025-Return-Displays-in-getTargetEntity.patch +++ b/patches/server/0024-Return-Displays-in-getTargetEntity.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Return Displays in getTargetEntity diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index dcfb71b5a53df789e366fea2080921d677549a2e..755ae62d64c15358b2f88ab6471c9046ced74a66 100644 +index a189461330a4d427a7450d504ef13de3605497e3..edbb3b71fb526d75eac65bb4356335c46f79b1b6 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3988,7 +3988,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4040,7 +4040,7 @@ public abstract class LivingEntity extends Entity implements Attackable { Vec3 direction = this.getLookAngle(); Vec3 end = start.add(direction.x * maxDistance, direction.y * maxDistance, direction.z * maxDistance); -- List entityList = level.getEntities(this, getBoundingBox().expandTowards(direction.x * maxDistance, direction.y * maxDistance, direction.z * maxDistance).inflate(1.0D, 1.0D, 1.0D), EntitySelector.NO_SPECTATORS.and(Entity::isPickable)); -+ List entityList = level.getEntities(this, getBoundingBox().expandTowards(direction.x * maxDistance, direction.y * maxDistance, direction.z * maxDistance).inflate(1.0D, 1.0D, 1.0D), EntitySelector.NO_SPECTATORS.and(entity -> entity.isPickable() || entity instanceof Display)); +- List entityList = this.level().getEntities(this, getBoundingBox().expandTowards(direction.x * maxDistance, direction.y * maxDistance, direction.z * maxDistance).inflate(1.0D, 1.0D, 1.0D), EntitySelector.NO_SPECTATORS.and(Entity::isPickable)); ++ List entityList = this.level().getEntities(this, getBoundingBox().expandTowards(direction.x * maxDistance, direction.y * maxDistance, direction.z * maxDistance).inflate(1.0D, 1.0D, 1.0D), EntitySelector.NO_SPECTATORS.and(entity -> entity.isPickable() || entity instanceof Display)); double distance = 0.0D; EntityHitResult result = null; diff --git a/patches/server/0026-Make-SynchedEntityData-packAll-Public.patch b/patches/server/0025-Make-SynchedEntityData-packAll-Public.patch similarity index 85% rename from patches/server/0026-Make-SynchedEntityData-packAll-Public.patch rename to patches/server/0025-Make-SynchedEntityData-packAll-Public.patch index d9de5d8..e0c115a 100644 --- a/patches/server/0026-Make-SynchedEntityData-packAll-Public.patch +++ b/patches/server/0025-Make-SynchedEntityData-packAll-Public.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make SynchedEntityData#packAll Public diff --git a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java -index ff7ba7a161cfed7521354bc6e3f21ba0f17f3760..8d17e503894858b9e195d70a74513dee60aa3ec3 100644 +index bf6a70a69bb695ec1a202cd1e863c468329f80fc..c3f46cba9160b5f1b1d3c882d18f7761a3ee2fdf 100644 --- a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java +++ b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java -@@ -263,7 +263,7 @@ public class SynchedEntityData { +@@ -267,7 +267,7 @@ public class SynchedEntityData { // We need to pack all as we cannot rely on "non default values" or "dirty" ones. // Because these values can possibly be desynced on the client. @Nullable