From e5c555739808db8bf4f422c29b52cbb16baa6ac1 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 14 Nov 2020 22:20:36 -0700 Subject: [PATCH 01/57] Fix issue with EntityFeature spawning --- .../dfsek/terra/structure/features/EntityFeature.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 78859e6da..818257058 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -58,7 +58,10 @@ public class EntityFeature implements Feature { attempt.subtract(0, 1, 0); yv--; - if(!stand.contains(on.getType())) continue; + if(!stand.contains(on.getType())) { + canSpawn = false; + continue; + } for(int j = 1; j < inSize + 1; j++) if(!in.contains(on.getRelative(BlockFace.UP, j).getType())) canSpawn = false; @@ -99,7 +102,10 @@ public class EntityFeature implements Feature { attempt.subtract(0, 1, 0); yv--; - if(!stand.contains(on.getType())) continue; + if(!stand.contains(on.getType())) { + canSpawn = false; + continue; + } for(int j = 1; j < inSize + 1; j++) if(!in.contains(on.getRelative(BlockFace.UP, j).getType())) canSpawn = false; From 9125590a024764a28d4892becd3c4da3ff87642b Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 15 Nov 2020 16:10:14 -0700 Subject: [PATCH 02/57] Improvements to structure load command --- .../command/structure/StructureCommand.java | 1 + .../command/structure/load/LoadCommand.java | 62 ++++++++++ .../LoadFullCommand.java} | 29 +++-- .../structure/load/LoadRawCommand.java | 113 ++++++++++++++++++ .../com/dfsek/terra/structure/Structure.java | 4 + 5 files changed, 200 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/command/structure/load/LoadCommand.java rename src/main/java/com/dfsek/terra/command/structure/{LoadCommand.java => load/LoadFullCommand.java} (61%) create mode 100644 src/main/java/com/dfsek/terra/command/structure/load/LoadRawCommand.java diff --git a/src/main/java/com/dfsek/terra/command/structure/StructureCommand.java b/src/main/java/com/dfsek/terra/command/structure/StructureCommand.java index 99d7b0a15..af1a7ed74 100644 --- a/src/main/java/com/dfsek/terra/command/structure/StructureCommand.java +++ b/src/main/java/com/dfsek/terra/command/structure/StructureCommand.java @@ -1,5 +1,6 @@ package com.dfsek.terra.command.structure; +import com.dfsek.terra.command.structure.load.LoadCommand; import com.dfsek.terra.config.lang.LangUtil; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; diff --git a/src/main/java/com/dfsek/terra/command/structure/load/LoadCommand.java b/src/main/java/com/dfsek/terra/command/structure/load/LoadCommand.java new file mode 100644 index 000000000..7a7eaa441 --- /dev/null +++ b/src/main/java/com/dfsek/terra/command/structure/load/LoadCommand.java @@ -0,0 +1,62 @@ +package com.dfsek.terra.command.structure.load; + +import com.dfsek.terra.Terra; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.polydev.gaea.command.DebugCommand; +import org.polydev.gaea.command.PlayerCommand; + +import java.io.File; +import java.io.FilenameFilter; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class LoadCommand extends PlayerCommand implements DebugCommand { + public LoadCommand(org.polydev.gaea.command.Command parent) { + super(parent); + } + + @Override + public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return true; + } + + @Override + public String getName() { + return "load"; + } + + public static List getStructureNames() { + List names = new ArrayList<>(); + File structureDir = new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures"); + if(!structureDir.exists()) return Collections.emptyList(); + Path structurePath = structureDir.toPath(); + + FilenameFilter filter = (dir, name) -> name.endsWith(".tstructure"); + for(File f : structureDir.listFiles(filter)) { + String path = structurePath.relativize(f.toPath()).toString(); + names.add(path.substring(0, path.length() - 11)); + } + return names; + } + + @Override + public List getSubCommands() { + return Arrays.asList(new LoadRawCommand(this), new LoadFullCommand(this, true), new LoadFullCommand(this, false)); + } + + @Override + public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { + return Collections.emptyList(); + } + + @Override + public int arguments() { + return 0; + } +} diff --git a/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java b/src/main/java/com/dfsek/terra/command/structure/load/LoadFullCommand.java similarity index 61% rename from src/main/java/com/dfsek/terra/command/structure/LoadCommand.java rename to src/main/java/com/dfsek/terra/command/structure/load/LoadFullCommand.java index 51e327f6d..79b130325 100644 --- a/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java +++ b/src/main/java/com/dfsek/terra/command/structure/load/LoadFullCommand.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.command.structure; +package com.dfsek.terra.command.structure.load; import com.dfsek.terra.Terra; import com.dfsek.terra.config.lang.LangUtil; @@ -15,14 +15,19 @@ import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; -public class LoadCommand extends PlayerCommand implements DebugCommand { - public LoadCommand(org.polydev.gaea.command.Command parent) { +public class LoadFullCommand extends PlayerCommand implements DebugCommand { + private final boolean chunk; + + public LoadFullCommand(org.polydev.gaea.command.Command parent, boolean chunk) { super(parent); + this.chunk = chunk; } @Override - public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { try { Rotation r; try { @@ -32,8 +37,8 @@ public class LoadCommand extends PlayerCommand implements DebugCommand { return true; } Structure struc = Structure.load(new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", args[0] + ".tstructure")); - if("true".equals(args[2])) struc.paste(sender.getLocation(), r); - else struc.paste(sender.getLocation(), sender.getLocation().getChunk(), r); + if(chunk) struc.paste(sender.getLocation(), sender.getLocation().getChunk(), r); + else struc.paste(sender.getLocation(), r); //sender.sendMessage(String.valueOf(struc.checkSpawns(sender.getLocation(), r))); } catch(IOException e) { e.printStackTrace(); @@ -44,7 +49,7 @@ public class LoadCommand extends PlayerCommand implements DebugCommand { @Override public String getName() { - return "load"; + return chunk ? "chunk" : "full"; } @Override @@ -54,11 +59,17 @@ public class LoadCommand extends PlayerCommand implements DebugCommand { @Override public int arguments() { - return 3; + return 2; } @Override - public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { + public List getTabCompletions(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] args) { + switch(args.length) { + case 1: + return LoadCommand.getStructureNames().stream().filter(string -> string.toUpperCase().startsWith(args[0].toUpperCase())).collect(Collectors.toList()); + case 2: + return Stream.of("0", "90", "180", "270").filter(string -> string.toUpperCase().startsWith(args[1].toUpperCase())).collect(Collectors.toList()); + } return Collections.emptyList(); } } diff --git a/src/main/java/com/dfsek/terra/command/structure/load/LoadRawCommand.java b/src/main/java/com/dfsek/terra/command/structure/load/LoadRawCommand.java new file mode 100644 index 000000000..4ad7bd2a9 --- /dev/null +++ b/src/main/java/com/dfsek/terra/command/structure/load/LoadRawCommand.java @@ -0,0 +1,113 @@ +package com.dfsek.terra.command.structure.load; + +import com.dfsek.terra.Terra; +import com.dfsek.terra.config.lang.LangUtil; +import com.dfsek.terra.structure.Structure; +import com.dfsek.terra.structure.StructureContainedBlock; +import com.dfsek.terra.structure.StructureInfo; +import com.dfsek.terra.structure.StructureSpawnRequirement; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Sign; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.polydev.gaea.command.DebugCommand; +import org.polydev.gaea.command.PlayerCommand; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class LoadRawCommand extends PlayerCommand implements DebugCommand { + public LoadRawCommand(org.polydev.gaea.command.Command parent) { + super(parent); + } + + private static void setTerraSign(Sign sign, String data) { + sign.setLine(0, "[TERRA]"); + sign.setLine(2, data.substring(0, 16)); + sign.setLine(3, data.substring(16)); + } + + @Override + public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + try { + Structure struc = Structure.load(new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", args[0] + ".tstructure")); + StructureInfo info = struc.getStructureInfo(); + int centerX = info.getCenterX(); + int centerZ = info.getCenterZ(); + for(StructureContainedBlock[][] level0 : struc.getRawStructure()) { + for(StructureContainedBlock[] level1 : level0) { + for(StructureContainedBlock block : level1) { + Location bLocation = sender.getLocation().add(block.getX() - centerX, block.getY(), block.getZ() - centerZ); + if(!block.getPull().equals(StructureContainedBlock.Pull.NONE)) { + bLocation.getBlock().setBlockData(Material.OAK_SIGN.createBlockData(), false); + Sign sign = (Sign) bLocation.getBlock().getState(); + sign.setLine(1, "[PULL=" + block.getPull() + "_" + block.getPullOffset() + "]"); + String data = block.getBlockData().getAsString(true); + setTerraSign(sign, data); + sign.update(); + } else if(!block.getRequirement().equals(StructureSpawnRequirement.BLANK)) { + bLocation.getBlock().setBlockData(Material.OAK_SIGN.createBlockData(), false); + Sign sign = (Sign) bLocation.getBlock().getState(); + sign.setLine(1, "[SPAWN=" + block.getRequirement() + "]"); + String data = block.getBlockData().getAsString(true); + setTerraSign(sign, data); + sign.update(); + } else { + bLocation.getBlock().setBlockData(block.getBlockData(), false); + if(block.getState() != null) { + block.getState().getState(bLocation.getBlock().getState()).update(true, false); + } + } + } + } + } + + for(int y = 0; y < struc.getStructureInfo().getSizeY(); y++) { + StructureContainedBlock block = struc.getRawStructure()[centerX][centerZ][y]; + if(block.getRequirement().equals(StructureSpawnRequirement.BLANK) && block.getPull().equals(StructureContainedBlock.Pull.NONE)) { + Location bLocation = sender.getLocation().add(block.getX() - centerX, block.getY(), block.getZ() - centerZ); + bLocation.getBlock().setBlockData(Material.OAK_SIGN.createBlockData(), false); + Sign sign = (Sign) bLocation.getBlock().getState(); + sign.setLine(1, "[CENTER]"); + String data = block.getBlockData().getAsString(true); + setTerraSign(sign, data); + sign.update(); + break; + } + } + } catch(IOException e) { + e.printStackTrace(); + LangUtil.send("command.structure.invalid", sender, args[0]); + } + return true; + } + + @Override + public String getName() { + return "raw"; + } + + @Override + public List getSubCommands() { + return Collections.emptyList(); + } + + @Override + public int arguments() { + return 1; + } + + @Override + public List getTabCompletions(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] args) { + if(args.length == 1) { + return LoadCommand.getStructureNames().stream().filter(string -> string.toUpperCase().startsWith(args[0].toUpperCase())).collect(Collectors.toList()); + } + return Collections.emptyList(); + } +} diff --git a/src/main/java/com/dfsek/terra/structure/Structure.java b/src/main/java/com/dfsek/terra/structure/Structure.java index bb5e0f0d0..306658f81 100644 --- a/src/main/java/com/dfsek/terra/structure/Structure.java +++ b/src/main/java/com/dfsek/terra/structure/Structure.java @@ -144,6 +144,10 @@ public class Structure implements Serializable { return (Structure) o; } + public StructureContainedBlock[][][] getRawStructure() { + return structure; + } + /** * Paste the structure at a Location, ignoring chunk boundaries. * From 022c95a862421c3810bff40bdb144b04aa35d290 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 11:15:50 -0700 Subject: [PATCH 03/57] User defined noise functions --- .../biome/failsafe/FailoverGenerator.java | 2 +- .../dfsek/terra/config/base/ConfigPack.java | 18 ++- .../config/genconfig/biome/BiomeConfig.java | 2 +- .../config/genconfig/noise/NoiseConfig.java | 56 +++++++++ .../terra/generation/ElevationEquation.java | 44 +++++-- .../generation/ElevationInterpolator.java | 39 +++---- .../terra/generation/TerraChunkGenerator.java | 6 +- .../generation/UserDefinedGenerator.java | 45 ++++++-- .../terra/generation/config/NoiseBuilder.java | 109 ++++++++++++++++++ .../com/dfsek/terra/math/NoiseFunction.java | 7 ++ .../com/dfsek/terra/math/NoiseFunction2.java | 14 ++- .../com/dfsek/terra/math/NoiseFunction3.java | 14 ++- 12 files changed, 300 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java create mode 100644 src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java create mode 100644 src/main/java/com/dfsek/terra/math/NoiseFunction.java diff --git a/src/main/java/com/dfsek/terra/biome/failsafe/FailoverGenerator.java b/src/main/java/com/dfsek/terra/biome/failsafe/FailoverGenerator.java index 6badad8e1..17469ba63 100644 --- a/src/main/java/com/dfsek/terra/biome/failsafe/FailoverGenerator.java +++ b/src/main/java/com/dfsek/terra/biome/failsafe/FailoverGenerator.java @@ -19,6 +19,6 @@ public final class FailoverGenerator extends UserDefinedGenerator { } public FailoverGenerator() throws ParseException { - super("0", null, new HashMap<>(), palette, new TreeMap<>(), false); + super("0", null, new HashMap<>(), palette, new TreeMap<>(), new HashMap<>(), false); } } diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index c7437dc10..dc516fb50 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -15,6 +15,7 @@ import com.dfsek.terra.config.genconfig.PaletteConfig; import com.dfsek.terra.config.genconfig.TreeConfig; import com.dfsek.terra.config.genconfig.biome.AbstractBiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; +import com.dfsek.terra.config.genconfig.noise.NoiseConfig; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.registry.FloraRegistry; @@ -56,8 +57,6 @@ public class ConfigPack extends YamlConfiguration { public final int blendAmp; public final boolean biomeBlend; public final double blendFreq; - public final int octaves; - public final double frequency; public final boolean vanillaCaves; public final boolean vanillaStructures; public final boolean vanillaDecoration; @@ -76,9 +75,11 @@ public class ConfigPack extends YamlConfiguration { private final FloraRegistry floraRegistry = new FloraRegistry(); private final Set allStructures = new HashSet<>(); private final Map definedVariables = new HashMap<>(); + private final Map noiseBuilders = new HashMap<>(); private final File dataFolder; private final String id; + @SuppressWarnings("unchecked") public ConfigPack(File file) throws IOException, InvalidConfigurationException { long l = System.nanoTime(); load(new File(file, "pack.yml")); @@ -87,6 +88,12 @@ public class ConfigPack extends YamlConfiguration { if(!contains("id")) throw new ConfigException("No ID specified!", "null"); this.id = getString("id"); + Map noise = Objects.requireNonNull(getConfigurationSection("noise")).getValues(false); + for(Map.Entry entry : noise.entrySet()) { + noiseBuilders.put(entry.getKey(), new NoiseConfig((ConfigurationSection) entry.getValue())); + Debug.info("Loaded noise function " + entry.getKey()); + } + ores = ConfigLoader.load(new File(file, "ores").toPath(), this, OreConfig.class); palettes = ConfigLoader.load(new File(file, "palettes").toPath(), this, PaletteConfig.class); @@ -141,9 +148,6 @@ public class ConfigPack extends YamlConfiguration { erosionThresh = getDouble("erode.threshold", 0.04); erosionOctaves = getInt("erode.octaves", 3); - octaves = getInt("noise.octaves", 4); - frequency = getDouble("noise.frequency", 1f / 96); - erosionName = getString("erode.grid"); vanillaCaves = getBoolean("vanilla.caves", false); @@ -210,6 +214,10 @@ public class ConfigPack extends YamlConfiguration { return grids.get(id); } + public Map getNoiseBuilders() { + return noiseBuilders; + } + public static synchronized void loadAll(JavaPlugin main) { configs.clear(); File file = new File(main.getDataFolder(), "packs"); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java index 32a044b85..97de6c1c1 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java @@ -171,7 +171,7 @@ public class BiomeConfig extends TerraConfig { try { // Get UserDefinedBiome instance representing this config. - UserDefinedGenerator gen = new UserDefinedGenerator(eq, elevation, config.getDefinedVariables(), palette.getPaletteMap(), slant, getBoolean("prevent-smooth", false)); + UserDefinedGenerator gen = new UserDefinedGenerator(eq, elevation, config.getDefinedVariables(), palette.getPaletteMap(), slant, config.getNoiseBuilders(), getBoolean("prevent-smooth", false)); gen.setElevationInterpolation(doElevationInterpolation); this.biome = new UserDefinedBiome(vanillaBiome, dec, gen, getBoolean("erodible", false), biomeID); } catch(ParseException e) { diff --git a/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java new file mode 100644 index 000000000..ef11a6415 --- /dev/null +++ b/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java @@ -0,0 +1,56 @@ +package com.dfsek.terra.config.genconfig.noise; + +import com.dfsek.terra.config.exception.ConfigException; +import com.dfsek.terra.generation.config.NoiseBuilder; +import org.bukkit.configuration.ConfigurationSection; +import org.polydev.gaea.math.FastNoiseLite; + +public class NoiseConfig { + private final NoiseBuilder builder; + private final int dimensions; + + @SuppressWarnings("unchecked") + public NoiseConfig(ConfigurationSection section) throws ConfigException { + NoiseBuilder builder = new NoiseBuilder(); + try { + builder.setType(FastNoiseLite.NoiseType.valueOf((String) section.get("type"))); + builder.setFrequency(section.getDouble("frequency", 0.02D)); + + dimensions = section.getInt("dimensions", 3); + if(dimensions != 2 && dimensions != 3) + throw new ConfigException("Invalid number of dimensions: " + dimensions, "Noise"); + + builder.setRotationType3D(FastNoiseLite.RotationType3D.valueOf(section.getString("rotation", "None"))); + + if(section.contains("fractal")) { + builder.setFractalType(FastNoiseLite.FractalType.valueOf(section.getString("fractal.type", "FBm"))); + builder.setOctaves(section.getInt("fractal.octaves", 1)); + builder.setFractalGain(section.getDouble("fractal.gain", 0.5D)); + builder.setFractalLacunarity(section.getDouble("fractal.lacunarity", 2.0D)); + builder.setPingPong(section.getDouble("fractal.ping-pong", 2.0D)); + builder.setWeightedStrength(section.getDouble("fractal.weighted-strength", 0.0D)); + } + + if(section.contains("cellular")) { + builder.setCellularDistanceFunction(FastNoiseLite.CellularDistanceFunction.valueOf(section.getString("cellular.distance", "EuclideanSq"))); + builder.setCellularReturnType(FastNoiseLite.CellularReturnType.valueOf(section.getString("cellular.return", "Distance"))); + } + + if(section.contains("warp")) { + builder.setDomainWarpType(FastNoiseLite.DomainWarpType.valueOf(section.getString("warp.type", "OpenSimplex2"))); + builder.setDomainWarpAmp(section.getDouble("warp.amplitude", 1.0D)); + } + this.builder = builder; + } catch(IllegalArgumentException | ClassCastException e) { + throw new ConfigException(e.getMessage(), "Noise"); + } + } + + public NoiseBuilder getBuilder() { + return builder; + } + + public int getDimensions() { + return dimensions; + } +} diff --git a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java index 8cff5e1fb..fc18d683e 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java @@ -1,35 +1,65 @@ package com.dfsek.terra.generation; +import com.dfsek.terra.config.genconfig.noise.NoiseConfig; +import com.dfsek.terra.math.NoiseFunction; import com.dfsek.terra.math.NoiseFunction2; -import org.polydev.gaea.math.FastNoiseLite; +import com.dfsek.terra.math.NoiseFunction3; +import org.bukkit.World; import parsii.eval.Expression; import parsii.eval.Parser; import parsii.eval.Scope; import parsii.eval.Variable; import parsii.tokenizer.ParseException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + public class ElevationEquation { private static final Object noiseLock = new Object(); private final Expression delegate; private final Scope s = new Scope(); - private final NoiseFunction2 n2 = new NoiseFunction2(); private final Variable xVar = s.getVariable("x"); private final Variable zVar = s.getVariable("z"); - public ElevationEquation(String equation) throws ParseException { + private final List noiseFunctions = new ArrayList<>(); + private boolean set = true; + + public ElevationEquation(String equation, Map noiseBuilders) throws ParseException { Parser p = new Parser(); - p.registerFunction("noise2", n2); + for(Map.Entry e : noiseBuilders.entrySet()) { + switch(e.getValue().getDimensions()) { + case 2: + NoiseFunction2 function2 = new NoiseFunction2(e.getValue().getBuilder()); + noiseFunctions.add(function2); + p.registerFunction(e.getKey(), function2); + break; + case 3: + NoiseFunction3 function3 = new NoiseFunction3(e.getValue().getBuilder()); + noiseFunctions.add(function3); + p.registerFunction(e.getKey(), function3); + break; + } + } delegate = p.parse(equation, s); } - public double getNoise(double x, double z, FastNoiseLite noiseLite) { + public double getNoise(double x, double z, World w) { synchronized(noiseLock) { xVar.setValue(x); zVar.setValue(z); - - n2.setNoise(noiseLite); + setNoise(w.getSeed()); return delegate.evaluate(); } } + + private void setNoise(long seed) { + if(set) { + set = false; + for(NoiseFunction n : noiseFunctions) { + n.setNoise(seed); + } + } + } } diff --git a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java index e6d2c896d..eab81feb1 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java @@ -3,21 +3,18 @@ package com.dfsek.terra.generation; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; -import org.polydev.gaea.math.FastNoiseLite; import org.polydev.gaea.math.Interpolator; public class ElevationInterpolator { private final UserDefinedGenerator[][] gens = new UserDefinedGenerator[10][10]; private final double[][] values = new double[18][18]; - private final FastNoiseLite noise; private final int xOrigin; private final int zOrigin; private final TerraBiomeGrid grid; - public ElevationInterpolator(World w, int chunkX, int chunkZ, TerraBiomeGrid grid, FastNoiseLite noise) { + public ElevationInterpolator(World w, int chunkX, int chunkZ, TerraBiomeGrid grid) { this.xOrigin = chunkX << 4; this.zOrigin = chunkZ << 4; - this.noise = noise; this.grid = grid; for(int x = -2; x < 8; x++) { @@ -30,13 +27,13 @@ public class ElevationInterpolator { for(byte z = -1; z <= 16; z++) { UserDefinedGenerator generator = getGenerator(x, z); if(compareGens((x / 4), (z / 4)) && generator.interpolateElevation()) { - Interpolator interpolator = new Interpolator(biomeAvg(x / 4, z / 4), - biomeAvg((x / 4) + 1, z / 4), - biomeAvg(x / 4, (z / 4) + 1), - biomeAvg((x / 4) + 1, (z / 4) + 1), + Interpolator interpolator = new Interpolator(biomeAvg(x / 4, z / 4, w), + biomeAvg((x / 4) + 1, z / 4, w), + biomeAvg(x / 4, (z / 4) + 1, w), + biomeAvg((x / 4) + 1, (z / 4) + 1, w), Interpolator.Type.LINEAR); values[x + 1][z + 1] = interpolator.bilerp((double) (x % 4) / 4, (double) (z % 4) / 4); - } else values[x + 1][z + 1] = elevate(generator, xOrigin + x, zOrigin + z); + } else values[x + 1][z + 1] = elevate(generator, xOrigin + x, zOrigin + z, w); } } } @@ -60,20 +57,20 @@ public class ElevationInterpolator { return false; } - private double biomeAvg(int x, int z) { - return (elevate(getStoredGen(x + 1, z), x * 4 + 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x - 1, z), x * 4 - 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x, z + 1), x * 4 + xOrigin, z * 4 + 4 + zOrigin) - + elevate(getStoredGen(x, z - 1), x * 4 + xOrigin, z * 4 - 4 + zOrigin) - + elevate(getStoredGen(x, z), x * 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x - 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x - 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x + 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x + 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin)) / 9D; + private double biomeAvg(int x, int z, World w) { + return (elevate(getStoredGen(x + 1, z), x * 4 + 4 + xOrigin, z * 4 + zOrigin, w) + + elevate(getStoredGen(x - 1, z), x * 4 - 4 + xOrigin, z * 4 + zOrigin, w) + + elevate(getStoredGen(x, z + 1), x * 4 + xOrigin, z * 4 + 4 + zOrigin, w) + + elevate(getStoredGen(x, z - 1), x * 4 + xOrigin, z * 4 - 4 + zOrigin, w) + + elevate(getStoredGen(x, z), x * 4 + xOrigin, z * 4 + zOrigin, w) + + elevate(getStoredGen(x - 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin, w) + + elevate(getStoredGen(x - 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin, w) + + elevate(getStoredGen(x + 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin, w) + + elevate(getStoredGen(x + 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin, w)) / 9D; } - private double elevate(UserDefinedGenerator g, int x, int z) { - if(g.getElevationEquation() != null) return g.getElevationEquation().getNoise(x, z, noise); + private double elevate(UserDefinedGenerator g, int x, int z, World w) { + if(g.getElevationEquation() != null) return g.getElevationEquation().getNoise(x, z, w); return 0; } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 551cf67bd..8dea8e9fe 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -151,7 +151,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { ElevationInterpolator elevationInterpolator; try(ProfileFuture ignore = TerraProfiler.fromWorld(world).measure("ElevationTime")) { - elevationInterpolator = new ElevationInterpolator(world, chunkX, chunkZ, tw.getGrid(), getNoiseGenerator()); + elevationInterpolator = new ElevationInterpolator(world, chunkX, chunkZ, tw.getGrid()); } for(byte x = 0; x < 16; x++) { @@ -203,12 +203,12 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { @Override public int getNoiseOctaves(World world) { - return configPack.octaves; + return 1; } @Override public double getNoiseFrequency(World world) { - return configPack.frequency; + return 0.02; } @Override diff --git a/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java b/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java index e44770a4e..9e72e1638 100644 --- a/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java @@ -1,6 +1,8 @@ package com.dfsek.terra.generation; import com.dfsek.terra.Debug; +import com.dfsek.terra.config.genconfig.noise.NoiseConfig; +import com.dfsek.terra.math.NoiseFunction; import com.dfsek.terra.math.NoiseFunction2; import com.dfsek.terra.math.NoiseFunction3; import com.dfsek.terra.util.DataUtil; @@ -17,6 +19,8 @@ import parsii.eval.Scope; import parsii.eval.Variable; import parsii.tokenizer.ParseException; +import java.util.ArrayList; +import java.util.List; import java.util.Map; @@ -31,21 +35,35 @@ public class UserDefinedGenerator extends Generator { private final Palette[] palettes = new Palette[256]; @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) private final Palette[] slantPalettes = new Palette[256]; - private final NoiseFunction2 n2 = new NoiseFunction2(); - private final NoiseFunction3 n3 = new NoiseFunction3(); private final ElevationEquation elevationEquation; private final boolean preventSmooth; private boolean elevationInterpolation; + private final List noiseFunctions = new ArrayList<>(); + private boolean set = true; - public UserDefinedGenerator(String equation, @Nullable String elevateEquation, Map userVariables, Map> paletteMap, Map> slantPaletteMap, boolean preventSmooth) + public UserDefinedGenerator(String equation, @Nullable String elevateEquation, Map userVariables, Map> paletteMap, Map> slantPaletteMap, Map noiseBuilders, boolean preventSmooth) throws ParseException { for(Map.Entry entry : userVariables.entrySet()) { s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. } Parser p = new Parser(); - p.registerFunction("noise2", n2); - p.registerFunction("noise3", n3); + + for(Map.Entry e : noiseBuilders.entrySet()) { + switch(e.getValue().getDimensions()) { + case 2: + NoiseFunction2 function2 = new NoiseFunction2(e.getValue().getBuilder()); + noiseFunctions.add(function2); + p.registerFunction(e.getKey(), function2); + break; + case 3: + NoiseFunction3 function3 = new NoiseFunction3(e.getValue().getBuilder()); + noiseFunctions.add(function3); + p.registerFunction(e.getKey(), function3); + break; + } + } + for(int y = 0; y < 256; y++) { Palette d = DataUtil.BLANK_PALETTE; for(Map.Entry> e : paletteMap.entrySet()) { @@ -66,12 +84,21 @@ public class UserDefinedGenerator extends Generator { } if(elevateEquation != null) { Debug.info("Using elevation equation"); - this.elevationEquation = new ElevationEquation(elevateEquation); + this.elevationEquation = new ElevationEquation(elevateEquation, noiseBuilders); } else this.elevationEquation = null; this.noiseExp = p.parse(equation, s); this.preventSmooth = preventSmooth; } + private void setNoise(long seed) { + if(set) { + set = false; + for(NoiseFunction n : noiseFunctions) { + n.setNoise(seed); + } + } + } + /** * Gets the 2D noise at a pair of coordinates using the provided FastNoiseLite instance. * @@ -86,8 +113,7 @@ public class UserDefinedGenerator extends Generator { xVar.setValue(x); yVar.setValue(0); zVar.setValue(z); - n2.setNoise(gen); - n3.setNoise(gen); + setNoise(w.getSeed()); return noiseExp.evaluate(); } } @@ -107,8 +133,7 @@ public class UserDefinedGenerator extends Generator { xVar.setValue(x); yVar.setValue(y); zVar.setValue(z); - n2.setNoise(gen); - n3.setNoise(gen); + setNoise(w.getSeed()); return noiseExp.evaluate(); } } diff --git a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java new file mode 100644 index 000000000..7c51571bb --- /dev/null +++ b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java @@ -0,0 +1,109 @@ +package com.dfsek.terra.generation.config; + +import org.polydev.gaea.math.FastNoiseLite; + +public class NoiseBuilder { + private FastNoiseLite.NoiseType type = FastNoiseLite.NoiseType.OpenSimplex2; + private int octaves = 1; + private FastNoiseLite.FractalType fractalType = FastNoiseLite.FractalType.None; + private double frequency = 0.02D; + private double fractalGain = 0.5D; + private double fractalLacunarity = 2.0D; + private double pingPong = 2.0D; + private double weightedStrength = 0.0D; + + private FastNoiseLite.CellularDistanceFunction cellularDistanceFunction = FastNoiseLite.CellularDistanceFunction.EuclideanSq; + private FastNoiseLite.CellularReturnType cellularReturnType = FastNoiseLite.CellularReturnType.Distance; + private double cellularJitter = 1.0D; + + private FastNoiseLite.DomainWarpType domainWarpType = FastNoiseLite.DomainWarpType.OpenSimplex2; + private double domainWarpAmp = 1.0D; + + private FastNoiseLite.RotationType3D rotationType3D = FastNoiseLite.RotationType3D.None; + + public FastNoiseLite build(int seed) { + FastNoiseLite noise = new FastNoiseLite(seed); + if(!fractalType.equals(FastNoiseLite.FractalType.None)) { + noise.setFractalType(fractalType); + noise.setFractalOctaves(octaves); + noise.setFractalGain(fractalGain); + noise.setFractalLacunarity(fractalLacunarity); + if(fractalType.equals(FastNoiseLite.FractalType.PingPong)) noise.setFractalPingPongStrength(pingPong); + noise.setFractalWeightedStrength(weightedStrength); + } + if(type.equals(FastNoiseLite.NoiseType.Cellular)) { + noise.setCellularDistanceFunction(cellularDistanceFunction); + noise.setCellularReturnType(cellularReturnType); + noise.setCellularJitter(cellularJitter); + } + + noise.setDomainWarpType(domainWarpType); + noise.setDomainWarpAmp(domainWarpAmp); + + noise.setRotationType3D(rotationType3D); + + noise.setFrequency(frequency); + return noise; + } + + public void setFrequency(double frequency) { + this.frequency = frequency; + } + + public void setFractalGain(double fractalGain) { + this.fractalGain = fractalGain; + } + + public void setFractalLacunarity(double fractalLacunarity) { + this.fractalLacunarity = fractalLacunarity; + } + + public void setFractalType(FastNoiseLite.FractalType fractalType) { + this.fractalType = fractalType; + } + + public void setOctaves(int octaves) { + this.octaves = octaves; + } + + public void setPingPong(double pingPong) { + this.pingPong = pingPong; + } + + public void setWeightedStrength(double weightedStrength) { + this.weightedStrength = weightedStrength; + } + + public FastNoiseLite.NoiseType getType() { + return type; + } + + public void setType(FastNoiseLite.NoiseType type) { + this.type = type; + } + + public void setCellularDistanceFunction(FastNoiseLite.CellularDistanceFunction cellularDistanceFunction) { + this.cellularDistanceFunction = cellularDistanceFunction; + } + + public void setCellularReturnType(FastNoiseLite.CellularReturnType cellularReturnType) { + this.cellularReturnType = cellularReturnType; + } + + public void setCellularJitter(double cellularJitter) { + this.cellularJitter = cellularJitter; + } + + public void setDomainWarpAmp(double domainWarpAmp) { + this.domainWarpAmp = domainWarpAmp; + } + + public void setDomainWarpType(FastNoiseLite.DomainWarpType domainWarpType) { + this.domainWarpType = domainWarpType; + } + + public void setRotationType3D(FastNoiseLite.RotationType3D rotationType3D) { + this.rotationType3D = rotationType3D; + } +} + diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction.java b/src/main/java/com/dfsek/terra/math/NoiseFunction.java new file mode 100644 index 000000000..c6685666a --- /dev/null +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction.java @@ -0,0 +1,7 @@ +package com.dfsek.terra.math; + +import parsii.eval.Function; + +public interface NoiseFunction extends Function { + void setNoise(long seed); +} diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index 3a011be24..3c15a18b4 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -1,15 +1,20 @@ package com.dfsek.terra.math; import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.generation.config.NoiseBuilder; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; -import parsii.eval.Function; import java.util.List; -public class NoiseFunction2 implements Function { +public class NoiseFunction2 implements NoiseFunction { private final Cache cache = new Cache(); private FastNoiseLite gen; + private final NoiseBuilder builder; + + public NoiseFunction2(NoiseBuilder builder) { + this.builder = builder; + } @Override public int getNumberOfArguments() { @@ -26,8 +31,9 @@ public class NoiseFunction2 implements Function { return true; } - public void setNoise(FastNoiseLite gen) { - this.gen = gen; + @Override + public void setNoise(long seed) { + this.gen = builder.build((int) seed); } private final class Cache { diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction3.java b/src/main/java/com/dfsek/terra/math/NoiseFunction3.java index 6f6a10c82..55840d60e 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction3.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction3.java @@ -1,13 +1,18 @@ package com.dfsek.terra.math; +import com.dfsek.terra.generation.config.NoiseBuilder; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; -import parsii.eval.Function; import java.util.List; -public class NoiseFunction3 implements Function { +public class NoiseFunction3 implements NoiseFunction { private FastNoiseLite gen; + private final NoiseBuilder builder; + + public NoiseFunction3(NoiseBuilder builder) { + this.builder = builder; + } @Override public int getNumberOfArguments() { @@ -24,7 +29,8 @@ public class NoiseFunction3 implements Function { return true; } - public void setNoise(FastNoiseLite gen) { - this.gen = gen; + @Override + public void setNoise(long seed) { + this.gen = builder.build((int) seed); } } From f5a503f546430f17f68c2b525ef4f684dfb93208 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 11:29:30 -0700 Subject: [PATCH 04/57] Cleanup noise functions --- .../dfsek/terra/config/base/ConfigPack.java | 6 +-- .../config/genconfig/noise/NoiseConfig.java | 3 +- .../terra/generation/config/NoiseBuilder.java | 54 +++++++++++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index dc516fb50..01fa2b265 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -79,7 +79,6 @@ public class ConfigPack extends YamlConfiguration { private final File dataFolder; private final String id; - @SuppressWarnings("unchecked") public ConfigPack(File file) throws IOException, InvalidConfigurationException { long l = System.nanoTime(); load(new File(file, "pack.yml")); @@ -90,8 +89,9 @@ public class ConfigPack extends YamlConfiguration { Map noise = Objects.requireNonNull(getConfigurationSection("noise")).getValues(false); for(Map.Entry entry : noise.entrySet()) { - noiseBuilders.put(entry.getKey(), new NoiseConfig((ConfigurationSection) entry.getValue())); - Debug.info("Loaded noise function " + entry.getKey()); + NoiseConfig noiseConfig = new NoiseConfig((ConfigurationSection) entry.getValue()); + noiseBuilders.put(entry.getKey(), noiseConfig); + Debug.info("Loaded noise function " + entry.getKey() + " with type " + noiseConfig.getBuilder().getType()); } ores = ConfigLoader.load(new File(file, "ores").toPath(), this, OreConfig.class); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java index ef11a6415..f02ef80f4 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java @@ -9,11 +9,10 @@ public class NoiseConfig { private final NoiseBuilder builder; private final int dimensions; - @SuppressWarnings("unchecked") public NoiseConfig(ConfigurationSection section) throws ConfigException { NoiseBuilder builder = new NoiseBuilder(); try { - builder.setType(FastNoiseLite.NoiseType.valueOf((String) section.get("type"))); + builder.setType(FastNoiseLite.NoiseType.valueOf(section.getString("type", "OpenSimplex2"))); builder.setFrequency(section.getDouble("frequency", 0.02D)); dimensions = section.getInt("dimensions", 3); diff --git a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java index 7c51571bb..4c2e49c65 100644 --- a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java +++ b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java @@ -37,6 +37,8 @@ public class NoiseBuilder { noise.setCellularJitter(cellularJitter); } + noise.setNoiseType(type); + noise.setDomainWarpType(domainWarpType); noise.setDomainWarpAmp(domainWarpAmp); @@ -105,5 +107,57 @@ public class NoiseBuilder { public void setRotationType3D(FastNoiseLite.RotationType3D rotationType3D) { this.rotationType3D = rotationType3D; } + + public FastNoiseLite.CellularDistanceFunction getCellularDistanceFunction() { + return cellularDistanceFunction; + } + + public FastNoiseLite.CellularReturnType getCellularReturnType() { + return cellularReturnType; + } + + public FastNoiseLite.DomainWarpType getDomainWarpType() { + return domainWarpType; + } + + public double getCellularJitter() { + return cellularJitter; + } + + public double getDomainWarpAmp() { + return domainWarpAmp; + } + + public double getFractalGain() { + return fractalGain; + } + + public double getFractalLacunarity() { + return fractalLacunarity; + } + + public double getFrequency() { + return frequency; + } + + public double getPingPong() { + return pingPong; + } + + public double getWeightedStrength() { + return weightedStrength; + } + + public int getOctaves() { + return octaves; + } + + public FastNoiseLite.FractalType getFractalType() { + return fractalType; + } + + public FastNoiseLite.RotationType3D getRotationType3D() { + return rotationType3D; + } } From cab91ec15b0545f8c6b14c04da2ec94759631612 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 16:18:34 -0700 Subject: [PATCH 05/57] Account for elevation in structure spawns --- src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java | 5 ++++- src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java | 5 ++++- .../java/com/dfsek/terra/structure/spawn/OceanSpawn.java | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java index a90b29a9d..931b6c12b 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java @@ -4,6 +4,8 @@ import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; +import com.dfsek.terra.generation.ElevationEquation; +import com.dfsek.terra.generation.UserDefinedGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -19,6 +21,7 @@ public class AirSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = wc.getBiome(b); if(y <= c.getOcean().getSeaLevel()) return false; - return b.getGenerator().getNoise(getNoise(), getWorld(), x, y, z) <= 0; + ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); + return b.getGenerator().getNoise(getNoise(), getWorld(), x, (int) (y - elevationEquation.getNoise(x, z, getWorld())), z) <= 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java index 361c17ab4..d97a884c1 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java @@ -2,6 +2,8 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; +import com.dfsek.terra.generation.ElevationEquation; +import com.dfsek.terra.generation.UserDefinedGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -14,6 +16,7 @@ public class LandSpawn extends Requirement { public boolean matches(int x, int y, int z) { TerraWorld tw = TerraWorld.getWorld(getWorld()); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); - return b.getGenerator().getNoise(getNoise(), getWorld(), x, y, z) > 0; + ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); + return b.getGenerator().getNoise(getNoise(), getWorld(), x, (int) (y - elevationEquation.getNoise(x, z, getWorld())), z) > 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java index d417d3b5c..d24139920 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java @@ -3,6 +3,8 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; +import com.dfsek.terra.generation.ElevationEquation; +import com.dfsek.terra.generation.UserDefinedGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -17,6 +19,7 @@ public class OceanSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = tw.getConfig().getBiome(b); if(y > c.getOcean().getSeaLevel()) return false; - return b.getGenerator().getNoise(getNoise(), getWorld(), x, y, z) <= 0; + ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); + return b.getGenerator().getNoise(getNoise(), getWorld(), x, (int) (y - elevationEquation.getNoise(x, z, getWorld())), z) <= 0; } } From 00c933c06ee289ffdf499fbe2c037fd83347e184 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 16:54:55 -0700 Subject: [PATCH 06/57] Fix stoopid NPE --- src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java | 3 ++- src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java | 3 ++- src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java index 931b6c12b..2df85238a 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java @@ -22,6 +22,7 @@ public class AirSpawn extends Requirement { BiomeConfig c = wc.getBiome(b); if(y <= c.getOcean().getSeaLevel()) return false; ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); - return b.getGenerator().getNoise(getNoise(), getWorld(), x, (int) (y - elevationEquation.getNoise(x, z, getWorld())), z) <= 0; + int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z, getWorld())); + return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java index d97a884c1..6c6da9162 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java @@ -17,6 +17,7 @@ public class LandSpawn extends Requirement { TerraWorld tw = TerraWorld.getWorld(getWorld()); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); - return b.getGenerator().getNoise(getNoise(), getWorld(), x, (int) (y - elevationEquation.getNoise(x, z, getWorld())), z) > 0; + int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z, getWorld())); + return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) > 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java index d24139920..85249dbef 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java @@ -20,6 +20,7 @@ public class OceanSpawn extends Requirement { BiomeConfig c = tw.getConfig().getBiome(b); if(y > c.getOcean().getSeaLevel()) return false; ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); - return b.getGenerator().getNoise(getNoise(), getWorld(), x, (int) (y - elevationEquation.getNoise(x, z, getWorld())), z) <= 0; + int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z, getWorld())); + return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } } From b8441b69037a6927210dac81293dc0c5c9f25358 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 17:01:44 -0700 Subject: [PATCH 07/57] Make NoiseBuilder actually follow builder pattern --- .../config/genconfig/noise/NoiseConfig.java | 26 ++++++------ .../terra/generation/config/NoiseBuilder.java | 42 ++++++++++++------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java index f02ef80f4..7e63ebe78 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java @@ -12,32 +12,32 @@ public class NoiseConfig { public NoiseConfig(ConfigurationSection section) throws ConfigException { NoiseBuilder builder = new NoiseBuilder(); try { - builder.setType(FastNoiseLite.NoiseType.valueOf(section.getString("type", "OpenSimplex2"))); - builder.setFrequency(section.getDouble("frequency", 0.02D)); + builder.setType(FastNoiseLite.NoiseType.valueOf(section.getString("type", "OpenSimplex2"))) + .setFrequency(section.getDouble("frequency", 0.02D)) + .setRotationType3D(FastNoiseLite.RotationType3D.valueOf(section.getString("rotation", "None"))); dimensions = section.getInt("dimensions", 3); if(dimensions != 2 && dimensions != 3) throw new ConfigException("Invalid number of dimensions: " + dimensions, "Noise"); - builder.setRotationType3D(FastNoiseLite.RotationType3D.valueOf(section.getString("rotation", "None"))); if(section.contains("fractal")) { - builder.setFractalType(FastNoiseLite.FractalType.valueOf(section.getString("fractal.type", "FBm"))); - builder.setOctaves(section.getInt("fractal.octaves", 1)); - builder.setFractalGain(section.getDouble("fractal.gain", 0.5D)); - builder.setFractalLacunarity(section.getDouble("fractal.lacunarity", 2.0D)); - builder.setPingPong(section.getDouble("fractal.ping-pong", 2.0D)); - builder.setWeightedStrength(section.getDouble("fractal.weighted-strength", 0.0D)); + builder.setFractalType(FastNoiseLite.FractalType.valueOf(section.getString("fractal.type", "FBm"))) + .setOctaves(section.getInt("fractal.octaves", 1)) + .setFractalGain(section.getDouble("fractal.gain", 0.5D)) + .setFractalLacunarity(section.getDouble("fractal.lacunarity", 2.0D)) + .setPingPong(section.getDouble("fractal.ping-pong", 2.0D)) + .setWeightedStrength(section.getDouble("fractal.weighted-strength", 0.0D)); } if(section.contains("cellular")) { - builder.setCellularDistanceFunction(FastNoiseLite.CellularDistanceFunction.valueOf(section.getString("cellular.distance", "EuclideanSq"))); - builder.setCellularReturnType(FastNoiseLite.CellularReturnType.valueOf(section.getString("cellular.return", "Distance"))); + builder.setCellularDistanceFunction(FastNoiseLite.CellularDistanceFunction.valueOf(section.getString("cellular.distance", "EuclideanSq"))) + .setCellularReturnType(FastNoiseLite.CellularReturnType.valueOf(section.getString("cellular.return", "Distance"))); } if(section.contains("warp")) { - builder.setDomainWarpType(FastNoiseLite.DomainWarpType.valueOf(section.getString("warp.type", "OpenSimplex2"))); - builder.setDomainWarpAmp(section.getDouble("warp.amplitude", 1.0D)); + builder.setDomainWarpType(FastNoiseLite.DomainWarpType.valueOf(section.getString("warp.type", "OpenSimplex2"))) + .setDomainWarpAmp(section.getDouble("warp.amplitude", 1.0D)); } this.builder = builder; } catch(IllegalArgumentException | ClassCastException e) { diff --git a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java index 4c2e49c65..31413e844 100644 --- a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java +++ b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java @@ -48,64 +48,78 @@ public class NoiseBuilder { return noise; } - public void setFrequency(double frequency) { + public NoiseBuilder setFrequency(double frequency) { this.frequency = frequency; + return this; } - public void setFractalGain(double fractalGain) { + public NoiseBuilder setFractalGain(double fractalGain) { this.fractalGain = fractalGain; + return this; } - public void setFractalLacunarity(double fractalLacunarity) { + public NoiseBuilder setFractalLacunarity(double fractalLacunarity) { this.fractalLacunarity = fractalLacunarity; + return this; } - public void setFractalType(FastNoiseLite.FractalType fractalType) { + public NoiseBuilder setFractalType(FastNoiseLite.FractalType fractalType) { this.fractalType = fractalType; + return this; } - public void setOctaves(int octaves) { + public NoiseBuilder setOctaves(int octaves) { this.octaves = octaves; + return this; } - public void setPingPong(double pingPong) { + public NoiseBuilder setPingPong(double pingPong) { this.pingPong = pingPong; + return this; } - public void setWeightedStrength(double weightedStrength) { + public NoiseBuilder setWeightedStrength(double weightedStrength) { this.weightedStrength = weightedStrength; + return this; } public FastNoiseLite.NoiseType getType() { return type; } - public void setType(FastNoiseLite.NoiseType type) { + public NoiseBuilder setType(FastNoiseLite.NoiseType type) { this.type = type; + return this; } - public void setCellularDistanceFunction(FastNoiseLite.CellularDistanceFunction cellularDistanceFunction) { + public NoiseBuilder setCellularDistanceFunction(FastNoiseLite.CellularDistanceFunction cellularDistanceFunction) { this.cellularDistanceFunction = cellularDistanceFunction; + return this; } - public void setCellularReturnType(FastNoiseLite.CellularReturnType cellularReturnType) { + public NoiseBuilder setCellularReturnType(FastNoiseLite.CellularReturnType cellularReturnType) { this.cellularReturnType = cellularReturnType; + return this; } - public void setCellularJitter(double cellularJitter) { + public NoiseBuilder setCellularJitter(double cellularJitter) { this.cellularJitter = cellularJitter; + return this; } - public void setDomainWarpAmp(double domainWarpAmp) { + public NoiseBuilder setDomainWarpAmp(double domainWarpAmp) { this.domainWarpAmp = domainWarpAmp; + return this; } - public void setDomainWarpType(FastNoiseLite.DomainWarpType domainWarpType) { + public NoiseBuilder setDomainWarpType(FastNoiseLite.DomainWarpType domainWarpType) { this.domainWarpType = domainWarpType; + return this; } - public void setRotationType3D(FastNoiseLite.RotationType3D rotationType3D) { + public NoiseBuilder setRotationType3D(FastNoiseLite.RotationType3D rotationType3D) { this.rotationType3D = rotationType3D; + return this; } public FastNoiseLite.CellularDistanceFunction getCellularDistanceFunction() { From 567b06fd3fe08d9a4bce0d4040e483a47cbdd5cc Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 17:41:39 -0700 Subject: [PATCH 08/57] Bump version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 84e1fdc5a..ac068802b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ java { targetCompatibility = JavaVersion.VERSION_1_8 } -val versionObj = Version("1", "3", "1", true) +val versionObj = Version("1", "4", "0", true) version = versionObj From deb7db9b2551e455b61ef465e11ef6066e804c74 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 21:44:49 -0700 Subject: [PATCH 09/57] Per-world noise gen is no longer dumb --- build.gradle.kts | 1 + .../config/genconfig/noise/NoiseConfig.java | 3 +- .../terra/generation/ElevationEquation.java | 43 +++----- .../generation/ElevationInterpolator.java | 2 +- .../generation/UserDefinedGenerator.java | 97 +++++++------------ .../terra/generation/config/NoiseBuilder.java | 11 ++- .../generation/config/WorldGenerator.java | 65 +++++++++++++ .../com/dfsek/terra/math/BlankFunction.java | 29 ++++++ .../com/dfsek/terra/math/NoiseFunction.java | 1 - .../com/dfsek/terra/math/NoiseFunction2.java | 13 +-- .../com/dfsek/terra/math/NoiseFunction3.java | 13 +-- .../dfsek/terra/structure/spawn/AirSpawn.java | 4 +- .../terra/structure/spawn/LandSpawn.java | 4 +- .../terra/structure/spawn/OceanSpawn.java | 4 +- 14 files changed, 172 insertions(+), 118 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java create mode 100644 src/main/java/com/dfsek/terra/math/BlankFunction.java diff --git a/build.gradle.kts b/build.gradle.kts index ac068802b..ea3cb99a1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -60,6 +60,7 @@ val mainSourceSet: SourceSet = sourceSets["main"] val tokenizeJavaSources = task(name = "tokenizeJavaSources") { from(mainSourceSet.allSource) { include("**/plugin.yml") + println("version: $versionObj") val tokens = mapOf("VERSION" to versionObj.toString()) filter(org.apache.tools.ant.filters.ReplaceTokens::class, "tokens" to tokens) diff --git a/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java index 7e63ebe78..ff27b8439 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/noise/NoiseConfig.java @@ -14,7 +14,8 @@ public class NoiseConfig { try { builder.setType(FastNoiseLite.NoiseType.valueOf(section.getString("type", "OpenSimplex2"))) .setFrequency(section.getDouble("frequency", 0.02D)) - .setRotationType3D(FastNoiseLite.RotationType3D.valueOf(section.getString("rotation", "None"))); + .setRotationType3D(FastNoiseLite.RotationType3D.valueOf(section.getString("rotation", "None"))) + .setSeedOffset(section.getInt("offset", 0)); dimensions = section.getInt("dimensions", 3); if(dimensions != 2 && dimensions != 3) diff --git a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java index fc18d683e..af084cc42 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java @@ -1,7 +1,6 @@ package com.dfsek.terra.generation; import com.dfsek.terra.config.genconfig.noise.NoiseConfig; -import com.dfsek.terra.math.NoiseFunction; import com.dfsek.terra.math.NoiseFunction2; import com.dfsek.terra.math.NoiseFunction3; import org.bukkit.World; @@ -11,55 +10,43 @@ import parsii.eval.Scope; import parsii.eval.Variable; import parsii.tokenizer.ParseException; -import java.util.ArrayList; -import java.util.List; import java.util.Map; public class ElevationEquation { - private static final Object noiseLock = new Object(); private final Expression delegate; private final Scope s = new Scope(); private final Variable xVar = s.getVariable("x"); private final Variable zVar = s.getVariable("z"); - private final List noiseFunctions = new ArrayList<>(); - private boolean set = true; - - public ElevationEquation(String equation, Map noiseBuilders) throws ParseException { + public ElevationEquation(World w, String elevateEquation, Map userVariables, Map noiseBuilders) { + for(Map.Entry entry : userVariables.entrySet()) { + s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. + } Parser p = new Parser(); + for(Map.Entry e : noiseBuilders.entrySet()) { switch(e.getValue().getDimensions()) { case 2: - NoiseFunction2 function2 = new NoiseFunction2(e.getValue().getBuilder()); - noiseFunctions.add(function2); + NoiseFunction2 function2 = new NoiseFunction2(w, e.getValue().getBuilder()); p.registerFunction(e.getKey(), function2); break; case 3: - NoiseFunction3 function3 = new NoiseFunction3(e.getValue().getBuilder()); - noiseFunctions.add(function3); + NoiseFunction3 function3 = new NoiseFunction3(w, e.getValue().getBuilder()); p.registerFunction(e.getKey(), function3); break; } } - delegate = p.parse(equation, s); - } - - public double getNoise(double x, double z, World w) { - synchronized(noiseLock) { - xVar.setValue(x); - zVar.setValue(z); - setNoise(w.getSeed()); - return delegate.evaluate(); + try { + this.delegate = p.parse(elevateEquation, s); + } catch(ParseException e) { + throw new IllegalArgumentException(); } } - private void setNoise(long seed) { - if(set) { - set = false; - for(NoiseFunction n : noiseFunctions) { - n.setNoise(seed); - } - } + public double getNoise(double x, double z) { + xVar.setValue(x); + zVar.setValue(z); + return delegate.evaluate(); } } diff --git a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java index eab81feb1..428ade7fc 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java @@ -70,7 +70,7 @@ public class ElevationInterpolator { } private double elevate(UserDefinedGenerator g, int x, int z, World w) { - if(g.getElevationEquation() != null) return g.getElevationEquation().getNoise(x, z, w); + if(g.getElevationEquation(w) != null) return g.getElevationEquation(w).getNoise(x, z); return 0; } diff --git a/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java b/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java index 9e72e1638..b067a149b 100644 --- a/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java @@ -1,10 +1,8 @@ package com.dfsek.terra.generation; -import com.dfsek.terra.Debug; import com.dfsek.terra.config.genconfig.noise.NoiseConfig; -import com.dfsek.terra.math.NoiseFunction; -import com.dfsek.terra.math.NoiseFunction2; -import com.dfsek.terra.math.NoiseFunction3; +import com.dfsek.terra.generation.config.WorldGenerator; +import com.dfsek.terra.math.BlankFunction; import com.dfsek.terra.util.DataUtil; import org.bukkit.World; import org.bukkit.block.data.BlockData; @@ -13,56 +11,53 @@ import org.polydev.gaea.biome.Generator; import org.polydev.gaea.math.FastNoiseLite; import org.polydev.gaea.math.Interpolator; import org.polydev.gaea.world.palette.Palette; -import parsii.eval.Expression; import parsii.eval.Parser; import parsii.eval.Scope; -import parsii.eval.Variable; import parsii.tokenizer.ParseException; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; import java.util.Map; +import java.util.UUID; public class UserDefinedGenerator extends Generator { - private static final Object noiseLock = new Object(); - private final Expression noiseExp; - private final Scope s = new Scope(); - private final Variable xVar = s.getVariable("x"); - private final Variable yVar = s.getVariable("y"); - private final Variable zVar = s.getVariable("z"); + + private final boolean preventSmooth; @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) private final Palette[] palettes = new Palette[256]; @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) private final Palette[] slantPalettes = new Palette[256]; - private final ElevationEquation elevationEquation; - private final boolean preventSmooth; + + + private final String equation; + private final String elevationEquation; + private final Map userVariables; + private final Map noiseBuilders; + + private final Map gens = new HashMap<>(); private boolean elevationInterpolation; - private final List noiseFunctions = new ArrayList<>(); - private boolean set = true; public UserDefinedGenerator(String equation, @Nullable String elevateEquation, Map userVariables, Map> paletteMap, Map> slantPaletteMap, Map noiseBuilders, boolean preventSmooth) throws ParseException { + this.equation = equation; + this.elevationEquation = elevateEquation; + this.userVariables = userVariables; + this.noiseBuilders = noiseBuilders; + this.preventSmooth = preventSmooth; + + Scope s = new Scope(); + Parser p = new Parser(); for(Map.Entry entry : userVariables.entrySet()) { s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. } - Parser p = new Parser(); - for(Map.Entry e : noiseBuilders.entrySet()) { - switch(e.getValue().getDimensions()) { - case 2: - NoiseFunction2 function2 = new NoiseFunction2(e.getValue().getBuilder()); - noiseFunctions.add(function2); - p.registerFunction(e.getKey(), function2); - break; - case 3: - NoiseFunction3 function3 = new NoiseFunction3(e.getValue().getBuilder()); - noiseFunctions.add(function3); - p.registerFunction(e.getKey(), function3); - break; - } + int dimensions = e.getValue().getDimensions(); + if(dimensions == 2 || dimensions == 3) p.registerFunction(e.getKey(), new BlankFunction(dimensions)); } + p.parse(equation, s); // Validate equation at config load time to prevent error during world load. + if(elevateEquation != null) p.parse(elevateEquation, s); + for(int y = 0; y < 256; y++) { Palette d = DataUtil.BLANK_PALETTE; @@ -82,21 +77,7 @@ public class UserDefinedGenerator extends Generator { } slantPalettes[y] = slantPalette; } - if(elevateEquation != null) { - Debug.info("Using elevation equation"); - this.elevationEquation = new ElevationEquation(elevateEquation, noiseBuilders); - } else this.elevationEquation = null; - this.noiseExp = p.parse(equation, s); - this.preventSmooth = preventSmooth; - } - private void setNoise(long seed) { - if(set) { - set = false; - for(NoiseFunction n : noiseFunctions) { - n.setNoise(seed); - } - } } /** @@ -109,13 +90,7 @@ public class UserDefinedGenerator extends Generator { */ @Override public double getNoise(FastNoiseLite gen, World w, int x, int z) { - synchronized(noiseLock) { - xVar.setValue(x); - yVar.setValue(0); - zVar.setValue(z); - setNoise(w.getSeed()); - return noiseExp.evaluate(); - } + return compute(w).getNoise(x, 0, z); } /** @@ -129,13 +104,11 @@ public class UserDefinedGenerator extends Generator { */ @Override public double getNoise(FastNoiseLite gen, World w, int x, int y, int z) { - synchronized(noiseLock) { - xVar.setValue(x); - yVar.setValue(y); - zVar.setValue(z); - setNoise(w.getSeed()); - return noiseExp.evaluate(); - } + return compute(w).getNoise(x, y, z); + } + + private WorldGenerator compute(World world) { + return gens.computeIfAbsent(world.getUID(), w -> new WorldGenerator(world, equation, elevationEquation, userVariables, noiseBuilders)); } /** @@ -163,8 +136,8 @@ public class UserDefinedGenerator extends Generator { return Interpolator.Type.LINEAR; } - public ElevationEquation getElevationEquation() { - return elevationEquation; + public ElevationEquation getElevationEquation(World w) { + return compute(w).getElevationEquation(); } public boolean interpolateElevation() { diff --git a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java index 31413e844..927162922 100644 --- a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java +++ b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java @@ -11,6 +11,7 @@ public class NoiseBuilder { private double fractalLacunarity = 2.0D; private double pingPong = 2.0D; private double weightedStrength = 0.0D; + private int seedOffset = 0; private FastNoiseLite.CellularDistanceFunction cellularDistanceFunction = FastNoiseLite.CellularDistanceFunction.EuclideanSq; private FastNoiseLite.CellularReturnType cellularReturnType = FastNoiseLite.CellularReturnType.Distance; @@ -22,7 +23,7 @@ public class NoiseBuilder { private FastNoiseLite.RotationType3D rotationType3D = FastNoiseLite.RotationType3D.None; public FastNoiseLite build(int seed) { - FastNoiseLite noise = new FastNoiseLite(seed); + FastNoiseLite noise = new FastNoiseLite(seed + seedOffset); if(!fractalType.equals(FastNoiseLite.FractalType.None)) { noise.setFractalType(fractalType); noise.setFractalOctaves(octaves); @@ -107,6 +108,14 @@ public class NoiseBuilder { return this; } + public int getSeedOffset() { + return seedOffset; + } + + public void setSeedOffset(int seedOffset) { + this.seedOffset = seedOffset; + } + public NoiseBuilder setDomainWarpAmp(double domainWarpAmp) { this.domainWarpAmp = domainWarpAmp; return this; diff --git a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java new file mode 100644 index 000000000..51a72a5ea --- /dev/null +++ b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java @@ -0,0 +1,65 @@ +package com.dfsek.terra.generation.config; + +import com.dfsek.terra.Debug; +import com.dfsek.terra.config.genconfig.noise.NoiseConfig; +import com.dfsek.terra.generation.ElevationEquation; +import com.dfsek.terra.math.NoiseFunction2; +import com.dfsek.terra.math.NoiseFunction3; +import org.bukkit.World; +import parsii.eval.Expression; +import parsii.eval.Parser; +import parsii.eval.Scope; +import parsii.eval.Variable; +import parsii.tokenizer.ParseException; + +import java.util.Map; + +public class WorldGenerator { + private final ElevationEquation elevationEquation; + + private final Expression noiseExp; + private final Scope s = new Scope(); + private final Variable xVar = s.getVariable("x"); + private final Variable yVar = s.getVariable("y"); + private final Variable zVar = s.getVariable("z"); + + public WorldGenerator(World w, String equation, String elevateEquation, Map userVariables, Map noiseBuilders) { + for(Map.Entry entry : userVariables.entrySet()) { + s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. + } + Parser p = new Parser(); + + for(Map.Entry e : noiseBuilders.entrySet()) { + switch(e.getValue().getDimensions()) { + case 2: + NoiseFunction2 function2 = new NoiseFunction2(w, e.getValue().getBuilder()); + p.registerFunction(e.getKey(), function2); + break; + case 3: + NoiseFunction3 function3 = new NoiseFunction3(w, e.getValue().getBuilder()); + p.registerFunction(e.getKey(), function3); + break; + } + } + try { + this.noiseExp = p.parse(equation, s); + if(elevateEquation != null) { + Debug.info("Using elevation equation"); + this.elevationEquation = new ElevationEquation(w, elevateEquation, userVariables, noiseBuilders); + } else this.elevationEquation = null; + } catch(ParseException e) { + throw new IllegalArgumentException(); + } + } + + public double getNoise(int x, int y, int z) { + xVar.setValue(x); + yVar.setValue(y); + zVar.setValue(z); + return noiseExp.evaluate(); + } + + public ElevationEquation getElevationEquation() { + return elevationEquation; + } +} diff --git a/src/main/java/com/dfsek/terra/math/BlankFunction.java b/src/main/java/com/dfsek/terra/math/BlankFunction.java new file mode 100644 index 000000000..def469f97 --- /dev/null +++ b/src/main/java/com/dfsek/terra/math/BlankFunction.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.math; + +import parsii.eval.Expression; +import parsii.eval.Function; + +import java.util.List; + +public class BlankFunction implements Function { + private final int args; + + public BlankFunction(int args) { + this.args = args; + } + + @Override + public int getNumberOfArguments() { + return args; + } + + @Override + public double eval(List list) { + return 0; + } + + @Override + public boolean isNaturalFunction() { + return true; + } +} diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction.java b/src/main/java/com/dfsek/terra/math/NoiseFunction.java index c6685666a..ccc604c9e 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction.java @@ -3,5 +3,4 @@ package com.dfsek.terra.math; import parsii.eval.Function; public interface NoiseFunction extends Function { - void setNoise(long seed); } diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index 3c15a18b4..08dc65c7c 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -2,6 +2,7 @@ package com.dfsek.terra.math; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.generation.config.NoiseBuilder; +import org.bukkit.World; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; @@ -9,11 +10,10 @@ import java.util.List; public class NoiseFunction2 implements NoiseFunction { private final Cache cache = new Cache(); - private FastNoiseLite gen; - private final NoiseBuilder builder; + private final FastNoiseLite gen; - public NoiseFunction2(NoiseBuilder builder) { - this.builder = builder; + public NoiseFunction2(World world, NoiseBuilder builder) { + this.gen = builder.build((int) world.getSeed()); } @Override @@ -31,11 +31,6 @@ public class NoiseFunction2 implements NoiseFunction { return true; } - @Override - public void setNoise(long seed) { - this.gen = builder.build((int) seed); - } - private final class Cache { private final double[] cacheX = new double[ConfigUtil.cacheSize]; private final double[] cacheZ = new double[ConfigUtil.cacheSize]; diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction3.java b/src/main/java/com/dfsek/terra/math/NoiseFunction3.java index 55840d60e..e9294c79d 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction3.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction3.java @@ -1,17 +1,17 @@ package com.dfsek.terra.math; import com.dfsek.terra.generation.config.NoiseBuilder; +import org.bukkit.World; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; import java.util.List; public class NoiseFunction3 implements NoiseFunction { - private FastNoiseLite gen; - private final NoiseBuilder builder; + private final FastNoiseLite gen; - public NoiseFunction3(NoiseBuilder builder) { - this.builder = builder; + public NoiseFunction3(World world, NoiseBuilder builder) { + this.gen = builder.build((int) world.getSeed()); } @Override @@ -28,9 +28,4 @@ public class NoiseFunction3 implements NoiseFunction { public boolean isNaturalFunction() { return true; } - - @Override - public void setNoise(long seed) { - this.gen = builder.build((int) seed); - } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java index 2df85238a..a2fc71115 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java @@ -21,8 +21,8 @@ public class AirSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = wc.getBiome(b); if(y <= c.getOcean().getSeaLevel()) return false; - ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); - int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z, getWorld())); + ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(getWorld()); + int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java index 6c6da9162..1158c3f65 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java @@ -16,8 +16,8 @@ public class LandSpawn extends Requirement { public boolean matches(int x, int y, int z) { TerraWorld tw = TerraWorld.getWorld(getWorld()); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); - ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); - int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z, getWorld())); + ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(getWorld()); + int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) > 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java index 85249dbef..25d247cc5 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java @@ -19,8 +19,8 @@ public class OceanSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = tw.getConfig().getBiome(b); if(y > c.getOcean().getSeaLevel()) return false; - ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(); - int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z, getWorld())); + ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(getWorld()); + int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } } From cb537d05148c1e5ccef20146dcda1ebf39ff3fc4 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 23:32:04 -0700 Subject: [PATCH 10/57] Rewrite basically the whole generator again. Get rid of failsafe biomes because they are dumb --- build.gradle.kts | 2 +- lib/{Gaea-1.14.2.jar => Gaea-1.14.3.jar} | Bin 590492 -> 590723 bytes .../dfsek/terra/biome/UserDefinedBiome.java | 14 ++- .../dfsek/terra/biome/failsafe/FailType.java | 61 ------------ .../terra/biome/failsafe/FailoverBiome.java | 13 --- .../biome/failsafe/FailoverDecorator.java | 10 -- .../biome/failsafe/FailoverGenerator.java | 24 ----- .../terra/biome/grid/TerraBiomeGrid.java | 2 +- .../dfsek/terra/config/base/ConfigUtil.java | 11 --- .../config/genconfig/biome/BiomeConfig.java | 4 +- .../genconfig/biome/GeneratorOptions.java} | 89 ++---------------- .../terra/generation/ElevationEquation.java | 7 +- .../generation/ElevationInterpolator.java | 17 ++-- .../terra/generation/TerraChunkGenerator.java | 3 +- .../generation/config/WorldGenerator.java | 81 ++++++++++++++-- .../com/dfsek/terra/math/NoiseFunction2.java | 5 +- .../com/dfsek/terra/math/NoiseFunction3.java | 5 +- .../dfsek/terra/structure/spawn/AirSpawn.java | 4 +- .../terra/structure/spawn/LandSpawn.java | 4 +- .../terra/structure/spawn/OceanSpawn.java | 4 +- 20 files changed, 121 insertions(+), 239 deletions(-) rename lib/{Gaea-1.14.2.jar => Gaea-1.14.3.jar} (93%) delete mode 100644 src/main/java/com/dfsek/terra/biome/failsafe/FailType.java delete mode 100644 src/main/java/com/dfsek/terra/biome/failsafe/FailoverBiome.java delete mode 100644 src/main/java/com/dfsek/terra/biome/failsafe/FailoverDecorator.java delete mode 100644 src/main/java/com/dfsek/terra/biome/failsafe/FailoverGenerator.java rename src/main/java/com/dfsek/terra/{generation/UserDefinedGenerator.java => config/genconfig/biome/GeneratorOptions.java} (50%) diff --git a/build.gradle.kts b/build.gradle.kts index ea3cb99a1..4c4334e23 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -35,7 +35,7 @@ val versionObj = Version("1", "4", "0", true) version = versionObj dependencies { - val gaeaVersion = "1.14.2" + val gaeaVersion = "1.14.3" compileOnly(name = "Gaea-${gaeaVersion}", group = "") testImplementation(name = "Gaea-${gaeaVersion}", group = "") diff --git a/lib/Gaea-1.14.2.jar b/lib/Gaea-1.14.3.jar similarity index 93% rename from lib/Gaea-1.14.2.jar rename to lib/Gaea-1.14.3.jar index 966ebed95d2605ca6de05c5b3e1af279a03aecfa..62866ea34bd3ef50500de629c017194f2f8f2883 100644 GIT binary patch delta 13232 zcmaKS30RHW_y0NXIh}U%JS(Xr87e~(sf?FG88So(8A2pOgeD4&M7u%CkP<~I2ZfA9 zsSptrMb}*6n(4RRy-#(H@BjJtJnp;qXRY;FYme_*@3{wdn1n@`D7ZNB__7=hLYyOK z*X&X7=dq8lUgVM4mptwdR0PoVXPN2ZDGY~G#*fca)yg;JE@D`5e0`D;zPt{}#h>TN zvp{|s&qtP6ta1ADdjnY1^YN9tj26+t8`dL@{Edpi#5n(l@^Nk_%U*psT^>gwAlG|? zCiXlb!{LOe;k;5QEl|lwvEeBAdST7=V-{qi_LJ% z7KHvM=qQvH6$j&3k%K=I7!`LI45PM!dF1QKtG`D<4gQlafBH_b;<9F8`G0@KV|W4$1xp8wdlNs9Qn zw62^+5Vf(CHrzHxN)gYd1N%*O2j-bLBwfII*3LHwUPotnf0&{)YaieDw^4lAZWY4y zbhjHN9U6C1K#&&+UkE8|rr|_gC)u6|+>?8AiIc>EISn4*L_a<#+c^Jp%67^>EUkq` zV|aK0LGW@7X(Oz(1F6TK&k*g$jBGlc>$6>GqbxU$1Q73D@SeDFDzvA8L>J9aWfA3LWM@-x{BscHbNBg{I@wPUKjRSvD`X z|E#Um(v4f%ZbS6;Z~*mgnt27TNiSXh7YCBZGAGorQb$D`3ah6KJtB$}!3#12BEW4i7OMR=w zv()I6h+hHP>qpfzsc=sPdB@CNUZ1EEU|8VsP$%Qvly`f5FUR)U8PNVJJl%G*tih4P ziOXka4;+)f=%QY|-%z{5b}0{{5+6PesEZvx5Ucb1`TwGD1o1hhcvae}Ka@n^-w=YImj&rG<=zM=yv{UATqqf&R z+h2>xI~XfBve@)i@$M7hLpMzkHpR=Vn&Py$I5DHA`xMKhk(7!@;GX8$bZrG zbIm~pwm0t{oiXE;p6p45q-*=4`XwG|O?bR?w%sS6DCUF9`Da`&npZL_ z>HL(A#_|u>7N3Z1IRE6#dTe>D(zX0Fd$H%W*JKI-i2(yI2keRH2_Rp@_->+|8QbxGmt2bL#=7V+)54%l*9^LIJtTRTTB z%DSf;fAe*!_t~ex$-4W$_i-`scGs&g%`8~A%|v%8|3y1gTmJP$Po?3&u{bh-R@QsciKm(I0K-L}-z@8ZSCMy-K=E>373_OUW;!=D|E z_utQY^XJCuplH=^|0w2-i_$0z#Fow;`QJT+FN(^l9&IU_@G-FLt#zYI|L>bWE?qS$ z>z|-YppwsqS(^YK5OtSc8kTrw%8 z;d)r@o>Y|Jacx3a?=1tG)%w}AUj3%Jt@Y&3r%R%}^_D(d-hbneQT8hRv2OXwXiu|c z6*g}@9-Yiv+gxEAJ=18~d*@4LMiYH zE?Aa0jguPuF*$nnGwZpoM@ur&-Jaj!g!Gcq80Pxo(k^}3@YTJJmE6&B9T@Z{yyKZk zhi|ibw%aVfZ8jGBl@y-7_!07?c-bcFGH&Y`6F0L#r6(+1N>%G(*47*emwK>!{<^%7 zDb~|ITg{d6Qoj?F=pc8@CeWbh#{EbA?gh*%E_?e@weGt2JFV5t!QcAXUcaoOGR&_` zI;v`k7b^={%f9DX3z|0XxIZGFNDm7H^J3R~0+-q;1JmrlyM zsJMJu#oh8-}ukWyKd5&?eqT_`vrOY3Nr|b^{zB3 z{o2mkg^u@Z@(xeGIW(r{^U{LhZ?f+M8n(%9YbuZ~o-}r`&xG9Od;CRpEgm^>Q{TtJ$Y7JxsiPT`akaFZ#PWe%WV+U2IbAa(%YzGpjE;- z=~eHqt^B9Yu6KPKZcR9M%~cQ2G_CVp@@cdF>PI;PrnMccIn}nJD7tX1=jwZbAt!A1 zejUE@Q~!w<9{*0R|L^GWg@J84?uCsiW&PC8`8sX-BQ2SCHmK_sc|dOV2*rDC)?(lB zD*3e!{7Cu`?^O2>$r=*s9+KoHe|3`)&7;ug^_vSI2m8dq&#v;c@TpzMEWY98C8D0z zGMXlSEA&2oFcNS$Zu0TzVT4>cU-R_{0m;)=?Mn;ba5*F-L1+rRZVTv zpbiVa`q2cY@9)8c+w->@Nq-8@arcoRg;S-tn#4-DOu+3;FdQe#wPw|Yw`938G-A)| zNlSep;!qA5Xs#j`VTTx`id7W30Yo=Sk*kSFXyuyB-2lkJ8l}5*g;ko|eZ(`H;U(B` zrEs(^m*ic-1G?O^BxS}k&A1~7!{DurH4!j!BV{sj!#LDaSYyWBLy|AyG7GLh$=h+m zFs>sp`19^wurs96{rGsnztURZKn*+WLApXe8?GD4{Dik{xe+u4*4lAYuN2}7#c@md z+C*1&FH#g@JMLW)qi}^I*O5$|@YHzjIO_GQGuN87ET?m0=?Vo_@2MCB%fATWLyNg4 z*mF8pApAO$JD$$1!(8q>N|WZv{Y>XJVKKLz%-3#jt}l)3=Th!>x&&XBb5*FRoG_7-kCZ8>j)kcg`>!Q38nTU>lO`0WHR zR%hZ{?`YxrB&00d7shoZdYy%l0&YuZ1Xy_oUGRvWJGjE0JD5~;LUuWcImT0AOOxvt zcKG@NSq?0u(Vpk(teITUz(p&){QaY+6;0t;Dfbvt=7>y+uTGz#?hw*fd9t!pdi7Wr zzT^9%#A~~T8<%Qb_q;p$igcUnPP>11#xbG&HoUJ-dOYWCgS|&1r^kX+uWOGI?X`c` zBy2U1>l=_&aq&f;Ir1gi+4^_2=0%#cV6O?|2bS23xyAc(#$ZhEgb#B~f+nqaUM|1l z$%s47!<~!fzYNHlT%*72q0Vi-J>FGtRj2&){zXA+tj4OW*fV>;()(o@Zq`T3rp0<4 zeAM9eW?#$X2magbbov@Z$GqCQ>%VWS2A2BQ|M2tukcV-`O-%_&hZCi=o6v-?{G`Rgiw zXzVUumuozo6I!oTVKp-FmFx|pp}|{EPCKb!m{=OxQ)7XOQ%$C4S#zIJ+^%bm&ldc` ztb>d(-K>@Aj8#{uhD*vBDcm=Up(oiUi!q{GaQ+F#m|g}21?JogC>j0a$qrd?1j!0d zE|Gng7VaNZWk- z!e!VhTct=b%EqFGQ5sSbYTjgS(F1xZ^Fs3y(D}oU56%WsR%Lk_9H4%;m^E}j2g?~+ zsS1}>GEOx7vv-*Uy49!NXF9LP8b&}q5(xe386|2P*2vtZ7B0<s=aBc`sRp`5xC!is0T+iD~FR0Ify#Hu`@3!$om)?%d zs6h-6)M2aHQj|al1g2E4HjH#I*Nr(`fu$c5%s)}fV!~&$q*`w)LdzB2KO7hW{E=@H__V1&TPSZVa5p51 zK4S#87ZIBA6}(5-8NlTri9ebE%51WI-Ag{)l{&!h&^(e6hjf)}aYR6x-Q&ybgI1WW;(jkD9MX3p#c5 zu=WPjpY$edKpv!#wLxSdyHRAZd?Ol1M0p#L8)?V}pxLD19e`X(<9q;`Ng67fM52|O z&~$=yv>+|~c$3Hv+AN~iKLv2eX4H=;o!TrS;sqing182vNu+Tw5X~ozKY?f#Y0Tb& z7L&&1Eux?ex1z}e0V_Qmxm7en7q^Or&|@1~O61|&&hDWoAADjGd3fF2GG6%G1Ss3^RSP~=S% zmxhU`?}Uk{`)wBm6t!K%+PEF9Aj*?>h?MhpATNSwg^T87V>nt)kmhhShcxUXkTdzL z)%7t6Cq|&jhU`J@PCX&*A%~*#Kgti|+f~&_GK%}|L>h$3aVOGagmpv$>837@+=Mwh{X^M?D|zLT9ipEPx=&)bCziHo3JK*VY3lnfyp#}r2V zdIc}_?T~Oua>)JLsi})CcOyfh-ktMuIF=GFU0xG)_FG%L=4&O4!bS1t?FP3ct*n$y zgRwb$V@rrcl@MTNRq>cBSpJ| z-7C!g-}q1#PaQi%A$~%X$h%S$NXok}9;gYEai1L6=J)|5DQvMpFrLmU~0^ogqHE2Jf0%_rGV z37gX64{@T{f3rq0;v%Rr=moNT4~VQsh*@>ma^>;4J)*_ysyg7C@Sx5>$+N^x%m^wG zU9wCjjdk(wAt8DNKWhw^(64nA(@%HgYT%%~qWEI=LJ)cr#N-g4B5vG^Gzn=?Zm8`G z*!2wT`e72JizbU10jUfg8;>-}oXn30(gV}Gvfo^&q~Uup-8rinRBm9wh8#b3M-*z%r{q=tCvK{vuL6 z?+rO)!3ZPGLo3{HX}`w=!OK zSF~$tCf6Owh3nG?VwL27yn*t+#FQWZVp;A6P}Cl(L^5^V<=x)|)tjkm5~z~Vo=yaU z>su%qy#Cn0rm`1&0GTG#^15(CSkCo%X_I5-KJ6V@Eov@#5b zBted_GYpQz`y>%7n>LWcHe&}nb~REbD*bgOV8>)2h!oSn8G_6p-Y&0=s!J^Ws2a6mMk0S5q9JuZSF@mIua4u~$6I94|7q)6s)7^&cg2ap;G zc!rB-Q^O8Gf*Pftrx|8yiFDP;2s2?8&|t| z6tUq|Mgwn66HQvCmHx{U!1M|JSx7Jz;O7UC4u+Uj@u`DIjReqLeQ`L0CDc#e6n6pz znI19dF2y(;8wrErTjB;#p3!t73M_d672>igkP));O}}mydWDr}!=;7>Q(V}`Cf}uGz5LrK*eMkhKXW{wJL?#~&i82Pc!vLGV=ypvj zh0QD+)gpq~G7}fW5|JHs7i3KK3d}tQmkrs7>PJLLhUF0u&0IxA-bYYxVi3)u3TwIy zH1V3%JowKpQE0ze`Jc5^4x=~5Y~hLBkBa0zM?vnoq03$o=Nv_99+v6_cfwE60|E)SNQE$ra})WXk>AwJ`Lmz`WS zydaV%h5sBA$zSI|;Gvx&W4?mKtCDRgyW|3 zHR&QN7a%@Yjb-wjyC~!_uLR~g(4`A8!7i5|?$i>9J7pSy6O#Fc6qUaMsO!uwWjXA2 z1=%wZv&4|E2jQ$dyAB+$S?#rR#AJi7g7%rEV#wjE$bosiTnw3$$5*A^tj|a+9xyN*U?DkU5FSm?-uMFmm9DQ9y`V0 z$|}AFC8@drBqmW}GM$^?vN%=@>0ir|uoIYb6SM~;h{;mxJ10i36l7kBVlwYiSnTHq z#gN)k;Qn=lZk$nNu+L+QXeYf4Zp-pY+Tq_qLzz*sIOHB26^~o+nq%*U5Uz|KlcUU{ zeR0Vx7}IA_$8)xnE?!d(0ovb&AXceSoz~m1clO>!gBSzNE@TuFU`RW&%OSkh-n27! zm6R5xcvlV-wq_L0SS_W`!t!`-1zf>(mJ}Wr03Te7DjDXg|j3SQK#*Uv1xU@V30s$iq}IMGgK z6}$y>r_qjlHEcN9S+ujU8m2O29_`dugS(O5v~%$;;c5rjQ!&@jd;mckVerPS$aysQEHj=h-s04-y-9cQ05_*D<~@Y#VPPTdl>U-Z!2eu@$P)Ag;-N2mC{oZDsN!u$pjd-F zC-E^tGSf+WLiI~b1qko11%I!)5l!4$3!@xa-=#wkgfE*26!7h{;6CCJJMWEM3dUHz z85W$Z$#+)vp`}ZviKjdUx)EO}l5Qt}Pqq=F7xUf6@F`>%KJ*Zo;9!4&G}f*|=G-7L zz_$)Idfp#uOjPv83*cuA_P|I#0aw1Vc+V4Lfg4=~YINW6W(dTSiTm=bf*%v6$Ughw zwwVI5Zx98{0SGulS9vwb=IICAHG z=eTtmKvAzhKGc8);z)m32x7m3h5HX=;l)g-6*c`3KmqwGLCTOzR^BaqXh<3CGa_@{Fz8qeD-u&zGmUK zt`xRtf`d7B4%;!t$I~IO>?YU{QS&JBy$SVn_;Z|dG+#2n751vt1FKHs0Arl$BuGt|r9d;wYXY4Cf6dST z=cwKgnP3G*Mi$rqi==V%zwj+XaVw?j!fkj3A%8(~SiXuUi(OucVt}uSdc1X^Wb)K- z+$;F>$SzJE3!f8%Rk6cufgJ951%9N%y44A;L-_E9*I@nZZ=n({e~pv~Ygb17Whb2( z2X$#Vtp7$73rUoR?dlT2cZ)Yj4sWlPI1gdn3Yz$OHLMT3xa4v5TgW8m)JfcdGvd3r zH1YmAP@VG@wm`^1F*yG%9IL(;#1MmbkacL>=|TpxR{wi_O72SUN~#~HA+3aeyaO-U z;>hIp@Y?!bEv5sAEVk2@mS^t^b7sgRF`3~9$RzeW5ktz2q?OrwRy58>rqbef{ryI& zT0KQt9l!YiMO%h6_G^c%w{eQJDt2!L2avvYB2qZN6?Aw;6tP<_t$=&BfzEDYimYve zVldi-?U>=}HkhC`)2(Bfp~#v~$c`I{d$odpXbbSuPr#(Hj!LH%LBRif2L0e|`0i)8 z-qJq9ajV_UcF2#TSRoS*e|!w9uZ`m(c+z-cCg@j-BPCfpgb!rG*$E@;MmQ>mr-9wG;q_CS1=r{Wp`?N`t~||C#FodwSpA};3}M5wJo-}+ zK6o7Nl0GGWE4(}o`_c2p-|&h{JQdcdIn#0LZy9h3a6vY_W6xIpEz>vwU$43@;5GN9 zvDHbar*lt;y?=Sx6z+@pC*i<!Y%&| zQ&LbXu}7jGu?kkW`ajrK9(8QT2wQxC5-GHS?exP*Um(NX(nvc`8>Cfm@=xH=`3h63 z)I_b9e1-k|*zY?F8{y&~V4D4dc65KjJGkX1HQ4`EmqZla;6D(a zq8f#LRpC?G!9Nh0c0Y;)n8W8<_SXfh+5x+0VQ!)mODip9_kieC(X9hW9__4*Vt7hS8`ojNA2CppkJ)?w6xiaRw d`C^a*Z=`>>f*L-!7H+z5Mn+li-Jksg`G5I%i3ui z{tbce_OR~c>#zyG7<%OvO7P|S^}6xA2`rCyT_*mdnilq4iR82UG1FL%6JN8(05<~? ze~z!f>1JQ&`^a&U>_JMG2qpWAN(S?byQ8bT4xjhiH)sED|1sT;%JO)j>hURlTENIw zR=*`nY}9tiB&yjldK3A?#^dgmM51Gmg-D~sG*Fg=84xvp%zX$`Nr+XH8LjvbOSx?S zfp2IGUY0Y6e)jpHZ>YtLVGY#cZu>#RP?>$b4A;Q3BN&7D$ALoSKLX8e9+{>{sJkbh zr6bCl*9-dvBlOppwxa!8;~|kF_nx9>M#zJB-Kkz2? zwRQD1+L#)&ML?o9wlH({02^+?_>d!9(AwF0A%Rl;FeMSm;v*f#0GDk_|A!TM9m}7h#_O#ZIM~) z1^&Cni;oy)XYCEAt}XZ1(?InP%%W2pmgYz_ucsZMnOu3qg*L7qk0Y_fd*n0{%DB^Z zblls{Pf_C#TylqR5bx3|kF%nY;I9e3(CbvtAQ6veqeN#;N>mZ=o9Zz|x3W`>JK7c( z&V)YSICGA5Kh-{Fn-otLuJqMi5+<-HjNFmaJ#648{+v;I+p-qdxK|m!8c=GxXs_|< z^0Ff5y*Vd&>rUV7);RIv`Kdq8e|dP~Q=c)7Z>;QIda<)b%* zZVnh?IQz|^?M8wB7T$gsG*q)Pd+_{;!CP1M%FoC!DtOSs-djJ-$L64J?)qtu#rf%B z{dNu7Hf`$u8wXEM``P@;p>ogLdezWVi{6h$yVB(fw)lirb<&NQmN2xZqN|EhisrrU zGAhSHL>{jsskawxSfakD^{0+T#pKHeNB!J;pe0t6eSWQtS$N|EReQdz$zw^$?CQJQ z#)Rg+^qG#wJ^Y$AIq|}ly2f`;e+-fhh|mx>ba%NlaETk9{V2a`>s*t2I`?nC7-*Qf z($Y@vQdqRGEPO#|qT8!suk$o=h=19r6)gvl(@8{)e8y{R^KBjKk zVqNED*J^oHDsy87t4?jsvX65xPuNv(X3_h|kD8Zk8*WmV?Cyxx#GMh za<2K$ff=f@jXP(G(FH3#d*un?kDVfN&XmUT6fNrC>>PaUepUL4-N&qi^HLS$Dwa(N zo$%4L)x5k^^YoPJ92tWvLs!V zZ1ZT>VHO^RvrlB+nPel@^Nw3F@ovl<$(I%l_o8uK2gLjJ{o=UW-qG0jhW-3O>xRv) zSEyDtF1)7ZR{l_B(%q-VFS|HQGRU}{9^X*7_|Oicq)CeFzHRh7e6_slSi-rp#9aW^; zh+|6XwlJPWc#(6?iPEl?-b%AHy-nuq9F@HB#2wo~dlc#xE6B903=aFD)%E-RnmzwM zUE)axaen#E?XlJcVly4FepbB2 zGOMtCUm8~Z)8fc0eLB)O*Oe z4uS8(t`2#3_8-sq@PZiYeP*nl&AF-bXRpfIW_A5bl3{>2(9O*Dkj|KZ1&vGYY@6;g zAalsW=mD3{BJkX45^Fd|vn8QS-ID!Td1 zy>oW>(YxDqT?QfXuKfBXEwkqL_(XgDY6VA01um-)2_6*C#{^6ddVs@-lw^^H%7y09U zbH=aXc8_`rL)a{Ie&sTdvM7Fl*dL+Q`{nSY>QNWE_*MhVzFsby1py2$@5ecGm?|T-?Rzw=Y;tebsGr|0=ymhtZ?{ZxhJNdE z;#BqPD^aZiuYaQ06Hl?<&pPL^_Qs%eR#Tz#KZAK5RT7|^0X zu^!QSPy2-ou|mTFi}W!6!Rb2AuEs-ZoL`9R07JfCSH0q_?vezX|PY^m#UisA8=istm}W;@6B0XMy-F{@XLB$2-Ag5YIPVBM%1{ve<0^4YIg)9 z*&V^|(;!~064^tvc1H75+<0J(8oZUs%y=JSw%ZfD> zr%z6G+U*~-{M^f=_u?~0#=D$bIr8JvAx7iFHL-E}UVOrLvcu=Y{SL$a6lEe)~U>pk$|f^9)>8>ci`Uuc|LyS(m4?70P-e0J_R z6=Qtr;H}g7kI$VP)5u|8VMC^b%z;zr&`L z#O`Me>7qHE%Jyq_Bk<2<1z076C6`4>w+xovlGt4L@0#trry z5lSL%vGhJ8nOMq>qtbnM*#w4Y46b0M8++nCR!ACVAnGhRu#~@&hN0une@k2P0elx~)N2(# zi0--SVE#wChaWjkX6(S!avAQ5)CG%cSw)E`gg==o&)mrOqH*Mh^AEBp%X6`-o5OWg z>=VVG+4WiRjfvw=PC`n{735?UdF}4qz{Ag?_yhQG`6s6x?t7Onz#(_watM$lB}P;= zf(TV-3C&5vewI)lcdHP|1ScM1^gN1`sf#u3QDCoX%1Y!Y^-m_? z0F1EeCSea;RxOl~q~8{PyeL_BUzCQ4cSAq)ga(v#7-`{dfykSzt=7dz?ZU={KtjnGwS)^Fm^RY2tA7ORmLX~eFU zYP77DYPhUHBZ+AD8Z?zOTGpUxq%nRiawUzFwaAS$TGvWNlY`J?f@B1t;iSENMgpqnV`fJQ%r?hTVEJk2DUgmxe0ZfSd{9zCo&WaDy~v zz8EbeqNQRqg*1x9QZ1tpG=m@;L!_LB5b3x^hN8JdbTkxskVaV&WV6RcWK4R_8<7iX zq-;bJNTX%ruS|qV^PdnV4XQp2%_p1*;ZmzP;Zmz=5z<%+YGHaeMeS zq*Nm@63r&ak4R}cyrR%zf)q!g>7-#CjmDFwTiZJbERL4OP#TSNS$q%Q2}gS5#RXR0 zgf#VG!aHmRGwG(_@l<%<9c-(9^SNqD*<~EVYVhdWL2j*tZUU>D{$Syon~)g^=s!+8 z=SfE+@jaeu;QY-bcY!Zw}sfoFT!gl!{fAYJw`5*amP4T;AqXaLgR>MoS-ki&}&m^J{ z|MR;Rwu?amT>A!z$i8*m2Ih|Puxbp_#?u%^2|s)z9myeO^`Hk}p&yLIu+0+Ja1?O- z&bV2?C=h-(ZlYfVtu?O&?|O*GGw;Cnz$!7wnhq=m{DsMJ`s$=Y{c8}v%h*57;2ND0c1U-#%MKX8g`va%USkcDynlyu`5os(PBv83 zvO_vzrFcNS95}Qm)^TJsu+>rNuos?uu>P%p$J1Bf@rHHqcVHC9ABcUO7&%-PFLm&U zGxd5rHFe0DQ6nOfk@3wNnjIi?5rjUVgDFEiYbSCf8Ch4h{Z@Y<%!SlhbReB}qfz@$ z1%KB+N&PXqz~6uwRP=TRqljDAOGUFd(GG7K%7j^rG7%9kuX|O0O$X}@@Ym7Hrg8&wIf!cr^SFj)DxtevO~M8uTqm+tEhLExqErw@O>KlRHgzsv4lhxh7;ib>${ z70h7A9aOx6Qeo92EDnIHX5Jxb-Zt$9*Rxi&bA4;K)V2E5^8u&fJX!VED5kAx$2Z<1 z9fi#vFy$W9P80$nGK!nlcCkmm)Z)KPjSFtauli-Gg)?Qhp`B=8qSVW{L=X)Q!6y^p zDJf1wYTdY!|HAVDZ=Aq^1}wSmzjFjFH=LD-`jUBs5<{1*4yQ+k`d*|)VtZzHaO@Nf zhS$3X`^WN7i=fop2&OCU#mLgfROcm2wC2M&65;2lj%hx%2dC~u1BulR_rMMTdFKaqF)u9#KYk5>$qQBjuN}r>lv$xFYH6=grAdR z%A|qC<#1|r%>Alt%16mCR4#zIH-5Z+0s%0>KM$B0=Qye{p6Jg~U-JH}7HSKrDY)^GpDOXh{a~e}sLhHR-h2S5lSk??PITo8RcL|^K^0Q~ zy?33WE-6T#c&rRr{2~y7mw~Zbb;#cKo0OV+i`Br@>!e%jA!o(oHgyYkG6k%Y3WWp& zkNc#8DB}**T9FEmG!Bj7P{(qrKyvI?!3wc{s?^{sPVP}b*Y+H+21g#Y;mV&Nv{$gRe6o)C*6SnAio%4HwC{UFS7gD+nZql40i&hLxx zpU+OeB^+OyyA~S})6ZNJ<+p>`K$ro?4yKKlaa0#_7KAN47x)QSPOygUIzDwI_mXNnzU$P4gvaT14X&JH6DHlX%aJ@oM>?nu2Xy(Bm)F^GAoY3Wwc;;cGZOyS%`pz&=0vT+jKUmF? zeBRt;ehU^av{<`zN&8BHyLLjYqXl~k4v;8Zmb0Ye9PKn9Md<8Ed^mc5GM{Mf~5P ziEPd3cH)=s&=9uyY&&G^do+ygl~0kB_h>A8{Zc!z`Uhmoim$apf<8cn&kfwV7WV9r zTYNmd7S0R~ft#ro%sh{`2vFq;k#2{p3dd-v0G$I=YJ$x_B2)fr+UtuqalK2oiDqwn z`VmYtrvg`QnCMbm0$1<9(hBEfyU&hNERznyxm1cB(_ti&DsW6X8prxpa^G6`T{;@b zsy*O3n%Fi24Q9>%rJb!A$eI<@(9WX_q(xlAQ%ei096>Vdjwe|8C_Fj(9D%vIA?*Yn zLH2CMQz|Jv0*U(kjO$Ehr#4CH>3j`r26rC3?MNQWJ$Pi4*z`AT@v z1vquMsdy*>8_x}>DCIxC0zPpZnXvr~3BtWA!srAV#lA551@yuySupy;Ct&o8&8cG6 zOHhn?&e!2&rY!E$220uTS-{pA@XLlgwr${d<;W^n=_CYaX+{webuH(h7h2r%zd`J7>*{9J`c7`AK zZHYx^kR=1$@;-Mw=SEz{v`soa2@z315^4N80Knip06e=u_g}JRoL5nZ^+TR>1Xn$cEhw zC0ZMDVLHSK%h!~BaJ-$xZwqBKsgai#z=-n6cCrCJzY;MeA7s5wwUZ_1qmgX-*>=dS z<-ZbPc@fx}7u(5(u91PeJC{=3bsgqyz@>Jqw-@2SQoGR(nNa|1DZI2DQd|HT7+c;B z@!R^#@61B*`{aH*+2KOapIp-p(Ygd@Q`94hr0kY4q+w-V0##8xh4uH#biN(_1?mEXbFTn<#LPC>mQ7wrI~Vi? z+MKE>+i599o?nHfJZl;4hbPee-Je*R3OmVkTLk}UPt5E z+)%3XaHv3w>J(px^T0EV!s~_!y3io)Za|Q-5ftuaE9gww88?7^JDS3c4gyUIYZL<< zxrM?ri(%s8U_)>@I5AG3!iAxNdrcCw-^cc_+Bt&vq+doR+yoi~fzLTcJ1Glbh@rQjYzWP4LyYm~Ozt){e>dI zci>Ek{zf~`?||LtuK47A;5ytzdViG&CclnL@_ogCQfsSWogKLgW|a)vA+suA4Jwx- zD|Swg{{thuxg7k38viNFdL&T9=C!c!$TPHa1q@5Wq9bb*JKLrsB7-X{q@@N|7_l>l zb8=H`br0f7lXhb6!IP(QB$a%-2Pe=@SFY0spOX`+(?z%aKCGAjCUfv|Hp7kkHp3Gu z(Qp<`r;7QN@IV>uO*@OUg=ERA;OP$_P|G> z5d@ttApXo@2qLj@p~ zv?Btng_|G4mR^zjCtMaF6yXOLCTCe4K}SM=?EFL; zq308*$ipuS@tsg%=iYymlpTJR=(v&csER3m{RGN(K@l-vfg?XcH8kZZ(&Hb!P9Uq_ z$;f*Ou6%C@@%D{EBmDEJGyVT{R&rY1YCw6}cQ<^I6G~R}3vuyyEqB|Y-Mza=W13?b! zy@Jb!SvQKTe+B1Vv;plrdWD9v#m2Ow`B+Gfeg*9P8m2L60)=0SL~7K>_1Cb|b7(E(5Wgi>R zAog7d?br?lj&~yrmlxiK2=UoQSfzqUim1H>Uz<14&a$_l?GQ^lwVxan%EnDz^U**bhDdd-X#qOR5s7<1LS2OAPu9x!hYr;euLVM}LMP?W%1< zWbvcVkjq|m?aVs2f+P8-ZAedis};2Do>PPb)8{|X8vUXTQNhXo!L!8X6-B_8EcSgZ zQslO#DXa3f9c30Z` zFT)`QIQKgopt168Vg=m)2OL-?iWG_cft=a%%57p*tn(9M>#0VOH9uj_`IteNd^D)#2qz&8dgjI*ck yjqmWL?^glJ@3RzfCz~P8U}gL8SN-b!U}XpM-Bw6t(38b;`La4fwE*s?r2hepC7ZDT diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java index fe319332f..d8725e03e 100644 --- a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java +++ b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java @@ -1,7 +1,8 @@ package com.dfsek.terra.biome; +import com.dfsek.terra.config.genconfig.biome.GeneratorOptions; import com.dfsek.terra.generation.UserDefinedDecorator; -import com.dfsek.terra.generation.UserDefinedGenerator; +import org.bukkit.World; import org.polydev.gaea.biome.Biome; import org.polydev.gaea.biome.Decorator; import org.polydev.gaea.biome.Generator; @@ -13,14 +14,14 @@ import java.util.List; * Class representing a config-defined biome */ public class UserDefinedBiome implements Biome { - private final UserDefinedGenerator gen; + private final GeneratorOptions gen; private final UserDefinedDecorator decorator; private final org.bukkit.block.Biome vanilla; private final String id; private final boolean erode; - public UserDefinedBiome(org.bukkit.block.Biome vanilla, UserDefinedDecorator dec, UserDefinedGenerator gen, boolean erode, String id) { + public UserDefinedBiome(org.bukkit.block.Biome vanilla, UserDefinedDecorator dec, GeneratorOptions gen, boolean erode, String id) { this.vanilla = vanilla; this.decorator = dec; this.gen = gen; @@ -45,7 +46,7 @@ public class UserDefinedBiome implements Biome { */ @Override public Generator getGenerator() { - return gen; + return gen.getGenerator(0); } /** @@ -75,4 +76,9 @@ public class UserDefinedBiome implements Biome { public boolean isErodible() { return erode; } + + @Override + public Generator getGenerator(World w) { + return gen.getGenerator(w.getSeed()); + } } diff --git a/src/main/java/com/dfsek/terra/biome/failsafe/FailType.java b/src/main/java/com/dfsek/terra/biome/failsafe/FailType.java deleted file mode 100644 index bc5c7f959..000000000 --- a/src/main/java/com/dfsek/terra/biome/failsafe/FailType.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.dfsek.terra.biome.failsafe; - -import org.bukkit.Bukkit; -import org.polydev.gaea.biome.Biome; -import parsii.tokenizer.ParseException; - -/** - * What happens if terrain generation is attempted with an unrecoverable config error. - */ -@SuppressWarnings("unused") -public enum FailType { - /** - * Return failover biome, then shut down server to minimize damage. - * Generally the safest option. - */ - SHUTDOWN { - @Override - public Biome fail() { - Bukkit.getServer().shutdown(); - try { - return new FailoverBiome(); - } catch(ParseException e) { - e.printStackTrace(); - return null; - } - } - }, - /** - * Returns null, hard crashing the server, but not generating any corrupted terrain.
- * This option is NOT stable, but it has the least risk of blank chunks being generated. - * However, it has the highest risk of corruption! - */ - CRASH { - @Override - public Biome fail() { - return null; - } - }, - /** - * Returns a failover biome, which generates completely blank chunks. - * Recommended for debugging. - */ - FAILOVER { - @Override - public Biome fail() { - try { - return new FailoverBiome(); - } catch(ParseException e) { - e.printStackTrace(); - return null; - } - } - }; - - /** - * Performs the action specified by the enum type to occur on failure of terrain generation. - * - * @return Failover biome, if specified, null if not. - */ - public abstract Biome fail(); -} diff --git a/src/main/java/com/dfsek/terra/biome/failsafe/FailoverBiome.java b/src/main/java/com/dfsek/terra/biome/failsafe/FailoverBiome.java deleted file mode 100644 index e5e0f72b0..000000000 --- a/src/main/java/com/dfsek/terra/biome/failsafe/FailoverBiome.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.dfsek.terra.biome.failsafe; - -import com.dfsek.terra.biome.UserDefinedBiome; -import parsii.tokenizer.ParseException; - -/** - * Blank biome to generate in case of a severe config error - */ -public final class FailoverBiome extends UserDefinedBiome { - public FailoverBiome() throws ParseException { - super(org.bukkit.block.Biome.PLAINS, new FailoverDecorator(), new FailoverGenerator(), false, "FAILSAFE"); - } -} diff --git a/src/main/java/com/dfsek/terra/biome/failsafe/FailoverDecorator.java b/src/main/java/com/dfsek/terra/biome/failsafe/FailoverDecorator.java deleted file mode 100644 index 1cc01f82b..000000000 --- a/src/main/java/com/dfsek/terra/biome/failsafe/FailoverDecorator.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.dfsek.terra.biome.failsafe; - -import com.dfsek.terra.generation.UserDefinedDecorator; -import org.polydev.gaea.math.ProbabilityCollection; - -public final class FailoverDecorator extends UserDefinedDecorator { - public FailoverDecorator() { - super(new ProbabilityCollection<>(), new ProbabilityCollection<>(), 0, 0); - } -} diff --git a/src/main/java/com/dfsek/terra/biome/failsafe/FailoverGenerator.java b/src/main/java/com/dfsek/terra/biome/failsafe/FailoverGenerator.java deleted file mode 100644 index 17469ba63..000000000 --- a/src/main/java/com/dfsek/terra/biome/failsafe/FailoverGenerator.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.dfsek.terra.biome.failsafe; - -import com.dfsek.terra.generation.UserDefinedGenerator; -import org.bukkit.Material; -import org.bukkit.block.data.BlockData; -import org.polydev.gaea.world.palette.Palette; -import org.polydev.gaea.world.palette.RandomPalette; -import parsii.tokenizer.ParseException; - -import java.util.HashMap; -import java.util.Random; -import java.util.TreeMap; - -public final class FailoverGenerator extends UserDefinedGenerator { - private static final TreeMap> palette = new TreeMap<>(); - - static { - palette.put(255, new RandomPalette(new Random(2403)).add(Material.STONE.createBlockData(), 1)); - } - - public FailoverGenerator() throws ParseException { - super("0", null, new HashMap<>(), palette, new TreeMap<>(), new HashMap<>(), false); - } -} diff --git a/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java index 045d69f03..d57aedb4e 100644 --- a/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java +++ b/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java @@ -57,7 +57,7 @@ public class TerraBiomeGrid extends BiomeGrid { if(failNum % 256 == 0) LangUtil.log("error.severe-config", Level.SEVERE, String.valueOf(x), String.valueOf(z)); failNum++; - return ConfigUtil.failType.fail(); + return null; } if(erode != null && b.isErodible() && erode.isEroded(xp, zp)) { return erosionGrid.getBiome(xp, zp, phase); diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java index 98d502d6a..d19ae54e5 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java @@ -3,7 +3,6 @@ package com.dfsek.terra.config.base; import com.dfsek.terra.Debug; import com.dfsek.terra.Terra; import com.dfsek.terra.TerraWorld; -import com.dfsek.terra.biome.failsafe.FailType; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.util.TagUtil; @@ -23,7 +22,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.jar.JarFile; -import java.util.logging.Level; import java.util.logging.Logger; public final class ConfigUtil { @@ -31,7 +29,6 @@ public final class ConfigUtil { public static long dataSave; // Period of population data saving, in ticks. public static boolean masterDisableCaves; public static int cacheSize; - public static FailType failType; public static void loadConfig(JavaPlugin main) { main.saveDefaultConfig(); @@ -54,14 +51,6 @@ public final class ConfigUtil { } } - - String fail = config.getString("fail-type", "SHUTDOWN"); - try { - failType = FailType.valueOf(fail); - } catch(IllegalArgumentException e) { - LangUtil.log("config.invalid-failover", Level.SEVERE, fail); - } - Logger logger = main.getLogger(); logger.info("Loading config values"); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java index 97de6c1c1..8182cb28a 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java @@ -9,7 +9,6 @@ import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.generation.UserDefinedDecorator; -import com.dfsek.terra.generation.UserDefinedGenerator; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; import org.polydev.gaea.math.Range; @@ -171,8 +170,7 @@ public class BiomeConfig extends TerraConfig { try { // Get UserDefinedBiome instance representing this config. - UserDefinedGenerator gen = new UserDefinedGenerator(eq, elevation, config.getDefinedVariables(), palette.getPaletteMap(), slant, config.getNoiseBuilders(), getBoolean("prevent-smooth", false)); - gen.setElevationInterpolation(doElevationInterpolation); + GeneratorOptions gen = new GeneratorOptions(eq, elevation, config.getDefinedVariables(), palette.getPaletteMap(), slant, config.getNoiseBuilders(), getBoolean("prevent-smooth", false), doElevationInterpolation); this.biome = new UserDefinedBiome(vanillaBiome, dec, gen, getBoolean("erodible", false), biomeID); } catch(ParseException e) { e.printStackTrace(); diff --git a/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/GeneratorOptions.java similarity index 50% rename from src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java rename to src/main/java/com/dfsek/terra/config/genconfig/biome/GeneratorOptions.java index b067a149b..dc62ec946 100644 --- a/src/main/java/com/dfsek/terra/generation/UserDefinedGenerator.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/GeneratorOptions.java @@ -1,15 +1,11 @@ -package com.dfsek.terra.generation; +package com.dfsek.terra.config.genconfig.biome; import com.dfsek.terra.config.genconfig.noise.NoiseConfig; import com.dfsek.terra.generation.config.WorldGenerator; import com.dfsek.terra.math.BlankFunction; import com.dfsek.terra.util.DataUtil; -import org.bukkit.World; import org.bukkit.block.data.BlockData; import org.jetbrains.annotations.Nullable; -import org.polydev.gaea.biome.Generator; -import org.polydev.gaea.math.FastNoiseLite; -import org.polydev.gaea.math.Interpolator; import org.polydev.gaea.world.palette.Palette; import parsii.eval.Parser; import parsii.eval.Scope; @@ -17,10 +13,10 @@ import parsii.tokenizer.ParseException; import java.util.HashMap; import java.util.Map; -import java.util.UUID; +public class GeneratorOptions { -public class UserDefinedGenerator extends Generator { + private final Map generators = new HashMap<>(); private final boolean preventSmooth; @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) @@ -34,11 +30,9 @@ public class UserDefinedGenerator extends Generator { private final Map userVariables; private final Map noiseBuilders; - private final Map gens = new HashMap<>(); - private boolean elevationInterpolation; + private final boolean elevationInterpolation; - - public UserDefinedGenerator(String equation, @Nullable String elevateEquation, Map userVariables, Map> paletteMap, Map> slantPaletteMap, Map noiseBuilders, boolean preventSmooth) + public GeneratorOptions(String equation, @Nullable String elevateEquation, Map userVariables, Map> paletteMap, Map> slantPaletteMap, Map noiseBuilders, boolean preventSmooth, boolean elevationInterpolation) throws ParseException { this.equation = equation; this.elevationEquation = elevateEquation; @@ -77,74 +71,11 @@ public class UserDefinedGenerator extends Generator { } slantPalettes[y] = slantPalette; } - - } - - /** - * Gets the 2D noise at a pair of coordinates using the provided FastNoiseLite instance. - * - * @param gen - The FastNoiseLite instance to use. - * @param x - The x coordinate. - * @param z - The z coordinate. - * @return double - Noise value at the specified coordinates. - */ - @Override - public double getNoise(FastNoiseLite gen, World w, int x, int z) { - return compute(w).getNoise(x, 0, z); - } - - /** - * Gets the 3D noise at a pair of coordinates using the provided FastNoiseLite instance. - * - * @param gen - The FastNoiseLite instance to use. - * @param x - The x coordinate. - * @param y - The y coordinate. - * @param z - The z coordinate. - * @return double - Noise value at the specified coordinates. - */ - @Override - public double getNoise(FastNoiseLite gen, World w, int x, int y, int z) { - return compute(w).getNoise(x, y, z); - } - - private WorldGenerator compute(World world) { - return gens.computeIfAbsent(world.getUID(), w -> new WorldGenerator(world, equation, elevationEquation, userVariables, noiseBuilders)); - } - - /** - * Gets the BlocPalette to generate the biome with. - * - * @return BlocPalette - The biome's palette. - */ - @Override - public Palette getPalette(int y) { - return palettes[y]; - } - - public Palette getSlantPalette(int y) { - return slantPalettes[y]; - } - - - @Override - public boolean useMinimalInterpolation() { - return preventSmooth; - } - - @Override - public Interpolator.Type getInterpolationType() { - return Interpolator.Type.LINEAR; - } - - public ElevationEquation getElevationEquation(World w) { - return compute(w).getElevationEquation(); - } - - public boolean interpolateElevation() { - return elevationInterpolation; - } - - public void setElevationInterpolation(boolean elevationInterpolation) { this.elevationInterpolation = elevationInterpolation; } + + public WorldGenerator getGenerator(long seed) { + return generators.computeIfAbsent(seed, s -> new WorldGenerator(seed, equation, elevationEquation, userVariables, noiseBuilders, palettes, slantPalettes, preventSmooth) + .setElevationInterpolation(elevationInterpolation)); + } } diff --git a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java index af084cc42..4adb15c5a 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java @@ -3,7 +3,6 @@ package com.dfsek.terra.generation; import com.dfsek.terra.config.genconfig.noise.NoiseConfig; import com.dfsek.terra.math.NoiseFunction2; import com.dfsek.terra.math.NoiseFunction3; -import org.bukkit.World; import parsii.eval.Expression; import parsii.eval.Parser; import parsii.eval.Scope; @@ -19,7 +18,7 @@ public class ElevationEquation { private final Variable xVar = s.getVariable("x"); private final Variable zVar = s.getVariable("z"); - public ElevationEquation(World w, String elevateEquation, Map userVariables, Map noiseBuilders) { + public ElevationEquation(long seed, String elevateEquation, Map userVariables, Map noiseBuilders) { for(Map.Entry entry : userVariables.entrySet()) { s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. } @@ -28,11 +27,11 @@ public class ElevationEquation { for(Map.Entry e : noiseBuilders.entrySet()) { switch(e.getValue().getDimensions()) { case 2: - NoiseFunction2 function2 = new NoiseFunction2(w, e.getValue().getBuilder()); + NoiseFunction2 function2 = new NoiseFunction2(seed, e.getValue().getBuilder()); p.registerFunction(e.getKey(), function2); break; case 3: - NoiseFunction3 function3 = new NoiseFunction3(w, e.getValue().getBuilder()); + NoiseFunction3 function3 = new NoiseFunction3(seed, e.getValue().getBuilder()); p.registerFunction(e.getKey(), function3); break; } diff --git a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java index 428ade7fc..7a67e69a9 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java @@ -1,12 +1,13 @@ package com.dfsek.terra.generation; import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.generation.config.WorldGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.math.Interpolator; public class ElevationInterpolator { - private final UserDefinedGenerator[][] gens = new UserDefinedGenerator[10][10]; + private final WorldGenerator[][] gens = new WorldGenerator[10][10]; private final double[][] values = new double[18][18]; private final int xOrigin; private final int zOrigin; @@ -19,13 +20,13 @@ public class ElevationInterpolator { for(int x = -2; x < 8; x++) { for(int z = -2; z < 8; z++) { - gens[x + 2][z + 2] = (UserDefinedGenerator) grid.getBiome(xOrigin + x * 4, zOrigin + z * 4, GenerationPhase.BASE).getGenerator(); + gens[x + 2][z + 2] = (WorldGenerator) grid.getBiome(xOrigin + x * 4, zOrigin + z * 4, GenerationPhase.BASE).getGenerator(); } } for(byte x = -1; x <= 16; x++) { for(byte z = -1; z <= 16; z++) { - UserDefinedGenerator generator = getGenerator(x, z); + WorldGenerator generator = getGenerator(x, z); if(compareGens((x / 4), (z / 4)) && generator.interpolateElevation()) { Interpolator interpolator = new Interpolator(biomeAvg(x / 4, z / 4, w), biomeAvg((x / 4) + 1, z / 4, w), @@ -38,16 +39,16 @@ public class ElevationInterpolator { } } - private UserDefinedGenerator getGenerator(int x, int z) { - return (UserDefinedGenerator) grid.getBiome(xOrigin + x, zOrigin + z, GenerationPhase.BASE).getGenerator(); + private WorldGenerator getGenerator(int x, int z) { + return (WorldGenerator) grid.getBiome(xOrigin + x, zOrigin + z, GenerationPhase.BASE).getGenerator(); } - private UserDefinedGenerator getStoredGen(int x, int z) { + private WorldGenerator getStoredGen(int x, int z) { return gens[x + 2][z + 2]; } private boolean compareGens(int x, int z) { - UserDefinedGenerator comp = getStoredGen(x, z); + WorldGenerator comp = getStoredGen(x, z); for(int xi = x - 2; xi <= x + 2; xi++) { for(int zi = z - 2; zi <= z + 2; zi++) { @@ -69,7 +70,7 @@ public class ElevationInterpolator { + elevate(getStoredGen(x + 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin, w)) / 9D; } - private double elevate(UserDefinedGenerator g, int x, int z, World w) { + private double elevate(WorldGenerator g, int x, int z, World w) { if(g.getElevationEquation(w) != null) return g.getElevationEquation(w).getNoise(x, z); return 0; } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 8dea8e9fe..049c2866f 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -9,6 +9,7 @@ import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeSlabConfig; import com.dfsek.terra.config.lang.LangUtil; +import com.dfsek.terra.generation.config.WorldGenerator; import com.dfsek.terra.population.CavePopulator; import com.dfsek.terra.population.FloraPopulator; import com.dfsek.terra.population.OrePopulator; @@ -83,7 +84,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { } private static Palette getPalette(int x, int y, int z, BiomeConfig c, ChunkInterpolator interpolator, ElevationInterpolator elevationInterpolator) { - Palette slant = ((UserDefinedGenerator) c.getBiome().getGenerator()).getSlantPalette(y); + Palette slant = ((WorldGenerator) c.getBiome().getGenerator()).getSlantPalette(y); if(slant != null) { boolean north = interpolator.getNoise(x, y - elevationInterpolator.getElevation(x, z + 1), z + 1) > 0; boolean south = interpolator.getNoise(x, y - elevationInterpolator.getElevation(x, z - 1), z - 1) > 0; diff --git a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java index 51a72a5ea..ea3c9a25f 100644 --- a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java @@ -6,6 +6,11 @@ import com.dfsek.terra.generation.ElevationEquation; import com.dfsek.terra.math.NoiseFunction2; import com.dfsek.terra.math.NoiseFunction3; import org.bukkit.World; +import org.bukkit.block.data.BlockData; +import org.polydev.gaea.biome.Generator; +import org.polydev.gaea.math.FastNoiseLite; +import org.polydev.gaea.math.Interpolator; +import org.polydev.gaea.world.palette.Palette; import parsii.eval.Expression; import parsii.eval.Parser; import parsii.eval.Scope; @@ -14,29 +19,44 @@ import parsii.tokenizer.ParseException; import java.util.Map; -public class WorldGenerator { +public class WorldGenerator extends Generator { private final ElevationEquation elevationEquation; + @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) + private final Palette[] palettes; + @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) + private final Palette[] slantPalettes; + + private final boolean preventSmooth; + + private boolean elevationInterpolation = true; + private final Expression noiseExp; private final Scope s = new Scope(); private final Variable xVar = s.getVariable("x"); private final Variable yVar = s.getVariable("y"); private final Variable zVar = s.getVariable("z"); - public WorldGenerator(World w, String equation, String elevateEquation, Map userVariables, Map noiseBuilders) { + @SuppressWarnings({"rawtypes", "unchecked"}) + public WorldGenerator(long seed, String equation, String elevateEquation, Map userVariables, Map noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) { for(Map.Entry entry : userVariables.entrySet()) { s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. } Parser p = new Parser(); + this.preventSmooth = preventSmooth; + + this.palettes = palettes; + this.slantPalettes = slantPalettes; + for(Map.Entry e : noiseBuilders.entrySet()) { switch(e.getValue().getDimensions()) { case 2: - NoiseFunction2 function2 = new NoiseFunction2(w, e.getValue().getBuilder()); + NoiseFunction2 function2 = new NoiseFunction2(seed, e.getValue().getBuilder()); p.registerFunction(e.getKey(), function2); break; case 3: - NoiseFunction3 function3 = new NoiseFunction3(w, e.getValue().getBuilder()); + NoiseFunction3 function3 = new NoiseFunction3(seed, e.getValue().getBuilder()); p.registerFunction(e.getKey(), function3); break; } @@ -45,21 +65,68 @@ public class WorldGenerator { this.noiseExp = p.parse(equation, s); if(elevateEquation != null) { Debug.info("Using elevation equation"); - this.elevationEquation = new ElevationEquation(w, elevateEquation, userVariables, noiseBuilders); + this.elevationEquation = new ElevationEquation(seed, elevateEquation, userVariables, noiseBuilders); } else this.elevationEquation = null; } catch(ParseException e) { throw new IllegalArgumentException(); } } - public double getNoise(int x, int y, int z) { + public ElevationEquation getElevationEquation() { + return elevationEquation; + } + + @Override + public double getNoise(FastNoiseLite fastNoiseLite, World world, int x, int z) { + xVar.setValue(x); + yVar.setValue(0); + zVar.setValue(z); + return noiseExp.evaluate(); + } + + @Override + public double getNoise(FastNoiseLite fastNoiseLite, World world, int x, int y, int z) { xVar.setValue(x); yVar.setValue(y); zVar.setValue(z); return noiseExp.evaluate(); } - public ElevationEquation getElevationEquation() { + /** + * Gets the BlocPalette to generate the biome with. + * + * @return BlocPalette - The biome's palette. + */ + @Override + public Palette getPalette(int y) { + return palettes[y]; + } + + public Palette getSlantPalette(int y) { + return slantPalettes[y]; + } + + + @Override + public boolean useMinimalInterpolation() { + return preventSmooth; + } + + @Override + public Interpolator.Type getInterpolationType() { + return Interpolator.Type.LINEAR; + } + + public ElevationEquation getElevationEquation(World w) { return elevationEquation; } + + public boolean interpolateElevation() { + return elevationInterpolation; + } + + public WorldGenerator setElevationInterpolation(boolean elevationInterpolation) { + this.elevationInterpolation = elevationInterpolation; + return this; + } } diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index 08dc65c7c..2545e7e85 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -2,7 +2,6 @@ package com.dfsek.terra.math; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.generation.config.NoiseBuilder; -import org.bukkit.World; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; @@ -12,8 +11,8 @@ public class NoiseFunction2 implements NoiseFunction { private final Cache cache = new Cache(); private final FastNoiseLite gen; - public NoiseFunction2(World world, NoiseBuilder builder) { - this.gen = builder.build((int) world.getSeed()); + public NoiseFunction2(long seed, NoiseBuilder builder) { + this.gen = builder.build((int) seed); } @Override diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction3.java b/src/main/java/com/dfsek/terra/math/NoiseFunction3.java index e9294c79d..f257afff5 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction3.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction3.java @@ -1,7 +1,6 @@ package com.dfsek.terra.math; import com.dfsek.terra.generation.config.NoiseBuilder; -import org.bukkit.World; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; @@ -10,8 +9,8 @@ import java.util.List; public class NoiseFunction3 implements NoiseFunction { private final FastNoiseLite gen; - public NoiseFunction3(World world, NoiseBuilder builder) { - this.gen = builder.build((int) world.getSeed()); + public NoiseFunction3(long seed, NoiseBuilder builder) { + this.gen = builder.build((int) seed); } @Override diff --git a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java index a2fc71115..ee5212de0 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java @@ -5,7 +5,7 @@ import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.generation.ElevationEquation; -import com.dfsek.terra.generation.UserDefinedGenerator; +import com.dfsek.terra.generation.config.WorldGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -21,7 +21,7 @@ public class AirSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = wc.getBiome(b); if(y <= c.getOcean().getSeaLevel()) return false; - ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(getWorld()); + ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(getWorld()); int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java index 1158c3f65..df6c3efa5 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java @@ -3,7 +3,7 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.generation.ElevationEquation; -import com.dfsek.terra.generation.UserDefinedGenerator; +import com.dfsek.terra.generation.config.WorldGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -16,7 +16,7 @@ public class LandSpawn extends Requirement { public boolean matches(int x, int y, int z) { TerraWorld tw = TerraWorld.getWorld(getWorld()); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); - ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(getWorld()); + ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(getWorld()); int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) > 0; } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java index 25d247cc5..c8aad465d 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java @@ -4,7 +4,7 @@ import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.generation.ElevationEquation; -import com.dfsek.terra.generation.UserDefinedGenerator; +import com.dfsek.terra.generation.config.WorldGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -19,7 +19,7 @@ public class OceanSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = tw.getConfig().getBiome(b); if(y > c.getOcean().getSeaLevel()) return false; - ElevationEquation elevationEquation = ((UserDefinedGenerator) b.getGenerator()).getElevationEquation(getWorld()); + ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(getWorld()); int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } From 9a403805c93d13243c4cf552d140966349efbd74 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 23:37:42 -0700 Subject: [PATCH 11/57] Cleanup --- .../generation/ElevationInterpolator.java | 37 +++++++++---------- .../terra/generation/TerraChunkGenerator.java | 2 +- .../generation/config/WorldGenerator.java | 4 -- .../dfsek/terra/structure/spawn/AirSpawn.java | 2 +- .../terra/structure/spawn/LandSpawn.java | 2 +- .../terra/structure/spawn/OceanSpawn.java | 2 +- 6 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java index 7a67e69a9..a153fe91e 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java @@ -2,7 +2,6 @@ package com.dfsek.terra.generation; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.generation.config.WorldGenerator; -import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.math.Interpolator; @@ -13,7 +12,7 @@ public class ElevationInterpolator { private final int zOrigin; private final TerraBiomeGrid grid; - public ElevationInterpolator(World w, int chunkX, int chunkZ, TerraBiomeGrid grid) { + public ElevationInterpolator(int chunkX, int chunkZ, TerraBiomeGrid grid) { this.xOrigin = chunkX << 4; this.zOrigin = chunkZ << 4; this.grid = grid; @@ -28,13 +27,13 @@ public class ElevationInterpolator { for(byte z = -1; z <= 16; z++) { WorldGenerator generator = getGenerator(x, z); if(compareGens((x / 4), (z / 4)) && generator.interpolateElevation()) { - Interpolator interpolator = new Interpolator(biomeAvg(x / 4, z / 4, w), - biomeAvg((x / 4) + 1, z / 4, w), - biomeAvg(x / 4, (z / 4) + 1, w), - biomeAvg((x / 4) + 1, (z / 4) + 1, w), + Interpolator interpolator = new Interpolator(biomeAvg(x / 4, z / 4), + biomeAvg((x / 4) + 1, z / 4), + biomeAvg(x / 4, (z / 4) + 1), + biomeAvg((x / 4) + 1, (z / 4) + 1), Interpolator.Type.LINEAR); values[x + 1][z + 1] = interpolator.bilerp((double) (x % 4) / 4, (double) (z % 4) / 4); - } else values[x + 1][z + 1] = elevate(generator, xOrigin + x, zOrigin + z, w); + } else values[x + 1][z + 1] = elevate(generator, xOrigin + x, zOrigin + z); } } } @@ -58,20 +57,20 @@ public class ElevationInterpolator { return false; } - private double biomeAvg(int x, int z, World w) { - return (elevate(getStoredGen(x + 1, z), x * 4 + 4 + xOrigin, z * 4 + zOrigin, w) - + elevate(getStoredGen(x - 1, z), x * 4 - 4 + xOrigin, z * 4 + zOrigin, w) - + elevate(getStoredGen(x, z + 1), x * 4 + xOrigin, z * 4 + 4 + zOrigin, w) - + elevate(getStoredGen(x, z - 1), x * 4 + xOrigin, z * 4 - 4 + zOrigin, w) - + elevate(getStoredGen(x, z), x * 4 + xOrigin, z * 4 + zOrigin, w) - + elevate(getStoredGen(x - 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin, w) - + elevate(getStoredGen(x - 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin, w) - + elevate(getStoredGen(x + 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin, w) - + elevate(getStoredGen(x + 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin, w)) / 9D; + private double biomeAvg(int x, int z) { + return (elevate(getStoredGen(x + 1, z), x * 4 + 4 + xOrigin, z * 4 + zOrigin) + + elevate(getStoredGen(x - 1, z), x * 4 - 4 + xOrigin, z * 4 + zOrigin) + + elevate(getStoredGen(x, z + 1), x * 4 + xOrigin, z * 4 + 4 + zOrigin) + + elevate(getStoredGen(x, z - 1), x * 4 + xOrigin, z * 4 - 4 + zOrigin) + + elevate(getStoredGen(x, z), x * 4 + xOrigin, z * 4 + zOrigin) + + elevate(getStoredGen(x - 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin) + + elevate(getStoredGen(x - 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin) + + elevate(getStoredGen(x + 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin) + + elevate(getStoredGen(x + 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin)) / 9D; } - private double elevate(WorldGenerator g, int x, int z, World w) { - if(g.getElevationEquation(w) != null) return g.getElevationEquation(w).getNoise(x, z); + private double elevate(WorldGenerator g, int x, int z) { + if(g.getElevationEquation() != null) return g.getElevationEquation().getNoise(x, z); return 0; } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 049c2866f..a54de9a05 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -152,7 +152,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { ElevationInterpolator elevationInterpolator; try(ProfileFuture ignore = TerraProfiler.fromWorld(world).measure("ElevationTime")) { - elevationInterpolator = new ElevationInterpolator(world, chunkX, chunkZ, tw.getGrid()); + elevationInterpolator = new ElevationInterpolator(chunkX, chunkZ, tw.getGrid()); } for(byte x = 0; x < 16; x++) { diff --git a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java index ea3c9a25f..e93e9ab9e 100644 --- a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java @@ -117,10 +117,6 @@ public class WorldGenerator extends Generator { return Interpolator.Type.LINEAR; } - public ElevationEquation getElevationEquation(World w) { - return elevationEquation; - } - public boolean interpolateElevation() { return elevationInterpolation; } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java index ee5212de0..ad19fb0a8 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java @@ -21,7 +21,7 @@ public class AirSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = wc.getBiome(b); if(y <= c.getOcean().getSeaLevel()) return false; - ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(getWorld()); + ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(); int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java index df6c3efa5..1546e06f6 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java @@ -16,7 +16,7 @@ public class LandSpawn extends Requirement { public boolean matches(int x, int y, int z) { TerraWorld tw = TerraWorld.getWorld(getWorld()); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); - ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(getWorld()); + ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(); int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) > 0; } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java index c8aad465d..e72102d04 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java @@ -19,7 +19,7 @@ public class OceanSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = tw.getConfig().getBiome(b); if(y > c.getOcean().getSeaLevel()) return false; - ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(getWorld()); + ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(); int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } From 2750d46a9877051d1b9e2d3cb9e9f4356d1b684d Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 16 Nov 2020 23:39:18 -0700 Subject: [PATCH 12/57] [AUTO] Clean & reformat --- src/main/java/com/dfsek/terra/TerraWorld.java | 24 +-- .../dfsek/terra/carving/SimplexCarver.java | 8 +- .../command/structure/load/LoadCommand.java | 20 +-- .../dfsek/terra/config/base/ConfigPack.java | 48 +++--- .../terra/generation/TerraChunkGenerator.java | 12 +- .../terra/generation/config/NoiseBuilder.java | 138 +++++++++--------- .../generation/config/WorldGenerator.java | 4 +- .../terra/population/FloraPopulator.java | 60 ++++---- .../com/dfsek/terra/structure/Structure.java | 12 +- .../structure/features/EntityFeature.java | 11 +- 10 files changed, 168 insertions(+), 169 deletions(-) diff --git a/src/main/java/com/dfsek/terra/TerraWorld.java b/src/main/java/com/dfsek/terra/TerraWorld.java index dbc0bd9f4..ea25f2f8d 100644 --- a/src/main/java/com/dfsek/terra/TerraWorld.java +++ b/src/main/java/com/dfsek/terra/TerraWorld.java @@ -24,14 +24,6 @@ public class TerraWorld { private final WorldConfig worldConfig; private boolean safe; - public static void loadWorld(WorldConfig w) { - loaded.put(w.getWorldID(), w); - } - - public static synchronized TerraWorld getWorld(World w) { - return map.computeIfAbsent(w, TerraWorld::new); - } - private TerraWorld(World w) { safe = true; worldConfig = loaded.get(w.getName()); @@ -87,6 +79,14 @@ public class TerraWorld { grid = new TerraBiomeGrid(w, config.freq1, config.freq2, zone, config, erosion); } + public static void loadWorld(WorldConfig w) { + loaded.put(w.getWorldID(), w); + } + + public static synchronized TerraWorld getWorld(World w) { + return map.computeIfAbsent(w, TerraWorld::new); + } + public static synchronized void invalidate() { map.clear(); for(WorldConfig config : loaded.values()) { @@ -98,6 +98,10 @@ public class TerraWorld { return map.size(); } + public static boolean isTerraWorld(World w) { + return w.getGenerator() instanceof TerraChunkGenerator; + } + public TerraBiomeGrid getGrid() { return grid; } @@ -117,8 +121,4 @@ public class TerraWorld { public boolean isSafe() { return safe; } - - public static boolean isTerraWorld(World w) { - return w.getGenerator() instanceof TerraChunkGenerator; - } } diff --git a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java index 42a951f80..e88984a5c 100644 --- a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java +++ b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java @@ -40,6 +40,10 @@ public class SimplexCarver extends Carver { hasCaves.setFrequency(0.005f); } + private static double acot(double x) { + return Math.PI / 2 - Math.atan(x); + } + @Override public CarvingData carve(int chunkX, int chunkZ, World w) { CarvingData c = new CarvingData(chunkX, chunkZ); @@ -68,10 +72,6 @@ public class SimplexCarver extends Carver { return c; } - private static double acot(double x) { - return Math.PI / 2 - Math.atan(x); - } - @Override public Worm getWorm(long l, Vector vector) { return null; diff --git a/src/main/java/com/dfsek/terra/command/structure/load/LoadCommand.java b/src/main/java/com/dfsek/terra/command/structure/load/LoadCommand.java index 7a7eaa441..b3a962887 100644 --- a/src/main/java/com/dfsek/terra/command/structure/load/LoadCommand.java +++ b/src/main/java/com/dfsek/terra/command/structure/load/LoadCommand.java @@ -21,16 +21,6 @@ public class LoadCommand extends PlayerCommand implements DebugCommand { super(parent); } - @Override - public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - return true; - } - - @Override - public String getName() { - return "load"; - } - public static List getStructureNames() { List names = new ArrayList<>(); File structureDir = new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures"); @@ -45,6 +35,16 @@ public class LoadCommand extends PlayerCommand implements DebugCommand { return names; } + @Override + public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return true; + } + + @Override + public String getName() { + return "load"; + } + @Override public List getSubCommands() { return Arrays.asList(new LoadRawCommand(this), new LoadFullCommand(this, true), new LoadFullCommand(this, false)); diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index 01fa2b265..17932fcf5 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -194,30 +194,6 @@ public class ConfigPack extends YamlConfiguration { LangUtil.log("config-pack.loaded", Level.INFO, getID(), String.valueOf((System.nanoTime() - l) / 1000000D)); } - public String getID() { - return id; - } - - public Map getDefinedVariables() { - return definedVariables; - } - - public Map getBiomes() { - return biomes; - } - - public StructureConfig getStructure(String id) { - return structures.get(id); - } - - public BiomeGridConfig getBiomeGrid(String id) { - return grids.get(id); - } - - public Map getNoiseBuilders() { - return noiseBuilders; - } - public static synchronized void loadAll(JavaPlugin main) { configs.clear(); File file = new File(main.getDataFolder(), "packs"); @@ -252,6 +228,30 @@ public class ConfigPack extends YamlConfiguration { return configs.get(id); } + public String getID() { + return id; + } + + public Map getDefinedVariables() { + return definedVariables; + } + + public Map getBiomes() { + return biomes; + } + + public StructureConfig getStructure(String id) { + return structures.get(id); + } + + public BiomeGridConfig getBiomeGrid(String id) { + return grids.get(id); + } + + public Map getNoiseBuilders() { + return noiseBuilders; + } + public Map getLocatable() { return locatable; } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index a54de9a05..3801f1fbf 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -77,12 +77,6 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { popMap.get(c.getWorld()).checkNeighbors(c.getX(), c.getZ(), c.getWorld()); } - @Override - public void attachProfiler(WorldProfiler p) { - super.attachProfiler(p); - popMan.attachProfiler(p); - } - private static Palette getPalette(int x, int y, int z, BiomeConfig c, ChunkInterpolator interpolator, ElevationInterpolator elevationInterpolator) { Palette slant = ((WorldGenerator) c.getBiome().getGenerator()).getSlantPalette(y); if(slant != null) { @@ -138,6 +132,12 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { } } + @Override + public void attachProfiler(WorldProfiler p) { + super.attachProfiler(p); + popMan.attachProfiler(p); + } + @Override @SuppressWarnings("try") public ChunkData generateBase(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, ChunkInterpolator interpolator) { diff --git a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java index 927162922..051dc3403 100644 --- a/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java +++ b/src/main/java/com/dfsek/terra/generation/config/NoiseBuilder.java @@ -49,41 +49,6 @@ public class NoiseBuilder { return noise; } - public NoiseBuilder setFrequency(double frequency) { - this.frequency = frequency; - return this; - } - - public NoiseBuilder setFractalGain(double fractalGain) { - this.fractalGain = fractalGain; - return this; - } - - public NoiseBuilder setFractalLacunarity(double fractalLacunarity) { - this.fractalLacunarity = fractalLacunarity; - return this; - } - - public NoiseBuilder setFractalType(FastNoiseLite.FractalType fractalType) { - this.fractalType = fractalType; - return this; - } - - public NoiseBuilder setOctaves(int octaves) { - this.octaves = octaves; - return this; - } - - public NoiseBuilder setPingPong(double pingPong) { - this.pingPong = pingPong; - return this; - } - - public NoiseBuilder setWeightedStrength(double weightedStrength) { - this.weightedStrength = weightedStrength; - return this; - } - public FastNoiseLite.NoiseType getType() { return type; } @@ -93,21 +58,6 @@ public class NoiseBuilder { return this; } - public NoiseBuilder setCellularDistanceFunction(FastNoiseLite.CellularDistanceFunction cellularDistanceFunction) { - this.cellularDistanceFunction = cellularDistanceFunction; - return this; - } - - public NoiseBuilder setCellularReturnType(FastNoiseLite.CellularReturnType cellularReturnType) { - this.cellularReturnType = cellularReturnType; - return this; - } - - public NoiseBuilder setCellularJitter(double cellularJitter) { - this.cellularJitter = cellularJitter; - return this; - } - public int getSeedOffset() { return seedOffset; } @@ -116,71 +66,121 @@ public class NoiseBuilder { this.seedOffset = seedOffset; } - public NoiseBuilder setDomainWarpAmp(double domainWarpAmp) { - this.domainWarpAmp = domainWarpAmp; + public FastNoiseLite.CellularDistanceFunction getCellularDistanceFunction() { + return cellularDistanceFunction; + } + + public NoiseBuilder setCellularDistanceFunction(FastNoiseLite.CellularDistanceFunction cellularDistanceFunction) { + this.cellularDistanceFunction = cellularDistanceFunction; return this; } + public FastNoiseLite.CellularReturnType getCellularReturnType() { + return cellularReturnType; + } + + public NoiseBuilder setCellularReturnType(FastNoiseLite.CellularReturnType cellularReturnType) { + this.cellularReturnType = cellularReturnType; + return this; + } + + public FastNoiseLite.DomainWarpType getDomainWarpType() { + return domainWarpType; + } + public NoiseBuilder setDomainWarpType(FastNoiseLite.DomainWarpType domainWarpType) { this.domainWarpType = domainWarpType; return this; } - public NoiseBuilder setRotationType3D(FastNoiseLite.RotationType3D rotationType3D) { - this.rotationType3D = rotationType3D; - return this; - } - - public FastNoiseLite.CellularDistanceFunction getCellularDistanceFunction() { - return cellularDistanceFunction; - } - - public FastNoiseLite.CellularReturnType getCellularReturnType() { - return cellularReturnType; - } - - public FastNoiseLite.DomainWarpType getDomainWarpType() { - return domainWarpType; - } - public double getCellularJitter() { return cellularJitter; } + public NoiseBuilder setCellularJitter(double cellularJitter) { + this.cellularJitter = cellularJitter; + return this; + } + public double getDomainWarpAmp() { return domainWarpAmp; } + public NoiseBuilder setDomainWarpAmp(double domainWarpAmp) { + this.domainWarpAmp = domainWarpAmp; + return this; + } + public double getFractalGain() { return fractalGain; } + public NoiseBuilder setFractalGain(double fractalGain) { + this.fractalGain = fractalGain; + return this; + } + public double getFractalLacunarity() { return fractalLacunarity; } + public NoiseBuilder setFractalLacunarity(double fractalLacunarity) { + this.fractalLacunarity = fractalLacunarity; + return this; + } + public double getFrequency() { return frequency; } + public NoiseBuilder setFrequency(double frequency) { + this.frequency = frequency; + return this; + } + public double getPingPong() { return pingPong; } + public NoiseBuilder setPingPong(double pingPong) { + this.pingPong = pingPong; + return this; + } + public double getWeightedStrength() { return weightedStrength; } + public NoiseBuilder setWeightedStrength(double weightedStrength) { + this.weightedStrength = weightedStrength; + return this; + } + public int getOctaves() { return octaves; } + public NoiseBuilder setOctaves(int octaves) { + this.octaves = octaves; + return this; + } + public FastNoiseLite.FractalType getFractalType() { return fractalType; } + public NoiseBuilder setFractalType(FastNoiseLite.FractalType fractalType) { + this.fractalType = fractalType; + return this; + } + public FastNoiseLite.RotationType3D getRotationType3D() { return rotationType3D; } + + public NoiseBuilder setRotationType3D(FastNoiseLite.RotationType3D rotationType3D) { + this.rotationType3D = rotationType3D; + return this; + } } diff --git a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java index e93e9ab9e..c2d1ee9f1 100644 --- a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java @@ -28,14 +28,12 @@ public class WorldGenerator extends Generator { private final Palette[] slantPalettes; private final boolean preventSmooth; - - private boolean elevationInterpolation = true; - private final Expression noiseExp; private final Scope s = new Scope(); private final Variable xVar = s.getVariable("x"); private final Variable yVar = s.getVariable("y"); private final Variable zVar = s.getVariable("z"); + private boolean elevationInterpolation = true; @SuppressWarnings({"rawtypes", "unchecked"}) public WorldGenerator(long seed, String equation, String elevateEquation, Map userVariables, Map noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) { diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index 23b7827bf..bc9b37c71 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -30,6 +30,36 @@ import java.util.Random; * Populates Flora and Trees */ public class FloraPopulator extends GaeaBlockPopulator { + private static boolean doTrees(@NotNull UserDefinedBiome biome, TerraWorld world, @NotNull Random random, @NotNull Chunk chunk, int x, int z) { + for(Block block : getValidTreeSpawnsAt(chunk, x, z, new Range(0, 254))) { + Tree tree = biome.getDecorator().getTrees().get(random); + Range range = world.getConfig().getBiome(biome).getTreeRange(tree); + if(!range.isInRange(block.getY())) continue; + try { + Location l = block.getLocation(); + TreeGenerateEvent event = new TreeGenerateEvent(world, l, tree); + Bukkit.getPluginManager().callEvent(event); + if(!event.isCancelled()) tree.plant(l, random, Terra.getInstance()); + } catch(NullPointerException ignore) { + } + } + return false; + } + + public static List getValidTreeSpawnsAt(Chunk chunk, int x, int z, Range check) { + List blocks = new ArrayList<>(); + for(int y : check) { + if(chunk.getBlock(x, y, z).getType().isSolid() && chunk.getBlock(x, y + 1, z).getType().isAir()) { + blocks.add(chunk.getBlock(x, y + 1, z)); + } + } + return blocks; + } + + private static int offset(Random r, int i) { + return Math.min(Math.max(i + r.nextInt(3) - 1, 0), 15); + } + @SuppressWarnings("try") @Override public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { @@ -71,34 +101,4 @@ public class FloraPopulator extends GaeaBlockPopulator { } } } - - private static boolean doTrees(@NotNull UserDefinedBiome biome, TerraWorld world, @NotNull Random random, @NotNull Chunk chunk, int x, int z) { - for(Block block : getValidTreeSpawnsAt(chunk, x, z, new Range(0, 254))) { - Tree tree = biome.getDecorator().getTrees().get(random); - Range range = world.getConfig().getBiome(biome).getTreeRange(tree); - if(!range.isInRange(block.getY())) continue; - try { - Location l = block.getLocation(); - TreeGenerateEvent event = new TreeGenerateEvent(world, l, tree); - Bukkit.getPluginManager().callEvent(event); - if(!event.isCancelled()) tree.plant(l, random, Terra.getInstance()); - } catch(NullPointerException ignore) { - } - } - return false; - } - - public static List getValidTreeSpawnsAt(Chunk chunk, int x, int z, Range check) { - List blocks = new ArrayList<>(); - for(int y : check) { - if(chunk.getBlock(x, y, z).getType().isSolid() && chunk.getBlock(x, y + 1, z).getType().isAir()) { - blocks.add(chunk.getBlock(x, y + 1, z)); - } - } - return blocks; - } - - private static int offset(Random r, int i) { - return Math.min(Math.max(i + r.nextInt(3) - 1, 0), 15); - } } diff --git a/src/main/java/com/dfsek/terra/structure/Structure.java b/src/main/java/com/dfsek/terra/structure/Structure.java index 306658f81..acdd5348d 100644 --- a/src/main/java/com/dfsek/terra/structure/Structure.java +++ b/src/main/java/com/dfsek/terra/structure/Structure.java @@ -144,6 +144,12 @@ public class Structure implements Serializable { return (Structure) o; } + private static void toFile(@NotNull Serializable o, @NotNull File f) throws IOException { + ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); + oos.writeObject(o); + oos.close(); + } + public StructureContainedBlock[][][] getRawStructure() { return structure; } @@ -328,12 +334,6 @@ public class Structure implements Serializable { toFile(this, f); } - private static void toFile(@NotNull Serializable o, @NotNull File f) throws IOException { - ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); - oos.writeObject(o); - oos.close(); - } - @NotNull public String getId() { return id; diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 818257058..5b1e726d2 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -12,6 +12,7 @@ import org.bukkit.entity.EntityType; import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.Range; +import java.util.Objects; import java.util.Random; import java.util.Set; @@ -32,6 +33,10 @@ public class EntityFeature implements Feature { this.inSize = inSize; } + private static boolean isInChunk(Chunk c, Location l) { + return Math.floorDiv(l.getBlockX(), 16) == c.getX() && Math.floorDiv(l.getBlockZ(), 16) == c.getZ(); + } + @Override public void apply(Structure structure, Location l, Chunk chunk) { Random random = new Random(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); @@ -75,10 +80,6 @@ public class EntityFeature implements Feature { } } - private static boolean isInChunk(Chunk c, Location l) { - return Math.floorDiv(l.getBlockX(), 16) == c.getX() && Math.floorDiv(l.getBlockZ(), 16) == c.getZ(); - } - @Override public void apply(Structure structure, Location l, Random random) { int amountSpawn = amount.get(random); @@ -114,7 +115,7 @@ public class EntityFeature implements Feature { } if(canSpawn) { Debug.info("Spawning entity at " + attempt); - l.getWorld().spawnEntity(attempt.add(0.5, 1, 0.5), type); // Add 0.5 to X & Z so entity spawns in center of block. + Objects.requireNonNull(l.getWorld()).spawnEntity(attempt.add(0.5, 1, 0.5), type); // Add 0.5 to X & Z so entity spawns in center of block. } } } From 4c4c31db45dcf7f6371866b049eeeab184831197 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 17 Nov 2020 00:49:43 -0700 Subject: [PATCH 13/57] Cleanup EntityFeature code, account for Structure rotation in Features --- .../terra/population/StructurePopulator.java | 2 +- .../structure/features/EntityFeature.java | 107 +++++++----------- .../terra/structure/features/Feature.java | 5 +- 3 files changed, 44 insertions(+), 70 deletions(-) diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index c37ac42d4..886096082 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -69,7 +69,7 @@ public class StructurePopulator extends BlockPopulator { Debug.stack(e); } } - for(Feature f : conf.getFeatures()) f.apply(struc, spawn, chunk); // Apply features. + for(Feature f : conf.getFeatures()) f.apply(struc, rotation, spawn, chunk); // Apply features. break; } } diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 5b1e726d2..bc1ab58bd 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -1,6 +1,7 @@ package com.dfsek.terra.structure.features; import com.dfsek.terra.Debug; +import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; import org.bukkit.Chunk; @@ -12,6 +13,8 @@ import org.bukkit.entity.EntityType; import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.Range; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import java.util.Random; import java.util.Set; @@ -37,86 +40,56 @@ public class EntityFeature implements Feature { return Math.floorDiv(l.getBlockX(), 16) == c.getX() && Math.floorDiv(l.getBlockZ(), 16) == c.getZ(); } - @Override - public void apply(Structure structure, Location l, Chunk chunk) { - Random random = new Random(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); - - int amountSpawn = amount.get(random); - + private static List getLocations(Structure structure, Rotation r, Location origin, Random random, int number) { StructureInfo info = structure.getStructureInfo(); - Range x = new Range(0, info.getSizeZ()); - Range y = new Range(0, info.getSizeY()); - Range z = new Range(0, info.getSizeZ()); + Range x = structure.getRange(Rotation.Axis.X, r); + Range y = structure.getRange(Rotation.Axis.Y, r); + Range z = structure.getRange(Rotation.Axis.Z, r); int cx = info.getCenterX(); int cz = info.getCenterZ(); + List locations = new ArrayList<>(); + for(int i = 0; i < number; i++) + locations.add(origin.clone().add(x.get(random) - cx, y.get(random), z.get(random) - cz)); + return locations; + } - for(int i = 0; i < amountSpawn && i < attempts; i++) { - int yv = y.get(random); - Location attempt = l.clone().add(x.get(random) - cx, yv, z.get(random) - cz); + @Override + public void apply(Structure structure, Rotation r, Location l, Chunk chunk) { + Random random = new Random(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); + for(Location attempt : getLocations(structure, r, l, random, amount.get(random))) { if(!isInChunk(chunk, attempt)) continue; // Don't attempt spawn if not in current chunk. + attemptSpawn(attempt, l); + } + } - boolean canSpawn = false; - while(yv >= 0 && attempt.getBlockY() >= l.getBlockY()) { // Go down, see if valid spawns exist. - canSpawn = true; - Block on = attempt.getBlock(); - attempt.subtract(0, 1, 0); - yv--; + private void attemptSpawn(Location attempt, Location origin) { + boolean canSpawn = false; + while(attempt.getBlockY() >= origin.getBlockY()) { // Go down, see if valid spawns exist. + canSpawn = true; + Block on = attempt.getBlock(); + attempt.subtract(0, 1, 0); - if(!stand.contains(on.getType())) { - canSpawn = false; - continue; - } - - for(int j = 1; j < inSize + 1; j++) - if(!in.contains(on.getRelative(BlockFace.UP, j).getType())) canSpawn = false; - - if(canSpawn) break; - } - if(canSpawn) { - Debug.info("Spawning entity at " + attempt); - chunk.getWorld().spawnEntity(attempt.add(0.5, 2, 0.5), type); // Add 0.5 to X & Z so entity spawns in center of block. + if(!stand.contains(on.getType())) { + canSpawn = false; + continue; } + + for(int j = 1; j < inSize + 1; j++) + if(!in.contains(on.getRelative(BlockFace.UP, j).getType())) canSpawn = false; + + if(canSpawn) break; + } + if(canSpawn) { + Debug.info("Spawning entity at " + attempt); + Objects.requireNonNull(attempt.getWorld()).spawnEntity(attempt.add(0.5, 2, 0.5), type); // Add 0.5 to X & Z so entity spawns in center of block. } } @Override - public void apply(Structure structure, Location l, Random random) { - int amountSpawn = amount.get(random); - - StructureInfo info = structure.getStructureInfo(); - Range x = new Range(0, info.getSizeZ()); - Range y = new Range(0, info.getSizeY()); - Range z = new Range(0, info.getSizeZ()); - - int cx = info.getCenterX(); - int cz = info.getCenterZ(); - - for(int i = 0; i < amountSpawn && i < attempts; i++) { - int yv = y.get(random); - Location attempt = l.clone().add(x.get(random) - cx, yv, z.get(random) - cz); - - boolean canSpawn = false; - while(yv >= 0 && attempt.getBlockY() >= l.getBlockY()) { // Go down, see if valid spawns exist. - canSpawn = true; - Block on = attempt.getBlock(); - attempt.subtract(0, 1, 0); - yv--; - - if(!stand.contains(on.getType())) { - canSpawn = false; - continue; - } - - for(int j = 1; j < inSize + 1; j++) - if(!in.contains(on.getRelative(BlockFace.UP, j).getType())) canSpawn = false; - - if(canSpawn) break; - } - if(canSpawn) { - Debug.info("Spawning entity at " + attempt); - Objects.requireNonNull(l.getWorld()).spawnEntity(attempt.add(0.5, 1, 0.5), type); // Add 0.5 to X & Z so entity spawns in center of block. - } + public void apply(Structure structure, Rotation r, Location l, Random random) { + for(Location attempt : getLocations(structure, r, l, random, amount.get(random))) { + attemptSpawn(attempt, l); } } } diff --git a/src/main/java/com/dfsek/terra/structure/features/Feature.java b/src/main/java/com/dfsek/terra/structure/features/Feature.java index 5590443dc..8046dac67 100644 --- a/src/main/java/com/dfsek/terra/structure/features/Feature.java +++ b/src/main/java/com/dfsek/terra/structure/features/Feature.java @@ -1,5 +1,6 @@ package com.dfsek.terra.structure.features; +import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import org.bukkit.Chunk; import org.bukkit.Location; @@ -7,7 +8,7 @@ import org.bukkit.Location; import java.util.Random; public interface Feature { - void apply(Structure structure, Location l, Chunk chunk); + void apply(Structure structure, Rotation r, Location l, Chunk chunk); - void apply(Structure structure, Location l, Random random); + void apply(Structure structure, Rotation r, Location l, Random random); } From fde8fd95f263f9eaddcb8162a747aa8b3284d4b6 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 17 Nov 2020 10:51:31 -0700 Subject: [PATCH 14/57] Clean up parsii code --- .../dfsek/terra/config/base/ConfigPack.java | 10 +++--- .../config/genconfig/biome/BiomeConfig.java | 2 +- .../genconfig/biome/GeneratorOptions.java | 9 ++--- .../terra/generation/ElevationEquation.java | 33 ++++--------------- .../generation/config/WorldGenerator.java | 27 +++++++-------- 5 files changed, 31 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index 17932fcf5..9cd605b2e 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -25,6 +25,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; +import parsii.eval.Scope; import java.io.File; import java.io.IOException; @@ -74,8 +75,8 @@ public class ConfigPack extends YamlConfiguration { private final TreeRegistry treeRegistry = new TreeRegistry(); private final FloraRegistry floraRegistry = new FloraRegistry(); private final Set allStructures = new HashSet<>(); - private final Map definedVariables = new HashMap<>(); private final Map noiseBuilders = new HashMap<>(); + private final Scope vScope; private final File dataFolder; private final String id; @@ -115,11 +116,12 @@ public class ConfigPack extends YamlConfiguration { Debug.info("Overriding Vanilla tree: " + entry.getKey()); } + vScope = new Scope(); if(contains("variables")) { Map vars = Objects.requireNonNull(getConfigurationSection("variables")).getValues(false); for(Map.Entry entry : vars.entrySet()) { try { - definedVariables.put(entry.getKey(), Double.valueOf(entry.getValue().toString())); + vScope.getVariable(entry.getKey()).setValue(Double.parseDouble(entry.getValue().toString())); Debug.info("Registered variable " + entry.getKey() + " with value " + entry.getValue()); } catch(ClassCastException | NumberFormatException e) { Debug.stack(e); @@ -232,8 +234,8 @@ public class ConfigPack extends YamlConfiguration { return id; } - public Map getDefinedVariables() { - return definedVariables; + public Scope getVariableScope() { + return vScope; } public Map getBiomes() { diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java index 8182cb28a..1c59271d8 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java @@ -170,7 +170,7 @@ public class BiomeConfig extends TerraConfig { try { // Get UserDefinedBiome instance representing this config. - GeneratorOptions gen = new GeneratorOptions(eq, elevation, config.getDefinedVariables(), palette.getPaletteMap(), slant, config.getNoiseBuilders(), getBoolean("prevent-smooth", false), doElevationInterpolation); + GeneratorOptions gen = new GeneratorOptions(eq, elevation, config.getVariableScope(), palette.getPaletteMap(), slant, config.getNoiseBuilders(), getBoolean("prevent-smooth", false), doElevationInterpolation); this.biome = new UserDefinedBiome(vanillaBiome, dec, gen, getBoolean("erodible", false), biomeID); } catch(ParseException e) { e.printStackTrace(); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/GeneratorOptions.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/GeneratorOptions.java index dc62ec946..a5705ebce 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/GeneratorOptions.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/GeneratorOptions.java @@ -27,12 +27,12 @@ public class GeneratorOptions { private final String equation; private final String elevationEquation; - private final Map userVariables; + private final Scope userVariables; private final Map noiseBuilders; private final boolean elevationInterpolation; - public GeneratorOptions(String equation, @Nullable String elevateEquation, Map userVariables, Map> paletteMap, Map> slantPaletteMap, Map noiseBuilders, boolean preventSmooth, boolean elevationInterpolation) + public GeneratorOptions(String equation, @Nullable String elevateEquation, Scope userVariables, Map> paletteMap, Map> slantPaletteMap, Map noiseBuilders, boolean preventSmooth, boolean elevationInterpolation) throws ParseException { this.equation = equation; this.elevationEquation = elevateEquation; @@ -40,11 +40,8 @@ public class GeneratorOptions { this.noiseBuilders = noiseBuilders; this.preventSmooth = preventSmooth; - Scope s = new Scope(); + Scope s = new Scope().withParent(userVariables); Parser p = new Parser(); - for(Map.Entry entry : userVariables.entrySet()) { - s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. - } for(Map.Entry e : noiseBuilders.entrySet()) { int dimensions = e.getValue().getDimensions(); if(dimensions == 2 || dimensions == 3) p.registerFunction(e.getKey(), new BlankFunction(dimensions)); diff --git a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java index 4adb15c5a..0b97cb34e 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java @@ -1,41 +1,22 @@ package com.dfsek.terra.generation; -import com.dfsek.terra.config.genconfig.noise.NoiseConfig; -import com.dfsek.terra.math.NoiseFunction2; -import com.dfsek.terra.math.NoiseFunction3; import parsii.eval.Expression; import parsii.eval.Parser; import parsii.eval.Scope; import parsii.eval.Variable; import parsii.tokenizer.ParseException; -import java.util.Map; - public class ElevationEquation { private final Expression delegate; - private final Scope s = new Scope(); - private final Variable xVar = s.getVariable("x"); - private final Variable zVar = s.getVariable("z"); + private final Variable xVar; + private final Variable zVar; - public ElevationEquation(long seed, String elevateEquation, Map userVariables, Map noiseBuilders) { - for(Map.Entry entry : userVariables.entrySet()) { - s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. - } - Parser p = new Parser(); + public ElevationEquation(String elevateEquation, Scope vScope, Parser p) { + Scope s = new Scope().withParent(vScope); + xVar = s.create("x"); + zVar = s.create("z"); - for(Map.Entry e : noiseBuilders.entrySet()) { - switch(e.getValue().getDimensions()) { - case 2: - NoiseFunction2 function2 = new NoiseFunction2(seed, e.getValue().getBuilder()); - p.registerFunction(e.getKey(), function2); - break; - case 3: - NoiseFunction3 function3 = new NoiseFunction3(seed, e.getValue().getBuilder()); - p.registerFunction(e.getKey(), function3); - break; - } - } try { this.delegate = p.parse(elevateEquation, s); } catch(ParseException e) { @@ -43,7 +24,7 @@ public class ElevationEquation { } } - public double getNoise(double x, double z) { + public synchronized double getNoise(double x, double z) { xVar.setValue(x); zVar.setValue(z); return delegate.evaluate(); diff --git a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java index c2d1ee9f1..bd2624ba6 100644 --- a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java @@ -29,19 +29,20 @@ public class WorldGenerator extends Generator { private final boolean preventSmooth; private final Expression noiseExp; - private final Scope s = new Scope(); - private final Variable xVar = s.getVariable("x"); - private final Variable yVar = s.getVariable("y"); - private final Variable zVar = s.getVariable("z"); + private final Variable xVar; + private final Variable yVar; + private final Variable zVar; private boolean elevationInterpolation = true; @SuppressWarnings({"rawtypes", "unchecked"}) - public WorldGenerator(long seed, String equation, String elevateEquation, Map userVariables, Map noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) { - for(Map.Entry entry : userVariables.entrySet()) { - s.getVariable(entry.getKey()).setValue(entry.getValue()); // Define all user variables. - } + public WorldGenerator(long seed, String equation, String elevateEquation, Scope vScope, Map noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) { Parser p = new Parser(); + Scope s = new Scope().withParent(vScope); + xVar = s.create("x"); + yVar = s.create("y"); + zVar = s.create("z"); + this.preventSmooth = preventSmooth; this.palettes = palettes; @@ -63,7 +64,7 @@ public class WorldGenerator extends Generator { this.noiseExp = p.parse(equation, s); if(elevateEquation != null) { Debug.info("Using elevation equation"); - this.elevationEquation = new ElevationEquation(seed, elevateEquation, userVariables, noiseBuilders); + this.elevationEquation = new ElevationEquation(elevateEquation, vScope, p); } else this.elevationEquation = null; } catch(ParseException e) { throw new IllegalArgumentException(); @@ -75,7 +76,7 @@ public class WorldGenerator extends Generator { } @Override - public double getNoise(FastNoiseLite fastNoiseLite, World world, int x, int z) { + public synchronized double getNoise(FastNoiseLite fastNoiseLite, World world, int x, int z) { xVar.setValue(x); yVar.setValue(0); zVar.setValue(z); @@ -83,7 +84,7 @@ public class WorldGenerator extends Generator { } @Override - public double getNoise(FastNoiseLite fastNoiseLite, World world, int x, int y, int z) { + public synchronized double getNoise(FastNoiseLite fastNoiseLite, World world, int x, int y, int z) { xVar.setValue(x); yVar.setValue(y); zVar.setValue(z); @@ -91,9 +92,9 @@ public class WorldGenerator extends Generator { } /** - * Gets the BlocPalette to generate the biome with. + * Gets the BlockPalette to generate the biome with. * - * @return BlocPalette - The biome's palette. + * @return BlockPalette - The biome's palette. */ @Override public Palette getPalette(int y) { From 291d0aaf1cda19bf60dad1aa4b7b852564f612a8 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 17 Nov 2020 13:44:23 -0700 Subject: [PATCH 15/57] Remove unused Feature variable --- .../terra/config/genconfig/structure/EntityFeatureConfig.java | 3 +-- .../com/dfsek/terra/structure/features/EntityFeature.java | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/dfsek/terra/config/genconfig/structure/EntityFeatureConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/structure/EntityFeatureConfig.java index bd8cbfe7f..264759446 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/structure/EntityFeatureConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/structure/EntityFeatureConfig.java @@ -38,7 +38,6 @@ public class EntityFeatureConfig implements FeatureConfig { throw new InvalidConfigurationException("Error in Entity Configuration!"); } - int attempts = (Integer) items.get("attempts"); int height = (Integer) items.get("in-height"); Range amount; @@ -52,7 +51,7 @@ public class EntityFeatureConfig implements FeatureConfig { Set on = ConfigUtil.toBlockData((List) items.get("spawnable-on"), "SpawnableOn", ""); Set in = ConfigUtil.toBlockData((List) items.get("spawnable-in"), "SpawnableIn", ""); - this.feature = new EntityFeature(type, amount, attempts, on, in, height); + this.feature = new EntityFeature(type, amount, on, in, height); Debug.info("Loaded EntityFeature with type: " + type); } diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index bc1ab58bd..931a717ef 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -22,15 +22,13 @@ import java.util.Set; public class EntityFeature implements Feature { private final EntityType type; private final Range amount; - private final int attempts; private final Set in; private final Set stand; private final int inSize; - public EntityFeature(EntityType type, Range amount, int attempts, Set stand, Set in, int inSize) { + public EntityFeature(EntityType type, Range amount, Set stand, Set in, int inSize) { this.type = type; this.amount = amount; - this.attempts = attempts; this.in = in; this.stand = stand; this.inSize = inSize; From 2100718b2a1456ff99339a47893ba15a8f23ccc9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 17 Nov 2020 14:39:05 -0700 Subject: [PATCH 16/57] Minor performance improvements to generation --- .../dfsek/terra/biome/UserDefinedBiome.java | 11 +++++++-- .../config/genconfig/biome/BiomeConfig.java | 2 +- .../terra/generation/TerraChunkGenerator.java | 24 ++++++++++--------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java index d8725e03e..687a2a1d9 100644 --- a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java +++ b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java @@ -1,5 +1,6 @@ package com.dfsek.terra.biome; +import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.GeneratorOptions; import com.dfsek.terra.generation.UserDefinedDecorator; import org.bukkit.World; @@ -18,15 +19,17 @@ public class UserDefinedBiome implements Biome { private final UserDefinedDecorator decorator; private final org.bukkit.block.Biome vanilla; private final String id; + private final BiomeConfig config; private final boolean erode; - public UserDefinedBiome(org.bukkit.block.Biome vanilla, UserDefinedDecorator dec, GeneratorOptions gen, boolean erode, String id) { + public UserDefinedBiome(org.bukkit.block.Biome vanilla, UserDefinedDecorator dec, GeneratorOptions gen, boolean erode, BiomeConfig config) { this.vanilla = vanilla; this.decorator = dec; this.gen = gen; - this.id = id; + this.id = config.getID(); this.erode = erode; + this.config = config; } /** @@ -77,6 +80,10 @@ public class UserDefinedBiome implements Biome { return erode; } + public BiomeConfig getConfig() { + return config; + } + @Override public Generator getGenerator(World w) { return gen.getGenerator(w.getSeed()); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java index 1c59271d8..b3dd53bef 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java @@ -171,7 +171,7 @@ public class BiomeConfig extends TerraConfig { try { // Get UserDefinedBiome instance representing this config. GeneratorOptions gen = new GeneratorOptions(eq, elevation, config.getVariableScope(), palette.getPaletteMap(), slant, config.getNoiseBuilders(), getBoolean("prevent-smooth", false), doElevationInterpolation); - this.biome = new UserDefinedBiome(vanillaBiome, dec, gen, getBoolean("erodible", false), biomeID); + this.biome = new UserDefinedBiome(vanillaBiome, dec, gen, getBoolean("erodible", false), this); } catch(ParseException e) { e.printStackTrace(); throw new ConfigException("Unable to parse noise equation!", getID()); diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 3801f1fbf..10040913f 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -80,17 +80,19 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { private static Palette getPalette(int x, int y, int z, BiomeConfig c, ChunkInterpolator interpolator, ElevationInterpolator elevationInterpolator) { Palette slant = ((WorldGenerator) c.getBiome().getGenerator()).getSlantPalette(y); if(slant != null) { - boolean north = interpolator.getNoise(x, y - elevationInterpolator.getElevation(x, z + 1), z + 1) > 0; - boolean south = interpolator.getNoise(x, y - elevationInterpolator.getElevation(x, z - 1), z - 1) > 0; - boolean east = interpolator.getNoise(x + 1, y - elevationInterpolator.getElevation(x + 1, z), z) > 0; - boolean west = interpolator.getNoise(x - 1, y - elevationInterpolator.getElevation(x - 1, z), z) > 0; - double ySlantOffsetTop = c.getYSlantOffsetTop(); double ySlantOffsetBottom = c.getYSlantOffsetBottom(); boolean top = interpolator.getNoise(x, y + ySlantOffsetTop - elevationInterpolator.getElevation(x, z), z) > 0; boolean bottom = interpolator.getNoise(x, y - ySlantOffsetBottom - elevationInterpolator.getElevation(x, z), z) > 0; - if((top && bottom) && (north || south || east || west) && (!(north && south && east && west))) return slant; + if(top && bottom) { + boolean north = interpolator.getNoise(x, y - elevationInterpolator.getElevation(x, z + 1), z + 1) > 0; + boolean south = interpolator.getNoise(x, y - elevationInterpolator.getElevation(x, z - 1), z - 1) > 0; + boolean east = interpolator.getNoise(x + 1, y - elevationInterpolator.getElevation(x + 1, z), z) > 0; + boolean west = interpolator.getNoise(x - 1, y - elevationInterpolator.getElevation(x - 1, z), z) > 0; + + if((north || south || east || west) && (!(north && south && east && west))) return slant; + } } return c.getBiome().getGenerator().getPalette(y); } @@ -104,10 +106,10 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { if(stairPalette != null) { BlockData stair = stairPalette.get(0, block.getBlockX(), block.getBlockZ()); Stairs stairNew = (Stairs) stair.clone(); - double elevationN = elevationInterpolator.getElevation(block.getBlockX(), block.getBlockZ() - 1); // Northern elevation - double elevationS = elevationInterpolator.getElevation(block.getBlockX(), block.getBlockZ() + 1); // Southern elevation - double elevationE = elevationInterpolator.getElevation(block.getBlockX() + 1, block.getBlockZ()); // Eastern elevation - double elevationW = elevationInterpolator.getElevation(block.getBlockX() - 1, block.getBlockZ()); // Western elevation + int elevationN = (int) elevationInterpolator.getElevation(block.getBlockX(), block.getBlockZ() - 1); // Northern elevation + int elevationS = (int) elevationInterpolator.getElevation(block.getBlockX(), block.getBlockZ() + 1); // Southern elevation + int elevationE = (int) elevationInterpolator.getElevation(block.getBlockX() + 1, block.getBlockZ()); // Eastern elevation + int elevationW = (int) elevationInterpolator.getElevation(block.getBlockX() - 1, block.getBlockZ()); // Western elevation if(interpolator.getNoise(block.getBlockX() - 0.5, block.getBlockY() - elevationW, block.getBlockZ()) > thresh) { stairNew.setFacing(BlockFace.WEST); } else if(interpolator.getNoise(block.getBlockX(), block.getBlockY() - elevationN, block.getBlockZ() - 0.5) > thresh) { @@ -163,7 +165,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { int cz = zOrig + z; Biome b = grid.getBiome(xOrig + x, zOrig + z, GenerationPhase.PALETTE_APPLY); - BiomeConfig c = config.getBiome((UserDefinedBiome) b); + BiomeConfig c = ((UserDefinedBiome) b).getConfig(); double elevate = elevationInterpolator.getElevation(x, z); From 19162a1924da7accc28b289273b015818e4ef7ba Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 17 Nov 2020 20:10:13 -0700 Subject: [PATCH 17/57] Structure tree sapling overrides no longer require tree to be on ground level --- .../java/com/dfsek/terra/EventListener.java | 7 ++++- .../terra/config/genconfig/TreeConfig.java | 28 +++++++++++++++++++ .../com/dfsek/terra/structure/Structure.java | 4 +++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dfsek/terra/EventListener.java b/src/main/java/com/dfsek/terra/EventListener.java index 1d9bf4f59..cc5773687 100644 --- a/src/main/java/com/dfsek/terra/EventListener.java +++ b/src/main/java/com/dfsek/terra/EventListener.java @@ -2,6 +2,7 @@ package com.dfsek.terra; import com.dfsek.terra.async.AsyncStructureFinder; import com.dfsek.terra.config.base.ConfigPack; +import com.dfsek.terra.config.genconfig.TreeConfig; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.registry.TreeRegistry; import com.dfsek.terra.util.StructureTypeEnum; @@ -80,6 +81,10 @@ public class EventListener implements Listener { TreeRegistry registry = c.getTreeRegistry(); Tree tree = registry.get(TreeType.fromBukkit(e.getSpecies()).toString()); Debug.info("Overriding tree type: " + e.getSpecies()); - if(!tree.plant(e.getLocation(), new Random(), Terra.getInstance())) block.setBlockData(data); + if(tree instanceof TreeConfig) { + if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new Random())) { + block.setBlockData(data); + } + } else if(!tree.plant(e.getLocation(), new Random(), Terra.getInstance())) block.setBlockData(data); } } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java index 56732b4b6..ef70459f3 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java @@ -6,8 +6,12 @@ import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; +import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; +import com.dfsek.terra.structure.StructureContainedBlock; +import com.dfsek.terra.structure.StructureInfo; +import com.dfsek.terra.util.structure.RotationUtil; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.configuration.InvalidConfigurationException; @@ -73,4 +77,28 @@ public class TreeConfig extends TerraConfig implements Tree { struc.paste(mut, rotation); return true; } + + public boolean plantBlockCheck(Location location, Random random) { + location.subtract(0, 1, 0); + Location mut = location.clone().subtract(0, yOffset, 0); + if(!spawnable.contains(location.getBlock().getType())) return false; + Structure struc = structure.get(random); + Rotation rotation = Rotation.fromDegrees(random.nextInt(4) * 90); + StructureInfo info = struc.getStructureInfo(); + for(StructureContainedBlock spawn : struc.getSpawns()) { + Vector2 rot = RotationUtil.getRotatedCoords(new Vector2(spawn.getX() - info.getCenterX(), spawn.getZ() - info.getCenterZ()), rotation); + int x = (int) rot.getX(); + int z = (int) rot.getZ(); + switch(spawn.getRequirement()) { + case AIR: + if(!mut.clone().add(x, spawn.getY() - 1, z).getBlock().isPassable()) return false; + break; + case LAND: + if(!mut.clone().add(x, spawn.getY() - 1, z).getBlock().getType().isSolid()) return false; + break; + } + } + struc.paste(mut, rotation); + return true; + } } diff --git a/src/main/java/com/dfsek/terra/structure/Structure.java b/src/main/java/com/dfsek/terra/structure/Structure.java index acdd5348d..ad8b08d16 100644 --- a/src/main/java/com/dfsek/terra/structure/Structure.java +++ b/src/main/java/com/dfsek/terra/structure/Structure.java @@ -293,6 +293,10 @@ public class Structure implements Serializable { return true; } + public HashSet getSpawns() { + return spawns; + } + public HashSet getInventories() { return inventories; } From 0a77487399728c7f7f42f3b6b435152de37c0823 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Wed, 18 Nov 2020 17:23:09 -0600 Subject: [PATCH 18/57] Replace Math with FastMath for improved performance. FastMath is a drop in replacement for the native Java math class with improved performance and fall backs to the native Java math class if necessary. https://commons.apache.org/proper/commons-math/javadocs/api-3.3/org/apache/commons/math3/util/FastMath.html This requires further testing and might cause chunk borders due the FastMath giving slightly different results than the native Java math class. I also added .idea/Terra.iml to the .gitignore --- .gitignore | 3 ++- build.gradle.kts | 1 + .../terra/biome/postprocessing/ErosionNoise.java | 3 ++- .../com/dfsek/terra/carving/SimplexCarver.java | 15 ++++++++------- .../dfsek/terra/carving/UserDefinedCarver.java | 15 ++++++++------- .../java/com/dfsek/terra/command/OreCommand.java | 3 ++- .../dfsek/terra/config/genconfig/FloraConfig.java | 7 ++++--- .../dfsek/terra/config/genconfig/OreConfig.java | 5 +++-- .../com/dfsek/terra/debug/gui/DebugFrame.java | 9 +++++---- .../java/com/dfsek/terra/image/ImageLoader.java | 5 +++-- .../dfsek/terra/population/FloraPopulator.java | 3 ++- .../terra/population/StructurePopulator.java | 7 ++++--- .../com/dfsek/terra/procgen/math/Vector2.java | 6 ++++-- .../com/dfsek/terra/procgen/pixel/Rectangle.java | 5 +++-- .../java/com/dfsek/terra/structure/Rotation.java | 4 +++- .../java/com/dfsek/terra/structure/Structure.java | 7 ++++--- .../com/dfsek/terra/structure/StructureInfo.java | 3 ++- .../terra/structure/features/EntityFeature.java | 3 ++- .../dfsek/terra/util/structure/RotationUtil.java | 3 ++- src/test/java/DistributionTest.java | 14 +++++++------- src/test/java/LookupGenerator.java | 4 ++-- 21 files changed, 73 insertions(+), 52 deletions(-) diff --git a/.gitignore b/.gitignore index 909ef81d5..6d85c9383 100644 --- a/.gitignore +++ b/.gitignore @@ -135,4 +135,5 @@ build .idea/**.xml .idea/modules/**.iml -!lib/*.jar \ No newline at end of file +!lib/*.jar +.idea/Terra.iml diff --git a/build.gradle.kts b/build.gradle.kts index 4c4334e23..4baeaed3b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -48,6 +48,7 @@ dependencies { compileOnly("com.googlecode.json-simple:json-simple:1.1") implementation(name = "parsii-1.2", group = "") implementation("io.papermc:paperlib:1.0.5") + implementation("org.apache.commons:commons-math3:3.6.1") // JUnit. testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") diff --git a/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java b/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java index 35e55ba96..2052659dd 100644 --- a/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java +++ b/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java @@ -1,5 +1,6 @@ package com.dfsek.terra.biome.postprocessing; +import org.apache.commons.math3.util.FastMath; import org.polydev.gaea.math.FastNoiseLite; /** @@ -27,7 +28,7 @@ public class ErosionNoise { * @return Whether location is eroded */ public boolean isEroded(int x, int z) { - double abs = Math.pow(noise.getNoise(x, z), 2); + double abs = FastMath.pow(noise.getNoise(x, z), 2); return abs < thresh; } } diff --git a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java index e88984a5c..2f86e573d 100644 --- a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java +++ b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java @@ -1,5 +1,6 @@ package com.dfsek.terra.carving; +import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; import org.polydev.gaea.math.FastNoiseLite; @@ -15,7 +16,7 @@ public class SimplexCarver extends Carver { private final FastNoiseLite height; private final FastNoiseLite column; private final FastNoiseLite hasCaves; - private final double root2inverse = 1D / Math.sqrt(2); + private final double root2inverse = 1D / FastMath.sqrt(2); public SimplexCarver(int minY, int maxY) { super(minY, maxY); @@ -41,7 +42,7 @@ public class SimplexCarver extends Carver { } private static double acot(double x) { - return Math.PI / 2 - Math.atan(x); + return FastMath.PI / 2 - FastMath.atan(x); } @Override @@ -53,15 +54,15 @@ public class SimplexCarver extends Carver { for(int z = oz; z < oz + 16; z++) { double heightNoise = height.getNoise(x, z); double mainNoise = noise.getNoise(x, z) * 2; - double columnNoise = Math.pow(Math.max(column.getNoise(x, z), 0) * 2, 3); - double hc = (acot(16 * (hasCaves.getNoise(x, z) - 0.2)) / Math.PI) - 0.1; + double columnNoise = FastMath.pow(FastMath.max(column.getNoise(x, z), 0) * 2, 3); + double hc = (acot(16 * (hasCaves.getNoise(x, z) - 0.2)) / FastMath.PI) - 0.1; CarvingData.CarvingType type = CarvingData.CarvingType.BOTTOM; - double simplex = (Math.pow(mainNoise + root2inverse, 3) / 2 + columnNoise) * hc; + double simplex = (FastMath.pow(mainNoise + root2inverse, 3) / 2 + columnNoise) * hc; for(int y = 0; y < 64; y++) { - double finalNoise = (-0.05 * Math.abs(y - (heightNoise * 16 + 24)) + 1 - simplex) * hc; + double finalNoise = (-0.05 * FastMath.abs(y - (heightNoise * 16 + 24)) + 1 - simplex) * hc; if(finalNoise > 0.5) { c.carve(x - ox, y, z - oz, type); - double finalNoiseUp = (-0.05 * Math.abs((y + 1) - (heightNoise * 16 + 24)) + 1 - simplex) * hc; + double finalNoiseUp = (-0.05 * FastMath.abs((y + 1) - (heightNoise * 16 + 24)) + 1 - simplex) * hc; if(finalNoiseUp > 0.5) { type = CarvingData.CarvingType.CENTER; } else type = CarvingData.CarvingType.TOP; diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index ab50ba1a3..b9fcc35cb 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -3,6 +3,7 @@ package com.dfsek.terra.carving; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; +import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; import org.polydev.gaea.generation.GenerationPhase; @@ -81,9 +82,9 @@ public class UserDefinedCarver extends Carver { @Override public void step() { if(steps == nextDirection) { - direction.rotateAroundX(Math.toRadians((getRandom().nextGaussian()) * mutate[0] * recalcMagnitude)); - direction.rotateAroundY(Math.toRadians((getRandom().nextGaussian()) * mutate[1] * recalcMagnitude)); - direction.rotateAroundZ(Math.toRadians((getRandom().nextGaussian()) * mutate[2] * recalcMagnitude)); + direction.rotateAroundX(FastMath.toRadians((getRandom().nextGaussian()) * mutate[0] * recalcMagnitude)); + direction.rotateAroundY(FastMath.toRadians((getRandom().nextGaussian()) * mutate[1] * recalcMagnitude)); + direction.rotateAroundZ(FastMath.toRadians((getRandom().nextGaussian()) * mutate[2] * recalcMagnitude)); currentRotation = new double[] {(getRandom().nextGaussian()) * mutate[0], (getRandom().nextGaussian()) * mutate[1], (getRandom().nextGaussian()) * mutate[2]}; @@ -92,10 +93,10 @@ public class UserDefinedCarver extends Carver { steps++; setRadius(new int[] {(int) (runningRadius * radiusMultiplier[0]), (int) (runningRadius * radiusMultiplier[1]), (int) (runningRadius * radiusMultiplier[2])}); runningRadius += (getRandom().nextDouble() - 0.5) * mutate[3]; - runningRadius = Math.max(Math.min(runningRadius, maxRad), 1); - direction.rotateAroundX(Math.toRadians(currentRotation[0] * mutate[0])); - direction.rotateAroundY(Math.toRadians(currentRotation[1] * mutate[1])); - direction.rotateAroundZ(Math.toRadians(currentRotation[2] * mutate[2])); + runningRadius = FastMath.max(FastMath.min(runningRadius, maxRad), 1); + direction.rotateAroundX(FastMath.toRadians(currentRotation[0] * mutate[0])); + direction.rotateAroundY(FastMath.toRadians(currentRotation[1] * mutate[1])); + direction.rotateAroundZ(FastMath.toRadians(currentRotation[2] * mutate[2])); getRunning().add(direction); } } diff --git a/src/main/java/com/dfsek/terra/command/OreCommand.java b/src/main/java/com/dfsek/terra/command/OreCommand.java index 5ced28b1d..fdc6db1f2 100644 --- a/src/main/java/com/dfsek/terra/command/OreCommand.java +++ b/src/main/java/com/dfsek/terra/command/OreCommand.java @@ -3,6 +3,7 @@ package com.dfsek.terra.command; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.genconfig.OreConfig; import com.dfsek.terra.config.lang.LangUtil; +import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.Command; @@ -34,7 +35,7 @@ public class OreCommand extends WorldCommand { LangUtil.send("command.ore.out-of-range", sender); return true; } - Vector source = new Vector(Math.floorMod(bl.getX(), 16), bl.getY(), Math.floorMod(bl.getZ(), 16)); + Vector source = new Vector(FastMath.floorMod(bl.getX(), 16), bl.getY(), FastMath.floorMod(bl.getZ(), 16)); ore.doVein(source, bl.getChunk(), new Random()); } else { LangUtil.send("command.ore.main-menu", sender); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index 3b0fb7dd1..dab183643 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; @@ -95,12 +96,12 @@ public class FloraConfig extends TerraConfig implements Flora { public boolean plant(Location location) { int size = floraPalette.getSize(); int c = ceiling ? -1 : 1; - for(int i = 0; Math.abs(i) < size; i += c) { // Down if ceiling, up if floor + for(int i = 0; FastMath.abs(i) < size; i += c) { // Down if ceiling, up if floor if(i + 1 > 255) return false; if(!replaceable.contains(location.clone().add(0, i + c, 0).getBlock().getType())) return false; } - for(int i = 0; Math.abs(i) < size; i += c) { // Down if ceiling, up if floor - int lvl = (Math.abs(i)); + for(int i = 0; FastMath.abs(i) < size; i += c) { // Down if ceiling, up if floor + int lvl = (FastMath.abs(i)); location.clone().add(0, i + c, 0).getBlock().setBlockData(floraPalette.get((ceiling ? lvl : size - lvl - 1), location.getBlockX(), location.getBlockZ()), physics); } return true; diff --git a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java index 8ebea851c..a642539ab 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Material; @@ -80,9 +81,9 @@ public class OreConfig extends TerraConfig { Vector source = l.clone().add(new Vector(x, y, z)); if(oreLoc.getBlockY() > 255 || oreLoc.getBlockY() < 0) continue; if(source.distance(l) < (rad + 0.5) * ((ore.getNoise(x, y, z) + 1) * deform)) { - ChunkCoordinate coord = new ChunkCoordinate(Math.floorDiv(oreLoc.getBlockX(), 16), Math.floorDiv(oreLoc.getBlockZ(), 16), chunk.getWorld().getUID()); + ChunkCoordinate coord = new ChunkCoordinate(FastMath.floorDiv(oreLoc.getBlockX(), 16), FastMath.floorDiv(oreLoc.getBlockZ(), 16), chunk.getWorld().getUID()); Block b = chunks.computeIfAbsent(coord, k -> chunk.getWorld().getChunkAt(oreLoc.toLocation(chunk.getWorld()))) - .getBlock(Math.floorMod(source.getBlockX(), 16), source.getBlockY(), Math.floorMod(source.getBlockZ(), 16)); // Chunk caching conditional computation + .getBlock(FastMath.floorMod(source.getBlockX(), 16), source.getBlockY(), FastMath.floorMod(source.getBlockZ(), 16)); // Chunk caching conditional computation if(replaceable.contains(b.getType()) && b.getLocation().getY() >= 0) b.setBlockData(oreData, update); } diff --git a/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java b/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java index fdad86db2..055fd261c 100644 --- a/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java +++ b/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java @@ -4,6 +4,7 @@ import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.generation.TerraChunkGenerator; import com.dfsek.terra.image.ImageLoader; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.polydev.gaea.generation.GenerationPhase; @@ -33,12 +34,12 @@ public class DebugFrame extends JFrame implements ActionListener { super.paintComponents(g); for(Player p : Bukkit.getOnlinePlayers()) { if(!(p.getWorld().getGenerator() instanceof TerraChunkGenerator)) break; - int xp = (int) (((double) Math.floorMod(p.getLocation().getBlockX() - (img.getWidth() / 2), x) / x) * getWidth()); - int zp = (int) (((double) Math.floorMod(p.getLocation().getBlockZ() - (img.getHeight() / 2), z) / z) * getHeight()); + int xp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockX() - (img.getWidth() / 2), x) / x) * getWidth()); + int zp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockZ() - (img.getHeight() / 2), z) / z) * getHeight()); ImageLoader loader = TerraWorld.getWorld(p.getWorld()).getWorldConfig().imageLoader; if(loader != null && loader.getAlign().equals(ImageLoader.Align.NONE)) { - xp = (int) (((double) Math.floorMod(p.getLocation().getBlockX(), x) / x) * getWidth()); - zp = (int) (((double) Math.floorMod(p.getLocation().getBlockZ(), z) / z) * getHeight()); + xp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockX(), x) / x) * getWidth()); + zp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockZ(), z) / z) * getHeight()); } String str = TerraWorld.getWorld(p.getWorld()).getConfig().getBiome((UserDefinedBiome) TerraWorld.getWorld(p.getWorld()).getGrid().getBiome(p.getLocation(), GenerationPhase.POPULATE)).getID(); g.setColor(new Color(255, 255, 255, 128)); diff --git a/src/main/java/com/dfsek/terra/image/ImageLoader.java b/src/main/java/com/dfsek/terra/image/ImageLoader.java index e0865a5bb..4f248a1f7 100644 --- a/src/main/java/com/dfsek/terra/image/ImageLoader.java +++ b/src/main/java/com/dfsek/terra/image/ImageLoader.java @@ -5,6 +5,7 @@ import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.debug.gui.DebugGUI; +import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.polydev.gaea.biome.NormalizationUtil; @@ -108,12 +109,12 @@ public class ImageLoader { NONE { @Override public int getRGB(BufferedImage image, int x, int y) { - return image.getRGB(Math.floorMod(x, image.getWidth()), Math.floorMod(y, image.getHeight())); + return image.getRGB(FastMath.floorMod(x, image.getWidth()), FastMath.floorMod(y, image.getHeight())); } }; private static int getRGBNoAlign(BufferedImage image, int x, int y) { - return image.getRGB(Math.floorMod(x, image.getWidth()), Math.floorMod(y, image.getHeight())); + return image.getRGB(FastMath.floorMod(x, image.getWidth()), FastMath.floorMod(y, image.getHeight())); } public abstract int getRGB(BufferedImage image, int x, int y); diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index bc9b37c71..fedc69bc1 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -9,6 +9,7 @@ import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeFloraConfig; import com.dfsek.terra.event.TreeGenerateEvent; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; @@ -57,7 +58,7 @@ public class FloraPopulator extends GaeaBlockPopulator { } private static int offset(Random r, int i) { - return Math.min(Math.max(i + r.nextInt(3) - 1, 0), 15); + return FastMath.min(FastMath.max(i + r.nextInt(3) - 1, 0), 15); } @SuppressWarnings("try") diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index 886096082..f3e14fa40 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -13,6 +13,7 @@ import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; import com.dfsek.terra.structure.features.Feature; import com.dfsek.terra.util.structure.RotationUtil; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; @@ -48,15 +49,15 @@ public class StructurePopulator extends BlockPopulator { spawn.setY(y); if(!struc.checkSpawns(spawn, rotation)) continue; double horizontal = struc.getStructureInfo().getMaxHorizontal(); - if(Math.abs((cx + 8) - spawn.getBlockX()) <= horizontal && Math.abs((cz + 8) - spawn.getBlockZ()) <= horizontal) { + if(FastMath.abs((cx + 8) - spawn.getBlockX()) <= horizontal && FastMath.abs((cz + 8) - spawn.getBlockZ()) <= horizontal) { struc.paste(spawn, chunk, rotation); for(StructureContainedInventory i : struc.getInventories()) { try { Debug.info("Attempting to populate loot: " + i.getUid()); Vector2 lootCoords = RotationUtil.getRotatedCoords(new Vector2(i.getX() - struc.getStructureInfo().getCenterX(), i.getZ() - struc.getStructureInfo().getCenterZ()), rotation.inverse()); Location inv = spawn.clone().add(lootCoords.getX(), i.getY(), lootCoords.getZ()); - Debug.info(Math.floorDiv(inv.getBlockX(), 16) + ":" + chunk.getX() + ", " + Math.floorDiv(inv.getBlockZ(), 16) + ":" + chunk.getZ()); - if(Math.floorDiv(inv.getBlockX(), 16) != chunk.getX() || Math.floorDiv(inv.getBlockZ(), 16) != chunk.getZ()) + Debug.info(FastMath.floorDiv(inv.getBlockX(), 16) + ":" + chunk.getX() + ", " + FastMath.floorDiv(inv.getBlockZ(), 16) + ":" + chunk.getZ()); + if(FastMath.floorDiv(inv.getBlockX(), 16) != chunk.getX() || FastMath.floorDiv(inv.getBlockZ(), 16) != chunk.getZ()) continue; Debug.info("Target is in chunk."); Debug.info(spawn.toString() + " became: " + inv.toString() + " (" + rotation + ", " + inv.getBlock().getType() + ")"); diff --git a/src/main/java/com/dfsek/terra/procgen/math/Vector2.java b/src/main/java/com/dfsek/terra/procgen/math/Vector2.java index d7d296455..3de79ec05 100644 --- a/src/main/java/com/dfsek/terra/procgen/math/Vector2.java +++ b/src/main/java/com/dfsek/terra/procgen/math/Vector2.java @@ -1,5 +1,7 @@ package com.dfsek.terra.procgen.math; +import org.apache.commons.math3.util.FastMath; + /** * oh yeah */ @@ -111,7 +113,7 @@ public class Vector2 implements Cloneable { * @return length */ public double length() { - return Math.sqrt(lengthSquared()); + return FastMath.sqrt(lengthSquared()); } /** @@ -130,7 +132,7 @@ public class Vector2 implements Cloneable { * @return Distance between vectors */ public double distance(Vector2 other) { - return Math.sqrt(distanceSquared(other)); + return FastMath.sqrt(distanceSquared(other)); } /** diff --git a/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java b/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java index e2769aa6b..78a075e33 100644 --- a/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java +++ b/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java @@ -1,6 +1,7 @@ package com.dfsek.terra.procgen.pixel; import com.dfsek.terra.procgen.math.Vector2; +import org.apache.commons.math3.util.FastMath; import java.util.HashSet; import java.util.Set; @@ -11,8 +12,8 @@ public class Rectangle extends Polygon { private final Vector2 max; public Rectangle(Vector2 min, Vector2 max) { - this.max = new Vector2(Math.min(min.getX(), max.getX()), Math.min(min.getZ(), max.getZ())); - this.min = new Vector2(Math.max(min.getX(), max.getX()), Math.max(min.getZ(), max.getZ())); + this.max = new Vector2(FastMath.min(min.getX(), max.getX()), FastMath.min(min.getZ(), max.getZ())); + this.min = new Vector2(FastMath.max(min.getX(), max.getX()), FastMath.max(min.getZ(), max.getZ())); } public Rectangle(Vector2 center, double xRadius, double zRadius) { diff --git a/src/main/java/com/dfsek/terra/structure/Rotation.java b/src/main/java/com/dfsek/terra/structure/Rotation.java index f1a91d212..cf4d02081 100644 --- a/src/main/java/com/dfsek/terra/structure/Rotation.java +++ b/src/main/java/com/dfsek/terra/structure/Rotation.java @@ -1,5 +1,7 @@ package com.dfsek.terra.structure; +import org.apache.commons.math3.util.FastMath; + public enum Rotation { CW_90(90), CW_180(180), CCW_90(270), NONE(0); private final int degrees; @@ -9,7 +11,7 @@ public enum Rotation { } public static Rotation fromDegrees(int deg) { - switch(Math.floorMod(deg, 360)) { + switch(FastMath.floorMod(deg, 360)) { case 0: return Rotation.NONE; case 90: diff --git a/src/main/java/com/dfsek/terra/structure/Structure.java b/src/main/java/com/dfsek/terra/structure/Structure.java index ad8b08d16..2e26b7451 100644 --- a/src/main/java/com/dfsek/terra/structure/Structure.java +++ b/src/main/java/com/dfsek/terra/structure/Structure.java @@ -3,6 +3,7 @@ package com.dfsek.terra.structure; import com.dfsek.terra.Debug; import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.util.structure.RotationUtil; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; @@ -198,7 +199,7 @@ public class Structure implements Serializable { } int offset = block.getPullOffset(); if(offset != 0) - worldBlock = worldBlock.getRelative((offset > 0) ? BlockFace.UP : BlockFace.DOWN, Math.abs(offset)); + worldBlock = worldBlock.getRelative((offset > 0) ? BlockFace.UP : BlockFace.DOWN, FastMath.abs(offset)); RotationUtil.rotateBlockData(data, r); @@ -265,9 +266,9 @@ public class Structure implements Serializable { Vector2 max = getRotatedCoords(new Vector2(x.getMax(), z.getMax()).subtract(center), r.inverse()).add(center); if(a.equals(Rotation.Axis.X)) - return new Range((int) Math.floor(Math.min(min.getX(), max.getX())), (int) Math.ceil(Math.max(min.getX(), max.getX())) + 1); + return new Range((int) FastMath.floor(FastMath.min(min.getX(), max.getX())), (int) FastMath.ceil(FastMath.max(min.getX(), max.getX())) + 1); else - return new Range((int) Math.floor(Math.min(min.getZ(), max.getZ())), (int) Math.ceil(Math.max(min.getZ(), max.getZ())) + 1); + return new Range((int) FastMath.floor(FastMath.min(min.getZ(), max.getZ())), (int) FastMath.ceil(FastMath.max(min.getZ(), max.getZ())) + 1); } @NotNull diff --git a/src/main/java/com/dfsek/terra/structure/StructureInfo.java b/src/main/java/com/dfsek/terra/structure/StructureInfo.java index eceab039f..1abcbcc09 100644 --- a/src/main/java/com/dfsek/terra/structure/StructureInfo.java +++ b/src/main/java/com/dfsek/terra/structure/StructureInfo.java @@ -1,6 +1,7 @@ package com.dfsek.terra.structure; import com.dfsek.terra.procgen.math.Vector2; +import org.apache.commons.math3.util.FastMath; import java.io.Serializable; @@ -41,6 +42,6 @@ public class StructureInfo implements Serializable { } public double getMaxHorizontal() { - return Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeZ, 2)); + return FastMath.sqrt(FastMath.pow(sizeX, 2) + FastMath.pow(sizeZ, 2)); } } diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 931a717ef..2fd2162d7 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -4,6 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; +import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; @@ -35,7 +36,7 @@ public class EntityFeature implements Feature { } private static boolean isInChunk(Chunk c, Location l) { - return Math.floorDiv(l.getBlockX(), 16) == c.getX() && Math.floorDiv(l.getBlockZ(), 16) == c.getZ(); + return FastMath.floorDiv(l.getBlockX(), 16) == c.getX() && FastMath.floorDiv(l.getBlockZ(), 16) == c.getZ(); } private static List getLocations(Structure structure, Rotation r, Location origin, Random random, int number) { diff --git a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java index 9a97c0aa0..4edc5153b 100644 --- a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java +++ b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java @@ -2,6 +2,7 @@ package com.dfsek.terra.util.structure; import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.structure.Rotation; +import org.apache.commons.math3.util.FastMath; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Directional; @@ -107,7 +108,7 @@ public final class RotationUtil { * @return BlockFace represented by integer. */ public static BlockFace fromRotation(int r) { - switch(Math.floorMod(r, 16)) { + switch(FastMath.floorMod(r, 16)) { case 0: return BlockFace.NORTH; case 1: diff --git a/src/test/java/DistributionTest.java b/src/test/java/DistributionTest.java index 0c25823e8..da3a348d8 100644 --- a/src/test/java/DistributionTest.java +++ b/src/test/java/DistributionTest.java @@ -26,8 +26,8 @@ class DistributionTest { long l = System.nanoTime(); for(int i = 0; i < 1000000; i++) { double n = noise.getNoise(0, i); - max = Math.max(max, n); - min = Math.min(min, n); + max = FastMath.max(max, n); + min = FastMath.min(min, n); numbers[normalize(n, attempts)]++; } long l2 = System.nanoTime() - l; @@ -36,8 +36,8 @@ class DistributionTest { l = System.nanoTime(); for(int i = 0; i < 1000000; i++) { double n = noise.getNoise(0, i); - max = Math.max(max, n); - min = Math.min(min, n); + max = FastMath.max(max, n); + min = FastMath.min(min, n); } l2 = System.nanoTime() - l; System.out.println("Took " + (double) l2 / 1000000 + "ms (" + ((double) l2 / 1000000) + "ns per."); @@ -67,8 +67,8 @@ class DistributionTest { end = mid; } } - double left = Math.abs(normalMap[start] - d); - double right = Math.abs(normalMap[end] - d); + double left = FastMath.abs(normalMap[start] - d); + double right = FastMath.abs(normalMap[end] - d); if (left <= right) { return start * (num) / (normalMap.length); } @@ -76,7 +76,7 @@ class DistributionTest { } public static int normal(double d, int max) { - double ranged = Math.max(0, Math.min((d + 1) / 2D, 1)); + double ranged = FastMath.max(0, FastMath.min((d + 1) / 2D, 1)); return (int) (ranged * max); } } diff --git a/src/test/java/LookupGenerator.java b/src/test/java/LookupGenerator.java index fe15ca665..db245f544 100644 --- a/src/test/java/LookupGenerator.java +++ b/src/test/java/LookupGenerator.java @@ -100,8 +100,8 @@ class LookupGenerator { public static int normalize(double i, int n) { i *= 1.42; // Magic simplex value (sqrt(2) plus a little) - i = Math.min(Math.max(i, -1), 1); - return Math.min((int) Math.floor((i + 1) * ((double) n / 2)), n - 1); + i = FastMath.min(FastMath.max(i, -1), 1); + return FastMath.min((int) FastMath.floor((i + 1) * ((double) n / 2)), n - 1); } private static class Worker extends Thread { From bed506c5cb5144fea08455b84f29def2df0e7ec8 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 18 Nov 2020 18:40:49 -0700 Subject: [PATCH 19/57] Update Parsii to latest version using FastMath --- build.gradle.kts | 12 +++++++++--- lib/parsii-1.2-javadoc.jar | Bin 174837 -> 0 bytes lib/parsii-1.2-sources.jar | Bin 34155 -> 0 bytes lib/{parsii-1.2.jar => parsii-1.2.1.jar} | Bin 49674 -> 50224 bytes 4 files changed, 9 insertions(+), 3 deletions(-) delete mode 100644 lib/parsii-1.2-javadoc.jar delete mode 100644 lib/parsii-1.2-sources.jar rename lib/{parsii-1.2.jar => parsii-1.2.1.jar} (53%) diff --git a/build.gradle.kts b/build.gradle.kts index 4baeaed3b..9b1740852 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,16 +39,22 @@ dependencies { compileOnly(name = "Gaea-${gaeaVersion}", group = "") testImplementation(name = "Gaea-${gaeaVersion}", group = "") - compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") compileOnly("org.jetbrains:annotations:20.1.0") + implementation("commons-io:commons-io:2.4") implementation("org.apache.commons:commons-imaging:1.0-alpha2") + implementation("org.apache.commons:commons-math3:3.6.1") + compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT") implementation("org.bstats:bstats-bukkit:1.7") + compileOnly("com.googlecode.json-simple:json-simple:1.1") - implementation(name = "parsii-1.2", group = "") + + implementation(name = "parsii-1.2.1", group = "") + + compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") implementation("io.papermc:paperlib:1.0.5") - implementation("org.apache.commons:commons-math3:3.6.1") + // JUnit. testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") diff --git a/lib/parsii-1.2-javadoc.jar b/lib/parsii-1.2-javadoc.jar deleted file mode 100644 index 4e637a83800cc40b6397584f7ddcc0b8747b93dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174837 zcmaI71FUe(vMsu7+qP}nwr$(?`j&0mwr$(Ct#7@5pM7%A+c)>#nRI%lGdf*K%~aJG zT~k3C7z70X00II)wM|a3D2ORX1poj*?Vs__DuAr0iXg3|oEW{Vpq!+bsIm&3tk{$6 z^puP=E!_gFG%eNa^jwn?!!q;!i4)b#wB*8z)Wj+*orEkHq}II?Cwd84YH{f~m#P-! zJ6USUDWwN#DrxC4IW@>}a;f<#CB_wIAj^{zAb`R@RzUq@1;Bq<@z25k>w)~|?SEPE ze}{qp19LERa<;Uj|G$G^{s(00W@z*OK%)I`NMjpAXJ=YhXVd@39>o9I<6>`ZYG>(X z>h%ABWB;Gv|9Q^;_{H0*@0k?@0KgmW-+nPMb#O8@HgqvHp|!DecA>Lyv9-BT-?QIh zL-2dkcT^2r^@~U8uuC9K4Ih?Vg^9E!nT+BEZFXthm`@a2bc-qY{fhm(*%Sn}fu~j= zgcv{CamSAvlUMs)8S%jQ=IjWG8@Pd$!JD6BvSY(Gf0~s%-iE#14%LgwrA`znK)x8qYW}RV!4_-JsOJo_O&WL) zFnHK*V_?IBHc>oy#~!7~7=ZuUg?P%axBM<-o-9M4OIIoX3E!XO zV=HD^0|G}+mx5syV%M>>C_5hI^pHcJC0ons&H6&+G;S5yiyH4s7`boc{k+1|88{-3 zr|^-!s1axpSVprTQoDytX*3{oTzz(6vQC|9yN%f}s8D!RVGov_aH;~83Ij=y&7PaY zdfxF73ba#vv_!J)3uk5kUjp)K-X7fB80YZ;vrSO2EvLj8T03wI(I0Jk)vmPx5|o@d zwC)&e!@c*d?~xcL)4aM}Q%3 z;PN{5v7y_M*+v2=K#{JbvQL8Bz`D|Mot9oxCc|Yye+PXmNVgTEBHs-)!+qSs$O#)z zDLyWDZ_PIc2O+bi2#>>(#dCu8#>vS{mr^Q)L)3;u$_~X4u8N4ED*0Gj$4PFTY#ocO zU6U$J))w0lxN4x2?#zY~FDk3?E;6Zz9Y&_h>#Gpc@`Iv9g!T>y>t2sNJ(qz~h_H*R z=P*7 zE6O@MU5@u;=0ig#!R&iuGBz>2k3PbOOeD`Wo%Ysv>gu2HsF(14_6XoOPRn*8tOawJZpgi6-p2DCkdmf zofq@_w9%iM$Q!)}W*xO>YGK51f}6nWG&GpWd&|4N?uq0|tt8H@#S?ahs;7|$d7Cyk zTAj;Mi<2nLuBQ!bMJs1+Opu{>$Fxh_HPa%8242dg_xVnxv;RFVluP`lVuiou^S5B- zMfRiMxHJDpnDW)R&_$wIdWMfABowLi1QI%%nNenuR#lBQ@^8NkNgh2*x95%T`w7d} zu~PsXJX2F4JoaZ#_h^J4(;1;JJF86;e9X16_53IJzk=oegqZ^!OY*9J;xH8x0Kh+y z2Ef_H)5g@wW58Mqxf zvHWfSIwsRDXZH)R&vmmjg8-EcJ!t@>2eiBb^9-~^a@v(KbnH&}Nc z&b+sdJN@XnsS?SW*~YieujC-rww-0pjGdUi7zefG zkK-SQR{`!xiGp^MW8^Fp5__#_3uSXxW#sUoCw25Rb?8W=wSZKPSXhe+Zqy+!-$--~ zqkhgJ_+x5|->Om6kG9Qo%DTK%nB1rxo4vNol4Z<%e->9@aK!=s9lSG=+86qwo$XPQ zQZ#1P7KqYQbt@}OIo)&PWCpufOw;z_j&(=8TMa6cDhI2AQo6y4j%==EtIFaWB6dT0 z??lvQWR#~;0^{NJwgr^%8%M=?FK)vbzNbHG{k1GGGHEhyA$IOGS@Ls|BOjC)hcrL2 z*FKnx-C-O9TEkG!GZ%psPWp7@4y9XMz>Si8okM&a9Hv|dU3ypPBNV`Hj=K3fLO@rMF-WeMl&ZROfXvqUc=Fnq&IL^g~Qbl8cEh1SAF&JBpdVL02@7R0X*nPXP_yG=kQ+1d zENV7MNc)@G+c@|#(jNx-f?ka=S!^Rv)x5RY6V`xUv~BaXgK}{~<0S3YuZEgMpEX+w z;Eu#42MhkfwzU=0obe|$GjHqb>d)wNlb}_de0*#-5DXhr@LO75<5!@fzQLaVd5T)o zRmMwS1#hp7=zdK0)XLTwniIea7kNOI-{%g3o`;}EXOkU@NMbl9DOZpksRA?pV6Kar zOr|El+!rnNCx+Z)T!7;4381B9WY07pURG{FR?yC{Y9739N#N318&lRK;~Z@ppHr`z z!p>tJ;eB5Mw~o`=mnv`GNL%Q!GPCGSOb^P>Pr0(!f>^XzVK#_QTh5Ne08{O{*$cdO zc-0Z?4|H8ekShZ36d)S z{p`y~T|03-y2c$M&C>A*`-GHF?R)kCWtjHME;IV^I0RhF~zls@(BsI_Kp-jtX;W#$k_ z>0;{JtW{NRiP7TyJ_qeM^T!#~-=9e&!+_s2$Rer!DwnbTTTDtq+AE&W2NzZZtvec{ zPCT0WAp7YQ(?><)LwS!2noCgMmLEZb`b%OzLht(TBjJF)OttaGVy=KP>*?L^~tIqGzy1^WhynRAr_+=JU&IqyK7 z{96@Z>OX&O6Y0f6g$ufNMOq7RqMLDT*d3(Bd0k8{CbcfFrZb^j%TB+!+qB;z!vbtJ zv&3RfvS~Mvr~5yb^(UOH=C#2|=B2|#=2;e*o@HB- z5lRiwQ-oy6htJvJ#~11_k&4NaQiq=rl?&5R9W|eQgfNm!J_Nk0@tlG5=+JlK-;LkH)Mrs&MkblhhHtwbmAZHDm@R^Cxv=E+R!ad!F3dx2JR|m7}X1*sk zF4&&DzY6=hhe&O~RVMMR|6U}#KjpT5N6~_RbDeJ|0N|Ziv*R@k8c^BDhyp1K2~kco z#JThIwGoH!U9Vj@T1w*}E-8u14DM?V`o?3Z@Ya)P&42evkBA}G6M~5=iM}73T&+bU z`Q$XkNkV7)O+w3V9CBs1s9b3_^~^Amdy8jh@+5H3@|}f)q@}Z;%}3uPEgN-_(5_i} z+qfwkG$`=~rXy;T&+oO{MAUxUYUuNC3AnB_c--GxrbjCZ^JZgR8=!_A6R8rQmjQWE zpf2~deALMxbO&`=y2v`%N7X{nlPs9Nu0bvE^^8;B!CSv%druAdJ(@nk`7P6errCJZ zxE5JvjU9R1-KthysqxjW&(M9rj{2Bfxy|+dss2;o2=j7V6aG;+u~VD2bo1Btu4~o2 z&2>qw9fjh9yG;XUwDG~;I=3js1-(H-A>l*>7;rwBhgYHc4jF(4-Kiz+)p z)Ah2?BMM4E{k&dekE@+qp!4A!S32WgSbz;1iQDXSpDJJIu=iR=yUwjtkRI~p>){%(dRz~^wYUJ$tO`FE8dy;XT4s(tTjdA%5JTpQSMF(6-S1{=$FU() z&@^lI_;Jp~`S%(2v($&IzF}KRF{%y@1Hza$2Mx1~aB8u-Yg zYD}api)FMglzAlErUKEJ;u|dCe;9Z%$&|frz|9bp3Ixcb3q5??Som49e*D>j7dniVclII`wEvocG%PjlSVI0 zNOs7>mqVrbH_fpS1y(WF3zzs!o)7+~3nvLORBs$m5pcFi(s)tELb_5ST2$Y{AE`o1 zs3KG!GU&u85UiPfS%=Sgub)d05wN`bD}sf2o?x}Bn<{quxl9LleBrBR*Gr=5ax#Pa zkLNi~Z4o_nlT5SCICah!0>`HDrRV6@_&LH1q>A!bzTvgM*uYZEGnU}6DP$R8)?%Je z_>g(ZpfNZpn89ZALD2^@lH4wvqQ`%xEsjgt|7g(!&)OgEWjxGkzCt8Ejw^eORAeeu z^3Frl38YY*45%zR>Jry0VN*Ze#;m_9MVfTfVrLC=R)9;9oe#uu|P3GfbnLaBsv!`IEz;BPC-x*`*2=ibF{T?2jjC?&- zQOmmkK$1%tW{U2TLr>djvSMofiGWei%f)pNBiv|KiK}LEb#<~45u6cJrKAvlgJx^k z0x5m3M|zEt&320HN)KX8k}@WH4a|B%!p7QWDxn7Wp^B*bVKr;WcN#cfRDas|Gp=eN zSG0zSViXPrTfGub5;sm{Ew~n_7IS%Pm{AMuqq-Eq<4s7ic72NBQ8l&RZdvuPVXJC137+aHG z39gdF%4GJwyJvKH1tE~Sxe{-Ee_c8$EwP}H}Ng1 zrDL?!u+m$+4ew9L@VEFbYk9>VVi~tIRgp zrUjdss+`I4RK22WwSrX$DW6O}OWg%m==Y{hP5C3 zYs<`Zjq7T!{Y0yE)~*n%i$PSF?9^hs!w#y>x^wXoZn<|A!}_eHy@$Uu_xT;?Nu-1& zd0rfcv`(f2Vkb`Ag6u#=g#hlb)eEAH)d9+@{O;Njlmw%LcH4yux2b5nnZxD~owxFq zDJ{(s+NKn1@D8yqaic4~J7>hvzz$j34Z?aH%|VvTwuy<3JdDVl!o>@D$I6tue8TegYeuInv0RXsx0Ra9b zBs&{BSvt7TSvkij4afxxAoM(;5=Wv51+5rUvNkX-hpiI`4hW(domG^I?0vWhh*MeB5`;OLE*?SIVt0~PuPc|N~ZXzDGcMZ<}qHVgTosYDd5u5Q1N#n2xPjafoO{JN`p38eC zeV=}7>c04kx=ZDkGsLaka&I7Is5Pq~e>HUpntKA&;@9kCR5cxhl(O`YF~7Mi_w-() z|ED9MkVep1;Q;`?bpQYe{&B>AOZESy!V6j289I5&JD55dx>(xV{X3K5{QQ$iU*En_ zv!QG#5vD$@(xi>yE0T7dBn}DO*kQtl1f*T6Ra1EqTCcWl{QKVC2^AZw*JE>BG-B9N zDfk{Ae4lu=%=dJfwRiMy=_cZKvaFrn9)4a_qd8iU|Se>Ry-Jb&! zv|zF7;UO)b=N&Xcc)|XBb{_F-4kJ;e%X=|DV&^FEzmDGqdLQ2YdcD8SSR;uan|o}& zf^c$>g@>2f%gM#TkIR-x!@a@3t-uJAQ3!rpUB5XpSaQ^GAkiST+}aG|99DFN5wDvQ zD*B0c1IltB$HeWxw;+p1fe@L@ya|dVX?ll93>;3}LUe)xayr0IeC(`THFaK=o&7nF zXT`xsGnfhTSb^K$V~oWHTOd!YuRm~LgvP{YAj2U7V2p_y>ktNmykf^$s~PI6&ZEwo zz{HjV&vF#GB^{7h7bZARsS@@$ECHS%dt<+4nR|u}SY!S0Zs7N}X(nT`4DS~wVSWtn z9+aOa?=rlW#OjFX!WQBC+P=N>L%+v@8AL+J4wD$Y?piBeAZQ6*L*wuZs289`f9J(J z4Ana^hH=;}Df;e6`TG6HyH9FBQGGl5H-XRD2d~IQ!XyaBa5G5O)g4pqPsaHeyYV^ zm@tvCcrMOQpnNs94z^yPk@0-N(V^p*N-?Zj+!%a6!HuJJB##I9h+l_1C8U_ zW5`#$#M^h5_zJ#gyO*%_l((C=msKWJUAi&C5~)u(5eWDOgCiPk)HpR_M1iAzOmA#2GzYn;jvm$U_sL>GW$Ivyh&j18az zu2T%LU7AFZm2gn4!kJrdf>duA6BjP5fPh|;zGQP{7K$8jVko}+1!C3?;8LdL%z&nM zXSrx(=;1II;6iIdhpFjS7sFYFj-odAkkBOVfCOpW>5NW?{;XE@wn1Tt*BPk=p|WIv zZfQ+g-z>w56^3;Ubw^DIMuW4`&tMsVf3SL~k01W74jDjeca)pl%EXo?S45+oBilbh zMdgPft|ul!jO|2&Bq9RX4gnxEBhDg~0#f}(D{;sQLBYUbm}Fmshu^bwJybh0Nji6w z=-A9Vc{Eh`;DG94H-N8FSVYlDvO>a5D#WisSi@L40nFifrfx~gM-qUnFA#1D)*iFM zbqc1{421L!%dlNwWA?3XO76GPYVGH!xu%8k=7>fcystuolsa8A>_}-2mvpWe&%Y0> zgbyR#1B0p8o2UEH1rd@ zRdakJF+dTg0Y%Q!jk{Pfg>ekDBq5c;H5r#jwU`DmNFDLWKwgJ4plXIpieXJnOz^M$ z1Hex}s2|t|pnV!p$UWls=sL1vVqlxek0e;($rS;WBafOncEvptfg+AJJ<1Hx3?TtG!Q0Cm*(L# zXAGT|YMG^`a`5KVAdE(I zD%6`M4qK1`D~Anm1$gG=h_I=p#*YYJ`H~`m_GSA+RhxGoqx{DWeiU{{P+o8Z8^ClT zU#JFVHw@h2A%ProkIRaOr?g&7uc)4TtVk=yiESn3y!qt%IRI^zq*k*`q*RtKXSx8f zTx}S!sUe|5FVod=Sw8`$>6dEk$0IWcPxc%r1gFl6b4Po6?wu)UTYGMNd%M{?f6DZ2Rk1lXhY~-3KX7)A#Q^}t zRW)%G1JgK$@DOYx=9zd{Z<+;M90L)c)4qf2;Ek}Gm55Kj0LlhpS9q)A32%?uvv6I* z2^A~%K5+-)5F6!mWZbeFM68c{{14#E_*)8ID%&)uC1+^^OM%=aug$JMK4q5Ojc^+? z4D~9_I0RZ1?2!EXqv-K(MlgH@fI6<%;0P=vNR-nfIV&Ui5bm0dRGP1G=+%u-44`#t;+m57P~okbLJX4u%Wc7|zURB}vkj89C?E%CxO~wdZO1!w`aao3sk#dOEwWbadP71>u)RoTQ$f0sz4t z5W>=S;kRqFfC3{&EhG)I0Kb&)(-*Hm38eDHuiqG9-xvVlD$z(l(&xj$)7L?7ppGaV zL|_aY%Of`t?-1Ay1>0*U6V$$1mwJBJFI(@}FP@~_vrD4ZCcW%5f27Q)s0u<~6DuuX zJ1IkL#H;t4XomC3bva(yo{Q%-s@9PLuO@hBfp$e_NV$VmpxyJv6scZEih6W%Ao;Za z{H$aXUPYhfu|nd39lC}_T9e9vf#%=aWbT;;B)=YsU{!=00Hre6iXEh|*XL-nix9A< z?ci@^!68Or)+#BNGzx3CDt$;sfk~xdr!~ql3DUeSsmK*zmBFT~D(MXPY2u#HgvWx$ zWAme~&}jQifrE_OX8wrYd;#9BWAQ5IvCxHUJ2<+6D`KKsdpR(It4P{pn=bc_qQio0n zu`jJ;A6AynaCMOghc#p?I6q#DYD!L2iq<9|eoJb7gvzlW(3xQg8Ld|Mq>Vc2dP-5# zvnfF4>S5-c}! zPz`|1dJqZIQtFi_7m(eCLzDeov+QvL(E>VG>qDie8|6r(`c!;0HyLc z@b0JzC^n;F` z@>dJ5tM1fvDTPAb8opy?zjfG|j|vOQb(nSDGP3uQo$;cXN<_DPd%#icBK&F_P|O!Y&`X|Fma8pW zh=!}`jpz(e0^ObD-d@VQegJ*&Sx$oj{=^Uo&^>k;8H^Lo_HVl3DNp1WqFNP%G?M1l zDpSc^*6E=4>@?ymobfTw@q?unil)QsGR|uiB^1R+T_skT4V#o;vdlNh!C7oRol?wq zg3Z^nuwXH}%X@)R<;|d9g^hhjbuVE|20vQv8cqpKs2;s;yZ;8z-zM}&^o-J(l?Q2B z;C=D%O}6a=*3ux)NZ0sTT0Bd7aVxb>=%)10=QOn!6o%vs9_(g?@W~fB6{EddJ(-O< z3yErHNax&#i!vlC+Xy=Fw9L5X=H}!=b?S~WXE zM*30cQymHgv?7@sSLSM^iW}987R;ogGW}F>Q`95!Mgu-qxNkbFxRGs-X197kyay>f z!xa(T3%@zFtn&AciBlMx1kP>}`N_+l6v3U0zEu>xAHpE=2p7zRnduVTRYRhb zd_^Q^)5vTu(BqOZ^Xm@*dG3fa+f_g zYjl0+PU`Afq@4hTi7!+OIL}mT=KL^|N1EC1y(b&Ym52zJh8QQs+QqPPx`9T=TLe^PJc_AH@eSu z+q-w&WPMv(o$7HdMTbU&m(b5E$K}4l@$!y_=@*rW{d|)3)Y&h7{d=nNNzyYL{u@NU zv^4JTo4336cJWiPTh>P5L=kN#p{Nvaf9^D+iY{1t_3hg%Nzy;5@bFs*0-b8d(+kNs8p#A3b30a%D8J0E>&clI|a9if9+YuNN^yK7ZWyKm% zi_{pK(~>4{UH$sqNjB1Q&$1KPaI2Tnw$kwWK0o(P-CoF>@3`H)T{%DYy1Po&@^|-i zTOgO6diLQq^WIgvm*V4edVdwC%}Y2;97TlXy6-whFef|tTzkH~z1{uT zDterUI?|+LkM~>J<@{BtN`UL?D|P>~Y&9R?DG{mfH5?`(ji?*_ zn|^OOWI2{#l2HAEH#$w&+iT5{=$iob2>B4sf+)kr_q@9ji;#TGWHRHPG(M)IJQU@sIyc9hZvcMs3dz!e!wC>0}Jy8 zbNA(VU;jr7+1(<#KTZa3Jns_9|2^P3q(MGGp3cbK6Q!PhXJD3IXE^{uTEGg6DWhKB zO|nSP>Z@zj;Tv!is7+`6dIExenhM=%k8?u8XJ_&k6z8u)IH@Gp*c$Dea7FrJNIxI! zkw84y$I^lK?8Dz(>hQa)J=dqN{%^kFJ$?CQ0m(0`<*cN3#sS{Bi> zy}HYFo$%9W2??x^X)m{sIk*E%h{8MuOI~K=d4<*^1~~&H@*cP6B9h)YyplCJFlrOt z%`x$d7Eh5tXXWlWE)?zjEK+dAY+W#)&2RAQ&ze+FI*EQzI4Fe=yhBN$PXOWiVcwT| z=J|%OA~g0ze5Wnzoo9(R+zZz_$+DNZwwkQx3N=*%f$w-Iz(=$=ZWkz{)Ji3hGT+Sh z`P@y!LU7M!4ke${4TTz>t@UFq5T=npHv;|>cPTwcE0S^%Q|8$uI!Cl5?)}L4{zxi^ zB!&?%V7iWY%m6vINHz#gvzoGpWK!kXTWcdGtcBwN(XV5cu2N0oAj6Rc<4b=qU~Mdy z8f|D}8XbGfMKi;8|Dga^TbtVa>drN?AkS8|Oh`V6R*-lZ4CWkf2hOrKJ+J;z$ft$R zH6eoxOt;h)I-F`7Iofcyz&B`d7)_4azzIg+-JzP5y{wS;x?NxGRWe^vD^+hD&KNdr zysV%z8O`!C8PTBNItefo8nC#C+gl^|cyq>5#Zr8O6mEi$G=i-9Hpr~MI4>jb!`C=& zwsblUs7Q(-g{4~HV&K0P*Qf?V!Yk9m;MbNr1E5IZhhVZi=H!{FC{qlr}3C< zJk5HHxd<>SaolCAjzL-$8@SIMMZKC{y{2Zjc+oDVqiY!anL;ujjeVOx<&>RTE}0K| zStg)*AZ>+oWD+h9pL-1`@6@~CmQf4XfH+AAOSb2Y3!^!pa-qpWoHhj^(av84Qlh;K z#`<`W$O1gYtpLZvbzV6%bUJbU%1f`yIj=k6=r*|{Y^8Z8AUPyLEX&aC%+y;Lr3>3y;$Pwmh7$cpdDj*CjVXxb6gxgn zhpN?M(h_=|%p>ZWdOXUFe+C-{B{WkXE@66^q=WnS$`jE%CaSgRMD96g3 zyR9b+{zmUDY}>EB(`x5iuTl95Va~>;L_2dvC=7gbvnqG^U6Mf_Tw}jKn=Z#>Sj;yy z9S-hd3{qn{tO56WAAC>AcF@!>&}FHT6-3i{Dq2Av65%a1gB?A{OX< zT0K1itca%Av2w{X*J<;Cd4s8-ro}H0RJPgWkj!%iQlM(#;Dn)F;1FF1j>!9i#si~s z1Qv%8*OcsB1$p?mj4Y{Sg$X2AD;VkKj50r*24bn1JsxWvLc00FW$TVoRSGSTRfyKh zEL}CWxtu3qFid9|TOr94=f^K&8;@}RLJ48405cew_y+SP)ZPLCKE;a5W( zLKr7bYefb$%ct%dA(WR-syO$6=2{sIht|#Q47Z81FiSv6)%qtvlO&UPX)mbAQu@AUH)T5_O9Dz9@h+LYFLMECl zOh<#Q)d8+a@DpO8(O#-D2;?3=OspQ`FqM)TI>5Ag4htK^@?5R;=_ItL;@dy`BL9dl z9ccSyh*LnViD?^g&J1D9ZXETho%lKDze717PPwW>m*#5dy^sJ?pFcQV>Vb@ zyeCe$I_tlp41ttAUuKSgQQ`(uMA?%|ooA0fD;FPLhytxhxS;DK>{x(m9xo+JHqHf= zwJbt{cBk%78hmeFrFM1j)FVrmuOov$8=iHpjvw2uU(YJ8mK%C`0N7$>$&;c7qICqO z5-u`)X~086O179-*Gp7SsUa(%N4CB=%=W=iqNm-{I)@j|C>iKX%PMbFo|ftcYKKQg zc&DP-QhzTh|4;^H)N6Q^=8uvxBZ0bw5PHtKVXL8u-adx#F(fMdh0vC?4yS*R*edGta3EV5HgDNSkU{ z(R9jSjg+#26_*L)o`N~%5>ia>4jFU({L`A^DZ%R{3p*Kb>S16vh-SwkFc!ndmycOSv?kM&Jd zSAgMlMY607-^)JGO0$WhFP7k?$mcXshmLESx_X{)(G8GoiITD9hK2s_+Xz+rQ?pMC zkX?ycxmWkbPj@4~JT@36m#eguv$<|(QPn?+%}^;?9BSHi<<3VaJl>h@ZRJ_)Tz${< zpoP5yTLx5G(8(p2v)!`{r{KlAWy9VNKL^4xHJyX0B1`?OpiT)#%_YsfE}9EGb5g)J zMcP4Cv0W?*?L<9#Pm}fo-0d}Y*9Uc%eOHg(TjhJ|-86UCkH(~j$_H<}-*dBk5KN5u zUn&XZp9jPFIQU?xe-io3KeO7|%G-~jf?Y%JkbN-BJANMc&pXd~2S0q~*+f-g49j|X z6rRjGgIotnBR5v-(F3qnIiiFnvOSU?d-Czw%@4ajx8kp6fb>17?g~vk23Tw|C_?lF zA;JP7){|-Xr#(=n_Al^%QUHdX&BIb40DzT${;R?J-)`L;4FBB&W9DRNYx-XtphZq8w5TwOMz@SQ>rK#7SaOrVm_CQov~)Xm1*ne^Q}v6kv;{8Dhq|O!S{~y zEca?XW@t)|`tOSEP~7_~SZ7ak))g8;+~QagT1nc2X@|m_HQ;b2C2{pQN>Xy`9YlOV z%Lix4(#3LK?t2E_{Ch6kjl^ojG}F+}a%r*WJjXLn`_U2|w!=M7wgV$U29`(&H9F%l zO$|_=^9XAbPv~Eq+>MYDO(5|=|I;VKQeqQc6aEC7hVGU?& z(xC`#FuA<3-#;THL^U#+wbkfz&T<5l;)o4CX3!J*gqTdW?J-^tDek8tnuetIrySHF zbL29Eikt!c@CVv&pY4KE=~40xh;b58hie$wWc2-Iw+tl;^!XisA{v}0X5yWt`wPpZ zq>W$#3r^(`AAFdXIim(j0YO3$d zFSc2U0z{aMi5AVVfH%TY8+|Uj`|plHu`e?oEQX)A-N_2MO2N+wDFtd-u!L4|Z4|-?ol4cbs+PNqY)1lmjWn97kwk5%IOf4gJt87bXL zH^e@`#eC3&ZwSu2f*0?i_e}2s{=}Pb?xA-`>;i6op>wys1;TzMSq^+U-4UUE-1YB0 zk=J%e@y#@WcpYV1R6Rhz2OhS#im61~|F-7%D3gyB`}*mCY%WSZKsnZ3UQ*RQoDS&! z=NDeo!y3BrPfHhMH~_%EI=uc*B=^62vvjSUi#X7Ja`g)cRhcDKv60-(D%-eU(Hfra zlkqp!dw8EJq`@{Uu!6DccXD?=?z~9>{Sf(q;5IFlcGkgms;F~{s-guJU*KQlYTmw% zXuZx`GS455WSbO)r6ia5dTK1SdeqU;YnP*?m!Im7mI6BAT3K&eYY0Z5f*!nOvu4aL zuWK&7glpc4H3!Cf7j4#FBCWtmm3TY;7N`i>GI7y+ms1QLivgw9gsX zkYA<`L^=dCr3z#x$6SD{%>g_4jLyO!3NJgd_CK$!YV>@qN}Sn=4FAmKeu^y9v!-D@*F-Y6 zsS)un-&)G^Dt8X|$`M~){q-&47gYx(6$E6mx&BgUxowXrQz$~T#^Jd!mJfYW^cED7 z7^+JAi;fiym7CqDe3=-OPV9iUEPoL%9E|Y+@H4zblUE**#a01)`2n~rlIV!c-3SYk zxeRXvyy-|5^aY&-O1eY&P?|g~_1A=Da979lMxnxOaA}YXK|2N4_z0RKk+neF(M{BB zq89slCBjyp53#%xi#sPjgPdO0r*LE#y2bx_0?ryJE}p>=zLzgaD|w5=I1XcaB*mt@ zPN5nvZ-;7nOAT_%jbhcHuT4s07%wf~G872@-kGw8tzkn^piib*GVh57a(~!H1bSs0 zr8B(zuT?`1B6&NR2rfxt6%A+n2EH-59nQY*W`92!0&>91__KJ~T^xT%eM9j|4X9r0 zal(fSeF?0sgORo^LQ1>2s3S;+=&wvAGd~lWxA1vP^4vD%wx>bNuS`Q*bgQo6S6I|p zwb*hsMF0-J?DyOtq7Piol35^{q;xE|K}U$nlC5{eCekBX^;Xqdpo|bL46=%#qdA~x zPYdLi7qfl3`J9H|tQQOyN0#7ASCbUztZ2?~rB#Z12h}r(G4>oGaS43S7W(c{y1(f)kp2`W(U$%z<&4{L7-M;p7Jh0^TQY$hU|6G5J9@=YDU)(MraXX zGlMaLE4$#46TWQ@0p!<%RzU1|8yI(zOx}gv2WTujWj`@vnMIJKkS!f}>NTFOt3c=Q zDPS9f(^F$EsufqWTCU}rQ+m~kP8H6nVog`u1gfM6HheIlXr6XsO$WY*=97l|Y+M4K z@>p`;EG!~IsoMsJy!zLAhIn^1^6Ehxj!;VYM0yQdWjx8$*DttqbH>60 z&eiudQ}{+|8t9+*0v;_#nSJ?NthO1hOFx^I=dwNZS_gUOh{tv5T36PrH>g$ZgL1|7 zvOsIkDZAzkUiD%R5i#GxP)L+zciwwv)Dxg?6p?#lo6O`G>~7S)z-_Q!*tMZQgm_xB zz>YWe2+%Erq=#ak_6Q0Pe~BMqy{yT5r5PFQ%ZRX0Mn@lZrJRR;w8vB`71fc%LJ~NV zBUv~4wce$^Vs}IWQ^KYWaX0{X3aypu$Bstp6C$l?>sL=QJ#=M~<0h8TYe`X7L`L)8}|h?rI3<|(TYihIZcMJRXD6e3Aw!cfE!YL*e*k7HP zCnm|kk7z;JH6TZ|^Y>P%bcm0II^NGvv%W>HvssGj|BqWa_vze*~fyS zuTKJt;V#*1=S~KID-2GQ?TdfsR9@&-yK31`tCal+Gq7<_uhb0mStxf4-V3CFhGQD^ z_e@9yNJAHW>r4Wo{b4VG0>7YO7~E^b@C9ZaS>O6=V-RPmg~XSFNsBjGY$W_`aq7V4 zysD@YwVs1iY*{}fc^sr+04v8{qH-yJ>KpU3`a=H8J zK8~roTYzrH=lJ``y9x@h#Jg$=1qEN91@!B62?)ARfe+g2CHUX&D+chtQ66pMTk3uO zNOb4xoC82!3UZeLL|(F8 zI}Ioqx4Y9E*RD3a0u13oSR!;nZR$dcBFW;Jpq4{8&Dshc~XHd4_Xw3nJ(!a<9S2ZAUw%H0JDQDD%YoJZ!Y_&yut-(V0Lf9h8Fy18OIz1*JR+iZPx^f@^MlC zBY6A}{V*JFN&^@qmba7wW5_b2FoQUOD!`e!KW|DzQaC>Hzzi4<2YMQcH>U>-5y$hD z`7aRIlT)ZdteM9%;4lcvhZfgAptPe2c;Vb05Cl9=(0merrp}sq=ia(`(~bs?PbfM` z3NzG{OV03;P8!FHg)}26A;zkFu{qAl1ye}t*xuw>W{Oni;D&7WSX0XYpPds2q}Q`1A@?ZkJ4Hkg8N%(iU!a9zLm+zcfJ214REor zhamg^G4@W;nMP^XZj6d;I~7)J+qPA)Z9A#hwr$(CZQIG8>hACRNB7=6_8#LodXL_t zYu#(kdC$cgL+cd>7~=7f{!X{QA_1@ylXNZyP@OUXW5lquHd2Vq5+|aKObp4@$SaI` zUBkp|*B@;}3+^+dy+{PuuPh8)Ug0sMq7e&S)p;ooE#^{7B2n8NSK$^*lu6}|aqY1X zs2nToSc^F~;wmVTc!RBW*iF{y>zK8`;qb)PCFo2W%;J^sG6pGn3#!fl5LS)CaJzIgZ0-HMI-jDnUg1`t;f--4DX)ea@oxNYoZQ@ie**V58&(mbb0 zq^l8(Km<_U!;SbP`{|xv_t7QQsq&g;6HN~%3doZaZs7ih-k#JW+MazoLo+?olK-N6 zD68MTk9t%(@j%ELGW1cdKc3hrnM1pIt1-!_cQZcCU5%!(w*BPZEo1TYG6~CF?QsL& zMkJI&KU_jAe$89qTvlZ8O&_XaU~&2T8v`ISj@z#btEl-B)-a%Lpa0sqT+X=}09*O~ zRxJK}Xl7*~s|e}|$*04E{n#u1VezZqX#!^|MFbPDsq{QpBv{$Ui?ieX01r?0CD$W| z@V8n>)+0i{)U*-*1#nd}1c>K&YNz?+3YmG>LfqGXthzjs@nsZ$yMCkG000>OaUl}; z*UHL29Y2jPnKjYBj-UQwf)gJhGl=>F`A8U;+W`oq-@Wp}i6Yx$!1!WK9RrfQRn^y9 z2aC>m&0YWqf7MTv2HmM~_q!C9t2NHGA)bs!_K#>4lYP&xTR%-t7kArD0&OA)FOFl7 z9@8&HXYAK+%WtYrk#3}xQPOX_{0zaG_+XzL!niJlhvS;T3+ukhKL(pDm@n4I@3khP z<8kpuCKBvqc16iWLM#suhBb&-&u#7YcNmc{W5h&v*IfLq>})dh<;c~J7P<+-%I1^K zn|oGjmG6A3(Zh$^#y+GWtLsWYbfR6x}D`%$mgventsI@!+fe zNrc1V!r2Q{JK!I2x3;^j(ipJrhL3EdI7<9ls=(*9Y=&a<<-#Y$ zzDVnmdVhO}#3b+Y#e6tD81qjO`MTZDY&y#zhHRO~Zuh=ou4#dsIQpS0n9;ek>?rH2t7n4CX!YaADVlLx+W0B~*Von>JFzvhk*Pk8WDV-w{h z^Zo8(q~T(L6cSoAK7ilH$|%mt1)S1of)wTojNmC};}t45)UR5Sg1atV5o;96;uZ(2 zC5D%yy33$RoCQ)Huh`r2J4Bnr8a;ydi-uS<7j~VoX4z-k4>AS#_%QDG9xa`D+V~}T zmx03~{M-%e{uB2rLDdGs1SZm-1XD7-dkk#Tz+>^I#NXJO)&iS3Vzu5U0KV$o~u+jYe0 zb4T(4D+l1)gEdS%=%lWjHeFSw3V{oZ9p5xKBAw&_JN%EI6AP*tIv@w>@54GmGuJ7> zq>2oB<#SCv@&N-;aT&~k(iU_+Op<+liTSvf(6zjR4#hi-hgsZ_+L!W z!2IzCf(e?dn5rFm@@NNgNm_H~=bb1OyIMoWUcoz~xA=7*xhcM`qkz$CbRQ%r+ERqM zhx8DPdv{Tvj|G_&Zp7LGWCo=sXp7KSMe7JA_3L4GgNf=>TN;2Wk$vBM^7BYpxy+-E7>4}?e{ z@u?6?*2Nz>u#>l$iduOUXiYO8lTSrDxr(UA4_rEz0CeSOd}&-z0S)|_A%2Y90^#b_ zSPub*BvPd0jx-#EvMVt4AaToZN6u#_QqA?Y|H%^w9YU9>`wpAjqbWV!Uv*jUdvE0qx=A zgQSY?yCJlq`UZp9u8hOSs#i+V&7d-k^)5|xLEv3ccZ=*&YsGnii<-J#jE}ts}77^9-KA#&R7}!io5mG8}i+a5eS(;_bR~vb? zdZ0WWM|X-q23bo?#v$EI$3U85{+%H7+!QgER(2?4T7UE1;f`1O_xn?8s>-dww%2Ax zmR5Rf8eCEm*%F=v*C>5OAE$F^!Zx$FGzQLbHLoNxsE&h=5G?1F+MoeDuB;W9i{T$z zn{aAtxOU8RTv9!3hVm8cV|UpO(G7vFl;(qk!|9?$Ek9T82;v|4%OrZ3ectPU(<$!( z$bqA^j*lfhhc8AWsJ%UEnC_NXiIQMuBYIN5W$YALm-caRw*ide^^8Gb;LB>00dXt4 zb(M};|Kw3_2&t0Hoe8AQ^iZYcrQrDPa z1)A`V$sz$%Hiz+2j{}fHs+94@Tvh!z8(29|`XX8;{hWzg^Xy?e9Y=~vz!&4wmrZmZ z!mha{6H%;ydJKk1sI-BVCJWD{Kr>|454{Ahpe$FRR)(h40}AG+lWti-2Nl`iy7@1Neb50T5;<_i)a$x zY)*LLe%`Igu_zJnJK~CC0Iy7Sc1%Tnc%b&>X+2ky=f+*4q>{15Q&*TsRzg`)vQwF# zb$U$mbnDSBkH{o`KJU0Rt!I**T5!S!Lh{+djB@l$L_cc0Hj%-i+D@4it=04b@zeo$RH+Mjzv@@ki0NskB_0uk8gLc2Ql` zu0P->eRH^7R5;0krb14p1A1EwwtX5I?jU25btcrPq)bGcQPtU_nHszYKQU4#1>5v8 z-mS&?&mUdtHL94$bal*}5VzBHX5FB9SEuck`nPkA))>`ja#TGgqRD|+Q5Z}*Xyjo&@?OFi-_3;u2vRJiluf3?8{UW_6Asi`tyJT+Tdw_e>Wvv zx%R>_Ox<1E_Ct2|{LOp6er!w-cLvaRvju|GT()+Fik9sH(#ZL|#BI5%=;2uQDirF} zL7rA6D59QpP?z|}obbqht{q-=d$DkXnB?@W{aU2R&_U9={6b;SUUoLLN1qdPpB=- zomop5ng76R(03ez_zCIILKiMBSV5Tjo${S@9DwU}uL0wGNyjWra| zUkn%86}KHC3!*p)+Q9VIaKpU9>}0C6yD$YlJV>lEgBe#`9uGRm>k`5G33X(v+~{R{ z`DJ1-1{LG&$-$9W8%Y+m2S78eZX6V0$Jz{(q&Ed9Gw zo3QB!Jt09ZwtC6|N-~+D{FckY!-~LGpoCv8x}2%=s`Pgmfm(kQu<8bYTVaD$T~>?y zvBl=7Iju_g7}$ZLZWhMtUTIb3%S72dFnG6773X4mFYDK+!Oh^_ns(P#8&wxE+tcVC ze%vptC9lAow#-L@pq-i>YkI~dyexzFXY9S9BXl0_p=vxP^TRrL9~NS5@CDB_owfzPt84mlm0HxQjM z`3WF6Ja})@bAK~R#9?2A$QMI3&$f-tSG<4sJKW?gWPgDH0Jwb5_LToI-v8h3xc}FU zIt)vhHP&a2u3a@!OCdr?YKzs#LNaojJrHWY%fh#S_5K1}tMs~!#MAmOujmV6sV$e5 zJyI$4g@pZ@tS9G+m(%98%MVvqpe#4EBb%3(>b2S$R2or zhp;xWo5HwK6OjZYVqP~asq$isQrSHIRfhbC2m%$j9uQ8}m{(ht{-QfjnN9{U51zjn zxjWykZM$I6mbiYOGdtk~BP@VKcyNE1kCVnMp_UYuJi6CKxWTtIeJ`eKYsA3e?uu+4!AT(zV{DTr?l#ZV@Hmh30L;xul9ml*UNG4~uRIg=a?Xoog4Aqbpzs#6t z*zj4z%>sWbVS61k$(+!78;V)%9Dd+3^y+%dH0`mVGoa`&(5Mg#g~>A&~QE$xBOQ0cp4iqPblTH4ChQ9lx-!p{TiC2Z&qW+tK5X(#Qu!aTZX5>VxLMUGq z^YShQ2>Y(os>({wj~uB}00}}kPrV++jb@Lw5%X?!siUS3MQG@}b&BA0j!R4D_TJ5x zBe4g(lzqiXDTVNCs3@3X>=i*yV!H*V~fDe%Qsl&cQc=S;>M|jRF1t9{{nMUS4tM!AsAa|#$3)*n6 z{JD)WP2sTy7h|HabPNQSEzW@plbw66+Eo=y-H7Xe3ZvK9x4FemKKYQJz;4l>Qe&`) zapRngsiJh$W*tCW#F(i7hBO4oD|i`K&Z;&{S3dfz7{JO}&B&euD5Y z!Jt$iK*fbZ6yMWuX?A)_C(`06psg!YhQqUyzGN2}`ARoiLD7`AIo1;L8%3$gcHHjH zFOK{I{Hat@|Glmd5Qv=PSnaBM8V9BKkd9Af@4~mdkYm`aVm$E_^27c}kNfN>0p(}j z`j>a+jx+=E2-4hnua*}9jNT|+EkcNNe@74dutOdmr!%c!FIa@Qxm;ZlH+6W1CG{*6 zsRI?_>S+EnBXircAYD2XwT(S0?J5Y$akl@YSk`JU@dntw#U8oRRrGPOOu<0+;W^hY zo1^^*C>@Eg7_>Qi_UTVxDa)PnecU3gg2bLNg4qd=Dy1A9NT1aw2xc@{E5Y>=nm#y& zEc2$}q=IA`;CZ9KCv1aB<^qMhJBH`VRO=WXsiC}~dExvP2-f=pxu*!&7+R#Va3Lea zG}={>4ecuT8rFykNqx_p2K0)J#*GXwXX07cdePJGB4%k)H#jbHNv!%9^-)BrtxsYCIJ|0?WL_RJKe7?0sseG z)oP&g9M$*V`iI!zv(OAgQZvO7O&S_s|IvS9Qyqrm|J^{k1`hy0_Fqq)|7WmVMZdjssGxaYf8WEdAnKL3kNx9%3y4B!1<@dyD8h_tstL?tU!E ziCZ0gpOMC$VbGwH@zl0+H*>5ZG&<}2Vf9UxmH2t_m- zAhy+YjDU}1P;0QILxt*a6IEz-9^CZVFL{tdJEv%mnU?JExLU;t=jK7LYXF-W48#FW zEHMbU6PiK4Lq$XS*^5+}yh9J2be%GxmM%Q~dzQ%UdiwR+3vU*Ld*?ULuW8Nz<+JCH znHxPMt4sdhIQ6jUffOvz<=(hozmV>H9OnA3`(1W^?ST+Jp~CldrLG?!g^)^`TKT`@+GzGIoUSry5Mlx5$`SJ z#HSxrVzAnHNOi$ex0ff5&TfVdVU`$q2(TCE&h83Ki&+FA4T}ciFS)v0P)vn85(c(2 z8Bi{XiXWEL3YRL0L!728JsT~!uOrQHy79w&*S8EZZTFDY8>-yK-8Py>{2b0YClQ|h zW7==gSRCmSMtrFAmN%%8!=>1ZQcFo^Hn?>u0PnN3Ue$9EcruVKN8D#&h8M>BwR8F> zPW+{*V}aHUT?$jPWcIa*YisJIepDn@Il3m<*=ykVN>e%@NcA^!{IE3f$*&9w^iqeM zmR!p%X<;s=W+Qi5Z5y=A&7kS7fNCC}%@b>rqNao5JVr{N;h<1gnL6AwgH{QB5({p_ zu-x`_>up|c4Utn3IX;{OZ4HD9ielCPJ4GI}J&%poRZ@g*b;8YvF1fy*s{!!Ry`xgt~|GB&_u z8!+}wL~+)phfAi1_3@WSa=xOc<-{53#pYmUJ6ZG#2lC9;Y?bixZ&jWwVRyYZ@OW8w z?1w44F%{*R{fubCcjB+u+*`HUD8@&lojl;FHYu*nrcmP|9u<7=DfL}ZERKnjL2P18 zHGOKB4y&OYq!`80EPW?kLIYpld&~P_-Xd|b4$3X6p+Wb>gW4c&gw>GYg@%$0*tjr1#Ot8 zGEKw20co3QWB>RmMe9}#t#||(*k-$x*YgQ6࿏WKz>O+ds^30w4y=mEYZPu(W+ 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 MIUKfZL3{>z-vVX+2jyfdY~O;`_8#<;!kmU= zUl9`-9sto~!iZ$cKPpsBZP=?r7~e)%+HWpix(mU_?`NG(8O|=P(I==L)qw}nC_cg~ zgAGky)Iwz)Xir%pd-D+GU6Ed0{@xJdC&F$Hdi(T8!i;~1B|nm3JyF6?r$B!YB+hJ@ z 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 =0SoAoU>=Su`*fogGy=c#99g7kV)TzhmG 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 diff --git a/lib/parsii-1.2-sources.jar b/lib/parsii-1.2-sources.jar deleted file mode 100644 index c23d356b512757b1eef56df87feb41d8b0ba7a6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34155 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 JQL5hJ{{g`A6jcBK diff --git a/lib/parsii-1.2.jar b/lib/parsii-1.2.1.jar similarity index 53% rename from lib/parsii-1.2.jar rename to lib/parsii-1.2.1.jar index cdf63f92a4e9b862252b63c89ad3948fa532c34c..f41d6492493dc3dac2dfe6e27e9c06e4abdff98f 100644 GIT binary patch delta 19625 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 Date: Wed, 18 Nov 2020 18:47:24 -0700 Subject: [PATCH 20/57] Import FastMath in tests --- src/test/java/DistributionTest.java | 1 + src/test/java/LookupGenerator.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/test/java/DistributionTest.java b/src/test/java/DistributionTest.java index da3a348d8..22b646a7a 100644 --- a/src/test/java/DistributionTest.java +++ b/src/test/java/DistributionTest.java @@ -1,3 +1,4 @@ +import org.apache.commons.math3.util.FastMath; import org.junit.jupiter.api.Test; import org.polydev.gaea.math.FastNoiseLite; diff --git a/src/test/java/LookupGenerator.java b/src/test/java/LookupGenerator.java index db245f544..cf8f496dd 100644 --- a/src/test/java/LookupGenerator.java +++ b/src/test/java/LookupGenerator.java @@ -1,3 +1,4 @@ +import org.apache.commons.math3.util.FastMath; import org.junit.jupiter.api.Test; import org.polydev.gaea.math.FastNoiseLite; From 700d1d0a6cf284fc4d97d02dcc6cfb8e68dabc2e Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 19 Nov 2020 15:09:12 -0700 Subject: [PATCH 21/57] Fix bizarre elevation equation issues --- .../terra/generation/ElevationEquation.java | 32 ----------------- .../generation/ElevationInterpolator.java | 3 +- .../terra/generation/TerraChunkGenerator.java | 1 - .../generation/config/WorldGenerator.java | 36 +++++++++++-------- .../dfsek/terra/structure/spawn/AirSpawn.java | 4 +-- .../terra/structure/spawn/LandSpawn.java | 4 +-- .../terra/structure/spawn/OceanSpawn.java | 4 +-- 7 files changed, 26 insertions(+), 58 deletions(-) delete mode 100644 src/main/java/com/dfsek/terra/generation/ElevationEquation.java diff --git a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java b/src/main/java/com/dfsek/terra/generation/ElevationEquation.java deleted file mode 100644 index 0b97cb34e..000000000 --- a/src/main/java/com/dfsek/terra/generation/ElevationEquation.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.dfsek.terra.generation; - -import parsii.eval.Expression; -import parsii.eval.Parser; -import parsii.eval.Scope; -import parsii.eval.Variable; -import parsii.tokenizer.ParseException; - -public class ElevationEquation { - private final Expression delegate; - - private final Variable xVar; - private final Variable zVar; - - public ElevationEquation(String elevateEquation, Scope vScope, Parser p) { - Scope s = new Scope().withParent(vScope); - xVar = s.create("x"); - zVar = s.create("z"); - - try { - this.delegate = p.parse(elevateEquation, s); - } catch(ParseException e) { - throw new IllegalArgumentException(); - } - } - - public synchronized double getNoise(double x, double z) { - xVar.setValue(x); - zVar.setValue(z); - return delegate.evaluate(); - } -} diff --git a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java index a153fe91e..4ff119fc1 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java @@ -70,8 +70,7 @@ public class ElevationInterpolator { } private double elevate(WorldGenerator g, int x, int z) { - if(g.getElevationEquation() != null) return g.getElevationEquation().getNoise(x, z); - return 0; + return g.getElevation(x, z); } public double getElevation(int x, int z) { diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 10040913f..86a9d6746 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -147,7 +147,6 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { ChunkData chunk = createChunkData(world); TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return chunk; - ConfigPack config = tw.getConfig(); int xOrig = (chunkX << 4); int zOrig = (chunkZ << 4); org.polydev.gaea.biome.BiomeGrid grid = getBiomeGrid(world); diff --git a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java index bd2624ba6..30bc4de2e 100644 --- a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java @@ -1,8 +1,6 @@ package com.dfsek.terra.generation.config; -import com.dfsek.terra.Debug; import com.dfsek.terra.config.genconfig.noise.NoiseConfig; -import com.dfsek.terra.generation.ElevationEquation; import com.dfsek.terra.math.NoiseFunction2; import com.dfsek.terra.math.NoiseFunction3; import org.bukkit.World; @@ -20,8 +18,6 @@ import parsii.tokenizer.ParseException; import java.util.Map; public class WorldGenerator extends Generator { - private final ElevationEquation elevationEquation; - @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) private final Palette[] palettes; @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) @@ -29,14 +25,18 @@ public class WorldGenerator extends Generator { private final boolean preventSmooth; private final Expression noiseExp; + private final Expression elevationExp; private final Variable xVar; private final Variable yVar; private final Variable zVar; + private final Variable elevationXVar; + private final Variable elevationZVar; private boolean elevationInterpolation = true; @SuppressWarnings({"rawtypes", "unchecked"}) public WorldGenerator(long seed, String equation, String elevateEquation, Scope vScope, Map noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) { Parser p = new Parser(); + Parser ep = new Parser(); Scope s = new Scope().withParent(vScope); xVar = s.create("x"); @@ -51,28 +51,36 @@ public class WorldGenerator extends Generator { for(Map.Entry e : noiseBuilders.entrySet()) { switch(e.getValue().getDimensions()) { case 2: - NoiseFunction2 function2 = new NoiseFunction2(seed, e.getValue().getBuilder()); - p.registerFunction(e.getKey(), function2); + p.registerFunction(e.getKey(), new NoiseFunction2(seed, e.getValue().getBuilder())); + ep.registerFunction(e.getKey(), new NoiseFunction2(seed, e.getValue().getBuilder())); break; case 3: - NoiseFunction3 function3 = new NoiseFunction3(seed, e.getValue().getBuilder()); - p.registerFunction(e.getKey(), function3); + p.registerFunction(e.getKey(), new NoiseFunction3(seed, e.getValue().getBuilder())); break; } } try { - this.noiseExp = p.parse(equation, s); + this.noiseExp = p.parse(equation, s).simplify(); if(elevateEquation != null) { - Debug.info("Using elevation equation"); - this.elevationEquation = new ElevationEquation(elevateEquation, vScope, p); - } else this.elevationEquation = null; + Scope es = new Scope().withParent(vScope); + this.elevationXVar = es.create("x"); + this.elevationZVar = es.create("z"); + this.elevationExp = ep.parse(elevateEquation, es).simplify(); + } else { + this.elevationExp = null; + this.elevationXVar = null; + this.elevationZVar = null; + } } catch(ParseException e) { throw new IllegalArgumentException(); } } - public ElevationEquation getElevationEquation() { - return elevationEquation; + public synchronized double getElevation(int x, int z) { + if(elevationExp == null) return 0; + elevationXVar.setValue(x); + elevationZVar.setValue(z); + return elevationExp.evaluate(); } @Override diff --git a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java index ad19fb0a8..028fc49c5 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java @@ -4,7 +4,6 @@ import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; -import com.dfsek.terra.generation.ElevationEquation; import com.dfsek.terra.generation.config.WorldGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -21,8 +20,7 @@ public class AirSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = wc.getBiome(b); if(y <= c.getOcean().getSeaLevel()) return false; - ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(); - int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); + int yf = (int) (y - ((WorldGenerator) b.getGenerator()).getElevation(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java index 1546e06f6..50f210215 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/LandSpawn.java @@ -2,7 +2,6 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.generation.ElevationEquation; import com.dfsek.terra.generation.config.WorldGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -16,8 +15,7 @@ public class LandSpawn extends Requirement { public boolean matches(int x, int y, int z) { TerraWorld tw = TerraWorld.getWorld(getWorld()); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); - ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(); - int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); + int yf = (int) (y - ((WorldGenerator) b.getGenerator()).getElevation(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) > 0; } } diff --git a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java index e72102d04..1ba455595 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java @@ -3,7 +3,6 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; -import com.dfsek.terra.generation.ElevationEquation; import com.dfsek.terra.generation.config.WorldGenerator; import org.bukkit.World; import org.polydev.gaea.generation.GenerationPhase; @@ -19,8 +18,7 @@ public class OceanSpawn extends Requirement { UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); BiomeConfig c = tw.getConfig().getBiome(b); if(y > c.getOcean().getSeaLevel()) return false; - ElevationEquation elevationEquation = ((WorldGenerator) b.getGenerator()).getElevationEquation(); - int yf = y - ((elevationEquation == null) ? 0 : (int) elevationEquation.getNoise(x, z)); + int yf = (int) (y - ((WorldGenerator) b.getGenerator()).getElevation(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; } } From ff7423022b29aa86a079ffbb7bbf06ca909da5f3 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 19 Nov 2020 15:25:36 -0700 Subject: [PATCH 22/57] Bump version to 1.4.1 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9b1740852..1492d2701 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ java { targetCompatibility = JavaVersion.VERSION_1_8 } -val versionObj = Version("1", "4", "0", true) +val versionObj = Version("1", "4", "1", true) version = versionObj From 094b421f9769aee5e254420b50b38c5adf9e2a17 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Thu, 19 Nov 2020 17:23:08 -0600 Subject: [PATCH 23/57] Use Faster XoRoShiRo128PlusRandom XoRoShiRo128PlusRandom is a Faster Random Class that is many times faster than standard Java Random. It also features better random distribution and the ability to be split and retain the exact same noise output like Splitable random. http://dsiutils.di.unimi.it/docs/it/unimi/dsi/util/XoRoShiRo128PlusRandom.html --- build.gradle.kts | 3 +++ src/main/java/com/dfsek/terra/EventListener.java | 5 +++-- .../java/com/dfsek/terra/async/AsyncStructureFinder.java | 3 ++- src/main/java/com/dfsek/terra/carving/Cavern.java | 5 +++-- src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java | 5 +++-- src/main/java/com/dfsek/terra/command/OreCommand.java | 3 ++- .../java/com/dfsek/terra/config/genconfig/FloraConfig.java | 3 ++- .../java/com/dfsek/terra/config/genconfig/PaletteConfig.java | 3 ++- .../dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java | 5 +++-- .../terra/config/genconfig/biome/BiomePaletteConfig.java | 3 ++- .../dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java | 3 ++- .../java/com/dfsek/terra/population/StructurePopulator.java | 3 ++- src/main/java/com/dfsek/terra/procgen/GridSpawn.java | 3 ++- .../com/dfsek/terra/structure/features/EntityFeature.java | 3 ++- src/main/java/com/dfsek/terra/util/DataUtil.java | 3 ++- 15 files changed, 35 insertions(+), 18 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9b1740852..0f8a1ac85 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -55,6 +55,8 @@ dependencies { compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") implementation("io.papermc:paperlib:1.0.5") + implementation("it.unimi.dsi:dsiutils:2.6.14") + // JUnit. testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") @@ -105,6 +107,7 @@ tasks.named("shadowJar") { relocate("org.bstats.bukkit", "com.dfsek.terra.lib.bstats") relocate("parsii", "com.dfsek.terra.lib.parsii") relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") + relocate("it.unimi.dsi", "com.dfsek.terra.lib.unimi") } tasks.build { diff --git a/src/main/java/com/dfsek/terra/EventListener.java b/src/main/java/com/dfsek/terra/EventListener.java index cc5773687..a26f350b8 100644 --- a/src/main/java/com/dfsek/terra/EventListener.java +++ b/src/main/java/com/dfsek/terra/EventListener.java @@ -23,6 +23,7 @@ import org.bukkit.event.world.StructureGrowEvent; import org.polydev.gaea.GaeaPlugin; import org.polydev.gaea.tree.Tree; import org.polydev.gaea.tree.TreeType; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import java.util.Random; @@ -82,9 +83,9 @@ public class EventListener implements Listener { Tree tree = registry.get(TreeType.fromBukkit(e.getSpecies()).toString()); Debug.info("Overriding tree type: " + e.getSpecies()); if(tree instanceof TreeConfig) { - if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new Random())) { + if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new XoRoShiRo128PlusRandom())) { block.setBlockData(data); } - } else if(!tree.plant(e.getLocation(), new Random(), Terra.getInstance())) block.setBlockData(data); + } else if(!tree.plant(e.getLocation(), new XoRoShiRo128PlusRandom(), Terra.getInstance())) block.setBlockData(data); } } diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java index c0f3c7bad..77dbbc7c1 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java @@ -6,6 +6,7 @@ import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.util.Vector; @@ -35,7 +36,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder { Location spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()).toLocation(world); if(!TerraWorld.getWorld(world).getConfig().getBiome((UserDefinedBiome) getGrid().getBiome(spawn)).getStructures().contains(target)) return false; - Random r2 = new Random(spawn.hashCode()); + Random r2 = new XoRoShiRo128PlusRandom(spawn.hashCode()); Structure struc = target.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = target.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/carving/Cavern.java b/src/main/java/com/dfsek/terra/carving/Cavern.java index 65a842202..f0bac8e2e 100644 --- a/src/main/java/com/dfsek/terra/carving/Cavern.java +++ b/src/main/java/com/dfsek/terra/carving/Cavern.java @@ -4,6 +4,7 @@ import com.dfsek.terra.procgen.GridSpawn; import com.dfsek.terra.procgen.voxel.DeformedSphere; import com.dfsek.terra.procgen.voxel.Tube; import com.dfsek.terra.procgen.voxel.VoxelGeometry; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.util.Vector; @@ -23,7 +24,7 @@ public class Cavern { public VoxelGeometry carveChunk(int chunkX, int chunkZ) { long seedC = MathUtil.getCarverChunkSeed(chunkX, chunkZ, seed); - Random chunk = new Random(seedC); + Random chunk = new XoRoShiRo128PlusRandom(seedC); Vector org = node.getNodeLocation((chunkX << 4) + 8, (chunkZ << 4) + 8).clone().setY(chunk.nextInt(128)); VoxelGeometry carve = VoxelGeometry.getBlank(); @@ -33,7 +34,7 @@ public class Cavern { Bukkit.getLogger().info("Cavern: " + org.toString()); carve.merge(new DeformedSphere(org.clone(), chunk.nextInt(4) + 3, 0.75, smpl)); - Vector _00 = new Vector(org.getX() + 16, new Random(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); + Vector _00 = new Vector(org.getX() + 16, new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); carve.merge(new Tube(org, _00, 4)); return carve; diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index b9fcc35cb..f438a8a30 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -3,6 +3,7 @@ package com.dfsek.terra.carving; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; @@ -40,7 +41,7 @@ public class UserDefinedCarver extends Carver { @Override public Worm getWorm(long l, Vector vector) { - Random r = new Random(l + hash); + Random r = new XoRoShiRo128PlusRandom(l + hash); return new UserDefinedWorm(length.get(r) / 2, r, vector, radius.getMax(), topCut, bottomCut); } @@ -59,7 +60,7 @@ public class UserDefinedCarver extends Carver { @Override public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) { ConfigPack c = TerraWorld.getWorld(w).getConfig(); - return new Random(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); + return new XoRoShiRo128PlusRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); } private class UserDefinedWorm extends Worm { diff --git a/src/main/java/com/dfsek/terra/command/OreCommand.java b/src/main/java/com/dfsek/terra/command/OreCommand.java index fdc6db1f2..8bd6c9125 100644 --- a/src/main/java/com/dfsek/terra/command/OreCommand.java +++ b/src/main/java/com/dfsek/terra/command/OreCommand.java @@ -3,6 +3,7 @@ package com.dfsek.terra.command; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.genconfig.OreConfig; import com.dfsek.terra.config.lang.LangUtil; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.block.Block; @@ -36,7 +37,7 @@ public class OreCommand extends WorldCommand { return true; } Vector source = new Vector(FastMath.floorMod(bl.getX(), 16), bl.getY(), FastMath.floorMod(bl.getZ(), 16)); - ore.doVein(source, bl.getChunk(), new Random()); + ore.doVein(source, bl.getChunk(), new XoRoShiRo128PlusRandom()); } else { LangUtil.send("command.ore.main-menu", sender); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index dab183643..6edecb4ee 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -53,7 +54,7 @@ public class FloraConfig extends TerraConfig implements Flora { physics = getBoolean("physics", false); ceiling = getBoolean("ceiling", false); - Palette p = new RandomPalette<>(new Random(getInt("seed", 4))); + Palette p = new RandomPalette<>(new XoRoShiRo128PlusRandom(getInt("seed", 4))); floraPalette = PaletteConfig.getPalette(getMapList("layers"), p); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java index b6a3d2cb4..6e218359d 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.exception.ConfigException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; @@ -36,7 +37,7 @@ public class PaletteConfig extends TerraConfig { pNoise.setFractalOctaves(4); pNoise.setFrequency(getDouble("frequency", 0.02)); pal = new SimplexPalette<>(pNoise); - } else pal = new RandomPalette<>(new Random(getInt("seed", 2403))); + } else pal = new RandomPalette<>(new XoRoShiRo128PlusRandom(getInt("seed", 2403))); palette = getPalette(getMapList("layers"), pal); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java index 55d233fe7..01520333d 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -16,7 +17,7 @@ import org.polydev.gaea.world.palette.RandomPalette; import java.util.Random; public class BiomeOceanConfig extends TerraConfigSection { - private static final Palette oceanDefault = new RandomPalette(new Random(0)).add(Material.WATER.createBlockData(), 1); + private static final Palette oceanDefault = new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(Material.WATER.createBlockData(), 1); private final Palette ocean; private final int seaLevel; @@ -27,7 +28,7 @@ public class BiomeOceanConfig extends TerraConfigSection { if(oceanN != null) { if(oceanN.startsWith("BLOCK:")) { try { - ocean = new RandomPalette(new Random(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); + ocean = new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData \"" + oceanN + "\" is invalid! (Ocean Palette)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java index ff70cca9b..77afb8581 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; @@ -29,7 +30,7 @@ public class BiomePaletteConfig extends TerraConfigSection { try { if(((String) entry.getKey()).startsWith("BLOCK:")) { try { - paletteMap.put((Integer) entry.getValue(), new RandomPalette(new Random(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); + paletteMap.put((Integer) entry.getValue(), new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData " + entry.getKey() + " is invalid! (Palettes)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java index 2639f6cff..e0197f94a 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java @@ -5,6 +5,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -42,7 +43,7 @@ public class BiomeSlabConfig extends TerraConfigSection { if(((String) entry.getValue()).startsWith("BLOCK:")) { try { Debug.info("Adding slab palette with single material " + entry.getKey()); - paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new Random(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); + paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("Invalid BlockData in slab configuration: " + ex.getMessage(), getParent().getConfig().getID()); } diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index f3e14fa40..8a3b524fc 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -13,6 +13,7 @@ import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; import com.dfsek.terra.structure.features.Feature; import com.dfsek.terra.util.structure.RotationUtil; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -41,7 +42,7 @@ public class StructurePopulator extends BlockPopulator { for(StructureConfig conf : config.getAllStructures()) { Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world); if(!config.getBiome((UserDefinedBiome) grid.getBiome(spawn)).getStructures().contains(conf)) continue; - Random r2 = new Random(spawn.hashCode()); + Random r2 = new XoRoShiRo128PlusRandom(spawn.hashCode()); Structure struc = conf.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = conf.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java index 50d267139..696751fd0 100644 --- a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java +++ b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java @@ -1,5 +1,6 @@ package com.dfsek.terra.procgen; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.util.Vector; import org.polydev.gaea.math.MathUtil; @@ -53,7 +54,7 @@ public class GridSpawn { * @return Vector representing spawnpoint */ public Vector getChunkSpawn(int structureChunkX, int structureChunkZ, long seed) { - Random r = new Random(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); + Random r = new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); int offsetX = r.nextInt(width); int offsetZ = r.nextInt(width); int sx = structureChunkX * (width + 2 * separation) + offsetX; diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 2fd2162d7..da4fa10e6 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -4,6 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -55,7 +56,7 @@ public class EntityFeature implements Feature { @Override public void apply(Structure structure, Rotation r, Location l, Chunk chunk) { - Random random = new Random(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); + Random random = new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); for(Location attempt : getLocations(structure, r, l, random, amount.get(random))) { if(!isInChunk(chunk, attempt)) continue; // Don't attempt spawn if not in current chunk. attemptSpawn(attempt, l); diff --git a/src/main/java/com/dfsek/terra/util/DataUtil.java b/src/main/java/com/dfsek/terra/util/DataUtil.java index 546acbad3..c02dec1eb 100644 --- a/src/main/java/com/dfsek/terra/util/DataUtil.java +++ b/src/main/java/com/dfsek/terra/util/DataUtil.java @@ -1,5 +1,6 @@ package com.dfsek.terra.util; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.polydev.gaea.world.palette.Palette; @@ -12,5 +13,5 @@ public final class DataUtil { public static final BlockData SNOW = Material.SNOW.createBlockData(); public static final BlockData WATER = Material.WATER.createBlockData(); public static final BlockData AIR = Material.AIR.createBlockData(); - public static final Palette BLANK_PALETTE = new RandomPalette(new Random(2403)).add(AIR, 1); + public static final Palette BLANK_PALETTE = new RandomPalette(new XoRoShiRo128PlusRandom(2403)).add(AIR, 1); } From bb4ecee1f817ae18ef42764d8e4818401fd28bc5 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Thu, 19 Nov 2020 17:38:45 -0600 Subject: [PATCH 24/57] Use XoRoShiRo128PlusPlusRandom instead of XoRoShiRo128PlusRandom --- src/main/java/com/dfsek/terra/EventListener.java | 8 +++----- .../java/com/dfsek/terra/async/AsyncStructureFinder.java | 4 ++-- src/main/java/com/dfsek/terra/carving/Cavern.java | 6 +++--- .../java/com/dfsek/terra/carving/UserDefinedCarver.java | 6 +++--- src/main/java/com/dfsek/terra/command/OreCommand.java | 5 ++--- .../com/dfsek/terra/config/genconfig/FloraConfig.java | 5 ++--- .../com/dfsek/terra/config/genconfig/PaletteConfig.java | 5 ++--- .../terra/config/genconfig/biome/BiomeOceanConfig.java | 8 +++----- .../terra/config/genconfig/biome/BiomePaletteConfig.java | 5 ++--- .../terra/config/genconfig/biome/BiomeSlabConfig.java | 5 ++--- .../com/dfsek/terra/population/StructurePopulator.java | 4 ++-- src/main/java/com/dfsek/terra/procgen/GridSpawn.java | 4 ++-- .../com/dfsek/terra/structure/features/EntityFeature.java | 4 ++-- src/main/java/com/dfsek/terra/util/DataUtil.java | 6 ++---- 14 files changed, 32 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/dfsek/terra/EventListener.java b/src/main/java/com/dfsek/terra/EventListener.java index a26f350b8..9dcf6fa62 100644 --- a/src/main/java/com/dfsek/terra/EventListener.java +++ b/src/main/java/com/dfsek/terra/EventListener.java @@ -6,6 +6,7 @@ import com.dfsek.terra.config.genconfig.TreeConfig; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.registry.TreeRegistry; import com.dfsek.terra.util.StructureTypeEnum; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; @@ -23,9 +24,6 @@ import org.bukkit.event.world.StructureGrowEvent; import org.polydev.gaea.GaeaPlugin; import org.polydev.gaea.tree.Tree; import org.polydev.gaea.tree.TreeType; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; - -import java.util.Random; public class EventListener implements Listener { private final GaeaPlugin main; @@ -83,9 +81,9 @@ public class EventListener implements Listener { Tree tree = registry.get(TreeType.fromBukkit(e.getSpecies()).toString()); Debug.info("Overriding tree type: " + e.getSpecies()); if(tree instanceof TreeConfig) { - if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new XoRoShiRo128PlusRandom())) { + if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new XoRoShiRo128PlusPlusRandom())) { block.setBlockData(data); } - } else if(!tree.plant(e.getLocation(), new XoRoShiRo128PlusRandom(), Terra.getInstance())) block.setBlockData(data); + } else if(!tree.plant(e.getLocation(), new XoRoShiRo128PlusPlusRandom(), Terra.getInstance())) block.setBlockData(data); } } diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java index 77dbbc7c1..c3ed76555 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java @@ -6,7 +6,7 @@ import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.util.Vector; @@ -36,7 +36,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder { Location spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()).toLocation(world); if(!TerraWorld.getWorld(world).getConfig().getBiome((UserDefinedBiome) getGrid().getBiome(spawn)).getStructures().contains(target)) return false; - Random r2 = new XoRoShiRo128PlusRandom(spawn.hashCode()); + Random r2 = new XoRoShiRo128PlusPlusRandom(spawn.hashCode()); Structure struc = target.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = target.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/carving/Cavern.java b/src/main/java/com/dfsek/terra/carving/Cavern.java index f0bac8e2e..d963e95b9 100644 --- a/src/main/java/com/dfsek/terra/carving/Cavern.java +++ b/src/main/java/com/dfsek/terra/carving/Cavern.java @@ -4,7 +4,7 @@ import com.dfsek.terra.procgen.GridSpawn; import com.dfsek.terra.procgen.voxel.DeformedSphere; import com.dfsek.terra.procgen.voxel.Tube; import com.dfsek.terra.procgen.voxel.VoxelGeometry; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.util.Vector; @@ -24,7 +24,7 @@ public class Cavern { public VoxelGeometry carveChunk(int chunkX, int chunkZ) { long seedC = MathUtil.getCarverChunkSeed(chunkX, chunkZ, seed); - Random chunk = new XoRoShiRo128PlusRandom(seedC); + Random chunk = new XoRoShiRo128PlusPlusRandom(seedC); Vector org = node.getNodeLocation((chunkX << 4) + 8, (chunkZ << 4) + 8).clone().setY(chunk.nextInt(128)); VoxelGeometry carve = VoxelGeometry.getBlank(); @@ -34,7 +34,7 @@ public class Cavern { Bukkit.getLogger().info("Cavern: " + org.toString()); carve.merge(new DeformedSphere(org.clone(), chunk.nextInt(4) + 3, 0.75, smpl)); - Vector _00 = new Vector(org.getX() + 16, new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); + Vector _00 = new Vector(org.getX() + 16, new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); carve.merge(new Tube(org, _00, 4)); return carve; diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index f438a8a30..1df4c251c 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -3,7 +3,7 @@ package com.dfsek.terra.carving; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; @@ -41,7 +41,7 @@ public class UserDefinedCarver extends Carver { @Override public Worm getWorm(long l, Vector vector) { - Random r = new XoRoShiRo128PlusRandom(l + hash); + Random r = new XoRoShiRo128PlusPlusRandom(l + hash); return new UserDefinedWorm(length.get(r) / 2, r, vector, radius.getMax(), topCut, bottomCut); } @@ -60,7 +60,7 @@ public class UserDefinedCarver extends Carver { @Override public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) { ConfigPack c = TerraWorld.getWorld(w).getConfig(); - return new XoRoShiRo128PlusRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); + return new XoRoShiRo128PlusPlusRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); } private class UserDefinedWorm extends Worm { diff --git a/src/main/java/com/dfsek/terra/command/OreCommand.java b/src/main/java/com/dfsek/terra/command/OreCommand.java index 8bd6c9125..dfae3ec5b 100644 --- a/src/main/java/com/dfsek/terra/command/OreCommand.java +++ b/src/main/java/com/dfsek/terra/command/OreCommand.java @@ -3,7 +3,7 @@ package com.dfsek.terra.command; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.genconfig.OreConfig; import com.dfsek.terra.config.lang.LangUtil; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.block.Block; @@ -16,7 +16,6 @@ import org.polydev.gaea.command.WorldCommand; import java.util.Collections; import java.util.List; -import java.util.Random; public class OreCommand extends WorldCommand { public OreCommand(org.polydev.gaea.command.Command parent) { @@ -37,7 +36,7 @@ public class OreCommand extends WorldCommand { return true; } Vector source = new Vector(FastMath.floorMod(bl.getX(), 16), bl.getY(), FastMath.floorMod(bl.getZ(), 16)); - ore.doVein(source, bl.getChunk(), new XoRoShiRo128PlusRandom()); + ore.doVein(source, bl.getChunk(), new XoRoShiRo128PlusPlusRandom()); } else { LangUtil.send("command.ore.main-menu", sender); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index 6edecb4ee..338a22940 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -22,7 +22,6 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Random; import java.util.Set; public class FloraConfig extends TerraConfig implements Flora { @@ -54,7 +53,7 @@ public class FloraConfig extends TerraConfig implements Flora { physics = getBoolean("physics", false); ceiling = getBoolean("ceiling", false); - Palette p = new RandomPalette<>(new XoRoShiRo128PlusRandom(getInt("seed", 4))); + Palette p = new RandomPalette<>(new XoRoShiRo128PlusPlusRandom(getInt("seed", 4))); floraPalette = PaletteConfig.getPalette(getMapList("layers"), p); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java index 6e218359d..412d11bb9 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.exception.ConfigException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; @@ -18,7 +18,6 @@ import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.Random; public class PaletteConfig extends TerraConfig { private final Palette palette; @@ -37,7 +36,7 @@ public class PaletteConfig extends TerraConfig { pNoise.setFractalOctaves(4); pNoise.setFrequency(getDouble("frequency", 0.02)); pal = new SimplexPalette<>(pNoise); - } else pal = new RandomPalette<>(new XoRoShiRo128PlusRandom(getInt("seed", 2403))); + } else pal = new RandomPalette<>(new XoRoShiRo128PlusPlusRandom(getInt("seed", 2403))); palette = getPalette(getMapList("layers"), pal); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java index 01520333d..de316e4af 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -14,10 +14,8 @@ import org.polydev.gaea.math.ProbabilityCollection; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; -import java.util.Random; - public class BiomeOceanConfig extends TerraConfigSection { - private static final Palette oceanDefault = new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(Material.WATER.createBlockData(), 1); + private static final Palette oceanDefault = new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(Material.WATER.createBlockData(), 1); private final Palette ocean; private final int seaLevel; @@ -28,7 +26,7 @@ public class BiomeOceanConfig extends TerraConfigSection { if(oceanN != null) { if(oceanN.startsWith("BLOCK:")) { try { - ocean = new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); + ocean = new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData \"" + oceanN + "\" is invalid! (Ocean Palette)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java index 77afb8581..315bddd14 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; @@ -14,7 +14,6 @@ import org.polydev.gaea.world.palette.RandomPalette; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.TreeMap; public class BiomePaletteConfig extends TerraConfigSection { @@ -30,7 +29,7 @@ public class BiomePaletteConfig extends TerraConfigSection { try { if(((String) entry.getKey()).startsWith("BLOCK:")) { try { - paletteMap.put((Integer) entry.getValue(), new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); + paletteMap.put((Integer) entry.getValue(), new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData " + entry.getKey() + " is invalid! (Palettes)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java index e0197f94a..ca15aef79 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java @@ -5,7 +5,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -18,7 +18,6 @@ import org.polydev.gaea.world.palette.RandomPalette; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Random; public class BiomeSlabConfig extends TerraConfigSection { private final Map> slabs; @@ -43,7 +42,7 @@ public class BiomeSlabConfig extends TerraConfigSection { if(((String) entry.getValue()).startsWith("BLOCK:")) { try { Debug.info("Adding slab palette with single material " + entry.getKey()); - paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); + paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("Invalid BlockData in slab configuration: " + ex.getMessage(), getParent().getConfig().getID()); } diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index 8a3b524fc..7b1d7aefa 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -13,7 +13,7 @@ import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; import com.dfsek.terra.structure.features.Feature; import com.dfsek.terra.util.structure.RotationUtil; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -42,7 +42,7 @@ public class StructurePopulator extends BlockPopulator { for(StructureConfig conf : config.getAllStructures()) { Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world); if(!config.getBiome((UserDefinedBiome) grid.getBiome(spawn)).getStructures().contains(conf)) continue; - Random r2 = new XoRoShiRo128PlusRandom(spawn.hashCode()); + Random r2 = new XoRoShiRo128PlusPlusRandom(spawn.hashCode()); Structure struc = conf.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = conf.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java index 696751fd0..70e4a6f47 100644 --- a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java +++ b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java @@ -1,6 +1,6 @@ package com.dfsek.terra.procgen; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.util.Vector; import org.polydev.gaea.math.MathUtil; @@ -54,7 +54,7 @@ public class GridSpawn { * @return Vector representing spawnpoint */ public Vector getChunkSpawn(int structureChunkX, int structureChunkZ, long seed) { - Random r = new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); + Random r = new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); int offsetX = r.nextInt(width); int offsetZ = r.nextInt(width); int sx = structureChunkX * (width + 2 * separation) + offsetX; diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index da4fa10e6..65ce8f51a 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -4,7 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -56,7 +56,7 @@ public class EntityFeature implements Feature { @Override public void apply(Structure structure, Rotation r, Location l, Chunk chunk) { - Random random = new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); + Random random = new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); for(Location attempt : getLocations(structure, r, l, random, amount.get(random))) { if(!isInChunk(chunk, attempt)) continue; // Don't attempt spawn if not in current chunk. attemptSpawn(attempt, l); diff --git a/src/main/java/com/dfsek/terra/util/DataUtil.java b/src/main/java/com/dfsek/terra/util/DataUtil.java index c02dec1eb..b2091c6a1 100644 --- a/src/main/java/com/dfsek/terra/util/DataUtil.java +++ b/src/main/java/com/dfsek/terra/util/DataUtil.java @@ -1,17 +1,15 @@ package com.dfsek.terra.util; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; -import java.util.Random; - public final class DataUtil { public static final BlockData STONE = Material.STONE.createBlockData(); public static final BlockData SNOW = Material.SNOW.createBlockData(); public static final BlockData WATER = Material.WATER.createBlockData(); public static final BlockData AIR = Material.AIR.createBlockData(); - public static final Palette BLANK_PALETTE = new RandomPalette(new XoRoShiRo128PlusRandom(2403)).add(AIR, 1); + public static final Palette BLANK_PALETTE = new RandomPalette(new XoRoShiRo128PlusPlusRandom(2403)).add(AIR, 1); } From d125ee3d87ff64da5132d403e2bf2827971f168c Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Thu, 19 Nov 2020 19:09:48 -0600 Subject: [PATCH 25/57] Use Faster GlueList Uses GlueList a faster List implementation. Drop in replacement for ArrayList. https://github.com/ertugrulcetin/GlueList --- .../terra/population/FloraPopulator.java | 3 +- .../com/dfsek/terra/procgen/GridSpawn.java | 3 +- .../terra/procgen/voxel/VoxelGeometry.java | 3 +- .../structure/features/EntityFeature.java | 3 +- .../java/com/dfsek/terra/util/GlueList.java | 1050 +++++++++++++++++ src/test/java/LookupGenerator.java | 7 +- 6 files changed, 1062 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/util/GlueList.java diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index fedc69bc1..3fd495c26 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -9,6 +9,7 @@ import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeFloraConfig; import com.dfsek.terra.event.TreeGenerateEvent; +import com.dfsek.terra.util.GlueList; import org.apache.commons.math3.util.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; @@ -48,7 +49,7 @@ public class FloraPopulator extends GaeaBlockPopulator { } public static List getValidTreeSpawnsAt(Chunk chunk, int x, int z, Range check) { - List blocks = new ArrayList<>(); + List blocks = new GlueList<>(); for(int y : check) { if(chunk.getBlock(x, y, z).getType().isSolid() && chunk.getBlock(x, y + 1, z).getType().isAir()) { blocks.add(chunk.getBlock(x, y + 1, z)); diff --git a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java index 70e4a6f47..0a0e16ab9 100644 --- a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java +++ b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java @@ -1,5 +1,6 @@ package com.dfsek.terra.procgen; +import com.dfsek.terra.util.GlueList; import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.util.Vector; import org.polydev.gaea.math.MathUtil; @@ -31,7 +32,7 @@ public class GridSpawn { public Vector getNearestSpawn(int x, int z, long seed) { int structureChunkX = x / (width + 2 * separation); int structureChunkZ = z / (width + 2 * separation); - List zones = new ArrayList<>(); + List zones = new GlueList<>(); for(int xi = structureChunkX - 1; xi <= structureChunkX + 1; xi++) { for(int zi = structureChunkZ - 1; zi <= structureChunkZ + 1; zi++) { zones.add(getChunkSpawn(xi, zi, seed)); diff --git a/src/main/java/com/dfsek/terra/procgen/voxel/VoxelGeometry.java b/src/main/java/com/dfsek/terra/procgen/voxel/VoxelGeometry.java index a1bdc6343..b5db0e3a7 100644 --- a/src/main/java/com/dfsek/terra/procgen/voxel/VoxelGeometry.java +++ b/src/main/java/com/dfsek/terra/procgen/voxel/VoxelGeometry.java @@ -1,12 +1,13 @@ package com.dfsek.terra.procgen.voxel; +import com.dfsek.terra.util.GlueList; import org.bukkit.util.Vector; import java.util.ArrayList; import java.util.List; public abstract class VoxelGeometry { - private final List geometry = new ArrayList<>(); + private final List geometry = new GlueList<>(); public static VoxelGeometry getBlank() { return new VoxelGeometry() { diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 65ce8f51a..19b126d32 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -4,6 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; +import com.dfsek.terra.util.GlueList; import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; @@ -48,7 +49,7 @@ public class EntityFeature implements Feature { int cx = info.getCenterX(); int cz = info.getCenterZ(); - List locations = new ArrayList<>(); + List locations = new GlueList<>(); for(int i = 0; i < number; i++) locations.add(origin.clone().add(x.get(random) - cx, y.get(random), z.get(random) - cz)); return locations; diff --git a/src/main/java/com/dfsek/terra/util/GlueList.java b/src/main/java/com/dfsek/terra/util/GlueList.java new file mode 100644 index 000000000..9079513d3 --- /dev/null +++ b/src/main/java/com/dfsek/terra/util/GlueList.java @@ -0,0 +1,1050 @@ +/** + * Copyright 2015 ErtuÄŸrul Çetin + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dfsek.terra.util; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; +import java.util.NoSuchElementException; +import java.util.Objects; + +import static org.apache.commons.math3.util.FastMath.abs; +import static org.apache.commons.math3.util.FastMath.max; +import static org.apache.commons.math3.util.FastMath.min; + + +/** + * GlueList is a brand new List implementation which is way faster than ArrayList and LinkedList. + * This implementation inspired from ArrayList and LinkedList working mechanism. + *
+ * Nodes holding data in arrays, in the beginning the world just like ArrayList ,inserts data into array one by one when there is no space for insertion to array + * new Node will be created and linked with the last Node. + *
+ * The array which belongs to newly created node has half of the size of list , just like ArrayList. + * In ArrayList when there is no space for it it creates new array with double of old size and inserts old data into new one. + * Unlike ArrayList GlueList does it dynamically way with creating new node so old data does NOT have to be moved to another array. + * You can think that GlueList is dynamic version of ArrayList. + *
+ * Adding and removing operations much faster than ArrayList and LinkedList. + * Searching operations nearly same with ArrayList and way better than LinkedList. + *

+ * Best Case
+ * Add O(1)
+ * Remove O(1)
+ * Search O(1)
+ * Access O(1) + *

+ * "m" number of created nodes.
+ * "n" size of node array.
+ * If you insert 10_000_000 record into List there will be just 36 nodes.

+ * Worst Case
+ * Add O(n*m)
+ * Remove O(n*m)
+ * Search O(m)
+ * Access O(m) + *

+ * version v1.0 + *

+ * Date: 03.11.2015 + *

+ * + * @author Ertuğrul Çetin ~ ertu.ctn@gmail.com + * @see Collection + * @see List + * @see LinkedList + * @see ArrayList + * @param the type of elements held in this collection + */ +public class GlueList extends AbstractList implements List, Cloneable, Serializable { + + transient Node first; + transient Node last; + + int size; + + int initialCapacity; + + private static final int DEFAULT_CAPACITY = 10; + + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; + + public GlueList() { + + Node initNode = new Node<>(null, null, 0, DEFAULT_CAPACITY); + + first = initNode; + last = initNode; + } + + public GlueList(int initialCapacity) { + + this.initialCapacity = (initialCapacity > MAX_ARRAY_SIZE) ? MAX_ARRAY_SIZE : initialCapacity; + + Node initNode = new Node<>(null, null, 0, initialCapacity); + + first = initNode; + last = initNode; + } + + public GlueList(Collection c) { + + Objects.requireNonNull(c); + + Object[] arr = c.toArray(); + + int len = arr.length; + + if (len != 0) { + + Node initNode = new Node<>(null, null, 0, len); + + first = initNode; + last = initNode; + + System.arraycopy(arr, 0, last.elementData, 0, len); + + last.elementDataPointer += len; + } else { + + Node initNode = new Node<>(null, null, 0, DEFAULT_CAPACITY); + + first = initNode; + last = initNode; + } + + modCount++; + size += len; + } + + @Override + public boolean add(T element) { + + Node l = last; + + if (l.isAddable()) { + l.add(element); + } else { + Node newNode = new Node<>(l, null, size); + newNode.add(element); + last = newNode; + l.next = last; + } + + modCount++; + size++; + + return true; + } + + @SuppressWarnings("unchecked") + @Override + public void add(int index, T element) { + + rangeCheckForAdd(index); + + Node node = getNodeForAdd(index); + + if (node == null) { + + Node l = last; + + Node newNode = new Node<>(l, null, size); + + last = newNode; + + l.next = last; + + node = newNode; + } + + //if it is last and has extra space for element... + if (node == last && node.elementData.length - node.elementDataPointer > 0) { + + int nodeArrIndex = index - node.startingIndex; + + System.arraycopy(node.elementData, nodeArrIndex, node.elementData, nodeArrIndex + 1, node.elementDataPointer - nodeArrIndex); + + node.elementData[nodeArrIndex] = element; + + if (nodeArrIndex > 0) { + System.arraycopy(node.elementData, 0, node.elementData, 0, nodeArrIndex); + } + + node.elementDataPointer++; + } else { + + int newLen = node.elementData.length + 1; + T[] newElementData = (T[]) new Object[newLen]; + + int nodeArrIndex = index - node.startingIndex; + + System.arraycopy(node.elementData, nodeArrIndex, newElementData, nodeArrIndex + 1, node.elementDataPointer - nodeArrIndex); + + newElementData[nodeArrIndex] = element; + + if (nodeArrIndex > 0) { + System.arraycopy(node.elementData, 0, newElementData, 0, nodeArrIndex); + } + + node.elementData = newElementData; + node.endingIndex++; + node.elementDataPointer++; + } + + updateNodesAfterAdd(node); + + modCount++; + size++; + } + + private void rangeCheckForAdd(int index) { + + if (index > size || index < 0) { + throw new ArrayIndexOutOfBoundsException(index); + } + } + + private void updateNodesAfterAdd(Node nodeFrom) { + + for (Node node = nodeFrom.next; node != null; node = node.next) { + + node.startingIndex++; + node.endingIndex++; + } + } + + @SuppressWarnings("unchecked") + @Override + public boolean addAll(Collection c) { + + Objects.requireNonNull(c); + + Object[] collection = c.toArray(); + + int len = collection.length; + + if (len == 0) { + return false; + } + + if (size == 0) { + + if (initialCapacity >= len) { + System.arraycopy(collection, 0, last.elementData, 0, len); + } else { + last.elementData = Arrays.copyOf((T[]) collection, len); + last.endingIndex = len - 1; + } + + last.elementDataPointer += len; + + modCount++; + size += len; + + return true; + } + + int elementDataLen = last.elementData.length; + int elementSize = last.elementDataPointer; + + int remainedStorage = elementDataLen - elementSize; + + if (remainedStorage == 0) { + + Node l = last; + + int newLen = (size >>> 1); + int initialLen = (len > newLen) ? len : newLen; + + Node newNode = new Node<>(l, null, size, initialLen); + + System.arraycopy(collection, 0, newNode.elementData, 0, len); + + newNode.elementDataPointer += len; + + last = newNode; + l.next = last; + + modCount++; + size += len; + + return true; + } + + if (len <= remainedStorage) { + + System.arraycopy(collection, 0, last.elementData, elementSize, len); + + last.elementDataPointer += len; + + modCount++; + size += len; + + return true; + } + + if (len > remainedStorage) { + + System.arraycopy(collection, 0, last.elementData, elementSize, remainedStorage); + + last.elementDataPointer += remainedStorage; + size += remainedStorage; + + int newLen = (size >>> 1); + int remainedDataLen = len - remainedStorage; + + int initialLen = (newLen > remainedDataLen) ? newLen : remainedDataLen; + + Node l = last; + + Node newNode = new Node<>(l, null, size, initialLen); + + System.arraycopy(collection, remainedStorage, newNode.elementData, 0, remainedDataLen); + + newNode.elementDataPointer += remainedDataLen; + + last = newNode; + l.next = last; + + modCount++; + size += remainedDataLen; + + return true; + } + + return false; + } + + @Override + public T set(int index, T element) { + + rangeCheck(index); + + Node node = getNode(index); + + int nodeArrIndex = index - node.startingIndex; + + T oldValue = node.elementData[nodeArrIndex]; + + node.elementData[nodeArrIndex] = element; + + return oldValue; + } + + @Override + public T get(int index) { + + rangeCheck(index); + + Node node = getNode(index); + + return node.elementData[index - node.startingIndex]; + } + + @Override + public int indexOf(Object o) { + + int index = 0; + + if (o == null) { + + for (Node node = first; node != null; node = node.next) { + for (int i = 0; i < node.elementDataPointer; i++) { + if (node.elementData[i] == null) { + return index; + } + index++; + } + } + } else { + + for (Node node = first; node != null; node = node.next) { + for (int i = 0; i < node.elementDataPointer; i++) { + if (o.equals(node.elementData[i])) { + return index; + } + index++; + } + } + } + + return -1; + } + + @Override + public int lastIndexOf(Object o) { + + int index = size - 1; + + if (o == null) { + for (Node node = last; node != null; node = node.pre) { + for (int i = node.elementDataPointer - 1; i >= 0; i--) { + if (node.elementData[i] == null) { + return index; + } + index--; + } + } + } else { + + for (Node node = last; node != null; node = node.pre) { + for (int i = node.elementDataPointer - 1; i >= 0; i--) { + if (o.equals(node.elementData[i])) { + return index; + } + index--; + } + } + } + + return -1; + } + + @Override + public boolean contains(Object o) { + return indexOf(o) != -1; + } + + @SuppressWarnings("unchecked") + @Override + public T remove(int index) { + + rangeCheck(index); + + Node node; + + if (size == 2 && first != last) { + + Node newNode = new Node<>(null, null, 0, 2); + newNode.add(first.elementData[0]); + newNode.add(last.elementData[0]); + + node = first = last = newNode; + } else { + node = getNode(index); + } + + T[] elementData = node.elementData; + + int elementSize = node.elementDataPointer; + + int nodeArrIndex = index - node.startingIndex; + + T oldValue = elementData[nodeArrIndex]; + + int numMoved = elementSize - nodeArrIndex - 1; + + if (numMoved > 0) { + System.arraycopy(node.elementData, nodeArrIndex + 1, node.elementData, nodeArrIndex, numMoved); + } + + if (first == last || node == last) { + node.elementData[elementSize - 1] = null; + } else { + node.elementData = Arrays.copyOf(node.elementData, elementSize - 1); + node.endingIndex = (--node.endingIndex < 0) ? 0 : node.endingIndex; + } + + node.elementDataPointer--; + + updateNodesAfterRemove(node); + + if (node.elementDataPointer == 0 && first != last) { + + Node next = node.next; + Node prev = node.pre; + + if (prev == null) { + first = next; + } else { + prev.next = next; + node.pre = null; + } + + if (next == null) { + last = prev; + } else { + next.pre = prev; + node.next = null; + } + + node.elementData = null; + } + + size--; + modCount++; + + return oldValue; + } + + @Override + public boolean removeAll(Collection c) { + + Objects.requireNonNull(c); + + Object[] arr = c.toArray(); + if (arr.length == 0) { + return false; + } + + boolean isModified = false; + + for (Object o : arr) { + isModified |= remove(o); + } + + return isModified; + } + + @Override + public boolean retainAll(Collection c) { + + Objects.requireNonNull(c); + + Object[] arr = c.toArray(); + if (arr.length == 0) { + return false; + } + + boolean isModified = false; + + Object[] elements = toArray(); + + for (Object element : elements) { + + if (!c.contains(element)) { + isModified |= remove(element); + } + } + + return isModified; + } + + @Override + public boolean remove(Object o) { + + int index = indexOf(o); + + if (index != -1) { + remove(index); + return true; + } else { + return false; + } + } + + private void updateNodesAfterRemove(Node fromNode) { + + for (Node node = fromNode.next; node != null; node = node.next) { + + node.startingIndex = (--node.startingIndex < 0) ? 0 : node.startingIndex; + node.endingIndex = (--node.endingIndex < 0) ? 0 : node.endingIndex; + } + } + + private Node getNode(int index) { + + int firstStartingIndex = first.startingIndex; + int firstEndingIndex = first.endingIndex; + + int firstMinDistance = min(abs(index - firstStartingIndex), abs(index - firstEndingIndex)); + + int lastStartingIndex = last.startingIndex; + int lastEndingIndex = last.endingIndex; + + int lastMinDistance = min(abs(index - lastStartingIndex), abs(index - lastEndingIndex)); + + if (firstMinDistance <= lastMinDistance) { + + Node node = first; + do { + + if (node.startingIndex <= index && index <= node.endingIndex) { + return node; + } + + node = node.next; + } while (true); + } else { + + Node node = last; + do { + + if (node.startingIndex <= index && index <= node.endingIndex) { + return node; + } + + node = node.pre; + } while (true); + } + } + + private Node getNodeForAdd(int index) { + + if (index == size && !(last.startingIndex <= index && index <= last.endingIndex)) { + return null; + } + + return getNode(index); + } + + private void rangeCheck(int index) { + + if (index >= size || index < 0) { + throw new ArrayIndexOutOfBoundsException(index); + } + } + + @Override + public void clear() { + + for (Node node = first; node != null; ) { + + Node next = node.next; + + node.next = null; + node.pre = null; + node.elementData = null; + + node = next; + } + + first = last = null; + + int capacity = min(MAX_ARRAY_SIZE, max(size, max(initialCapacity, DEFAULT_CAPACITY))); + + Node initNode = new Node<>(null, null, 0, capacity); + + initialCapacity = capacity; + + first = initNode; + last = initNode; + + modCount++; + size = 0; + } + + public void trimToSize() { + + int pointer = last.elementDataPointer; + int arrLen = last.elementData.length; + + if (pointer < arrLen && arrLen > 2) { + + if (pointer < 2) { + last.elementData = Arrays.copyOf(last.elementData, 2); + last.endingIndex -= arrLen - 2; + } else { + last.elementData = Arrays.copyOf(last.elementData, pointer); + last.endingIndex -= arrLen - pointer; + } + } + } + + @Override + public List subList(int fromIndex, int toIndex) { + return super.subList(fromIndex, toIndex); + } + + @Override + public Object[] toArray() { + + Object[] objects = new Object[size]; + + int i = 0; + for (Node node = first; node != null; node = node.next) { + + int len = node.elementDataPointer; + + if (len > 0) { + System.arraycopy(node.elementData, 0, objects, i, len); + } + + i += len; + } + + return objects; + } + + @SuppressWarnings("unchecked") + @Override + public T[] toArray(T[] a) { + return (T[]) Arrays.copyOf(toArray(), size, a.getClass()); + } + + public boolean isEmpty() { + return size == 0; + } + + @Override + public Iterator iterator() { + return new Itr(); + } + + private class Itr implements Iterator { + + Node node = first; + + int i = 0;//inner-array index + int j = 0;//total index -> cursor + + int lastReturn = -1; + + int expectedModCount = modCount; + int elementDataPointer = node.elementDataPointer; + + @Override + public boolean hasNext() { + return j != size; + } + + @Override + public T next() { + + checkForComodification(); + + if (j >= size) { + throw new NoSuchElementException(); + } + + if (j >= last.endingIndex + 1) { + throw new ConcurrentModificationException(); + } + + if (j == 0) {// it's for listIterator.when node becomes null. + node = first; + elementDataPointer = node.elementDataPointer; + i = 0; + } + + T val = node.elementData[i++]; + + if (i >= elementDataPointer) { + node = node.next; + i = 0; + elementDataPointer = (node != null) ? node.elementDataPointer : 0; + } + + lastReturn = j++; + + return val; + } + + @Override + public void remove() { + + if (lastReturn < 0) { + throw new IllegalStateException(); + } + + checkForComodification(); + + try { + GlueList.this.remove(lastReturn); + + j = lastReturn; + + lastReturn = -1; + + i = (--i < 0) ? 0 : i; + + elementDataPointer = (node != null) ? node.elementDataPointer : 0; + + expectedModCount = modCount; + } catch (IndexOutOfBoundsException e) { + throw new ConcurrentModificationException(); + } + } + + void checkForComodification() { + if (modCount != expectedModCount) { + throw new ConcurrentModificationException(); + } + } + } + + @Override + public ListIterator listIterator(int index) { + + checkPositionIndex(index); + + return new ListItr(index); + } + + private void checkPositionIndex(int index) { + + if (!(index >= 0 && index <= size)) { + throw new ArrayIndexOutOfBoundsException(index); + } + } + + @Override + public ListIterator listIterator() { + return new ListItr(0); + } + + private class ListItr extends Itr implements ListIterator { + + public ListItr(int index) { + node = (index == size) ? last : getNode(index); + j = index; + i = index - node.startingIndex; + elementDataPointer = node.elementDataPointer; + } + + @Override + public boolean hasPrevious() { + return j != 0; + } + + @Override + public T previous() { + + checkForComodification(); + + int temp = j - 1; + + if (temp < 0) { + throw new NoSuchElementException(); + } + + if (temp >= last.endingIndex + 1) { + throw new ConcurrentModificationException(); + } + + if (j == size) { + + node = last; + + elementDataPointer = node.elementDataPointer; + + i = elementDataPointer; + } + + int index = j - node.startingIndex; + if (index == 0) { + + node = node.pre; + + elementDataPointer = node.elementDataPointer; + + i = elementDataPointer; + } + + T val = node.elementData[--i]; + + if (i < 0) { + node = node.pre; + i = (node != null) ? node.elementDataPointer : 0; + } + + j = temp; + + lastReturn = j; + + return val; + } + + @Override + public int nextIndex() { + return j; + } + + @Override + public int previousIndex() { + return j - 1; + } + + @Override + public void set(T t) { + + if (lastReturn < 0) { + throw new IllegalStateException(); + } + + checkForComodification(); + + try { + GlueList.this.set(lastReturn, t); + } catch (IndexOutOfBoundsException e) { + throw new ConcurrentModificationException(); + } + } + + @Override + public void add(T t) { + + checkForComodification(); + + try { + int temp = j; + + GlueList.this.add(temp, t); + + j = temp + 1; + + lastReturn = -1; + + i++; + elementDataPointer = (node != null) ? node.elementDataPointer : 0; + + expectedModCount = modCount; + } catch (IndexOutOfBoundsException e) { + throw new ConcurrentModificationException(); + } + } + } + + @Override + public int size() { + return size; + } + + @SuppressWarnings("unchecked") + @Override + public Object clone() { + + try { + GlueList clone = (GlueList) super.clone(); + + clone.first = clone.last = null; + + int capacity = min(MAX_ARRAY_SIZE, max(clone.size, max(clone.initialCapacity, DEFAULT_CAPACITY))); + + Node initNode = new Node<>(null, null, 0, capacity); + + clone.initialCapacity = capacity; + + clone.first = clone.last = initNode; + + clone.modCount = 0; + clone.size = 0; + + for (Node node = first; node != null; node = node.next) { + + for (int i = 0; i < node.elementDataPointer; i++) { + clone.add(node.elementData[i]); + } + } + + return clone; + } catch (CloneNotSupportedException e) { + throw new InternalError(); + } + } + + private void writeObject(ObjectOutputStream s) throws IOException { + + int expectedModCount = modCount; + + s.defaultWriteObject(); + + s.writeInt(size); + + for (Node node = first; node != null; node = node.next) { + for (int i = 0; i < node.elementDataPointer; i++) { + s.writeObject(node.elementData[i]); + } + } + + if (modCount != expectedModCount) { + throw new ConcurrentModificationException(); + } + } + + + @SuppressWarnings("unchecked") + private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { + + clear(); + + s.defaultReadObject(); + + int size = s.readInt(); + + for (int i = 0; i < size; i++) { + last.add((T) s.readObject()); + } + } + + static class Node { + + Node pre; + Node next; + + int listSize; + + int startingIndex; + int endingIndex; + + T[] elementData; + int elementDataPointer; + + @SuppressWarnings("unchecked") + Node(Node pre, Node next, int listSize) { + this.pre = pre; + this.next = next; + this.listSize = listSize; + this.elementData = (T[]) new Object[listSize >>> 1]; + this.startingIndex = listSize; + this.endingIndex = listSize + elementData.length - 1; + } + + Node(Node pre, Node next, int listSize, int initialCapacity) { + this.pre = pre; + this.next = next; + this.listSize = listSize; + this.elementData = createElementData(initialCapacity); + this.startingIndex = listSize; + this.endingIndex = listSize + elementData.length - 1; + } + + @SuppressWarnings("unchecked") + T[] createElementData(int capacity) { + + if (capacity == 0 || capacity == 1) { + return (T[]) new Object[DEFAULT_CAPACITY]; + } else if (capacity > 1) { + return (T[]) new Object[capacity]; + } else { + throw new IllegalArgumentException("Illegal Capacity: " + capacity); + } + } + + boolean isAddable() { + return elementDataPointer < elementData.length; + } + + void add(T element) { + elementData[elementDataPointer++] = element; + } + + @Override + public String toString() { + return String.format("[sIndex: %d - eIndex: %d | elementDataPointer: %d | elementDataLength: %d]", startingIndex, endingIndex, elementDataPointer, elementData.length); + } + } +} \ No newline at end of file diff --git a/src/test/java/LookupGenerator.java b/src/test/java/LookupGenerator.java index cf8f496dd..34407b501 100644 --- a/src/test/java/LookupGenerator.java +++ b/src/test/java/LookupGenerator.java @@ -1,3 +1,4 @@ +import com.dfsek.terra.util.GlueList; import org.apache.commons.math3.util.FastMath; import org.junit.jupiter.api.Test; import org.polydev.gaea.math.FastNoiseLite; @@ -13,7 +14,7 @@ class LookupGenerator { static void main(String[] args) throws InterruptedException { int dist = 4096; - List vals = new ArrayList<>(); + List vals = new GlueList<>(); FastNoiseLite noise = new FastNoiseLite(); noise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2); noise.setFrequency(0.02f); @@ -26,10 +27,10 @@ class LookupGenerator { int workerAmount = 16; - List workers = new ArrayList<>(); + List workers = new GlueList<>(); for(int i = 0; i < workerAmount; i++) { - workers.add(new Worker(new ArrayList<>(), 5000000, noise)); + workers.add(new Worker(new GlueList<>(), 5000000, noise)); } for(Worker w : workers) { From 75a04f7d8f0f65e0736733e6938b9ac27ed57af8 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Fri, 20 Nov 2020 16:43:24 -0600 Subject: [PATCH 26/57] Lots O Stuff --- build.gradle.kts | 11 +- lib/Gaea-1.14.3.jar | Bin 590723 -> 737528 bytes lib/parsii-1.2.1.jar | Bin 50224 -> 49984 bytes .../java/com/dfsek/terra/EventListener.java | 6 +- .../terra/async/AsyncStructureFinder.java | 4 +- .../biome/postprocessing/ErosionNoise.java | 2 +- .../java/com/dfsek/terra/carving/Cavern.java | 6 +- .../dfsek/terra/carving/SimplexCarver.java | 2 +- .../terra/carving/UserDefinedCarver.java | 8 +- .../com/dfsek/terra/command/OreCommand.java | 6 +- .../terra/config/genconfig/FloraConfig.java | 6 +- .../terra/config/genconfig/OreConfig.java | 2 +- .../terra/config/genconfig/PaletteConfig.java | 4 +- .../genconfig/biome/BiomeOceanConfig.java | 6 +- .../genconfig/biome/BiomePaletteConfig.java | 4 +- .../genconfig/biome/BiomeSlabConfig.java | 4 +- .../com/dfsek/terra/debug/gui/DebugFrame.java | 2 +- .../com/dfsek/terra/image/ImageLoader.java | 2 +- .../terra/population/FloraPopulator.java | 5 +- .../terra/population/StructurePopulator.java | 6 +- .../com/dfsek/terra/procgen/GridSpawn.java | 7 +- .../com/dfsek/terra/procgen/math/Vector2.java | 2 +- .../dfsek/terra/procgen/pixel/Rectangle.java | 2 +- .../terra/procgen/voxel/VoxelGeometry.java | 3 +- .../com/dfsek/terra/structure/Rotation.java | 2 +- .../com/dfsek/terra/structure/Structure.java | 2 +- .../dfsek/terra/structure/StructureInfo.java | 2 +- .../structure/features/EntityFeature.java | 9 +- .../java/com/dfsek/terra/util/DataUtil.java | 4 +- .../java/com/dfsek/terra/util/GlueList.java | 1050 ----------------- .../terra/util/structure/RotationUtil.java | 2 +- src/test/java/DistributionTest.java | 2 +- src/test/java/LookupGenerator.java | 4 +- 33 files changed, 62 insertions(+), 1115 deletions(-) delete mode 100644 src/main/java/com/dfsek/terra/util/GlueList.java diff --git a/build.gradle.kts b/build.gradle.kts index 141e8d0e1..2d9697088 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -43,7 +43,7 @@ dependencies { implementation("commons-io:commons-io:2.4") implementation("org.apache.commons:commons-imaging:1.0-alpha2") - implementation("org.apache.commons:commons-math3:3.6.1") + implementation("org.apache.commons:commons-rng-core:1.3") compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT") implementation("org.bstats:bstats-bukkit:1.7") @@ -55,7 +55,7 @@ dependencies { compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") implementation("io.papermc:paperlib:1.0.5") - implementation("it.unimi.dsi:dsiutils:2.6.14") + implementation("net.jafama:jafama:2.3.2") // JUnit. @@ -107,13 +107,14 @@ tasks.named("shadowJar") { relocate("org.bstats.bukkit", "com.dfsek.terra.lib.bstats") relocate("parsii", "com.dfsek.terra.lib.parsii") relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") - relocate("it.unimi.dsi", "com.dfsek.terra.lib.unimi") + relocate("net.jafama", "com.dfsek.terra.lib.jafama") + minimize() } tasks.build { dependsOn(tasks.shadowJar) -// dependsOn(testWithPaper) -// testWithPaper.mustRunAfter(tasks.shadowJar) + dependsOn(testWithPaper) + testWithPaper.mustRunAfter(tasks.shadowJar) } val testDir = "target/server/" diff --git a/lib/Gaea-1.14.3.jar b/lib/Gaea-1.14.3.jar index 62866ea34bd3ef50500de629c017194f2f8f2883..0fc0aa392d0d5127bb0fb24a932fec3ea3bf180d 100644 GIT binary patch delta 327748 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�BFTD>aMoxZ zst_^Z;X-kshfP1Lc^p-j`|Pp19Xy)May?cr2eXg@OONS= zNGTMBdJJ8SKfNgi_UK3s(W7}Mtk?MsbEU6Ba{p#8822~aANRbAkbg2x1H^5BCzx-P zyVnO%=)an-hUZQpBwaGs?mC^}IYhp|eJ7Py?i%%jeyq?=Yep9#ZTd~!aUo)yo`=!)Gz-YB@}7xjr5zKD*xGM{&J!3|psf!hEO!dVhA1Hg(-da=~>4u|d~) z)akiSc?4z*-+9+TOk7=id{5@4R+lO)|DAsX36Jx;IFWKLAO`FFk|EML zahJH^9G(HjZy6ZZATTzR205F21#_R;9_JfOo1HJr5$n#!*}34nHxfNtC*jY!>i|pg z5udFIW+Ial=aI9K>d%Vaxm$aTw%IE8$GK4oq?-J=PJe$ag~#c0xoCDO>j{uUy_Qqj zOVR8U%M#BiSVLTO@}k_r$VnaUmrHg!%&X_5eH>exsC;l* zwE{g0LLp5H0yB<)lG6}AgHF9pp{E0zbex(qdv~g92~gQq0LO~jRL6JJXF3*+6e-7- zci>5)WPi>vg21?=A7iegTPt{M=YV-iV#VOJID6W;i%gLF!=5eReP=8Gr3?m+6zkHGW)&v&42Bjxeck*zE_P zMKHu+O*{%0vnRq~<~4Z6r{UPJ&nWCmMUX@1Tu7~mlsYuHiNfkFMcn?^A>pzA$V|_^ zgeb9n7OvW-Fpsj2N<=DfG=K*YGkg2`NSRZ*VE>4`p8aiBH}+R5!+e^UmHna0kai{l zY=5F?&3+XLEc*q-MeU~()U_YSBEo(sHMjP?+2&y1iP^h-3u?pc>yMU8wy(NYNYB4g zZt*-%UraoYrz-flFLUhYHpCpB-=7WULNC$teD4RjQP0=KfSFB}^ZBSMNOi9asWD|F z&(%oc*p*X!VwcI~*oC?SI1hmIgyo6db$=?#?2c6cTgc4XEun;j^ZHV6IH2*!tZB!C1d!+n{v>TTZOq-iVa7=_@cd*#~5O@)^K( zQWDn7DWaX#jOK#e~I=ed2~iApsMMWa>aH0)MD+wRlc& z&*C8^SQeLi$aPs9Wb2&8#t#4sDx+{5Uw(^TlxbPCH~>(UAdmS+^q6P$5nJZbOzh1) z*&k#IZ3Av9#J{SeG57kH)0r^(FphI6;DqSY<#+tO*&6kl7EGHI-Q)t(;=>4 zI+4kG+MtaXHTlJa)1)L{#7)xb0R&UoXyQa^w23hfq{+2&qS@qV0+=l$#e~U{0b;^r z;sd!YCIbc|-j;GNlUfuIKKZsBAirGvd6G~;Qu%_hWtYv92c%J+T=E7uz>xi9BgO4c z=2N5iWGscOPkJ-|d4JNfin#iu8fC`DAI*hioW*W;<7j_KUMyjZt=J7`Y+wQDEY)Jh zdq|oXuVqGUJiEDEyYWbNK^k|z0I5l|_+wm&A;~EFt1ugRbH|MI$rKyyp_0dFHVYr4 z?rgy`QYW7IIP;*~mdCCSg!%DJl3b6sn*vPv0ML;-#z#L${(nA7B0~P?IWwzAS4_pk zqs{gr^=Lw#*m~54D#3?eQvnj#Y4XsHnasn>`$f;gO=OoIDohI>wj!)*_<0yWOo*5; zv?5t%c(%1j8Lk})X=DqzEryM|3GkqtobQ8BM&So0eCHpW;Bp=;w}g2JyNn;yUn0Q$ z61FJb4`frr{eQ=#4(}hiCsOwpX@Kd+YT|x%s+8~LP@izmi(Mr54DO2?_x6wrxHogJ zIDfC}Y;o-FA1d?jrn4FRt}{dJUA-nEes}w8FjH57=~P1igMV6!xIs#|Xf|-P5zPkI z&Wb{VEo@>kn8Xuq&~Ck8^uMurUqA7#i0j);7KQqkcz>|Ta zULqdeu_ViI=gc{PwUjg68L1^k?=)c=fBS7O5x*Vg1?FiAm{X)AZm(uH!R_JwMd9s6 z)F0j|C)Rx{jBMbor+&h7>%Y?k3E7xh;gG=kr{o^zO5}TyH;-3cY#6Wb}GaimX?KxXlf3CS5o7 zZ5GWpdL#++^_QE3`MMrA>iQ%yKG(jp5&oKeE*LFpJg&9jW?qeBrg!xM8=0?;y(vEH zeqxZ)wPK;6ySBQR&~3)pbR{Yu;JmMBzB2ZP0DqT15X-%6PDJ|hDni_s8&c_gDQtm| zE*)bCxYVD8>cxD1<%@>YCtRF=UYIXdBcOD_YrS}QVb3OEzR;a*)aPHI@cb>lW9O%` zz4zQNwu_!~A**<9do2+^*KwvWpG_kfbXHGYc+O697U0Z3n?&;&XKvJ)ifYU=oqvmz zPJaf&jm`~L96HmOke~j+KKj#klrx>yEE1m6ZHQu>GN!=tRGmRWI(g`pFrUaCD@ISu z;X{4goht6*UDpWnv6~#ga!hTO+@GTdNVXoyr<(W3Tq?8=JGqMZ;ZDQ~4(at4se}J8 zSvsi2j=2LdtK|M17|n-zzd1wp{wBY10 z3rx`$J<80Xa)HX+uVO-35Fz_Pl*O&~i`3E+64_Rkhs#wct9nQ-QdzTQgJ9NqNCHC9 zs3svwWkcs90&JWul^DvVt@6VuntylEyjdk5B1P+^xj42}P4*ot+xp07N7=qWaskSY zqf#}b>@?*{wSyaq_^ww{_pa=|I7~2mTFMip?6Hx|tg?5kyu!-fGzoeu`?kn5L)rI7 zR=&#qI}(CZ4s=TtJqJAI3iH9)*>X7tbIyvwLkA?`s2r|20^pt$U?@lW?0*t}j`+&d zS~x85;L`ne_ol_DAP;?@K1aqd*AAmI`0G5)aQqH`Wyo_>o zq-6S(vuCC7MmZbZT}bDeOMf|>a&Eos99Pa+ZW9mBeU{~|a(=uQfUeX>Dd$rqPNH1s zC`S+|7k2yraFw*6a#2l=0Z}f_;t{=QAc0@y;_J<#=TdJ8F)5c0EE0b%`N+IQxm;_s zn7F)nijXcp{sX2+Lfp!gfdc@J$_X>d75_Klyl!2I_9(i`+JSje9e<$swg6X$Xo%*k zrLnhX-0$>*cDIr|+=zWs_pmMXV)DkNfpBQVY_J4v?JoKuS9g=J!6q-0m#Jc*^Y= z{Q!2zJVCjA^BsU2)^ER1qBBx zze;V9((f@H%$x*a*5CU^Zj}DLTabJkiFN&)QZZpr{SrWLS$~5l2J`Jjp}_%(T_^^I zbKp^BfyuWMp1ZZ)1N46fuvpdw%H1QA!90?4sFb^bmB19r>|ME6N2r z^0|uf9yw)2F+P_MaCfrYd1LDxh074s2Nc5^TvqXhG$8b92V7P9JBp7bt*q{uQ* zd9uJ$On*GtB%vzh$w9v1PcCnTWOx@nc9r1q(-v2sB!r+je?L6mN<_0s?a2Ub-Gtes z|2NTWGLg~TWJ!T2G}-bT=3{5UTr-2mND}dii9->jpf_^sOj0HLrkIq>g7ix=P|DN# zvVmQB+DVq%%F`h~gy-orJ_S!#%FY+%>CVRRoPQbv=GHneW)lJ2B@U@PjpRN*ec20J zZ>6Y4F|8y)FvYZq?7dY?yGsT^F&)Y1X*&A{JnMKMP4`IgfMR;SH&S;Q<4mnvi*-{U zUBu%Qm~&U7=ZhRzp_tW>-IR)1Ygr&DX8q0qOpukhVz%g~C^Xv~3g$>109{Lf$BmJ4 z=zk6n$amE&r3{{8XY~A&BY=4WzFOv;HN_3{p>hzAVm^Hjz$#6cwdD)}#ayQ)nA=&1 zTl5FxxfY&i?xA_sM1T*nZBVhOnk-TlEv4pGvFI(yM8!gp*s@}=us?t%GZ2fz&k(=r z2w>C!(%*UOe?XAb(kK?G_5dY^vGq%$YJZAlec64a{k+4#YsZG!dx>U(jQF*-rq!6G$Z-fH|N0Z1s(i$hx*1bfZ|eWoB+YKz}w3 zDb|zZv`oc%X+xN|oB(rd8<^|-l-5s%A>}ODQpGxS8Km@bq{@cC^GEhOD9;*6iHP#7 zi<}XpJR2_AZROcaDXmwYt^N&ZR}NBVg5l9G0AtC>_{_@)OpNT*R-R?+Vd9e<$84nW2Y@CjR36X5OVw2tjOj!+p z-^t>bZ6n#rr`UFt)v;nbLQV)#Y-iO2SSt%m#dZ%rx9wSD00R^BShYgjdo)t9gTUlS z7(uc9Y%a`pHQou2U7JB*`ZE^TO=PZRx0Fe;9Y-`McE=@erP$qIDr;xL(tpFw<(c?n z7ghrB!Vc!Qd}*Io`X*A(n@NS6^1NqzFk>XtsXU)2WfIEs4N|xyQ7eK1LfVJ@5k>AMvFEB4joEI7r!zMQS9*thHlsncgLef+@;W5sH(@QB(^mtByG z{lXREhW#oAR(s8Lh--fUIDfnwTRQImbR{vT*x$Ji&*NEOETZ9Y;F9e|4^MP3 z{-ibo$l3*S$xMKc834c11aPRn51_#Zk#cAyTgVlME_(p_=>Uw7!brv8Z-(|iVAfNl zmaw>XSS#E86o)P5NbO~v;&3bkp7Y}ozs~gA;ht=mQXEWLBmOK1jDO22Fsl043X6i2 z&<}-~JV*}t6`J1=YH;`#FXE1sWHYAXSexj9V^b!sj_pT?xML5gqEs9QWq=uD2G3L$ zVvh5O9yqSJ0?)=KNbM-c*1D6q3U#h7Nn;`al?kSu#*ex zTqo5jc*40+P6_T{UfhJafC+=syG5Az9w;Q|%1?#lTvzG_6@TaE4Ip*kOY7W=x5;^k zoR6e9k7Xj{JWUE~73T#@VP47X%Xw1(3bmPDIv?&1M#o5;ch=niNuQ~jvk^f#XUmiD zIQGY=cV9@s-T<*r0Mf_6oVyU#ip!l?cpj&r&{7W*jtY9Hf&s04{Zb=Vmd0p&|a55m<10Zi-_bk?;gE znRJUb$A68~g>pG=*+e1SN@v3JnWcx@Zz*k6+-u4KhKhTmT+!^_Rx&k;dv_v}?gM0Z zmEu0iPxQD?4icZ;=RQEsa&@FMtRQXY)9rqM>74s19hfgOopZmfhvrAa5w}o7+`a^o zX8__s(~#nz8^t|sEj&3aPu$D8!tO|$Gk1*SwTF?V`Dv-cQ%7`XgYun!-R+KGW6)z!|3Az0Lw1`j;~<$ z4o6{#4y3r9U^1TLM&5Cl-}u7wZHvvu=ygIcXKy9j}b-pJU$FL->1Knf$) z?UgVZo)?|5Rlu6j>)jSeKcwDR@vb^Z9P_S!O#Ja~$?DI$3&Xm1KdgI?V9@lQ#Qev5 z_AfE&y|fIB27v`{wxKEB`*}URPj!HFnK_B~?MH||u7L^5`baryg7Idy;~ioRbAQ}V zJj@)0&-wkpyuAVQcd0T}d@9S{ZN;aqwz%QboCKCnN8%(ty=~wbdIpSg4$RCJ=vho4 z+Gp((NL#*x*;@qWIMHvPi^QLOZpwKnijSc&*3DiZ^}HB2JiEXgUg3sLxuXWq9G3q#*Jgt&d19e)soz8&Q}e8so-R!Bql0Vq;+ulUX!39xvwc<8$} z7=>HjA--=DJSUlE_+IJ->DG3bAIfRiim!PJCLAW?hL?io;4qjg!o0p2c1Y!`!}Hb- zsUNbBLs3;>7N@Ewy)6_~OP&o?XA3a>WbePC8X@NcD5{C3U}iJlP%WzspnpLsO10ez z%)!wpJk6p{rAuN?Wx!jYGCq&OXT1Sj>&ca>{8)CWB5op;6px8le;^gJ(p3FDis?V# z7vC1YDsl?3;#YI5Sof9$oZ>^Ut4c5omhJK^o;P~{KBfbFtKj)fY}vo^2Eq8(IDajU`PY@xs}%pn zEkw${#Ugmx8bhl1;rx3LD);Z}1oNQx03(J&8q1W%f1;F*EB@1nB>T_)2hzgX0Lus$ z`>##`vta_ZvFzw+(QoPSNse7@wtp# zr2qT=kiKk$`DdAs0@OQ-=74HE*a5Yf?gliJ)-y^#Gb2$L&^k?g4(K=sscz&Q0(zT@ zKLG>l0u0-L_~;aPCbUG)R6c_Nv$lbm?+mbXEK;kevIx-ViGRY))>z-s63m{3@Ej!V z6>z*3;yMq&Tx$&zPq+bKfV*zZK&j&cz!Q)mNjQ2K7_=lo7 zbUe1Ah_?hJu$&A?B}NqRvOSobYe*G-fw_DZCO&xK;WwrS0lx^C1XlVgJ_puV4yG=1 zfWXE~3jG3DD5Xx#_QbLKXIE|t;asfEv~7{r4|A%7L&gNe9tFekHK4$Pc@!mNr5 zEEo(>Y6J88cIf$X1>he!d{_xmCvqE9Edxv)*+rrRHT($Bd>W)So-lV}j0@^+0#9FF znV>-=4uXb%1Q;uoa!Sy|05H?Lqh}5a)u2VK(6gN4rJyw*AZ@$|W=l3a+LUbs?ITSP zbYwm}Cx4lk1)W<8&lLuRpc_w7s87l!=s^fP#*|V7nNcVe^y~yu_JkjUTv?R_c~zM3 zKf-l|Hb6Yek=v3m4N_Vam|xyNJm(YEix_u;$}6tx;{)`3C)gPDyF{ddtH_>fCAen1 zC=9MIJGqqLrm{6d32x;CPX~fm!CmFhP9?baWPfoicmUNA!NaI13m$V8sR`L=o<>$E zcn;17FFXdYoa%_+H9_!fWc&)=@(vztQ!x8i0UY@PaOxDc&Nsp5D|Z3(=HavcH%u6k z0tkLW0xQ^@C~>e2*^^*LN?(HA{NeF2Ku;ibJHcV3HiBbLpfG7XZltGxc}>7SIIqHb z34aw+!S9$c27itM^OMD6h65F$K(>Y=8$^0LBd2A%A8R?1eld*&5=|1s>Obz<8TuB48P$Fp5t? zqDdl$B$5gbN#Bd+*L)K~@(K_yaRzut$}i*#@r00nq&1-uT8Vf|XmvRtR0*w1;Z|tl zs{k#jT?uV3NAfD6UF5)aCA1gAU+4fTOhSjvM9&!VDWMaq!!wN!Na&oqU=}Tbd4D-y zlF+sJkT$u2*>(fXyB9(_NTx6J7^~4x9byHc7tdhgT0el>)zNb=8S%%A_@SnReL}65 zV#1yvPpB(DWvDmR5upLBfI>sx!5qz8A~ew$=JaidzitDN_YLL}-jvXH47H(O!m<93 zboW!jD#7?Dm=1R*vC2a8qcvj8^v!2jLm?nYEurr8lx>7XvUUiIuYUn^%5VI6 z*#IE7JK{wz;d%2FJ)amI!hU#)8{ujc)r433B$~tPcz|g{7C5{GG4t?tNszjHgt-@S z$nXKU5k9=LTu%5{BHQ5;-y=1nD!{x3NG&15626LeIb4Gpk8rJ}kao_7w2yd8_>s+E zPRTKPO89x^{NcL9%)@UUgMa7leRv*SgXgI+JXTccgg<|VEte>)d%cDyfGU*mFkZ&+ znDyL^B*ypf3=4R&LLe0+prf(qrcTBuu+=<9<0#HioC*r*~*1uNV=iizFL{^dZg-T>?;y;lM zNrXivf^4y5xU z-Roh(mx7|mpb#(--@(KaK8j2u@)r4OA-3`ekVckLgwDlK}I zsM>}AjjD^Ds22RnQSDpH{fX-8ic}x;L=BSuj7rqV&f-s$qL0*6s?(!pyFgl`0cnK? zde$?2iqdL_iJcZ$-%kQ7>R2<_ibP{rVcjRqA@0Hso#ip zE&=fJ1PCCh6disRsW|Gxqf;p-h<-)EaC9DDt>{u#K+zu_!1J8|X^h%LVUDR@Q%Es& zB)A9m;uCyVulf*h#6Z3&lKWFF|%txTFB%iW(70znDtch z#AuPij(^c6w;pqV4GS^Hp8%ZQkHRYs_V_f}TSInkDzWvc2Z(LP zHjvnM!(r~a0_HwMl4A#xpotxI3#kcg|B0P$3xD%G>BytRE+xzxyH*`$O`;jGJD7*Z z?lXYrXgZiP?NE5R!l<4On7fqv#~KX*W4;|*w)em|Gd9I~5wnU7_y#Fr4+`Te983EJ zDQh~I!ejDt$G+iH5c}B`;2$y?aer6R{{dCm&=FVjvDk{MD+hWgaSh~bC?&25agw+e zWPc*!TJy@pwPz@a>)ZjL+h>4Y)Dgw?BM25Zs2Wm3oxzNx!ar^-v&y&$m2hk_8_MFQ za}VQY6LyZ9M_pXpB0|A&%h-Grw`v9^*8V|!15?nr%}a598_|rooy7oqc%tGC5Uh?n zLX}tCai&Ibr%8Orog+ORcZoPj+*L}f<9}{^!^CZB@Z#>0{)jWI&}=jSg-_c+GN`rRLaGi`6k5Qz(4hd{Bzi@yj z%L1M}rm}HGYy*iaqberu-4Zl^8VT^N6FmPAu#H!fqf3sy^`%}suKe!H>hgX9%>W^Gb{5bN< z@e{woJhj5HSslU5BZwNmh}mHLG9HrnRijb3j%8Q;#)I%^UBkrooAB)N2ea=xJckD$ zb-Wu_ak>+>&XJ>!zeJ&L{8jcY#eeG^g>)wv;9fbvLv~xlKcOlw-mDRTRYOeJR$P}u z#m#gfNfGZs^<%tGE|>rU_33SVcu0Ri&%Cg zEGIaVu$m8Af(9$-1kH0`wo;g#pgjaVdoO}H_zgYB)<8P-0^l6Ag$b9a6Hd6sXF1^} zMRW-UTe0irtSTm= zoFT;%y-Y~XK|F&>r-WDK0J+TB5{mkODT@U2zTzH!VJ}R=59&@6{xEq0z;Aa`#b4 z^<}Gd@?g#fNPiwlJ~vrmQ)luN>amk&-9lzAx&2#*1iw*X5(w7=v>tap;1z5=jjGfT4lL#(^;!zKG1#ClL8 z{E4U#k0VWxoXS@;`DGDOdF-J}F4cnPJ$omUzn#LLKh)c#RLy@7S5xY66H*#8c}r#G*X*jE-Oll5hW*rnRASs!$ybq*xj0Gv1cR|`o3?yYg z`zuq9_X2ZvCLUf{1?DEXo0R)}U{j3QFOy=y2FaA?rg-Sad^N?F@O4V?C&W1tTuDi8 zi{=-Oi0ADGQ$~NBB;{iSQa@QGrB5sXBsiKpOsL2M^Ae;vRZvfHU&<@A3uB~49E@=?-iF^5cR%!8fQ z23OO%vBM~>f00~!+DP_sq)j>nX^ymQQqq>P97tPV!LwD)rBTxM*MaBcVlbDQ0^HKY z`a?a$&2IuYFu_anA_kHcOsXXIku z_yyAkvhjZ*eJl@u`gHc%r!QV4n$y?4fM@$FFo$x{e3oxr`VA)(8nU2Ex7-G^%MiJ) z^Z?%F^jK1~>6ztViU|d$e<2N*QH2pCqfsp|9azg`^otUyj4=d1GiGVQvw{oE(0U;L zWE{K$aDE}oci32zVM^#e!|5SFAZ3sliOXQlO~-$YPd!C*W>t>D$ZX2|IkUU;UQ{wi zP-dJtQ(cT^u0AZ9Gqu^?o2e6pls?g?Op8bqdU0KuaVx>(k-*CQjz2Hz5j=m#o^r~Z@@hVFiC4$#!(+wU{VHR+SbtrI zf}+dwB%ti=p%S(n)pkrm07uIzTy`(-~NK9+m2-rt*` zdK)9#0aR~qbN1s~Ee=L|JF^|6-W)jjw%&iZzY0}vKGC}9%_~{Vs@_C#lJgrc+IhUO zrG@dE$1-nGy}3nC$v5XYIQPwAT8+QiL2HaR>o~dV&0;$+GdS$`jY4OHH$&-w^QQOg z^#XLH-`|@S4KYz~EId^u%%Up)M*{w;@{b%BUtZb>OwML_(xu2*Rh}>cAcCVB%L9Mt zi&yT|Q7*9DDGMnZdI6N1(hIWu5qG29fJR{D*Ex~C{31s_mg{ihR{2p5f-c`r^Ud;| z99mVb#TlFB8i%m8io@#5m(XRPd@k)p%BP1xnnd56^0C|C8BUXn@$@=Rp8h ze)lp*niZDW(SWkdx<2COwCpT1;pow_$6;K>18#4b0Ve~O-L3=aMl%%Zj>3P$MNVie zJ9`Pzsqff2u8sI%nlP3f;0Uj>J;4Cl928l$jT2(aw7TNYM$Wk{ThBrLWvl5#S++bJ z>q~gl%NB6DVAIrpOsBa1W;N)8qJAzWy8H84dEQcvH>*6E9*m(+_IjW z&{)>BBiGfD)T%#?SuIXZF01wqQe{3(rGIEnQTmf6 zGNoVTNDWo#r-33~`c9$;s?svfAT2HCn7Gn>DJfKyX8!~8D-P2x&7gl=X(|VDmL_t_ zZfPuSFG?dhrn@who^GXq9C2T&;w-^Z?*VdKO5J6UQk6P$G<2y$Tcm$%X+BkIMVsSN zGg|o_@+DAFsGkN0z~J zz!J@Sexp#kA3WPQ*}imhDw;R^17_WPu4@&CzLqZUfYf5TeU<*5EByz|rngt=jNb4} znSs;6~u4<(V zJc~Vf^@?39Fis}`>^XwF*hUX=tJaXr%)yw<19+$uH0LS`rmcCA|7xUsm;)4flmocZE2_wmL8{2^5aQNP;W3W{Fv&xq5$y|$ z49|eM`wHOBBAnNAK+n}o9J|a&RCN9Xz!{FSE;`A$Ty&JKmqiD2!0h7~{GweK0Jd}b zYtes}jsTlz4p_9l7^yWJid(e85Ykd+UquUP6InF31Y5H<;mcoa>dMP||XDoBl? z18LESr(lK-foEWaV|`;W+G{YHyV)Ssslw;>y%BFc52@zXNHu8*PXk(P6xAujpPF<- zE2>J1grZ9I#YEw6`q>r!U?N@kg@%2FA7_7xp2D|uJ}NBhBMJ+Pwutq@ymXkeX*^o^ ziqo(QGd2UHe8g5Fjl2tEX>eZ{#Rs-9YzNkZ_QCA;6k9$te<}26g)Numh&woA)bmDdHr{PGU$tmcecX2OwkK(PX)Na+2Dn`YrtH5h}79~NT<6(I?nQ~@GyTT zFcXw&GkU|R_otvN7nq;XQgdRD9j zYr3OwMR%NEvI5M45N^xd0VtfQ4bRjpFq0Tc3KYT!1*3Tf3r19!7(%zWf`KEz^j!~6 z&*Naanqsu$8!ovW!&X5n&arjqbo)kAvR}Y7<#1s6GdUm9Gep|0hp)^8b;u zeN_41Xt0?7i6$xe?=m5k(`7Qhm^K0V`K)U5v*{p^|B44DYB)A|R!}26Q z;v0HGnL6eN&H_-a!Kl|gc--iplJ87^&wP6hHqW=wMWH3_vGUD`*X4gdp;2u9BNs>y zCZpMaqu}#zalC*2_4n}Tw&l7m5^Bgldl93je33d{73Rb9!R)6kb^h*LjP4{fl)se` zKVLHxg&SygnZNcJJS$o7<}c%uo4<%vcK*CXOw8su^!yo|w4XnP7Ipa(qA@X!*;oE3 zdNbt@(?)#IZJ7I6W1@d|ZFst$fz-L;ckj?1pbg9I{1!e~Z%Ut${Dwrj^6S!+Hos;R zdaBjHjY?8_r^@@yf-djp7I8lBtF>6q`^2<4?;T(Dyz*I)ig}Fl3Tgu6(7h$^bq6q+ z^d!worSDr_A|HpmI2LqyQ6aby##5IUOgo0W0D@q7z8e5M=^THN=f(;s&*_5PjlAbh z@I3pDElXAbd8RaK%zM%fsYmo*&U?@dW&>h+dAI11ns;Ll7~LRzzW5ds=je}?r_&hV z1YOngjxc)W9bk>0w|6=`+Pr#s+nMd;Y2AfqV*#4i)4C{cHH-bc6Wa7@ z0fAg^f_u3hbmYl(Sq#a6wM?!pUEXr7`7LtIS;FL+l)-GoG+VlvlT|S^8LxxWQ5J# zK+HUM?Q(yBl}3=3#sMti3D2F!%prFcvE|(9^)NA+zQDQT`HJR_Wqz1Daw@=3=194N z=;xc;?*c$C4{UXdgQpYCGIHBb!$fN`2)WHGo{hijr~iNk^qI}AI}}XK9Bz0uS2S0a zBl}c2e|VmAe)@=soNq+Gb3W1UFXtVhhMe+F0L6cD%)2TlU&`-QIXUW(UTp!B@dbsc z;{g%_t!&T z)0r;kDXjo=j6P!GAq&i$d-U?lxpNVW9?SonYpo$&J`CnO!Sfs)B3(Hrn}In>6e8y! z{XKtk_R&)*XV-0R)b=0f(PAEzvuP5*dOEY@tfqrx&hlRXOK85Cvw+bmXU=PYnKLjk zbsyprKS5IH+nzI;*kI1^S73&0;cg5dyr0vTM#DKhj{tP7_ys$hfC>jGrb{U1&pKm$YE^?XzHRq% z^F-lkIv{7CsEw;fmH`}OAj{r+6&`Jpw%OZRL}Y6n$JWMV{8_&O&8z8=n!TK0WAi9iq@am!}$JW4{nK6|H)u_Gg->+z7?P|t(mji z6HCc%O~=pd=B!V%n^gSn4Jxjp?mT~t)}&)&b~SpaWml3D(o|W$Y3-CnIf^RlD;?^y zK5hbdOFR3lQhd%T;%l6h`&+DMWodwUL2xE3U4c27K7CmURlvm1(ljel%4}3wp(=o& zCfM>Lo1Eo6TW&&@`x7wEW&rlzv2MEr9;*lFF-wMI(h1Dtjq+P$J@^W6cOrj|-KK?K zmfm5Qud;~9x=e?=tn;hE=orFtf{ahrQ6B89g9J9S_7UC9+EpD}+vnn;77K)|jbu5q z*0bo#TKxy+741>Dq{5AbOzgAfGE8L6^aV4GF1J~eXc3;JkgCfX(-G%KknzbHLT~r1 zioUm5eO}{F&+dqKoertvO{9O?O~*tl4@k`khGaFaApPCA@E=h7f6;UnU{)4g9Dnl` zAmO1wx?2=UUyu?JNl8Jv5u}s`=}@}6yF2eLyUVh>u-)BFi28w2-#s&b9-qfEOy9fr z_r5b{&YXiNc&QE?t)?1y)}<;?_^14foo~tugtba3fZ91FBTddHB@uu7l$0pUCnb0) zavnghmExX^$~T4~ad9##pHeWyA-u>^c57(9`35Sl!{aMu*+aBiFcC$w1JPL*PO&~h#*awNWtQzZLg^_6@#4>{LB zO7i(87~(jTPRaZKMbA5=2Pb#(#+;P zR>}RKqD+Q)o;$hoXmr>P%B$qh&!MO>{d_BrQiI)1-yXFvRQ+ML%6fVjPsrNyC3foq>o!oYV`y zx}C%~-J2AchMG-KIN_>QUZlWJvzKM77kV(Aei{|Htpw)3ieoQ=oZzFNX zF4WnG=#Yu4u|Y`uZ8>u0BEWs(j4#oAvI99|ROAe8g;syxV_%Ti0|z~cU7++%v_7=@ z0>|ZvO|sCut~C5}CsxCnB(XfUZ;2&g8kFe5Y9~>fBgaa3EyHlQ6aJP4d+vlMcqt@g zV@IEmd;^K-11JhX@XZAO+437p@Iw6Vgqt&wb1?)%oW!~=;m}`5?8ZhlVUsjpbSJDu zEYXCe7mso}d)zaaQpDxVmlKOimhQFPaWV4Jt2-{#A^VB*$JRd1Ycz6h z;Pihj?gDi9aVPE}=OA{zaXb5Ch)tg$XALw$alfS@F%OS|xEVMBkDG+hpK+rQ_B3t? zc3W|Mu`h`GRzp!IEQ#aV#v}2$f}R_Fi>cPak1eh;H0^O^u#}DaXftx`(vPA$_C1UT zVqf9c8~YrOg4kRvpJG$x6=`>DymY(jj*Wl78zeSJ`T=&w`c^^nJ1Ho-8j8d@oS()X z3q#@n)KIZIq@B4tb|dygv1_(q^reVN8awY33^C&%I-Cq8VeHrjX!T=xOmzUB0I|Ks zBc~feZN_%EjZfNY4~A%l^V8V+ASJd&b>vhUk0DA|Lx;tn^Nh90t1Ir9_c-E@d5M2G z&N0uIp(qb}(U>&o7-Qn`8jXo)grcA|$nnK1JLWFT;bN|JM$S1I=*k^)94GQI`w>?< zW(N%IVm3l)8M6k8&6wX_qG(=k%xA`GBqoFRm@(MY#0-ldl}sW=4a8JVNewPWkI$OZ95~U4R&W*>^{W=zzg8W=jc`%=jO51~?c<3df!aJc( zz%wN7BR+N1ZP?02UA~RVXTHM_NA9D;JgjG9>$uFhiBBRb7=L` zhdN`i(~SDjj-mkx7`<0B6n%fa8j1E$szkLai^|QQ-jAvmf;!c(mx-!?4R};39A!oo zv7xfC!So~|Ut@(9`4^)1Mi$6xr|!s1>2A&)nK&4gBTJz2BRtF_ALyujZyFNUfnMYV zoB~Il#4bDXkcw8juxE_iG#x{%tu8-T*#GT1{S!#F&42Xg(C$gUJ3k z0*LGhHD+X27z0PP#{p<$%UFDhrihyyS+6Q4Rt*-&kri-U9$5o0MBcaQiO74i) z(qX$h;;&HIb3`GOU=dl+LPR9N&MG1rhO806FiVK=hxuZJ`x1(7z(^zFVsq3vc??4w zI*JZ=LF*W?87sYrwZ4BCbQ!*%hy|U{Y8KXh5kFN&hht&;6!Bwej5WZGM6V&}@arVZ zrvvtS5v}kGk7x$_%!qm*H=;UBz9TAZz{e?t1GR`E*knZ*(By=_!QM0cAL+Bv9sU$r z$M9?{2Evo^`U{W7RKr8&qq#rqPQ$%wqt101nb#eD0n3%}6GwlLb3oo|afk27Mb8^k zk+ZfDrm^%pbU5!gTFt~eH+*sqMjr#)r|@C;VTTVGgrc6)P}J2IMb;Gz(XtwPZW4#e zbsM7RsxZ(EFAuGCc*#-7apHU@T*G@X>^~^V!d_gIb;1fdqbNh(w{nLi;*T2^i6wE^ zBbWk)`R+xlJ9vMUgk43%^RRRN==m5-R>JnZN6~gzUWKj4;bz#%7bsdh1(oOEdP3N= z*C-l)5ji99-U%Cw4;a=5kDajY`0IpqGBJ8vEcL@a$GLD=qn9YEbrT=3@;{hQ>8_~r z(Oh(BlTOCmq3>aZ68aK`qoL1b@E~_+E-Z^e5qQEK8Vi3@HpR3_}mLW{v9EYy^j4c#Gc zWQ0w3$P<6;<3f^3p(wa468G?T4>^Z}_>colk=Q5$ySPJ^Rzp7@4){XG;Gq}NAEbnI zh59Ju3+TE->JCJ!a{G~RN{5{8;Mc0G99#euL2%+n$axHnbnrbGmj++hE1L%&!V^1q zi@fRY4qhhj(Yu3ZLK`1ErWWda{}wr2+9IdLKS+Pn#TzZS!XVTsioN;cw;#!($4@pP zk%T*0kAq<%^4RMVaxTbg)b7UztD*A7EIGvE-*5-&@y~DN$9X)e4s!a*2xaca9nT{1 zc@;FTy%LEscK3xgUvL4ktbs%sjdyU5~mSoxv{P(Y^>&UXR7V zqeXvt$eB749S+A6`%$l2sM7&QHjh5V#^+IW7|A~>g>$_}296Gc{(_}kP!_gJK~d7- zk~_#>UJrK%U56z`(1{G$bI{Ic_JnoRu39B7>VzaQOCNAI!$1F8&vfX z1})VQV`y52(bmaxx!P!~oT4=Uj0`@jXGYri+J=Jk7q`&NF*I6m_WIf{fEhwOiT7d}Sf zAfEGnn_z(Iw~WwyCaymDjm3k}uRpFe`E`*&2Hk!wVd3Ui4;xIsa!b4l+OZr}fo z%dvb5@hI?3+=QZF8CcWp>z;t3^T5G(e`mB>kHvuRV(Aso?K=&I3ckZ}sN~yML!C~z zQsMjAU=-EZgPhXX)%x0Cz2<-OKfL;VvT!u!6APOPAOBnw-ISM<-99H_zv{CKR|0+3 zc0fP#hs#glGe!C}a{CN@FDLKQ6BhnH?V&XAY3z^YRiF>|DUQ3qJ__`Q_n%|6d_S!K ziAcP=@B3oQdH>3KB#xGs6T80+yTAJ@s-S2VGz|C0&Oy!qD0T05gQb7m{nq&yqQQAo zu7sz={h}x3ufqH?|M$fj83x?p;ujy5~c~;2!b@b=pFa=>7yR#Cz{$q!{3&lx5>oae_F|&@5bVa(A|IAFhaPC2vhF63#FSl z_ub(zHM#qhyld~iTLWe-cMa(c(tRfv))99C@bn8b!0uahq(36}Er)b5W2kh2 z>%Q?N&OL8b!G+E1?_nx=Jp*>s*L`JtH23wRKg#CUSHORU;re*!C9Z#i1;h0Q+tJTQ z9b~I(&t(8*_qE8uvgd1;piRBDRl0O`U;71Hm}>)VsQd-qx!1}+lKou$H%1m+jW0mr z_EOo;)jc@Cy1G!hVs>900maMJjvcn=g%;fSgVVNYn-nmz>fYoBLuOHft9HaE5sC6kxo# z8pq`qC*iQ;;&-q&zSy)6Dwn_}^ui1L2`)seLgIfq&Ri~Rh2HPNFW6vS7zicLg_gMZ zd7%Ps7@dCw`;GIrVIF*bVWO;azU?8IIQROP{1VRH>n|sEZZXzc=Q=}ObIyR>&RKt0 z8k}AEhb%hV9q64cF5@Y<&xFaqK<+c!@m@YN4C==-RdMO{bm{}y&*_8M%bXqtThP;0 zWWawc_o;N4E1x=u=h&%{xPo`8_GLNwlXSz@i_}G0UTgHDScON+|onN_+Oo3^~kxy}#;qc!wq?h}! z8wN#(mv2N-mkinbuz@)r@`VG0L#t){IQOA%aNYP&G3Y!G2IH>l!HrO-9~^+Y{|75c z2kGtusW>D(a1c+n1LI*%aG(JW7xpK^JIel{GM=w{U!imb@7^~Jo(J|m$G&^-yaj(q zm^e7tvqA>Ca_>=PU{?3;bx`u`E++lhyLWB+TaLc#6D&M-p28{l&QGC0-f=~GJa+GB zC;b|^xBJ1EYWvqP<=PgGyOZ0#$6|78vh-T!-a1j29d3DwTL4>T;~BL@!&YeXN^I6P zn^=%<+6*nkrs^<%-MCwN1$1w$0ndLP8}{Q6a6>)Vi>@Dy)%zdg@bmk9LO(gNb(3&x zx^`BO%vrM#c6zH0YrF2Jp+zOAnUrWj9O9oTc{%%TMv!;}$Y! zNxlrW>t37y|2B(ND3BKx$L4Wp?mBU#Gx;aP}$OwwRglkIb2#gUf#`)84|a z`==5zc(i-sLacwr{sxPVkw6+f%VNkBgNaZS8)hTW=Y}_>WzNQ_@_^Xd_yPfsHcgb*6Rb_i@UXXe;3$7td2=Y@(QoPc zo2;|NtA@ zTsi`YSEfwtnuV}LyIypat#;2qDDB-(;m>N%PmART-18KHc=nD#SgXAW2(h|vV4^JA z7lGKO`#S|9;oV+N<3NAqnzGJ;f%lQKB@{W~h+=lIxP0JS2S3E*I=HF=ihMEWgK!^Y z9cqnGZinW;^X;L_=VhHk&(QpE<7%?b;VJNfe)tgliylrzq=qBqgWo2Il?;X4Ucw5-@TJV9BTs~iN}BDA{N`RD+tkh>^UMN z9>9XfDXO@4+I%jg=`R!~?_^>@Y0%3Q~9zYDfvx#ujf36}tznvR!LXLiJqcq;O z&V@=-QtNyX1Rg!#0}%<&|Bm14`G@k6Yh5rl%jOrVRgy&)+9BfAg&}YmdSNbtIbPT` z2$gT(%e)Z%Gg|!*q+BeGXTrtL5IFl{p96AY7k^rVI=_Eo&KJ+Aa)^t8h|hR2S3Zrc zOAbZmT&npWaylR;#ibDjiWb7J{-xa*{nBkjZ@CmJ4?wL;|6Z4^E|*2L!ONeomK|RH z9uajf&&ZZjy}Y3$5@&~@=rO!*UVbVKZ>%dt5i0sh{U}-IN>_Q>Ze1DMQ}%pi8A6_2 zIn)M~y~}?ikz5Bw@8SFLY8ALtz1j|uEUpfnj>J6p7{9tLRyMzSRbElFu7(do&U1Ns zYhC*Y-lwlMK*YUk-yn|awTVaMr?|EXKY(ke;OGCEKk&SkgYa|LO$2zoUiBGrzJ$}f z>pviz{q?yB>2-Za3*=n0qjGq4Ip^!oMp1vM=&)|o#n0x(*N7c_V;tPT-dF{n zs5g#DD_rZwefTB5krInK@1-Xe>t+>%xw+X6p#*LYoFYfRIlCVc8~e#tH_s11oyTx& ze)9kY`r+|)dphE$-2MZe+i#ymWV+jd2x@#gr-N*D$3$q1J2mRb=6BlT7k+2x zKore8i^@Ak$cf##ikMt?BH`%x&Y$o$fA=GKd}iHkxCS}h5GLvFID~1tyAqCS?;b&* zqPsrQN04g0uQGxo-)ke4D%O9!!5>16&yj8%tb1GW7rb}1HWI;zo^Y>l zz8uT#{16AcE|x~_uMq;kJyvR{EcY@jgxrVm@N~NoOUs>vn8@z`@Z|R@f-q8El@LSL zs{!7*UajH1)2rJoD^lzDp=klDx=OcJV3k` z?nh!he7$<_mj}d__c_FT@xBL#(%!*{Pvo6=N`8mlh48BF{aWhctotq>S?7L5X}fFP zZ%{*ac)t}Wxc~KAe3Pvc_U!o{SS+` z`^on(L?L{B-hX{d&c~++CgxKCUN?Q}A$*Td>wfZ+`gHpZIfJAblI1hL4T^sK&}xOW zH@1AX{eU`04$3+ET*2Sn=f2#vSw7+L7VeXdpSsVV<79`vs`UG0`4*Q3=azr(Cy1x% z+b~-8?Ar!E65ns6Ri5QLNJaDUacK1md@}p4fRkt6ZFnX59s|_A*Zx3}-$k^FL_|5? zjO(cLcQ^Sx`|0qL>{qHi64j&v+45@&ALD+OyzgN7eJ2l$EWe@nHvA?@ZzPuATtwXS zTLYh{emfBV-R~G8XZc-wfI)x#j-tb;y%;O&NA&y`e8xV|rpfXkM0Kx5CrYPIt1W;u%{V{PGhb9;AR360jE$DE6=~I2f6ah z#d`3nj%@C4#{$p4G<+cY*Sdv73pi)??~H&W{(X~?7zJOi{xk45^bw=V2oYngW^+ZkrR?GhRcr5$>EBEHsLkD7RJ}e{sRay^gOAV*>@N;Rc zYCY_N{nx{O@`}CnaE!F4wI0q2L*->-khA#?5{Kc}`r&0nLV4%|WFCgiM^QT5P(S<= zo}2?z>`DSkRFAv5gpUuH{1tNMok53d=b`zo2S}X6 zb1dLS1Nj{W_>VzR3_{BV88|HjiN)|<9=HMFF9XF-o)Z@k*d@@t4T)eliw;adJl21}ryp9q3z3PSV({`E zR2cz%g6dMV1l0-}hsa_PT zT0u~FQzTOFqxn-jQi9&YL-nKL(&o*2R9U(?wH`IbJMK|Csc5wxeT$HSkA6UWkVliH z&4Bf2?uX!aYY~5p=Fu+rV1INRz&^S*6m=e8d-5m}OX5cvap>m-_B)TY)ku_-2eQ`V zYNKVV$4wPk`SF+7qdoriFFEJOL*z-8^>`w73Xea8^m@Do9=sp#G>|y)A+X&Igrt1z z4`1bvV;Z4OHp0R_{s(%SU;|-lgFlvb)K+i}Y+Zw!Rh56Of-O8(gL`5v8azx|kXpf0 z5ZN$z0hBz!>kxW4co&wS!6#mz=j#Zi9sB@6h=L;#;3GJrBRc#OzxfbVUSPLEievE~ zQW>wvkcQZIhqMlp6AS5v&=?^DKb0RjWZYg9&2EF74{@?WHX+Vz$bs4D@EraYA@?ey zpT}F!JkfuSX%rw_PRMJ7O$jxn;?4>!Do@s|P{L0=v{E%$IkblKre%dTKroTePe-G2 zD=23|J7Ayk!7|MX?bR4L13m=08V0pk=$JPcVlra&hR&RZqWOp!6uJ}-&(O6$VXB+( z>JQ!d29*zfh`@E?7u2~h6Qke220YX~3Zp*=LY;r$4#4Rj0X_fS z5OrSTPZ_4+AspuV7C9wHA*Y;FV_IQV5r819?mX0K0u4jh7YHXE_T>a5I!h;zR#=a! zsM8NI6T^leNN(83Gsu~UFacrH5f3qJ&Uxf~2=E%VY7KhcfOk{a4tUxR+mE1ZVaE|? zB`cN6dw=0_b+aUch~Q*niR^hZU|# zA7xg!OP<YSJ8tW_P96lu+IkTD}XMRmoUe*O;t;K&YGkg=4h2gt&R6g{f@~MjG=i)ikxv3!G zjreHc4+kPA1c6<`qwxX?PsV#WJPUCH!=IEu&wu056#iNs^jHzPG&!&$TnJeeQL2<2 zBBDGN(h=2uk*y-?V)-4>6btf*mbFmS9-G;Su83L~(X$JR24JTdF>C>vkHrHdVhVp= z{SmOcup;Io*j&U?=@P+;SZhb~O?Xg8?5u&D1G6xV_c#c(f#47~tja0BLjkL?-Gb^(AO%#>Ex+StQLKsKZ zgoZq_Aux|@9*sI}5Nji{!)oMogHC@hviE8f4TLs6^2hE-jKi`y@+UlGB4?dM&ir(= zT83aNk?Sg;XmbbT?1J(k^3V$8oI)JT$P4&kN8T8NA~$vlk^TtY8X1h8W@HqCHAg1l zwH}%IA>2}-g;sxI?-2P$`m(U1^e8z*R1v%{qCOrgD@Ro|8g&}sq@yk&aBb90EEJ=>r3tzf6;J}Bhhe`Q75f;8RD^?x%EhZB z3WnlV)Jq$Bekbq#ThTUo2g-kn{s;kiqf1M}KP$R&b6GjMrnD@wq8s9`6Wx3OTDATU zl{;V$8{G{$wCLVgyhRV{hs21ks675pBOARct|WyCd$zP%WAd`=>M>l zj#1@JB`d}W?PW{}1UQQ+`vP^UK*1GL2WqI8#@O$~w1Ac`rd@9ob;gNC%(qY*#`H}= z(U2_|V$_EiMiUXQBxX7k3o&!Nkyug=%~y3rtMzy+$7};2G5hc!iaFK=mCr6fhga5N zVz-~7$j3rX;C6HvUJHNIh{F~pCUq4m=SE=8&!O#!d5HiqG4JGwvlVMX4Ha7y2R*SL zyHQjDk?v!wA!ciAJ-jbsnk(dCT zXY90H^5ew*ifB!-iwZEr%1fy8$9~k=iino6d-2+eJ%asU>}h{2+G8(cF&TRcFY#FK zm#7?oJ#1_!ln=2nd8m`T1g)~`VbG`0{Kx*U3X0zDl0|XGeOVM&6eqKBA4^X)R$N8I zbc?G|Ne&uUAItB!PZ4S=u2muW=>Szj+}DLj^xTg+1EB7U`w^#RapO87F%_`|<7O|z z5DOcjX!&~-{XTyHgKm*`m#nzmS5fCMUR!ae5xgw!GNL-h-9jLqIB%Q=#s%y{oiJ!q z=|7*kr}GK?LOZjysXl9e<|yzBuoWAMA^qkX#VmEKE?ZwWKn_*$K?sdg`)1A(7X?{=m~@OAZMh8ekS0gCgEo+k`sRY2RVy-qMwzSsJwnCX1E<; z#1rMdLL|f;z{JuJSSle85n25&nz_r9~ z2nmox7;#3^oCCkwZ!aSM*-6L*KA!$TS9 z=M;i#CtiGp<~N~WPxL|{xkP{b)DuJMpmOvz6eSJ8SeZdc6wbk*e|N%Iuc7%*(xjUv zE6IQ5LQY9(yksSn!-gfPDvp_w>PUyTR#M}}NVGt-)1-Ea93rWc^hRPOeTzMHQs14Z zGZ@AdNh1#+F|h##orZT@(yt5AY7q{0lU8CAk@N?G(k5-g12$)w?b8(ymyHFq{&ARk}~=9byU8*4MW_<0Zo7M zeOL%22c)4W4CE%qVI!8Diok!#IW3U$6vt=D|Eq;>03PT9T@Is35gO*w{`^(ki&f;QzUBEhBH!9ym+ z2NpOff&LgY{0ws9Rw0qr8Pmw^i=LmsG9=~YaI|{2SSC_+4GEj{mT9HBw|1S*#wAt#nv3GbcMDlgHh#(Ct_>5C2cku{tb5QD^Bk!Aku)U4DwxZ}(tgz1pFle#Oyz0HQXh4uRGvb=Y6%a3q2nr;d4# zoC$xTpDF)hh@X9sGwUIm&p}|{)cN>xr!L-r=F55@XO$DJ*5XJabv;&JshjZvO5Ju6 zqwm^=?`Iz#u&D=Q(fsIU)H#2-9j(qDK;q(esB;y+@YEX!lAC%5hAydII2%p%g&sTA zA2GgDg9f9YU~HFC!~0?yQ3p{ct|M|1K~rk#QhdNn#L7&~g}I<0ja=JVx#6n(W2IbHB6(!ME+o_iqRV_Gk4 z`qKJIvsEi?;5{_|0g;{4h7U&3DExKO#_dC^NeFqL_R~2OO`n6rY;4xj=3oh$wgBt- zv?Z{PNLxM-IjgV$PFsHmlc%%|uuDnX{08&cjy-JJZp2bg+Yf`rw8K!vq#cJ!Fzpm# zWu~3OG9&HML{z?37DYGl<4?PbDBEe?I2=#&TYy#p-{9js9)jj!O)x~1iK19M!_yKG z7dS2TC-j^VfXX@3(Q^S56lu?JdXn}6Pn)#=VP}{2-#D~-hj@S4=^8@1r<>Akot5sy z_mf@}(Yn)1z{Dt>s-jgnn53px!e%zT3hYhUnZAIo+`4PyZIH<@8=x(7fMvj6Tppo#J z#3blI(x)OkdisBK*a@f4#sOdY+$tD!!E5xhWIjI5aws3tSK|aTecd(8X9G^((zigt zp1uPQqVzp@H>Dqd5ncM>$r$u_BMf>9zxniYRZ(;iXB_EQVRV#!11f^_JFpT=_d<}< zbf0&q<9`7~LEX@E$V9Y?z==kB^i?F{VTYEUga>|lT5o^kWd0AWa`)l07h+45{tT+B z^uM4hNPh_%nDp1!9jCvCb~i%{Lc-QVPAtO-lb(!X*xF~5fCWXy$Jw&yjIwxTXHPm2n$32S&+GK<6@Q5-ML%#U$!kXaT-^O+S(qtz!eYM7N-9WUR^T39D! z*4uxMAsRJ6tEOkr&u2X_#20wWWVTs{BC8B?zKTYjF4NKBH+AI4$^7nPBzi}p^7lBe z%p8Q(Y35KI=Vgw-DmQaXBMdPf278&4KMXqc68f336P15ygT&kb)LFO)t$wS7kFy+> zMVYI+BC!rfB$*qa2G895VXW-~QM9`piuQjk$LBiK3OTs#Ze^at3o-L7)*G1@Yoqd2 zMB>i8fpg)^JBLu@^%17w0~`BHe+A70@1jmHtbH=W&LSrYdfLpm4`U_5s5moqE{4b~ zjrrunqj>?MT4z2hhvqL3H9qqn7;|R+3q?@oTj@s6%2IB~p0kXWNZ9YnA+n16BAb6_ z701zGRw?OR#mXuJwOCe#;>f8Cb!b+#_DIx}ad@q)y4%oU!vQF2g7e(0=Iv0_A`V5Z z7oo#1VUU*f74%wJUF?`fw@FBR8;O2;!FDdIA6`IN1Fj=yNCyn@BhH|+M&3uOu?tZ& z(S;7DU|pB>GhWbHvv5$DHRnS=^Phhsv3L(!E$fHGss?Da_6ic~Ph!x`*zaU*hn0KQ zZYI$D67lh|%&eX#G%x`?e%)|ER*+`wul>khW|Szd%9A6VRF`LDw? zg1$sfNG*J>@GRs+WBHU7k2A8YWGK_J(wCu5_8cVgVXd0=E zSXpnRQ!gu9!6{z00TZKaM;SR*b`hw~vWw$8%>Eb`d9usGS}eN)-mux9z(6ItI=->& z+GWslJ(%%lH`bA81|5F(=i$g{1$)TswopiBx4$4iS9YiBNOTQHo$kX?r)M?f^udLx z?EZZ)=-|p|H8dVYBe3qx9u0p}uI%w$F#05%<7ZF3jLI`$Ym_}Z5@XH9Dwz`JH_eZ=&owuhFyDQuOSLM^m={cC-pAg`8j*B4&s8!B~IMP%UQ1;n$L# z1T38iSdHoX$H$t4q{x1dBqD^QIEWUhD9hO97+aPxjkU3iXJi+Sib8UR5MxYcFvj|h z8CycaFxJB;+aOa&<2djCbN{aYb^X4N=lOoV_x;}Q`@1;j;Fx})a~i&?H9qcdpH6{g zZQ8ik>a{%o-;8{Fqa5wUu(#{JE`8|#uIK1lo3kR+)}d=ZF5B{Hl*_ZU8yCE5RT&oL zz5CgW3zf5?`rYktp}cZV!ItM41Nm!(zijz$f1ljRs~tvM&bE9PmE=1xdv>GiCU|U} zh06nCwa|ROW#h(b5B6;JE1tjl(4_kFK3f&{_2mn5!hTp(9(vi}zV3iy^ee=`5N%L#Z#))+kE*CgVT3E+?YRiF-9o9JIK7C#N{{8^}F%Q#b1}f)(SDy}kcgkh_ zT4Vcf3M<>4dpLZ^vV8T$qM6(G?>oP8`L%qN<;5^KC1yC%4Kr zK2KV(`mJ_rlHG8*_RRaYicZfM@i+a)?!KREtZew{-X}NCrZqpjFkB7(a!HfWFApR?eKPa-?HMEg&Pl!VOQlt} zhxHp2`n39tV`F=7y>p^d9qYpY%bjeGo|nry+`Z6bNm9@ecT?$*4R=`>`(t3F%)E^2?OMLl#+yL0m_uKpZK=&tquK)7Q568QA_;_jRKtsPZhqpbAwLLEx(d$^s z&FW9C&wW|zyl~rY-EdX*^!wFz z*DDQq^61g(5dD}F zKO8Da`nzP%LdUzaFJ<=+Tfem9fQ4sVXRNTb`PC)ORLOah?RJB(>z3tx$9>wm$bWIb zm-Z+7D_o9Wn)~GNnfNYRkINHE0>7E`=a6|F_Lm&X=`$$$hc=}jdRa59x~g4g@lRXw z46AmA*{hBE{(`};$+*bhy4Y;F9cJfQmMssq4>;bVR4sZNW%4=lu1M5cNxSw~elDPrC*C>wJ~JmsIR>zX%&NKC7#Xt?w<)Qk2)ut2KUZSJO3_7}Ij${ACS({A+csn}h#& zsy%8qYQIZ#M&iETj*s#BN%$bCf=P{fBRRR+Zg9BF1O9D^6~f=tA4W2Up2J&^?=sbcjz_uUgOFnZc4Pl~bB3>4cyduu@WX_GC2sGQ4gKZyhlt%l)uw8{8y+m){#Cd0 z?HbqoX7IyqqmH-Pvc%Nq;ovR9>P4M502(!CF( zcDzoo)v2!h|DG}Z;f)rP4tW@Q6qnasS?TMs?oAg}nDWrEetNyFi*By{-Ko+QTlIw_ zmimu5`RUi$t?PU?q(e>97dNUK{;u}(YnQa|mTt@IXbIbWv--H3+h??>F|qo!HXdG1 z>7mt2$DB32pXKx4T$jaL()ZW!UQoK`;@s_jPqMG9xvYKkss|OHrPfiqzOXN`_u0On z)`%ge*8J|(<)=#XVv1{S_TRMff<>*|Ix^Vz-yJ=g=0zX9JC^KQBGI?d}*$8~yPSz+9yiWXbqzFVnPer@`8{H@PBo1EsScxAk<^!3kEE6%9( z`K{8z!a4(9jCFRqSFLaUXFZZ%JJgEqb5$j;c)6zU^Hy)R46C)l)NAtVLT%8D%h6r# z7JNOzZN!`G2|d%ZjQdtitrh*x=gr?74EW4H`p)N#-XHv@o!i^9UGlSy7yD#Rzp^MO zbLE|)X!qa=|Gg=TX?=U;v}duE3l41k>}-DV9{-b;?9Y2Wo?P`uub_{^{wqDWb;Iu+ zuN`RhSFNCbDyYS0;~xDnz9?>FXkLM3=_k+QikEC!^L_m$*=w6-wK=0@zP`4xcw%IO zfQj=o7Z0!bGx~oMIQ#mF+>fCHEWha?6Ms7C7rJ`$^>L>=+wT0C@cf5oS!ZW$>M(b8 zOk{!E$*a4(>$+w9-saEhtAfMs`K^te?mcCGE&J8erM~YDPrIT0=vJh@3Lo*|mmsg? zXOr@mjqEp}%Fd0yo9kxBjPh>YXm4Cl@cw`|{Z1?$G`w4#!Rwce9oX;S=il^*-u~Eg z=isTOzs7t>>EmNOvTuEZStGsupB{}lIrz-f{u?gbT>t#$`r9`*%zIVxxW~9zP9rD( zQU9~sbHet--fsP}{M@9OC9mtfE15WX{(;*n@Lii9ufD5ycKVrDF26h~&gxMfa^Uu( zFIz{BoZh6-)yp&9&4`MAxqauF{*QWmjOrPCds$`W{8D>k(^mbxAZzfDm+$=hS2-4= zuNfO_ZGGsv?lyY<-s^wP{&(7f>;*5%jdM>P?bLtB&Mh$!-Z|HYv}v;@$g+P=%Xe7M*ZMwpitb-#ONg5MEWE+i zf^*xa8Hz%8Zt%)~+~B8QuHL?O<5h#hiC532&X{MnO*7hVS%(c;(&eL?e`362(b{j; zMfE?{b8(HBA9^kx5YzolgYh0a$60#MiRoU}ps?A_sg~ZJLBsC_{hoUBo=4E89znl{ z_m4Jzm3;M%$EtN#Z+fgsDLE19<}u;h&;@-jG&8r3x=`EPy7z^F=GNgC%uNTaTJO^I z-;Ul{L5X1v9=YrcZ}7xrLfEDUE)&8xsX~{cuuXrv6oqek?ov0b{FX-BB0nn0NQS5M$mQeqn}rcfSk$&ATHn zOfl~czA(bPJK{od(?RC-Z<`LXtY6c#;M?_=nii~EzprV*iuEs>7HnLf*|cEE`g=_a z)~`R&R28gV|FP-6-rf#9wg-4G@A0=^%-VUUpX_K{wxZsSEpJx%h6TKIX%`;wkITNW zfMS<@;YXgjOba{m!ev_ck>@Ti!;ZXiF{RA7=HV0b<@~<$V_wbc>kxCd>A!Wo?>8+- zb~Bit_FZKOoz?1$)#K>8IuBe%hdY+6$O)hO!sT9=x$>rIcLdUmh*V3AKe?m};&cbz!8r ze(wwO&Go~-f9{eM_Ggc=s`H**p{tw!`O0Nn`0RP7yTv4ZefsN|q`9Xn$0W@^-8Uv; z-szSx#&;`ncci^r;k_g6?Fvg+yJDBv@O@8Ru7&M;;bKf3amHg;>WE7o6W5LS!((E~ zh&+#p$s^8rOiUe-@3FA?p+%v#{!={68-u5~nm0yF@iT7>oifwBG5YzFraygqUHJx$ zZN6t;&{&r})BdZ`W{*#+LrwBLcZ~2+9)~LB?c6bE{E^kyFZ-mY-ri7DJ?7X?qr#^o zr0orRd1^+NJw1m1*!+-x-XZ?|+9PYP7Z0~bJ^v(4t?Ry`XkN_n{dapkADGrC{9|%a ztC-OJcLzLgoi;M8$saS??s@d-mmae#=DpkzHTH;FeBIk8A*K6;e@#FZptFQm* zV@^GqR^%9?;^wAYf9n&Sd^EXea*Y3hpy202)8fMKT`p<7Cvf;yui5^2PCH&rn45h4 zqmOU$ymdtrVwCfN<9(hFN*fm5<8n#EJzm2<^LpDkuhEXJ6XvE~FZGE}o|jxSEynl2 z@!;n}(h|Z?TrO$4$A9?I@DrD=CS5<~b0U29f#cEN`$rgJzWMaOl;`KJng^>i=dhY% zo<&coows~P&xs9sO{tdGE9Q?+t0p%*RpPQ|kdGm?;UAqgUhkIHd`By_zlLX*l@sdk z@%H&6JaSxv-czdPg~c5BG$eWRADuQ|4@&E}qu&12o^KuVy2V(2TJ7~VI?Zv1{Y*~{1$^WHH=(I=wc|h~GUGfIUSbrYi@wP|atgD058ti!H;}`BXd}8v%xJ{9pQzz7# z-0#!JDMMFJXgc}K@W-h`QzlfHY&hW4Qtj)U=e1+Qg!1(VOMEQJLz9bUUTt&0mU^&_ zk7?b|HASW!e~u~lpM2<3d+>-RX}ZV0rg`Z*x{N7bbuh$7_uS{0r-w~FThe9nrQs)= zznqyCAO0b+DDditpB6+nEX`@Nqoe+Pe>PKO6UC;XY{J>x4jX455;*yy(w;Y4Q$8$H z{G`s0P3`&s>v>`&C7-qJHOO)%e4PEyIwYoqU)`t@nzUOeciUC6Mh{tJH&Uuhvb2-Zp;9_kN^4T8Zp+xy}d++TVoQ1y1ClsZUh6DduV(teb_lhO}T z`i)dAl&UfoHAPV|`xC<5*AZ?a*Qq7pk3*v{cUyc*@Jft{7$e2-#8`td z2O|)pSQ1GXUt-J`LlS0;g%}PP1`=uo#^)HJVvta)F{Wd9VOW$zR^d#>i4#X6Ycb|x zxMP?kA%jf77$$}!WRTey{uowC$RN`&62y=MgJ>DZ{aK=l2b6KoAJ(;hUj{4=J^Dbe z08k3z3~_)s)5pL=)LnRp=Xi*V0m}tYVhB0=pwfTE}IYcL>wIsHRgGN`~gTrPHjfll_ z1x<{tH6EK{&yTTp*}&$SY%*)8$0k47rD7dOK4qIar_)Atsdv@VoPb~Jd`rNgFeEWqL<@X)`)dgtOlI+`AGR%DUYUnNHZ$iq)@p* zVi$h@tNb(YdVDfN=lBq@!gRK1nj|D^V#R21{n580*c z6T;J)5$?Kza3i@+P022lv6o4~A5vhDf`?L2O$u6WqF~hk3L;yT=B#O+T7L6vO0I3{ zqx0kKhyESkNx#j1ct}laA+eRjRK@^uk&;{3f@PP4uSwXF%koSrYDh&ZsYs$CLmGeV zBTIjlOH%q+s!FA*TnZ{mL30XzSux<0KDJX8J>tBZO%K`iKzVOU)F+IuZck73esAiH zp*(Sh;0zNd7^fY^Yz*ZU`&xJ4@Ro!BI`8+^FsLiWC5*#j^v7s~@e(6JjBpHhjC&Ym zVnkpVFg{{9V;Je7*T(n*!@SO0y*JWCuaENxCt4yj(cLhvVdRTJ6TLA;DTXhGCQa&K z7dM0gH54qeyhWRatK^-qjYD68YNFuj?t*6(a!Si5Q_6Ju#|axMS!`zDU%w zIT$@M9_RrOC2k_FcD~hnJ%f#sjREAF+v>fdCBG`U+H_j!Q-5}}Th~#LMlNBza8Jgau{0Orf$APt5|?OIu)WVtL$ zds%*zB}Z!SNv(AqwZ~EwtLDjLEt6-fcp|3aa9R4vBG0Q>o>#FvuVSJ4R+(LHuczEz zPr1FGa(g}H_Ik?g*(-57-?WyczT8--%=MKl)np0#*-!tkwJei<_EY+Q^=131EZt=J zT9(SP^p&NhEaPQylO=k5oc-+{StiS3$-Qj*=b9{j=Vg)I0ofgpowhEMU*SCiOLOv@ z%ksaShwQvqe4DW--!+WQno%nT% zcR9<593qlKL{Grgo0087wh>ut7}-|1{*qlvb|2YzX%|Q&P$JT<{m)Lyo*VX-*qwB5DbdEFuQEWH%yS5|K9EM4}}kQym~;kw_2`cOsf}@g(9a5gBGL z5tBr^->RZ?f5}Ljc4XouBf}gcVMmBN{XGfo_dti|{m!xbZ1A}cY*W5kLf z3HiTg){JU)zw^9nYPtM@F{yE){sqQNF+4HM7z;3*Fnmeqjsd)v%H^$7NG;w+L3DAe z;3}2OJ0pK~`Z_j7m??$LDq1Kibm?`okatkcsc1*8n5HVa)?@3y^QUZ$+5~J=!5$8! z@lOlK*lR9sd{O&6WpTOx7jg=O{n4A`S7MFATGK+7?XrxO#e81T<4i7#r*!j_-A>sV zQYl$MyFr^}Std)GENf-iD$62Sl4V&b%O;k89l2yyby;MvtcJ35m!+yKtz@YuOIKNH zv8b%}vTZ6$PgyF+(p(l7Svtz{zpmc0Yryg-c18z1WG2hmIJt>@8M>VeZCc0BBjjdB zB+DZAa9h0F;@uYSWJ{jar&9J#mRd^I94T%hZ8Bw-DZA0K8!bDNv^n~};^q|3@?u#K z!DD?Y&-T4Mkb+cMl4Qw{Ww|WrvY1)^?IEKZS;l=LOEXz&%hDl0u~uXI$U*LBpe!9^ zG0R*JWpR-unZG8pW{@levUHT?Ct0S;@~@)KI|FwZu9mWew^oI2wwzYk4^&MeQza5gq!?H4%|^{5>@VSD!jahV z5_TdylCV|!%^{K?kyIk1i4;r3naF&JNWX7P1*%>l#x^l^hb!CysCU%i!wk$PeiIkJsakBicX{_x0 z{xhC?>-O7&4NE@nHt9`ZZljDt)9(B-?eNHH@`FP0KaGq(c_cIG$o$7W&L!*DeY%xc zHrEZc#~yfiUQLkEG^vHa&Rr*mC&hXxiH9$Xz<_omH4b+m%V z!TsRF;a|XO!QJ7M=Y!qBPT+pvv0%p^%QY@;qTCle4BQqx1Uv;?6U@a;ROf*G!HvL? z;E7--Fc-H{9S>Fs@Id%z_?K{JI2X54UJQ2zJAi}1pN}flxpT$Ejg%X}(O@rdEO;`Q zJ6BxXNVNs*3w8%bfG2>tbH&9qs!ibd2b+1<1Rn{X2ItNd7uP7a!VQ!=gG0Z5td9#S z)g8B%>u&irwJgqVJm;sI9&FNm|GlUW15X9l1lI#EkF#rFBiH~|uP^G+MB<1z5viMR z)7_CXTBi7oL$Zpjk*tYaJUQpBw(N0Vmsr+5%2nMLdFjtuVr2i8s?Vw(ZND}-s60CE zb)hly3`Q-CTF}v$^C@}vZ=tct1IkVVmrxo6bON;hJ6AO%luqU7v%o4;sv$Tx#W{yl z2`3WcFvdNJIABQQGBHTJ`2-^v!;H~`#GCbW-YP@IGU`0(ADzTSp9$~5mE#!t&1wlb z67rK!Jwo}b2;F*JsEj=VNj;I&7D+jgnklKKl9E>C(#lB4T|$Y3KC4E^NkT4!e5KVH zLMOTrN|#WIgk-1)2{n+AbSjdNJdR-!TJ^t>Ox0FWb<_WD%TLSPbZ;MiTH4)D+Oo@j zPuJhve_vv`?_jcD`|x+3nrB>49<4W$)1wT%((6n5qW6#WW(!JHhm+;T%2u0URlME# z4}X0**aMslZVm1Xt_n_yx0}J|z^>qx;FjP{;3`&|h3aTfMnQeF%%gFAp1gPSiX)wy%U#f_93z-F))I2Fual+d|z#l?+OTfq5XcW@He z6U?0}F0N5+0_TAJ`H#8k8Sr*+?p$$kjdClz8178@afYyg|VM&w1rkI2&BY&souVtVKpe#>2T&^59~ zvKDf_YoB_G9RYA%rgWCA3LGPJ|{( z=!?oF%Caew)J#c5NlIEBk(4v3$C6qgtt^C`B-ERbkF;7!=s-0>^&~Ww(C{sUA|w

_h>PP5@>e6b1q^hU8cHpOFVfu&;{Is+s4Yd2sce$V@#`h`D ze-YeT-}H@Rk@0|Gn=Q^B$?2oxCB4Fu$9k_mrKv8f(?Jo@MIN1W%|&g}tz->kqsh6G%ODrr zQomI{*%tSxZ;2(ccCP9gj^Vwc(3sI8MgL-RnEgP57UlU9S7Lai=syr2o{rg+l5YT2 zDXR%=JI0;>pkPLA^LS0*wtNhDRqyi-6 zMe2#9?n-JosZvSxq}63l~4;p!>UW_f~1zF_w8J(co=HD_iCRwCBnmRS45nkv>Z zu_X0UtodRs!b*@-rdV-eEfq^r_ryvNYcW=tq*QXc{^GO3BI7atx#jt_T>$W;BYuG}u_ z@u*lf24q1dWJN}|LZf?DGyO=nD&_f}t9h=j&-4GZwz=1_&NBd6t*IBNHURR znvnTNB4#505%HHub0TYqd?{^W!FLA>>Vh2^jCD<{Sz`6Ty3`BHPpkoA`H9sB>j0Lz z`-OOc;`PRxDX~#v`HLmZO2t|rmJzF+G;Li#gb-I#Tp@2SFxnoKVr=jt0&ep8LW|5 zA!2nDtIr_&%#4`z`rV0cMaIJc{jhptjTCFBSY4EO!FYGXnz3F%TFw6 zc1)}<#R?Qln#~tWYkfg|>AR}LawlWE?a8}st@R_{cw-r{KKM&Cy1-`Wg~Cu@GywG} zuqi`-HX$eq^+w^SABsf5C<28d8dzvxp@D@478+P+V4>bZy@h%U^%m+a)LW>xP;a5$ zLcN806ZIzQP1KvHH}xq{HWLj@G%(S?L<18IOf)djz(fNR4NNpJ(ZEUrD-EnPu+qTF z09NX))LW^yQg5Z+O1+hOEA>|Dt<+noH&Sn;-blTXdSf5OLIWcWj5ILPz(@ll4U9A} z(!fXqBMpo+&}g91K%;?11C0SR>NV;$>NV;$>NV;$>NV;$>NV;$>J{~hdR3XvS*;ExijPp+aTRw|l)Dw8$530o5{!=#Hfe+%myRXWxCL47V zhWkZb=dFL$$9h5sT~Xr7uOoa0AmMyobFEaK@OLvks$!uvJkb^y`>id|d!6#CSyDW{ zmpwDrVYFRkhVL%2PVZ%J;$CR|mmds;R!3OvLhDL?2s*FDeo~&Ws+pcTn{CDNgbTE* zQfS>nyDsZgcCC`)&g5F1*RBC?104#j&wxFE&Lzb)fX&Zqe!#QM^vmnfV00aIMh6wk zEc6D|K&#OJbP@TWAJ7-*1!|18pi$^93PQ)x0%SuKQ6l2w$K~Hq3$z`LMSr6@C!5427Vx&C;(0 z@qWM5w|`0Ti+uQ1 z2^7PN;Rd(?Zh#x$2DkxkfE(ZzxCL&3Ti_PB1#W>`;3l{UZi1WOCb$W%Oax2>tOTqC ztOTqCtOTqCtZ*yb2sgrw+rO|I`67gI8`_DoQ1%yg?K`vs!8N!B*WemlgDbd#>%q5d zdS5gE^|__^Sk5N>=W^XJp;T{#0+9pqLhi^PIZr507`ML2x+XSF`S%`fzt<8Y`#T@~ z%T+(yj!nK$QarJBo|dr_V=YE4=xEG&l)UxM(;5w=YzMF}r9nU^K)aYUJy-c{$6iUz z1oA^^GE$nX!I+KF72}Q+CSgp&m?MTH%oyKb)WQfP@oELeIE<)puCYhlE;8db&_S-2 zDRW(8{Di86E{74?L`Vhtk&2Vl50a7#ACOcnNlB|C(#oIE6A2xckX*Y|LKO(LmsU#& z9qT~IT|(Oljb2SCNkWbil1@7%)R|DagnpLL+Qy{vBvpmfkJ4&`q&krrwk+UNtA+kb+r!CNw^V(CnxWdL1FD8v zqxz^Ds*GA9H`E!`Kt8B33PKf83seVnLe)_l)Ud89Ro&TCMXgXh)D_i2?NL+I6IDRX zkqhdG9FaF_fC5kzmOkpb}p zbe@3D6VQ1AI!{373FtflohP941azK&&J)mi0y+35 zK<5eQJOQ0YP^$9;be@3D6VQ1AI!{373FtflohP941azK&&J)mGhVXl5$Psy?1}Fek zL7u2C>Vj&bcBl#Jfhr*nWcZ%nJwtKG{d<06U>F;1@FiW}y;--4_H5RT{AlDyjUP3B zRJ$)|?pba0&$fJToA3C2NwMdi3z~nGA?0N;gNv*Yu^W_c@DTe6AB-6oGl@Tm*`V?% z*%}S_ma^u+7L*oII_x`oC1Va$8&pnT5}lxJDBVk0P6$SKjD{Ff#ps986{9=GKVpPp z^u(x&(Fh}6dUV9twWE!Ge=u&wX4+pH2pYjfBcC<$et^*s! zWm|iFVH!pNMj$i+vzQWVHlP<}>wqqlmI8eTrYkLMwEdgiDo-6hbebR`A42Jb8rVxDB~!JPlqabiX*DE$U^u_aJvu!-oOivtsdJ&# znzYRJVg9vsN*NlK6cWc=TKBzwmK~bnT3P=4=Bnn0m zC=^j|q25Bhg?bD17V0h3TS62I4JP^&}s5en>qTWQkiFy8Q!y_I^aqJfnLRvK7oV5NbT238ta zX<(&+l?Fx{7-?XnfsqDA8W?F{q~1uqk$NNbM(T~!8>u%^Z=~Kxy+*x8y+*x8y+*x8 zz0zo)(LketMgxro8VxiWXf)7hpwU3lK+!<;y=GGbP#@GEg`gES*30`K>5 zckS}lPjv=uOyi>0gwNy37kd$EAR$*m6P2WVB(;Im0ZGk~l-yc?q})k8mQav{(g~GH zXdxjVX;p>L{@R4Po5( zsiBf;lb#&OPgC#ozasf*`r3CyiQz@R2>ap_lXKO6=XT}J?{<3XrxqS8G`{zjQ}zTt zoT43QJKBY|p`9oT!Od_p+zdCv&2Tf^3^&80;nDDDcr-j39u4QiDGPyo0{H~;3FH&V zCy-Adp9cAGU$`&a7w!x9h5N#N;lA)3cn&-Vo&(Q;=fHE|Iq-ORJUkvA508h(!})N^ zLZFyHF@a(N#RQ586cZ?h7sCy31Ka>NzzuK%+yFPgEpQ9m0=K{|a0}c5x4=zs6Wjzh z!A)=zoDZjL2v`YN30MhO30MhO30UD)xDjrI8@Es6!ztQ^cA_klJ&g~iXa|C8a1E}( zHMj;>a0SA&#dbQ&K{Q6O?aUdSE!Bj;)5&f^Xi8CPFR(>wGY zY5$`oM)r5@^v_rQVp~4>c8Ou)q&&58C&pTgTF}v$^C)>UIZxHULfH;rUrK|3P5_^) zX?kr%Dvi=lcR`m@It1f}7}*$$F(NU3!T3uO%Q2+!J26N+{1zh^V=YEE5)aqYd5a7c z%cx&91Vu$~(PzSYaOF6Lez;mfD+&22N!25Dxj(5}k_sgCL{eKMl|*W$gqli7T9r%4 zNXT76iG)V2Amk(=7eei&(-}g)b|aK7p%e+pP!SSpAR*~gG%1gNGDV)pFiEYFluXrD zQgzd>4&tY2T6%*R`7>kpCgsj$+dcG$_h%Iv?=D|!TmIo{vi_B^dx^oGA*X8{b%!hH zDk?ynmvdguc{%6hoI^Q>at`Gj%K04UbDYm{KF8UMvlnMC&R(3eIcIauE>J8OaTswJ zaRlNxKjHj@^ApZbIJV|0JdE=&&cit0!Mq(psR?pg|msXiL;5biL;fnm9v$zm9vqvk+Z&Ss$FeIyU@0&%C2@!<*#xmC<$et<*$zKz1!HsaOPF+51Bgxk5r7kl6m)Aw|lu&!mee$&%cuS zH2-SmU*=X>jvps=$~bRs^@pRab!fuhJ!d?P`YW{ky_Nr+&kF2qD4*r^IP2S2OBT3Y z&0Jw_an$v-8npG*>G^}d3w+qL?z5(3Gp0&CDZad7aJbde8CS-N6Yhf}UT^{KPzOmeUhub<)r>cU2hc(p5?VaYtOT&QK8qaWbR+PYo`hv)Fd)AA+h^r z=9tyF(mls#lR}QV78DGa<@H_Gre{$>p$D#HezkVu&cK4kmqHQ}12$*AIz6Ma!#&5M zNl`~#bNNpndacVk@+_)xXz7*A4r?Fp3>?(>5*@p3w!Aw1)xl5hIX;}!`>5-wf)K1aTf5etor@uT{`JUswN#RFbj}*kr^7<-k=d-B0A$d%> zCXJSj+R?J>2!{OPV8wfmwiSawPijoohG$X7L-sP{nxV98xQ~uqMlj@*gH`W2 z{y8b~sOz2r9@fCDL(ihNg#5#hYi`i7;XXQcRwI~l(!mP%91A7|A9dYUzys@*wdPsW zf{=_W8LwA&-RWP@U|L9gqTlT;_fJneSmlJ{rAZO;2Q?4^}$im^&$So@;VJ)SFh#vNE4V28A5ElJV8*IdrW5l8zm3 zXWl=p#vXJy;do|J^gP#<1=`cdW+C$nGPE1XS!B0Zc8g^fEW2RY{UN(QWal9}57}kOE=zXfWH(NBkJzc79?8~K zOjp^Z$}UxQv9gPm-8I==lbxUJ{A71Pb_ZlPQ+6|DS1P+w**VG1Np?xHOOjoL>>^~B zC%Zh^wN>A0gk?b;Lmm#~6vKuM8JF>eYyFl3m%I=u# zj>&Gm?B>hvgX})Y&Ovq#&-SR_ep)Wuw2sWOq(>Ub6F&UAFA9Wfv#AIN3ds z-4ofl%g$YP>9R|g-7wh=lif|(-ISfb?EGbSSa#~LY!hUgAiFZzmC4RocFwXhKi$jn zj3ruj(Xz{zUB2vmW#=oq9NFc_E?#!=vMZKdvFr@8GssTAGHlT}V}UH!6ssm@?JA4D zGpFJ?d#I_(+K(Z!M9I=ymT+16$r33`u*v?Y<9{Uv^R;yS>%^0`bE$8Nj6JJ-Q*O?F znx}#y!41IqSHWw+O*kYx%Tsr=eD&!Tj7k{J7%FJHul{ckh3*s{52Nr3H7kka(ekrx z&^FMULZhHHDU6r4Nkr}txi69SM9L%*O+~dlF=YkfI6a|&~)@KazrapILbxdXb+l?gAr-)K1kFX|s0vz&`k^z(6YWG3P!Xz&HlQKsPt*k+LbK6ZR1>X1k?0a?hxVaq z=p|}`GSO&suf|2C_h54ZeSj=l!eBjN5~bWqF8hd`Jn@7CMrcvC<#TN zJk%ELMN`o~s1eFQBhj52>Y^UV<`|lfJ|G9Q9EH}nq@P1xC>zD0C&(S8qhaVK@<)eJ z0xCn!$c$9|&ALU@V6$%GM-xBlojU9KxJh;;ikoED)fkrXXe^qDK5wnBtRGw+eY(K~ z)#B7ZyKDHe63fQKZ8oo%8b!wBiQpRG@q*8RYjOA$^04E2eMvq>1&k#aE*O2cQdgbB zpz*DB$NCr4_R}OL&~bMM=!R`J1-xr4Xph(p#Yz)v9M&_js*072HBnNV#HuG2*Y=t?uC>xv-V(2tc&T`gC3Zxt zreewEA4{`xu_|DFx(=(Jq?U^1BG!7bBy~nCN3mqEG)e6gtASWDSem4Y#Hu1zvcelG zu?^zY6;CD`DzQJsswtKXc0*E!#A+gz40c0OZ^f#F^_L9RRZ?rjat*;+pNuuGrM~h~ zgIqP%NvssCU&dnX6H7G`FHJm&y%f(utYoY?63Z0JU91gaN$Q?h&SIrv+0TU8UFUa9 z(NEuBU1LF3F?KKp)sg78W_SKO?6=N6{?29P-`>^)kmMA zZs==N8TCai(Rk#B2BXes7OH^;ARqJvYK%sqAhZBgM14>TG#1rCF(K-)-igf&R2}t4 zZO|0d5RE|H(L7WYg`iewBC3amqONETs)eFZd-Nr0iatX<(Lz)K^+wIn=g0*OQY;VL1MBT*olj~q}aGOoU)N27e?i*k@^kfG}xyXu#NFb&+w?7#}^i<+$?bD0S*nd#d-@63YNT_%iqb;p2St@Z}svL*CTS zQ&;0C_!c7=V>L#neCn!j@adGMx1?nFSQ4FRITZTy1!x!O57Kopbs0o%Nu(>0ITFbu z(&MZuvAiHtD7}}H36M-jnJgC`+YxkK?3!Xp$u+Uwh*b&e@_8&ju`Y_`B$izJfLJfY zau7>;%@pgdSk7WeuhNcbN-wnG9r*;Wy)<)@*zaOh6HA&UiS@TwmBo@~5n^2xtA<$8 zEDuXh7-*h$v;ML=OH+gH3`pH@bj{|3JMZqCo%RJ^zx)6H1;sti8&&G?s>`9)*9w)I z(s5U=e*NzOseD~-V=Fy2qEnR}UqlE{%)MS0n?DOaK>qp0v>(Qyis1EgPP;R;X?P^=} zw6G9+c2~(Yl3b+Zc1g~U+@S!8B}y!u*e?c6El-OvA z{U|Yii3K+JU|qcWV{thD9oVuK1Qt$EeJH6-d5Bj%1 zd{kjK>_)gD^$`Cw(``K)><112CxXLo*fp>T91lJW4g~iAFZ$u5PPGCX!6tAH*dH7? zyxjR>uc7uzekmLD-v*2?GIr=URM{(4__@ST4Xf9RA8Zc4W7lrpR$tVb^y%{#RI?~5 z9EpTUWEGLCQt1b_E#fp$!ozbfs87gjT!Ui|qe8X7Hl}hR6HOlEQ1jZK#Cw^-wpe1} z#11r(NMq^fCFAwOn<j73F65Ik+o) zCA=lP6MX5Gj~2?K!P#Ix@FuVixGR{8Td2+lKLI;|mx5b>I|h8vxVVXGUvN6OEqDXC z4Y&)Ki<_ucIq;kCM({Q8R&YN!7q?O#4?YYI1ZRTVgSm5!i(4r#2A6>yz>C4nXS~z7 zbH&AtR2#r%uopNL><#A56&E*BZSjaxdOqA8o&@)VbLWbSYm}QP&jI^`Gr;Xi-sxTE ze&9<7AGL`4cB@CcUYvTEzpr~oUtai9_W*aC`$1oF{G;lBpDzW*>lUytI33&;+y%T0 zOtl8KrmDlb0d9tS!TsP%kAKuDS8y#gU4Kxcu*lfWV{W+Wc<{qr@ySN}!C=8#t2-J{Tny-->azCsFjIc{=}6^gP8^ zVhlEC2}Tes)QhMDH zYmS@3;|mnducTR^cu^AL3lz?;q}egCz7#943a{0PyjGvGmu(-T&yU@&f76@o<0mNccW@S1@<3ad9i<#oz?+eDDcyPcV0`xVVvO1K1fH z3eEy|tjYu8|()T04IXO3;2WENxBIf4?YYI1o!Bt zc&*;fYjpvC8Z=2a!cFiTxIdh4fH+^`dm_PpG3)g!1Kf&?o%?aBu&TsR9cSQ*?Y8B= zdg?z!p`Qsu^6D2&{`+}-QCVKN4EPEIwYCFC$ zmJ6Ba@-&B{H~vKalPNwfmRLBk1CnSg9lc~anP;Y0^8J)aP1E1R%S-hxTImCEk4w-X z!Dxa`VkKf7tc}%f0G7T}qJ!{Th%YzME(AYGde#xErC4&A2(dbeC;z_f;5^E?{E3x>i`oU9UQ}ip{*B2TOw)eye#rj9As$wZDhGZO-Uz-1-U{vq=i*k%MO1mhkUyNE!NfOGf#)JS@Qy4oTu57N(ro`jz1fUIYbgxcsL=`xbw zG(WwB8b~jZbR9`>y@9^|97v)_(m@iO=Evyk(ZlW|%>!wQ$c7%~i6l$o1zeXL3rK1j z2mL=UXAssykaQL#pK~B_AxRTSQb;-vQX!IDkfeYlRgkQZWQrtNB%x=`AnArNM0J-6 zXlv+UN=Va3HW?(Lhjk*!8%atm5Y>qg)lVU+9U!V-@G7+NsDMYmcL^W)yfmZ`Q4OkH{ zG%tnnF~F{X{Q$QERt9{Q1)@3;qWURBwF5*o?5Y7*0G0-<02rFvLUlc0Gr*pJn*n2r zz*T@l^EoK@0WJ^R3V1DWIl!>;9%w!X>pIH=|UOb=KKa5-Qp z5r}HQ&>RQVrGO0py8>SjXVJ&0;!i0T@MY7>a+8i?u%h-wdrYS>i+t^zCrSOIVpVC@NrY7dBN*i{2=1*`;E z#RNrl4Mg<>M70M*HEgSa*9))s7~4e7Ro9SYaNI)!`Y0cLBwSN-j{lqqOFS8p7)(r# zGgj76sh==5iM)_qBf^kiXhMF%7nxMS#E(qOV9G=$7c?B8;^FgX&@o{-9{=A2$4gAvd_^2R~NDMQA-h?t} z^0fjDf2?4oyQh-Saug~ zChYTQj=)(;7lIaGJ`A`aa5vyIz;l5^c^Ys*;7owE0XqSv0-RH@Ukc?0fL#I00JZ>p z6)+uOXkH4{V}RKJQv=oj>;RZjb{B3X?At=M1Yk43qJS|I;2ywffkSg!D6a=D51b3Q z9$**1)PSM+9F+S24g{o&# z76fbrpErU#a9BCqNZ7|gc`0xS;B3Hkq1+iTtQ;;R?Ds&qEnpwO@_?-Xd;QoV&;{&b z_>TP^tq*X3(wo3@3HI03GX$--D+EWtlmWYN8(|;Q`~c@Cy$QB}B>yO1z>Tl1dO``@73>O;8uh){%PmI)Ch*} zJW%q-0OWtJP_s`B>>vk<2%6ydZx+}ku;IYwe*;Yg?gVIky9-ZjN3-)rMQl(ss)nBl zgTS6ckK#c_JTk)B{#QGwmKY=(xcs2S26q%*#h|V|$cjUHG}6%`o}y>^A_*=GXyH+t z3M9EBDHch{wTPr(B*BFNEi>fGL6Y;2Ul@-~4APKo0%-xrhUPqlY|TjW;shx!7NiPZ z!mCZUXPEy@kUm6!B!3sA6eKw!DH=)0HG(8RBt?PLid?lw@ zB3m)CxgseBNyzpANr9YOJruONb6K(bYa0Cr+m-f&-Er7oyT2oZpI*i=&Ml0Hb{Cf( zyU(NE4=1GU;pipouL0YiUWQYsTNoMOOu$f`26zatBL>_Tco1+B;2E*|rBH4Fyb8Dx zV0Xa&fDZwN=A}?R2KXCbKfu9&!vGW0?)E@)Td0-*j0da>*ctG3z~q3Txh+)J1D*ox z2^b3i9s-;cI5eMwav$KWz^#CL0lonkR^9{6=b(HI@HXI3z&8Phb8Zn}>pJy327ydJn2a8D=?01PX~pm`6J z&sDm^c}v(|yT2!do?ao`EZ8Ct>+KTKEBE2@0-TC=hvSy8zXt3I*bgu{;7q_8Z{Se0 zJDj$J{Wah~z@Y{3CMN}+QMpfmatwG6a9iL$zyk|@@f1c@?hU!z6(%&~yS>1!Cc-O{ z(~CG(q`=Yqv=}&8FLvJOz|j!Q=w!Zm5m*?(l8Y>GFh8vVELU9s?~=l+5oB(BolRf| zkAWN)Nc$O3a-a@6x-!tvGoDR&XA4EkK495Gv)H9Twk$LixFyk`fTp64W|ssKxXFh80>hx?a%Wj3f&rr6LKrSdgTFqy&)A^#ZKH1ZgHnOF&r@0JrDZRU1o?(sDtn0*Mw$Y9P(TgCvJsdPp)tQZkZ|OB_kMNJ<2$1-ZPCWQC;E zTnsd1<3^em(h|US1KDhlWQL>^Bvm;RLdRiy?G8!Z1W9cPNi7aZoeN3*5|Y{(&Qrto z8n9{;B()_ZwKyboE+q9!bn5|*Q^WQeupwYKz%+n!G2l?123!z06L4+dPQa;v=j1|C zzeIN);4n38uK`;Cz6zKQFf=cP>M_7D7dcYKb)d1UD zLQ;!EQs+WazeKkk;21S*uK^nYb_WbA$Dlb5sjHNM4lBo?c@LD^0`>tc z57-K@*Lz56FG%VZNa`6#YA-lL4clvXNa`j?YQU6Ukkl=Z)HCR&1011-?KNOCz@C6< z0p|jSYPjft!4YcMUIRA(?h2e5cuor>^$aAnIAMds?Ijkb`TiGADV((*s)AR_=d2FC zsDeWODwhzH2P$9FBJLR6X4qi&+DRL72Mb(!_@WIK17s-xi!0nV*ucTXhQDH9J}U}F zHSicTg5fU@lg-1CrVXlDZC(dJ2--6Oy`_U;x+^upeM@z?pzGrXZ<3A*o?|4LA^R zXa`Da;2Cw0)KlnA1SEAc!4|j=@W2i@ffiW@2i5M1!r8U&aH=a2UXl32={lq^*uYV{ zB{+z8-t2(M5X|wfatP{0U||GH2C^`N)wS`R4W?N~OYXwfGKZ6Qa^^Io`a zkkk@{=N#W(V%IhQ{VFYjgZ6?|@Jjle?Ln3*C^WC|1gAVu`Ti{8I4Z!*esjlQa0x7` zV9^H4MPw-ei)$rd9Gur*KxgF@;HskNJ z0z;KJuwB1_rg975x4ZDfb~HP0RKx~Fu%}*3K}n4s#eUWY)6iv-E}IN|vw`!nqNO^{|IK$3R?DFsQ6NQy=ha*ZI# z4@prVwIWw7l01!X z;6cDifM-PRmqNJ#@G9U&fZYN613m;8nwLWP7~pS!{Qw684g*X~3P~NgZwu8DfboEJ z0XqY}4wxJ;G`EH7dcaeFJpp3@z(atO0*B^vQ0@b~6}S~}FTghd!^(T0`5ct50p122 z3iu}A@I#Q)q>$8+`#7lP0h|U{3$P<#U%;?(44UJhx)ksjU{}C?@OdKy1BaDk(7XrA zZGqPVHv{eod2;E%$PmnlQrQIKBCs%mB?noU!Gg|;d$<7pM+&b- zkhxJho4^bn16eMR_TeOZ)d8G-H^Sf~esvF=kbi3nML&GNvWaH#j{@1?z<8AloS3gx zKvU62vr7W$D=NaE^;>1UU?wE>2s{ZL`L7N}ozEg)Dfn3JKq5yHFG!YosOd{&g#+i+ z8t9Q|4VKBsin<6O30)MhM61q4U7V3*fuvL*< zJtUziPrC5KnNjxVn1_ufNNE`$xq?KCBsGxU$Act?TzW_{LQ*o4kV_m%x=2a{sRg;b zkYt6V)C>$XWaCDf7Sa;Hb_3aLkYt9W6ePJi5ke(lPt5^IoeW8>2}#WdNu9C3HuUUZ z8!!c6QoyRokkp!x)O?WC8T&kg&kpDTYXRm1YzWv5Fb&{b3^>pIH<--flB~q1Fj3)891yQgXTR@ZVT84usmQZ zz+Qup)Q*tU4f{Pq?+)f%uM&79VNcBgNu3Ny4VcmqlDc6Z8+>4>rv{$Wuup(;49=V{alldW5Y0jO(+3F+@HZadm13{?!5dXj z=%jK9{&}GCB`@N*ox#lRxMMKH0Twva{ze-t`p8lM7FQR*I5-0TM-0p=qG0R?j{!O- z{)Y!j{uzM2?+P^s=ny%~VXulX2$uh5fuTwq*g|fgslb8us&7v4#C9}0Z&btvMPvPV zk6e`0=ute#h(|^^OTV;(YKcL*k`5A^14uEbYY(#GkRFY6w1}tZnZ8Jh0tt`WR3OP6 zNpL{F3XfciND4+$BuHk+m4hVbK}hN=F-SwU38V!e8=CVJvNa>g>m*2V2_QM2AS`X> zJ;Oq7g7h&0BzY&0Qjp|`q-Z1|*9emQkQ4<{D{|E$$rDMjNJ6faJV@%0P^3kI7Km)c z$mWWq7$hOv2P6fagrsJIq)vdO9)P5FfTV^!bv`8ZMM&zCkkm|&)CrK(1CZ1XkkqiJ z25f&3k{U1>;7q_!od$Raup4%i>?A;8eQ6w1c{ ze*^3XI2dpkU}7dn>I6vY0Z3{GNNU(q19k>{9WXgyXl@JD^?;`UdjiG+fQJAl1rE*U zpxg&|D{w2|UVv`^hL!g~^EoJA1H2756!1;J;U^)fnINeXAgKo+sU0AxVNVU%5wI^{ zSUCpGaZp_fcnq*BU_bc05rTok$}wo(1Ld~B>w%jA_k{8Qz_4-*n)g8YoD2LctKT2q z)k|B1V{ag;D`yB47vT%=eE8v(6#Ntm4A>KYcwd8o0}Os(U;~2$7;M4NgADKlLM|A% zEx-{94tj9#fCC2(3>*aXh#YWmfg!MRJGUbw)}pS+K9<9!=P9JIbCM(IQO%t`{oeqlk`obeWqfAFe~chz!p6@fA2#i^?4vd%H8)D?cBo}}>(TIr zLrL);>+$iod1ol!E$Np2^ZPgcGFkuUMeH1ATqVe5%xqh9adfq$@!RgG7vW%cpQ2Y; zhsN+_ooHO{Ms*FhaDa(Xjw~Yydw-j!i2U~UX6$vh(?2_^!!D&6JKq|x3TOS~c({YE zu`UKH>#WHs3^>#>G~Rf-FvKyVPq3<0fQ*6pbKJ8}K3!AXu|Z3gKa_bbT?_-?J}T2b z9PGVML;TWOO2v7=h)(k24LkObX~P%#YF=kvR8BtJOysjm=M}~){@!@~tUi=@P+k3q zYy6oX8K!SNJl?o5i#1kG3C!LQ?vxxpK3!m6J%P#e$Gcv*^e&(_pqN*%YGz5q`a{!1 ztarYSp8RR&9Q87rV!ULc6q~1V#IZw*u?Hk4In)#FrytSi$#OVcPmmwJG}7@%qeAlM zPWPXZXyJ=VZPXU$>7$QJxv)o*)|=B96{oaU-g{g1Sl3=^_`@0JC$}R$wA5Q_nly5p zJk{(zggr{}IJ;6&W_2{O= z$o63kry8a$-z-0J>yb;3pJ3@N6JtlK=786<#YQ&fZ1h2bHycLNG_JH6k( z`NFr8s83ZpJmI20zFRD3V=g$|pL0U)g3d>B%iS}VzRxO5eLed4+6`CM?}8uKn~5^~ zBF6lOwC-OdYSlmTVMP71t-hr3i=$uY_O<^B%DEo8{Mhj>b|SPdW1*cU6U#PtXi9R7 ze@xar>`sIEeUzf_e9Cq5C(Y^+Ka%deis4S7)ZIMKr;jwuy=OO!7H-J&tY_C0;`$tf zLz5Sams|aQFvRIG*kwM`QZO0z(;(K+7qBD0Pj+;GGuM)guZt#vK=H^nnD>-O@rj)R z8UO#^yUnnBQRb%>F%c0nycKwfT7TRk_9sSfqpT14C-Cd=j>&2#rTOm-BY8a|D~pnd zsELh;=rnr60Oi9f%y&bLwK&2BrU&3k@G&J$N0W!*fDI2=OKOCMzP-w z`NHLsSC{ESzZT}N?S3s@latvU#B75&dJpXx*?A2gj+<|IhBXj-@iUvs$}&&hDJUxl z5#xOS^kA#c$=?mH!YadjIFjXZrG&!iyM^wnc}EJKn~OaZGV6Qa|07=Hp@QqQ{lw9x zfF=#SkxxZV^~FCJE{!#`RrU&B3yqwovL>Ov?tl1!upM>t%%67;TV9S+Fb9#(=6grZ zn+C>t)KI+;Dp{(;2K+v^)=)O`RSGuU`0&<4{KdzOsO%A+<9Fo2m+gt?ENj6#)tWTvBc969B#cg|}rpH;cTK@!k@V(Iz#}dHcLDavK;B&OjpXBoGYjI zJoSL(Qmm|O#_6`5+DL3mc-s5Tc=_kbcIBe$-kz`T24&F)+7-uzo3Hhcv}uGm-8%R5 z;u~SNPX*9xvWfU5K5+M%pj>DJWy&A5+aottS?OyYn)FU_Ox^kL@0#+RlseY~X2!cl z2|C7WPi?%7@5IzF7Ubt7{&Y?1pZ3?bn`uxZnbBUTorxu%WVy?SiDC(EY#+Z3o@k=X zKJuz*_Twe?%BwdSCw5<*GF)L5qOaO|ryYAF<@u#z!LXn2!@jHI|4dS_vl|IrzI@hy zhVFaA5|-STt38Mp_`VR@=f z496Bi8kJaQ zh9I-#uOILy9HgD5j*HiP;v1Nnc>TDs%Jo}cZe88heiz5^&Af|K=aRx`cmltax0O;j zE1n})B;Dzfj4Ns9!@pFH$U1g(NRZ4sKgp<1xKrp)jiCyop-~VkMP+-31mjPh7xxaB zkNufHeQchNF`rwE@*?i@BTVCN{n=Y_-RqwlyBw}JKUf)<*A{IvPxSa*`Q13X=_h5@ zPmHbvf5_#miq+c4W3zpNCl~Si#-cpR6mPmZuBrEv zOz~5{*@mn{NpF^ziJ@nkNbOAG%hAXEmOTSov_&~#bHjmIFV{x@9I%AJ4VL2NQ?&oi zJzglb{ny=TUG?U1%39F+>CxxQIW$YZ1J1TGR^8+t3FRnqb}z7{*K&-#NO&T_PNK12 zPI5<&aY*|QrC70&-ZOrV)(tIft#^t--krXbRVtcFv?{|}Z66Y^eQXT(##>D`$mwWk zRm5?mw_g#&+qWBxer?Nc%*A|GwV5dHJs8t}@uVxKyIy+Y^u$45-7rgdKnd57SYQx` zl8+JzkE$c~mW%dW`el2sTWWqUN(E?ZJ~PDI+N+ZQKv<5t-Q+mC>nQzg+c&tX?%I zB1qbtqa%6ywBjwch7H*!GF$bDgMXCc3-nhse+yjAW@3Bjb+lG4VEc?BKg$E2p%UL^ zy*Il<8)bGCB022}Esw&ro7GZ1GwqLtl#8186gY-Yor&dQ>Dd)A-TCk(9xLsCt(mrL zTG8=XvwrT&cBgrHQmQjwI`qXvri0DI2GK~ulT;~Kb=lOT( z6SM|6wvskjKXlMh*E_aG-O38131Mayes{N*;e2FTdBonsMwiSZ3nREOizMu+?DL@O z-`0hM%-FBzIW6RlNP8X`iecytIB}CgNl-X5NwA-`X^cul*O}@acFEsH`s@assg0H} z2fwjEpwd!t$1fqhrALpJPUrsaWIy%QQDM8eXvcgkdG^`WtM+GCHO09fF{%yM8oEpg zZ;eTJj>t6Z>A~Os5Q}c|0`;1$TMaIJI{cXuS4JWJ@9KE6#ugrJjd!#;MXU4ur zS;_e3eAd{@3v=D5XC~2}K5RX2_#-U0@A1p>wUZzM{t2uf|f* zxgzXl&E=2>uWGH^74GXO%9y-PkpGUkTL@syQQed{2d&T?t-Vy9Y<4%f<{9IPxZyCZT z`Dc&CXiB)fN0l!9@RvEyeec=}Tw2Ygn|Pk2cOM6~3It4k;r`bSt5KHj$$wj=#(xae z|9!ECpW`Gxku|V? z$ngx-Bs9p6?|VwJNr^UBmhVIANbo8PBpN5BPB~t+_w#GcvhjH%$sB82U+PJ{bcoB} zKkUW>XU50`F6O*LF=hCB3nZtpxRbZ4%6nB_e|~=MXeTk-EVrMG|4e@Z=gy1x_^)lR z48NFZc?1Mq=jRNhwxii5Oy7>6>Hm?uzGW3Y%pqs=k2T%ZygPpc6A#&xul`4m;&a-(jwMiQ1;dRO8z9Nito&80m zbYrAa;MvXpy>&M< zrZZV!GRrBa9jIepj)B(Xoc#n=@4sM62a}pO%EKrTGWFW*hSE zB@fh^rJ0?ydl36r`otXtZ+~OLM201I$s5xHOx`q-naU-p;rdPV8_j40XO~R(q}ZzR9Y0&C*CmbFD?)>Nsbhm+Qh<@59=ZZf+YA z$Dk~1dcM_LcZPP?4#^|Q~%gG=>!@xhI8^ zw1BF2g5Blw(W>nt#C=K}QM#6zR#q0)f>Yv71-wlS;V<}87T9Eb%&yZ^Z;NNNtX*%c zn_~a^MMw1Fk=b(whtJMtj`xq7N_!>g-xsVas>WKb`szxwM|1ajaqP46^Og{nDPphg z(MW$&j5W~~5qB?Cc$p^`T$|f9{B-A6#rM_u$H{UuQe{>Arm%27fc8ony@Cr_tLhys23 z(DCyxc?+2S-HCR4cgnuJuhI#Zt2}eS^?%$62iQOa`Wyy`d5-IzVZ3Kk>+D^ zIdx=7?_%ZXR@HUWSWlNz#nXJeWP7f|zg_sEA74L-rihnotx(1AnQq@#k!OipOIU(jSX}Ay zre|+6ay;~79eG*Z&!Oa9MW&8x*A-ZeI+xQTB^SK)pg8HMforCeNYMM0?BbuyXIQKs z&(8H&UQi^;skv#eVD1)ge@IR3(2sQs9_x4fhVGw)jZJ$aH7T*4$mVs?uN(;?q(3iJ z>D@0f zVr^xK@ve)KB@#`=`YfLMzb-r(zO2eyQKi&jYd7>OySA=v>>P!n=y)m{d6%zfRWZw% zqt?}D(jGE}I0?7w$zvg5?~<-Wc4%qqNRr)3&Az0!OkvjiIN~NL#l~ySqePMIF3Kvt zqr>JDo3DIja>pM=j@kDP{o|gu7{1*9dP(k@x$0mf-~C({Z6?JR>PsV?V?&hJIM?Vm zInKnI<>Z%5_+I*DG9P_T*3tUmu=3X#_1`)Tb+a+-za%xo&LoUcV@-#4sd@xW$4c== zXVo_}j(ye*tNd%d@J8+QBBNXu+m)xYzmC=D@3s}F81l!OY`@;G+t{Ee)|vFoa>)!m z6h*4rxp&s2xA8(vzlv&OO>df{)kj8_8j9aub$ox-SDY&JD?Il&rA0ni7?|<>Ny9&P znp7M(CU1X|&BREa|6dqJY^1Yzr|N#ky?K}F^Eas!Zzf)HnY%O|oR#pcY1mwgqs@fK zyC<@By~VP0%YP?H&gqn+V0&R?z38IQM|&n)R;$;?UTTi!RgF*@#RbJT=yd7Mom|e2 z^bzTt>os{=Xmsdt@i*7D-@!5p)pZHc+y>Xa>kU0qVHwH);!2m)Ht+O5qX(KkuZLa4O{duO3|t0lN&oN^a^xm`4*H~#^J9vp zPN&&J<&o~s3|h;yt4~9m3MU=)?42CHJ{u!_(q6JgPxQ@F$3)U->Pg@$hTMZw!90b< ztqlUp`0&?O+^r4b%bOpyFsADClFh(5tvuQz&-cfK^;nbhZK`EAYen~~=4#K|m7e%-THYhG|v z&Zqb1T1TX3(?bo5b@&!MgNn8qvCp}WPdB=rGjgxj(6WAIJ0nmocV%4YdT{lxX7b0% zl;VNwF`euw`k_mYYF%93FD&n+Gv>Mf9vG`_U`Y#i0W7qx;AdaIp}>gP-t&v{ZF!nGVxuXXD^ zd%l(;C5Y1MT72WsD>5ck>&3rkchbg_c^s6y9Vo)bHs}`!$shhQhpwAh{-r2++Ot$z zX!cienPs!9tZ?a@Usup}xsCcO-oaPGSH8vdIyWT-?&Pl%2kxCxDLDBMi`yXCp1F{I ztnVc|-(p|dl0o?D?yN9w+aN?*|3y;IXUDq1wtsAUsrRMo7)Kvovuus<4lW>(N4i;Rk9@)!u3sJ*cUvsjIs(C*Z%|T1{$j z&SahMc4|(l{mKH{R^5Jbm}`C6lV9N^P@rndN|6_rqqi1@5KAguW*V(?kXbM=$ITmj%*g5)^-F&XW%`u?fcSWc|VN zHcAE%91E$c#Mok^y zsqQKEDt0J@^y}r6DgFH=UQD3hOx4+qYWa9O@K5f8Q1|^uSGHe&U5px$r;?lF#V!kI z#XJ+&Gjo3JM{ny+nX%q;?_SF4ytR?+AmG}eJL)g< z_T~Et@0Hxbb6?ml_SNds%J**juc(B*45nZEVC?{>^$-4aF+VO}3)1MWH(Kfq7@>@9 zJ)~(y%T@UrPayq&ziOuOH>|Kyc_nj*h-i~O%RYn+A8~_J3>(jkzSdbI=);@$T~_N{SJFMEE;wSl#i6T#s|tRr-M?3{D;Ra}p)OwYl@LDh;Hi>l`Cr8O zV%?jPIS$-(@rHP@KvF8~zABksXo_$7Q@NsyT<-qRkq7l<`VZZ5e=0<#*_p7^a56@v zOho(0dv&^TeT-OQQ*pg^VyvAuIjqU%VLNLd-ThBo`jg8diWYO%xoN4%bkk%-%xzQt z-gZ3`qf#f&D&}@GF7^vqieGY6uE*UDWxk(WEie8C^+i$Lva^w8>=l$~CF+g! z8IH=&m{yEO{Nz$)d0|nkUN$Y)H$8DUrsu6gE@h^S@wIS8zv4w#t4C6+J>zNQS(Bd;K=9nT?|@Y;0LH zKVVh0`CY)<_vrhd?|w4a(`7fj^ZR!FF+UYr*TaloVr@=SN9m1t-q;>qGkU9ym;{KN6H#ae$z!^2K@@m%GZ2afkS-=*^Y(Q(?Xn}d3EzSjo36^8 zokPD$l)SI_I>Vpr{ysh#T!V43>t9ykigv4I_*fAguxv=j7xk3;>#=gTU8P@@Sq+1~ zTH4b_9IH3Fqi83-n)?n$?@SAeJ;_VW5y9cbXD8%Nnk&&adwv$EHa*OrZ{X1TA|)@3 z<;#n3?pC#)#pFMoqw%Sf&U@{4+Wy{Kp{wz(tW=X{}+{I<81a5#y!m;Dw8OyHcaH@@cgJjFwR@|^3K+|l0|cCVMV*IiPN{` z0)?wOr^mcB`(Aj{7j9p1?yip=aIw8&??8X|Av66C^E$>|ujc%t0?wa4^H=_Lk>dp<+YJqN%inSDxPqR7zcHp3y90ILee#tUq~!dX~7m5{Lcx$}atd zRi)%+u9sY`9q*4FmO5E++8-ngc>FaDO0(ScCdN7ud&P5-CJzRe2FxNlS`CM6<3FCBEY zAO86K)6NF-p%+rx5`rmOf2dxoW9orfxf*p;8g(T!C9}-Kj}9*h!84}PPwF%lT{8`r z4%!oDe%W|oJ7bXVAN6Z>bxfm1tDd$p_mQZ!ho zXtNXA>@(Blx@Md`&neNa!rHO#D;-o)^rZBq_gzc?I&;92N(CoQ{KFVwlC~$syG!x! zj%yc1WQ`}^_R<$Di41TP@E(x!XHa@IHq*>;tBupbfi9Rie(Hk#4BM0T z^KY&;y3fz8A3IRp6FmE*C!R3)?QhiI+PB&yBX^#kusE-5XsT1tW;vR(IY4{8q3KAd zQ`Pc`)m#;aBilNLTSt7b%+AHL^ZUQzl{J;cBwpSha1XZn$a`S(5l;_LBwCqsws+B>xu-2c(`c(|DH#IGbbJLc%Eyd?wC}jvE(T^_r23z zQ;(cF@6XsUGGf`;>dBh@u3vt#q3^St=i|)s&T9AT_*SB@eQ|ejDsGI3N=Q2UXls7x zqIoB+qu|uSp|R$+)|}9RnU5WgEh&$dIF?xYAB81#(vP$Zt#oWWYyDZW^p26e|IIJC zxz7qoGb6J#E3G<B~QD8E9hj31@Vo1|&CHf3s(s^mymf-g*=6 zE4fCarseR@Gc)|jiuh{qdBv@u)~^M$hlFh`PT_1PIF5C(|7m+i*BVwn^04SRolvDc zJ0I2gGvfBqyq2v;XYANVoYFq5X?o4v3mxDd;$U&iyX{Lt%_YH6f;p#31&qnAxJW5| zk8Vv(sx$BUaH_;#hd>`oQz=<-BGHfLNMWm6`a-E!w(avKJ)aEwJ+d{=X)3idS+#C$ z(e7orCuMzJ-tAgsv}tt9DXU?&w7iwbdt|PNM(@@n`IOUu>_F$Ij^yZAb+%dlYL+V1 z!Pu9TUJrI_3qE`QDqz9P1AffbT$^HU+pf4%s8<;JSU1#bq=i=gf|~W?8l}g&)%m#% z*@7!V`|ahrSx=6fGx<3YRDV*PTRVYT(1najpO^AQ!T4#DjeFe5kNX#R2R|}8wCQ@s@Hh>K}d36C6Q;`Wd}y?yK({Sn5!OFRU+mF82_Y}cfM3=&?8Fk`1U5n1xnVN@o|fNpKzlH?&kb?`}Ufn|C&&g?~%G+w7!c~UB z#-8U5REhP)-D{Zp@4raK|L=&DVJDg1<~$tOAjTWsIK+;=3GYPax)#pX`mTedp5!q4 zh6stwNEtqHm?VUZ>G2*z>){a+_5XYBXj3@%+;a(O zMk!9($KmT~(j_0oV>KM2PqkO|Y!&&H{+?a^R=-_JbhqJ2`t{k%9&-(JN%O}|=A)`! z%+BaJ2S2q698P?eU&21z(e=sK^XD~NAv=slv|S~<*NC-Mx7wuBa&+O;JLhowlCs+N zgeV5Ju4<>*F+29ZX{%JsvAHr(LFmX zC?Pd8JbhM_wchyanCI-CMtbGhKUzly^%V6A@!Fw#Ytq++9p6{B_KpXn&NeT|al4&p zuXQB472eAGiBqm*U~qvIj1gP}#&?iOWtj<*p6LyZoxMyp~Qz zF#DO{I$`F5n96oSN3i`n3o`X6fq{j)q@nV-opm199zCHB{^~>#d*0iBt<_z_Bdg$|3uB?{7KfG3+xZ%s)5^q^En>cN=_gUe+%HSceccfU8I@tjMaeC(*b8yUbU951kRs9eg} z&Hvd3DT!}PN&k-#q2IyKl)qE z6_D-!;kB3geCYy({XO=S*s%k{LBBQDMhypR{Op^#kWs%-qzic==@7UHDS^gc*^NPN85Qj@=T zj&msmJFRxt_Wbz>-j8Mvdu7;964b1s25#?7N2t!+x2m%@`(OWKkAF!mZnuCw}Sb;XAwd^No9 zBL$@$IN{gqAGeCMUWpLX`rYEW(o!SvazhjswVOrUnN0cYo$T+}#O0_wIQX~oTn@2NTO_Zf zGGEBK3|kMb{!-svM!qU_8m^|;zcP!Yi)ml<<#F))5r0$3t`_b`h2qyY!fb61{5qx- zE!qr}*1w$&wQPqkivN_;xqKUxko4P1yG}{z&0Ton8?O_;`wDxoLCX5i5AuH#H!KL` zUq_`R?0Apc8TMYj)SDP#e4)1>Vkk2rfY`v9IN$ucQdv(*a5=l1<13*Wpb0r zcis+m7;0wEJY)aHes));n(`6VBD4J>jiU~i%nOCfFSML;4Bl1b?mbI%m-JAJJ@5M3 z{dpSOiP-S}wbAuAH2&LNgdcrQVuuN2irI;s(#NR``eplzFLem)nMpGmUg~!x2z|Nf z@0L2W)>>mhB6N&$xc z=cP7Y&VNI?^8DkJ+}Fx`u0Kf_Hza7Yfy~*y36_Sm!oP1zs(9tLcb4`>AN> zeOI&8BIBTSj}3ZiqDSxI$6fgTqY6V#dYinYlO2Qn^A3@&{gTfbEw|j`BEOhWw}0%g zSkAT#4DPEy}YN;@E>qx3r{Wf^llxL9r>u2jNQCrM-TIY`FLA>PGLfN6W< zTun-rW!u{L)vT8+W)&yx*-zK_G99XWUbdJish8)qekLJ1!I;ZDyL)vl1MmN8W5Be$ zMKp^0@lTP!@R&}4V`ms`kNs#d+6;Pk`1^<1Kgvh$5kLFD*)n%n#G&8!>5rrCLrW6L zwHTc)6OqPm=}M<%o(!%Wn(yC-0wjlzaFz>6l*dG-wFN}>(MNyRs&qXc{szZ{vGd{g z$ZPmyk}vWTC<9M1Wb9pF!%9Am$WaIS8r-b<{K`mVm{&*s_F|Q$ft2qa-k+AfB0xk$ z!STX;hP0S7ne2)BWDMWM>(f-$v4yP#=9qd|~DKgBbVDqdxYN zXZw0L*1}~jU&g8F;D+K4$g`YICTdJj@R4eNKRwctFH};K_m}d2f8qPMfN~-azEaR4 z$FHfP!`2-nOnA}K!z}ot{Uq{a#~+`KZZ+#CaV7chu(gWkr*<7UNcxvJ>m1$xm|wpp z!I6FY>nq#J@`mIX@qb4H5{A#MTH(7rNj0(emc&OG=A;S^%f63UJ?(v*|0Ee(!K%bH zQh^FtFW!0E_Twi{?GfRqidp4W{iS4FSM&2_{CZe7>0+I^;*F_@r2JMY|$5$GN4-&hs*3vetvL(OI}*(+q)o zm?$wx_e0rfm#g*B%e7w=UUA>DY@B{DLsnthN_+KqJzq)`F>OaIbK;>%{5_{$^E*_$ z+_c5%*IpeA<;%}buJ2~1`zVzxUmUdIP)?|ODe<&rj;T(ZL~ztBZLs^>^V^>jC9}mU zasRSz3tFX$`VM>E-Kl4})FsT9xP9?XL*jt<)WW;9>vCUpavZ0_hAM;QhH@=R{Y*!O z8}9EUhFc7SHgs z1I}VL#j z(tAy>BoVu!@}J$=dvX)udE|ND_xF7uXXk90wzD&{d(J%`{%glB0O(@Q!Fs$|gVpP(9$krtbrJ|Q-91|MdD00zD_>lj3T{u4y~ z6H-%WrN(BCPRO2>nNG-paTfkw&!Fd>ARLgKl^vTNmoRWvdR%sLM!E&+FtFdQl|lP| zf_z|RY+QD1DzRCYfwx=5Kh)gljOh{j=P5j0fnVFoHFp&X^R_kAR>X57EUbX*M?S{GT zCaKe&NN>+TPaBhv5RWL*24*JAoRyFsHxEa0oM~?Cv>$p$;`BhHOslPtF8>He%~6QR zKkaYkeb+z2RBITbvZmFT>yG~jjoT1J;gL21?`9`t;S{6|jg6a?9-EneoIQ{0aS*N? z1_5ak5|R^>vJ>LRWM?L%CuS#c5k@AbCyvZWPaKnNR!O}5GG?X6V=IHuwA)*D?|;PV z?ZzYDL20*Ijot1DZS_b*SjR*-Bsn`fA#+$peDbv9giJp3wY|tcoB5ifkVJ5rxT!t+ zzHa#Yrp-Wu?wOpPoZXv$fg0XwycMEhh!<#Zj}_WOD^E~hnBiD5KerDC7b|ptj=X9V z8pDVg3F%{!(`KY5%L~=iL^#nh7zzUHZQXqzpj`D;sm}-S?98w_O3f+l+v1tZp3It<4h_UI0 zBga+Mld96K(2JlMR_IMors2qoZuW-g=Af$CXpwi%ic3w7Pl!z)Gt&xlp|2;{VV)KG za7cj%(R^K|VTFgFzbDvWp%waZNP$IG7(l2Nb9D^#gg{tgg}XVVz%nZgBAFhu!eHw6 zII1W+DH+#7^M5jb!#Jf{cyudNtR*WUo4Xw={0mljA*QFWDNFbv3m-C!uOvNuz<^db z-wcB{o9b$bor_X%Xw1yaY>rU$`Fn6rO`e+7etPV**tFR8G%!2K0xxqqIM52O!b@K8 z3cQB6r=jcRT?VFRWMmS`XjwIyuTHEQnvls24LKr~kg`vIbUK>-jKK++X(*e~$AhNL zY#22wIXyc$&gf&O2BS|q7tqYr)wBPssmXDK+=C;R=;QDol4ZQwL^Th!r-N8|9ER$aw=xP_rk;ddB^I6m9B8S$~%3AOx)70z)#p}={hm|jhy zSF!u2^P45%0!hVr^luW=Y%ae zkn4rMBoEzWblQx}jM)hj?;VNxYeJS43dnmDy0uMmwG~ra3Ht0iWYAQG70QUMaxZjr zdE7GzoRt`~P|dXk>H5!fT`OL5g@=;DZ{fVH@I5L02Xy0^wFus+=4-|aEBs8-{o;jw z3-#-ND~!u6+;{nB0=dU~E{*pzcO(JTSj|Mh-aj@q4kKZ9Lamr?g}+GLo7@mw-Gv|P zJ2lJ76z+o*hC3FPjOL#x5(qVx$22dzN^BSitBJa&9A2qzH*VrmB2u@y;uaanoWE7M z^{>uW%>Fa}RuzW*Z=bOA{b$O)ZN|biZ;!iwEqa?9arcC#$DNUN%V;>kz_?qW3~(bw zsSYYTu2u!_R6FbWhYP4y+Qa$qjjx5uzXp1d^!UWry!S|yp3-pK*gC&t;?NHa$Jx}M zj(zgdSO(qiaA~=%0V``F))i~&g;@+=SA!DLMb9y45~&FyjtCdeTCkSfoWqeh>?3i1 z4D6R?WfAZkZ)uH^RJV*yj!(oCfVHK@cBudAMwba%SqEzFhzY@%QKQG=9$OiRyJd!X z07JX)eTSme_DHNNiPy~wU16T#{Mx!P`|3-3F~6F(?(U~LH!vK9lHZ^5ZD_ zx4k1q?@+SNC>a;yeopiO&ZmH4I3og@dS?uDMh1LHJ2FYPvIMeHO!|VT#XW_8A7f=n z)Q%3>m)c#6-^x;`2|covnnosMrY5IbSvoaj;H*#sW?8cmL~>_kGpP}$-P^6viaDgH zpM`e+cSfvi4%ygT&XIuTa|Q&ofKwFELXKWQi#S37VfOwktr^VT-zHmJh7%}~9E>kn zv(k*+=DuSK#h@pJ+u&Od!+}eGV3BBh1K#9q&sbqU9N^G%Mjy|fCs%Y{y2x?an1HTCS=a+f>lHQTu^2dK zCt}br=DC3R5>R6~DK&PUxbn{WY(62u$%Y2+Ko$uT_ z2}KW!%}No9mcV=oDDzPc@40;krY6teH7J_*yc&1&Yur`$>{z3JXU7^nc}&PkNuGgh zvPlvaj7G{E!De6M;i{YBkKwrZYXB*1&>e=2+a)SiB}BvzrH&WwwK1t~F7`P}T`RmG z7NJrP_ZQ~A+^RGXyKg7g zx0)P}VN;u(5I2#33Uut==?QaOQt|oC=L6zCg30&W-0Qah|x&jqfO6;V!Z` zS6RGvnrNHW(Qs7eyp==4=8FOIMc4URe8o)b&_NU(sp!yuk?sUWfnnaXj#k(OPR_z; zD|`YQIW*RAT$*{Hk&s~*?B!Jx4abR}m$;T$Co8;5eBY0Ldq4(x?g4J0{4S9t47kI1 zZuIHjYy?Tuur^K^6I>_03?lyv5|c2pDsf6YXFb8_)4_EF5n7uXPEK;%pv>fWtCFn5 z@b2iGHNGc*HwoVf<<25mX;zzxd#tM#tm}V+Ur3g&WN=nz7=0RC?kOT0a-YVlFpIg1 zA6HqG*;W=w&|IrBg=CxW37*Pqe!)OHg134q3wf&;y9krMIj#&_nLCXeAzpNTzS2RK z+_F;VcHrwObsiOSJJKC5l=;&*JfB+TQ_I{A^QilOJZj@v;@k|59WO>QCSN>063~g8 zdtwGRS$@@G@edYp_y>!r_y-qO#;k0v#S!VL9Mx=2cQ%LS^KtX}IE8ylWi}?B9zD?+ z@dH!Cv3rY+qH5J=Wg>Jt&OMYzK*dujyD8w#|4oEJ(MIz3-Mmb%bovuDkvyW@I z(}mf8d3>-p^{G7iX$;Z&Y>4c<#7acp{qh&;Q}s)63}J2?Br&h)K%GnVm6WFBfB!Zy zUl~1%hM#)xOJc0xTpSTC8I;wC`Y7i}iZhX3gt@%qEaEWd%3TCpYh0f&Us?QfBdS^X z8Fju?kWSRkjhI3tDqdD4tLNfHljE~yTS%^dl5La+ISWRwCF&(TJ!DPcdver1oe=JN zzgQ4;et7qngs1Aq2T1c(ksGM=>I! ztma0(L*kVEcAPNh1b#vymw)&k>F{#9qf!a;57VgfE&n3fbJzm>ClYB7sQ6x;hsg}=s#)$)56(C}+Jqp9gq+lOe>zH?ua zTvf}zA)*zPV@YFY-rho;tA0B`!{7el2~yOFnbHm`*G`kbwHK++vFw#J{F>z_YPxdO zQ>x|ZasqNs$B|Y)X!WC%^rxXx8*w^+0XZx0meW1rUnFwX*-HdeB(A05=N;6?c{FOG zWYuFi4KMxEkAS=nw-Hda^$p_i%Q_{5r@YNyQuBq=LlEdPkCQwtcMfMGU@}3g8QnK>@l2dTAxDNqu4JKgk z@CRsk#kNi~UuT_zNSwU)3yH(hzwW2bCx_N2Je7;TpgxsvS5ni7Ss}z>Rh{-E&XJ*y z5%q6pc#~SHnkCEOtJjcRCr;KQ>cv}1X)X#Mx}S(vm3%;bJ{{4N`V@tKh7*Uy&2CVi z6R-FXP`Rc9v5{BqBW|b^(d9JZ zxzJK4pe%ADiIX=en}}ZPJdH44akL~nRp-AXNw;qqO`WS&IH}LR50^>}Zgr#nZE>bK%j2lKH^LrAZ{sBkE=OKT}igMCs=%j`SmO&JI~g z`pMbbm^du&*Pg_GDL(ik4KGX@OrxqEi=di)$41id%URwu>RR$$R8y9gM2zKmk0#9d z2W7k{ZE=oNSN48{Y<9wdo&Ji3Ss;5QkG3KLpM#=hQ5w2B^#k-)y! zsdMgxr=;u!n+eb94JAahGK_*9Qm3@Xk-KRbVLsVpGVxP?xk6ghvAiGUsLL|5a_)P9 zW~XZR2Lu!k`(83uah*gi8uT#@FZwl7PF!3|;`#j87Q|0M?+HY!)=cvs5Act7}L?#~Fl>3N8)s=HZqHu~qtQH?1Nc@y$zCs-4Py32S z6@2s&0VOGaSE%Xu!W}fK^1uxVT&IxaJT~%MVytTXc$%g|WwA6ox7{YG=fCoZ)#HQZ z#8n>sP)hn>7$GcqemvnRZIVG!=F#($D>+ z4*$G=pG3ZLJx8*k?4?mBdhaIvRIc}@nvJQ_`&CuQ)UmY33sRXMhY@3^rb-L195;|^ zu1%Lg^K#mE#A?B31vI=Qc9ER8)GvsQgRPp9!Yi)RF{ty*vj&m4HhU8xyxe;a;VGST zFV*BPle?ti?{|@;g;5KM)#5RAXf6s%<`U+A^2!s0`D)Z!8dbLR7^x+)s=&0;0XXkXdO!=-o zO}62@bgBpOTzcXyqMlbIL&+z4uH>icJ5q1OH@SrQ?5I~rio6B+r022*S;XP#N7@m8 z&y`I#lb(ylN$N#q#|VhYN+yI=H*XO02jV`WrmES2R8x=>N7PIDJVQ+vSER~G$@`vY zRsC>`I)7LeK?s-nc8!sk$!cfy`Z8U?q*GCieiZd02@NE4*sB^*WMWlq1 zmnk1}KJ~_NlC9@1ga)Rlc`a<5ouc+T0wQqOnIkOt8IDCDCxc951eASuLD2tdcfBPNkQ*uCNUj>dzIdS9VF-u|Flf>cvu5!hd4hbav z2PxtIYvjx=+V?U_rNRyPCx4{ zs5{PnRY5?GXLn+wR1KnkKD#GM|8uds%tfz#NXJLc6Ej;Fi=8{&|`aDRZD#he*50LXK5xp>G5@9~xyofsIy^ugs6wRGPz=a8o z2w_fx{lt7h-_^ue-qBR5xwPkD>YU&Ed19=v={h1&q#PpZ+d|fV5QoK9I!AKm2RutP z1)pvt>Q}PnlI%H2!G!r>`Fg46Jxys;)wV}y)Q6u=rY5K57XrRs(uGDdNI#ad=Ps$1KCjWJ)vK3~6a@ohihgjNE0w)LiHCDz%q|*r{`r#x zRP+g=;klpnrm4Jta`$Xvtgxa#)fD$!O+a3GUDE2A+3RUk#bdA2T|O2bR$If;7yj)|oCg36zWjq?c}gs|Y{B55suG1p0o{Lf@!b~d~r$-eiS z`owBM<^w2yNZo|3zp-0rJr3NH4IC4|KT%8B`$5K6k7rAZ@b z)al$*8g=Sn+N3*9G%X=1u3eLxn({+KX;ioOKA}-pcV$yk>Bx)3&z3{qkU06VH%J?6 zSB#?0mzrgNQRi!0TM?~_{vQ*EXG*3~pMy>0iAUw0c0}v=+9;BJ$sb*)bHQnO*mz?4 zAEck6dAUUEaFb<3z4+;urN-Wptd?y0mTJ!Rdy1&%j4Px`Il206LRhlKPQ!D*k0Dks z`;vgpoZv~Mjp8R>AZ1=Tc}7Y);2Al&G2zryG^j6s@pI~R2lXjfRz{jHC~i(b;inA< z;ptVs(VXT)w-_4w)ui5v?hfLI&Mf(;ef?=vIW!^aU%YvW6qT1x zhp3LLg$rm@!6-V^b>!_0r{PyWh}tbVe2Lg7-1sI9|Mu4g)KoNdDd8#lWu|2Q`y8s- z^_4+?)N_64=**e(o~OifZ!BrPe3Oh08^4PtDX#8XNqA0-q{xVyN2%W2Fbj2l?^Fym zRV8>5<^zA$C9M`rEFuo`r`{wEue`j7WG_(ZJQFd`Ck~6d%awBM39 zh_24*Or3MO%p`@Euij5JhhFPXK>3m-1YGfd=|Fg{Og>MN<~!y|^*()orn|7?DyfZk zXh-JE?Q@xiZ{GB@%MxBD=1W5IN#r8G5ya2OlfID5*PTu3{d~LYJp9Lj)aToB%^QkAB%2{6aAu)FJB6(3q$+^!-QAPJ{r#@%CqHNijfAJu7E`NI%0mol| zc%Fz}^!$;;x!7(jv3mK_H4@=fS2#XNG0s``OENL`#X8!RI4X+fkT|D$O9%4RAGDcu z?y%6#&RKf!agsFe!|#YhLBVc0UmeE~^*oPj)cNQt2X(Iet|KAb*mO9tS{2=cnhsx~ znBrX6Za-o6ph7fFqB|qr9APL1Y_O>OLf=(leVx&ddCOSl#rfJgF%2PLfmEc^lC>KjEz#; zGh!(L`E}@w+Og;Lek4w5pFfC1VE{ce9%am#A*8AnT@yV&L5o2Y4iSH88D@&duJfD{ipr)!P6NtL=tx0map^;Shl@Dnu zbC;Zv%6y|CVa{7GAER74-c-(48+pv~#bR2gj>0eL9KcyQL!KXgI^+i$b+V;5F@LPj zht%g_^KjBw<>X<6FfY12v9a&rC}OpA^Bn5DaZ-C}8?$Z_P%%i(Y5t6VHB?hPtGlH2 ztUMvljhDw7`?6>Y>?j*0ymtRQ5QSS zCCueB{v3 zeC&Gn;0roncb-W6lo-nknM>2OeR~5^OGOGDDLc<4(K8^&@mTq|v+`Zip>umPhQ(eN9E3v-O~wS&KVyf zab}Gax#-k?vqa)}pZ-LmV3R!k-sepxijJJ|Tc}St+fB?D984sIuYZXiNjORd3@6*T z5?)8ng)il+&f>@o#9_fe`3}R81tUo0;#IUka9+DIgMi}`?jl;J7fAh_8$|n4M|tTA zX$iY2^K=$|7e;taed|F@1?T9D+HvA3`8G?*kK~bmoViZ9PdR*XA9XH|>?vv-S8`=w zy&S)kY6|Nwq|W)4bJAK0>XPi+*T{p`D|^pMHa5&8ghdDD)2IWl#gkf!9{-YnlYbo} zWfsJLEj9miKa%vwPI*>YIB^?Ey7|}r)Th|LkF*2}5Qjyv(pvJqO(lh2u*#F$-HCF& z7d+8_mhhBxpeGv6fF)`5g9m=KXRiS5*?` z!W$r!P=~~EoJ_k%vZ2kVQCE)B1AS*nop2g{Y5NA^u(B;3+&T7T?jdcQn0AU7yLj@b zRQT)iHImC!eQ4DA2-*}o@^$&zMp34})M_MU%g+2UlZl_xjW<%ClIU`hwBWdORxg%+ z9VDXV56IYk`iFz0-g6ga9+m$Ny^i82nvg~a&ps{Zw77t5!|IUgb&kq&beifcj$Tj0^FNahh)+7`tq(_kai`x& zV-Kb;k+$L0Ns6;?6=BW|+DUU-kR+!&X9hhVbd)ZuM+i?vO(fvlV3|2oJTFcCEl+w4 z$x$|L8j(2ujC`DT_4FqMh?MdDlgYb?Xk`f_#*PJl$%B`jr{t*OPwJ9@g+1iPr|6U`Bt=jrsX!r-Krjh|%jgl{)GGhgI4Ex*t+ zdgsocf{C%JPvq-fxtnPU9K|!v5sC9tWpFvLdah(FT0Y78Z1X76{HGV1Q%yy9bE-LC zL~+OQW!axJO(kRc67_;%qz%WVPwyr+%B`=G6enH~Pv{tb`1H?6=Rcyz7C-r5p!Ls) z$HH%Da(cq>S!q)fGRMYF<-ey49GVdqn>s!=GnwDZN}n;=v2iKGVrR&EYjk>gLT3Ne z*sLu6n_{mq8M89u5(XxxCO~6QfE#!y)a5_WN2o6URf;HE$g-s@!=V*0>kfn!h`{^S zZuf2QzOCDTeLMWu9$E>w19TK+C+IB7E^wD9BcZD(yFrvFyUYGPWdEMB>?Oe(AhG3lZ;h?cD;LYxWKo$w1tSdBP z-Jm7w4((VE=*)UTch(E~vfeO|Ibay;3u9S-n9K&iRCYHcvO$o}2E!~C4fEMZD?eVd zl8EqsB&-xx6%DIMe5RrJ3f3+9|4#gfu&wZPwGPIE4fz`Pzo>)p@GzSo^bkU_NcwM0J;=lKlgYQP3_+bAQzAwB29xYa_L)KPl@$20= z^X|{wP-eKH^fytyWum-Cq6`rztu4^j;t;JT2NGA+K_=*F6_z`|L3-^9{KVhKSk_!mX}0I{u4#LLHVf5Y~04MAPlK7oxA+bYCn#j>5< zuxp7e!V?ptyzCx!j}-o&SBe0!*6xLWI=~x^>muAu8)Wy7;#yoHDD@U4YLjz zpt>>j7+Bc~H}UJ4;%|j*lEnQouKCmrTU>8(@A`q;lX}-*Z%XIO=a;PngZ&GCC45RC zi=Y8wJ%fNg6DylTI}lQkYYXf|NEM_$m!#6Lh5z0oNRX<(I8w7|NRAh^2|fp&?0N8K zF9?ENXqZVb$Rrpf33BKQLC_OPa?;%Jc7f9*ty1)^8&+>SeA&BxeU!4kf6!c%cv;|{ z=_{+}Gmv*=uYiTUh7zwq|N6Rro7ABu6QL#(p^^y;j&(`B3-(IVi*OugzX_7Aza92* zacx=>6`TVO-I9m5Q3>y$65fTnY@M4TnwUH^F?ncWDx!(0h)`1z`{97(W+%=KxAv~2 zh)9bK|N8sQU(BHZ_-kRLWfL5-Svp2}h*DeBG0LkIUkW-d1~;>>%gvX6eFz?GJ*wy< zWN`yDVV^)7wn?x$8u+K1x|*zZHCgRyvf336qdlqu`Whh}$FvtrTTl!ed?S`d8(bXU z%B8U%jz~eOkbVG`(Jr-m+3>HB1j_*UV_~G%COBsE>KNrMN-l|yfOLfX?3&#>1(&>! zSk->+qBTJBz_z0Hw?Pnp+YVuD2Q+0np)LCyy0TqDycx(85;w(*HpPoJ#fz3R!J)%) zOSbGjLYo8Ym;0S43-`&1{1U)%a*J9z%S`Q5z?J+;DoCIKAK^rmGBV z&zVW%VZ7tINZ$lkBR0c*TOq$4e4Z%$@*D1oxX&v-Ks8m4RHo-L<5{VQSBH_Wl1vXDdvdtq?l<6~`^#3cvj)ovko+w&LIG>=)G8Z>Y21QD=Xk z&i+K5-GuuT1>zJHrYSn4DPFhK+3#@UZ}}qXETNXIDnX!sE5Wz1)jx2%!)^6XGxw~v z)i9o4Z(~r)R+V~)uReGx4Q_3#jEPmM@J~odoL>mH1JDVTm$98`gIf;qi_$gj53wfk zEeNvft>U8eRxMM8EU~b4H_IaY?0N>K@71~s0_7&AXSxLxRaH?Fzk^*c)dH6{D2>5G zX#!qKQ}9uLnn9@292zPupee$wlyK;%v@)H$Kc@1!@PEjVWZMHGm?4&}7lbp5@R&Z( zoOuY3>BYZyB}M5clR=*rzL+9-w3vfwZ;KlFfwz0wtF&>OIv<$>GUj<}Hh3~S zN8Wnsm>0Pj=568{C~!~nf^UWEk=nT85m&-(aM^IT z&vAv^TE<6f<4Q+d8MnbzN6Khtp|=Vf%WJwpn$J0iZ!XT~yxYuYUBtn0hTWRKCu;Ne z2;y6Rd>j7iN&f1)c7V7kHbjViu_dnJ(J6yliDF2tzyi<%s@-Imgu{YagD5?iHHxyd zY!!!PN|a|yyJy_sR(Kh*4%AJo8DdG;%9^+1Pbos>c+NXN0ctJW3HBJ?veh=$YC{As z+ECG+icZzb5*=@shE2T;a=hJ9d!RfH7UcA#yZ{<}Q>i^pzq&g}X&)}PN42kv$OgIqv#_1t-Z zN6${}n>Dq1c!=4X4fRoP8*uhM!P(n?2z8WCp{KGH`YPKYTG@d!w-fGFK8ILk7o;k? zAw$^gL_jq(%5$)9mG{EDmLhMO1YZrXBpHksWg zyue6y|9{Kh6vlj8@i}I5T*LxmcMwOeDF{DN&YS( zR=ycXa`Q{vIwwo(>;wO>{@~*))KUXbjkc+dKCVK@S$q(;cD=a zYVgt8LVJlnZbG*}p~Inv8UX{ECA83@(s2Nh?@8zU_aR(Er`$icE%!%?)`DT^U%+V1xeTmLQ#EA07ovAnOy5ph@ zyN93M+b=E{lD4y@{1gbg&)m+Ir$l*hx12(5IR)La2hU)!dWjcisUO;nYPoGZKMe$n z$WNKfP$vi-bmGSWY7`i1ckonufS=k6!qnant~#KT+6RWI{m=-1`om;(0K{Y4bajxq zzYm9=>@l%n4TOmzZ}s9bntDnzqf46fA_h)4*PV`25zkf#J^8@{BCGWf8k4by@uNci zQIAZaF^g}MhtQap8fmpzNn;ZtY!=MOrN55y!F{|BKctBAuzUI0eYnotwB=PxTe>Kt zbh{U+&1;Dj)%LD`-J@D&qO2lX}-^)?LkHUjlF5+c-5=mkbY zv^o|>s^egSIv!%w36PBK8R{gVyZcc32yh79`5=M&h3@#VOs1*3OjCE6E)R?ld0+!l zg%&M{Cs}Bb>ncuYk$=6ft!Z~nrQN08-tI=Z*&S|w$n=7L+2bjGai#&H1t$J8vs?ck z&2GG#**$>jn}X_#LG?{V^~FJJH6E8@0t{6XVT_stlhkC0!?t8K)ik@-xC?ce-2~I@ zQccyRnyO1R&2E}$c5$ZJ-EW#*Thr`%Nwb@Cd$YT*hS_nI3CoizbJ-snVB#Ix-kbl~ z_F~;^Zzd{#FB6rQh02?S%9{;s)j7~hoeRU&`7lm>5dGK!NKhYwbZpO77n!!#7W$gD zH`TPgIi>>VmV}Zi_1`pkD(TSSD@E>90sUQp!uyt^IHY6>c7zI zJq9z>XG|095q0hKlR;j8EYU&Cm+2CeW7w8A%W3BLuY>f102 z+aFYa-!(01To0hoH)Z;=^j|)vpTxeS2T+Qm<@+u*Wm4J zbxKr7FniwapAyVowAYJ^i)vtRAV<|*2c7MK!R+O@s7Cf+Q8uw-bBefdEP)X*oOX=8 zk-dq)RToJIzOV*H@o`Vdaj)Vy&RZjUBjl}#y$SNx%-&2=v9E(hcDzjy7vjwwCAJTL z=h$AA*q*vWY=XyXZ1xblJZ%`tuC50!bqn~b zTcM7+4H~H1p@q5wcLF=1oBBC8)LpoL3Y?fj?S%)_uOLO;4@=cU@SJ)W-c-MV_tkG< zqk066tHLoTUu0lw5wb%r^k?sg)>7zy!QSPq zxSk`#W6EZjsmgwAv<7WSS))VTdmN7-OD~e$QL@|9+h+8kA8O$`w*c(%%A$O^#}#S zQuv*8z%s!{N_iYUmfCoLH5LzlW9wmLDi@Dn8{pK=acxbseux$KfJzVa2_Hv#aG&sT zq^I5Bg;%)E16_hQx&}`yee8yC6@I~N1Exf)v_+8t9P|-jAP4;f7-S1rZug#(f<7Z~ zx!nhW5L?i4yB`8}n+NwI9yU+zMLcoEv_qeQ%RiWH#GKz7SDBC9C&li6#~(_eS5YGy zpku*B-ppRNhEqWdHZL6EWB1$6HlwTO-XP?KS70QTb}R>D&)_)xFRG!vp&w%Cf<+?U z)U{(pins_o0mx81VMD&-+%T?#mvIFLT8Mbtu^8`8TG z3AzRQKS1JT3ql3Olboo3!#Ih=) zNJ^9s*S|d_%FkXem~Fuk!ZRhtMb+a9(B=n5ER2a1TqE2DVL=+^N=P+&o)*?%7^4JsV@yR}nZ{-hfem3jOQr@jE;u{K*N7 zgP?wgQS>_asNX}d`U5(-AEBxG6DGvJK&1LB^i_Yur1%C#)IZRd{E7S1n~;v%%~=|Q z1)2&EYZ^SS8Ss*3fj2Y{_)_zRaY~e&Sq($Y=KsPmo3)9*hgAJwpDA)c4;2uUxZ^l*6*gyjAjA=+OX%3Z>DV3w)06TZU}f|ZtkY=`hCVM-(6C%mDlVi$hG z2U;usY^Qjb8mZ{)bL`Z=XyurHi3D;ZXZtAYKr0Txh-~M7Qp8238|VrsMF?gGFi8n!htS;7+IdX>IuX;3 z5K%U&6DcY1 ze}g}+Ko@I!6Xk^50c(6h;{T847ESrAo2%^(J~vr7*xVB}w`2`H#SIvQ4wDzs<>KuK zUU08}%NoESjQ+hq*Ls7OHVFK+!B9twh6dUYXrT>-w%Rc0q78>0+6d^Uje=p?Xc()F zfyvr9NY%!}GHoKP*6xMZv`O%eHW~J455OU93Y^el;F1;#1=>`&rp3XZT0GOV1QxC( zvesG>>#QZS9@=y^R7+uFv{aU*&0r5{GucvqEt9R(ve+6eo4upWVu!Rj>>F(^JEhHI zm$dn;LVJ+?s4Y-}wS`I@ZIRMgdqioaEmk^ek1GANB}%lmR7uvBE2-LJO18E_S)e_x ztkj-Rp3|OGHfv8QpKDJmUun-M-)PS&m$m1V0&TUbX)mZ2?M2m3dr7UMy{v|7uc+;R zwO7><+M6Q7{0iDa0Spk?WHY!1Jw-Oz0{(>7>^wr@n9=p2R@MV^GttV1LQC1Y6vti= ztt)ZtMbWwj$6gYxr*JH_Uc#}|T7hFltJ2DaS?TD)tn_nXR zXVnfepY5TBvCG)%5B=0&c11*@VJf{c83b}hNr*zJQL>0Z$8h1BZD}AS#V^qo#$S0Q8qizz2c(kVEz`2Whl?TY<3$u zfI9X%cn!6Oq8kXaR4ZCk96}wl}5RvOea3 zi?q4R5l2)@%mD@5I3=o;Etue@DN(Kc|FQ+@bK`j@%v{^zZIHNa%x~M{ZLqj)%5OWW zk)7==?O}0IUF==Bue;lB<1|pWk;oQSrics4tt`H!HFzP*)yy>%Q%8EKE? zD2LnYa8?mzH+v{&6rt{j9Gg?brKVDmh(wMMDYl!vyF_nqYi}Nhc)D@K4#BCtVVppR zl_}yPRA>vtc)rkGjosbUs6}>GBO{Sfk2eHD1v~c>Ef=Agp zzYLR6j~(MUM#<_BQX5DM?znlA&EwW@{D7BCS%{qJ5`q*RCsjwC|Ne+7HS}?MKX9 zeo}+A-_$VeceROjLv5q|p-$HRR3Ffp8mlX6lCG*5x~9(4b@gN2qHfeZ)SbGgx<~g? zztO$bGrCoO^U?jaU_C$!(*w2UdXP3&57s8=cI`erRGX&P)zb7ZZH`_~dql6VZPuG; zpXp7ty?Qh4u-;rdrMJ+o=q>dCy^S8Cx78cz?eMO>-cj$M_rPnqF8034TyU`EaF@t4 zA~DP9EApFetN^;Q5`?-douLyer0l`5RlJ`XhGW0u{nU9l_Buj6)o*a@_Xzb?&*0b}5bC2f$FVy51@2AayUhEeEJp!HCuVTbB7|wnZ{Z3))@1pezw%!n}d$IKo-l`)% z>`&f*s`H;9{l#1LM%a3jxAL6Bl~*Ao^D2FoE3ZOG?(h+kJA6IEwZqqwTswR{*0sae zCyBfYcli2fkyqgkTzv&pRb3aY0@5knCDJY3QqtYh-60`)M7l*vTDrTt8$_hLySw3? ztKa|L7|(I`I(yHx=3H~1%NZ9LH}pxr=HH+K-gw)WK z-}!$vY&>FgVk9)#E9|e?`}w$xz73O6kBBHXg&k;ZSk>RS2dsx`GCP$7)-z3oegr=P zHc|tdI3u@SB0e;wn5XpnDk5MG{zWj(2N9qfL)4JX?p&U?iP+E0Sqo9r`6%ET(8fGV zGW{)YEkaT9qg0@gnwMf&)nqaS^I_(j0>Mz`DRDad!iGHL*6F2$qSfo^6 zbTD~ivCbJN2mu!jw2}(36k7u4T1y0Vs4V`Q03j7b^{?RHzq20vhkt{AbKf?vBKuO1 z_WZUd(iW+fF5}`W?z`ABYm3)g&#uO545WnkUs`|vHd+caw|R>8C6Y1u#t1J{JcwL% zI}3HIfcn+88spz&q1<7oJNsBNb{}&S~cXtQuGL*;czMZ+u zA<2B)of7=KfJ51yZ5iRFAyQ=Z8Fb%|{&p%6o5c}o8=nWV9($=5OWDQ7UEnvdF8q4e zM9ln*3A>t=gj{;d=ZEyXjoe6k9{Iz2CUur};SDEk#8SW(yg;RtmM{&M6^F@O0=&qQe8F5g>+=T7)Xt}(1`NDznmW}&ArX~kXUTlp9 z7q93vVXSbK(>*7{n>};EYrEB2B-QoIQ>=Mo;)Rn`0ep9ZBs)}|B0rZ1_jXY8i>?FA zJOGO#v@ajL$+~w$$wb@WDlZJnHAztw_9$0)ys?_Iq5?-RD$4aq(ef@39Hi3WdG1;i ze<}nz9eC=tk^1yh0J|!9qRabb3Z@+%{MLok<+XS3TyZ_Nd_CBbv-8Tu1R_TMjL(Yh z)RB&v1LZj$Z#`e%3uc*DB{&@H-`QNn3nti3Y*#Se`5n-EzvRml>i)HZR%PUk(Uifg z{`Hbd8q>Srbq2G_-0o1E{2d~dG@$6Xqd)_F*)XX1NJ}LFXiH6`tC{VM(tf(cjk~-X z8Z>)U+hq5SsFVRjd5YU|Qhra|$5G58K1e}A;3cbz#mV3NQgVXZVMxG_{9ll8-8Ju)ycwAH;~36%1(`H4iD zywTbBTK7g%7grGHptFzRZ7bzBiqlkI?vOG(2^lZ0pIoadU*){`48d1Kyh@9|S@Ns# zj{@$!&t+S>`Bj)%M<-;!kKK#q&mpcQSjqaRIu~ZX=R1g>^474sq=-m~ zH^ls6B(|)ZZ&mQO`Yf%_UH9k&m!W*u=)2D_-?vdnyfH-CKgQ16Uphzhk=gs4Dp5Xu zjbp+Jey}CM3Wl;x!wUXtqX%Ct6N+3)932bz)dhb53?|(pVFa>KWSr9^ZA7BUiF8ef zb%+@%_KYu_TqC*JCU8Qj)JqVnUd_F?aeeZvY^-g3xkrjbITnXVJwJ&vHFlKVNs2c~ zP94UvFmTogTl;&{)o;&PYdRQp>bC2i`}8J7X!Lp&tv6w=rC~^X=7{m5T?~!Aj&3;6 zzTzo%6mI)@+=rO&?ip_Nv#KRorZgqS!&8F4-?24f z!nxb3>$7e>*OPs~{k-Z@bp3Tx*!+<0$A#&lI^?`1eh-hP02NZbRTcUaC}6*dH?#KT zQz>0=nb-yF6BXQ3?dx`EP9c1y7WZ=C0t2_H4qpjFJ~jsg4h18#=9>^hN8J}p;< zmT%ywnts%Qb$OmD;;kRp!Eqj9qUfH4k9iK_)_>4%pXL1{K%@{Pg%>H*>(KnN>y)}) zcNQk&F7LPSGIGRaNxjG{s_w<;&xBTJ*uC^F}pb(h5B zi@;4$2TdVljf=8X&qtlyeMzlvKH&koeOjWAFo7#74DXlwcz4V-HN4UGbJC5Wov8^k z^$of%WDW!$*}}%kDvt9M= z1?lB{@zJf=aSx4pf(~3SlGX(tsdFlPq$~@bzZ%|hA@{Y>w_FIZU_BRvPuSC`AS)^( z=bGRbR(Ai6#YNH8ve%4V4@_{HJW&rtDN?q(p-~G=KV!do?t)iTdqkTYhgW{QT%JJh z$_*rNnXHxgG1p`9^NN$8(2Y=T@|DCVmyj`KUBhZ+4g8YHgoxTb9SKk1(l{%tadL;D z(}TqMO9Wo7`%H0|uSG6=vY`W>k=RTzoQ6R@d@{<4=YqQ1y5xF&LH3I|7`=dPthCU; z&hwMpo0d{y^>#B1)&2IYlN|U$@*f4MuSF(%)f@6Fwsj|FcyT$9`@a+LSt$>FQZhdO zIH4IIMv%Of*=zK1Vg?Tv;GlYyMrI|A!!JD%OZ81^A{KY`WoB-15V@Ef&rxP>c#vC2 z65DG*Dl2JVMqwgW&*6K%;SXjCD}LGJD8btQji%Zi_yNYoMyYJndT|XQtO97evB?_g z*qO|r!m_Y8Uxi@YwccO|{?_ysd4u8eTU(d*J3O$H$%Fw&iIH6>lVVAUp(CrZ#~o2< zsoXpx=(Q5v@~>?RF=|ti=;K}7biTG@kEfO}bTX`Bz)iP5Sx1|3+(zFV;(9BP^>FK& zZLa!rWW_zeunQS|AK%Z>; zuv$OMpyv!!!BOB9UpU>virYWY<&B{rQzCkWlc3vN__66P@WWE9OQly}jU%+~3n1?hajU#RaJ~&^J)BNj?3m;9L)Pa*0TKVm zRG2Cg9*G7KMO+bFSezh5oHZ0uZ0lNvD)+GZT}Tk1d`J#`=r=0)<_#@$cUHcq0kWs$ zaHj>{;1aev8)i&vllb5R)(suB_~7vNhg`2gyYA48;LBz|Nm+h2@mD9mv9L|9yNV)$ z+S8O=KCkTKV_RLXi_b8oi-p9j_us8qa8>$pdq&u3-aqEE=y*Glk{utq+*EU{EfNIV ziI~*^u$emFbn4#vmt?e?u~%?l&DfaLnf68tQd_1*O{;6B#;`>7O2xbZQzKdN2Ks4M5yK_nl%84#DYjCQhs? z?|QK_=xi7y@*ByHPP99E;l+)bCioYyuKi95(J|DaSkLb0kGw<}wOXWrS;tGmWE6v! z2kJM`hN7Pd^^^lc;WC28^ieUFo_H6sPDq|4rDbceW?b)? z@kb;6DRbk=n&{XhI+dXkh!J zlh!JFDKsT!2@6t*1CI8p&4ux&F~n^Ve^%0x6OkP=h8IDn=*aJIIvv&x@$C7bVj_CV z`!%7C@rHiyk@#8nQg-H*tOWaaKzr{i)7p$^~BNo3w;kx56+Kpd*RQ!lumjB zqZj-Q#4u;lJ}KKGB9fo!3Ehj(lY`0;7nb3R%Fl6g5REBByKG+8mm$oRF3_iKO3}>t z?|lg78**%}%A1`XKRB>-y($J~XU$w|6H{%?%ymY7xmHyz9@ud4%@^@~iV}##yJo}x z?f3N{~gLPr|ADXz9oeR{rKOp0DL`F zjQQ{Q4QBrDF=fI(@xP<`?Rv)lJvi{TGl*M8vaRezgOYmNe$VpHmz~GGfj0OB4DUzf3gc6jqjN$zOJz@rQjgN?3#&U=UD& zI)#7S;lWTxaNI?^4$U29+ImWE-0NXxuxsz-?|5Q7g+FB1+feffVfH%rna~NhWXC@T~a{o_l0=^K`?l1NPw*@5Ylne)A~Ir`YX- zYubx7?@@bqHlOP&NfCf(BKeUi;Lc4r}<}_)JIMT2Rqr+%pH5CbK30&AxpLvp`hCd>q_I z!vyd*xMo%?cVi0g!mgZ2?6<6AXCKeg4R=^V_Y1#>MS)|9|%{E#%rbQ6-7^;FO z@j9~E(e}?cM-pBDY_cEY6Px~nzhy1{tXXoj?SH4h#1iTun-)~r z=;#uJ@VMv_dhYIUEk~g-x#1sZ;eNdoNY??XC$F{Y+kR)zBW;uJSov2E+7b5DKberN z{|q-JYWC(1%W%LEU1fO7*1u>Br+ROxYEj;_jh26PU7c76penwcGz_uNUVzpWcKO`( z_Vgas86SSCYeZcaig0Fsmhj}`qU};(7UNf?;B$5VbM^42EGz;%Q*Qgs-#z(XNF=B( z*bB+#Zcrr%rVYQI3h)~|z@LYwukfs!&lo&>ogK7yn7bi%3KuGzCWuWu*EaiQoyb#W zx)s$v^wAmx5%}1^`q6c>*Fj>d7iER8VM@Cr!KuW>x5TL=!at#>7_J@Wv-+?H8UG7~ zP!|H2bA#M|``fPYQ;IeeUzFdX8+EQ5wbA|d`<<5MArG}A8$VOSUsIEZvWbU8w+%Ck z7p;*>C$3#R=A(5J(oK@~!@s%{?p?$%TJAqZ8NosLgrrF zVtVOS$w?L562D3w$-Co2ywPV5gVJTBbFSNA88&MF5C+F@aEcR3%J7Rb??-655uH!y zO$n*S0~VDUIQ@YvDjaQu?-&f=cgh5(zU_HJ!9{&`v3k!~aa=;h3B1Q2d1W%6{l&FR zkseX-6F^*z^VPg@(mGSHA1ig*R>f=*t5u#@h-(#E@rEq85=K-(20pxU!nYz`F}QBx z(|x$!S6Z+C|0ow@etC+fs5vGR?&{qRJ>T48et~mBntatcg!#~yODlSVtCx8(l^n;T zgwy;h?5z0GopmKWx$wyukQYFhUKjE>*-HO)TA_20c5zB11oL=X`y(xLg&2$HY?jCzGe} z_-*aM#TbFS&4GBaYN_xZneKw}kupzIV(oc0TY26Efd$*eF5*>^qpPFUqZN`Piwd>I z7`)_2jQi}S5a{v6o(*R-N7=?aZmLC{Vfkx}?VS5C_ubDGWCFqr@@QB?e?pAJJ<317 zNqwW96Vnp|>|(5KUVJ$9;1zF@uZP}g4 zmf;Uh?06cMj=@|C=bEWfcQsF3`S&febMGH(RH*A(cAV+)$s<9VX6LRAv&|$)BkD$s zABEgdEZQo0aaUh`BDZ@;K>1KNti(kq&7o*@)uw3W3&d%62yVt{Z*mr${NXOEJi~NB zD4yVvzUuW{V`PprmTp#meKd^L_~v`1|DyR5L+zNy5Q@mamrov|$-sxm9gdJ^mL&+t1sf1-nF!A3f4MXK;hZ$KBVyUMM>%c_h~Jr!tqiY%@xg z(J1uskOTQmD`dNqy5zaAE*cGlUPe3WmzaJ2c4|_?jH9(~#<%24np00}XQIuS59r$g zLH$t$THCm*k1pg*Pj!9O2uWPOyMvW3~JJ3|&1%XNcDCW_tj)^o2$1Ah8AaMo(W8#ZAmDySDa+ zg7&0mE?blJ-gwSG8gCeFyYDzFm29>dI`BK+Ugxhl$$wtIqnO6W*?phjSYypTUC;Tc z#F{-!H@TssCXvcW(IX2loe4WAd#F3sxq+LrMJ^?NiRqWzF?vF-Tf>!8UH#jZ>6(Q5 zo-=14r=Hqdm_JGIO`04j26J{%_wjgNx6bbRTGs`_X~KonsmopU4X3w=#I99huC=8P8I^|@~Hj(2q3u?FaBOpD190h-G4_uecKh^Oi-D0UJ0@jB~y862oi zuoZ-J_ENnghsv&uaK=rX$zcaG3rwb_pPFKU+6AV*gu`|1JVcUk217SI=ug2dhUW=h8DeZt)WixaGoj6at3a&-3t)-95v%69t^v;<9)DDJG+5iRz%tcFAm^x#RjT(KKT6Bkfffn|DCpgl&D&)|9GjrQdUCMP*z|H$8o08(gw3Q9GkeucGNcW+_ zX{grE1?cbl(8p+-N7-eog8;mWtR|ptWtWH&b}i9C!(D2YK0dZ(jhA0x^Q^4%JUoT; zFnl{UxU0v3KTnm2k>DhSAx)(U7P2DPK0M75`)iI3lJX)wKR$i* zk(N({r5lw-P))0+R+rB858A3F7^Au*P_V-ex}u{h84Yz%?=~0rQeWdDSUhREWw>6s zFK7R$RbOR@tVO%eVTz3En%+)2kaG`fq)iYk4n5!^nruY4EWBqG7U+q%L*E7PhKmhx z$2U|WC z2K6MSHH>jJenU>o(d3aHt8o>em_sL|PL}!9w*VX9@a}#)u0W?k{b^kPdqEsWZmSJG zrI?UrAO>Fuqaj-2kJUfD6t-qOhn!<5@rK>fW2o`bA(uuh1O|k5G^Q#$s+<8=BPfdM z0kE2k?0C`?Q-O(v5mi4iEJD@2$O1EI8%cta=J*Lz`I=HjbQ@Sl14kDD>8>J9{ugbP z8Q&!rG&oh`&Wv)ou(^lm=*mzhpQ96mX0Qgr5+4YNd& zl973ppS5OIk62X<_uK)6St6^E@2uQ{NpC2&8QN*~tV*-xl`D#AN_cp>(iQfDNL2m9 zhxM}ryNV>@R_8EQM=oF&hYRg=K^h^7&#Nrt?9G&n_-A63=?nDQnBePDbbCtuTiS#$0($rmbcm&4tWT0h^AE4 z<-?wLEWZ;uedmK+tCeT8J$1i$lc%3Nd0wd_@T`9KwRa@iKYsmn!zP(K(wjbV9y|G^ z??OL^guI0lo^M|2Jnp0IJeCRlRIoh%qy7MWghX&3S4(pVTqQrs=)~XMjCcScy3f0> zo1XObji!Od?&ph_&qFc?nhtl#T6-F;s!x`U39GUjBXpO{`kpdN3>&FEWn}@$W8dA> z!@TUb5%7m$sF$Hrz0jP_1iA;@zRz?L(OHd{uyzw2ZFu_6jL2fF4=WjcP28(@sQzJ; zM1-3g5;N=!IHvKae>9E69U4JctJ@MgP2!O%=AsTe9xnKkG;YH6sc~U$I5umTp`nRK zC6dd0C~KJKO!ZS~^UQEGSK|4G=oZv%b0YmR3+}+^aF2AddtvX#LV{satCYmD+~lDl z%zN&JSfJU{=C-e?k5lKX3{w2hNZVSNI&6jx+kpHiVE#-gU6uINCkI^=7nqjjEOa@8f6|dyvP3{jfHCRN2%hdlJUJZVJbte{vian^cU7R>s?Qj6CLI ze>u*7sNtLUSa<>(`x%-|5Kph?^qHQpPzE8ZxWaY-tB84}fO9UsUjce*$+mV|iZfV) zBhs=)w%)2XZ7(z=LYI)wcq&o3z*4#(S9QGm9I$d;pN30VpU%{L$KlGn6(*+eEa%y- z&TOVqcGpXyd7hrX<6gv_efup?uSf4DnW!bKrSQ+VqXgr#R^-xUgm?KC`(4B6;rNDN zUHX2;<@Q&reZrS5+P_G;nT>WiOx8n?g~(Ikwg?~hpPACr_W<)oEP#SjKLI706c*7YV;5z2^4>u_;Q zHL4k_80))fwMf^jR(izUotZZ1C_CYv!2UwHdGU(`8%Q>HQLHSt_l1Rx4j z{d)dQwLkX<_qUw|muCc^UEW8WEP z1G!J%vnnbg?@b$SHfMuCS3|<+1SvioIdB zF@yN9!x38}+)qt2;|r_3{BEIs!vG@d?8164-*qVau(wgE7A+GiTJZj`-(A<2tXH8}!PAO>WDVI8U6L z^g5ck4M?(hDnw<~FSOjE=jie(`NamP;Qp|m*xb@_@w=60WCt|phhZqjofjvzi)nVs2FhN2U=Z79}J`>;i*Z9vV8o?`Jvh z$aFIDW~2qW)OQoXFUqx_-;=T7YiY;1M5%4jv$MXCo|h6bJ(Y`G(m0?lMFPkR6Y909 zl@gHBR5#@_Cb7R#tGUmhYLCGs@BQLUK3%R@Plqn?Jp z_eVpIWKWqIH=yw%K}J*;w*JYtOs3@{{vO*0K`@9tF-@3S-&*C%WD${*AdYt*yg5Pz zBV~M{HO%vwoo+s$U-CdUQC2p`F=79O0C#U%Lk{_}=o96%Be|PIzJ3cY{e=C`eVv;- z6sPUmI}{}@|2x}~_<%bOqwhYY%bZr_^&*UG1o?39b?*w*GMHTGu-m%m+XPf|KEEz| zxKds07WmO!oNzStQDw2HA=ks;liX$gR??nsvUTCLb!mYhkPo8LAQ}#$i6b17+g#JC z=HNNu-Lxt*&GbcylbjIU^hMKFl9PV^gHCkbP#d;;V}ru(pZDp?LW>J|&N>+iyR{E2 zF{AbBHI9CbnnF15j}m=gR8~}jM=sd9X$!>^9%Y)Vbq|j^CqJt-m00{vSXHxqJ-^Qb zUs40$HtlGAe%18mYJz$l`+$H|i!`?s^P%K2)fWa^5bI^hnj`ONxKoD%QKeY;Rky22TzB(!VOZ7h0R7EsfsnIr`3wpUA$ z3RUmW^!^Ib0^J$9xKP6)$~FmAZ|RtQgm@;v;Z`mp^_D6#bACs=c%{`)yyE+PAQ6&d z*B`oRaqt}x6`saiX=@dYs)u-sr4ywHF)OlZe`Zv;F6b^zG~3`@jXTCis=w{rmudsM+@9#qkL;409h&E}C^Kt7 zRZwFRik%a-wMEi!RR=d2+IlA3Bo}I55*n#5qo9|GrKaWQ7{X*!`Undr@85z|`he5J>&a#r%pEa9s(ZBfLAos!5gMI0~FRixP6Ud2!9~wkgvi zfmgxxd12K%j4JI*WrvF}7d?uzf<@(h>{3o?%%V`jV%bbIb-Z)U&Io4j<7`RpyDL|? z3%kzD0!N3>FT6i0JtmR9IO=g|b!^`9WW&<&QV3jq`HpmnrJ0)u&0v1*WDAbvD`06t)pR1#n$P9-oM>7^o9%A0>zckNRjmvw2j@1ct=Nbws zI!b!qHRN$MR_my&vs}M`J;&^Z#tYBuM>BA+#1neK)!m+*xb0+K(TigGdC@(TwADFv zEvd|UmP0OLa-p1$i=%ekb+Kk(Hv^y^EmUO>u;)@pnjPn;LN)v&Yv+)|Vwr30(GzL- zXSmQP2p@$wGzT9g$EXjSu^LXC@U(1{2&v#5x!ni7^tlG`{#;w&ci*=k^JSJxE$H|d zhk1&tKdr+g!@qcb<2psylbCd`sQYxkn%rG#bpGu1&CZ9msdQYy=vqDC8BiEyPwv)Y zTxdO~<67rA)asgIQ-0si>Z;#Rx2Qm3ah)JJqu+1o z+RQ&D|1EDGdXtDxNzV%H`}B;IQ-y#kQ$^4~j%(#dJG2D18OjYr&+O(=5~}n{l}#(p zYOfK_0kng6w_Kj#4`cEg6$0utHGM?{o?rJ26;xfWOgOsJGHWaH3IW}NT`M=wK;Hge zs**EWdzzlPyd!BjW^+}OA3Y-i*4R6`qSLj;ZA@F7^!TB>;o&+BPF*}wTJ#iZ+a~(v zsP2$Gvs&AiinnKTfIBD8Fg*+V$*@DzySJWAdWJxb#w_23l_zzsXM;jG&OTAekBiGS z(Xp2%N0hA&0$=HWYs{~Bz)VwWM~7lQI#w#b%aCMIoC=oO!9f1L*z@@U9(JhJ2<-x% zfXLUaTi=(6uCKnT-kwGFh|wdDt zBg9BXAJ@HcXKz0f714#HG!ov$&Vm2Z1^k|RBo~t0tw3HhjdRh|Iv1}i7m^G+RF@_B zMf|aWnNRtEDXY3aNu>JQNeLwO| zf7WX}Vylcgm08F&XjJDe&}*w4VVBTehfc+Midzr1WO9r|bJlHA+IlfvN6iKQy0g0o zpzFrDa|KVjZHH#E1}d8#z;wp43S;0d{n)W3wZv{1z982~Q z9#;lHcS@hGZt5T$*E6PuFJCgKB(K(STtn`Xprdv}NiS96P(-IM%~9aFP*}oTOk8lk z5b9+pu1vpJ*uq>4T>!UOxPi34b8Y2inEDW%>TRg&MXUR0#hyMhLR#4%l+h&Qjij%M z)>fDE{4?#Tzr>5m<5t<@9&zff^X_Kw`Z55xJjYevM%q7S_V~hFymX9m5rA?giFy@) za+>q*W^zi> z)yt6YK5VH6m$Ucya1UvIgp_9rx3-Dd6s>J;ocd@JZFWALqSc5zkl%b0nWM(xbV4{n4zZ{#~pmzTNwpAEbjV{0I6NgDq@C zZDg^YYBctSn)<|l$`JY(5w~>-2OF4To4613Nd>P19UhoPTjKrC?2s>8X=6QsPxYla z84Eg{F3d=qO9V$lXNpI*hR;`uM`fL-ZvIZk$eWAUQ*Efb^qr1wLFY#Zn+t@4EzAeY zq=Igy+)uuWWpJYIXaOEVM1$UMK2B$4EG+x)>tPQ*+SW5i1vrtS-7EMzr6czVVGnxq z#$L;63K9NEN9q$G{pCp>d)}l79PO32z4bZ@TfJEh@@T;t^yHcFw57R5TW!=s*lZ;z zy{}O`BJJ{a7l^%=m;u;h@ADiU8WoRpGMekU?oz)!*>NAWI4s>~q@cZTAPszs>fA0x z>wD&z*k4y%qRv=K4|IBdUAkYTc(lFR*apA(#IcaTEXt!F@KDxuXHWhJB$q$i(rh<< zd%9MPLLq;=FMk%*e8&3&Al?fFopT0W$bCF&S-Z8uhJRpzf1rVHMuhP}hVg-d@fpOt z!B<$>=J(YH!2D%qx`;YCosU%AIuwTg%x{nbq=$%g7Dx+eWH-oPAFo)C~Qz7Y(VVW&im50 z=B2L-EYv;}d@;SSf$l4){aUi}x9FO6aK0`GFjE|4kXDFB{O7MgTGsX9{-Gdrk^B4+h zUl&AhV5U4l7BjkL6twSUD_QvxDa_Qmh=KPD_+sj>?RN&~nhH?9mxg5JfT=AQY2c!b}zM`(7HSwcjBq7(B*Om;3aB zscnQ}0DSbOiUfQw!@wMsf%?>CQ-htYU)DF%m;P?vm=)&aYodpM|&AW)nowSQUlnNP#2t*^`Mz%o7ZBY6X zC>aLYa|b1I(%OMBFNKvIL{Q6@+M)V4CU;{mIHoYUwGR-87FQ6!|5Lz3+MU5f#)I4P zZ69+2t6jl?3JxZP6&iHz#y*fR3KGC(6;C-ogD;t>#EXFf8ly)UIgEXM39O1IQ(18G z7BZ0rCj_CI&wrG=?-KCAIv`O6oV@~}N)&LZB?1%P7nAO*&&>>roRb(vuBR2sfZXrVQG9MTTedagw40T~I9Vo9)U3X*(;Bwu1xJ(&uC zNuF3?zg>LNXYLAhwSneUD@y z;qOuboIOFV01-F?^yPnoX3+iy$Yr2b1`WYMT*0Y;;qQ)OXh3VC5Pw~e*#N}aDkNY) zLNp{`f!5AwApYn;SMKk?FblaX@>!r}R0bIGAaZ>W^*)GtA7n|b2tXnPWQQpKZ4?7( zqyky0KxX5R**IkOw#UfC>b-KsKrk8`&n7~=d%ut?^A*j z)Z?-=!bMxk>z!v#5S*v=eFDT0E&wVqLJ9(p zAV3dtNPoiI0pCCoa!@1)0%U+dEC_Ic6-8hx0Hi$Qfs}O+PyjWAq(A@*1ja#N6aqjh zh(O>R1egI3d5#48a)1Z{sEP}*rT~__27w{4#2N&ig+Txj1d2eQ3}Q7J?CAoQbAdgV zvtjO@F~KY^2-HDMj{9R#vq~qB0@P}2@)t` z4z@@K(|`!rQv=L0g9h3%!7O-rp6$WxGU)m5K8eBdWiZPH0U(~CK_CjO5Q12g1ur;g z6TqZGi)_+xL1cB9Hp`Ocx^sPQc+AD-KZF*iOke`rTRG#zb05IX1J0nh{Jyv37VmJ&T9Ld!e?%_3Wo+y!J2;K~pkj*wdpG z#P9^b(F8irZUjNpeM~dNk*%_J)qfQmkCM{RU*EP*it@Jo(A^r#{!r03n)OWb{7OEh zk=_2VQ^%N&g+$`X4jT`}*z+1OJfNb5+Wxpl@^~c7vAId%l|+00a+J#Tw!i*~kr$Oj zYd`N7Ow{7`d|U*$+sTd;XL#nfr)!FWn=E>O?ABrzJAX|U)(hMO zycn4K8Z->tsg!XH+|{^^$(>3i<~TH&-VfH0Kl5fY_MY8+a|M4Td|e>p@DMT6iZIV* z>}kophjYLv`m1C{FY<7{+}o3TPh+Nu@?bHfrKxkNtfCIed@*8E;6nrM(0!-UHKjS# zACmSnk!*gfGg65;N=-q6KR%dKMc?jp00z>oGsl#Bn0N(>Os{`+>j-$no%8jThT#T(|Y@B=cY6pEdWvsTjF zO!M*Ir?u<9IXKjQK!7u!SE&R_hhe3;-_J*Xck2k+c*GHWLzH{?e!v5r;ZSSM#Ud$5HZV%~J~f4Ezy~)tg9?+~pt5 zx==m|{&QOrEJkZ2lb{kh^9MVY$)<-&y6n_M8pBZg!|s~8O(vFOu6Qidsh709RS&gv z*LD0Zn?k;`JN!Owu@qa*m^p4WTdJY`|)2GcGFQV~o!S0|D55IGi#>n#d`ln9EG5n94z<{z?VS2_zmpVfh*6H3h z?c>Zj!(%n}D9z(ACgWo#I4ZHnXv7chz+VEJ^kjD3N*dxRfUl2qIl%^P61xf|GZM6G zGxpyw((EN_wvt8O-7~Uoq9vM=xh;9A zB3}0@Y#b%-=DeOu_+kxhWaA~+r~PD8kJ$L#jcsqotFW*8FU~gDgFge3x%SpqiM-`e z$ZJbN-|%Nb0l);-6DkQ-L74p=x&u_7FiLOxcjVsoP;d}5VBm-Q8?)gdP@Ay4mXEgX zH{iD!FyK##?)c0tY3GY9(PP_x(6NumhKH>|Q3q0bCrwy5?POq$*IoOm*zm}42Mqid z(vT(kiNEPk_&GXBvf)urf9v3Gz;xn^>9A-(!Uw|Ro4$8gxU+A#Qu?u;Z<(-|9m$*V zmemQ{p|Rod*h|4uZl{^BI4vPIwDcQ1EF>fMj@Fp4_#F8yw3@Jl9!bJx?eMbUiC;?| zyB7`Lie2MkJM=()E$a%*#y@6PCRt%m&Zsju}sTHayQLO23M0!T!YrWD1A-Xb~7Y zfGxQF5vpN*fDDz(7kSMA?wbhFk?@8*@W#(#LBs?-g6{`%rehG9+iU#p4OA+>9}9*i zGxr-N8zl0u(G8USWNdD4@Wr-r$*yVGf=A`3{B9P;OwiM<-ygkW3;sha3aiw(Yl5D` zhttp(EmC~+nJsuSRT#FS5i^?451GQ1I$EUr$b>C;CiUxr%0M~v;CMfoof|KHH*ok% z_(+y5cxi;fZ)Y*l1ib|s*qk*%@8SzWHu_vOKo$u1G{|FuF~AqaK;ga}BmM^MA@0)v zMVcGAR`)p*Mc8MO8~W{Nano>${_9b>HGdi>DlGR|3K3zHLsdT4ML5)L|COC?*((pn=zw!MBSaa9G=t z`zx=dPBfUP!uppPO)zeCByggIz%_N)&9bct#&c6DLo;Z|?OOo!k`xZ=XI!n%q&M^$ zkfj{BMEkourbL2kPG=x;p!&NceS-w&70f_%Vpw@12%KmLO5>p35LP<0tC_5NuatR( zgDFRFN!{Oh->!d)rNzB6ZnFAi^jpBSZ`&CUnAslae5p@{bPPJR0+$?MmihbNEETv+ z0JGEome}A@15!-+w|E~cvMaCYTyQQ@%_~2r+`@BR&4xvB4KK;0ZEG z{~5pp4UB@NgbC|L&^*B0H&ZxOY?Il0tec|3{z~XVtIC5fg^XHPg0G(FD27n;LrrF1 zs(Dr(cq2ZjQ9*K)TCT!sqVX*XzHNo<;CwQGf$!&@^gnh%6EFpdWTt=n`q6@~G#8}-14?Yg zHSLK8N)GbA1Xwl6GB^Wq9;nibnqQj}POKR5GaTX!{G4=f z8>ZL_XrPc4jD@XlvWdt(#d_U(>*}y%({p;+h1PWh4SP@zOg!LhsJ`mF5eVOuY=rlpn?8t}NC-7m_}?CoA#S7~{bK&P;RQcJL)e7?(#rYY#?6#Lk{N{g zEBo&j_G};|9tdd`_;)==G9a3gkUgaTbJGAxBSGBYD*f9-6hs&SBCPyRcnfmTnILX- zMgF;gf(WZYm;wKEbwxo*Z80!3#{bjpfn@g~x?GB&F3_%D;|~$0gb2U=CmauPYzMK# z_}@k6fn+%$>W8r%;BDjrXX?<-N9zZ@B#sZ>v1;@*;8YHu=!9f&1-$7Rqu97t9%DOR zYAC~kx7DN{I3>+QM!jJ%JrO+75Re8dxgcpJ;BVd-lFtM4F#q!6VBT_Y<;$qz-}EOi zoeoJu{Y{tTBBRy^f*r#CdbxZJdPxAil;$9V_hF$1=%p3Xf#a_ik5sUdFt+REayAhp z?E;x*5~1F3Zh~GC;>@7&UtT7ZnL!JXxy5#Yd#mwv;$FE1tAL+>3F$OJ&`+{FL=Kb* z$mY;|;5(oBewO}BX;JWNYYcUA71osl0XrEU&vaOTL+KZ4epqZ3^xjo$)wSh`MgomF z+ypT#7&!g`Zn-JMif$Q@kn>N2aP#1c$EU&Bmo9FDv-j_AiaZrTk-BWKIlI9;r3M^krgOr5+EBR|Z3sSZTBg2@mP>Lvj0fphb~o8V#cQ+_*Y{%95y$Vx~2 zhZKMab2f;y2LD6OAvMeyP*==3P>`RHOE0=|=)ECGUD?ln2owYe&=0k{g&>R&WGKJ=?}L?s2=0*+qBdXf z0=yG1iB-RVPpz-GS9DdsfX{y(udr9XxT(AZpIfmZH*RYbqC@+A!3(&LQm??L-XhX$ zD54W`y7rf(xlrJJJ{hI_5&)lFK|n+4C3rXO_2s{S^GX3p)cJq)RX}|~IZ&Vdul^km zSel*(ioBw02k)(xB(RhNtZDu5S6@F9Oqqf;)5?G4G$3+uV9oSDxqV2f2q>5Q&n_|c zNK)U7z+E1%`kX;cCZy>AF$^t@U5(nT!3A4}Gu1JnNVmTqNs` zHl|V+8;f-8x2BStT&|;uk)jN7Hg29@D#}2^Aij735C0;?-C4<4k&R{W<%<_bP%r9C zmY|@aP$B5@dzF_$P%mCM!X$`HKoKPXOHe3va9^NR{-xVvaQtwgU%beCm7wtO3OB)_ z5$YAB1{q*7wlVzlDNa>a0aFA^V7$zBpDs94M+n_9V_r=wf5ILk=i9e0f(9SL6~-&$ zdvd4_wJ(G4(k~|ANP`0l$H1>VR_bLRzoa}BImrDq+ER7B#J(+me|VqA{KBl9jAhD- ztNBp<#%A%@17%mnUPgj&Ntyj@9(gE#l9LPumdg~-@W`;?Y;LNNYa_w`fJpRk-Xe7w z`sMLB^s3r7T-XuKe#x`;kgy*y8|(E4=R6oOHDAk`*hwef`RFAk#^Z`D4&UL+pZH=` zP%83q=>q2QQ!wA$xdb1y-G1sw6Qh zFba>Y8Zw4ETqgAd1O57+wXf^4eonq~ARkTU1%@*uiL@AZkfL+Z3xDH-FNSarm@iH{ zke4f}8Ac*+Jm6f`-gbnI_sa#gPt`~4mt$(aMQ3cP>jqj^64MBw9+_|7Q6ggBZz)&p z)@_TDvm}O+SjWwOd}vo>IqdVXy3j1Wv5f2%yjV&NyvUOO?~3I<`n1^E~n& z0+!d%k@Y15opZ$OQ58P7%P=#T%y)i(!c(skcvVop4aSFkFL;RXniIOqJWBF-ktm2Sa}2TGp4nbU~6 zCa+#9uIfbi3@p%CpmX(JjZB3o)XgT{%#CTZX6mIqSxii;N?Z{CvA)qd`ooY()AHj? zdqz2)ahy}QFkzB?bYq%387rGi5eRbE<{?BA(OVI9a0FX&x_LtIU-s9$<^}cu`kl_l zN#SpBN@dBHQKdm76XJZsNS@AvMg@8+>nMHE*L}XPRMQd^CKkdJ5|sp!N|8V;f;Q%b zN*HRI6}U94yFpvkv5xMV3VP~r|3x&#t;QTqZ&EUAaUKHhL}L5}tsXeC2IanpNL{(h zdRlqfa~ELm{`lAh?;*AXO(nEOd-7Y%$Ggf|j>)2JGMT5{+_`bzZSxpAXQ?U#y$i|8 zO6-o@3eUC4J`~NU3JS#SA1KK&F=_~iBfEOCL7h)>t>Biy;JHo)9eni4keFm>{dpQ zt@TC2MP{ZDgTrrM-3c?r)(=mSHit4Io9#1U&Zu87%#xwXI#NOjVUU4wrWXe>)~y=} z8;6}a7_*}bfAJnn(Oxr$%BT(QP38w=eS0Y>*-V!0qLaq#5`${|RB*;x3L#aQ9ki~d ztirw&x~06@jQZzShd-}7^JV2!@^ z^Zcr=UQ6%wQGZ(eND2m8z}rJC$nW*pleqiHR7y}$KJ>AW0uN01S^=!UcO@W+cGmBftT^QRnIb@_k|CwHE@FTBHv*(tQX z)KgsM#p{5%fj|+V>;2)-?ilVtQFT5>hbXyWHgxrG$N3HybP=eX;~&^Zn=<;};!Ad@ z@c}-8*4j^y>8ulN6rmI^E~H(h_|GE%rA|xzFia?jXzy03Uq47c61PCLJLJZ5o^agi zx2|sqcGr0A zh`ToQC%!V zdsi50pA!|7Ab8x&WO-V5ygWaz-V*Qub^Bc$V8~L!10{R)(R9w~OcXeWWVz%{_1>1T zP+MV4sLaCnGa&F!)-m+(9)g*TmHeV|Kttjg*KlDtMcJROIA<(cS~{fJ&v*n_7bX27l%N^n%;Z&=DfK_KLV1S}PadEe~8)$o8BQ;_od$S~_leY@O0o^*hw_Gj~ z0^xVMWxg}AA9rk2TAWh^2Ipw_I%sgsOm=lEJmY${w$gp}gAWIm?X_h72(<@Haiy$Q zedS?22usME4OJpGKv7%~tMcQAYUl26X&vpqQSZp6UFNIaQCLOaJaM05 z{eqcTpBX@Z@iA8!{g}4P#oQ8H@6jez*umcAwFM5!V2H}K(%X9fj(rXhc}KMyyooVF zsXb?z^#Dt|QMFR%b14wqvDOgFB>OT2}ZRz;WpweN>aGj?T3S;{VJXny=zX z>1juWb>s`YcT}|}h7h0XTRf+~{A)E`-|Xm@5ph0vBLRn`me$fUWi%1C7dq(=1o^LT zQsIZA&r=Nq2uKKg{ME#NzCWO%fvuUze~??Cij5Mg8k&!-&`9_*H7w{E%yY@rAF`QEN9z^RG9VQ3 z8($Fah--?^?(M0&`{VmInzpac@oNWZP7NMM02 z9&I&pHci`kjm=$c)nhb)<$`-G5#2(5N)8U*2|IX(B<2_rI$w>jXdVAZ$9GgG1y51l z1n2P$|;#2{w}0?c{u&!4L&0<=myS5Xl*?#E$BbFi6G(IOPY$H_!XY)V++h zTT|glS=ouUiFUDX#0gEGxsAbRdO(#hA1qUm{2(s4=@0>0%FeN2A3EL+Hs3m|VLy>F(SuJccx3AqQf;Z^YR^=DW*#R?OrfDeX)uPq{31dp;c@>o} zSZ15FY(K5^X%r6A`aUe80{fIHv3kz>X=G3X^vANx!%E?8PSIXVBu|9cNBp7U>cw`l zmwl=i-UQ$xGjdxOS9HAo@taOb8PCGl19M=Z8ovebv}kUIcC%(D@B5;(l~2(c2h7kl zkI%8JwlZBuD!7xW*kV9gFxyFz^+pY@Y;(!5vs`5U#L~t~k%gQi$%U?R*2js{__RDa++&Yjp4Yb%qCf6#LQ`@zi(H|k`t&f)7N_GeVMa9H@WghGoU3uV zK|3Evez&O9&t(3#`-8`~c5-8F3db%xiR)ll;LZHwVdE8hi7>?U#wDv3dZ0kHt#9tu_ zKgN?4#2bP~5{Z#}!EcuL1jKrT=lH7|Q*$xEY4MS0(N!5ZJR?#;$#F5t&=+tC{9(c9 z3B18%B&Ak8rdP1XTb>V+K0bkbiswEvWFh@)Kft6X`f|=M_Ic*VOaucVE>zwrUW_zN zRB)1RfWwL(mMY`T;x|OGZD{`Mh$+waKHNm7%R)PRrBha{$Oa~uH<`ZEx^u2}y7(EO z9QocFbLx85s5wS_zp;}s6uCpRv)Y}tUfT8la~1!y;;K$h>upp<7#+j zedE8v{#H9AhQ^n44w=ccQ|eN0BU=U+sIBjx8l^Sb?0}5}0 zMmVct2Slo_5>n9xSZLNv4q;6WsZC66gU7X>cGZ?)y3hBLoBO-Po|j;{YruSfz5T^@ z;lXLsxg;DVQ-`Y=IJ?H0uo$G2{lraZx-wJZ7<(VB+|NMjz}|2%VuN;k}Qg%LGh5C6^a-UFN#R(yERRx#J?gG;oJdaoEVEPoUMn3=VfBq|)h~G#hj>CgP z1pDvbe|;3bJlH>oq<#~(^4q^*NBGN{st*hZ$WPSx99xX9HSvh3SU^v8v?cUUg!9Xa zF>^GCjo%_nr=Yv5tFIu93TOd@NXRhkHn__USQ@6sm$W4|X^Y}(%Vw)-s&8`G7c4XE zw0RbWZ;j-QSL`;{uRh(M@^=sA9~(UFV|CXWzILXQolom`@0pHQx^Gv7W*{AqpNash z;rtyU9v4nS_~87uT%aRkLc~dwh1O0KZL4(ieF?H!E~Pqo(>*y9qznZv8!br{j|*=H zo#_)o0mrg2tulby*1T+Z zt;Gb)B!Cu+t+FOzvrjD;H(sN#Miu*yL`$1d8#+Ss6F%!}fZ*TU7Vn-2EC&dcIm|d+ zc-OTX^#T&UUG^>VIp$0{Sk(aA-mtPxSXf~dPc}3oK@j`|%94~k8OTDaBvz4U6yTJE?Q!1gIKy`w5|+_8YzHhn}T|79fd!7T;}AWn3+%8MOd3m@>s% zq{Mw36Mbm*p-3$~iZ$%4N+ls~YPqE{_r=GD{i|G6=%|A}VLW>HU zV6K~UBL=**fi!K?`;rB@+VaPTL4uN5az07na#$_<4iQ_6$Ma0=v$mts!6yCP@&L^I z!A%RrO9DcRiTo)DVQ+w{fy0YOh~ZMGxVUy_jsPFq){cJdUS zm=JpFJf;$&ctlP;Px1z{3BtO#O5FHGq*2r-0)ENgA-KOAi8hB(j~W#8k=N7SJH(T& ze<|}FVK7oeh*C2F?u-_#AcbE9bQwe_cRQr?rv;GQK>{iG8J9?Tyu@TUFh&asRu&uC zC9I2M&_&fwJBV=&-EoJ$16kqE+Uc%nzxFt4XFpL^(S0D_Vb0F*wd@>oX>wUkbh@MP z+{u6}jix|-94AVTK}TwbTjT)rS6w z3m)M22P|P?Na`r+X=b>{BFg(cG^Rn2nMCCde@ug$5W#%BaA+%<;+<^vh>0C&<$2c!>?F?`b3!Q-M7*~sOw+cqMKBH5^pXCtlOL)TQ zTgK3EY8o;>RLbtCOoY(*B1x(jU207eQ4s}-^+2S{Y}h{Oi9!|#)b3-Bm6VC@c+taC zy_>eWgKCCH?8u_Jj38rz5+{NSt(aU`GR4BtwL5YaLrf;jrRCO9mHioj{D9(>i+aerej!lqSG#YllX0j515`{mBoO6h zF0TkY_r)`=E$I zq1=ZBDDef&o{p){vjlBZ{*eIElWQ=Ak&)6!(&G%?o~9{ObPxu9q+YFAfCA+FrAiHn zh6QQOe99DjyX_0-(Ib({NNueOBxO*zEN3CDDWbP$%d&+uCOCCfeqX{Md~0n=xKuur zn6E=&>%g`u6v+#$0^~7Ed73(0(CVxzALXu-CD#@fyTEHHEidZuL}dbD7u{bv)Ab0J z)QaqV{9-FNVZ4S9cgFdM0(7vbEYw<#jXVU$Ab)j(c=By`W~5!5|!&I)>=j zIl%MnClB5@H}f}|5?eAbEW@}m&axqFaw8H|0~{P-o~uVYV!pmsD9rWveYXtNknOGE z8e1X0ykm;6#V@5Ps>ENH!-9&sw=PD%6QVz}h2Z^B%FXIexZ!|s?D1qJM5k0S%G!C? zb_E!DH3`|yG7Y;vu=`NJBbM$MoICmw>wS8~W`LH7>b;O2i*T2?E zZajz?E967Num=>8pAhY6f9^DT?x|9t@+#3HWDAVe?%h?vxCw>f8)Oc1W%AUr*kb=< z74w?Z5?A+1eItpr!KL1F3`}eP?A1Uti*lGUt78|LWmlGI5-cg+b)3)c!*C3WYH}+@>doK*hcxM?pM-IJgj_2^}M^~81LKI zT;T&NRP6Zn=xW_B`J!WdbbkpCdnru1KbH5b_-zrj_+jm|1AJd_zv%h_;(3UWfF-B; z=|KM3f3ps?kiY(2q;zY3BXd}>g_?VYvx@5783R6I4+<7t1@?3pwrV@DEl*#;W?GtM z$e|MnNY&wVIrLS}_aWOm6sklCa>Rf#M2Q*oI3P&i&dDIKOh_WSgIH$zQl}eJUDO! z>F%{l4a`rt=27%PezKmd8Y@#FB`a(CsYo1+8`yBb^^OmWIesY?@p}UPUu^e<-Qu^2 zIR4Eg*|d04k$h#0MA)puhq-VoMU zc1btsy~c23zll`SOZ>@{_6+8Ai)fKiZ`1ReivK<%b>(XOAU*Z(^Tz|vZ>9>ydo34L zI`u>unIrAX4OebosoD zQ)Vw}XcY~>o&fX%CYhIopDx{6o_otvGX@VipAikVxV&AxD9JBXccLA`N3C{0@!j2Ty44 zOenL1B2;&Gl7MS)yt?aBY5K7_z{&y3$t{<^or#OHi>zSXyw&P&>|yF&tTf`!6lMrV zHzK_$rF3UkT<@lJk~S6~nN+8wGzD7;mV0eWvNW7$WU*{r04q)ZgtIM!%`7kkil|kEG;m+8mBR*YLxoTmAb$jE!6l?Rw}HzeEL?Gf zmb-jSm1bzOsnp=*vJ>vq)I%Y--xiqBxC^;D9pFM6%XSE9O>PCm*_L7^bRzDaV zK>b_A{4yVeMlgSa zSqCkT;aXjeNQBNogeq5Uvxx?HwW(jx0`413dHV3K;b&g{XTTrLS{{>^jVyzEU}i_A zSV2$2qR57ruMsUo8SrKV2lz*0D+`HUwJFv6Nq-8h0}W0|sW4G|>@9MYHzOliBdbor zUZaR(G4n#$ClKn-THq^skWN>M#5+8xtK6zAn!$gSwE?`+^5NBVGh}p){k8b=$Lv+4 zGbu#|Eiyt$egkJHCm929l8lsy@-;1^bAEYmn7ak=1>eEOVNzHyE4WAQWVxt&oElqR zog?Vfxi$0fgjjuM#zllb3khQCDLz?mlDEc2Na|!5xpDrK`THzQ1uvnMSopCuy-!F~ zS{7E#NY{&T>%`;X@a*~aadcwgXfO22%OKc z;BuXAT4t#%+7WYzCn|Y}-%_=QV~Ksi-WQH{E)g25aD8y@8d}rVJJhiY^sLTn5%1sO z=1T_;Xs|BJ+4UT!e*TVSDRAWkzmrNhMP$(h-`33aPC5J4E)5YkEuR=ebRR`{-0^kN zU--1XWCUoSp??*x&s6~LV5z_ODN@`(5`1?jjy=Xo%caC5f<;e&fh-#8p-uZ)u^Zd6 z$m|0<1{qDO*y!uR5mcP_5f8gT@0%AA>RC02MA0mJsi!>fHl$bDFD)0}5QQeYM)|Pn z-0$6YmPF)(D(A1Ia+$V!jC9#LtZa^xtHVQgwFiL*c|TU-pv?p zX$yFMOJ)*S9HLhEgj7mU)IA@vFHb_s$w+7Qqa7yz=1*ox`xSbk_;gH!UOX}0)~j;| zsjaV^_dw<9_ekT%LBZj&GXF?;sdc9g{t3M$%JXYBHy9@%Udcq2AfDOepOt) zLnb33e*4Eu!q(ffp8bc(;7aK*=L8J`qJkW6;PKBKOuQ&DF0dIDo4vV-Rn}aot=*!X z?#E1#>>6njxwYbWQDrW*Ox@fBYdy=@xwW~%H*~a{D7XGFO$PMBS?X4{5X!Ky5;rw~ z0`Rv0NOti9pIOkvp(WE){EFktr3G)6XL4eF3w<{#wew{P@4{Ajhr-ui^hD_XtG3* z(r!Q!Z~h{|WM2~{iY0BTtOQWwC#r2DMX_vHtF<0GzQ4Ir=+}-GvO-GkZ#M920qeBhn5%16K9>z;}2kFP1tf=`J6)U8j?Y@_h^Q6aAzg!A!gN_jlNa*{cz~N5 zWDfpy14Mmw;L9IIJm#uadlFN&Rs!IkoP<6?qpS&s7zOK7irY~p->W*G-$9kQ|Lk1= zb)yvEw)D99{*u2t5uvhrjUvZw(*nCFnkTx`*kbvoCTxQp!Dbn+kN#X?ni1!|;7GBA z#7>i{U!|5Kz}q~hi8yHjf3Cb01<&{keh0}m0kud%UodTEAf&(1I=k-BfxdvSTmy@J zzj`#8pzv(BU~SyNQ&;4BVwBBK`=<*ZiwOx99zB=CT9SnSdEAL%-2DMjp8P95%m?B$ zv&~96r)|)jnFq?AGk_HHs{C*SO{}qO^-*XL=64P z82IJ}f7v7SROwvt|&OclF4-4*&tdEe5xqx*|;xGFZN#}QCqG&+&2Vn zHi?E)9Cy0erRW@bk89fv)VzUBiyDW&jnx<-9_b|a+{jVHHy%Ia3cZ@QAU=gR0G~n9 zha6gqwjYeMvGrM|bV$rXwhYFmbr1*yJ0)(SsY?vQk@)sY8$5 zyT)P+^$KdYagq3(_uC+yE0UpB21qQLb>&1G{?X%f&aStjHo)f+R5(QH;7s1-_sZoe z=vp(`;)S4xarqYHcircWzE$8$;!!olc{1u@GWPPLs}m)9$Ds*Zi+;+cTF`O!8jqJ~ zfAUVTZuvMWmmgQZW^X+ADlUOm`4IbANT)Cr1n&YTe@VIK)=#;o?H`cy_X0>of?b#W+dm!A{ z=(an(SO4=!Nz^2^r6_i;1~_P!3@m7sWU)E(nMri!ruthUmC`hmJOz(+`TMgDjv~Wg zgFCOiCp2QY)&uh+O)sp8Zc#?M`MwDHEzwLjWrp`AQX^*H^Y zUSWU2=k*OK=DctRB*!!fPAxW__C|ou;>XypY7uqC8s5-^25n?Szn;y^U*7`)sw^TX z-8!~2VOvoX)zcWz^{E&gh<{4Vc=o+nnd!$$kuwFZ|6NqS69sk1BzM%_lI$)E<^&2@A;X$NQ$tkr>`t z1IswO-1riAK}^ zoDe2XRAk}g!}M`N(US`aLzc@NQ1fh-*{ksDs+{Abh|rkog@BmSw^!3RORIz7wz1Ndj(N0QtXqWhzPcyx%Z=g<{%>F!CEQ&WGgXJKpCwGQ(U+?w^5m+GqSaL}D6 zuiC)SR(TxRd+?IN?C_5yC+AQ%btvcyK~%Uw^)cBY@V`z5_(B~ey#cTY{JO2K!+7wf*MH&u16`p0hn-p9&VBan-%wv7DcF|#t4ec>`VS%V zU!amq?fyj&D^!C~$2G(90Y>4evttkykTPlfih)3Bs%(@M#va2v7BZI*oL%MaF;1=F zslS{=F|Ul2ZD@R0EDKfR%U30klwr@E!N*rQt9&TYY+Tejv#ERtxe{P$uc<-G5|85Q z`uyy=`k4Go7ytD91OuV(?*?a2zp-aD6&ng}n9)}UF3juG+FpJ&K;m6C8zK?jxJ(Bn zs=5EoT?R=~hWz~!pECzR6ZRHDs-Asuln-?5qEb>i8k}cgdFV%fSTxNwH0>Wv0Du%= zUJZ*T%ElHOVFly+XF3N9AxM@5cgD{vA`Q|m7TOsS$C-H%ZrwhYk4H$!&9kD#HsDOy zF@5a>NEvMzq|zO~3x_CGZ=N;55`&91LpMyJO*?}c)r&?=_z2_XavWrPfu@d}G6C42 zi6JPte8@#J(M8h_>LR-%inh5br1{t7DH42G?^-6gJg%mwc< z+~0AB-;_~?U4(h=OIs+y($sDoZ^<`Y?Xvd(k}b1lu!=F`l;)wFNpBBB`nGBCJFht9 zS?zhUSNq9=o)r_%$vqpe%_1RE6kcf!K{lostJG-di~E~c%%l_|ywJ^6(PnO5 z7w;W%AaomGYZVd$mD%PQpH_3rX@wf`qBJzN!SfcwL7JegH34#zB{Tu=rK?U1H&YW| zZRIpiH*ZpkwiS~EUB|K>Hzqion}UTd_~>NY+tWP3*(c+JEL_^2nLBbYr-lzeeSZ!M zspGacxg!rGf{s0=C1FeQ0ITsA!g}U)D!wDg)=TSC*7TH(?2Nc`*0+IHw!-psjt^ik zquR(sS_+MATiScIKaLQATF+0EEFy&iMTas6e~8ttMUauWNI9=EMe#`6@Y4=5r|w+v z(+;7$I7K$h)Xn$qG`RTE-L0fVDs$JO>gXyPH2?HvtEeZSTL-xK`$zDMSw<&Gh*gM` zV@0Dx4XG*)ou(ZKlPjgIR8ypkB>@?+qUUyE9e}(RnCr@F;4U$VEbch*9>x;D$3qPF z83s?Om4;OtY}HC~7Gk(dkJXtbo_SgT{+~ww8FwaI+98CN&2E=zb2*?#Sca#V7iZGKC^%Ze+$$8X%X=#1p zEaxx>$!}O;PBa^$WA$!pl`?aU7 zEPg?zY;1|VbDDOU6QdR1LmJ=G%z#_&4qcZV4o(23&05lTg3SPqvB2hl;Z{P#a0GarLeChTRkGKDQw8>rZ00pBvR; z3;N}0IYL(Iy%Z(Xw&W%b=-_FE(sJ7c7^u$$J=iFRvNv z0Y3Gn{lmPe1B= zR|;YM>A@0V+MWzFnmk$^CQcjUYOO!m;w4ceh0uRj2ALeui?_mZ??-Y zhVM7W0(6MRXICC`u@;Qy8d%H2kHR8RZd8*(R!5mdsH6d6;ca{E0-hfjOT;`DTIjcQ z4Bgpd^V8e6tvEQzI7H_~gnS^}J;#l`09J)|oOVYy?cYX@0)}(5bdIXM#`=l79ItD$ zxnOTD4>YNg?p`^%_}~!Le)qGP0dyUISjidLT#&NE@4;lQ2st_dctnoGUQO=sMw1HbWQ)?0y&U_oldsLkp66D$XfJ;_^2S zSzDCzBT4}mkl|^T*=6_5cS}PIF65I^tL$%ZMyZYq;2G8Oz+fQ#l5_B*>Tp=SALTO8}LH#O_4>^BXn&D?4Gappk6t`CBP zl_T5YZ*;$*-5I^5iCQv5HNVX?zw2P#D_?^ypDVXdLK)^zThd3Cmu5lee`;3Lum|IX zueXf~b`<1V54aZf3N`Rfva5s7(22HBju{39q(44gXEDT6^TaU|T}V`w%8DyOa$NXU z;|hH4hephhjl6LrEkmlULME@GyK%{OfI2S+N!y!{gDs&(fTx?8)q$}i%xHK9SPA(+ zwj#B|0EDz@iEN3o?Dq4kP5Y|$&Ca=#>Rf*Ma2M+IZKU$*McD0XC6Hxz$rekUZ1n1I?%A_T&iO9QxlVkqbyim&%dEenq5(~4?+*%movjYP$aAcP-NDr-Rn2IHHC zvY7&+hR$B-U(^m}Q~IjO2L`mMwMy!oHJPgalxQE6p*^$t>`_}fqSLt=zOf>bsZC@m zZQd<&@)W`7WFfb$Kj0#AuAjmptX^sS%oX{p#WHNOX5u&VrxDvme9j;1m=oPE)tH!c zH57w>iYYe3Mv{jNfdU%#$A^86r==l~vd(2~;{Lq7mTx|zp$uA5ia4^i-1+?P^l*I2 zPqu%VGSfc~!NLARsp0x(Al|=F=-&zHMghowFPzH&;Q!8OHC+5VFj5r*@t=#rvVUii zCuYEi;{nfb$u%L+5ZM18D@TC?sU@Tb3IyaEV)Bj4SBmO?ZbSlRs%a@}t6}|pWV8=5 zfM!gPw4fxLnchi~#FpxdfrIgd#-oQplWN#CI0OkE&tS>q63)>r6RTXrzEbT_u~KBM zUA1Hh7&`d#YXQppdICz%>$kHrXRQP@8x;OPgZBNBX_rG7R59Xa z<>V?CrGtO~)lD~u)<(5IOG-j236rRePpvm|rkStS)Ra=&!vhsPV)gbILP7Ed9aO?1 zu{jr#7^wm6hr2(?@d=on{fAtq#2X9HigRRg2$va8g{i1J?E9zq($DK` z__3zUXKf)6-4r0Y5p@&L`U5WlMggd4Pz#`lo!x@4E`XH=v6fT+*eAoSnHu*$!NCe= zq6qlN*XqE-n#9>i3tuR|Gxto5+sgs^lU^vy$Qr12j)5fu#cN6kQQ3Y)XRJcJvx(z0 z1*QH~7OaU7OFRTKFY}-I7=o-Y%C^Yf5Oko0FbiRm`^Dhce(4BS%gnA`&<52Qo;6d! z#FQw*AE0DOFUHKJg>CZXnO;#}|8W@lMVNIRakFq_8N@?ZPVF@ABqwSKa>~@ zObQE>$7Eo@Z*OYvia0prle2#gg!A9SJ#$pkU>4-FSbF?SZ?;}5{fj1-tPkDKJa~Q* zS*r(}h^JtpeiwWmcJB?xJQCASB&+={4t+N;5G@IOJhT3V+lIw z1s@BS%o&>FFPVKJB!@ZWj>3#wZec4TpSLLbL`xs`@DSVHVUs&th_F;gJ#w-#C9ayV zxM_f@Z!j8zAXhSw%N1NhJ?(&!Wz2Om1n5q; zp&D+BCGh0Ru9rq>tCe!Q{a&BD(M$hhs#kz>ngVP5~Wpr%l4%4J`!lbFd6Sz*T~@_N)uJ zj=ulho@k{d;?K}o3AUctHZ{KWtw4gP&JTifyT>K7nT`;f$cd%vWt9ecqUn~lj6q*3 zXve0}t=?1|&Wyp@J!wE+;N~7MlBYVad=y9=j!4(`=i(dJYaJ#uhAKvtzKFg;2Z^{m zOh9;9xNXi5aL5!k2wg3`SaWnYU(K9TcUS3t_NpGZ^R$x8K>r@TwW6kNceVQz82)*@ z_>9nfca#Y{c#>I5Tm{~(sZ~A;B#Am9=R??Jk-^6e=xCq&jlk26LiW?DC06%!I2u@31fDlYB?NrU(x9I89dN7M`;;29JN<3?<&L zN=fdeyIpfL@A<}AJ-g+kRGWBNLLBK}YV{FhcxP|X);jI|;SM#48aNsTGf^}wrMn4t z54AAcf=ee;wbs_4s8s|8lxGZLm^kg|kr@Z{t3>s|?fFWT*7#MQmYI0*72hVkAsp&a zyt*$@nu+PwBj0U_!NH=npv_ZuF!l(PRNaT*)zeNJie5K<69hkB7toXs?_2^j6>QYUkgX_=MKJbG z(DcI;L>-!mkgUoY#=k*(3`N67Ww>2z4N!H!f*M%kr2HG?azhX>D2wX?VL#A_A+GZ_ zb8X_apWg&hBAlc@wTW-9P>e#&JbRM(2ZEf!MzRi7yi@R_ zmRndAT~X7Q&fNNKZFV{ya6hoSYuD7_K0M+V;j{;5GA4-9O(kc?tCr5IC{)l_;^o)! zyuS;}<@7kGmtX%s6x}Zzp#buAeAT7Cj(=-U{~H~|3mn46t-=3`A25%E{@p-Sf4oZ! zhWyW>PCj&}-(OIH>pKXDRD5hY!M}*&pEdE)Ym`9SdLG(9TlHgXP4cBnP=mFGI7ni4 z7$gpzkR(>7$OZUzF!=Gw3ZD9ai5pwX2AkbV>^aLu<-zt!avTZPP0uocGp@h8z-@w@ zQuJ)QAAcrD-J)>6-|1|wJ#|dI`49kKpBiyM@P`P%Uo+m-iI3C=BbX8~=MeaIJYIxW zY4(8#90pub$(VG@7E?~v95Z&s!_I3wwjO&_Mt^G7eFy0vgmMgovS(3~Y@^AdB4jWv z7=Xc%K&fxrJqls{-sQp4g#zWfk}jgK!%X1t*4f6VY=ioK6GuPH93@Koe~ zhL~zVi9T}~8hsqNDj=?L<}#8TV;*v{0{T?M6dHdzt&Sur&D15Vpbw$1Q{=1;H7o&- z(4bqRmGq#on@Y?FRZZ>iK)YUv%JmCmlINGJ456^Wn<_(QDTRr^+;A|s6zm1+*$b6Y zkB1Cz;!6?C9|DlX)59=VG4@*7FkxL_)*HRXe?`FfX5u&&ZVR3kJ9|1PU>~krrZhdr z6Y&NFo5Wn90fyl1B&JX%htzo+Gcte%40fwVyi@qR#G+5IB6gBm5aZT_7t2|;s{u49 z(v@^FTNmxq<%R^C6YD3bGSF``TH#RkKlO*()-?`8(o?3zA1bmir*-TAPebVUk_*Uf zC1DSv=ZM=eVLlzfP_gq8t6A$(L-9noLq>6!RP-%}smyvUya6P$N1j**%#T1QykE82 zxUl%eOs*Y_+|-gyR7skddH5O`;x_?d1|x=KKDRxi&#xrG*FG6BlUZmb#p_|`H{h-e zI~VEr^NtChAX$ntp@^{am8**OVb&R}Vg0jfma_B;j^HPn$0HT9`$>KZMML)y9dh{4 ztd+B}^i^{`oa34i210}#K6*f3QNWP1YY5?+1amrjhNf{WNl#OEN1C9We@rmV0VO~@ zEJD+C)zRcE)})cBNZL$^lg@%u=gyqqoxoR9h`U7o4UaY;dOHN|nUV)nt75z%ELz&u z%TGn9sgjWrX)9%~VEik(u}F=tAMg&G{Pvl@%>pVo6#Hvv2)=Kv4i=~zUS5$W;+_of z`jM^V@O=uJwVJLG3}WsNrpPN7`jJVpC6{}M^L0YgmeI)}FG;?8R1;>|kDen*=qAg4 z(?70*i)xpzhPwAXj9noNk`#LM$)7WZQ6hFxm8YAu93*z9KMK43s--~at8VI*mzp0O zC12frb1jQg9fCfb*&TqgPps0Wk$1_YrlV^(FG;MobwAsLaj4wVY^@+r=*6$V2i4oy zSt&B<_wU3^!yf~*rs>K{M#~lU>@*o#(D0}%+mhHekd3sn^AK%BcN;TQ^sBhR+yWnV zxeh3Wo};Y4wvFrfdfFzcL2Qx46hCxKG_p-n6IJeBxaX7{43u0s_qWNQrrN9#G=<9kmtEM2>@Ah>XKfwgyD;olSk_&8%6wU_Sg zcKEDb_qq@=%aX})7F|@`yD{oMq@&8db7OtIoYW>J<&h}Nm;AOX=8RvnZO$?j0$h69 z6?f4+x~-gcnsh*sCGp^|{R>TX z{ALQ>v23qCfdX+^H1DzZI-?7&`i?7(gIic8bZ?vb;xNFqRr+BI_rn^o`eBKi=$2cl#Z z?^P#W8$RRUN>5<)Z|$2)nvlQSOiHED?F^ftXVn0^KUDnQiU0v&o~cP&D6ioqT0fyc zVX4uasLd;tuYdb(yxW0&3I+Qu%YuLUo;KIWhBVh?!ok*Q+2t92d$5`h*sjtxM~7qm z++wFWFg*a(MAGgaGgPv_5}5Ih_loP_7UTc6Hd1oowR--O!(|uzQasHlew;cFPoCw~ zY`GekEe^`!<<;Q}b%Sv}r1x^_886Qd5q;gF<0sEE6D@ax>EWfDMYPxU;`IUJBlV+8 zaB?hGs^x*?X>(`)m)25@ly)a6h;erGKeaWwRUATVQ^lOGB?-v2Xk$(aa`zd zeIC!W~L0GfY2bfCst3V9l$E6!lxsZwbWvb&8*OS+g*VE?9 z*{Ht&2yV|5D1xaeV+MQVO#%B4d}TJaj7H|xfW$HLl^UQynkwhyFqd=B^j9q3*ngUW z%|1V`-{PsSF0Brm0g6tR-}y_oCzD;4MEb79CcEB=1b3-kRXN8d_7vc?fHujfeh=-< z7kr=a6{45G4rY_j8kyYB>o;_%={HBPWw0sjRQxZt&M7*xwprI<$F@7RZQEAIw$;HK z+jjEC?6~8kW7{@6wmRAA?^}E9^{=&$=RBI%sCw#|RdwG2nH-IdIuoW%a!=9tu?Di1 zR08-AF690&sj3pAQtP~| zaG^g-k$HQgP3lG@94MQK15PF~rem?~{mXRyh+y2G*^3a7W=*r$z#y_sk$Y}E=+v+jxdEJqM4J!NC;8U~O*DuDk?}o9DARhSkxJkdV6gy7=6a~BSB+L%MUOxme18!*BjQS&! zz@S8FJu!-pS;WcI4HDQLws4T_>|BFq^{u}0k7^~MU~(mj^Biu^BYIv^BZM&m`=Jim|kRrtp! z?Q0_gXc_wV>G$7;jp>NQ4kb@rtnc4yjJ`44bMQBaPpvB1vP(u>=yg!)ZA~$Lx96M4 zwA0dRP)G^O`holHSk#Bi=9>9;&V0D-tF>&r4)u8jJ(|U0Jf3`iS&FfM@~6L>oGzcx z`br0IS`$&v7V+0Np@Sj%~>!T~U_($sBQP!LykR4`Dp?3(5s(s(r~I%GP zpa(ma(h}QRK2ZVrt~G3%R;i}NRVKpYR>{_R8L9&$ew=doSDE0r+Oa`RyCHi+R@{gb zELw+M%(JFzw&@zggZ?=i&f2EnQjDW(o`ySPqL*bhD8C{OrP*)!6kGcWrwqFY0D%bc zH&HsX`6&)I`JKe^JSI~tIH3!v5s6tMCth7X;YakuW~ai@hQ$wBiv8b8VlXskZ8P&+ zLCp|jE=>b#S_e5jyoh2x!drREy-WElK}gxqZRf~8$OtH$xQ?@WDTPDgwrUk)MNt6L zj3GtYG7ocdJg;e7ik|)Z-`t%q0B;*A+`8Ld(UCsfL?(rSe%BBi&fDE~u_112+P5(uU*zSOQRH9E}>VhX4V2 zf&S0iqv9eQKuuQ@PaXYT0Xv-u9&7H4yey~5eGzkn$j$!obQEJ+Xz(!L4Tli|kjE%3~aTwlS=U6uLOQYI`n9wJ(_kBnf%T$~| zu`tA@vBdC1m&U+x)@Vkt^XW3ksvR2&UTY84IwHnkzg%lHpfbf|SK3`eb@VrBUwprX zP#skNGSD!W>S2*~M9o9ZgC$#uEuq$fY)rHI6#!Qh@imYp@P5J)`5ZpM+|hv-v1YVo z5}A!}V<-2V=}rO(RD-W?em3lT;1kCnM)VFrs8XTcV7r=K*80S0dv2Vg-oR_iO2DHK zcN(36ufS?@hi*FRk-*n3MNLT-`>6V3wfJ5(C)rk=g_zxv(%o1?_7LsJ04!Meata)| zA;9E3JdJ>e&ipLCdb}mo>FTi+ZEnG>9>iAvHxnkY*k&uGFvRW`nVFMbpd78}7N7~~ zAXy7|mwbFmJ3~sXx2w^^Adf%cJm?rQbVeP!pv$khvdO_WQR@z!eXb@>kete&yY-;k zakS6QqEXH#hN5&I*()E_tJl{SICaJS*^~o!-Fjwditu>j7UU2vB<< z)YKUJz)m)6-`&60?whv?hqPn^r|+kgCrT7CzIvja&|~5vgPIm5LZg=jU>OSESd))= zT=U=cKceWY^|cN`51|2c~u=Y){DqRmV73(5I7Gda}5)B zyrbi*nK))j<=`sd_V~Q^g-hr!qBsTv5>GJ zkn{DqsSUGm)V2oWzZjW-Y|YXEqr^y?pXZ78nRJ8nIiCl`Ggg=)sKEl=a3E|(;saubfEZdD zj5AVNN44b;9J`e1ixUn-u}YE0q4+W@RZl^F-}JQXBFHlm+Hwu`ox|{t#Ofc^NhP^& z7_;XuD!;e>-_-R#d*!x_XM_Z(ARvX5X^K^!6HA}Jx02f0F#tYl_cUz6PRttUpHh z!%||-X{{ac{53*Iv=wJ&19N!UuOF-VLLlztuePX*YCl5aPmIQ}ZNS$u8w?NNOE^G- zj)0|N-jJ(oBzmbB3Pn@wiqH_%BJ2azQZ8(%_0)5TK^kP{#RY*s!mZ5r^V_2Xe1_!U z`hE`}AFKfKEfq2o`1CBYX4HxpY$3yVs)`cCejVIm?sDSoB(H2b+$zEi#=P%i(h^>b zS!Bn`|7LBujj=RXZuELH3CibQb%^1X?Ug&EHN9n^8r1DqIY`hOj(hsSAH*F>#qW1b_{gCA*&O!DEGyjcPM zw}!*i7;td%<#RebOOi*^UOe(e(#DrOIWj2%2t4x2wG=reG|SI&wC}UMN5yd4u}ZFC z>=3>h>gW}7>#ESS6>e}%FP8jGCu${ktNC*PHnVob90g?^kCS~>Ezh|W=yMMCHsk?; zA>WxIZo|ROMs-)*lo>}KahHn{4ixv!aE1qEB)x(;*QUN=o|H<0?8!Lsnu}&}%-^F&+bY_C+ zNeR(2&t7Eod=WKbRWwzY6<(w)w$xYpRhUUtT>(ft82EX*&7&u~6amq$UkXzMr+aC{ zBMNgBhWa^ZeJ43CRfF@W`{%u-l^-J#kmdWHznxn;Bd^p@;CQH%;T^^FfR%#S1Y6?r9UQvs$Fq1fIv3RjM9rc8-mW^q)vz4;c{83bPTA#`V7V-r2r36HfN@JJ- z%2yY~_4ge?$cs%~V%a6lyhct}jS^Bsir6`kjZBlBsA$m5W%yUYaMQ%wVg**UuDDY+ z)q_`*VS5_~oB3lDiq5X$PQO2?fWyf_JKCxFV`eT=IPDIwd?I3r-)o#rZtU*+a{}da zbmXr?JQEuAd5c!Dfq!xo{L~j>PuMh#^5(1pdfz+i3(qPn>z>`uFs5-Mg4hj;0LYXt zk~s>RD(}*zUe@(dnl}^?U9dn4V(?)-W08j+eZaAX0qwU+9yN2g%l{*cl+v+R*BD@=UgIFz?JEMH4a{ z5zCWSJ0A#12kC7J0v&fi!0538YpiUP68#i0Ed1|3NPlYL-ld3u(QzxIvL9i4!u?;+ z-A#U}vDAxkV6!Or$HuZAJx@w_<9JZlV7tdi32!ya7d2$@3%J)|Re#NQf+1ALRRl3v zj}Ad#W@6jV{OLCx?ol9?nNF?|2gTSnBbE!Hcx9?3fC3k`9l#p-45%u_z8v{R<2iOC zDm-3{!l)RsRve&`o>ePB87RAo=m5-U$4h+Z7NQk&g!l-UcE*CQF z$`*a6j%U7DWJdrVnr~^yPiL~R!-8P<$rz9WgQKkUbZ#V>%m?Vkc$Azl{TjIPO`#(o z_>PCphbFTIB`RY^0KgrAiJK2%dWisebPHxXRl4^}T9(-D2QuQ_t%zFv_2l7!IL{x# ziO9+p+)`1tFKTRGirgP`_HbQ8g&r~sm`gMn5erEydrHe}9(4tx(jxP}h1L=bL0ga> zf}h%JI2i1(>BGDTi6*>84<4f@fz^i=*TCcE1?kEQZNibJj{wkMMv}Wst$i3&3WPET zn_8qHaEJ7F*?wSAYT`yj0S99OYyHk9r1soIe$Z8nDyhU$2yj>y7}9So)@kkCL(l)> zVYMEN8K?T;M9U*4gv)_oCD}nDkfB2hd)9Kr_)(jGD{=Ab+jx$Yh3KAqh4AuHm9f>5 zYKw2fr0$alaWNpPe6QhD^GQ#HY9)vk$^e4go4t!HXPw3Wyz5t51!{>;;Lhs8LMKr9 zNPv0xp6SaoEnAzES!pS=O}>xukxhV9?d{4*H2RABIw{46|WZx;womK})lsjZBU#qx|+r zt=HhZ5UGC~(AKFcnb~uP*SUx|x5;Vs4C$9UXyD&&x5^-eLF(KeNU<{=kF$AzgiDRT zzSTZPqzEVU`8nfC1gp84rAsqwd?P5jGHnG(dB{X8RKz z9?3ZO5*|Se;ohxJ-Qj+RSy}%;Cq^r6hW0`-Nf+SQ|1-HIYdKzpnJgSIIiTyz z0tUN;6hodwj57?C*wCg>`PFcGY{{y4SGWNtjWOC6@mnPH-ab6Dn~^$+Iob2wNU7p_ z+P({keB#uID=PC=Y*UcJpm({vrnzA0va9O(qm{|AV%_!JxkalyXP;l5Rrgf=mc`no z%NgLY^`RXQz3#>FruOQU`6t^!5Nr9Zbj%~HC2Wk+e&;5Fx5Y<8_RW;c+24A2#N%rz zAa>3h#JBr~DM#;wPmEU5@}6qpXN;2XJv4h8A*E)sOYq_~G<#)Q#iX(|7C;w$Vvr5N zunDYdlwBli^txeyp1F7T%Gc?{{-SMod9&PdvetUDXI8Cj#m znqG9)5jQZy(lmVi`i{n&Wm#E1d3~MJ9bVz-(D1LT5l^^*;TudL?4L$%iE)dnE>Uu~(EK*6uExFK_n(_6p*$XPEOR#H=2iqrb|O2wC+3GXXe+{7BEbmnvTnat z;JRl}+7cZ*)?bx+-EORz3A)pCg+}xZ?n0bF5_F;;394{flu<{{Z=nM|qY}9cLMAj*%ueASDC-TVpqdzU+-3 zbrURgt^nV+*r+2^uUQaXN ziJI+fnJH(Lk0<}91U%3E2gPl`qej~VMP*Nxe;X}P$*`ZYzq3?c%Ij(5ub)VB=dNKB z9hmJ=fB0typjg%gV0=OO7-eAQ(A5V&!?G8?dsAC1VOmREpSogL&lJ;0|GATS+yTR^ z3y--d9m+@(xRsqjY4_=%-IYOkyB*~2evY=H&W&b8sZi>3NHSD}O5F`mqjAhE+LoG)a8LjG{w>n=z$?7$i zNSN}gUzxSRNnycN6TGUVz>^bR2M^I(FhXt~(z`BRc2X4ST`~b4>0LCMX}%=^u#ohQ zuHqV+zeWpd<@^#-{4ELP`v?W5$&@nNKpHE-q8v9spL z-ksBYqt_xD1^rv{-a%O0SJA!P(7cJap^d$v4M{X!hoESw7PIrg>wBgjRfWD6HQ6a z!B$Dn$wI){rNH>@=u@Mz0Jwc0W7#$DXi6deaQ@V|Fr)G@X-5ZpkU>I_K}t_E#z4); zwq|Q2YSjd4OB8B$8u=AEdD$2;ei2@j3Y)38XA~-%8BAjV#E}JzOyufGAYA}s4$9-K zDcx9$xcLx{IApWgGetf!dhtrUsOklGuO5^Yfdt?O%VxAKUuD zP{H^*)yQdrgIR}sf;w%51k74C)LMF8zmPXsn@`}dBIga7G!69@K?$t*4t>$_Lvo$b zoVu($Ph~M-7E?l+({%N`FCHD~dJS}QvQ1+DFD1P}aG7d&4y}un<-W3bGrnUPxcFfr z4Qar-DpjnR&kB_!;wb}z-N<`F>HsfSO;N4Uak`kR)I*wUn6kE|H@-7J)g znU_z(WbdUK{EEfSU{`Xc(zh2Y?hPS}IVSTElSb6$9(BF|4Ht}RVI#hYlvKdAud;Qcku!BKJWv zL~QG6O?4O?mF}Bd@qyD|;5mFs@0JZu$=Y=97&Yh}{Tyg(e;(8FYF()N?A%E2m6@;t zAS+Qfe`^gk8z1a>JXu(C9$zft^!()SqppwpzQ7M1*AIr)}+Yd4NVzDU{SXMSe6$uxK z+K({s)D!kDM52!Q1XO?5et)(|dDl5eGn0ua-AW9BkxD6-dpuujzC8DyI=OiKBWU1@ zV8|Z|Ni&ymaSU{=7X%W-x>si60w!=XzO4_NHQF}zp%8K06@d{e%~uj?6iTx%5Nx3Q zUf2xTEH3kdWTS zR96M;9>v9p&STr(UQBn+X<>SsqyN{x9My^Ajvz15t zuQwdn{QPV@Q+wW71~G(!=xmGSbOoG>+}ZSx%nXstMwMEHufy^5<$XGl1E*M80{m4M<6@My*v|^{ zm^V~*wb$Ks)q(90Z_%~TGQUc3P)>SBl}N)Gm}~|Bmho?b()S zCH>u_NczPSyB*9Ex*b5jlq2k_qwuH$tMa|O*i$T@EwQ_`q=e$Pz;`)Z{z+R@J|k5`NdDXLLH+=pCn0c1Rk|$U|4>YZ?wz zJBkV?HmRenYfvQuY|VzzXK!S<#J-SGl#8?-5|vY{?fPmYH);deMlz?PBVfiSxY#lp zbCRTwRAA_t%da1n$7@>HH{l?R(b!S6eCBxlxhN<}3FcL!X(5}Y(BCG>402PNeTuOT zx(WP_5*ws8Q2Sjx^;t~(O+v{HNa^WSK1jZhD;s3ihuZQRX?L@T%f>6{tS*tI*H!Je zo$MlXQ0rx*B1;0E_h!&K(!_`mS{!2*s@dB~y{mrAoj&NexVk;wpLHm=aek%uDm;9l zPkR~h8T)c8wFDz$zzVmQ6mmGvIzy{Pv7x<(fsqO)oq8O+lC_c#uV?Sd4{5+f$lfl;ZPZ3?i%DWFw1+q$!Km3eae6Xx;^ zGQ1ESC-|BU(+FEu`^D@j0OASe;3)+KAPUi4h-%_<@^P5N$b3Q4=7hh~MpvF7j0C@r zeV{D>7e@VjVnuM|5)XAk_cE;*Th-^m6-hY~lk$Wz#6?TZ5nD>tlbl=9PYVgy#(AOn zRSMw9qnmKDW=PM@nt;B=*N;GJyjBGOPf_*D4jmvE9ZKG44m7D9fNwkpOVmqkb~g)N z-fstO0rGF7_3dpTQrR*hdamTcdQ;38zyL0}7P+)wiJ>XuCJo+DQ@WYw<9hl4Xd_MI zD2<3JG-l*u&oGU+O_smDob^iF?J{iY;$0&S9hC{jO;D)3YG){nI_$AkdLp^c?XofJ z22oxykk?e+2?8hz z3AAAfWIJU^X=-LzbXE@v{5E5s)OM)RH_M}r`@MVhG<6Y$rViVCpH`*3f*LkY4iD~U zOmBKaD|G-{q8?$+x?#3{Eb`+y-m1k^DoKi|*u>m=GPSyO&wSQ-j7aG*gWBsI^8a;e z{+^J8IfgP{KNaB};6WOAp3ES@bG%&Bws1jNVg5cvv4{LpmKNX$Dhe=3`uWpO{Te7W zhbj5Fhn6f-s}(Mgj(p{mNWf`A$!q5Ra~e>r2nqSAd?VArIufNr4#)er`8ko~-P$1N z=l3Z94@rnhsGAnSYQv!7#=ufubfrK&Lks6%A*v9DWnq1!O(3?c9jYrCQhUw&u%E=2 z7Q9NEV*`*{UOk5r!v+YCCWo8A+@~`y)fQy2$tXp+LU#d;QMX_Pd5O6)(xhPZ%(Dhfo;{g zQfv&YtwvUYE6+S!tykjF=zTOD>;RlY=OpDIrjLt5O5SR6JiP4*#itS3gi#z(1Z$qBhM{>iIrTA*0~T=+NLX4mQxzqzOeYhFKH>3hjIDrfs6; z7Sd0eFJfR3g1?B&IvO^xFeVgOT)HQ@9}g$v@;J9ZJ3hDfX-&}ljPBIw7`;e}wkKsq zyuA*`ZKW=*PDSiJz?nkNX_i6QLl?GOpbYwp%T|9=2?YUw*Am5}1gy4acl=p42^2ot zRWeD(RjkHbU6s={izKJfI+i5x%0s@PZCMr3My0szc+3zHt^z$w*$sow&#lfK4ivrA zNfNg!&ZTT0RI|(D1(SmFg1XF3BDZs`_Z9Qo#~+47ranvh7hq4)$19cw|+rymd@7 ziu4#ejPi`aU!$$G zMSJZ^LliZ!g8*!q7}DJ}T#;ERvhqx+x&9$5UIvp=UQ>_M;O;<5RQWd$!BJ0(c1D`a z4b!7s@1ty&%kj6T=TFH;&1EvaCM!CHYVN!;RuozC5ZM&ePCgfR4nr<3L3Lek(C}LI z5WIW|t>;d_!&?+zlDhZ#7fWQ^8n=QC0VBKi%Z1)yGRz@{1!;T&x6t4}zd2qObi{Iu z;N*jePg|tR+R<`QepZ%0elDod9>E3od}ALiRXrEmiY=bwh&XIGP{6xZrask@sZ@47=h$`dIEZZ>`pVKjPFYh5X19;F@>&NqVZxRZ~Wlcemz}* zA@VJ+LAw{o`_veSCoSa5S}>L+SaxYhSt9flxKWe{UhxL8mspYmvK_slM6-OU8 z>nddCh}CNljTq8HLq=ej)#A{^dFTkPbph!Y_Rk7K@Ohj?zc|3TFNQ^db@d+*`Orh% z6dI3TwRQY=wm-x(uM!$)vzXRU~B9~z%;!+nYKRp3I_dUq>3PUDL zPH;dkSkKh#i#-8CcbSwkI7o$kD&!_ zL@O&BrdXB$Mr6ekTU0R5Pj{ok~U?gfg2 zg{dPm7pXcBSgQitV@w?R&xx61Uy>%~1xf}8VGou6%%tXb;&fC0l}Xz_GpVc4#rCe8 z{TZYoJf3jv!h2_B_?((FYS-B@^a(I z5AyayH%b62ui7Z?m#=`sV-6=Yc%%_;>6OeW+smqY+Qu&QaLGFkXwWK?lueBtPA5E% zVHHNYTP{xBqt)IaOFOe$kqM7;pd;U!3+)HI5`u^94ae4BL{5|-k!By{koU=UA3Fc# z8a6(ecvZ6>A%^-{;rv$)%`rXn%W=7w$RQH!_Jz8_wSi}hmVe5a!K&jsiii*7r6s>S z%wU}ZZ4HWIZS5lZl-1Sj`BKJA_ny1PjdE0AU9<6DG(Y35V+QcwaPCdUe+Jxt$LaAe z&KT>ne*^CSgY&=9{0z7{v`nIjD$U|A-v82!a8%I20jTM~;cW}_nICvXV$g+J?ty~O z!OL>8l$+zM0swH+n{5;&7~_v>G=lqc360>)v$KT})nUCfL}??7PMI=m3nXJ?cHZxH zJc|^C4&IC#{r&JpTl?;GamlG+jLedNy(#<+3j3fP7_S;C-P??bY7F;~MY8};8HXTb zAt>6rpRnB#?Jbh2-;IF#-L%g;?5larKWl35?vX;y1x1YPLTNBMnxn(S`TI%vC?pW3 zsH~HYDEoK70%rv%RT)bR=o=mWXRQOgg^H^93_8nyNuqgwlGIhz?XGzEtW_fm#gF@B zs3D?4j)M>a1QZgTc->i4-7Vn$XuhZ^T|qq+_VZ@>Dp#KU8vny{w9d==Z>fs02&1T% z8p&$GP;&aMNJV;wwOFisxHAi3g+M>MJZ1x0Y`H8bX8J4LN3Qp~bnaMNr@n+GicU?_ zf?r&18#e&j)~HB+AYrOeKB;dryw*eANU27A7SC;30>3ZMV%`*Sd!A3){W&^Vq}Y@SEc2NBbLvN1(XyF-tV+fQxV= z8;9+cZ&7SJq893zVt*#ncaAH1^ZzDQ`+t%uC-&)uni;(J!t%y{CDoZk_7Mx#gQs8p zf2-56f2z~3v*j6*Ie;=iJ&C)>ZBp^y>h$Vwb=pBRwj(lOdGs6pH3f?Lq6?)UW({7B z)mDF`DAUXm@In76A(KJ9;p>*K@+^?2SVRyJkxD3U%a5t?+#>h$#frvGF^Vp!@o<6D zs!Cqs@?N1$mDLP7jH0=YPg#dhun(3$@DU$- z%rnG}M>k}vUw)lLwzF2_W-ImWvyve~LS(Faenturwg=WWh^4@8uJwLy?d>vLpcICN zp*M}(qV0Mj2wM>)lw-{aGBo}#ey9eXV`HDWv=I6qCGu1+P_#6{H0UpY7sfCnTEScCVN^!l@#T)wQ^U(B&2YPw?QwR0U5K@a|!~F zf_F8p-!*58%w>23Gx#eTj&eJ_FG=2?elKl-R_!8$d5&2ZZT^h*pnNf_0G{ZK{&eL} zu`yV#zGaagyWBkG<3el#>}I%^7sF537TuV?`ZOFMrh6G-e@~a3uW=6=V((scBV77pz2q7Fvhd@kWk>Th zd`P}~6@xJEX`#exeV3_%Zz^@{x$teWu0D?*lX`XQ9vhn8JkI?VfM3uaawh!TlDx5p z>~b`^qf9O-yBGUwNT2zaHWYsTcUj9mER>lwTxq?fAWJg=VMtgQz34-Nh>Bay4s3^2XX?V2@P%7L~Kq zVU!WHG6O#|%}JB)09n_o3)|U1y>F(WtqAY?R0*$A5zu?YVe#cTs=YVeePx7M@(orF z$|qs_T2dO^5NIRT(fX`5<90#oXPojCTZ>GcHLL@38K&w*-xIaB!@_K(T()6t>qQu0 zyD9L4C)#$37!6hWAvlcF`|TDh2tZXy260#qSf(K5qOeWI0gYqmkmKR;IIMdtVPNLs zQqdW18TJ0$D5TM!DwYlq<5A(v=9^~vFj~mOEap9CU8OV!I+SX+GsbiCNUKNe8#FfT zeJ3K7KXBA1tm`e}qG={V%UA584(kG~PE+SB-4(@)7k-|;G?V}@>Eb=GT^o=$a!n;6 zp-cI)9~=k!0NO}LeA$nV0YKNR4eOT=Xwpb70rDkW{taSNqPn2syz3PxGQR>!L^oX0 z$xNx2SI_MeO={Ax6!5X`uYW*6OOW7?6)mH^ZZY_r7f*O*hVf^iXR)@^F6AGup8k9U z-#%p*BW}!8$=beB>XVSO!1y+fz&C5VljkC2*{KNp0Ni6O7eI5oqOO@ze2sFOdQ+rC ze5#9sQTM|=BVH2kigQx;!#p)=juIgp@a2Tu~m*JMnC&cSx59L;!^Og^h$ zlLic!%u_U+YTTYcu6d)}3S&<1fId*aU!@^UFuLKqB?+8%Omj?%T#dk0=|w0`eiaz? zO@0lXB|4aht&*vi^CJgHvA&vjnQVHTo$-IP{OTnRJrs7XauOoot-YtL7i(=djNKf z8?DR2G{R_X(U)t3v2+U<6PSyV6u#~Dnp4mEOHe!GuoebxDcBZ6Xok30S&DiS z`~(Jd+=cM%T#3aAF1Krnru8<%adm(LjS%c1`C`2=2ob;d;1brvQz|ub9>awAqFEoI zVfaB(7mh0D8T6&VerEv!^F8>a$^g2;?PXIORYuJsKQJ8;yx-m<_|B9ak@#2k;2_yN zF}4f$l^iXp3V@2lf0FOKMSQzpnyzsnFN=ft-%+;2nC906w-=bou0Wioo}`93i8W82 z;(Kc_%5EV$(4I{~F?i%&cZ3|}`pUot$+lsX48%b9z%uDsXINRrmHPymY5{q$odR)b zo-GD_!6JEGS`Y4){3Yd6#X0F@;@@??XdB9|-M`-qPH*VzYv7g`wjd9HBGA(iAf}e| z8AtLsg`ear%EL7N^y=Jvi1ex=4#2@GNtmyNolx1T3SDTCnp_sZU+m!;Yro}d(w%SD z;+sr28li^EulAMxz@Zvq$OnKg%&1Tqd|;&<)4PJSlBZu1+pN(v{L)C}pwn&o^6*pLQ*E5U>(W70Sj(#JNz2$O#t? z0U+x`VO5pXX0`Q`mUXjsVX)OYASM=jPTMt8c|Ra`z+~XQmKh!N(gJMAFyk#I4WG@bRzF6DUgyX@xYB4TrDxhLT-U47}OBW&K*Xv=Ke5qXk{doW+8cqFhW zW{UTY;YM&siAQrNw5b!B*P(T?uTdW1y;8{7yWEALxpdmycy7$eVo%+dR)+FL+SH9h z^UMQs)d*EJ%(NFeD^`7Ot~%O$?6EL;+c_z;K-$P$WFJ| z)0WdnvDaOl%(C0N>2!rHExzQo%1dw-99^nIBQirOo{J&}?%1y%_iFpd5t!4NQIx2C zje4t7W_fh-5gFW0B6koMhv(fXl`gZwpX`?>jhFet0&{r1C<8#(7)_Ykbz$)Nl4lV| z&w195r3R-oWK>Bf-LM&)tDxG4<&?)aoHh^YtvcdrF0q-rn3g;6;N_HJY|x`wyu74k zX(gTftLwu}kBX(WV-Ypz0n&zn2oCq{OP6+>_cc8(+q|#Cw82iICn!NvaiYL(pjq9X z^49insr)#}YbO9p0g3mbKg4>aiEpUAeF5Xb4`-QZY^hMMMv#1OCfM%`d(I<*K>g`C zxpnuWVHEM_8&F+`;U{sxk5LFUdz~|^2ij>H{ApGg**=GbwOtQf!uSnaP=H}X@LpY! zy_sC-%1l-!%YK?DpA`fPYf>n8)sLx(SrucoQXPS#o)mzQY@7nC`puM$3};>5Ay#96 z=`54o;67FmZT4uovWX&}5f{UbSzk|0IWF6nH#5Y0e<@AXJ}YBq$PtCWZECMqLr3AV ziR{b^E@9LLUfj+{9w^WVvZA$q+6gx9oGU1bw6xZUFpFzr{G|AHd3L7ph3=<#MZ+=t zr!W0C!dSq(X&otk`Gm0r*Y5bP^v-Z3-49sFOlbZP@VZjxughaVhA4jgZ`$yVWmCOV z!eb=EMrN4AhzQ!zj+W!QJc#nz-=>VzF%|cwvqK04VwU-K333o(5a6UH_8cXb_+~wp zEneV0IIj*sswgEBVrem(rxXA;6|G^A2RRnvsa96dNseMH8x!DZ6qR<1w;q?jv=nK`xmQW(bZxw&90Ab~n!0G3IP z-4TEsUmeVj{6OWRr7@|G7Q)#x$G@93j1y)((obQN#1U~)_#)in;L81(tY;xy^b+)HxZh@{dmuk^cXW8S~S0oR6&^(?P@5vqg=U-cC&#&JR zx7-cS`uiS7M0u|`-)qDtL@ix+QvrLKP|ARNk7ja@WuiIXr@+oT_}|t0 z&x;8(QFAaasKh^`BF*KhpmG1!DnAxfUHU#RFM&{L#QaeIyoitv_NOccx&#`2dWtOJRL3KHKbx1UWl_$$SzKkbT%yb946W7Ku_O}?a2~2pn-}Of z+M$Lm&g+&*uXry7M~j{l_4I(|q|Ke zEo3>7&6JYB7UL1aGl{(+*ksk}gWo&*l4~zD$c-6E89A*ABX3I)x^+`IZN4HO+_`VArYXfh$4 zz0@K+9t_@q3IR^sTc1joSj~+Ri*W5R%oZW-2qnCbY09GvchUNxvTDLF%}&8qig{Q% z-T7JSvxrG&Q-_0y@xub5&g|a)?|BK|QL%lbZAg@G$bPv%ymE9E%sv0a*(~seXm`2m z4ctK9B$f>|Dq6GG3KxktI!As8!IYpSYZx(w(@d%Z+~e)|e1BrTJ5!W8IA%`Rlx<{c zjr-ks(z(OGg#Sx2Mt?6%%K2x=$z|W!5a2zYLiv@M!2&#L=k5gg*8NHv^+j8Lx(!pU=(oXt+*Xt+qRsygSML}cY1nNICllMYZF6GV&cwFav2EM7 zZQHi32`0&x=bZEE`_Wxpbyxqms;+xut-aRH!v3MUiJ%h&;Q!}EztIB52k3|>L`ZsS zQYr)yHz7v&>(x~U9|Y%^$}bdWZg;E;L{h5Gd*bBy+>INIVCes0H8CE+()W4T2K4>z zpTB>|-UiBV616E=zrA|v*>!vSoEet~_2!5 z3^z*Ll8CaOKuRYY8%s(NxVdi9W43uH>z^CUwB9LO;Y!ysGv*XRHE@xJsIGR+l=GRK z$#NC+WfPZG;2f5W0>Qy7VTpLB5${c>kcCfC^6;_hu9h9911wlb0ctkMxH`R}Atj@m zB~@Un?LtO!CFGcfVEfT3`|M=OmA@?4B5WMxW*J#)5AqH)L(FF!t@8~^owxl@G1*tz z-qB>jvQFEmUBN8GD@9urHby6w>TnpwvLr)Bk~^svU@PcOx~r}gg~zR_EAv6J9hwRw z-{nmk*Z-V(9heX50g4g&350cA0a@TlnFeQi!nBp@KO~kQLLPDM&rTdap?`4urAwVxD)W?c^sw&X|_7M3) zwO|+7wLf#-p8o8MS6H{++T$dvxv!3`9e)C>i(FW*6xeZ4V|*xMdNnJV!$A?>k4lPK z)!x=P$UO}n&^E)=#OJy~=hRW8f8e2a^bW+}F?1CLtt8m?BNO-&pH|!jlNL^bpnQ&_ z@zh*}`|;dUb{W=eFiH!R>*nanNWu1w9=+=%)^6a~Ns1sP7Eu5yPn?W(VHFC{8%)mo zcthjCVAX+h-7)<`{%M9Kw4x`(I^~^{?@~<^pDAbypcOV7Kx=Q%E+A4QixR7BH`!#r z7V6clE4v$m8qFIG5nMzcJU(c$AAM`uGEW$6Cg&{AURh3kHo~8shQDvW;O0L`+Rnmc zq!YA+pC2YVT_9!9ZXk9P3!DFoTup9)S7PSW(QSk!UwoVI%iJ9`ay#dosTX?3{)N9`oTH)( z=D8G?BBfTy{Cs!J+@W2^&=rM2phg^?)Q+HF)BsH@!{LsSb3MN-~vFVC~ZFoozb(0d^lJ%}XHxu!T43(H#%p1C|9fd{J7j2;*u9iLk-< zfbv-h()MHdAl9c;uq9>81vz?bHN1l5WV@C zE(X6*hKi5elbTq9eB2>!rGOj%`Ao;V@Xg_BM!L&e23GyO_g^B{$n2M3eAoG_{kW<1XBKR$EF$SAvv}SPkw2|v_?Ych3iJhjVcKhT}Prc@G4ak z2ohw;1aZA_6u}L0N+=nK49kM(<6{^*#JL~Y({rFteEmv1FEv*)1ulhqcXki>TM716Z((_QKXlcd#af|DQa+G z-P4QwAmLEMBDBdY3q$+SHm(_k-YuHxYL&WGRzuzr%L=wdOY;omRuy52);q1M*o~3; zsn<43uujf>wf2=K(BOMZ=v*aoNzRIkif2$^S;F16ML?Jnk5MTlQ(C=)W)Ts>5>=vvq` zYBB{fEFCaJ&B(KH9R<6XMJDmG)kR$tH7{wNjfuwY0+uBo)7Hk~_QvYUF1b->qFrc| z5Gqi)OF*3@_F2xcwg#_X_<8o02L;Ae# zdz`<;Vo1!4Bemj9k%bHkDj8ZO1%|nDp69RvGax2UvhL>0aAAunPJs4hh)r1Cm=$L6 z5R%Dyilx~JVXg>HS*S9xg#n^AV1XWlvJmc?*bGAWT&X$;GO&o|v?|P2k;-4fMPvlZ z`TY*HqwGO|6xktT=TI248vDdi8;Vh5W@nijXq0BP;&O!IAEQoCAQNY z!Iggo#g;SQ*4}jHJ*rCVI0Tx*DJ#P<#k#um$Z9k^&T?TxzwxFHXzNKp&Il33gGv_@ zlMk9%Z|X4{xTD4zWu!N>dXX)ss7`|229)R6z7IHyH7-Hfgyd7#X(gThfyNL*@~&%m z9McPq`g4amcw+*xw6tby9~Jw+iqP^X8Cf%w6y(HO%38WCJcOdc8++=L)(^9D@&beS z`}TepfZnTL297P;nlDHFVn6;$tcO0-A;Q-Z#h;_l&QB$Qhn@&PYb0K}`V9$H_@T?r z(ou6U9+$HO>8_|Ed$BbE`Ov8y4az6Qt*U!IQ)CpeK5H~kCiA3%v-dQf=W}D?uyk;L zPtPB}`B5M?5=C=eQSyhvrC)a15s)vVlR%mreu)p88>a(AaJ@>m(J5KNKwO=>kXdVS zTVSRwYqO0jWoc_PxQ9z^YZ%EBX~R*k%xi0~8ekY(Smuh_TvSF-l|I;`ZQf;2+9r32 zF9l^yCP4<8hnjhg)0|zTl~jm?=8n5rwz+warFm@+^yl}d6{xl+ECf_e8~{Gv1b94j zd=(hC@FD0%0FI0=MRd|8Nc4*Wrt$2BG>9}_x)h>ot=7HLO#U;GD}*eRPlxO%r*-LECFFvbt3 zO+b?{iRTw(Ag{rF>VTK>1&rT*LVsLg2I*+L7i;#qt&9y!7-pb$R@Ang+!M38-6ah5 zeEwa9?mGJ0CTaD>3t;P^ zr;gD@UrV$;Vas6+4zNWS=(d^Mr8K;f#}2_#?uI6!g(nNlI8fz@UKSrQ{t$y{+$l3BJidur*tNI~S-eXc{zL39|7ZafWz2Qd zOBWuDDM`ka##oKHSgj?fl$ENdMJVHwRoDPb#OWp0W9NFF6n;#gDSvGm)i<~L>wFE; zbPE@XhW5tBxP^7S-`uzIbypf2EM(Z2I1>|?MihGIXlT+&@@<9Xr6fgFr^?lIRgaU( z&#>D?)eHec%yK6qBd9D(L`b%xN|`Z=n61>(i4UMq;;6Dru}q+!!y^uSWSUrqT|)qc z8I>i4*rMWRYvnxopfF~HEK0L7U0__`rkOW{cX<0R=4N*8 zJ;R4B!TLj%JQ{H!cXz1B3Zr$C-#`m!@okK4y7)^ZqyupN6x+fwtm3GK1N{&|S{Jkq z?B^i~icKDY9iv3djI=k5Ds)FEz+;&2TpCR1 zP1Gb+ST%&1+Ir#|gt&;7sNL{mx7tFQH!r@R?s-sM|MDX)FhAtl#G*d60vo~vmF2e^ zVNH~}AN|FIM1k~o56W5L_)CM<)U9VS5VB)?^xN;*=`R1{4aU8(X?o=hVl9=QfwsD0lS&%4DO zp?I70eRg*wnSBV(->|yhGG5@d3i~%YG*v)v|HyvRc5&3tr;iqL)JHS4DzKEUSIn|PQHz*8Z% z{mtB;@KPAR=Wq@H(oBi-4)eC@qoR(ze1V`kpXb%OAsl$j)kqdErI{weS>t z7mYPSFFgfve6dga*lQICbDjGYhV1LK4kcYtUa0~r{jO7ESI73shi!STczFb+lk{io z+Nn4c*CVT2F?ICM+p^W&a(q%(^gb^tgV^Jo{347|$^13I9MwBu)(5Y%S|BJ_`#s1a z*Gp^Gh&h%@X$jO6xAmU5`Sr@g-{<3&K~LwQJxh4;orp-oKI0%puS-O3`IkX@j@nWn1DPI_ig6o`YERi}`}e8Zk&DTUl_}Ubx?88g{j0PU_Dn`JpfIWaw*|4cUZ|qn ztQN5fUdtljS}PDS#(+c77@;FfDX~efXkB&@7C^f3FGiR)jGTPGjBOXcU>a(nH}dZ* zmBDzYGs(G6rY)(D9|9MH#5<%q7oFsL8m~@R!}MzqDTm1`T5f_Gp>#(GbQABNc~r{7 zsxn+cEtQqh-cE6j)?#b=0xeBoph5MN}KHru*ZvFxMB{9x9jF`CN=W zXLZ>ygkiXmIrXrl-@|(*ZV^yYr8Qv4o6G@i!7u3q6-DIPG#&TZvYZXu+)yzUkLkijJ*M(vN zmpr5~Rbrvamtf9#Dg=OJ^Z$S}53!_)l9_)W`J47VfF&g5vBBuXlhn@=1`nH|-H}qg zRa!7Wy|%LI*Q8$^uo$4f8JM!RX1Ddc`Xyr(I)%#Po;f)lbS5d!1E_IeF^JLpX}qpP zbIr>tlhR6XU>Yj6h;C}vIYDwNcUAxtDB01V=4U0=55B?-=797sw0Q>%nqTBG0$nlc z!MCLKm5y{)GavUI*`JKU%R+)|$z58;<`KBZCa6XO##xX_ELb70_X)d;5hxPjUm07w z5hO{4`C}EJ7v~pCuS3!P{cfeBBghc&<1P4Ho+vDOGKVFlx3jxLw{G&g1a-bSJ-ydZ z!i1A-wsDHozX7vwzKnaqUS<#^9?DHKvRRQgA;M9PgrZXG@S$uNo;X1;!95 zpUHpjE1Y+=Gf!;c3L6zaBv3OQuo`3Qf_R3MRpY6#@&mLq(vC-pcq<(pe2`+e$&_VC zQ!%WRO0s66$KD#Qq|d=frbAJa7X_W>l8M5qP&nwOvsgsw z_(Y~yJgg<^Mc&}k2e#MRfxU6xRV%{=Jkv3xTV-+fV14aE+njq(#=3lIGDF$Lt zN>|N8V}Q3tvMk@Q7A!MH38kirpjWz6aC+-JFAQZyxU7QG;ep4^7ZcvlHh}f+m9&bo zai6I;6az%hEA&2mM)w2ByR<|QqsD;MViRM-3Qkgo?u@P5+V(%Ti27T_Rk?V`?K-b! z4^@W!Xk=UO$W~gWpjM~c-9U~Yx0^wffoe8&C;;!(OVy#H$>v)g#Z}4!7PI)jIiTIO`iFG9Mi-f&|dHkFhjJ;G@ zebG5xfzfx4mD%k22f`M5zOD$0eMXOtSsBg78JD!xX`CQvE7CAu!s@xzJ)RG{uVAUD zCl><}PCtak0J8^Cgxf@Sc(P+VhvE=kL>}7ip3j0)!l_GxX331<>kxIy$A1N}{~g0p ztsQ~)|D&O5Rd51M1cCecr5K1C;2jJH1Vo!kfCDT5FbD3J3b!5=N@=ErG@zq36$F)J zf7ei}Gh9cw%^y_59d)p#aJbU3apJUrFO^hoPF`gnam{X1Un)6|FER6MJ>Pzk%50I$ zc>2vkFiA|uy|(+YGX>b`@?fz$na1gP2vqNd{8RfH*Jnz>cAe{nd|GN~_HWU3>cvc{ zJ`E5A$c=w|WI_n)`*YUhGx9=lb=1_$k)FLt(BWEI1ERYccZOW1Sw0)c>|e6%<*q=a z&|TE6?25kTXoHjS*Ij|C?v}b-#GCngcI|xqEDBHlU0eftB7wFj^TTjlgBm{>4WR;* z+pebfXTOpvm=vfh?JQdk@8Q(QKal#VC>EDBfSeqe;rU72;gsnqU)@=xRivi^g+l%@ zm?cRl2nk8|U^gF1yuSeD5L$bVwwg0ESjdMb81=_HNFWKyejgIBaw>`NV4)y88)Y}j zr0!3&yBY>xZj}%gWkkfqidL`!#9a%2ikFqBoYyS*sI(hefG(;Ysa1k|e*AjV@^JeG z*xxY*2ZRm|7RHC?BSssY0zsT3K)Q<;xzs2O^A!gA5S1(8WY=B{h%n;9Hp(Y!U*kvD zCC;N@@)yWfoa4jC!pXrR62ON-tSQb|wQFHv!N9^=tY6gk-63itD5hpv%i6aA2$Aup zKvd1HjCtehjtgL_lx@?eW@biMf_usUGP9dzi7&eoN ziXvtu^2@_GK0~6E-f&`VzPYf~3H-b_=5_Mx&ku9?6zz5i_R@-l#=YD2JF>J*gvO4D z-tk--GQf>*giK!xILJLe@AWY+zko1v%#M+Ij=tMz`YR$otqDLR?@g@9>&|Fc zehv-?qffm16_S5sj9DH4wlxYu^WrcTzTxNtGrPoCD`ZwvsbI|?pM4@)Wqh-5Cb8Uk zWVnhkf6^c8#I~?LE;AA1I7O~6FE4L3?;z`qocnMvDeZl z_ViA3{gA?=CvwvL&LaoilIG&wJBslh?4L85FEob7epMJ1{y$p4bU61oY$Lo_fJ;wh zp~EE;O6r|AnlC&T%Ix0fLL)=R;R47n5{{0g%J#=39e$qu-$m^cS2DDFCg+QyJ7TLY z@es8S=uxF!%VeA;2dDQ*7`6K@{+qR_uIFQ^@;|me;1n)9fecJt;>t`l#EWYB@iq-j zJT*DXmf_iznTa0&uzv*@c6+IyuDjND2)@B`(jzm}3VDTVSbDM$p*>MQo3$oi*~EfO z5G>4C82-7C6P2%lth-aQpOHc|LWS(77;YA^9s530%VQYzFQcBxTBR z!PfQC4DPJndo>@wexeaA${Gp3Y#k*{8?W#;H{k-tSS@S;SctEd`Q58yNs-3CDqU#X z;_Mm}5j?JYs?}S;uSJNFXU78X;QrNP0D^v(SNG*Uw8)tx-c$+@-gJhOxS(tvRbaqQ zzdHRB#mn^sXiha&p5O1)VkKNZy&X}H?6d)Mw2ps+11^U-?%l|9mT@i!+Va2Z;e|Hz z$*-C2>F6E-3{fWaPW9&OgH!vvMNb^}x7<>(T;)SaJ;%^7y+T|gt@pXi{NJg5E+&-_ z-_uE;QMrv z>GHUSPjGtCnz=7?q2gZfmFh0S)EfNQJ4V{S@DI8GE@b?x?t#2x7%3HKyJALA{qf6` zYH04Mgo1^mCUKQX^`A|0#3>F%!Ihy!-j+5IS_U4X(HbO;<-R-G1v^9B$+6)s;47IL zwKO=e)^V}d`vRoQ^LWq@v1x{d>=q~(#iaoEA=FGZdz#wdeEZpY`!Q5)wx;NDyQTC; zc^-Jc^x>b=!$U-A*H){tE78j&|SySdXQENh1O zQZhVY%P@#dt$tvA?CdA|=i`#Jpw+?J3qN#K5c zu}howByLg$WM+Xjh#v)eI>`U}!6T0v1w6w9 zzm_@?+;!|UpkfHNX{<_L)fDzBDHdEcooz31y}N=GuE~*aDRGzW19&@ud5)X_rXm5r zHb=jUR^d3)NB;(-kQ@r@JfRTN# zS8gNSI%2e!_DrVyuMaO4&eV+Th!V;Bus(&n>p|Ic<4^|-dle{_%2vpQ#7NA{L;T6g z^cQJik|);WXcxzUvGV*{ew%e;2OfYT(bScvmZ9>gpHJp%0!x%{&AU!9hs@8rdy=EA zYyMc4e)sG_mcDoRI8)cRa>0!gVb%8Co++WIuZHz-pY~+S11=d7b!|fNf^2K3HaK| zYWIm5e1lt0sI9vGifrqHcV4Nu9Ny%gtAY_l1!phYT6L4Hf&Myom1zg->cT(k$)Ux! zdNM~GB))Gi&PYhHC)%Mn9zf(U?#@Pw-v>``-qQY~<4uw00@Q-!0;)ww65(_rbCFXK zOp&-mYWaqB@JL5S?k(p#JDPQW~xHOkcLWxAF1WVCk5h#^p21T(1)&kZ7*FxaW ze?lc=Tvw zsLynAZl^+XHs9(t0UmIl|N0pUb#x5(#WC*hr9A?r`f>hIHS0>h;_a(p(am*`*FI}{ z4=lgiU|OQ^C|#Ol<(d3#SzTJ8-D81y-J*HL@>jnTg5nQ(ScpvWDEC?YrMIrWQt!v$ zi+YV0`FafIU0iSNjnvEcLj48p&G6;Z^FG_~UJLUY+YosT19+9|#63du?nRx9G%sj+ z`)FGXtOcy{RnxKJV47L;j7T_TRk{Y~bs-pR&2E79QoLoVplnJXe)95shZ2+}o*c<1 z1rk8}fa4O0gli#+Cq*#VBoIy92kH4O%$Ch7cwSmjV%1`x6%$iTi7NhW(D(>2pWAzH z5UNuQlszsu0Js=LrJfAY#osq%ts!GE%!Xgbi_TXZZ8UGyL|l%!SaS82+Q;!>dnYPF z-YoCgs0CBHsrHDLUro?-N=M?>r9HM21CuQjid{!WsY~#r41F}e@}|vD+mb>rf^V*u{moAi&s}%Vso3Ob2;RO0A?)Cd@H#r6CMUw%LX@z%ZK}taO4a6~LQbkWvg}!%1%)5geB_GQSZnj6n%OC4 z%qa`=8&^8AIBWBZLhzfg9S;IR@R#Q{tDd>;UE%o3^2Mv*xbEfPvKQuz)QseKYx2ce zpMsW?04TRBb4Dv8t56Gga1(gZ6L{AXc-ip|@^V+r6) z#$7vdiK-I?#%!=1#?4W)#^}OK>)2uz4cy=c4W1+B4b8Cg#+R7Q z5O4*^m&4>IkG`xCwyfcb)~GB~K?H`DAFPiH@=ORm@m!}Sp-naTj_&+T7&xYUsxLy#a&ILe%B~C}c{+ElnCl0)u!p{t0FlZ_w0x-sZ zJp_muI5{gB*c#i}{I_PiTIt#r`A3Bhk~CYaprx%{A6${Fbl!p*9X>)JB_SoT=x0&Y ztMf-#JvH0Z&Ekp98?lgSK4EPL;x0eR%@kup;eFQH^<}2}G{@;>=HJ`LC5In0KFd+t zwz7QtTX|(}IiKw6lD}1&rL5CdiKz>~t_quH$`+U9eUQ$=-{oa??uo5(QRKUHzxh}pV%&3)4xI*>w=iJ)2TtMx zC=DHg5Y05&o0hoQ;8vG6O8A*ehvHH5F23!N1S5zn&k44{TRj&fb^CFdg^Y6m1|?(I;>cQb`QtmcY zGjWJ&`i{028D!f%s`dzfgIghBkrcOEbu`!2?-0Qh*Nwx%rKXQE)GOmj;>#a^sU}ra z1)(;7)g&Cy>=Zj!7-+or=k2Zlu2(ZaO|iQQ)5SAv!n$*#T93l4Ldr?x8=>aGNXszM zL=7U&%`LWzw|OSO&N6A><8w zn%0Y_i^f9GvR*GDhu{2@u(1i-@=v0PS2-7JXRUSukfsp%dr+kc zDFUq8z=PG#~E@%>9^5F1I-^G(B>K)PNw~)eUwg6zGvj8KsjaW?&Vz1&EDt@ z7We(e&ljaTdA{}j;uehS6+*;8nS;Z`fz)BEd$cJ47*+U3h)n+j`9Bx)KLA1okR3(g z&!Wh+pAUH|3IZ_df8RuLYZnt43nyn%rvJW)K2d_u1B|F5r<;~ms#iZw+^gXIIAIZa zZFivcpGzrmKh`Z>888TY`9o!GF6b| z%KroVpBLZ4-!;e8Rb6Q82BtKHIm8RMoobVg+@KGO+UE zX4kcDT98TDnHl2eX$*o-5Shdhc^?IoOaVnJEuT4vX!4BLc+B6(hl%9mBbY`_&spgP zZZxu~pKYfVd9vKge zaoaeIs^wFLk)1q|byE~(p6Aq`bEP}K^F>?XyA@UQr0_8^%>&Bx1*gBGRYB2~YQgAQgz9wWQo{loe&gW&V!U0EWmP@(c?z z>$Szjn9c}Fzq11D#b&uFiW3`U17zqKkQJEO42!|5v(6Fqm`N~-&T$vo{OLQKl7gafU$&)dW{ivc7*bI_zAh`O2Ml$ej ztv!WKM&gJHc-g4Rf}~tDiI0OReCBi-R7N8b7cmCu*fGo{zXF{BfM8q9<`Jjyb)wsr z(3C{S_-IwwV5X@%h;&NqoVz)S7ZoWMleF`;^n^+5oQFP1L_)CKz?AfYg*~SMb2@g5jNZt+yVEHJIw_a){f(q9k|FiI*ckZ%c7NmlFWOJ z8LUh$DO`Dz$Oo=Mz>nC9F)`kPkLBhphL+irKFTTUX(i@W_imLj_;CuaTcC@tTcoH+ zyd3p8dvh&QqO5n%kfAf}Sx4amKH1oTs^a-w2c*&y9V~1_U7PvA#QI*S9s(R35a0 zs}^#O_(O=mUaeQ0O!#Kb+7fYchV3d=NMo+oU!&S24pMn`M1+o3dFJT0BeqNZ^3dc1 z_Mz^uN1Y81Ae1&jF{4;fAleb^Zi~4-;A0KPF-N;C)b<7nwPuZwp1)(nCra-Wc8V(! zYV`fx%94b2yR2N7mb#oTtq`b=2-_w2PMBg&8(79y&;}K>rsJ)FTIMU9_wJoH$SDL& z8OJ;*C-K+x2|ET2tTSrj5|h6>AVnfKNf5Iw&F<#x%&igu_bFd8_gD<>jf zo99IBp2O;eTx9g=KS|p4InH~~^#!TggF&ClcYmMel~q$g^P-0D?;3=SGQoO10Pc7r0*G#yoZwuw_{@H8BBP^ zXNV*K+(o=1VGPT=>;Ahsz_~|!yw9fiDG4(arnl?e7<>O(=QPAFT1QY`>oqKhiPkj> zFT3g*tIQ%*%Mc%=fjqiKvqX8fT-s&=lt!PF{vRv(eqEy=xwh| z62@Cd8`LD2*jA{d!|3vZDG1#PLNF6_5*l6yIAY9#lob^C`cwOgHowBT9JsMY{+^@% z8nV5|2pQhxr1=ue;GGHwKrL#Ifya&7;~%Hxs|5Y~q@2LKtjP-vayV|8Piuw=Lw-pqO7!)9stb$ZPDu_>P zNE2ItM4FNsps1joVhk5)z(I~9QmtiEitruiid*_QcQ5_>47SY1?4pz#@1y<@aF~?S z+35kf#F)O`{Wr^L_R!7u)K>5FW0L@=!#>ua7myRtO7T4OoYt^}pNiJbXH*vck{BMv zTu=g+>mC%H1UkaV`e1vwQ(m6)#olm(r5TrMU3@GcIUbV34Cjf79SO9WatjFY{Mjk;%ysI7pt@=@#EJH zdG43Xtba#H$?TRF44J@wl$39IUx%)o0^l=8%djyg;aLuZpS&RyZcb1@N1Ns(!g&a) zu@qrOfY%(+9Vm$u3Qu8fvb6xRPEd4`;j(6MpN;%8{UwuE@#v+agFapp-oU z-TVZ$YCw0#!ZCI z{)6&cm`FXG$%p-E=9}zMFuQNyj7vIe8hH?<4q_Ve%qrEZQk>G(D6D*inCVF;{alr; zr=q(_!=$1*2`EpjL=`)*z09(j0QLbj2uNz`D&j~FwG1_LSl3sM9C#7)sLvy9+KdOw z$36EE%wBJuS@U{lU}UBcKCqDRAmmh(#1LyrFtOC_FqpQC&wbedTkr%})u@qQOgcy; zoxwU~u3|0@Tw+|yw%FnBg(OtC`qT2y229JcqNUsdZj#s`oLTuRRFjg9fbyX*LZXSm zySR)SE%(ZLK0YsiADspn;PEZ@_F=ZLdDVkZzN-ag6BC!+UVOdJUJLoGtbX_@9 z)Dz^(ZR98n=GRbG841uxsteH530_LGMFkUa847a(l5GO|kaZQ*4wDOi<5yULdCoin zT><`!2%PBFnxeXO!F+=?fV@@{uuecwre1Wc!p4D5%x5JeXm=$i;uE+!qK2TCHCncy zm5)2xw)|K)3di|6>?pQwvrd3;Kqfa4ls^lDeOjc=YgUw7KIop8!VJ#b(BFYs9EUUx z1HTXZ$fsr%V3SaiS4c*6@qMy&8!fLgaOuB9-B_M;R_bh`cKMZgfPe7b2;*;%a$nN) z!Wg*6AX8EL#8+**Q6_Jdbw=C1(uSgE!oP=0Ag|;dk4e`r_mqP~P|d1ZzknwIqkB&* zS>B5B4cq~CV5M1&zoFhB$Hny_m8C_2Zs9i6er@q48LrdKHCxNpeRTcSIBCj!)ptse z0V`FXJCB-yM4S48UjL(fcV`Ik_)Y!>M1O~P z@&-lvidb`Ruyt5!pBsBXL@+w*{VVp(qU%WcHBAK6 zlMq4D4LCJytJR6s(}rVVL6>wJZ-eWODf=I4?)njzY2ql^9%9ixm`uA$AL=T2Nt>fg z`gA*tB2a!JZAz6Jr~014#-73iR}zz%B0}#5$)*&1sqDmXxYi?sHTepZ!=$nf*I&q- zdD`2YxJc{{1VBdKS~VS5ZB|lVQpPyz0=_psvU<5D)RH|O9Iq%#dQhzXFmMh#icQ`e ze}gRI+^>a|E#np;k~U4?t!meYlpEr6+P1=`g~sE$JY6|b9!Z}9NCwq7XwU4%fK+(m zV$sX>tK!C-{u9(CzR?Bhn%dgUa7LekMi;lib}`&~TRxy(jNPEA0) z67aoa;QxrZ{t;i^9lj1+r6;=D7WB3qZzp92+NyF;kAHg|XsDL^1RU19(SQD54L;I; z+6^300{X$9t%?0Vd@WV{{{O#?lCv{5`R|6KS@pjsP;^}r$qc9v37d6J8^*2KVL3lJyzizRvhIgNxk=_MM&Az-ze9Foc6(l#xPS6e zkbvP2U}O67pFZPn*6wYVlO6xt<&6&z)DhM@07i{pj}|kNs|SD9N+&YaW;;xueS)_* z^$O)j5T@RTS#bDRSf07jfzH9o@)K>_#~WYPM5-h5Kl9}Lr{+2?ADh-pIluPCpi#j! zgUsS0(4#@h!RwS>HAq|!A0LfSjA=8y2Tje{%}J_zQbzy8(dg&S)IHC^Mf-1 z?H9@Yt8EtgOV$VT?J5iq56EDDAXU@#=*~)}>A=6+Y%g9w2d$fkq~Nf~ATTg%*pB9o zciM^%wIbl@%ODRW5czRckwm0{WI0O;mXl*DIfK}VL{)<3sEYW}u4`_BBH-0MlM;+} z=cHkszR7$bj8DGzZ(nc5v~(KZoL#N~gY!p!vL7lj2g(T@@J!87npfD2q-ZQPw|9&c zhKNde-e2U%;Q~+Dj20$RgFnurX&E*=`&I5R2lx3pn`{(G^e8XIVzi;f0-U2`m2y2! zNjeS0NT%Hbv}9?}%iXX-3d?`ilYm>P+bG zs`-RkX7{@4vW?GbAV$w?%L!)=h&?9NkkRL)6Wg;|e&%W5FjSp8t3^0e7aZF`Zn}uW zGTsW4%!nv=_=-Sox~tsG%u=Lg;0U5&kBA46dRp7i%DYFKaj0xhu5p9_-B`2AqbkX% zaz~>53qdBjh4`7;E}ImpMk3(=Pb3(@sl#F)yYftOFsy@St-2LfL#G-!{7Y8jZA;qy zV?uO?Y~-w!#}d=jVHz5FE_qvRDULU551U}^N81zOav?PqbXI8$D|xJ)+AZ1}+olp5 zx{nRC>a*(QA`3^Wi8(1UIrZOZ^hwpUy+t^`uJy+#W{wMBDVD&N#wFZ}OJFoV7W0PovV7JNqg(nAjoDV{L+g z)?nXy+_2{neu3{#6Ry_a#M?zIDC}q-bMkxTu>~_oiQL1uCot|}hItyFVE%Kfp<=r_ zAy+02_<|t(n4<^egg;AwBZ+{>Alh-H3|+5g!&R zGccv#S(|Zy0MP&-z-v$vrBxw9AE2%A9C~?Kn%L1f2G=DD-?5A}^f!djA<4%;o$wJO zh6Qo6r^}9)}0K*5>@atRF+zKtQ*gKlS+!o@D2kN{IuE@c#lz{{w7lLH$u#ZvUF;W=S76CN#kM zLk{(UY)TG_7#PAPL_AMQXn@o-5tlB&I6fp<0J%{xELGmcUs=naS^&oSK2)p*g)X|O zWpQ0m-BSCm)w#CvzOg!8(RSqX-R^cHGeG$CoZs$rqxtptz5BMx^7ti%$BaR*TJUzpJXhKRaVAp~YC7xTT)Xz^#RxCIh*AMML|N zeY=v8n!^J@2U-|H=`W!?z(5540N))=>|~=4BzGXLDUHQAV&F9v+~|Q8A%s$fd$?-E zIO_-oO=m$V%`@Wdq3lx5gHfm7sFzZPcbK}HIPcHJ`c2A;ihAon();3{n7t5rvm6)m zq(VCKCSBd?P0E-GWlHO7^K0@HX~XRLla-rF)QFUoCAHcbeV6kDzy;c}^o3eAOSwUi zySealaH?9Zj%N4GLP^In+X=<{$FAB~CIcvX!biio)xWf$asD43n+W7#ET2s zjYV%tp>zTx#HmpKI)Y&}8maUSj#k%f>=st!LwTlH3)r*30pHt(8-1= zL&=8fXxF8Tt27QDK=eS{meC`Lr&T%=EsJgXpHv8^aC>S84|yx<`LrwZD+{Z_p5$!v zszv#$heK|J zm&G)(qpWUF=|>M-wxzTw^F>wN?QmCw8P&1aaog!}xf{$G0Fi`l41KgC-pr!`){Hu4 z&hSWtv6Z+R@v(Ryt`HJ7pT-1>rTj=LsTX(0XIme4R0nqeozuV_ zpIcpk8j38 zY^1C!&Rf46TS;rO#x4Lwx5L|}h1yP%lm6*o^+HhwSm4XP*KiX$b5m_qsI^X!izMoQ z(bA!y^-=2I?dR7@*$JEwFuoKu3u#bHv=OU`WbM0Avnr?*KGaXy*Ul^@Z|o}d@|fgW zx^!2cUO5pdH5tl{Cn3w?FpL#?v$*Hpz30+fuVGKNriffRvAk!Xcs9J0KObHxMQR=B zu$Q9%xWa@-4l|U_$TCdsvtKxR<;)(c5q!aY*X%VO#)s4~CY#4LyOJLK%DcH|KUqH3zQn(~VC`ew6J`5Rzq@b&qT;Jv`PsIr zw4f)HZ5>$~evjF9NWRWQSdkOxi~qsq5W4~e5Tq;3{F60fWFFS+@^;Ti|FVzGD^ys7 zS4mo&lBbtS{>QasZ0azjn1GmNdOXH30ldD|nBbF3&kH*Hg`pMyk13wXE{l6JkFd zz%zDX`5XSw5K4A75#b}MGw2nB`Jb+9i$XmeK+QM9mMj}mhReWK`*Nfvg04PA!>g(w zWsZHQgTw1CK*T>_@;gG!udP)9_9R7-cu=ioXv!X7CZW; zYTUipSzXv_ROtcz(!2z5@JIrpnl`Bi01V?Y>*sQF(jp>Lpym~IbCZfr(~C@IzrdsK zR?+OEy1hXY1hf=oQ0cLm7dj7I6CWBhan=}mpQ?ez$7BxcW@ z;$5gNO1=rJoZg3Y!M~b|_t>%e^R0rz659rUR6z=ELFm5nIs>bLM$$+$k~QI(+-tR)y6E!R_{JJ zq^{PehGFDuh7ir49M*gp#z)Mj*UB5YszmJe5RA_jLxCpWG~~I_v1Hh}vBD?I>)gNG@n?-g0u1aUU}@?T`;q54szk!?thdn~0p z*RxB|;NkzXtofr-K2u-;fU&|Zpk@&CBI^i1NJQcjYc*NaEh%Vs^ zfwA8Dca|WBe<~NeeEd1LC=ELl1yTG?$p0T#@7SJM)HRECY}-!9wr$(C?c|Pa+qP}n zw$m{>MrY@F&$Z9>y!+Go0c(yqYt$H3Mc#Dg^Q<$22U~!2Gqg-Xp;eZwd3-ta`0jA* zC~~a$k1RH;GIvf9a15&fg`sAMxq9bI+tH!G`iD^#f|(&HZ)p63X2$%;zX95u2DF4T z!`9g;IeQ#UMuYU4T;MV*vGg&+X2{eQ*aXimdk=ZL_GJmL6 z(<8%0NzV-<4gJm?N9s!<%ZCqmEsV2PQq)praf=pu^=v+~(w#-{6o~=Nqd^F8Aah7xLrxR_Y~u@xN&y~r zZwRUvQ>kS+s8QbzF)V!Xnt~-Asfwt@7#9th4N3cv*PxA+!%(*U0wgDk5PS@D*r?Xn zFDl8Hf@xrUdnC6E-&}z;MBd9oySm_Ga+;wTYYqT#!jm(C#3kcEzCLBJ+$lB6GhG=DwW_`JJYM*YwcBrNF`V=&^$WI`mLW z)}4oSz@~;@G_*jy7Oz5Cpfx?%HLq#{ptR@+sxBH;yHyok94cL)p8(R*Nn4cJCD4b! z8-ZL|Hu>>M?ugTC(S%YAm#hFDB1)Y#=mR_Y=Z@BrLs}J1XVACsp@6Qg6Z0NoHfh>=F&lg?n(Z^&6 zfS|mfdO*ZbtK0ynQb0+20ae>|d)u05r8e2u+Y%ygvBtYT(5gMT2tnzfh8-hO@%};Le-%P`IVAPsG_PWBZeox;ok^+BBIg;&hW9 z`Md$T=ewnS_89~rK5;%1+Y?qByKv4>CmFk5m&L$)Suw2~_WAjnYDhX@y*-P|5%;K( zc(;n>U*3Z1SGIPal!xEJFbsPha1jINilGygEkE7|QQCIs00RzoI%vs7Pr0!Wbt|pX1P|g3!R2QM1FYZaT0VB?$Z?o}&&tPE|G=+!e6A;** zZSNoU6KndEi9hAHB3A9z>WMmW=I>`JDejQ7K8@0W`AqG60%tvu?JVO5CV=i zW}B{n#_r95PTt#GpbeA zZrwJi5vb{hY(XZoLL;wYm9rCTj19_6jfJq;xc8STIs!_uD8|#5TKDD`-;onCS}3o# zTvrsROC}x3+?#y^q&j@G4*}*evIOmG5VPL4#&4%5N4PVl$}5Lc_P7gYI)M(~=QAdV`ge5Zzq__&mAdd( zy049Ls${ExDIiR_@Ft6JbPa0ZSt(BFk!}h&pGk1PEVo`qL4AK348kceVRfDPZexbe zFK*qho-h0QrZ|e;<*3TXO3jTbr+xbxpB=roL4(gInok&&1;S65#ovh`-*UaaktFN} z#hW2e7fa#gI~3~d$RE1pCV-YssI!VW!p!56t_dsTOi*EB>Dm`mb9 z6T_ZG&Lpi0yWC z$D09wrkmoWnaK*PxCk&c0=-_YoYgTIE}j0|_++1iF#QAbZV@AuX5^F;amvkuzqgxe z?yP1xVy?eAy_l#g@&2ZPFF22ykio4!V#`H#VY%w`u&OeB;lg89im+%+HskEI`!-bE z1`NXQt9Vo;bzDcNuLV9_G&4K%X7_RWB-|#zP2M zd!Qa~qCAr6Fm(+d*1}MW+8c6O@W=#3pl2M%@6}+U+k$~foexL0Zl|+>)>&en_Ruiq zZGxpBvsgjlMc5+{mGj-gKq9c)#QN;-vve^5Mm!}1gJ`e#`(vVMB?RMwcVyR3MV4{^ zeUT*IV8{i7?~M9dwQ-cS(dzJmZAo%L<754kacQ!rcy^+g{4;fND z1LFHaCam|K3o=%jFO3*Qe#MdtG*-o)NtHu$tJZhUrBMCKw+q)&h(1N?<=bXDyP{Fq z(kHEvN6*iu#5;s~iQX@BYy;%bvW-aq#*VX)UlJZ$W_WnZp-}g4{(Hg@X^oKUmDaUE zl?yMthplu2NziFw1Q>sFmrA1d-bAQ~7Qpxh|M3-p(=!6+N0hEcS7^4byJJp^FgLFk zxr8sPE;vKTk>|bhLO+uL2GHrCMGEyFF0FGmGG2uC7a~j-um>}BPpKinIU*iFm+`?Y z4|wigvYCxH@bn8~p!l9VC~t<2GBwB@d{d~`HAcuS|HJn8@Z+C3%+h~@*@v{C%UkIK z(4KVs809aIn$tvb%pCgN0pcF6Ji~=9fg#LSTe-iQ!p}%&CZN}%vZIAg0Yj28y`w36 zG9(33;h>&_V4Mk%KRhaEG?hDG-nW@)4s{CQ_fcg&p~kFTfs02KH-s)Y|Zf zh^@}VkQuC&g^i>+#iYLBAma`m3CYJyLdl$>9S+5BD8w)nhXj@$I22(dl)xNYxM7__ z1aE6921yRyjog`fqU~6Q-oc@>f1qM?z_K?4B~lZ`C(O5&W|+)V!6vT~UQrJ+9 zq7hiIpK>D4Me50zw?#>Wxq||VBPtJWqNxh z)ZH|p8Q3S=;t4V);-azcu+b=(%nSn^!3Rfivkg@WS2#GOxJCf4dWE!w4=e#ZmOV;SZ?%eT(v}|I0Lk8^>4^(>%xH(D{$^A>GsGGPres> zd1Ut9nXjkj3>uyR&c4iQ(p{c2_a{zXt9nG{b@5FYa|?Vu1b216eZ5}Wb3|oV+O*w^ z*7-;eIhXBjIRxzQ!{t<&3O2!vt0$8=#ZX4Es~C1QvQmsq^-1A+uQR=X;!@8izXLnA5xlEk6$B6<9l1+UN|2MtNO zF&c|k5kr;QhDe{Vd+V=n`7?yqM)BUS37?}R*8(H>_UW0<_9o(W&cZ^mY_*-hf>E>1 z2DNC$*8F9QA&w$Elo-;&(G!lbKSD(d!ZY2-7}(nPjK(-@SX&EbI@cm?1I?T z*1f5Q`$^GOYs%96AseG`8dg5o*3mo7$Gn;a1tWmbp(&Y*HtaY(a`7QFM+3RO{?(?PH4dgtAsWZt5Wv&Xc`Ocmn1J@-jfE zIYuFL2+VDGtDo`Adx369|7?W22Hc=T6Nw^*r@{XDVcx=zz6Q`N(K|8F4LWYHQ$JBS z31vlJI|*&+OPuiPSQ&Rq0oq_-8|W&XQPTln8(^jP^}9P!~^| z!&0L@;tW>08c&q08iiwx7VmQT=Q#O91c~-RlwG3UIUEua0Xo}dJmL&SIV?UIaK~#N z3|}(5VY$Uj_*aZDO>N4g^nDau1J-*1z}FoJ*|BSE;{EoqBK^2eab75~+9uGcTWzxRH17c)>me5A zQ-TC}w1`L(L}&t-8zyB!REPxBkOZlc9ep^12g`(Ui(Hxp2Tzz&(@%o{q5F<(uOfoo z0`zhvOjYkzrd>&KzM*t-as91$oB((yv3l&}V?DK;x%u6o4A&%Iu`QLljsK&|cN>(P zd15%AF`QgRxWs_=sXulVN|CfT+zmZA#iL;E^XEL(<=FZpPEG%4m@Xb;za0rV^_56} zAsLyg@#&lOLFAqZbLe@icdl?jLike5xnV&X*m7&QQ3l{}8Ri~tmZ6wY9Rb_->p{@z>?P&{~XQK_rRZ2RhGI=6m zWxY0=YP6FU=W27Ul-Wz{HT>Afn|we{r4d(2mk`gL{l^*f0TL~xpNTJi$H5bl(HK2; z!S)ev&lg~LiWEHkn{mYlx(V>gnRXjBU3aMS*IL7l@A7p|>5R$_wUqmxdx)_NwTep0 zrTzAtIy3mIzO~BpdO_$^DsAOX|jJ1GqY)g;zDQ)~+HmQODH6ZdlZtzq~ZNHmLnKL@~1juG(Zb2UG{ zo3}FQ00@eVOjATMRADqxP|?{6{o4~4tI7<+bHzy27RN<2RgfKTdF%$0#i|ibD~Dvu z@jek?cE1QPbBw8M!BF4G@XAe!$ZOwx$n{*c+Tl{~{(VmK!OtuRa0kjmam9u-l%kR+ z7u6$&5B;PNx98q`^CKKop?)g+2K-l4+kdtO%sD4-K!4WRrha@w<0%2YYMKrxrnuj} zWE135&%r_%V1t(0`AA^P{%9~@Q77?E8g~X;KD642HrqP_Q4qUrfo=XrAoO_nJ_6=S zXyVz1p%8gKMd@zu)YQx?Xa-*J-=(<~`R+sYkJp&Fty{mzAEj2jz1HRs)Y;8f$m!_Wn{tKL)@KfV({HUwD+&N+Kcs&5EB72>HGM6s zaukbd3I*XHfAXed8q4I3ZKYBTbGE#M+7gdCHU_*Hu2REMP&HFTI9cG94_f=CqsiIk z>G&#)cKf&h&30odnQcl2R_d^?#g_g@#{koX{A$khs(r@*thS0BNmFr_>9XCR#XTd_ z;~E<&Kc;%bC>H=tzfnL&+pgR3wTo0IcBX4{dA(S*j+~h?@Kh#s`)6wrGH(dYfYOLj zhQEYJ0%G{P9Fnm?hf+S+i_Cb(VM!<&aOatJ?d^5z*O!Ym*}&rt)pnUN*-hE4&8-+R zmc${vDIW6-=3J-(1%+yU`!o0W>wtC2mtVa2M z{KXSU?|fBtVF>3wT*zIv&{u&Y?gDjLR?unv*=MdFy~KmN6YQYqC|4qry+ORy75_{ik|P%F%z&>ZlDSnyMo^J1`{4;V`UE>c4&ELqZZ+I zcbo7CLrgS0j%F^dlWkt?ipSDQiOTc=RtfQ6;%z{l8;@nbdd-Yj?m@j$MXnFsnbcg; z@tO+$63#Vg{Uc(i>$0)PJ@Lt>s~lerv`~Jh-Zn7^Ki@uA2FDZ|p8$mDeYSvg2u+5H z7%2Up@)4xaUV458!ipvXair;1s;p5~H5Xizjftj~>5E(%pI}JNfKM}&6I}{2-o-T; zSb9LpI9P_%ScTsN-L8u_3cZ+$f#(TZrx{bE+v0R~@e`BRWWuoAaB?3`rB;x8=vRP; zsbD>Hjk6Lc7NM3B&;4k8CrKz5;MRt zu#s7@|4tWQ~ti3_u7(wllLZgVRz9&Tu6EZUlA$J(%&KOKt8zgwEh zuWdbcmq+goI~J_dX6N0@9Ps<YuZ3pmYcHvw$O}S|>g#qd^17kULJ_PyCBo z!s>x;Xue<=mS%lH-ZAU+BEvjz?V*4vhA!4+eQ`J!xFwcqSU)o)g3ritFG%TX{QIWFMj`e!7Q zJ!*sc+Tnojh;6sH%>l zaz3{ru2H3wSryk&Ie4#>h(U2L9>G75geY(I24JFyyaW92{R$2(1FxDN$(T7@V)Et@{*mhWr6*96rUzPLV||V0-IAG}&$piW+TJg*M#pWYd3B<` zf+1(&*W9HV!={%dk%nbPV?;XwnPCJ`v2lRo^-nnn^oU0MXzutApMFWP@}p0>l6r_x>$+{!eT4M*^X_R|BZs1j zA}q@3);`=+`I>u47a5KlnLjq!aUExscj+UZClwWKitR`7!A(~zgO%biRFa@NUXbLV zMw=x)ARY?tD4kR$#gtZ`voebQEzv>u0J1Aly%9vh@ydq$HtW7>Dfo%aSfCmaGKjiV z_gc|1V$MoppN+^>a>-cpFKEo(CmKp(2EOH3eK-RA1sw+XlOfMaV}yBdUVY4E#8l@f6NAC)Clk475}2yo?xHvQ#VcrIq^kH&-K5G@vaHG)04Czya`)01aB z0N{KZ<>hNi7B=@@nqb!%=RQ)=#sS9~DBm#rL-1ek2nFlLu~qm-2Mj4ZJ%isksq(#x zPiaKQ;UwqHwL{XxS9f8IH$HfRNh9jg3{ys8y8QxSl<7?pPh%kNRO$LS$g$@$#GDF& z7{lmaSDr^&6(5*$nCixmmZ22#T$Xzu>ECTWu}|BadO5BYaSzO+7|gR*5&mA8DSF;e zCAtarDJRVt&RK-1{&tY1d#m*wI-o{{UZCno0CZ(QAmJmd1ZCX zZ@hP>Ev5UGz@*A@2|@8PvGjgV$Hl5|B@Rt*5lqm2WL{&*?9k`f_kt4sy^vVq!+Y2f{Faw-$*Iw-bU z3fGJ)ka=6~QVc$jcE0a0%x_eLD+j3c7)f8be6nZySs`F<=1fPqIT56 zR(ut-8>EM2fqsvtoH0izkIHh?&#p`uf^2Hg(uR+fRzE>FQ?eC-q%#pk+W9%y6&o+> zUk{v1igl9w`Te`WYO`F|m4tz`!8jC-X2bl!%C>29G^Y zpuIgzu3$EHEhK~0a()1Egy({xU>KBcc-YucuwHY%9FV&SAx{EkEP_b4$AnNEQ^UcZ z`Fad`?S4m~u}G=3kZz$Akz0ZFs5P2>Qcs-7`9#nz+B?*so2VCfGGdg}o;BJ}xJ~H{ zD75ufzBk}QasqV!_7QVIgG>Du5>3{r(So_B3$TnHNBTmKC1JqOSq)dziE?GZnKNS! z4vVqgk`wTb^+k0d@+P89+{9?Ss13HEOvHCXkGF75?);{SIy$P3ffkjh$3zqnix)%q zkAX)g-_*rK$9}SxY>r}(`7-Bf3uDDTv1i7Dr-gXG4H><<-$UA|yA!Hp zonG4l6ku;QyGuaRMxhzLbijq+VmAc#YOXp^)>0|CC+j-M;y0^_%y&|$;j^i-f$v`E zkm03M23tyFX#mU2D{#Z6G?j@NPnZuc%k(1H5uer)Vil?O)Yvf#U?Ow0+HzaVINtV~ zQ(t=(BeaJ;&&=9B_MFo;pCf4*ddP~YYGP5YVgo59W&-en=Ab;NpuF^TaW(ld+alFX zriQ)^#hauYV-(Q%JAocuX%maLssPNj+k1weJJ=J=*(c0ia5k{1=m=?hPpN#U3pWS( zai2FK{?dkX^tmpzwvr$h~UtyN1eV1bUA?=w%*m zKAPlC9c-loTjk73A*V|4S{tr1FRVI=vria#dzs3eXZX&LFOJbK@&Rp9o#I8ISL%)G zgzf`{bPS)!b@As%y=SM;o{!D<2~Dn+ye3bo!9;C#>hP(L1c!jRbLJX2MDMFOPn^+| zd;-Ywl%(FS$nvU^y@E5ybn1rw6iRRF|MOHlcr{p(rF&(h%Qn^lH*sD|AiIO3`2m3llEP}5kUS+K=q?UPwF<|f&2L?D$aM2 zYy8~0%t;1b+yLeYmZX5z0;ph6iZmf)N+iK~bf7IQSy&89N>F;2%;<@E7jp6>C5MBS z-COnJ5D1@r)wM)a5#L9_?=X70wFgy!D*Vzqcv%T4Wy}ojO9q(WAzgiEY z1=>_;OR3b}L(MMj9#p%ZF!nXG_u8euAh2sqEsbo289ImC{h zBA|v&NdZ$Ky~9GE^E~An*qqXII@)5%FN>vwKmDApY^v)PMOkQbrmp}q3_6-kO8=r~ zf9N%p=S3aP32;$|)&RB(WHY*}cYgKCk22*j;;Os1X}!z{ud~DF5^U4%je>-ZFzHLr zHW7N!GpPe7_A04eUJw`uil9bmVFp-{bhmol2Ed(0)v+FoYVOTn;Mw40NfiiFuGz${darSF-fnPhCRWvbEiC1u>IYo2ti3| zYdG%En)X*{wh3-=dMTf6S60qs?Wr=F(?#~!Z2m^9blVtUkZR;odJXXqGkTUvfbacUXf>Pw}Pwj*PC za^j^-HY-)0zT*^^i&jQuA_gsl;{bLzNx@!oi&RJft`5u3=v}AcgMtoP&L{&WFQA-> zb+F(*R~dfy>Gc^S>@CP9w?wWxuo{;RGmS`7cuWe%tf<$dJt7%-b3yDPu+&kZUe6Fso-O~?Dvwq$p@8s3e?Ryx54w8=yZ#3j1!GSu zIlFz6-+Da0=)Hd-@59uIl>jWO{g=!@j{i2}nE9~NW;`q(#ft6A4e)&=j|h(e^K>NS zwE}2s4(LEwv_j+KcZKmL(UW(|A#FM&u*X?^z+an>N&nsx2 zP$DQnwTR-tON{Wq5(|}yI5z|VwmxUo?*BvgHATCR0sqIru_+}89^!v&K-9c`y_o$( zgxP>6`B!56+}M~&`2I)$+y5w6{p|D%yP!)0lpLtS_svFZq$}(-hRH`t!LtixvC&S* zJK(6ZdS=anHu>l8qxLrQ7BXg&|1{_P`vnLhc$dbV+mUrZWuncP*iCYt$WBQH#9|$K3!7a+gduK4wZXgr0x5 zV~~qsh3=}2^X+qI6aDSeCQmTH{PSdrS-q88{?_V(H5yqd)6&yp`=PeghF2v*bWY1e zn)!LpRmWTpJcLwt-Kmm_>((XO%R{Eqs=K9cR39y*7yu1Z?c7F}74-#;!9*5%^<#P> z#TDuxBMeI!dhi0cB}*`y*STMxn{r!0f>k6*T4RiiV~IAPX^6f{YJad_)4+#^!xMLK zK}3?dc>UGcD903yA59XWJiIY}_LnGM6ONff)~U0Y%Ka*@{BL{0`IwM6cxk7T*cc(p z$|a5P^j@RnY{=mOhD6LblHJf=p`!y*+sUQ)S`2&-~t;LjgpZ|fpP0eFU|Ky(< zvO1KAGErnwvXva?F{@8VT}1;u8r2PQbvhDg-2o07EStjnHikOyhTA1SgN%X@pr)>< zyjf3{ChiIFt5-R{@TiNy^s8sw7O!n^{H0k{mvwTMi>kH{fL zs@nT!TGkXKZ5Be)6jZ`HuWllHuY~oO^Y0Bz%?*UPD~+x93wY11Ud?aJo8)nqh9Fs+ zDygiH7|$kouhIb-R1;6fzxif;=ndlsn=GENV=}=C1UXBOV>q~>ux1>6neO2 zwq)XH&Wt}*!ySkSYEbEr6JmvXUFf760W?ozEMh)V{7)IBCQqfhTJBLt83b8h4+$H; zBs#AGb4F21OD@raOgF2X-faunB+m<(xKXks1;um6v4!ScHlV+FLl2@BG2gevJloFK zmZK?3402<3l50}0zEPFd&Bp(IsEp}A|84YWor~w5D_-?q-pvIzGAw}Q{VgDy3ehcr1cQ^*Z3B|?xRKfX!AP1G~eaBpl9RTKsa(ISkwr}C_vLYdJh zQJBZ!&C8-G?VU-p^R%%{;0P+C`yppE! zb`6sxG$vD-d3Abs_T6TM&h702fE|8iAH+LUy@MF?vrUurOv={sqt@E~LA#;TlvB++ zY0lu}%DAy`pnz(_hcL!`15E7@GEUFGSf@mY_KL)~e+eIP7{N}?-N5RGo@AoUA;S-y z7SgcpRj<&<+k2(f%qdE=V}-ifEjgBN(y&*X1qGa78I947J;*W16hn(fkhL>U;R!D@ z=UA1TsZ z!6MlY5KG3Qe%k{}?4;XrsoDpa(9W-!{?V`bZ3?wksr4wA5NghM7m`8p2X0B*FU8`* zOb~f14g}heTVkOy8ZZeA3q{;oSsgjVL7Wsf+88tyXa^4)+Mt?jW8GUo|M1a0`$V~W zN9SNq6e}sDoHk!rT;o%#%uz!ag-di796W|Mh#~nlz?_~qV9BXAc$Dioi6%SNJ{w;g zJbQ@YAQuVXOZ`DIcWuC?Xv~6>C1?paRAxcrXqj{sk_@v{fZ7QNxPV|-=OKgjv8`C3NF|GAC@N;#)g{|i2kCITNF~~%g%Q1#f?&F0(^yb?K*Es{+ zE-3$I^86)R%WI-^!-t!ZUbc366-l$6Wg~(VCk^iy+c~pIBtRVfbaGKZS%|P!22D+f zv8@A?iHN9B8WvQxM_4yckJ!8TBKbYMxi&?r-(S6Qjkn#Y68;lC+Jv#VW{0N7q!)%` zff7jsVW5h{+I-~tx0azZWwLa{e4GK z^n4bD@e+p!cj8#L)99pXLLTcm&Zj@vY`3ea&+q#c$^c6q6a6dS?B?wzta6>*TF2pU zKf-pUDOCS;M6T8wK+^OhY;_PkA4thF5!_hXRKKPH$8fyE}>vE)f?`w*P%s`uq@ z3Qn9$Md>3hz<(YDk3)v$ZiUe5?vz2)Qd5gi!-;w-r^5sVQl-v%nG&ut;UU>YD=5X1 zj@qRorf9w75r+Nd$*0ye1(L$#ZpVLDtyj$^UuChM)}fDmUD(iE=%zm-NW*q*Nnd9t zZ&zrE5U>Y}G$2;R=PDP@P^w2T{pPGLVvh-T-GX3%?Ty`ie?oT?XFZlv*M0V_tH9A+^ELon%La?*gXQOF;jb6pVB#7>z4nu2s8lHlSc*X=(Xj*peo+fdCpDACu` ze?Bn*NtQ>DP3PxrR$(6Zm>u-yV5BK`;Y_)zBgeDR&go-;k!KDtZ7DecK4Uk$l%y6j zu_H?>B-@le!lxw7ufK=A`KlPJ=eYyc@2I%VS!=6Pipw)gjY5&ipC3wxJ}J*m955<-6i=PpWlIMh z2~3KLd<6;%4}=UX*=};}nk|c4*RU2){F6bk#P<@Q6iFqr(oNVRA{#DHxm+eyvpL51 zBClda9n5uh#pPs4k`H<7_i>$(aXUSoF%u_G;0s}Zz-P8@cf53voshAplyuOXsWhY> z?IQ;Bd*!n@S2k=88}Jqp^XarW-&6_{J-}WnS9uUEW$%q_TtV7^28-Wo0Rb4PKLE?_ z+;5HvHV;ib!xXLdR$*OEgHcT&NB+8|Js2ttLB;NEC0L)#S3Wl}>q~OAh7&RF1 zYk~!SL4RsohXiwh)#XouKwzVGhhoQOqQ2fyiCd$pX#a5qpTJ##fjxMYPKkL`FH<%% zX->zB!xYn7YO0jPNds;mJl}n!H^<^tgp8{oxd_I-QGzjRvx@Dk&v2=V2n_ti_QTf; zPJ)}(P^C=#0dxpe{&iAhbq&Il_ix3D5erf@=dK2rWHQ$>j04G0uSe)^kJz0R>`B3_ ztG>%F*k?X?vdR-m8ASRUXVT$s3dZS{hYC2HDBXvYsmjtT6`Jr?m5kR-qX={FqIu|@ zPHL6RRH|MB#GQzYM!2#W6OYbBWR0P@7EVM_#V2>+094_cSBzj`9yhq*&azk}SxOGT z5N}=hR{8!G2)meN9Ilzab&8%hdyIr@(jmZnIfil`xwqU?m1yEj%0IjB3L%3q4@EiT zK`rqRwF%#e=^Td)!M5siqGXe8%>)9>Y(w+1CC(yxdLeQ2MS-2ZZ0`13>Ljg@m(*$ zZa7O)sD!|>2U*;|(D?(6EZUvL1lu-s7bReaTGK3PopO%H?scGG6Z66g63!~yb7gZV z8k0Zn-+8f;mU;!IWr@rAQ5&)6eAOe-bk zN*dy<$rL~S_Q;tm!If_=NH10&a?W8la#9%tEiOHR@@wOArQX7Sh%SV+G3GIU+!v_wDRw&HU736aTTeuPwM3@hf* zFBL0d71K9t7RI8i*eEXsDU1+z%1T-%d?xlU-tj(5N;GP2(8Ek`P!nyK<@lBL1G4cN zyK{Y_|M=@aO!=J&KhhoAR8{SY-dA9rMU&}RWcIva!8l!bL|C1w(3UN$+wGb~n$n6) zN9H#Xk6$4ts^;wqPNxb1Qyh05bgg&M#D=$Q^4jcD8L_?j6k&^#5bH4mvd7km$xrW8 zJ(ICblGI28j*%Nle@Th)*8cGZTs0n?+QLfM% zubeTj7(+K++K2u6MW2}?3(4k^k})4VAc|a+>YBbh(!|1GFw)84KzT#UqRv|1Dhl*b zvodSZ_%~xWC{|g|2J16N5L%a{{25_$tT40|mdDjAaxPri11N+O^Xl$MLI(kO`RK2Y zvurd{aUbVKQ~kK135^El?V*}H^VOj{n`Yr#u?s9Tp)MKB%UtH>p_d~nl3~{hGK1$D z=m`qV722{d!FN*4j@N&`-~)bJw_a}28jj)B7`kl2CK%&48f%1hP1P4B+cmuyO{-%S zO7&71qZ(66cu*Ka21$xA&=~{Po5)R~_xajNO-K_CSEHl7cP-V#_)Y9)rZDfSMZqU{ z86~!i-r(CLL#AwZcDgELm85jE61&6HOW0l84)+YiCSH1l@im_5 ze#IDGD5YkSF0>`(&nk&eU?1qBUi$Yb0W4$gUIqRndv8G7tGnx}3Wv4s}M)p=;A< zWiqS){!>xiqp=aVc?d}3t42=u-& zZ4qTeMx{X$)&)knhL>vmsefv~J{kl$vv}VJ^jUxV#a<&4H3<@Fw}nW+a)VAE=|M@o z=Opcj$KAKwjsAoGFChPuAlVdeObG=4AJjDP3BzLb6QRS2|35~|{~4O4O?yKk07^8V zJW$5a{)vaRq+&F+HZ%-m0~uurmjDSdBARHgLpPpCu!+R0&@67Er;@2A5|zT)E^WIf zwL(EzIycKAB$7)3b69RZ@-33cZZ)6#?!D-G&9ie~wxDkXw)*6GcK!YLa@xcGJw3Z* z{{8hB_N&_X)T;CS5&&c@vYyK;aHn0|vXg_(j$Q z`s(5eGW!!O9K4(BrZ9FSXMIf+2T~Rc%6q2v2EIVOy)B!&hqjguU|xf^C+PUGf(w1L zYVSR{qc^66dt)v10sVVZgb>2JxpI5M)+4oafV{WUo2Qp62Gs#+UnKqJp-Y4%8B^4- zzP>Dm>w)-;qT;a4%aV8#0G}lL3Ds5GH2+9=&4~0w~irR!|SEmUoEx* za#w;{Q1iPx z;&z*U)CtrFbhYbHkh+q_JIer2D4eY5xC3971Y9dyo^#l72O(F&hN|If}fHM z!jaRFxJ*$JXOSDFG*bziiBKW#ODS;9eEl@99?NZ_Gyf|WiYI&4YH@a2W7pZ9={{*O zqL#ZS3JX)FqL|kSNTQmP{1ccquuE#Qxnm(57X7zAn*PkK@ZO|;*G3I*szU&$MrOuQ zdp3?&Ij#Lo=3=THlY9G)gu&4#gA2o}y~|@eONNOB6{CzdM<%gLgllE9TU(5tu0jBj z2#eZ*FD_ONQQVJ0kfw$ZpX|`kIFI8&1deNIR!>mMUSaAMkj?U}By}x2;&v@uRB@oz z2cW_bU;d2$En;b{jAGXQ`TfE)bDtkpd;8~&jHknaGe-leFfmi!oKrGV_anwpD}~~@ z^WJLSQk7TrRw&x-PkiR(Lhbk^YJuoHgF*lY_*-j%Ar@5i3CIUlCAsIm{7H*o3=gR% zE~VaqqOAJ?AT2>?GX}||{Pjo03l^zXNVf3TL}UK=Y@NXpSG8b)0K z{``LkrsTr9ehoZH~g8&ZogD;d%S-X@MmsrPF@ezk5sk*5r~4sO#;Hw zD@MvG@;Oxx9=hkGuON+C7;CX|P1^!jVob%D9~sCgLO3(JE8+BjpuvnUz~x|<(v-dD zPJY1G4tHb=>y*{i#bp|_3+Tmp9Ryb`5gx%2Q+G}$BHNxci6H6TPHvr%M`nc_`wr|; z{zK6VK)*Y-6w*W}d({Zqrhk zeAYIW?8!bZ*okZZ(HeCpEAX0oww{vsUNSljr75>m^cK$T3Lf0V=l?MF4p5df%i8d? zZQHhuX>;1PZEJShwtL#$)3$Bfwr$Se?|aUF&pG$rZ++ihtM-arSy{DLt;o!HBA$$p zhvk#b@l*HgXG#5mK+cB17hRx4dJmF(ml^$lFqcG8h zpv=f?t<1U6l>a@?%pWk-dSk(>$NXzXMhxNj?tQFjMOH77VU#i?1EAGOn%irbsazMJ z=`1)_RKDU}NNNc%3{Npuh8)sMAw(G>mvzi91=>hkxZ;rZBVYfi6->MSQ>~XaLXfD$a-{*45yE^sYJqNKo1R>4240K2aB{YAzX%B?F=folCjv)3AiJHJrL zNY$+?1B!9y5`ozi#tjhv3(<;v=5<%3X0NKfk{7IEB_3e``H=TW+ zRFID~y)b?HiJF0lJYRE&sVxxOvX0gxT67L%<~OlbxUy(hGaeo)Y+|0 zcoAyD({UB+_N6=+1NuPh=Z{yOw%0r*!&Oqm3UWihD5w^wA&p(@`-bY7jgWZL;i;`% zaaHk@)t4Q~#ul!Ef@dD*+BWSPZ}jEDJ9!s!W72qh4Dkd}9rK;OjaIsHj8Oibo2RPE z)VfY=B0*XDP!|3SJU^*f{~^>iC&eTibvESRPoJc~P*SHQ6abdAusic^&KwuFe87wi zN=*$gz~2}oSC}uI;WGwqmK)>+ij+>ZGdV}pQKzsEU_OM=77`+Hi5KM|jl<6NB{N}# z#}R}Bhg)%D9AI^GA4bHxPl{swKf9O|(}Za}4T6#k>Y`c?loq^HQBB2Y)lpY{YynNkmKXsX3WXYD;4KN&AE@ka~5 z3crh<;#KNNYy5iY>_xz4R1fzVp-vmzK)Jnc6r5Wb*4_r*j~G*<)khJ<{NY12+v2W`k@5_hhiT2d<8 zf7ZduxuRjR1CE$Hjn477s6Vh;J-3CMPUE<67g|(G1qTod7g`T~k{V zd!Th)BZhl5qr3j*tIjhq*@LpS@&LDqL%HS)noOpcS=r_cyL1S&Szf4prMedY{E%q7 z?D)~7DOXosn944XMqfb7aau=5p0kg{^B{FytdrP=*@lY5xeQ_|qrD`;FRIfxy=;4q zRKvs{BC^LtQX)GEKICw|ro1T69!(TX5_(N>>Yv>=?9gr+5Mg+!x1xTg$rv2~AGs$b z_NQY+Y*@v6xu!|N0e6YuyG=kH026>h_IiC1f}PnO3IF&@*Z!^RS2LnB(IuAX( z?2_%^Qn$wnR3gfEQIWKcN0Buj-X*E1> zuS%@jD{ndRd86H;_V{3*x-A4;8>0BUUkh1w%F694t(^OZ9LB{&f6ntq`{T79+(jF4 zV~Ip%{wZiJ=Nuq2Dz?wn%@6WC%qqCd({%0)h^T?%K_p2NY|<@8A6*Dua2KlT*R*EM zrbMYT>~lw!Q)oo4&}bWO0-W3ahM@5HV5t`UEw`LCwVNK=;cM25Bo0IXozp*LaXb^+ z@tQz!!-ZY`37kT4-HYO`(DYJkWSUWh&928{qq}I+xs$nas1-cnCX;b>!oJ0jv2qv^ zJP{+Ck#ou};51=<2h(?`Ry1MfoUtXvvi81N{gQ8SXSQ+3FzVdH1qhtklDVeBdq*&7 zErGr6lDW2kFIuZ**5L)#>9a<$KSZ=IR@4Q)WZpRdzEoW&+pdMGLcLy*5`}V4f~rEg z<_gya)-~%r18e`DrUJ~r707^i9VAt#=myTeOIuC0Bcb6(2P3Wx=K7P97)@Q8GjDp@ z5}EZ88kyA{DC`z^4ItR7qhCd=prD^2ISl5C6s7^TD3({-?M-Tmp^gDn*zFoyLS2oI zya4736^2c8h^kHywhFwag6q~F=@k?D#%$sm#;Rx2`vl$mo04ps38fP1*;n!FpBVQ( z!8}(h>HzZ__RaxkD_BZ(*OBuwZ0C<=B3}oPd&_hqP&JTk1FBedLcrc1q_Tv&S5yYN z%Vf73fZem0)u=LpsW?t$T13r8FSwO1X&>)Y=caUer#7TM{_Gy%&rK;5?r7YK95S39 zGB`PT$7Jjkuj6*@96s0mP|uu&ikS1ShX20o_gKG#Hcf;p#0egJc2eFt6SwcX56bWYfNs&R29!OdISR%nIl z6x3-5@H~u~N3fb-UjJ@0CSF4Ff`@GrQQf^55Y$LhGwcc*anV*Yjz8r1mZfg+hjOy% z558>lfVnH^%r0kSQnYyW=nb+e4~AislW(UB``(+i88X6&;_JU<+5L+)ld9AV^cR2T zi^WKpV(SeF`5*MgzhIq!jwT5Fm!JS!PUd( z17Ut?n2P!3U_v;$M9og>gZ%!YMC`yKOBdnAY8S~=%RFCxrP#^!zABqc2Kp8JK~ zwI(1ifAQ#?o+-9Ip*~^6!)?oH@~-pBDci>l@b+}1_bt*uXHp=FxVk7c~GkF1y z@6n`F-^6h3YsW+*l9odSFcD&!W-35}cb4FcNqWk}$Zakr63)x9XqIf+b+(w0@Rx^q z%6@sbxlK)9w(N16*mu8Mf#^M?)Qawv*^7x~DWaUkxgwL*HYblULu6Ba4Ej5AIIkY& z#z@>cC9vRAUxi;#&ME`QkTu^9#nH7bU9IQB$;R_Y$sKyxlH9?Ni&Qbl&7J{9B~&bC zt1Q5u!`tb>uFfTpc}m;XVC5*c$qh!s)zGaf_rH{cX;!g!gsTL*H(4Wq``AqP$-k@2 zH)l(Kc#@Ma;*~1Pcvrh7&OnkZweL_)R8lMGjDjn(Znq1L-6SX={_LrQz@FR{LfIS? z1v0oLI08gGFeM9mH9!y>j|2cnI-bg|9}Ke=L}gm(%~MjjJ(Oo?7Z&tazudle-p{Qh z0VeU$UZ0Y1YK+usF>$e@9$$9``Wdu3GM5|z&iJ}3qWm0UXuZ!Vy8TcYA#pO z3mZkYuzrP}k7`%?;>qVar#WO>1W6|xF7cKL#)pbs&+=PyBD{3*@FW<>eGy}`6*5{GL2ZV zc6csfr{SN?Uf(*0(vD*|eL{ohr};Oz1^YuD?A~`r?ga9unkl~pkm$Jp`Y1k$lgEE; zY#@Lg%}9H}8&E`0e(;+z4%2ki^-hTE!Wk@&n14&*Jack9FLF_PNK)-kGCY)}I7`iF zz@%^u{hTLCmmC2c9OUw8XF=YB!*|zxpo83=26tDPr$fR&fj`+R!AE$7Rtb1~wgGsT z(P*n&-3g$oRtd{K^2=A@K|jAo_?v<)(YLxh@wkZRI!4xjL|voO@1eH2VCKI^8Q`ip z1nlvxx;z?>3?XAd-$h<-(@%YJm&J`spcP1s7pULyg`@!zhh#vm1h%)PFq`7~Lu6?7 zyxqb1>JN~`^q`D_FfS*QW+zoHom+5s%=WSGxOX4hMkF4f%P1Fc<=0RJ+0WI5`&NTJD_0o#U|y8kUEb6j-Fs zA5@>?T&%H=|E;?7Uw)`a$ehU7ugJ0@SPBsz#9!1S@V}?Hls<1rl)43#^nWl1GxcwP zL6QQUQuaeYSm3?{1t)hUB+ajMyA~;SAt1Qg2U4`d^K{a5)RW^=b&8B%`Gi5Blah`1 zF*K+O3ebv8?;H=vO@Rw6vyso{kR_pSK}JekFma5_bH0hsX#+G!Gi+7 zb|(MJ!Td!uNx=>UAqV*qnuJ3^K9K*C{$iS=HK}KSe6s!h^Y2P$jI$tMDZVoxuz#P5 znE~PXyVJxB$UD^Er=~bTnUl9bV49%TLHe}+Zu~lRy!5x!iU@W!`nOcR29`wlwjl!BxWPW!hYs1MHZcblg^I5*5+QUX>wamv@T;ZPiH%^3b0^F8J3whSbHH5l1B zn*8@xg|8R*RI zRbQqeNCgr9=+&40^_y;}!DHPWm)xB$0@Ej*q~?9iHpTZJcIa6_xLQ{9M-@C3!ka<17#rvY@qh~Kw)G$18CsEr8LwZit8L3w%sp?ern z{#TZ7hPvz_gtwFm_5782-s|~+vE5{bpn&<@2_v0slcZ1;{*VT-I76MD1*kHyI>M-% z3RXGWuWb40fOKGCWl-KHeX3`b6;$*g+4bASy=K|C9Km@Y6zi}J2Lp8b&@ymi`R%E3 z_fjyfksHq=lY8Q|-O!hLjPkQ=(I-wB%W z2Z|hUJp9`G7|orE6)ZTkc6ncOBh>RP0U1?zXMAoMR>4X~6DlcJ>MnC+_n^)*qUlk` zuD*0nL443^{q@~5n4$w31q!_-_S5eoDehU5ly!z&hY_xImaSF&gP656?WW5(!B$~r zCo+`~cp8n?3DNXIkPc+s{Tw1s5cl?rVM-zKXZf()*(fo^(-N`80C56n z@`e&dp_u+IQnmcMtRKFa?94^fmfErU?!Dg zc_MqsSn4@seKtkPy|t@X-}34g0{SRN!o#T&11)~bl#~4=yj49Dd|L-o7x*R-=(|G! zikb3_@0kCW`IdbXkH@`WEpYGX{G*YY$@+*A%%=5S0IA5GcFZ3EMcD zIFbJ2Tg<@7+0N19pEI_qmNlvh=I7+(53?0p25V`BQ4{GFYb140kzZgIFhLd4FsNk% zXU=Y|c-&c3b#>E1^WnbGY}mZuRhYJ;X0 z9Sc(J1gC)(3|V;r-ooKHe8r}|O5>`gq0p&Tp%~uSrF=K0sb&-*&G=@VQ?Db#tbo)G-bl0klGFm;$COAY(VZPaX?41vUvf zco!xfDubz_gZ*TlT}54zC0TtIe_<7OgBcCJ&TZ4R%(MC5a69v)KHp73H$ z0WEiWr1VaG%^xgTjMR7G)K;8|#j;t7VvKbrGr#)3%H;$^6lU{HmS4!No!o5d#Tpg= zoeKwIlQU}alarwCZy)sl94yhYHbNM!269p0f>#6)<__jK({O4PQC4yLAwo*sh|c=(+cKJTwSyM9dcOjJb{RuxPOp z&@Q_Q0UVP~w6KB~P8^h6;@K6pE9(te_eGqQ%8)P)PfCJQo&UuIia0UNLPn zDjN#{7_i#&GmA~r80;st6|D0j{sNqv+%pl>mUO@(SsA(pt+_8?GJE;=V?ox&(-I88 z8m=hNGsEVI#m;>IL0XT3hZ-jneY%4te3*UL?}8BH zK5+pCAMk^Q+N(YEj%Rr_zwH?uq2Jnh!%90SEssSVggMBcDe!s|JE`2x5sO}gjky9f zHd37u$)UX%r-F>+b&2JWAE%e#)NJMV6$FvGz3=JGh*C`QQxEjHw^e)oDO z0u)VkD?6Nnsk7K7N#tzL4HD<3VG0e-kC`?~&c7$YEa~afW%LH1eK#1u93T%R1hUOP zvY|>2BMgF6LQD}{2qblXevm-NzqEiRcQP%$|CO9;s)?r@t8L%{c3Xr`D_DQ6{=eUZ4I%0`l4_y0$iY+ z1t$0jr+?J)kxuso;uARw;)4GW11p5}mbLke8~qI1e`fK24*E3UlZ^V4WPFXIx{bO~ zUmO;{Ww47-zX!{{C+ECFi}qCp5a93qY@sZ%tV`^lFN6IAWx3z=Z?uEIR-@dZ;h>T) z3#{R5MUwb?HA)ft1i}4Z79sV2U4BZ$e-j#F-k#V#V36I%cmmd66d|Pdw zpLcs0z8>X_fObS%l`5FG5<~n`6=&lOozTl%oMnZbibJMHkp7cxVokk|Hxx zh!2ky;C-Gqe=ro z%8YQn=$UbIHPO-krGP;0jY8=Q4FR^Leo&KFlpKHcMF;Gl{ z%y(V$l3i`KgI-PPz|}iKqFfW`aN;f%&8Co>k4LQ;{nDyIlXj`q!W0~rN9p7h(w3YV zGP&PaH5_b`k(#%eA1ene^Qn73F<1U&oJHM?1Ds*P7>q@$Wwr{g77$5xvJ;Y^^M(bs zm3HMF!Z736Fl#w$P*~xO$%_@gYJ~OLQ`pB1W+G@4vIaH!fiy=V0ZX1iYxs1sNvR^b zCD8_H{wkZXIa}hPL8G)gh^*KmjOg!|jcn3T=z26iq#-})=nEO@6i#6IER~IZV>;tk z0l@7FTPkl>#U>SYj5YMjiSQe1y5F~e$nye8fcoyZ0Q15FwN}v}j(G=crtvxubD@)0 zjncSNw**<+jX3YLk_w#Ad6ZV<{+JmWnc@~bi+hE??Oima~s(q=^Z@&<<`aSEW_=rNNL zQ~0GmaUytc)pL&TM+EV3HRGfn-}D=|@P3#9mTeeO=4x5N88mU|AW|=^@bCr)Zt&4U z9e$w%ZO9$E@KFHl^{Y3&!ZcQ#}IGb zrytxrAkbpxY1?$f461YzzV76bVuq$IOdR~JlAy&A+7@1CtUyA^8Q~;Y>7*`4$<>wW z$NCy<)h7t&O*gcvy|mC3(|BsHrJ83Jecz(8H&z*k%;zLCKXjYYTt)Kn`Es6JeKSDz z7;{(5xc<1pmB?$wf^(e za6JX+3^7X5%C{#_bh<{l`MpS*2IcV{7dnk(~ zJS`Y+VcifezC3z^-xiE~mk}BD$h&n2etG-`GI-#*jG>^2Aq)A~m*vv`LyEu^n?|2D zXdzU~uH)!hkSR7JKJwx)Lr$8YbDh@<_-_-rvQzG3?3W%N!G8ND^nddF$k^GM$vfJ) zS{R%Bv)p*0ijFnz0UBS9o9j>;KEzOerQ~7-2-xBor*vjNP`qF*R506FKPi#EjPzie zlG(NAP?k;zr-dIxfq(3CTr48*xA0hEB1#dm9#oq4yYP9b_eNjAidFuHTuXrHhErGC zc%=@$U|jjf<&)DD-_ttF62be^69y3Mjv90uFMyllNCka#GHkv6V!0)pM`bLjeMO^6 zbL?foVzo1&%;WCo2-apYjpvs&w8gWNjJFl2xctgTvVW02XCFy*{*qgYu(D9gLGum% zj0D9YsA0mFUBEo28f~?hw+gVkys(|-kFBDPl6|o8nyQnbAkn(;S_q+*cs}b;tZklI z@`j4sw*FhIOOz=2M8MJju2P~$FvMR$;BpbwmP!}ig9q)=l%B!=m!&9k7`n5D1lVE> zZ9Ukc3Oa3lM1$YJeD5f?ck$u;(}_RA(nTw-ERTy#{I{X1RkY;PlN`V}O}$KX`f`c= z+*3c7o*PXI$X%UMw18pCX?B*Q0qzFFx86 z%y+WlsD=-wZhS#`(7C0IG`zixW17(%wV!uRbw7fxj8mZVZjncULmv8z{jE*On~hqO z9W9FF>3Ap#&4Rl71_E}OP|W)&+(myIp%r6$8GF3w*+@vxAa_od#CCa?kMDyME*>`= zdpL=@Et;Gv+am(3BYku=On=N&aQ75D_AgeP(t47$InF=otb~MIDBD_?j%UL>l@j7m zxkg6OPJb)gwu_Jf{_%jG2I6T0qc-`i^1^!vYH%y0d2Lk1Ae_|flMs`XfX)L6lu<`D(TybU(<{a{zmO%rg#jX{A|joqx|Gff&;mnLiN|M zyb~peg3kzrq13M_-fTSz1URS458{%XWojnxrl_XUWsUo zI*^Fr*uZlDnDx(yXr|2BX07Cxd>QbFwB~exW!lkeHzYzNdFGJh1T1rjK1<6+Z^QSY zM?|w=*>QvXq5vlfk#~q!9Bnr<2<}&U{kP?!}I)Y z2ZWjm7!d$;o4w{z0$i-v#fEIw#yGd;izS0z!?agjrGn=84922_e6BWw{(e-+0F=-3 zv73a-$Tyg*BcYCah^Vt^?l@igyl2nFShzlXMA!QrohotTX$PGITL1`(9OGO9>a0>T zv>XcHxK4KEE&n{ko^zZZRmd(0H=_B=t#zDZcWW2*el;L+43GlsbT^)Zs+iMCFj$c0 zc*P|Z7-RTep;wGfkVJj5LrW4aHo3-FBCkuoQ|cNtvK;3gzu7lJ4K+dz`J_gk$}8Xr zXa#<(skpS?WVy(QGH;Zbp~jBG_k+{Z?_vPTiYKp*A6*kp6XK-eQx~b@?1%D;ur;Mm zX!EfS?!lD%rBb{GuqB=nkaAx^nbSW>#VIDK%vnadm-k8N`GxKNyHrfGa z>NRH?HD_8iW97>m)rM~Q=acjT$(MZWnS{apSlR@JjD6zddY~K^8|2^58K>w0bI4`{e-F58K5e`c{43V;m$k;u%Dq1EWvxL$ zd_k4}(+c-bl=4r1@xM&8iiEene8xjvZs$FXz54n$aL?=EikJ*8p|^-eb(BD4*zbjF zqm(C}DU~F*X3rt1=7yOw{Q}(rqwcm^jMTY#VMz_ESQfIet9 zYRf3C5R*N@isRr)P1BmnWcP;Ai`LU+wAtv~MUOrzth>5XtKY}|Ns@u`1UNVd2YK!hs=r5@|S zdKjKB-ku-<$lXb3 z;1i#9C(XG<}Yln_RsZLJzrm!#P znMg@`k0f0E3bH5;JBxs+C^mEuikqLifS3E z98(-DDaz~Or#!C2OeNqJs64BLA^G5Oid>4CBqLs`RJye4RxkDrFe^^<%=+>u=VMyc z^lsvZBvmy_KH>T3U-MjgoGL}&J{YpbP`}&&vC&Q%b*JZI4>Uc?1#VKw%J|rVSmT5A z`*e3>0~LYzo=yOTQf@KMW%GK{av_s4M38t9w}b^<#-I4QN=&+?v@f6LN`0As(igI4 zu`-?m5#jHDK^aWYuj0;-|8Ogpip)U&1>|f00`mWt(eZ`hm7EP6|2qEZL{6~zdvyG9 zv!+?2-tON4@qb>1D`eCU7e*w)%n*g6oVotJMxS4Brt^j2L;iu`3AzzXc$?@X1|`r7 zB)$Hw_UzGI{7(R520H}^(wf8REt>S$&dL>5W#+Vy`+XJH#3bYS$ro6$E(~Y`ewkl~3Xp>wY>=51pb!i~RhJZcOeB|XODH|cB z>VPm4cD0BL$0Y}lDViNOmGb7R*fEwrilj7}t{h(BT8TG5z|ED0zv8H!YpKxJWqsFu z%qAykJu-^mGmz_>$R~988Vz>x1HfX1yHHfBqDi){)y7=!DrLHdms)9Gqk)vVsKcZ+ zc|Bxwzi2DYW$ZBZ*J^%`i{D6BL}x_37O_v@qPuNvR6hVCp4eS#tDtHDQ8?M!S4Lm- zHBl~1cmV7R;s_2ihh_a@OTx(+?q`<55zgxN(1hW)hj;v`DBg`qPb^DFr9)ggl@cro zeNLZHAP>cgy`k8(ie(Y@o-8N%fh{>NqdjCktXYs1nKkJ%@XTndDLm@7P7rMB!@WD` z6Ty~K3JzE#VxcakA)Qb>yrsQCi9={%$NzcxEioDh8A#te>YEag;8UAam+>V|5l_}o zG}n;O5gL~-Mdn)S*+kl4Ma13SW+p~7cS*uSu2W5&g-)iV?qh}Ff5$xw1;ml-*bH%Xr|4jMz?!%9wPRs zu&gT9Q9zR;U5~#GG}O_lG4Dl*X>`I@;|o)l<1I)|b|2M39%)9FvJGDtIOXYesTmL* zAS0JRP6nt_0%%w9Lx(*3DlFGQ0|G|@e_{wPpFLY!lafPQnXqjm2HH*&&8^CFi5PkX4ASp=8ZvaGoR3!TTGRWSQ43G-Vs-G)8^MYVAm1U`)kuw*1Xyw21Ai_9As_~55X&{vR7@2+ z-D$Idk85@LP-3XDOGQw)`l8}8(I_>gDfRZLKtm{{)Q9Z?l=V3Br3UvcfsATnP zlSIuOu};Jj8f09Ni)ga>wa6)ZFdBcf)d~oCaz}Hnx^yUGx%ZTOnQ>?UQb%dnrNr}N z3UKHr)GtS6$X}z0LBx(I=&I(}%DI~A&4b}phDp`aG^0V(QbgoG<;P)1Ds9DT=y1d4 z&yt8qQ40-3>45!rzK0X2G*L8Y8dRjE+0F!(SQwN~rHB_rnIno5#K*EB*%`z`MIqDP zq;@}+*+^c5t7$_S)`1}a_N?knX(pr?6_ID)!Um*|g|ubwMch}HS4d!Koenlc>9=YY zLU(8H=DgGh-IR1x>vMHD*9}CAHW|6ej9tqddKkEK(2zPb|^ zsk@lHrfO|*XbhQ(GWA~w|JrQ)^N~3Xi0m0 zdEW}a+cA4vc4l)6=sE4`RCg4_kBi9hylN89>2#Fte0MnS&+Kc`P5JY_p5bB#|Fk%w z0@yk_efO!M#d%y*eSzQaBuBvGt+m^^LHT(9wI7&1)oztg7D4}c5kf)V&d_9&deiME z>J>8<@Q3%$Sq6JCF+*#s{y@0J73%1e6x3RHhA8_=g4*LOVC@PgW>k3elB;jAtj{rI zto5Qoj*$?8J(=Ur-o1YQc}ptS#~}REU9H=on_ipu-W$Y$uy7B@=o6}T?AF=vN0xQx zcJf)YM#}p8_9owLyZ%b0YzQ2N`e#z4s$v*9PND=tA&csuCfD-&PRZ}4IymCMbIMP3 zi7-~mn`-r90DH0g^>p%sl$)hZ>5^g>H?Bfd3v3orx!7=O5Ns+}*D!+vHmx?x4Ob2s zbNHU}&B6R;O^y?)6Hl$jp3CHEa}N2B7V&NSwF@&Ax!#jWf}Zic)huaj|F|g??_|OH zCTr#GqjiT3JX0O21MPB`0}>NRnPoD8ca$!2oO ztak9{XWCqxGsyEH;PM=iHv3FhqFYXsdg~{uRn^M=Qtj`CQ}_dhfXP7a){k)DoExw;!?~X?~d6QE7-{Flx|vg+cN zEG9QfsjRYh*y$$Q-mmW7OBPn$hv=&N2>FvX&j^Kegg<*-kSIqztmC^H9hkMKtK*NU zsJ6Gd`};xsh2{@{H%zP>*Ic2GhDjH*9hovN02-FgN8C|;%k``q7ULTeh0Bu-Q@8^p zKlW^kXZYLf-1N`UQ(&Hnw`BylZTEdN56P(<5bDZP4z2UI)=GQx-y<)(HNEjNs+Cwe zMPQ5>P1?s9*)1NJLV7HNh5EtNrA*MMHHY;`h$d&F#BK`rJ;F-!i?r_xElI}sBCEGP z0MLz*gz12D_7m`t8=KL)anh68!Ig=3!U5Kk)|!Vodla|c4<BEjrVN} z4iY1#lyod?m?vYrdQB%d1hM0@0{8Y85jV#hC(Xq*G9oKXXu0nC{L0k{Oc9;#DRgD$9e=Rq6FfL({^ zw~|ezeKhRKLVB`ypSFP0G$w?yG&WQ68|(5O4iWTU32gNVUP6ETZte-X>FGX9^7sZd zu&;P0dFS&zq{le6Tjkqkw!2aM#PUHt{KQuLI{XHmAs!*HW#M_T%*XBZ38&4E7CE@= zuPor#dHZ|Ly9ps8K&I@6ows>#&CB6=rwqbDw)SEVx((pjA$}rq`q3E$inI0-SOf}V z??hnlNMrAeaqq~v^cr#R&~WdRaqm?B;QWn}y$CgR8hGT~n-jjt3OgpXVe%ZIHBF!~{pr)w95;R%oIQSYsFr}`7rMbAP=VBK-MzmGEqY`a>?V%aM)mX7GA{ zexWCgssvu96S{DQS}VvE6D)An_;i#Jzo4B{8Ec_%BhiZM>zvlKv5dUJ+RE6(uEo(TLEAU3zu0n zTuiJf63n~~N82p%4D@AysE##<u()D^sVrNPbY>Yj#*T-mr8u)HNJ5=}AC85W$@e8X>aLE$?2Xj6)(oCxf zENa9ncN70AKM!O+4cXXZaX&!Z3_^)FjbR4sXM{NW)NtRz`(2^cQY7)^0W{1Yc9#Ip zGC#CknkY#fYns+!D zol0u?%0x)u#6fft8CiBbkn9}J`Vk-lnO*S+f-%>4 zPb$bfxwF@$lRDa3I$Og$*m&{jn*(6M<7f#OSh+`=8mfVIU6rFx$gmeIgy8dwlI zCR_3Yd4*wREFSH_EsU5#uGRO^+afraGba4IwB_qn=w%Dqeq|x{_t(*I1>dAf_tx1T zdT*U17Oe~-(uqflad`lA<3j*-y0!z@K;%S9`Le7JTBU;30<(>dJWJ;maHXd5uG-9> z9kX1Ner=fe@57mv!_Dq8SY-uA3Y#$7d4(9|7JPcUkuCc4`lYf*(7_WUR66pd^fspV z@AbOl4jTB2GMb*I7BYHqj@9E*Vj;Q=Xyxm*Oj%kJJ12s<`kDZ42B=_R`&n8vmO%-6 zJ6}$GSa@Oqw!IKZ$&6Uu0wH+$>9{hYrD-7X${_F9Q`{G>;Rkvy*p?nLj@_J)DXPr% zUP)w{KFuU|k+`YAQ5&FuFpn4wX(BB@%@Q;#-#q8k_T5{;`j@(N(~IjtH;Ee`A^xjk z&g)qnhXEy@>=wXzmeWdEE{U(`eP!x^UJ5tU$xg{VV_<=M^`cmVQ-)tm_DQ~JObk;> zjOH`vwVrqVOo}nIXJL%Ka@nSLSN89epW1OD96Ia)v*b1=-nlhHK@ zLQ8Opy=$uN&TNBvK>D|Em+bi>KJpkd5t9T+QF`5mLoRi+1Rw11i zjp9WD)8(Z&R|};}0A)X~g&-cn35b#a?m|DHV-Jy!#`8#{pW)4|V zdQ)5CaABJ=z9463s7Lj52;@jN6DvHjI$ar|$`?}DDerBHC@G0LRD)zLYT-_jPReaT$H&>aTT3s0 zTmdRB8vgrjceQtV1!`pLG4eLL3r1l!vO4E6zl_?=v{2R%O895eMbPF&>!R>ZW!=ybkAbQl)+dmrngIjSl+KI-D{WQ&C73Z<&33d_OB~LVg(( zV6|A{+ACn^Fx>>moNq(~3KS@7A4swjU4V698KlIL1B-{|r$mNxD-S_99Roe$a};x> zl*^ZIPggo7%?7vU-7aWDFw@VwMN>D_JJm6HD`5@0O8nt+$9)AgB+66Kz@9i{)vk4W zz&{xTS@TW?`x*D_FnKC;Bav`A!x1TJ?zY*`3#mYl&`LXLL0Tvwgd{wE7iI8F>wne2 zMyoew*q(bQon6|a)|ZH;&nY02L**YXSkQ{U*ubNkfUr1Pgiykx>*V5Bb1S5lNGEwA zVzX(MT*1Z@nyBV00he?d;+4-RSR(enO~K2)Rgd z9^B_=Nw|6-h$BA{7KW1~i|QMt1AolQaKo33E8z%F`IT-53(*-9u@S2~w-dld1bH1J z1ssS6Yzzv7tpnN&0c;)DyO|Gi&fok7xBWBchyI1(mNO(GxP>cJtTW^^RSiw*5IfN6 zbq`z6a62WX_n8D$}T0SkF2YOKRYO)*prB~@(09!7&QOe4hY)+vTy#e1A>M5 zf7m#sq0bIRUp7tzeDeCgn>hc~LDt04$;8&yMA^;4$@#y+;A&R(%4S$UJNeA2Rs>xo zXOoSgQj*Ed3^4q`X^3K{{k5FF3-ytqa!SJ6>oc6_62izprkGQSmNhE5)U(_}aArl@ zEC^{b?Um%SeA+wzMq?m}{=ALh0JPV`lJRdfja{-={J>+epM3JUdfLoB^4UswKYl!$ z`=)u5*xjn^32BzGv{u}IjcvTC~!P6uu`$AACfXF zH=bSf?4LBQsK*h~pZH@*nmlg%qZodTWY(8lo@dN*|Ch%yYDx5i?Z({P3gFKT--b^| z255iZkHILcPsni}4?B)}BA8E>AXIF~@rb_Hy@@zD9`= z`1JiAKxT4BMQAi&xB*Q3$QnR&aSdSF7p}8kW{1$7ez}S7&;%XG&%o*Zfasu~toof8 z@U*7dSTt*P8YD7XQWO)-1b`<)znI!L(ED>B9+K&m4*+s)a1rx8k$hdwX07RB>t1yH zVR8?>6lwd6_F}X+&zuEIj)M^v3f7OP!?#DM<}`_N6UIYvPz8cyqacDP$YD}VF#Km< zAnLo0mj2kJO>=lNrIU6X0^(w*yV!-KDa}!q4yk$Yws-SBO9KAL7{IduA#Ls(<(a># zxDu9?Dt7i^Ph}5%;X-r+vS2SmsIKfGA5}sU{fHDJ3wDzkOd*kHN-+EOcZ*{ppsvVR zw^1NhDn|AlBj)a9y!TylrHd()`#_v>@+vAc(okSAC%2a$ThrgIINQh{`Nf$usQHc` za&dfqI_F87enM%O>;oiW>(apwq{hhABiyd)_8gLWX=h<7f%OKG*r>zq)van zgRDGOint2Xf4PlxZ9Erz8}T+*DUlh9 z)=uP8-xCQ(V{y7nw3nfQehQa_z&nF6pS8~;$AvG~Unaqd*dREj(9F>>T-PH=OeFIUoh_D5; z7GJid-QV63<{BLpkam^i!ThWKh;#8rwwWtWWZScl=rAj(J*#M(uM-RkZB9XUl%=D` ztMv7$x^HT3sQ33a3|oq+VZfciPrKY&r{upY_HhKDm2bFmsYu0 znRM6J!nQT@pi^Ha&E#WD-5@Ob+_l*#u{8n~fUB3sE3gjCZj|%k{G`b75E26SP8#78 z9n&x%fWOzxHzZ-4ICQ$;#Ub@ui{*NzE8h7Cx90jm>tSE7Nm7fw>$8)Pb$ka8m`oM`(x+;9C#EZex;_pe7u<^@@-pXiI zNTl+m%Nc~$L>ZozGr11GCh(X~IJy=#r8Y3`zQ@6x8i zz0(bge?vRFn>iG2jYe24#b%fP0EcJ`u%X(PXL&`>eouDZwm<*Ce!n=lI)4WA4)Ujc z_WZH2kB@4J-^t>!qug#mD1PHKC%Klhs#NIhC|fE0^@P-!1gyt)Fo$$4&Z+wo>Y12y z+gWrQwB$+z@e;dGS;kooZ=ThPwe9`n=W4PeOG*ws}}ryO9Z2XxyY@SF zXiW>J4M}(hCp;ksw4}WN$BTD50Ge=TSZSwEYDW})=2aBc4VoYDvtn3~5uB3|J?CJx zf#_ExQP@?4*1N)bu(c6ibtKrkBFkYw^e zCXRpcR;quUk&jTns@zOPlN{6Id=K zi#TM&8CX!Zxo~AY63UP5lP*jMTNn$^!_oU5%VcaOxN$Aq-vY>8ikZ_a@wHyLbI^n# zEJsPY&pEgJw%n($GVi#}0WVwZH9#1HcUVfz4RNJ^hKf2}x#|qG%awIyV_V-W%=2@iMedfXfbC##)o>R^z&yF9dfUJm*?t zd|3QMcJtg3=mMxP9z`t2I~i`eNrg^2ZPIP9>@PW7fg?U@-#A2764d2Jj5kJt>`(B{eiMr-wbSV zv+$oN?|st_c*3;`wo8nrAtBX)?r?d%o{dJerpnGAl6T_28i^2cXKV>8tu1s3gRr&a zA7L6@<7V+~ z$0t+8EC3#l)Xmc-Ax1`3`YFw64#mII3Gnb17L;ivm5WMKSdKW(;dsH|t11xiyLkj| zhVBsD@hBYLEH=4I5xPxw!n;>v#r2e~XNKpfa8U@34?n}k>XHg6l&VmmTkIncz0in_ zG0=(MSc5=tXVyW)*-sGWIS97#APrI8K-NjPivZs%u2B}8^BmOaip|rDC?%`pf|@3$ zO;TNG{fIbd=pYSxUUZ5qY2-i+1RI`FCAiwxvKn`+KyuA<7mg-@zlV%Pb~To~;pLH=`B*;P-LNi5v!{=cVo&fSCd;GK+eE3acnw&I- z78>k|6xz{zu3I8x=b4(Bj9CGd8>xMksvkE(b4<+)U_VJneJld;fljx!)dvCzR%rMi z*v2Y+Buz}H+NP5Y)vML(gTD~hg`v^Qe8IW)-<$#GP;A3BFM5KDPYv59Hr_s{wt%_| z_1PP$_d1RP)9m>hS-yd59dT|RzL&R3jcyXOFlZcjut%gN2*tu$|BVjFHxCb(Cqw@1 zgK*l$d8x@9Vy)QrmSAs%wGW>XN*`@qpPB0@^?YQXx+&`8sHU1+?&Z3GO^rnj!T0*{ z0n%iDGCp|3J{DqL8G3PyBN#*+RX}#nY;EIV4eVc4GSN34U?^Ga*U}RyX$9tIY{8z$ z;z?$wa%rY|Vl)75RzO(2wt(Uz6y5kUZd_LG7d`VAS-#CC-2QBMr%-d9p)0H=dfldY z4&KXtd$(+Uf--Jh>t;zOmhX63i~NhtsdvsqG}Rv>NM$3UaTm)5m}KpBS3qUknZgi( z;eqsayLaXjDeDc!3q!>ShLzcJ?(y`b7o`_-gDlF;q$*4u+dzdxSMy<~s%dSEtq1T% z(r%;TYU|lzT-#;)cn6M6|OsMeih-RlCFFFN$21izqrW^GdX>2|CUjz4|Z%V zc5>}x@$SemS?BH-Kjjy!PAz+-~?4=OCi+;&<6y^(cC z`BFBVYSB(<9#j%bK0r@3voN(bs{lP*f(=z&BVoJ>f%x{*9Wwlyjz{`=iF)= z_{5b#I*Vb41xWhw8CYBV@P*w6C{r5GUF|)p!I;-3IjC8+?Ah6VqZMDd;*j%;1;1ts zxq%bk!e> z#D3bL=eK<^Ay_H{5!k=+CI1a3sGHi@FmiG-vm5@a5G%{tefsr(91_#>04=)j7pZagAIgrZgRNA*D7h^)pg-fY;n1>@>1MX!b{?gz zZ);{19UUFAGWop8Rd;2Q9xdB*xbK|C9dl+@QgWy41|yXF-27RzWH!-aO^Zn$Qrp|B zC~`;LVGB+3p8DII)_!WW-L|G(4n`5^ViXO5{kf%I;2~L{G@VpPGe1+r8wqd_KG-d= z?`GM|L~o$_Sz=WUB@*dcvzcyqeILQvEkk50nY#xP!b0JpE?~J)!(Mi#UBa6XpO#d- zS9#;AMq@OyY6Tgzu$K~p5>o-O^K)4twdjNcR+b4L>iA5Ky7Wm}pNra3+ADKN9LtD< z+@bP|r-XQe7qg_;7WaseXb+&1yI*sq+Q2n=StP?RyJeF){jlJPo7#SVaLs-${=C!I z=P$rRaepZG2r*B)n7z;4RIzF>1!|prKV7I(?-bwS27HO68_C*I!k3);Sl9TiobuBo z)7{3NR{WcC(UfBAo_Lo($-3MMt8$v%(Arja`rIWbrHaM+SGW12y%FGDXy=)|H`C_U za8et*R+YH|lor%x3cj*d76m`X%=Ba&lG0b-Ux3`5KS<;r~^9AC3?x}gWq z_h%3}^92?k9e!t!^%8(i%4SZ&#q*m5dK_D1lSX8d0LqLoJw0Kuwk_jTBmmL5ML8@w zhD_eh6=p~wVE~>hOK3feWC>hsF^p8eKm+kHLVYW?*O3VC)ORL{d>UIC&qSi z4{`h%4%%aq>|M_H@#F)&$tQeBU@og#jaL-eBjzO6RM;bg+W*toqn`&WBWVbJlC0-J z(ms}z#1 z^Xu|d0-{)AvPd=OX{A$EHy946dwOrkpNHuEYMIe6MozwCRmzU+)GCj`vmAfkZw(fyvYr=Osu&=eq&8q5Z zYWgYB^6M!o9B?#^pwPYeV`?A+KoVgNFH!)wG!!IaRtJh`==hi$^NyGsmKMi^)72Lo zs$*&rOycz}CXS@h7+$DK-Kar1uJ?keQ`S&*TAbn7AP?N&P1|J`)Riiq;75lLN7`z_ zB&ouTx)N^jPbo1j|JDWX=i*Pn2&$V4W#-4x* zm3=R9$#uo!P4=hCc|`+SuWU~d;h_;N$q@*#1rP9$n3n72-<-v>;)_35TIeVwqZg%` zlsv3(L~r888$P#C8pKIY6l(z6f6)1%Aksihz}!Ji)CAF8Cts9tEXTPvM|csR{HMdS z(H!qGk@T^|#Z|J56%r+^HD>}H$i@LsmY$mS;NTYmBTOkl0Ryh0hgHYF?u@f5<%Uu;8jj6Q>S{^VbhzT*C_GMI2#V`7oE3zTL*tGud8 z1J5{&8F-QzveV4s6XEVcZL#ChE;gU=ZcM8VVQ#eIPGJ)%!m<~@;nV@H!NUWL`3gjI z;NT6XN5QGTbiia`<}kj7knbOM8fFqHdn7-jtswE2tVGrILsnxMm$ZK3Dv9}@MI!hH z&d?b37$VdazHg%JmlMQ6|K9#fl2$w$XsMTqdA~=OXwEnpW5Z+|M!~Bx8;iY2e&mGl zqu(OVn`$vN_TH9R{N7X~hw&PK)Dqp7is6TdM&8(ExEkq`qH&CrmpWtVagM_y{A>b| z-Ioz%^nSwKvIEp$OejmpM@Ir``%cfoOQ;hJzJkFILs{(}(GcGX$gh)IhUArKuoNeD^+SXuJ<1tmGb|mD$_%x-2)Swe zcURf`w{c4pqwOim6aDM`Z`s#`8+8%DZTh!A6_JxhZ|I;r;~DWQma$HL4eoGFI1vZ( zFr?a1QTm(Ggpl90M<2%I;k3dS{!xSOOzhC0Pjd$Lz2o+q^LIEQkj-q0Zj5AN@oH;? zd81A27v`g|tXL@Ve3Ag0f3ft{e5>$TkvnG00#`w6@ffdZO8*g|_^$i^oX4$(j)0uM z=W*okd0gy&eLKGGmo)61z6WtLmwy;3{oifsA~jnZZFNk)>I-e|=EU_zH)zdy5?!#E ztVv7s`RGQ=Q=dl3#KnvZn(C2u>^CyU(;7W)%__ulI!et|gNi@P(M(iYvVnHSIg$0l*s zZ`)t;B}-Ky$sq{mB~M-kf^@GKl_NYz&pIXytutPz~O^QeiQj3?c2yr zSt6Z}m5I=0OAfMT<%FZ(sK{{B84gr?P-R;m`IFDDFwjsNmjK+4&&8pA27YF9C<3+M zlG&sfjL8lH8jyfLa@3F6j7(W+$@=5K5QkVRTc)P zD!S@-b1r1`eP<{7UCs_JN|A?aUi>?y>ObCQEke-&vT_s@i2iSB*}(9xSS4~q6B9y; z+Va9AwUb6v=h#A&Ou(Z4+L0we}L zr~)Mb2@iDX6w?xuFLDJmTLBY$qSAp8%E^J#~elVn`NZcPwm!a zjU+1Xp0UXf$fB%~$AHeU1n-`-Q^v`cd6BCCqM)XuX5!~ub`+vW$yw&2$!bL|Uwhgj z>{?}W2eTYdyk1LD<;aOz<#9@W%j+78aW5SQp)udP5Gh~#M3s-cuuEN#Ny?|2uqm$v ziZ0o96^!@c4WI(-T@P%seYVyS=L$Vsr%GDyqx!g%tvfvPd)qxtG?&# zwodC^Un}9-ep`e`$<#~Z@LS$`ZaAJT+^@qq01|CEnVBxY$Jo(+%XH@Z5&oy^Y5Dm{ zpFST&$DKM&jof&GvT~atE2C(6%Crk0s<@Lsdmie-Ng~Qu%?7|#P8OodOZPZ5pah1& z%av;u;q5&-swdBrmlxBn(HjsPCG|(4|DhrClk87h$)Jus%HBdPPTVl}G_)4@mD;sR z|5NK5dOLIc|HR+&fR(Z#uSgI)mufqP-fb^FRYg{7|9*4p_5G zf7;E7(nqTC864=+n^!vHj21Vbhl=ftF&vKG3BQ1QWTRi^fguH2Vfyv7)G^H{xZ%lR zLnf`ARmV;d5&;^C4ttu9C*H`cW;GrZ<4AT-PWtk|{cQBPp2-rVq9ELAWbsN-xlo3S zdkk2bnH7rcRdJU6Zq*`-IC`Q0sJi^Hrv5yox;h|^Wi;NkwkyihNkf%;kMu2VC_(k@c+q=!mUMR-LXJO;Y{z7xH~jq; zUC}AHsg5(Rx#Vg6AQeQCE0m{chO;9uP@BNd>ABtr`DaK{&Je<4w5rB{-;I+xE7d9s zK*sP%-k{K1L~!0yUqxtx>?-CRfp9ZSJN~BgE8gw{8Y~!E*4EiX+j^tg zZJ!`7tk&5G3lO&Wu`?Sa>3!bG!7}jD8k}D4IH7Y=Cp#(z#gljamTq13lleK!ch8ZOSNV$L>QTw4pYfFvzI^tGlQav@9HdujFNFVm!M<>PQT7Zw@tVt!F)q_7 z)}UkVOVezpu4eE9cCH?&TQeT@I;USf!=bt*SkW~$BRM3wV@Y`;T437NDD|N2L{sMf z)S~K+I+~Jh^1-3q8YZe3W08u5;AxM|^5C%)Ht#&w_dcg6=KZ1rfy>Yx1s^~|$Abzn zMK=rBfu+lY2&tmWgbA^wn*Ywy_K$=yM4j7L8<9hlFD7`_dx3DxMCqwpol=gsT{ebbn8=osTEBbuNsNA*OMtY@n{!mZzZqXJ z%QOxtAhYX3gv#SokhQ6ZdhO<~*h2UYVAF{*p&mH23^&1iP*|v`%5(3kv;$+a=mX!w zt))2_yjC&JlNBH95W2^3i2hQ!!CV+pI=KLKmLKI439oRGQwFY;#K^cuTOKtP2_@C& zB|<1en6jWX^aR{>(hp}vPKSgX zs7x+%I9%CSsy$`-maIb8)cxQOWS)Svg#WEFux)x{V;+J9WFrrUe<84$$0;>K5~kj7 z!w}4D3ugF?4k3x zjlG`QzMgDWy;p-+p24wNP1zA6Tk>X-4JEjYvDy@6aSn)oddygZ290sw@ggIs_1hS= z!tGZEcd16R;ka_TlZJW;Y=eWsva?v8)jIiXx|Vy!Z*qU3H*o+wE-wRD3SSc57O}#e z1ZwYZ+j1{Ih1}8Z1XF3{2opmxYwJ6uxmp$NELE_=AE2P++zej($IG<9keK)+2x0oC zZsqM(@R0k_uCbw|;maVBg=YRD-eOH4YkW@VR6sHM>WAlzb^{7D8(C-;!l=$#3rU@o zq*Fd+xyO&$ZIu9}Mpfab1up+f-7#8KC04rWR{~LtdagDNmHSKqY~vQ_Ip4oY4FCp_ z3lvi_E)c7q#qc_R#?b5#C=9TZQ-Q0ZH@ZQsuL|B)*J2@1x{-0JEomgG7N=O{LQ8{p z1#cAsME&h{zzO~30%G_fNKvj!`dF161`Vo*G>W+g6wCp97!PnEg*k6yK^EMw4Ezuw z97StkMeb@L8(z}cs>3#`Y9L+^nS3H^bQ4P5uGhi`-11Qe9q!Z%PLd66i2S6AGM+`Z zK_-eaS%fIY8;NBIunTq}_>fnTvc*(Vel!x4uN+kU`$dg|#sqGuEbSwN_ecQ<(G01S zYv3BoP#OS2EYnS1mml;`{Y~jBq^d18nln^DTo6fWpp!8jDM^Hw%O=ou?dF=zH*fLv&R8s*-MLKcC5JCWt-wz@AHu4t z>ByJmim6>#w5tURlm&%Hl~}<&(QcGwDJH$mjL}>|V7c6qi9lXJwa5;SM9+M9xsifi z*-z5}FzkFyyL7cAsKyy%y{usope|@?q0FZ&mwKG3d%S9Q{DBD`$#jgE00M=*+CIS9 zGG1yE5>42E7+lK|ae4JQJ!&z^UEHKBdu*)?R;p|=FLz?J0QR@}L|6;_6N0n-`PnJviFm7P;7vq9%$a zcV23ZsC|0f`6*{jzxCR%NRq`l5$Aa_f|J;?N9G!y|I8=Kxr+z2>xGZ7ArHXykW$EO z-sO_Wn0@s=L0prGoeQ)e{mW5dYrqnfoIxmuySII9TmXI}N^Wo^r(qF9r0w`@I}j$> zne~eEm|8m%`&J$E>g>L~RVM+j`f`ObQ^>_FcYf{K{G1e%OSF>H;c!+%+f7YJN)MTp zIp!5({$oY(w2)-TA;<<~83?d85dZW8ytCcI9f%&<0cNIy;nv6%8P;%r;C$d-5!@c% zxv#N9t_)IO%{zJCzB=rgm=*Ec%XY?~+h`BN#={|XwbFi?j&M@{5SqD-A0R zWXd?|Mw^Z{o@dAFGB0h<4<#KpXhV3`FVow)OvB|x!o&S{2`OI)P7gpklLhw2(;$(r z73t*|);iEgf`s@9r1=+cqruSMWQvgqd6=dx2$(QO`-@ z*N|^EOAIw*`+qoIiP;0N1qLT<+xQr1fQ#rimrw6PL?>T2i;~5yOE9dXQF!-m>A0q`r;-t91URT z%fnrM54<8*(Y@mgor=g{bFe?VT{62uv+gY;QfC@mI63Ed0LcKkr9x;W7gqLGDB=8^ zz86<5S^E_esYL05u{=T|iX1nc&Yu)fHcWbWQb})vLF{lZYc+F6gx`!xDL2jIOFv%} z*RCPHAM(L^ad7Pwmal(PMni%8ThK(yr^?WxKz0TSD#(s+xymuv=7V40N>A`}&(G|w z0;?_2?oS}qS2_UIWo-4iV&x~%zR5{~OFX&%J54I3J%bl~)MvB`06y$fd7yO4 zl;!w4`=`L1vp|r+D~0*g9n;nsbH^E)Icm<5rw)TW?h=qnFywvDjxQiZDdi>7RN6@l8B>lYf5CkUR8CK04uiO(A}C#-UOK zc<-x1HMVq#Wz;O(NnfvF*56GduJ{;2o=Iak{HCY32lR=+PD6aU4+GRJ9+uQLuXfKz zj{c&>GyrnC2OR6?sC5Pj-u4~NMrRW96eGk2c27zcYwZQQ>pL-mX<6y8UN8lH?sff& z>*lO^$ZYO;@n#6#I9zmiV5nsVLyomx{ghE`PeQ42NvtF4`&?&xqdjZ$Z#j3q=>I1u zR$KKd)bia)_kVZN0{?Uiaf)cQdjH|_rV6brx>2@O*2^TSG8%R9&`@#If(Bxs@Uq8Mm1~Q7` z2Q%#I?>2p24%xRd^m_pBAhUhW{noZZH=-i|{m@gHASFpe@jw+2FP>#dDj6gv`y`2n zK@h7BVm^=^M=magzgbLS*N6HuSMc+bqXfp&)6~$ENLKE%Rmz@Zke7N%BATh&jdETW z15`Rm)D$~-c}davNwq6qU;7<0lF3*|P~^P*IN(zAGiyc?#30W6MP6CVm$lPBi7TgIGST@>odf?kL>RKdq@Z}S7))CXX7 z_q!p~L%KHV+%aoXb@uJtVAe}Cd)-RF%n=H@>bkiYB)mdKUCbZbD+`vcjT6z9)%(*0 z`_0??@4T((D?pw;lM%IejUx%)J^04<1l|#$wMIWON|)~&NP{$p`tGTXp5X!9>EW&w zT;(Q~nZWL9)kNEWwBO5l7f0LQluGV5rSi`c@a?jKh3+I2c zqbkxi*s9;`Xiwe9-Y{cYp=|;kdh^1XWN8I~N)U^qSf43VwGBCx zrD+`ccgFBBQaCI&o6jJ9yg&eJrGQcJ9~Z=MP>FNF-*>}ydvw$oV}PeD?@jNgZ1<~V z!1K|WJ&=ha5{GhCRgt}F7Q6bz)P1_Cwq;4Zl6-2#*_mofc6FQeAS<_Sjosq-qYB$c z{RKyx&gDI&v_HZq|K&$ovR8pwGB#5TaF4*2-{7LG^#W4sy}l71>xQcLS$os&A1EQ< z({6f#>RamSRfiBTEGWWz!1cIdQKz1SC7GH(ySkk`<4pA@1K%6IZrv0?Xy3HP~i(*r<<@V2U{GJhnzdSxSjshu(! zZqS^Oi{H#nA|sCGX_A#&ou*r&I>QOLc5D7#=Blooaf|WmK6iQR$Eu^2n%`fsjHEo! z+4*~<@ep#r21ubb4-^D;UQ(s=4UVv;x2df8({vd|3bj;!K%?Chao=H5xmY`Hk5Z+r ztIw>vQa#0~)@9eQYBgrPI}~BufXfF5j4)^@k}H%eFcV7QTQw3p$3MIGG#C5y{Bgf( zW5nMEblfQFb+nU=x)UyP|4awxcbKJ@tIGRHvSn=$53s0ph6}}j#KRhfD1eCCl^{>I zP(A~?{CMFUChHz#=H^HNK#)&6@)9~)Y2}AvCsGn$Log;Y1;iqVjYB;2z>dL|q<`2q zkzz@*YKJg!Vez*v&HwZw@Y|QGFb#Uh#fz#a6uKGErX|h~eUO+?c#zbdbARuR_}mzK0~FutQc z8R2`n>gMx;=ws&yDQ_dc;X4R=h<5dp{V-qc=7HvlX6zhY<&V{z%ngEW4fk9h7F{1A zT^}&@`GL&c`M~@4nOXXsy5N1-?cG1Mv$*pwCBVIfQt^BzYUN(=y`QE&*!VfVO=Wyy zn>#b`T|aGze6q@^RLUa}yWw5scwa~83WIo|(j2gB`DD|8 z&YcL>67Ki;7se>QoYMOln=<&amBErHyMSps$Yl*DTH;|duEFmGRzO9Xw4P3YhTiX@aSEKu_xbaG+oJd`7P9|QFN)%1?H2?PLbk?2g%&CBqXX~gg{ZNvCSQ$aOkzTRXO(ui}*vJONij!e|=I6Rw66T zVH*`~r1^flrloZ~KkSkJqGN-UZ-g8IkmCaI%8?PJNJVjAl@O0_G|0;sBuCp6iI$L& zOS`H)aD(UruYI|=n7lWj!miKt5y1mln3+b+N=IU8N+c}agEv1YD4 ztBTO19i5S!yT({MD3s*~SqCYxMJV+vfAxT!GE%5oNjTJ`5YsrUNWKbYFm|i~LUChj zT`X@CWP-<4wvo`Hr%j4u@*R>8$8BfMJXl$3b%v1akdBj{2mz4yB!=LOQ=a*?*y zU7@JlE50c?XL&@69~6o;WPAQh_6G!JMLTB#!z1$|k9_DA_P2FP*JrN5cTv! zM_600mFOH?+TWM-dH7qw!B+ujd;MX`GstD$Vn(-&?i>+_Rn1%wgk3tLdG*KEnnl~r z-fP*uX?^%UvV)0N`y=LXh5Fc5?0o;&)h-He-3T;&vuGr`UIvg+r*MS=fgzZLeUIfKSGZUX~^lv)Q2fs;B51_JTF)C@^w zK|$evqH_O2;MAeNr8%gdpXVFmDcG&62`Ul-P}W#%B=HKu5dLibz?R5p$S@@S2^mvh zDK>5k8?dAZ{T;zdm1-3+OsY5jvE^0D5EllO%I4+IrCdwpO)+XC`MVX%=tR#SfTy|+ z8wVGJkdGP8uaB9pEaz_L%Y*l1bFv@b(Uty1H-pQkc^)o>^qmD>6?n@P1@W6Et`vM6 z7_p=k$aPgo$UCPdJ{*Wp^yOuCcJ?+pbHyXCyMcCL*p3L&Rnmj*BCq|B>^Q($DI?_< zuW-7(OPlMiM=5APbLRvKvA>9D0ZEnt)>CNG1ALc_Y|UG;tB#rk0N06eTHENejKG)? zv{)Y6Z3&VBV9$*y6!3vS;AsUPj+FdZ38fX`=;m1yXzJ(OY>7XoV%iqX!5tJVB1Z9x zPF&PicG+8f$Om`aDoNkQ@lczU`3T)U`#Wf;>}m5nsP;@nEf6x&A<7p!00;a#1i8Wc z(gmAtBY#` zdyYCO_@do#M0Snk06|}Zb(RDuY#?S0&CW|QRCl9fbm}@SQPOe~P|dTGdoC3D5a;?M z$}785J0`h}Xf(|RwX}0KNhZ=&Do8O|x&YP1gv5FIVHU~Z=LF$7fW&3-y`04S8}}?> zmpy_4sSRJE;D!lGF|sa_YfFS%WojwAbaq1{k%*9+^jJI=&ThB|fZrcNX3C^hRo>RQ zK%PyMgiMif<$g7`N-wBxYHV6)(U-*rLj5HaG%1t)M@5)q@e$$l1lV&dEn#yaOM(ln z;j44q8H`|fuzPV7;L|`ZOYE!kk7YKVBI5$dlpQK*apTBkJr=6>)W~DmZ$mr0T6W1{ z;lo2i&$H&8&rb?PUW2t5hIqGK(k)mt-Y{dQE5dw<;(HKA)Jg(NB`=z#Jn_(jK8ECFKy)h=66_wDULk}10!9vW zX1vF5Ej*sZy9O8f2TINMNpZmxzU0?N8r?v7Ika&;PIVaUjCqa7%BDYB_H1f7nOq@! z1NAeF%SgsqLR&?@hqm0u0v57Imhdq~G6nK_Ij<}yn?L~qccV=-3XCx?@>qJCQ~H?1 z*KT4u;`a|CfLf%6xe(9&1LAc`HeaG&P?BU)&|%>(DH~=RK8SJ>`X10cSRODXMo@dEWBQQgTnKoJi@d;%r zQlj5j1%ohWBx}@NHM7Q>2v^DvYhW7_J+APM$T=G$080kqAa7E$0k+HFTqKA(=3iSf zE9z!SjO|3GW}|xp+#((?3j;eJhgo^phF#KrBWSw%k0yU@rp)8bJibd%@!92oRfilby-ZUdsL=p@!zUD-^ zpESNnfCG&Eq*z2N9BPIjwDs?lI+NbAN&@y0=+-nt8^U)Vu(<&d38Q8vN~Y1^do-dZ z6fJvMscm!gJgqW)h}=2;@XmQ_lH3K|qG5lQpiV7II?pvI;K%*9`sjUNgA6YI9)j!e7$P`gr;YN%U;MzvJ{wQ zR?A9n+sgbY44dBIUnI>SBK>$t9A_qx0BcZgcnK-(c6}&gU8ufT)rZk&$Mr9Kxpp!8 z>%zN`n#Iqz9 znLSJ&pracQKY#KYtnS~*ThJ%(cv8+gtwX`EY)00+8po|XhwG}Oj!&bMYsig(0H&V{ zJRMB2IE{ad99$P6EEh4l(i~*cv-@im5+sgNR2Y%UBZ{ba zQ~E41Gn@NNF?E{zY%$lH`;0Mp0L_98GZrVp>Aq6Tv4}dkCO9MTkTYc!d1nOo`jN9a z|MugD%mXk9eLWzW!4}Bm%!C{<>8GYD_+UDP$g!rvYeyMRIyC#GQC^KR@WY zXUz47BcDl&`1int`lRzA_)$!s<29o2BUwE(UG~U{Lexco`B9&CMC-u$k>75d9YJb} zx0Hk5uO+b(Nd*1fAAzJp$;RS#;%sy)^UTyx0PmpYe0(eUT#s-Rg{NH%PB zcUqT=dHU1jE*e9o}UW3^ZlK?QzvN%7S#B4M zaQ!A`;v;|w`L7lNlI!78=#Lufftcn@z95#V@3mWE_+@&e9!`!8DGul8k{ET2I zEm<2iLJQa0wB6i|F15!1w==D>F{$7iFf_T+{@}F!Xr~>)s?m{e8C1safbU+N5UQT9 zC-H>RK9ywC(&g7Sw$7{b=f4@s{G(%&GNN8x_y&4wmm)hp>=H&|^CbNq|lc-r=|83q_ z95}P<>Ogv@{)GBaLXy1i;2-C3SI?yk5<$*b-(2TuV4mUO{;S{9^Yw!v6dlGsS(njj z{8b0-O)MDNPQz@DQL0=^b)L~ilkhKENWrO_q{(4as&$Q?vnD`osSLPflF40GbCvQk zJfVZq+LirkEkK=>A>@X)dj?h+^Qf0Fq&rc@l0MFGC#TE;f>}nVH581%{BbUUgx~won8u4CWWiDJVMD8i@grRfd1AVm~2DjJ*gD;gxcn~e7 z{&A>$2-hf{&lW%`feP|!!G>snMo#4)YWP^gMnjrvDPK9&QMC@MntFg1EQSI0UfOQ0 zHGC5v#dzOxvE&deSOMXlp$kt-URuIxHX!atJopc@D^pOkw$SxZ4+=%ZE-^1$FQbnT4bkXYH0o2 z3}Ofw)Lue~%Ph`J0!+l%lr;0Virx2e!-VXKblRhc6gUy>aJysd=&hFQD3dUipIU4K z603BglJlqs=@qj}2h|T^kL@w`z);&R{F1vgx?>3=#sEPW&%iDbUWyVC_v3(<+#P*Y zQ?BOEOiI9zTbCBfBeq`SDDqSpQVY~NTh~>wGQVP6OkOGrt?&A76WO0ccIt!<*NpSg z;-vn^NC>Ew~WH~wf{Hu&u{sPsfF6!fcs;XWI zgkV3IXU+cBC<=_c+)kBrwfP@}{AWPEo;PX79zOwz3$W`p1fQVnF>&j>{gao3QO7nv z?|_)LdJBY20A46~fTC}a)(f@ti_YsPh?9ypH062Y^;qWhm;$+cx=(+QC_{v6Plllv z+k4D0KM+>?nAat-?tg}P2`cPHPJF{*zTa?|=)b#9royj-qW&-A&3`HQzDHiR@2T=% zBaVu!{XcLq_Iz;jAoDow21S%1rI8Nz0=`7n#%B=0dPL8zrCMb@%Q{t=nsWj z)~&I=*Y)-wfQzoClo@DV>z;G;=3TjgojGy3f*f!M*AuTyiE{c2&(na+!nKjHqAo2- z0k!-|EwKcNmF;bT3qc>=8qlU(s?N^}FAJ(XRaNDU&t8FVOQ}%qXca>#@$8QYfwzcZ zz=3K0q3)YeY0D8w&#d#q6y(%gbKw`c|AH0a; z%0qx7kb*GBkwI7KCX(phRZF5KTBxAxz9yW&{7tbt0`;^#{?ZITgh(c#$UIGs+sX{hv_NS}(hDLkqi>=09(y+JxK&hKGFd;xio@Q@$KzrF7k`(Bt_!@|OtP3+Biv?R-K)(nnPu8B7^^5*lgk@1mRA|s zq&WoxD$JQNwi9TlNKNH9cN}y^z@6G2`f$8tfR}?GLEjo_vX>=>sW32ieP&_3*ojxh z`e5{Mdq=h#X)kelv>1jG^jO9(T(Sq?l@h{NJU~O(hd=0G!mTsV{)Yfj95lnTOEeGl z@13ndoQt+zI=XEzx*fFiC=H@YS@iZE_5 zpxY-zRF{4b_Jf=zeZ=DevziCCA`#21UyChFkIag6pPPLgzkw!7(?gUf#kD*o?PQ3v z(=d3JKT41s1Elkbz4ji1CK@Nwv?V?i&!3gJ)^k^9b=I{lD(Ey)y!G{ivgz9uD5kGzwZ1V__!9C=0!nwJ+l)4u}WA;)=DB9!_bt;L!4+G3A z7ZeDiqxOK=^=OfTpKwaNT^H@SXu(heRdD);P$~qY0|o2oe+cciYvv^JSNu-|O8QK2VaQeD1E-U$Yt4$G=W9>&=CxT#qUC&FgX_ z7q7)D8^srr3-0b+DVekxEvD`xm#=5I6OQF6_>(Dn2*7t=s3ps=mmZhd8!37?>Aj1Z z+w#HfeCar7asq3l6(wQ z3~ppJaV-Kv_dwW*)#RPX^ccrXX(Je9U`lzcWJWQ>--e+ejhJ^`Ytepe3O$irxK4<6I>y0%g$U#zGt39t_LOlG3ZGt z5Vw_Sv~hs@^)cFC`Qsw9%`X}NFJ{rLTzbRQl9Ritxb(ZEOXb%8hp~5XuRPka zwJWJ472Bw!V%xTD+je$RNp@7RZQHh4v2EM-&FSvbeNTVg&v&2wC;axBYtFI8dooZ^r)x66Xl>vUT7!$AFcfBa zect^n=0^P(KE^<3u>xb49LIZMWY8ZK0+9SBX<4!t+P$No0B{qyRDks7hu zkej$Hs5y25H*ZdtK7KqwDr)+ZI$t`9>h%{C6PD3--4%c*kO@*dW63n_zw`ttUG+fY%B@IHCQTR*l7$RMKv7xwXBg2 z3FoO?{lJJHMVu;P@MUva2yrJ~%>pyU*y94FRhSinCJV{3MF=(ZoOuaRHMORw4YA02 z;fe8QhUNLp7(tSfSJL&K0V{die;s?fGfC{DLRpKic~@`YDXbYS;yzh6U@S1-mB}Jf z25j0T2%$vhCD?iwIm&Yc6hYmD-j+81y)+>Ivo!czdb;nRjLP_cW7DO|Y zWt>)(zh2Q)&-xQkhT^M8WoGM{BhUKvoA~48gKt43Z$&a7v=M|*#avL0sfdQ3^`XOT zmukOK;Xs(8ojLJX&yo#BCv(!tu*d@7s;e)&*( zcvn~-Z(aJBZyFo+_pM~}wwXKHSIe2)#@i3;*HSg8_byNNZ+P-r&Y5=*L6tu5J2&nY zwaqqHSl8KeLA{E=$y_76gtCjc`S>2)HGuSV1b5^ql+vAhm;3~+r!Am5Z7f9^7{M}H zGNWC65z;F7MqJatv8BLJ;umE3XhWCDyV1fH8Rc0U?8Z=LkFQ)?5|Dw-8gAd?f={|0 z)G`1y9b(A|XbI=EXCK?A-|p#{dP9EhkL#bg@WtW*%O+?Ty=S4&EMt|>YadD4nw=(x zYMK!=vpV#aox48=9ApTV={xDA#5y^4TL+QuV`|0U*zAdbzNeTf*POHxHiKZawI`Xo zDTkPDW~Bv|6wL`DvX(3p6YW4}(P1gYoBAd*twX&LLg7S_4M72P3h3fkyvg)fqVUQc z^o_*54TYGYwAeKpk8=qbDQQdR2FkkP&81yu?s{u3ew5%kp5wMq1bQL?fTTrgkT*S~ zqjP5i7;-IeGSRLw`A2L+Wfan_kS8(SRk-*Ey2#6;9iYfTem4VyPQ75dR-@qeB+DaB zkqG0k2KE+?46v_St6$YL!zQqkq|72vv>Zo^)on&fcD$Mmb}{z!!88{acGAxztyxn0 zkJ9=dsbF6{B;Er`Kidy>GJ#C3eX`d}uFyz2>nY zrfx+)rl@Kbp^*AHCdy{k_l*1mB}|j}Y)kb@xKi<;Rr$^9`uLn;6QvTPHSGxz7`f|< zP}ZNoj3+4nmF8ah{0KJ&SgT!zKqQ(XR9SlWl|x9C@1{@bBKQZ8j8UV?2b^#df``C0 zLw+Hc9L^3535QhSR`(O0HG>A;4fiY$;gljSY~VnHwPm~`wN=X*gK2~IUpkDN(LZmF zAYDp^LcRv40UdHVd;)yDCfCrFTOhXC*wNTPcqupW2v^t^bomhaEF+;`33|o-vYmBN5{k6@o+gRwaAeM#Hsr7r?tF7q=%)FEx+0INcRv zy6=oY>P=f-j-p4>dxqj$bQdr2yi;ZOpz(9Yy2-KBMO&FXl+m7ivAv*0Tl1QV3Ql^S zWZh?vpnCiaflzRNCx9q<15teFe0J*CLb628#SgZ&53ql=WWk`nx_~b9ZR9!d!60j$@K>0%g2-ZndAucX0tIaq5mQ z-o4I)t?Q-Xkr-}RO1#7@@dB^&%YhJ+#7fGNa($x_KIgf#CErY8%0&I~Ay6pmb%_`A zmFu%3o28H;j^1&ym!nJ(Gc3cQs&*X{rmGT@W-}s2>w%Wm1vO zKYw=TQj)s)S{G-1bH=aail!#I{;C!&!NLHlTd8<2jCsyMP5U$i406MDiBPZ#ZvIDMMx~a z{CuvavYh3#n8wP%w=b+syJa<@qSE*$`~WY!Pi%K3g59xe<~dbSm&(kSMvp&(nBsD~ zmgH0}I5EbERdWzx3xvaaJgVF?t_|s#d5c#$BC&3(#_TR)Q65httGEyuI-x`z6Y)SL zly*J^K)&`K@fSt1*2Cb|=0~dDx=y!#m!M~z=9#Xr#p6$k_Gu;@cqAYlZY2?G81Q6u zIxNIIw#q~#>R=}p<=xGVds`C}_JU?a-2$t z)uehMeg&74km)%(hwl_W0i=Z*oOKDUTGw&9*`v^{1s3hb*+IGH7p1dM0Nmk5?6R2P zW$Gi2QoB``V6QrTo$9wd${&?X0?8STx8YTfncaR5?;8W0u8ZTHp?} zw-RE7Yn5bwf!R?$T*)p!eirTW7<_j1#dMdA*xR_y4C$YXw~T<##E{gb=ci=W6|Vd4 z|Bb)R?q`&Z;UN2)8a&5np~b|M;ygIQ(ObMj>wcCfR>r-Q*fZg*3Mcy+c#_pM?@r`7 z|M}o%Y4&k1Di-#+UsDJNT>TuR`iNB9Jhtd$uUqcA0zU3Wwg29Ik$dCo+v*wb3t4Ng@eCMmgrPth{S~9NJ9(GQTqnK&5&z61Jjd;U$q1xbXhgSaN{8zZ+JHx&Q!keMx_%Gl<&pG;RW{5^Y&#AkuS2&{|8|T=W&uBBQE{(JTgZEQ%_;!MCky`!1Jnm3z^#`2cc+){zTk)U1|xAbTd z76<~>u}{$7c}O^;AUUjIGd&v48gE|V&~E5Bc8xz-u$AXXw+D>2l*RM^>7frzdl@?ETP zI-LyiOY9e5#99f%nBt}z%`+0C(c2ErA&&5h>8@#Pg-^;@&qy|t2&Zd;)g2`21~`W~ zv57vwzy{5CElU}wYTz^WOUR4&`OHC%2)}U6T=9+=yuy^3>3#5#!3~RS*G+ZTWaalC z6~H|!v~ra@bWDWC%B*iyqTF!(1Th7(sRYRksU7BvyB2Z1Y`|qHAN2YnzP2>FBqAVd zX}Wl19!;fR+wxI_N;zSLDpx=y=YgOGV`yT*oNoQ?SR-Td5<5b%u~;r52AW0GPjLs0 zdM(vqb-Qa=U2q@ka2Emm^M@Z!@KZg{r@+%D*w-UM8YgcRQ?;Jsz8djb6_8`yTL{L^ zvG^?!81Nox;vF{p#$)ls`f~_hy_Jn&lJ;nv!4q94II>X1J@hSQy~npupl!# zrYNiqT!`gX$t!%k!5&VkDP9>7^6>I)`$@GV71!++0}X`)&OqhyycwUN zGF>eJ{te?_Z*n(uCF$lby*=hjZ{ts&%v4pL$2|(Gv(E2}?l`51r zt!DL6dGuD9D+^y0#+^@3($iK{bymj5gCcxk=XwwNB}BkAQoZM_Etq1hizf+#gS&vc zVFZN11mq}4*D9aH_~~qVOd0jfKj4TT*MMId;`@Ze>-o^o{Neg}egM34`6*2?F03W)^$*{6n8H!{c%OIS7=WUr=Zx++S@+IH2AX=X?Y3!*R&P&=4gDF}vB|Y? z>y#&v$AvhxnR@AYtz|T83GePk1&T7sEW^ubw0>hmC4nt;kG&tmo$H#3fNpM0otofOj;>qX5>uW(`7UGMWVva^3gj))Q zy&{D5J|$6eqaYYJ#TZ$0e&iYIzCiu!Vd#KE7di$1nu~)V{&&03S7-aBqbmZOWYnGh zN$n_5*0Wnx#^s63D3n%8 z^4f04lgwr24F2Bk*nOaS4;;Gme5l3)v7AYhaxrFzkU;DJzE-2oIc;Q(sB#GaB+o(k zDmNhC4nk#ijf&m(m?N-a2RCq_?G~A^!4MWB7>ij8Iex2iU#eO61;3I8d5|nE6l_Px z*gXNI?Htj&G?}KfIozSgTVz1KX{X`nVepcvz>YV~ATDv%vJPl9z<}Uiy=aKK{soon zt2!4yDckhUkqDxGp1XfIvhzO=x%j-0Lo~5+hl2U6jd0ape(`8)vGTAI<+1OOg;gVg zWsC4)+JqWg%`|hy47ln_RJ&$9*iG(ZL9;VZ4X7sgB{P?Jnr0RcD?5MF;Mr`6B$a!9 zs(kh-#85XLW(^d3PqfMKqTq*KPW{#r(f&>2q68)FTp7>Z{E~7Zp!HFCt)C{RlE2Lp ziG?QS@Yz1^)oCDPNEnh(qYgZub&Cpe!17SPDRYs_RF5A-` zi(0Ueg9w)ZkKdi_yLI}GdkS*fWkNkMf%g=#$YL9iXQnPmh6R5K~1ppcKzNfv4$5WN-S!h zR3$7SL>jwF>(||*m%IU{yf-}c^baZh&~Zi^PU ztpjkrIfrU&#QpIZ;Ss4Xz*YIVi)Z?N!C?Ca7;M6OF^o1O%U5ngxeMe41F}E*U6GKLSUo(Sb)v*rD*TiVP zv_q%G&lX-0P)(?jjVET{&6iK9a}!!S()-uS(SE!N8uxXD62koNh2u+Ym#}sI*KN@P zRUIc36-;kgx7%f!2pWL^RAG==Fvxmjk?xs#Wj_i%8gm@w#^IH~!sQ9l^LiqoAS|=? z8^38BK2fvg?Lj(Gax^3?Gv|0JU|^TPz)SkN2@c^zxBWEFCC6{z#-aO0mCWUv(=NIX zZ9Mox>H@%Wg?bVrVtKCF_Nc_sqCAx{SxL#XAhniqx1NSbg~hDgZ+bmpMAdSL+Nn{Q zx%^uI|DzD7@m*=nPBG*iH{~rm#(oM4!LV z<&Kk#1uNOQ8K_slODYw~h9vNKz##?P_*Ad_G-37vsicbUd&|(@QC;8f*F&JuseX`u zrUF>u42CpimQ~n_gH4npG_!P*=|hEBI!L1iBT{XU|5j6ShLsI+-D3IjAW)bTs!|q3 zj!8#gE%@jbr!07WJ58RV@S6EMwivEEI&(-tm^q28CIpKIG$hP@O)lw9ZY|U2EmLomagLrnzEenOH!_v{ECz4V@4A@`wb}}uuUZQ(-Ck9{Vx*4cjp74hAI!dyHhYrXe;$NP_ z8v)4_|M4gsVaD}?+1No{7nr~>ddgA9XuHWf_T7Dzqq+ydiapfm=D`6&dm+NN5%9oY zGIoaNara@3+0`KpRDC$6mmPW1Alpn9LJ#J;#N>Si*3qX_phj?LM3nC`gtp(YpF8`I z7}4RNnHab~Uz$FdWWFcLkWRfWF-j;pKB+BRO)wWZ6_g-r^iBBIDZGvmTFs?Wslb{+ z1iG|Y+HllmC&?YFN?fe>p}QIxILc?aJ{kl?471G1gv)^YZ>39LULmLIE(4vcJw?*+)oBD4@#Yp2B=v;7DkR+~wA~VEpuv(p!Z(yFRXIA9 z(^kQi-x{Z({$4GMReP5Y3g7@DcF#bitl(%4K;=BJA8#Y`?PST3wOSAWXsEnVN~=(% zKTDNX&r0^2dj5EXaY-~!yD@R+5*I%l1&@#bJ(!ckX$^?{m+FIQHkpsSGfv43ZmdtI zIoEM?LRn2+s50wZoZ5A2Vd6giwPM#~AGZ_cvpeRyS}R;QizWnS3DVC*`YRV9T#OTX zW`tcdTt|l1HDWNl&owo;kIVVzA74`n5ce4fN7iZG4fyoM4s7o{a!I3)7pEN7k^)pX zT<{Xy2f5gw-&o=qQe89(VfF^Yu*tA5Bh`RS&ly@H*@;uBo<*xNE;!)(&rW4UA1lFc zn^_-Cp0-jRFbrsuT6Ba&R}c+8L)D}UJP)`m4G_Hhc{U+Rl_@mjosT^;S?DPPBVK58 z$gc68Hsx2c!b>kp2~WD%JtsrKCg*Jk@6#IAv~@f2PTAugP=SD}nhf)U;hH7wEaHvIBClSLBc)qmSVgJXsHZ~^=FZTw646#Rb~ zmHxwLp|Yv;<+J#pg$k(5$&WV#50#$|1cNN7C@9D#rfFtno>R6?v(#X1avmieJ+rM2 zN8mL#J8J{_(se%Rn^_y+2Jv-Y4*-W8$~QaCz#zP)D45oG9)~zK-8z9z7vojH_jVY4 zWCXBEz=x)7pHow*BU6*91l1vDnZU$@B}>)My|))^8@&V2s_oUAHDg;_7D%sAc)pm* zG#|v|k1nJ!kLJDKX|gIWQ2k($c(5EFe^=_k&~^VTRBKd?3^kRjsF6;Q>Yq(=3}ZGShoW04Oa*j@Kpth;cfR8@=Fb%nz!xDW!NW*u9PPeje^$P{dGjnU^gX*r1jlx z++TrPgf`i@KfCu^EDi#_uIDf$osK|((42}B{t@{z$AvM37}n$-+8Kh8T1uk;d8SH> z_IehYIK(?$(fd0rDz7uB@A6I=Im3AP0u~hkri>mzgXmFo{$mYr_c%r}lS}eho5*=> zE&WnUO90d?x%1q{I$?<%iji52a?Az{>$`<9IPJTbE$2~$sEx|Yt?|LL7F0Nt^IW-0 z$|iKdppv3efFy4SE-7sIt~IjVE*{Avhp(;Z`W2{qu;=gA*s8sTMez2r`nJEq6xx(e zV!5asRg_ez1*%!@Zpm!y(d;0xb znCcU~FUiGRdh5u{9L*Eb2!!p9Dis&5?M}(upwvfAvTGmkvEW2a;M?|e*Z>ltCG;wunAOxeGk}pG~i1yJEYrVKKcc`q|`Z+RHEDSGxQCF{?HP?Nn ze6c{!zJegSJW^rdob$4okyp54Hy>SyF0$LF+iODe3R}(H%-pR^tKSYsjWcE^1Z{#h z>g|Pbm3;%)MYvJWx;|jS`@6FwWwu3#R|x4CB0#$fX4=dfrgCBY zAZUOnBuT1S#DZqhA##Q8;bM?%#gJ*NB}%-&VYmG#eLx0!3uNo8^`ACWUB!KoOgV!m z9lm~pk$ztyp8Kv61$x^eiF^yDOEA?=I$MXqNH_}&i6i!m_i>myj*Zu`!}R9N9aBkk#kvxp#7C!UTRla#zBBb_Z>V~ZDUT1qjF zx{NxU8%NheXj^O+X_)X=UZMws+VBa7M2TZ#_`+fMLe!d^cgZAv8v~-^wKKg`FZ1}vt!n3VIAqI_Sql(^xe!wv}k(b z`seEb6Kr)FgriJNmv7{`#vW+|Px?Ao% z&AuZUxXS*r5`o8{!c-fNp~dUC-$l+;zvd%3<*J z+N9bt7^ON^UfBM%O_g&LLMQ*4Z>z!oTNdAcN&sAy$)nV`eqP%R zU772nHU+vegMRua6qK+M{Te-d+kyh8T%*y{&0^|Fc&ART^T}{0EaZBCDundo8!-NQ z484XIdp)1&(DQbj&1{10{bP5O?Hl+KsM%=`(DK4y{dfHit7BQ@>0bMaV{+NT;=+k{ zGR&LGPWSkq`}^z@beNX5%ESF3=-o)@U-BQT=SrgnsOk#CK;$w#)`F{PL0=c>&p~%Oe!(2+U2^t`6H(7Ji zK*;BPhDdIBPo4-wud9s1~vYWi$y`-kS<==A(5Z?0hMjNtJF1Jp_jJ8 zpf)K6tNd&pGvZqWBy;(U--B{S|001H%|{rvuz|K{3@YW9hIe>QC<0A>#m+E(nBG%$$9L_B+Pqwm!Gz1n5q_!}?; z&e31vU`wOcVZ-Lm;!$F1?JdJZH}awcipO+E>G)H1sDfdjf?xip%-)5Z7G$nkf zK{cEU@=ip;?DjR~*jBLSTHI(K%87|$f593WO&24c$V@Uf+ctK+LEufKp#Xw~E-NZR zywnybe|Gzn@GP%Umn0fem`)BB0u$6o5~vbQElh)? zr-2sLGcXPkQhJ!jufmmG>n)cY*pSllpYAJ6A-}Y@#_0^?Dus}D_oepdM!s`E$aOOadgiRi@d09HZLaL7RIokvO%{6)04tB9b1% z02aFhg_DE-b25d15l&ShAaI0Hsb%~&Qx4goRvq_ z2`a>}^l_{K?CvD6YWsmJfFXhAR?ztODx1EaNmVZ|@Osu@VPF8JxGX`G83)E$lYBr7c>2y}9x>S}GD!6`e`^%OS z%Q#gN41>xl*X=1iN%Jb>btb2&HcSgNiu-ELw=|)E%bwJWk z+CbU3++17MX1%PqX@6nd^&_~vdzj&1f|U^XbhGGoo<0-x(a$agn1BPv&e3Rd47n7? zJk=sK%A|=uZkg}NV_m0ki6f%TNMkhc#>&S_3~TQiw+MYI6(68tuJ9xx?9k}y{F zTt_oJv)$l&p`hu$R)WmSy)8FQWSybk%^q{}rl`XO<=?zTXGTZ6gDfyO zfDSe_JNK)Uu1E?yTVzO74>Dc< zOlI>Oj4cs~u4NrzKQmK!*Ul`r%;$}-__nG~5Ottfpn;x;OdHj@fj`1oVISTq8p~$o zsH>K%=jtgl#Y6M?Xs6nt7S2P+9VN|m-sATBi)g_iU{li&JAC`rNMJVEP~G#}=S2~d zJ?5CsG*Snle+&=Re(B)z!_|q~@uJd+ye}nGay9i)vcc4Enr$ZBL^6H5AbZ|JIEeG| zetTeg1|+ju!S&Cm6)3Nwc)NQl!Cx}kN$bD*6j<3}EavfU(V3|kaix7Ey1}{Cx=m7D z^jOXJj5VB}7QNdBJ1%9%3nWXaPb0NlxN~lb%~e2;Ft#0yA+v>O@Qi=nAz#PV@{F*o z>^=)(*B~J$#hU{}^r+0+1z_!JB&P+*`>BDMVA<@k$zP5mT(M?Ci};Z-3{ml@I#vVy z)1Ra5MkxT%7{i$5;Cmz`)M*}IPR4 zzHXb_Qt*L30IxXw^Iyy7A6HUq^smqE{#8DC|I6i`1aAq3@jrOn|IxUxFfjhJZ&6;A zMNvT2DQZedED7HNLJj0~vRc4J-=_RE?z1!st4azZw^^ zryZW@euOKOH_Tnm+1w{{=h#dQt1PbvlXIr`huvGXZ|-Bz>6I@)tL5J+k3FU9e=9W_ z6I?P9G#eFl^r}1>zTnJAuda=%>sM3{>b$>aUDxAU+6(w0Q9mE<<|HdFv=Umwa|x)U z*TR!ptXQah!#zyE^#DuBY`lJQC8wA0DL3cg3Z zbAN8aeKbDg=EGrt{h^VEb7WZD9meo9GtsOhQ`O(OP=fW7`18GoN}$r;PwUeN8Rha# zSIewThlwA~Omzs-e=@S%WwT9eJl27Vp%-owAkR38^J~?e3N$Qwy0gc!?uUTDl4fr~ zx>%Wu6OnWTk)IYmYRmSCuO2U{I_U}(+Drs?$wk3K77L63Pfs~i7wpv)`-ZzfE{h)$C(H&ly2&6bW%~6 z_G)k3-fAQ8%GS{fW>Z%7JfyGw+^5GS)H;-#*ly$M0a29K;4!WH9duE++5wponjGoe zn#&MD=oi12I72u;-$O%Rh!r(!PluYFgZ>i_Jg|S7aI+8DjFkALfgv^J%^!afm2hS% zi9%S3LdUN0<@Nr;v`i%!3yCP#jmHuVmB^I5!p{;Y9ARF+Oc-{|u;Fd)i@S`sJ zMK`0w_&AAJGPV>{C+x7}fXdZ}ozvv$(Z$~~;C?K@Q|aB?;>J!eMCw;)==nX5TAve> zkd7Lq40m373UK!yHt~O2K@m)rm$AQ&Sa;GjJvhn#aIpS!+3MeGYQ~qG@f9}lLAz{h z07VXMDcqxIBgCIuqX{AfL(YQO4V@cYVH<0st>LN zdn7SB<}sXJSHHKUJJSGDuS0aqLBeL1E>1EuDXTqq-d>k42nqYKc~^g~XP;rhWY}3OT$$4TBwsevBBu*y+WJ#hPBD!92)^y&qu_c&1NY7d9ZU)boeJ)1`$xVe zZr^r7xkf6xCs)Lhgoqz2Di_TL+tnz_2N|EP?_ze!PaPF*3R^zN)%KZ9CJOH_cauJ~ zPNdD+^>;xF5Ea^`R&rh8Bx6TlG6%T-iUQpW+~NYwaN}=-08nuK!Z>NU zthP9&(9Yu}${o-j_;%stFN4*mCuOrFU4>#$a6F1_?@_xWHY>Q!$^@#%KHqlvU)i+a|*Y^Pe9fU>%v1G$wFv(v#1? z$hOj4y=)5!J?7GG&}~2}r3gbX6E?(EDnC_DXr!67LLF}>eJwq5e`h2cv#S?-Xc93E zcphkm+=zshqhkd@m*}+<=&NN}X2&rnmB#`jrC>*i0qo)OZh4=;$ryJX7j8&2(Js7k z<^~?bA0ED^z>_^R0 z@fUwCem9DPgiBB9#l*W`cbc(DP+W$hYtH$nT0tR9y6y6>L1kHSv1`_in2weS%chXp zW7X+`NGI&tzdT4<3x;+Xl0yEWZX9iC^Q!@_O8j{VK<>JV>x*+CoBbF+5#+cK*_BlGr1q*$=>n;9@Z@D z2!3BVE{A&wC&zl~td3G8)dcASSrdB+2GyzgN+TQ_`!GQ%D~h(JQK88eIIGn5Ci-M- z69LU1SE5|c&Y^kmfR^v|qzg4bq8i`C=S-F}ouLms`z_vg7eLmeX~0u^@0$BYwc0g^ z+V2r}_F#B|YEFmXVm~uil_{kj>|(jM@b6aaH%4d-$WKlniuJfk0*ZT!n!}&|hoVnE z*ZC*kI6atfj?ykQhOUP<7(W`uVkj-!{K*% zThX&eVr&9@)Jj`Avv^a-dBj`6b4D?b^%0n%#7=2{0Bck=(I)A8ZTM8_SMxp(?vbWE zkw&;E{k8(QSkkra@byN}v)lzRzbUS?s3msv^6AFTAjb4r^_etjQjFATHDDbIX55IT z^D4JjjP1zpzp(`(cSxQ92^PPPK-Atcki=_>c@wmQxbULuiWv~Z28%3I-{EL3wctXWRz70#&wOCcY!7!^Ya)+iU`{hr>;v#@WBri(kmK-dzKi#BmG2vF&k(2_ zr!9kyLwSOTJBbc+K}w_Kvt{d6{Ai?(Oq**=Bh{=*(EkEnra^+DA~v2 zti}+nY}-V_Os;buB(!t+E?%p#E(3UACvBELZIpJm>d)_VcP3*IBZb0yYP zWiUxHF+AV@+V^O!Qh}QUAmVm;Go_I6N*u2O(? z6tt)jvPi#JR6j-CFnti(Y*jY?ES8Pfo(34RO!=WYNj3=shBAB$;W33H0{IHg$yUpp z&_xWRi|J6CNVg~*242S%W3zsxe3R=NbS;j$*)8B3#FlABErl*)wM4TpGV?H)2vfV0 zfXfvw2L9sM;Av3M&5cn&qZ8Mww!5!6A9iTsSyNw6tdki+FugNZl>u?8j2e}**$uQk zvk?2{57COPs;Mug;=w_Iu_z@?5dXK>XtO_tyoq}P{IUSqpYx;Pk8!Aw%8R}q6Xm@nR&v?j!l2*LZm(ikwAW~%Q~^Gp5N$w`uD<;jcyzDmWpQdMq8+Xc>ru82v@@- zMIRbuYDqc$cm=x#McDM7W%6A1B23_=QnL|m|XmqN-HRL@1e{s4f{DF8E!!II_( zQ(RUX9Ccfjq)z_;8#NvwMku`$maO?nX%15|*R-34pOJix^cX@|s*DTB8tM+-&u(}W zS?NY&(B$CTDobp0``_3d-~h!U3Ik~0(b~(6_q-ayiqVQFwUULAZ;5V+UglKVOGma? z7%MmWnj>D7w}(p6%I03=eSyZYx6pg9043kIZnL5dFPyWZAQC6IMYOgixb{dk)HXK? zsx;PYVkBuLdtD71m3?8FsN0U}Mo~7nUpkZBlku$vZ|RD(a>=lC^|?WRL;MP=j0$+@ zx*`>zk5k4Mpd&cLa5*8Bnz;>BO~=~@o+GV?6XAT{6Vw+dk{8@(X@DgyUFOEtq<}fb zGL`$vhy!P*jP0@rHWQy1pY&FP?C+pm+tfaI>25nc2i$`kuPLt5>kb}gGe-O@sXyE9 zi;a!VZua0Nctz!R`BF6pe0_U3Uu?5?X@91Lk*G0TP0n@W;Yz}7^lU3nQf4-ff8F{0 zn;D2!0SJGP5DfyJw}Cq{-j7zN!~#L$PZk$gg>6Xv457T~gLco%^Y$Tj+vM35cDoYD ziiw2yQ;E6wdzJ{1&&G1s=^p43_dkTn*d4TjTxJoV|IR!HJWO>5GxG=^Z4)b?t~lUV z_^^)WQO)ZO9qG|GRz<=F>B5&i$x=PRfaxp=cYTF1e<5P1MuGgGE2-H9M{ zxk_QmdkU3z)XBN)Gd%9R!l37l>>`Z0?<`E8YsOdK=Jb+9Om!5ua!n1Gt3A;L*R4CV zI5HI{XWSV0nnDkgS1?Zg4xvBiaW5)_CtyDqnCKPi1l>!_uCsczw-3v#xXo5x;BStD zyayCWjGx$l*W)NDrAeBE8?Qi_->j==C>vsqIn ziHN{~!xB1j!bKE(`+@MD^y$lSM1Wwx1q8~>;NSE%_Y8gpgKYHg;zn(w4+6lYw;lnJ zMn8d57QP4y$=~C}(3~I-Qxi{8To|CeCq#r>NQ_37v&mZ}m7{WWtSm`*L zv|Yi z2}SK>`CAfe696$d2+Hwh+25#E!%Qr5cr7hGe5GFVCqu6%&#I%4Hhc(Y`21YwW9HKg zNj^VEV80@*ulCf_p&=e+(g#h`dNjDgv44PQ19&Nm8I`5^CNMWxKl{9NQE208N98%g zt?P=-RqMt{C2E#kfDq_t*Gdq430Y&WIUHEnfj64|ingW!F{dC0@>%>)Y@=Cv>F@f< zjZNDj1au0P#&R=Yb|?Z=TAT4=h344c>iu~5FwIhl*8bl{lN)GN#g|lchUu5Xm0H+v z>kB>zR-h>E3r~Xg_>Yz@V5aT%*}O5xkg1FdL0^@-&k!v-fO2g%Gg5bMeM3ajo(07L zKk8pvR($*s%TUK7%EY@8m9)Pco3Nv$XyuS59w2nu>bM3cl-6OAS^L%d4$I(Ueat6d zHPf&n3ny@6=u1iUO)Z*FaJTnb?CT!+Pzr zzMBP(8E1m-^ZWJp_Ul21!HHnWQRN`3AsC>K?lD3QuUQ?i0CpjT(}99b0=TU9PJI?~;(s;aeS`3b+KNrfX=k4sArE+P1 z{74w7$^vOKTZ{}wd6NAOux-5ipeZk^K&zAzvNcIsQM%x>stwmjHb_O~><=Y{C1vVq-7mD)lRBb& z9b(Q!`vEUNI1c6*2`Vm7m^^cXsjPs+Kn}~j$#Ah3Q)NnI-kI!9W|1X;!csV#F5uY7-`1N!+K*E%TT zu2xK9m6D?+ka=633$#6bXtx^%v7{xPl_+I*NJ1{CXSo>j&Ll-CJso`0)4@k~QcqnB zVpaA8N$+q=rg*%UR`laJ2*1#}%$ZH?=s==vE)Ye0o-c5)h5<3 zAcN6F6Vz+(CvhQS>l9?CE4BT+4{7ByVmn9MK;3xf`k{tI%jdi*RZe8G0&3tC3{`4ltD8>jC?(vElyZ7c574n$I z0|5!bKC{eSaQJ3UMQ*6LU9;PS>Q>)EE`kVR&g@cC7GRPIYl?zz1i zvaJQXM170)pJ{1+o;OF#&aTMoJEPDkY1)vpd;Az)*RE8Ywn|@|3UO;}02+P8ujq(x zqaE1olrR@!Rp>+1d5Z*jha3bXlKhewiHG)pf$xh=uHk2aJ5GF^-Z*tp(poJRYkwT4 zm1kShxQyMxj@&+gA0hLUhd#I}Mc8r!g`Cy}5`ViJyjqD+LJ+zMz7Cf(_u>Nm{jy+d zgTg*02HGwMiXYt_bk-F0WDs@3;PM*KbW1_)DO$m|nRDloHAgRzaT}~@ZW2|tW@ETm z{~|2LoyuRd$jhLu|JWaGa@!xB_WE=EG?NioxMO+;H;G$6r|ZAnhYAee-=MzkLO1aL zG0gRA_EWOAws4lQ0Q}QRo)PzN%5~tUj;7?Pyd+1lj}Jsc1|d;`Kdvyjyr5DrRK6iL zU7%}Gq%@bYDZ!k0`xaXJ1DrIm0(|OGhZ=8y?lb&gLr{(2ys%7MO2eb>sn+L*+5K)) z(r!J{J zBjy($X5U`df?2rZb*6>26}at-!qC)R9Q&2}x+<1uV#P|jZvoZ`SwpR<90MTlSUoX^ z7JF3EoSz<&ZbG6si0>N$Hbswjz6LS*?I&9*kRWux-8Y9M6-g6Sr@;A_yCAb&ZF7g< zVVFr;nu$u%l%II?N)uy%6%3}JncExtB;pjsNa+i@+eK`mJrbUPHb2=t?JeHwqhY<{ z8})nr_@jYM&fNX;XwBtw(SRF`|G3_84B1?=?khiNT zO_AbMfwqMf#hx$0h+QNKRxmW+?y#oX_e)Q36D{`FSoQbJhz2VORo{P;2bis zJTKsb{xy)Upe*O`9rP}}Kn2?6?z`X3FXEO%IKkKY8~w=4Ux&n^_l)~P402_zoO#yF zzhK!Fm=sd_!j)4p zR*?C$FVjx(Qsc5r8(1I+J-ulS%Zzr!TdxrtIuq?{17`S+67+7Qk;|jJkA`dnTMmdL zA&GBs@jP(u{RyeV(W3ic1ZjD%;kM&$^)UVqWA7LxS(mK~S5~6ZwpnT0wkmDgHX?1? zHY;sZ+OBk^Z5ucGboV*k@9lHHFUHtEV~-sp)}CvwM{`v_PN72jXKoBh)a_zE=b}Qa zQd2hIh0TBJ`47>a&L0G$#j|}OmnkN#N;?e3=%vvBwC0|p8e$nP-?HvUFFdsKQMq2Z z(b*bUc;h|t_Ys=2l2@O5&|q+5%y=G+AC4w`oAyhl{QbWzS?m~mC#eEkywMfikUVI% z@hZm{20zA=4D-XFO!uy!6G;~NN)xg6E4n!KTCLS8T}|u_)cA1W=xTHPGGW!_e%*E= z0&XDb`iGR;cfh39P0p+LzD0>a)(o(2w*H#XD@)FBqWsAL8|4@DXhHS)<=_9|Cr?=& z8enTE2ozaL{jaSda9oy!y|ss$g|oS^fuo}b6D!+4urn3l_*@lKUm%xT6xpd+ygH|8 zktnNg^^>ren1;UHhESiX=}f&{viYZTqO2Q62~ayfRLA^&@$EB+zc1 zv^4kiNwnHr{AxE`yKLlPV=)Yu9kSMW8l>fva>;(XG@SUizzWs`1q3y3yQT6~Ut|aW zUrWLGKo<|K|HJR-gt~4*!YB>_|EamYK5yeBh@D7{4?92;Bcpca$E}xtGhw5U7NIG& za+c?BUm=Znf2^w#CAU5c?75P74V17_W-I8IYg1^bER~t)9Jzt3W&t<-P_ng}gxd2Z zTD4!CutlwpF#^Qvj$i!;`#u$hD2HGmNoN`)B}PBczPrs~DILaCg*Kyb)v%qusxnLL z@R}-JV^0Ehg#Aey7@11)w|rnr?XlEQ?}#XwC8>{iwadRIekRy~HFhdduYDA#K=JmZ zi^%0wn)24)o0^N`hS5iwpFoS{7c&G{LDTIdR2l2)`zhe)>gP(8k=UG+;CuLloz~~< zS`$XDpuCZIut}!Mp1@$&IC&~T5Vym!1ZOhM41Wbg7>_UygWZ?WZ7>modQ4rAixsOK&40kHtgjG;vU> z*)gaV3<`}oO@S9zY95bTk5rGJPy^rKfKadRt0tAYYaH{(1tIB2?e5itcC$|nX@4h; z5?ca<9ej`hz>3PPVr*cmJzGuNxWS|*JX9hs0+d=1);xx(IvVfLIwSULG`dOdQy5hu zhMZ>|Y_y3h!Him*PS$>9#=I^V9_4L#2+1q(gYHXQ?yO(Ki&{N zhCg7M^t8veEa>`UlpkU$H@vz(rj8tgCk;PY!hFKc@>^~@L25qnGZ~Ef3QazI=Xzl1N{T#0$fJ)PAS>i3$K7If333G7 zaWXj)wT@J@iTDz<#6;Q?RczR(`h*jT2GqojP_Zo9XMq}sDifC#2FS$C*gQAyP14NJ zi%nOmA1I;kuPb2qn#bdkJVh=fWQ<>I-)eh1Yw`m8=yT!oPOq60#>wOqO9-du!7dw2 zad3l}1S=YC>dn^PmU*}Y?a#ut)GGl-=bcFjDWvY{%Fm*C_xOuiU_HA~-ADPAkIOZ> zoo^vCMP$z-5HSgb&($QEFAEt8p`LWUv{2$}b4I+^e(=K66Fc&yB`1t+FPLJz$id|8 z6)ha_O1@}t&H8e4E$4RsUVyYyL&E}rsx2cRVlVPH*+FV42pHaf;6?utYr)9G@x$8X zAJBbqqK!OIwKe?d=8RK`h6qOR1&N>~AGH|@6E=Xt6e8IV8P4vg`IO?=GqsuICfhqd z+#&qC?-%~0>-9BgCjq7+S+7stM_^>divAneaOH zGEEdJp_bTrTclQZOX#t6(+`~vxa;bSY9o)=*E8m?67^x_<;K;ip8d^|1BF$Qbznh1 z>&e}!c_WFgM_kYK{fTlms7%@5NaGgr^D_luT&;5r9PX_n)5sI1J%WjvRg5J{BAtWN zJ&j9r$7l~rG1UQ#bMv!lkwZNFjxSX%#%x$QxjBxF*|!GwsmAxI<-z&XffqNizfQ$| z*nt5}k1`5V;Htf)uu%p4!I(Agtov}<2(r5ix%Fk2^KzxkW;%scRubeVHX+HMy?71k zpzIFP#PhI!V(csFv76f0W95$KmZ&)2s;vNsx;B3tsS5zj2jRROeY`?uj6@yov7SFG zf8OF5$oI+iC2?>`Wvs&le)J((-&Wp zI!}4PYG5fh%oLt;4QuPnMx#-H3*g?5M$tyW(O{5>HoN={+EdAAE4Yn z$4dVTESG3yhb)L1vI&xsss3}P+H%!%zd*;fnl0^nk?tHEHmDTKdt+~sZNpjIpWtNz zlLEZ~^Bv$IdaP+02~-Oq$jq~gbml`J(?i|{et^#_NS+@+C&aApqKwxdr}^4T*0PNxNcHK{O%lmld}9$M0O!II%DJzy12b^?FQbT)~|vEZ)s8Mf`0_@ z4c3ZTZG~(08<+4^xB=D$eqaLE!dx_F0Hi3AKpN2&J`Q|;;~&y@a#-++$7JawZVkx62yW^SW< zBi9^Q)n1D{>@qR3j)Yq-Ot9ZSaXfA3&0}x)Jijro5E186-WY`DD9~s62hiXvID06I zK0Dz9$igtEP)GOEYh{Nh zyGwDBI)G7}--+%S7*p4d|F+M6jfil7GGCWQM>I7_UeeEu^!j~gt}&i@0G0otB5CvA zmo0dLDpC@#0yln1SqJ~WXj34L{P%n^pr=yF&c*Scz@SbfBYc1Ws>mT|y`{-EQR6nb z`xkB$Diq#dU-`klc9;qls5M-D!5?ciKSWI&oyc5zy#|Xj6kOI)yB=(QR1~XeG`BtN zJnVDLX65BpdOi#C@^T42Q{)4NIj_<&_dl;uAR7EWnk8rojrAZI%tJ(81eh}^1dWW? z5C&!1h^c>+2>+3ifkZSw77fC*luGkLV0isYj|&Sr)~^9P#c+Q8kDvhXm;Lt)Bg4P9 zwZ-z|a(x1*yz`0`VPDY{&c^U!2e8dqs0@q@g@o44?SEN9qf}8=TlnX}7`=f5`lG3l zF?{_#w_;lvHey6{PH8T(ybd;;raFCjdcKqyByJNzep^)8(s>*lz_thcqMddjuEc;1 z^(WBC=O@I4riLCekYBJ`Y`fxFYkqvh#XIAF)eaqtd!AkE-b0y+vu^F?wq!Cdwyj*3 zB!S`$21Cb0E`(t>G;jRGe~D8jCVGLDY7t$=m`4iKq-vQ{7yQmPR)JvWQFhtJJ+lx! z*}F4Zm`6`xw{|}`>V5r=*a0sM^%iD6$-e+sQ^F8 zSfF+$r~ZwFp1b$T^*hO!dgjLb0~YSvX6IWZtlWmbg?r;VR)tJsX$`5HQP%!8(|CB?a0?@-r zfaecL;Q2%4Kh{d%-y>q@>>=S|V{h(g;_=_fnZkB1wtowv{^zl?TKVt3FI!)sb^!qa z$}(E9AUIMqDOw>d9Kty0B39b$I0s`WY4wg#Q#P3SiKo4%y+Zo#$6|WEWi05Z`D22u z+}*-mbwE!;_}0QVm!b4^-op*Ai|6iJYW~lUdFe0n?qzXq>r(9(%ab~{3_6T5BsN;y z(atO7s@a+(=ZjPeI?R9U;n(XqnX`2rI}c6-o4PMECWU_gJg=I)LeCD&F#Ao#Jg-0z z{QP;sqIP@HK9%2O)vf@BhWzQ5@G{52g31LmJ`Rx9Lv_>|ho-_XmhrB1&v$JdgPyJD zVblp82~cV1%!J;)RqnWhRNAZ_ZGvco0|z`H-ya7%P%$X z1fO4@4DZP>u)-8+S??-Gq}VUOEVvXq^%+@f!G?ZZ{5ag3ns*7rWpO56l{|A}9nf4g zfdgP@u6kiNrabUXS{)coBe0cjgGRw@Lmdn$9wpYmE=dq+zSyHhHSJ=NN7m56vp zM&SUACgesW$nRKBn(tqVIf&{xGzJnl3}P+%V%QG%Ap7sC^i@U_I-;ZEUXv(oCG;3b zw%fNo*TJOgPc@CPc?u6~upj&z#|j#xXGNcG3SA0)H<#<$E;Sk~O{sa$6T4YUtpUrK zAy%W^KA6-`*@;coD5;~214xj&#Kc>;JNRxO&h~XW-n@$`7^{l6CTYz&M+cA07u~{$ zOj3m}P@akOB=QW19!OeCLjmk!JG}BU)da$TCs_erpZjr6HMt=>Oog6=JI+zj?}p)s z|NL5$f$)F8=H9byZj$mC9bBYorQxYYsq+TYytE4?9ii1>@1o7KQVt|(W9i*XV zp|zrxuDtR1D)&P*J!#kllzQUW7BX~&UC`1e`?R%zD+J%VpmW0auO4F^m`46);mrd- z@t@rI3^SJqYpw`%R|!c;<`3@M^sEWX#q|av1PxN@LxLo`G0_*i8HE^A_y>opKKmH? zp08m$*QULYpsX1e3J@xq)&Wg|!c1QP<%xH@Q8`h=vGF>&uyVOOQz3l6sn(P$t(B_l zWko55?nYZV(Uvu2Oz7j`kj@EK@;ISw zoq|<|N=O;ZKN5WWi(ZJ<*I5C$<$VEmYyb5j22!bCWJQ$)X(i>v=xq#KO>F7y9L?wq z>@fd!i&O+F2z0=I_{KlJNec|ur!}&3H2Jq%K$x4z3+_74 z_5cf^2Mo}`0(_SL?}zxmZfS34L+5T|T?|lFP}*ff^qsC<_I$BtCv)ZC%BBR{EW&L& zfQAZmD(0bT-YIJ$Q%jJXll$~?BjZj(q+s3;9!cqbcYR!w$M;=N0_U-}2}(Hp<-h^S zH`KMw{_czLrAB0|cpFO{+;z}ExeoP{%+g{>#tE}h({y4-!JS=d=n^DVJ1_w^DFmQs zAxBZ3pc*M^bFHzBl^)H zYS;&~06k^f_kanc>C6_?)XO>HLv>NLRH0F~R`}p4MCwo>Q`b3IH2Zt1&yI|E_gDZ< zVDL)=I`(+S^4H2Zg)#Jz27N2b9IH4h9wv3Gs>X@fUY2a~G}};on8msN#ts0^Ph%M& z1}Xgnu&a5BbW(9JNA~njo>#8Wj@k2bbFN(N?+hKmkt=ue#(e3r4y+-wclf^PGW>WT z!;S{H-Q_GMek|b031&65)lr(zq{y0?5v7KdiZZeXtmB+}&}j6MBxp;;3=4{ZV9WuO zB9vA02_89W%cqYHd{ouGhvk6aXrxjI7~Oj6$8&&2tzByhdJ#Ucux8xT{xjx%fR`sEM)94!k!eY)s*1O)c_p4}DQx(J0~2ZNH*P zr}+Rr_p-s=9u}pAdOm7Vv`();N=u-0Vb z(Y(LxcJ=CJhjP1kF3TC!0O#S`c?Y8aiIb-PiK z85yKd2;CLQTY9FckY)xrU@Ow*v_xpybjl~*Fv1+rAcfN6x@fJWi)YszxNpeQ&;gut zK@p~5@|GJ zFn=sEz@$oyoUtAc?(35+Pn~8(GsMncniwC3?=5hnw9y0QS-VTcw#rJMzugMO{6ryd(cy2Um-7)98*m8)eL zvV%-_ouEw!H;?z-6FN^7am2%(4O67x6>zgP=c+gFw}0SQK+nuSpmQ}Vd*yvBU%7g6uTjZ*sLW`>uey1olE%Vx z9p;EcMEM#*kRnQk%Il=$1_lk87q-NLw3b(kik)9}e@Lf?Uw#DUnw!gzego|f zUsms7#m0&4j)q3kgBKRwl$ED9UO4T0S6AKMlPIp7K~SH!7j$=~Lij^DM$Xqd8Xp!n&6ldQJeM6h_QGUCppHX`T!b!Ms`wA;qNG+Zz?tJmN=R z_#2yI()=Fc4U3j^#zUfs7C0bgD5a^ns=)-%MH|?>_mRA>7u=8#wXe56m+tZ>PST{X zs9rLm2HoNcewEWIy0qGu2iZt}oZ1tcRogXYIJ&5?PT+OqM{Tk-(V2+jM0l+g1!jbG zGxqS@;*BvA(-2B=nI|?}P~BLdY9p5UFDd`|nqT6T{ozUXP^2|CIYT*OO_jh+G;a}r z3%20#%|-a z7kvL^U^~5ZEUu@aVfJQztarB}e=)`XeA@!3?ODCAJlxFe zXprgod>JHY?rA>N=rS9<+~~MS5l5(x%)qR5Ce68s7!V8E%0zxg1&yRpj>(B zOdr&;RZ^8QELCxZM8f|vQB}m>Zr7H%IToE7P7A~>ebc3BF6Hn-iVw8jAw1qULQ`wH zp7_l{aIW1M0<*M(sWt&9M59;J76Lf#Sx*dq6|m6T%_>1mS%cI&I58a46f~d84zkeY z2&bB_l{d^kc9Sbuz3U)XFnYNqS1@~l`HsZ$E}E$BEfV}AFCCT?k*HA@q9vB-%*>qz z!o|-X!sAU$nP`l@K^A(aNqdl_)c^Mm6NJ3d>i&Xb@}hvO+A1=@Qm$A>khZ~%vdOzx zN3vSLV!R9uNfaw(?c&|9nG}*1c?ZpOUm0fl{+}@EI`Dhr8tR{DldX~-XVZCU53Rv==!ix!-s{WimrZqS zX~}IM!E;DI2=Dy>eQ6j!5VJvoXV89p>0*-h(@p0C-TI1F;t*oPJ@4=hWMee8vO}HB z4dsnjX0Qe8G-*7xWOKD zJoRowrHf_@_r%!bbpRpFlyV^Z0F{jnCAI6>DB6@gJB1-i+Lfa$k$pD-4ZebubT@$y z9$i|WL!BlNU$Fngpsu%u1JjNJz1bow`1@B~(0`)N;qM!@~MlXF(rW z@rD45%(M(Wnlx~I=`ZV#U4e{^Bfu9$z&AqSn_}`oUb{kdooSelU$zhzGBY7nrbgdl zgO#S{!o5N3bHnZ)4VV@ook%P;g~p1XWxJ)c<_yUMQ1PeFZq95(PVCuDm(}+jC$3v( zXIjYj(>^Vlt#sX6yXx&Tdn^O5+#2KJCuin>3YOXxc9DcsOE|K^~&mTsqVZ~LWFf+xVnA4 z(p`^s-`9M+H*BU7v9GvM5e_NwT`BP&DDc@(5iqFmAEXpyx2NV)L!sV{HqgM+$NLRF zf9&%&JR$0aKJYE}z)W+)1_#}_rhK_l3pus}WIc0hZIOE16Tlv2c4B@=;sYYRJ)wU; zVLi@SxDEES!Z@n+_0cpefZx2 zR7A>m$r94+yCe6T12eR5=(jo+wC}c4Y0ilqT^Msnde8+wL|?HeOTsS4u3+QQuj`$+ zK@^2kf?ZrxsrsGx&WIW=_6L%35$vt? zb^l?*Q^dws#l}~_#+S14Bx1UYWZQX98+O7Z88O`5MlTF*7E?*(`hoE8Ah*Dic-yVy*YQ>8G0Ws2LB1&K&Q_gAHgltcW5b04SSdfIuHX3&NMR%~5nhW7(_pG`JUyXo2$rv}qm z+Y7Eq{RV@!iwv|Nrv@mB;K9!brJD?Hlg%}^ljdB%68mkBz4F*f%H?CP4C zt|ON0tLDCE8OZ{fB|~Ts9l(exYNJeZ!7lDgLRh|D{%0;DR1un|jwjmqpN7Jxf*6o2 z`5kars-myl>y780`B-Dt+d{}Xts{X~B;-HTY2QEL=@4o4*@Ev@40mu* z|30P1nPhf+frKl;<}xE@quEVITz<_f`G@Rl;tz4Lh-0CYcSmyocyQ5Wu&R0L8G>-I zdx?5nhErNXhHS`Bgk!u#TES`boazI#gHMxmul(H%9It4bHN6JQ{6hj#hRT_xpRVU` zg68zE-7dY)CKaMPCu#lBq#M1m*`8VP7G32G5(_C9%VueJ#ud+&e4b5VT8g-bx$rqg zxMo>l`h@0fQ!CN{5K809uL;8uepRl^l0CWgM)y!4N4Vty3_q-(&rL>!2L6qIeCULN>H0~K&77{gn+;>iOn_4 z;rwC$ZcFWmJw~7BMMg>Q^FDKL;R?S;`Ha<~sB^q>M zE)s9o_`WPcfGm+!7BaI$)F)?W;Q;qQH(`cIaum7oJ=pH?0F-V+D(tm|(J|ize>8=Y zIF4-W^#HLICl+1_yD99rlV_ph-K0gws&;Bz9}{`PFs!OQOl50m$8=-OfkjL`JRs=FMW;^na^RthmP+MuBNYN9RO9E z9Y9A0!bub}(7L_R^_VsNoa6QVZ6 zlgT8VT1V^C@{-^6)Gu>FmVX>qGpjXsdl%ORGfXqEs*kHQs@shgDy3lzApL&>DG9sZ zmEdb!EDz4yusyv`{6XpOirfoefc8inoYP#41_X96k;UmEch#%Fk?WOxB_v3-J;p!i zkk!~O{cS{uSyYE5ZeVXp^V~p7x+tOm|NA*kiH0+a_#xv(d%@rD!%l# zCRl@eu5Fg4FrjKOvg2B=BE!UjGbioOH~L!}&XDv~+uyD(+=VK*ciplfPd;^YP0D>(Na2WNZdrdUVqNR}E3!8+;8C0d?7LN;X-Zb-Fk~;^R zVIFXEH`uT&I3?Ey;>V=iIw^9Cbwt_5JY3}qoOruGa%GLl@Wd^uB-?qwZO60(B?I6l zT{*5(_p98Zxi~cctjtcNbW&I?;>*(Ss^QyNM8B@qjC$y8l%3-F06LTXJ5^>U@Fv;z z*0rKg|9B-b%HX9!V(FuRF$N$mN3;&7Bj|X$YpgrOnxRcUw6l$LDcoJ_?45Z%5oI3N zdj|LqRL-El2J1dpmotYO!B#Spw?3ijSOz?_S#z!*azkud4Q#`VZ*mh3m(GD2f!=1( zGE5O0(HO*W=@@hF0@S}>L%X&bMd=n8M<%Wx=6GRTf?SvHUIF`Xl3hkZnwf*iRRz&Vo4B2G2*20HY#=1=e^Oorz<+o zNr`eF2fkuP0su$(xb-#w!Wi_eSnh^zsxo|enbFp6^660SdbBy?EQxl7QmbC6**MHp zF&k+k1r7a%5K7*aY62Htb|b}Rb6abr9ief5AW1( zBq1p8gBOI4zbM%wd<2<9fV9L07%(hC{68|I|4Bvi4{Ryn)E1~98UAeeIWF4RRDDl( zKc#s7wK^4SUP3dom1xKhS(cxcVa_H6uf79OQpOu)vsa`?VqpO2>xwc%7fPB7vV816 zOLv<3WOtfM&+X}c|MEiskdsf^nKFwc*E8xRHolXxz3j4S9_Fgm+P&RIThD9zRB+1r z^bWV1To!hcql5IUZBU4`MY%;tE6IAwijA9jFEbvYQ+0d4UVF2(#Gqql!TUN2Z^!6R1hyLzzwB^^nz_$`-3fy&diw^98cp|m+Udcd@k%@ta&`wWzFTHD{je1 zogy-1e}QH?qD#6%_J;ayslF1FlrOPZKYG#l=yyIb zOkmZ%0s6Ci5GovH7O9vrybbp09ciUN)xEGfjIrb*af(vcD+SOM1^ z(@_;MeJg9QjiF|nM+3=l=1P3PWp!MAhdXI$1%wWe;l~G`Uv4mm$kik3M@`}<2*6Tm z(EG_mDfdaFD!!B8P4I01bUjU0rq&>WgE=#8V?w73 zA;2|h43U}#@*kb`|1*2)UqyO8^1va{L%HYFHuAj%_i)uutLW!~S`iRRf~bi=kscfN zM|-msr(>7RMNPCf1qv|WnB^MuDL<;gO+5IkWW4l+tE+3y=G4T+`^W7rhTm6wX62yY zirj#{WviQ<)w$LZY|lTcI0b*uOR6z9e_`fi zr_?F7;7MC?e5xyeVU@r)+;(Wn8-?-A%Kj;52x4CQZ7nMZHp?M|X#~m1-9GuV)3=#8 zCCu1q!x++94XYrXig!b9*Rd38RjX#2@n;3VZu-^e7eOR!WqQLwd^KYy5AVJ?cWUPu z{pcCJ5=_^Rkk(OtPP=xw(o+U7=9LOoQQSxK{c zvucHdg;ACqtDL@xaIlOEcek^i?{jWCn!6 z|5gH7LQ}~YT<7$whVHs(eSz{yvi(Hk0^mXo>*ASMj zmd0sN-2oks?Rr%DF|**k>KiE0G4+~3U*apGrQt4mVL!ERUlp0mC@`uG6{fulek zc9U?^$Pplh`dmkJx{D9^@Zid3xrz4gJkJgU3mz&*Y+$5@WV%MBor&8jKm8?O*rcQC zPYm!Z*z~_H=YIx8kp4?tM6t4#)0zk-@2T`&tCZsUcgC(kD9YsvQ47la1+qpqsHRGm zV)&A5_$Q!b9n94^*g?J9-xeXJHSTmYJ@nay;T-()@uqKYntJy?aU}cw1QZ4RgHy-dJbzh+ z_+Cl$=lLzJK@ObWwtzDo*b?0{*mtT*61oD|Qu}@iybQhlk;h26pwZPsmzd=m@SeYD&u_R$P+kCo_{!fXl(|*0%ejp!*sWTPjvbXw&*E(CKoboX zbBZ~*OlZhaZiFjNmNDZ%DwOy&{E9hrUyoU@#uq&a`n`<9zwo(FkWBpcEF{J%&37K) zXai>l347_8(Y-YHL;o8)O^X$MH5BgXlI~stJ{g{wJzF&K)Vnl^0xldxX5GOzo5<>p zboNIG+H?8y?lv`xVo>NA2M~<;v|pKDcfB@KI$}C3zhQ4k8KDoa!2eFAZhNKFHWgZY zX+N)q&KkcY-yoX=CJRKwK*Zy>Fz_8i(HI5ZNu1=_T*bTDn{F)dki@IuhSe z+*)4~9uJvAx;xAz;Ez0ebr`@no4*`&xImx_wE^|A^91eF`hc73Kf4Vg0v~EP;$v1QK(`&<5Gs2AO7CTv`FqUqI89 z*cfuaaJXE$o^;&$Z>d|6wLGsoiBorNb}`kfJL=+_+*3et*-oZ>_schq9IpmASQLOM z<{nXI!(q;=&*t;gpVzld0ssU<3~_&fh02_Z(k69f$8kgfm4(h){XAKNDl;6n4HjAi zEvro?TxF4*uKXtB(u9zT7W42>>5XUq0YCpTR@_00^{}GUl!6FCm8$WqYMU^FX9t8udV=D`^|15LU(&IGl5T;CbeIq*ncLZ`Y)^Q|ap;sw9| zT**Ic2Qi2tJX5gVmnsPU=^1gu;E33cqe~`2IBolIBhU?Nl1&=0-$i=E@K^+xkMMcH9`!i6sJ9UN-$Ha|Y!+biH#6Mu0pMvrfU z5npQ2XwK&6^Z9LTcLF}iFd zALJ4RouujvvK0{F4H^P~sV)y{mRN>=yqBB5eeoIobznZ<`6cq#__(INZ)X&w|5aHo zF}-9dQDdU}HU|}XvV0te1XAh~HeI{AUc0GGaksd048AbTY%B7`J4kq$qf&(UBZlJa z6=v7arH*E@Mw$RG%9yLb4a!Uc~dTnG6KGCS~1HvBtu0DsP%A;Ylit+}Um% zx_~p!#cWS0J(C$|+nyVqC(w-9#qX@p2oB&{v@L)_)hY3%Mcc0tQR+&2`Fc`VoK3nW zMsB^NVSb&5K8Ds_^rhTt9>+gx^G-Bw91v>3-ayRcF=mVpQ;C4EWpYO(m<}gM_5SVO z0cIhl((_OtxLgDatUW-P0#FM^Z*P|>^#O|cS5phH2>p*Z;Gb>)CXRm`;Z*aRz`R$s~S-1t;n#-zzkr7SlZCzMy{78FIz9A?WG6m3m%oR*}1XSHiJ zLco{K1!o*)h+bwnt){mb=eok*^J4`dVt%ws?8=$=uDaALla0d>QN%r4f<4RC0J_y# zVN6b~2Xma(2j@+T_h>f0&4F{VkvuO4cnqS3O+>}ybTTCR*eVMc2UZCS=!;*R4crA! zEF3MXvnAqX^DvVjjvRs^?`VSw(*d-!34F611=(n{6h;Mw+#I4CvO&ZF}Y@`FbJTC#5y&1@g_Tr zm%xUG2!gDI2P!pGCFdq7i6_m&84g+u!`Mx~8JpX39>q>DuHEVfjNcUX@GW{S!LmkJ zjqH3chP6x-@ZP93Y~InZ9i(BN&DnSh>y4)ksq}K?WYy54QNO?p=e|&c1XTTc5WTHu zt>4qISYl1ZR2a)52*0M`#UCWXjoD@_BFzTzXDd+6&S>(NY$fMUAW*R54JT3DDKyr8 z#Wm727g;Q8Ql(wPA&`o*w$ly39aci#3!0W&JmljZ8XaT^h%$C#3NgSk(L+V2TUsesa)*B{LV;ZBm>1Vu9QTT`Jn;3-LZbcmGGyP^^lU< z#0$#_!mNNJx}j)Wv&l0(_G?q%jSzwb3{U@8VcssS8Nj>~U6+<~#l+1qt-tlJI7V-T z%~T6M0$~)xxepBRjEWTM{_z?V;d}=Qje3$zKabY47RHB8+PcrV6oB~78jdslwFvK* z#_N#PR10Y-GY_l=_fe{68w-Vp`Y%*0a{iWdKT#dZO^50Z4$cZ}RCu_kd9-ONRm(Pg zn6Dl-KV1&UUxW=#FPPtVP~K}VduDaqKXUnJJ{=yro-zrv-|@0DiP)#B+#5{W=+?A{ zC>@rk(gw#-Oz)$Lr~xxfwrW*F<#%eD!`THIIjlNb8?TYGSjD$#I?at;dlmlQgQjAz z#e!~AjpxOa9+T2<&QI!td0PdMFcHM(BS}-DhjMpeFbNQN+rP-QIiwuUB z1nMJ(7u)Sw97r6=81^>mFoGLw@hyCOQ9{yBSIIpqWPct%BESY*;vl0KZwwnxFnre5 z0ZV(_FY5KWREo*H*37f7CtbYSff+6ivJ}3r-oA%zT8GQT&sbi31HOf)!p@t@qhmj- zVIdqB-Y}=17&W7e8H#6`7C!yismH*Be(ZHN!n^xm zcc?_OtR(nsQN9R#ZywKcJ`98ymCs$`aF*X3LZMmTf)4TRCW?|h0*^4NWQeZ6yy=&K zihbT9+a$~uW5U-H%vgkc*c_t3Gq|&OZ?U&Da;abm7zeb8-@S0raxEns4a|=q^H1n- zE|T?f#+DLXi_4G?IP|Ljx`Rre44W|dA%CPZ9@svM26$pKMR{=)iXBc(F(KpR?qyYV znx0-}rmB5?m;wzZPElggF%{DWAgpM~|W+0lRI7HLltPS3p>NlZZ{`Ow2yv}&X zF*fJh3;LuSGYcE2{0?|x#K<;wn(gQwuXtzc)T{svIr5~zly9t#G`U_~lIyLHEld5K zHP~Ls6xjD$%!j^*%irGdJ%X^ah3DP3KbN0S9c0g55eh!P)244Ilz?~-1o=)Tb0^&x z;jgNUJ>a;eZSIiz%7gmI9B%&7c=HciX`NoB)=ElA+%mB2_|z>e1Fm(z=AJmK#JacN!My0&iG9=oGAc%i1RNUqebv!eox zpcY6)zgM{z_T>e(y>!b5tR&+}<49$D6C<3pKd2haDCEX4u z(w`@@E+;;oUvJs{G^zkl))YO4zg6yAX=1A)Nbo98&~a2He_M`OsduXpt);38v%V*2 zXSMK^*)%zA*;b~n>}U60Ki3Ls``r~RLwc8@W|3Kj!9+P%GP)e$a(*pGTXF)mUfhn!GKXIMqSY7en$Ul{H*KuL{7S^Op@YZmq zhUs|Zm;RBGe>W8XZ`OA4b}?XA2nZ_wd=8pheb7UTMfq^^b!p~M%;iw z*yLjnF9Lh0#}F-IjGe+Tve-(UOpJ?4$r>I-YmWDyDzxIy7#x%lbmh_V3$E_*(~@uCF=V1-Cl!K&KiR=)jzh}NCHH4(V81PxytD%ny+sUxI&a&sAecaI>R!*v<; zI@SyGVbMy{dz%AscY%nr1%+UTydwRop6_}0oW9BUJDtb%J0})d&z9gTeOvI#MuJ6E zJ1PA`N~d#0p6D$3=rot;X@bmyC1Ul#e3Y~g1Lu#Ia5USj_n3jcRwoQ$2V*q>!`+|O= znJtK(c>U^P%4n(>uTp7aiC$LawDNYX(rjzbV%M~CnQM+aAY9DqQTa+dLG|ag^x=-N zlH(FNDCn6#6CRVO-uo1C+pvvX1~6Y!#rYj9j3JCzD9Ts@6X=b5`HO`0jg#el3iuL3 z0Qt`URS)q$($)X#75*>#b&p#Wj#sa}{xw|LtPSSaQ2#Ilv`o}w0YsAdRjMs@p|MqJ z4atq!Q)rsGVb<&bPzEvPesK;yia8qKtTElva_H@e|M>A=*e-4a0JbtlYd%BnJW&W<4nI>p9g99GIwOWtk}Nr)qY5CSV;qvp3EMaoA{8qcg|iG~TJ z^(ky!5*__#WdB~nD!7+t@9db&Hb;Eh3@Q&<;0U|i=0Ox0`%=rlpc-*5N0*;kAnOi`RehF_;(b z5iyn{#?GAY7e@-iD8>;O_)->?ESo~T^{r@!0^6S@9>x&k(Q?dt+Ww}e2JI-@h?puZ zmqZAB!XQix04Be`GeAgwyb+%eXH3Qo@mYw<53OB%&=MP(Nu8|tMYjsF5UL{>KAA{@pLX>BVeFiPEB~@~ z-yPdV$F^q+3 z2!Ts`?Rdj^n*o_;*nb;OWVDzdt^w|E0>G)9|9A-}XXfkzbgM8^^{{erHFN$)1Hcb; z8{1?cGH?3D?_v$zqyBr)B=lyB`_X zNY7p{)NC9%!FJi9U>(Y3H2VA^U0d9keiV*0V?57$vQ?;n@x z)_D0Ie&~GgR_G>+2EP$Oa;`<23)UCe3D%^@+-&5TV&zQN>7OO9looU(>DZGa)ytvc zL*s{4u4~!=6=DmWU(2ENP=RKjOLCmam(k`dJgD93%i!UHzw_{Bw(Kui!N<9Iz(s$4 zjTl}e1|Um&DhtLp)%KWvrK?9kz$MmQEI4{@&$(?1A>js(nH8opgXL6q7w&7PO_X1? zbDhOHvpg+nuPt4$6#T5YJ^b7z801kN5U&r(%yrhpJdSJ9uc>&^0auMOAa;&wGEGuH%Rv}#zcA==G#-jV*=O2r|G z2L2YibHZlh)1u?#V|C0ROEi|Irg_n?rnxtKph+#0j+YXP0yIw`CkxNPaqO>@qy)+9 z{%M)yS@G@H3c^V#?3o!nF4%NN92(Pw9e`e!2HNH_$&=CiXLRi9e!pA9NwtEXPWyJ> z4b%HB$04BmXuE&QP09;BTt}G~wa`Ee7fbc-hx}&r#f#gSe+K3z$3U*Nl}&nenL-LR zOo+lMZWMvvs0GRMpIp$pH-#;Lnj>w7)N_NUGXA%BNiFjQSRD(0k#mhCk(SJsPQcWD zKCP`;NqYRaBe5NNThr#b)Vwn4^w5-PYo?rJw`H~v=k7bQOMaP8$0Czfs-$+tU^eTB zyAeh<9=N*_jR=?9BUMK@w@f}SEQ_P~n7&l^3tD#=fWNs$_8Y=M<|D%NE~jX9^aC^h z%pJiXEudM`w`&*5{1tR`)=|=~1CVJFD{TckYJ)vlycw)xSx#d+>?MmUoi(8tB9a?x z98kTuU(xE(3?}-+Tn6|qlgi;m{Zf`Qb?u78-M4z|7 zbcA7|UY9^NoIz^FbjY{Cz{36(X#EH&QO`SnZkgFPKJA5&85+Dpfpjyo2UuA30h{_T zuRg%4$)(pcMm#6n`$)cdBYgemXA{aE!wC`TFp>?K~ zf)~$eoYq=m=RF;~kDNQy223&9G&8YutP{E06y|<=Xv}Gt2HB5}DO*;rWK*~dPeyh> zd%k}AngvTF{E4(XGGzIlL6-9wYjNNptmVg8gdz%Qf51s_8HG+SdV8L^5Xv0&2HnGX zjZ3`7;P?sh&SAN$p(`czwHKX*Yf~sKHmRkv-6bZC&vHn=r{m9nH()~!VKZ2+EuFUu z5qo2Xov*Kj_vgs@&U83uXZ%*U6IA>*6yzsqBuzZz)QI%nAR@ zt8ns6Z_lt4U}mgE^CHcd!0Rg?qjI!>J;+MrQJ1|9KWo8)U%NV{kp!@Lia+2KB?<05w{i(F z7|-?ICjEK0VNf~$zIM)OMssl*NFl#|>VYPhSDmm?oX@Jx%Bs4A_?qwyJJt9;0TC4Z zS~%)g5EjXbhhs&X^G1}Eu*%Ykeeh(cN|MFOTDm-USBaypU-@5^+)HT=* zFMR1o+2_BtqQr~tiIoBQ33tFeQ7j#F1DxpJE1AF<{eOcD|DB_duqC}Gh&Iw|^}QHa zy!!aPq<23p&Zzwv7$t)oBB)ds4W%!)UJzT1Emcy;u!rhN0tF6E&=-y}Q!G^MF+tAA zb;PsvoRjSJ>FEWk*bg&EfZhBX7kdNHI#j)W7}OcK74f^|+}#YTQ)#t?6UCm^M@hw2 zZ9~S3{tW+9_tJg^J)V{^Y!48sid!G$sp1!`^^;i^ac-sdna+X{@qJc90&e6qRimfQ zXn>k9oL5BN?Jc7~`*r4%lTejbG@8ie;6zBD+fo-Xi%?9111lqa# z9J`leKZ(Inxn>!KPu^2tAB>U9tOA0p0eDU?B@Z#5h{1x^naO@+A)Nn$mgFKc9H(ZX zrTaFqA8SEI9g{fR6pn({w}v}AkhI3SRS74o7P;jduom7rzkXWTLQy1qIi+HaoDtcm zYQ-8GuOsZ+9|Sq03^kd@uh0wMJRv5H)eN-P{*c>%ge{EjI^NE=nv>{7%mu9hvCjWm z#a92JWL^q<+^zqyP5OTxxr(KgvcunrO#gI$mTUuT_yF>2sJds}4#+W6iFcdn#)YE; zFoeLEY;eRB3wL1G-6>^Sc&6NC_644WP)%b0ZeDpAB}XL{Y}?3VF`a#z&GJVU@c!|E zDhM$F2T%xAS*{r1roI-bwsjO~oD`O$iINsuWt*y>Fy+y$jOAIJV54$bdz_N%=e6;%F&5WY9ycQbeAscJ)%Qyj5z_Xe(iSyQWECWF4w2R0 z95!$^&!1beah7b;GH?a>IYeoTC)bttKdrk}4FEL?ER1}07C}s?F2;%z)^vNmyl)=Wgh?kWeI@O(UdSfZ{E4qUR3)CZwND@#h9~}+UHLo?$Vg6p^ zS!RlMzumnud6+gxb4g4sbN{s8WJ_}C4cl!fIl_8K{VFW`##BY2a#RqvF;^%2E}IMg zOB_IsPE}0i996K6;{Ghwt!$=w5kYSf8#KJNc9`o({XI+%B^6!*FN^FF$s3178PGwt z1B&?l49W+`9s`loKF;w5O^ue22p@5*o?6wO*CT3JtnO|f3#-? z&lE~kUD7aM!*G>eRNT*vJ4<6*$_+sS8i%-w8J{jKft!rdd;-v+#AUJu;aoOJ^>hpP zMD!AZ-!bkv23FNgvTqcnuKuaC^C(4-Wy)P#A@o%SL=+gZb&HqY@VdCOq;V}8T z!YTCsMT*I`v#N{;QWH8K!xc70kANW4m6er@z=Z$CNoN+!_JfTM>CP|)5-?zJwHrAE zG>!Cl!XH^lEwlJNxbD^XXKJzs2+s$hGzkWRVqPEq0>uoiUb^%H>}D>+TTtO30ttQ< zY*FCB@Brz4B-CcFx}KZ%)#|@I;OailT|lWtUL+h|lj6C8^*#JNRt;xiat_sb!12XV zpeLC~!!YfK6dm6A?ug1oh3~LZy~7VpifpQi+WzU%Hk0{^2@(dgGN)t z2j%8>(XC)o6bWenLM*z@kWE@Z!hP(%bvOx-B$v*=tlopM7bIBwqM;OTDNZS`mftSU$2#2F4RTTT?(;HKjnJE5Fy!usyGiB(6)ErkPm%t; zQ1N$8To_Qq6%hsLM28v|5QE-3p9bU#O%O+B5N4yMlIF4<1J;1E_SB}u-NqXhSauW)`d(I{b5@bulzPJ6@g|JVKAyX1C zT>WV}BMkHFBSHGzR6hJXKQavHv6+Yp*A0ksq?!5N%sr^B;fig8j{mXT>=CN5-n7wB z*8MQlqj%V_4w;c+j9WaYA28(+$_LF6n>{o)7B!Y=l`&Z6I+<)DmtvLT2flv5@V%M% z@qdH}rqGmY9mtM5`dMxd9%Z|VP|8FVlAr-2>o4zWP+W?BL(@cl7m1;4@Kd=CAnL(( zWsV#k7j6n4sN60}Loe-XJy!Rao!Grmm-N(mp>Vh5)|8M;c?qbWA~W5zV4Z4eog#=zHBut~WfF z#VSh*;j^N3@2p>}jV!@p#*)#^jLgfl+S6a454tynA6#&^hmi%T!HQR)^CiBJD56E2 zZ8`SxdA&(G^GfTdhX2uYhE@4ZwxD#Dz`L$@vr*tHk&L+}c9tOP&L0u=3I4D9?*>S$ zN)%9tBL5?@3TR-f>0+t;ztr6vAaxfgM4>ZZs)O>;(Y6X{zLLoGwOs`=k&`1C$JA!D z)u$j^OOLun&4JT!ykT+F$m%|UzA25Y3zIsP%5gt#Ebwe)pB$~cLIx0HV7G*>Fa8OA zU))CYUf2!;*z35Je+M>L#x3fVO06Aqpy99V|0wh~X0J6pQ%#E^F@$>s{01nd=h|d^ zb82DtlguzOhN9cRMuZ6Nu;EJ6Fjs6?S=uneqZT)gFiauZZKfTo(|HBl;1^0x4paK&CBGWskq|Bvw9(i3nak-EL>7KOBgSXq>}w8ak4KJ8}a-% ztXA56>=*5vlh}-K9)9d-`wK9dSO{g4OdM*8MIe2kLfkq?p3%CQ-H50zy}jTT))otA z6tQ8n*(fFq^Om~;qTcEQ3W?*un251PhXUM$7Cx}cV_H@&QdzL+e)}!Y%W(YOoM5gmGe>+aq^Gc82yE`2+3ZLk_(HM#Lcd@qc+TDzK*-3RfIS-`$BHA; zp(Jr)X_kX}Dc8n$Es}v%n~8~H(setcu=68Nm`_22RFu9+F7LCqcfsW*d*Nt(M#12V zsbe^i9UH)U+@-Rov!*#EtD;<5uXc63mZJB^PAxGFG6{&IS(Ei(E!Qp2cAsbT|ZyTb$E0L4~N*}mb zM^>P=O4~-!r;gjM7OhCVXJdb(o>((CK+)E6=s z$|+9J>4R+%G{iwrq1*jmLOqj-Yutoa#6oxqiX$XP;UUa>2HQnD@Lfq5*NLDeef_p| zi8}z?^>cl;=Zp_Es73FWih#6oy0b&rS0$@X%N8u}_~5&>RRdZVkcr$raZVF%5yuK` z5C6mntWU0QlS=VkHhLz-perk5d)<0@ep9csrhCVuCWu7 zp9Jw@+o(I%4$9KMaYGnVCg2j9@dB<$ydME$jFUXUE`%?RFi>I7%NrpC#|6TDxPOW_ z!tOA9ZuD`FVuvkR6B(_Se=mNmk$)lsjAtN`1}-O{6|&8X>&oL1*3XMer@fJiI18i1 zV1>bZEA3mtorEMZRwzdprVTOy$7B%>Ckkq@)m|utZ8tQ%z#l$Vrst+HiDnTDb}=kX ziBV`}lWymg=9t8$<2ftZ1k_-NA4|`iEWY(IHos{- z1+-OCX@u*l>EiPU`frUHYUZ=ao)$DR2)@AoUuF9%;L&e#y8m(*z6VKnV1vN>e?+^Y zgU8slEks{kJq z3@w^CPvQxFM5y*w{IMNcA~*H>!aec(IF8@dGac(|zjNJi*X$-cpSH#n!jMf z&k3CNulqb+xsg;kpf<`bT<|)XawUa?YDAFL_;gg&6y&)a%HU}1!eFUxZ^o4Z>!_^t zBnR57XEfW9gjSQvm{BX+z*20x#Z(l99%jX&P-@vgxvH zF#2ABH&@~AB#P=}BnvbuzW>us_Sf_N>7FSR3lup1|0-~ZPU#aO4gR^Ky%U^ zZTC^_ZFrx^bsZ5IpW&D(I_Q`Ji|-sK=^GW6h%)QmztXnNBHnH2p#34n=piknElOW-EzO0m1@pR!`;UBh=o5QAqn znQ;JcW5b_0fTV^(auJP^46RK{^FtWi&^OdIvWW@K@E)MN%^LCGGL8%19moXp zRK_KMR?h%LZ2ay=z%;|;!M~eN|Hg=Q7y*yMoJjB-!2&6Y)i7<1huqBx3pQ8?6!@#) zaSx=P2YGQF#Z6<5j;#T*TYrz%imZdRV9$;0D;j@pve4OVsAfhaHAJSS`2j~(c?((` zAzikynC&pBfifiGS=D4|N|Z5ZqEe}z>a0S?VO3$$Ehdf4fbP$3V5=)@H!a`l09au$ zrDs&SRNBl4y%Tlc}Tc6&U53* zVI|Ck@Sk{`&|!EvM#6~qBtp;s1dRJDq{r-pY$t#rZSvnjTEy7d_3wMO3NWOV&_3*W z7Sfm%qfk|Bz|oC$jI(bPy)f5;(4>L>7e%nlewtwjIVJdBL+FtsIRe6%HRZ6lCU0M@ zH`>`gz<>$c5KC*(w!8zg%k=y7t1rtRK#v!sAr^L620)2{hD}6(GR-};L0cJJZ-OJm z?mn=ihv%)2R;iItf_C=dAisLUHACOKD-Gqi)Xd1TaKy z?rp(5nvdojIbjRjj`Jvh!%^zCornf0vkM*ZNN@AI*i+oIQ9@GW{f4=@9ZTZ08MdbO z02?K~Ba!&q8~foQ>i1uF-Qdt9c6-ML`#)mBy#U?&BW}WOMcVR~<|GzPN?E)Ow)X(k zJ^hV7u&?0L=}0>+az<-eHem%58!Yy?KCrLNDJ?SSSaYMSYkfVb33q1mTsfsL`Z+T- zjGiU1+!S&H*wOTm_DX@pO2seT*hTrLxYl|q<$2lT-;?H-tjlv3m&A(}1!F+Kv||DS zngM$AAj=T_U*7~F}f|G+vwxDF>DkSF+6 zc$daRx@V0#7>}?wAX^q$e}r`b3q4H1X95VpKtw=I*Uqptau+UcQxt3h5$OrQLaGiy zkbb%@zSY`g58xkSl86X!niL`G3PM7WoPQ#hOD3+2fG=EZ;7%AM#rP>bXnZ|W#nc0C zIQs|N>&!pY-+DU9=#}4atB8&k-$@}1-P=csyA1IK(*K_d#D6UaFgW6y243Kb@BvQK zu>HTXSTRq>zb^=-340VJtPh082}_&kC>4gK!q7GMzRnh=dcg})U7V=ZV-Q5fd7?g~ zuqM~75Iq9mYKVr7Wa@bQ>I=5QANZ1oO-%2W#PZqhd(`=MbT$*8_m%W2LWrru?S}~~ zq77iJNBIaxBg=bO73Yo3!HMjbwS#kG`ayTM5)I4no-=%LA#)%$ds{ysXy=meTb!ZNnWI%74RPwK+y@_1uS>;0w)gaxa565)>O z7y4{-$NLA@WTM398BQBlHAUvh5|7r28D~Jbs}V~wK!3VStNCZ2GKx9!&0ugN91BP? z!#jMU<0e0X%vJxNa8PCu%lZ5qeT~{U69dw{te@vmCB{R(*cu>hAzoor{n=yb(F*M2 zJg3pDRFx<-MnZ}byaxV#FXV!$*_RdVr6`5$l;lK)XIm*qO%^n8_VYGmq?9eH*%1IY z9KX|7?`A7Em4TS!B2bSp&G|AbG*%N;ug0NH?poI7!Y3w4>&|MoWI6k+tVm8h$3!xU z0byn116P!b+WMiPt$d}_y;K3e@HH69W4G4gmMlG zf=GU-rB1u_#VJi}C9}#fPSRv5PPU<7&;*IfYSu+Cb0W=7v1i+Blr6;G5~rWr1MNG4 zp-2J&G@pA?Z*@;P|2#{mhn-~agM}-pCphP`8r699&f1a2nOQ4epxw`A) zx##inZP@hsi|4lh`rH<&DUIawW2C{sX_2hcdme9u_7yfZ45jKDlwEaV)B5CSwH+O0 z`f%dup=IOe@W}x);d;uVln&4J>|~6U=V*!+Y3AN&Naj4{410cD5vB|X9n^KR?nz+5 z=CqBpKd%xXquwasSEb2FbgCDw%jC>fFbWCu1aQZnXMNFiMpH@aQi=Tb?1v*HJnS{9j{;SP9A4uUcA(~ z!ofFt##2Emd%|&6CfYtd5-Z8RL{Gj?y}|h;rBiqvfLyj;67p_aT9u&4uKx2R5M~P; ziV{0Vowye;DnP-K11d1n8RtR4|3g%$SlNp>{M}a~RRws&Rs^T#-JDQ0%8d9h-GdAxW|82o8nq+dAP^7cluo~ldFHg@ceD1(dSa+^4Vsi zR<;Ts4YuWbwHFGOh(hWg6?zYkyIAEV>Q|HjxG}&5xsYiBpxHFSvqfj0ENnI!@Ao)c ztyi?E?aD(s_Q2R;S`a-Y6I5Ft;S>7z@xz->flp#JNIh(C*pZIR-;^1{fK*8EMnhf$ zGsCbT{vk8bSp{Yu?Di#Jr(s`HMPd2=FA%|C7x5u)VL_raoRhNvbLIZp^@El>r6dt& zs~A&yvETG2v|%!B!ZXD>{hnw11%xnK;!rE-L)x@sgvval#u3WVsq8-**v%f=Gjp*@ z>T`AcMi?D0tuCxKvoFA!09zmnhi_ZLEEWZpCFiV|Mfn_>Qcxa}axE=#sCNf8W|y|t z9aA!KYH$b;!;X5Dxo&MoTHi{_1@i%hP}+ov85mHca0~HiaA97?dm%B3*)I{7sKjuv zuGG~Mx}u0kvEU?4usw-?^g_bn%LZDGX`>>g$%(jS5=F&a(*|LK0Mv@de6(tw>wUBK zsN(JuR!XP}PHc4Gj&yXD!n;t;9@^X^A=GdlZ6z=ya`XfuN}+Qkq7fX7K0%GOaHfQQ^o0jv(3K_Q2)p_XEAVr*(P!Vh_%cxyeh`^WcjVdjzGYm7-GQ4N6I zrar9VT%&@g9;fyugE+lu6$3EY>P6eFXRx2uGjKoEpZadRW2NE|%=Faygpjj;uWj4h zq(+B&Y8vrjL&qTs(W;kFphI%oca^?R%)rF?%}lns3PLo#-&f7jQ#D8a9da3>2r=ABGU+)rJ(!afGIqU>HloN|A*WBRTR=wbaQ>o4+Jbo zJRwyJ=^_xX4J;i&N*R&Q3%{Z7b|V+u%nJxvntc*3ZH-K^U&=%{e#By*S?;Nx2QA>jQu8H?Eh_F z|Hm*D(tl8K)&DIbs2Bhx9FNcA^V1cN*`Bz6xIoPdwf9?gd>Hl zTHFDtrBfsQacfHM?c=Fo>TIceA0dBS$a)=UT^hSb*6$OWgQY`p{Tah@`8Er1+v_W< zG#(eV*AY2Hb`5l%cg(JSy+<^)EA6O3tQ3KWq*Mg0NuxJSJC7&fn<-N!Q=~R2&Qqku zC^7?KMN4qie52d)q#R_~Labnj-dMaB9p(V$V(HKJYwRp)ZDvvGcF6VA4P&oP-3@JH zLow*1S%MHmP`D&VSeYNv_C7x(&4mWMhC;n|Qna+w9p~8TnTFy}=~{KPr^c)zmL06o zk|>lUl}jtJ5O!e1C2QE^pjR%uRfWIw6Y5GzL;X4r3#ps3f59*$=y}d#PdskwYH|R4 zyo#J9Al3ii=?N_;THjj#7M!lWtcVTLl$9-F1&#nuFjqKNAeUQ4u8@ARV0P%rCFW$c z=-IMdr=J^=;b}*|QS{|z3g27Vpj>M&R&I0Nv$;ThNRTfotf1uv-ae}$Qiru)r1DW1 zqZ}z&j2t5jKLsyF^SC6MABhny5*`)6%mg?`^+t?jtkO=@B7SkifC?F!KZlkT-IUqX zd6eyfea6=xHE?4pi@t8q*TH^|v8iMwZP+Y3w=;id&hciagai+P4)SIv4hI+Q#EPbn z+B!DorH6zj-({kd(nC07Dh|m-7G6Y2_LfU0F_ncj$%?U6#*8x)jhsHlW#|X+zts@@ z*=Mrz{=(ph>7)#Cjps77ap%N0$jiilVrd+hK>&056B%}wof9K6)M^vsW{8+FUsfYK z$#DlhZC2qosOAUmK~pL=qkO&ZJzyv!SmHh;7#p%wz~o>ytKTti1gRj}A4y() zsY+2lYws^JA&cmps_*BM6X&n1lPiy}6alb!$n?p-W^>5robwMa6VN-A zj!Q2y^1KG@0Tw7*PFeSyxH)%exvi4ll0%`17e{z8=|@E#`w1!uS&Wdh0d6cx#H+Y6 z{aOgT5742dI>PPvBS!8bjM}Askm$B*!0tUt^CCtvUANEATN@=Cji4oj!i}v!@OAO8 zZjfv_N_{$i&Mn64h4KNQ`1zjQE); zW+pl7H6ULnZ+T9-lRX*fQYM~@8tnXBemDHI%ky+)ol5aF~qFMMRx|MMH?%& z0Kqw|6RywHO|mm}Y(?5fh!2|AKUbYRaFPe_r6A&&z2m(T>-`XhSmGu5Z#I=*7(k_w z)B>((M)Tv`jY$cDx!1xC*utAP9C#;3>mf2_n02SjX z8uc!Lm8>ELS6_v@;)U!=dbTb3UKv!s|6pk2$yWmzHaG2%CZc*{v8terAqEvDOAR7_ z{gTYLn8MP>s+fg5&&Wfvn398U+z=i%lbegIY(a)<5?y&}k)Ga0oy};h#)cl}9J5fm&P#V~<6P zF`9&*S1^)B6E=A?Jr3p~?O;VAmK>97lWGN&E7Sn3W6H`P2qPB_=4|S57C-!Qb=?eo z;IR5`LojvNNSU^x@?OwE-!cwYFP6J%b0c-|_=51$9a1jx0E>vHI#l==BY+u!t&gbR zGLxlmyz&XhR2&1L#~Tr^<~U1j|vLqDwILcd7pvh37hvS?{* zMrj1grgGDxVAKv}B{f}z99p+H=@k$QIXynw;)E3S3W8(tYAi7&5lNBI@%|2BQ5^oH zC~ZEHFbMc+Gc3Ng0rFV$w1g`15<@RS3e+ZAXrqCMJ!E!B76^HnK0p#q2bZA-IeZNiuS`w!Sd0Cn#NSFn6+X%@{n|O=#n?hw*u`2xS@`+4!S;WDm9I07 z{xWA>W3rT%L$E`!ngcDF{W-*JVIGjCVYR5lK_^)XX(gTz)-(k(e@@s8X(gX94K=U3 zx*Ujh#|WZ*2*|pupsA!Pr>mq6r%*GWTjJa+{?HSXtFurkf`hivyfes!Scc1l zGl-A_VNlm>qGnh$+HWmlGq8-MG($PiPc9iIsnTSS*-=@WpG9U z60Ov+eNjnO16)QX@95&{WoA$^E2BeDh@nVBRx*6ssr!wz^B2MB|^x$52Xbl8>lnmDt%GHJP`svSu zFcZY?=tRM|q~wr~2@I`6Jid$FflFlcp3zsdLnG zHfstQ6x7NcZyn>dF+$+u>FMRl_pYoc&Hp+%W6gJvJLciuK)yuiZM9C_T1WU$1VF&= z$%cZ`-eXeaH*|LQFZ@#b^VrfK`a%JoBQB6NI|KEt;0DJ-r!{;e^ZO|nD7j%DN)E*J zJV2BMjYf0C+dA+lziYg8c>x-t5AKpHUB)p?@-mDbJXUOv7^!~_M*3h9&IJ9O02cI?B#Ixk&EYz>}(_U>Vu-QQ&7>7xYiNOGDE9hN|y!ZaPd!N z;L|MryJ#sYgm{0^HI_9VY-;lYCRX`xVB=5L(R64x^18%2&obB=4*|%( zcC6fA`HbHR+lsYfFH1`LX60QQ#L((1sym}k(9ZipT@AN;B7R@h2Da>q9QOTKWDd9Q zFDWr(KcyuFpED5^48XUoz$~AAW&UlkF3dDP+W?n*h0N zN?<;0!fI&pXnpRkTw8{0=(E2DYXHz5AWUdFWH)ihwC_3p#BhW&H>uHX5x<>9PrIP{wPvz0TB&uE=H@Vsjdt@q4;LrFnY z&4-t%EqIs(WGEHM%`Qim!(+h8y@Hjf4@=yUT|uTzaOr}^lGaI0@t_(U1@lI2XV(<| zkDMO&!&w8}E_Blm?xwmK7 z$3)z)wd;NRU-W!3aIK@Q}1AMu-#0j0T8 zfBf#~aYE1632(M+QXmJhyf)eYLd@V}#|k@z_=yUlz$m&Zpj5>-dbHd8eVcy>esLZI z?Ty|)*4#^>f2I!v{2?$X@5c;6kbtrxF2flrc(e0^2lzARtEv!wwjaU~bWD2&Emozx zc7&HBd#1;vqc~EIn$R%sfCh|pz6V%PuhLcOU8eL^D-89{@}GM^=-38$Zr_zqJS?lTgN%B(DnDv?|n_WW|yB540V@%D)@#VR$0(uo!7rdco!)_{}r_Oc}yu84e zNblVc?lH84h}SVd0+P+s%JM0DnxAFWg8X&TIFI#kT>Yg!&c9EKqE;Vd9W4z+K<>~b zvMOZTY3iFN_tP5hW!$O!7Ihn&klr%m%qCg63KGBr3H^LkAqMDJu!?JHXX6A3t3^99tBrs|&=#%krX{8CV=K-Xc1EzwdXbq7Q z-_e_5IJz~3FdbXudY{pHV6s{s?yJ&=NQm!$*1%fNWR_>`K)8NOVN)x=5iwA06> z%`cLf#GDrr3b98(M`&W4kNw)Hq>Ql+5ed8>YFqgWD$B}~e%8RAC;LZgavJCZB35P& zOA=(&=Eae|-LWP!iA#r@ZX?1sTB>X2lwy=2#V?jVe%G|zabgE!u0Egmo= zgYqxQ5C<^Ii)%b{!X8QfvvW+Ai-6aQo?JBITb z!QnhtXArkl!}buJ{%sWR+pOQ`MVH)rS~?dX6F?gIJe0V5CwT;xey8N^l^^3h zi#gL~E!WLuY8Tx;*JfufQnzu4S6%kNie+Vyo^PakyhX~`j@C0W`A43`)kw7Y#`t>E zkiL{n+DUb2*8c6=uvJri_M_g(w>1y1<&N~DM)vkk>5UOq7WNng^H^AZCpjB|hh266 zc(tjF3eE(`QlQc_;DX3QSY*!?yxB#kqDOI^qq2=!PNcoiLkfdTIXDhIejIi=%p3el*v2_++0$xbNdZDu`uw zucY912QAFtc6&^Rr?57#Vy93q^Q-#+HxE}TWwP}l<PydziH` zY&_FWPMxZJ87>|J15Fi5ZUDAMf4LhMB1q{nx-Mkta%#5MT_~)w`s^o~E4oI1fg7EL zqov-c-p=gWRHg#L1~0lRpTjcQk={gaiTW(OZnHYVTSZa+=T1fJO`^ajnLIb(q*GFe z!+FWPeS3A`ey%gBVCh@U8aY9`&Dl`6PEGEQeBf6qOil&A*;pSBDoX|pJ$lT9H^d_U z7mQ0R4yUE1890-WB4#H@EUv+1SdXMTj6g$MirMw6_|j7pg|>?hwe1Q zv*Rxs-LwQ;Px{(ZJ^~kNvqClAa`bHudtFX8h4R$LUu#|(efQ(Sqe`o6gD;#TDnH0E zbzK|}M@=@P)MkTq@8fhm#}(|iTTOoyBqTlga7| zcL`7*KW4wfJ;oCoNMOpEZbKB&1Ysh3|GH-DSjTAN>Ar&%dZ;GcFwVxu&z&x0_s~c$ zl}V3*n(r504Ya-UAv0w6<}%74b_5|TiOs(dO;8E-PwE>3DTM=Ar?X4u;t-bx^V$Uf zftwQ8S=rFe?h&?-*fmtN3ic8H_K2`SKY=7Gy};2 zIfBWisM9qJ?UN2v1E~a`mSEHV&`vlL-uF(x4EYHwq>o0-0O2JS;mg0+sXC-begzUp zA2UnQ^8GYl8Z>r(^KfIUaM?np4G?8V)0 zCc5FaY!zzS!eUmy41$X%EZL$x*8$U~b*${OEBx(F^atsNOn8&ZF}+U)T%Y{PdF}&- z$bjmKI#44#=97)k0LbZu?)?o?i}`{J_7UHQ3x0{bO5zBp?fVY4NqdD6*b37nx6L2e z8tv-=^(-Ig0o|pu%?I)b+oiGX2Ld3u@(+Xr`-b)u&?f>yfab|*n(Hm(PbmuQkC71G z_fH@|_m7A6|pJp!1$!HH)XKt~3O5(;@wknc{72sI^;y3H8Lyy4%G89};hxT?ZUl6Rlyt3vee zMv^C}-eL#W@izCah{6>(v$wCf!U4`tn4vlE#{zR4mtu+W1%EIEf_em)>)^cE-}<~! zgaAfZx*oy;VbJ)h93x*LWmzGEEMd9I3C;$%o&e>b??S{wL<#+#mJuRgGXZkiQYIn6 z^h5<_jv#vZ#I^&8+CKP|lIbb?d{`xX43cxZ@u=7LNB~QS?lhq}<``7$y96UkgzhvF z>4`+Lu%)$VlZV0xeZ2MH7{)JYpjSrt*$Wj1G4symkxt)`zK(3TBk_kJ*7R2_B_O$% zhy!x{N|FY+N%MXiv3?`Lb50C7?u;cOauOBzhUqGGXw94J7Tti>v4T~kM@BmdhHOqg zKllmNk#4(mzqc41yo*H?mp9BLj3-bz_j7zsC|imsnEtw7GGa9OvEX>rac$Q#`vYp4 zGbvxk|3N6P7~Z=j|@?zjj?>aI`zmf~D0-T@A;nWuqbV5?FTSmf9W>O&N+#zi_igAQ6thvyOab*8E zK6Ih#Ao86P@f}3}9n?+K({+p=$9H0x9C zWM7Fb`Y06Pi5%@Ymk`lJBx)L1B*ffN?Oi!`5vpijxmz#pLx=;`4OKX&KxWDfh~8CX zr5@#f08>+Z$j-K!(eWbJ~~apGWP>H0OY z&DOWOjo%@&?4RxPYGLT@YGR)(I4H_iw)bmr`1OsTJPKKZyPwi z&FsV!&zsp0w`)%glueIeBdVtpAaXjJqO=w@mKm^W_ltwUNWDjHdhYcy$Us^ zv*Vo*-e7els#(M^t~|ukjJWO3)He|)BWpc6PD*N>Q~Rot1vr=M=z$c|bR$=Yo36n1 z?Zo~8j!*VNRRmTRyJgRA!#5qUyf~2}=&?E+NhcS~ktucdLrSOi`?dOoQK`jqN-=3$ zl^sF-;Mp%W&Y;4jLQDLODmO+@;@KQ?=|UYlm4+1-&j8u1Ua9Ym*E{hMGSdeUSOos* zf4I~2a#8sIm;sKGILLfAX+C`PN#1{HcA`k_N~6)_X!Q(cH}??y`Su2ZMz$Fc^W;5M zuh@kfCl&FIycKDz<_ikDvn2`orrgA&-Gn>0Lag1+xnELJ<~b94UQ+*vboHI9_g+!@ zF1D4J3+MmPbyh)j23wdV_`zL+ySqEV-8Hzo6D08C?(XjH?tTKnf|CHj-CZZQMr!U< zO;z`6KlDRacki{oH_bxH~qfR3Eq`~-mVDAAl_J;bsCBd$o1t zAv9V@G1^Z=nAFsFWZ*!#)9rIC7z_Do1PwK!UC=R-^b{KbSAz22rY)V;5qUv{={O_U%5<- zB4|=}CeqOjDQ_ql01Ad+6bU9MYOA0C7(zn~zS=#Vqd(pdG!5r-dK(Q^&iJP=gN_+h zZZu#Te)lI>s)qiQKe%jrlB#T_fe~9;z~RmdVf)B7t5?j3d8aJFWY$7-m-%`VU~ zH=I1Ql|YHnv39X$R-TPMrFXQCHgQgmTNoo|#+F-{T`y)Vigt1Yhu-$NCBziJ!1~PR9GDQZHAg!V9z(t%+B&qpNgcd@7 z=K0WpC3v?bDeU~Unr#*#zQiSXJIc>5#4D+ts%;h3p8I1fMfPk7?T5_*iOiuM$e{(-yIs83`v--MoM%#r8e2kM5rYVPu&UF@xKB3a?17~UlxNTmwW`TVH^s~L9@uJv=<^@It2<{$?nz5GjOD6J$BJa#R zn@M&o4W$QCciSZPsqxafwO2VDY`DMd=*H-_fvtEf*VSemTh^&ri_K>e zPdSXsciXET-Er6H4pxh#&h5*%d#Nq}EzVKXaHfRimccqgn>i+t8PoQ|3{!*TKPYV` zQ)Qd+NsQjUs#uGx=-eeymP2l0EWgxuv=;gehWLF8shZ(RM|ScVGZpWryk48Bs=;}Z zY~A2I#W@t0hhjN-EmXOpv!V5Jy(Zs;)HS%{S{z^0s4^es6Dk?dA3QT~u~ii?N*q69 zUlgVzPn=VkSU?JobsEwtIydVkZ-UA`CuUOy1qlaZ)41|b6p@1d7V^2|1;8_)ZZ>Ay zkF#{kMPw*TI2%mNvap{>QTJ`K#79lLT3}COg0ssdsjBj-U@F{lfkAaBb)I{vldCNZ59~z+Op~L z^ILluEy|^nV+1N$V@EBTlben;_`9 z-BdQhF%>KNwa_WRBB?k!`!m9%{r0m~IOLr3NS?`aec~S0yvKi;lW7DLbk}7v*!1!e zw~_RPV@-aC*Kh}0j4A1~aYM;F1msDogOi}vZUb=4UzDD6KtKMqvFy;$TAh_BmlouJ zu0srqniZ|sEskn?B~V?>%tVvNIFD*$dq;Q&STphGI|5e~p-wBOgfrKFb>woX!*XU1 zWR+f9CVMw?Zp5_4;nV_5&%~Z^v$7Oz_XBwNOY`s)ciH0gS-Tz@uslgv7*NZpCWlx* z$SjSA=hm%>BVp1a@}wtaKQ|;EvK~`k4M-Jc&sj*oa1-1WFhs(v=-7)EM_{i&e~z^` z$7|5A7i%1WwPz;|R50gl;1tA>rTnDB-}fKk_$7}1%+0pL#3XRDjnWc%Fd9AQn1^dP ze6i>4!tW!#>xXB%@0~A}EU}?ICzJR8J~r^WF+eIVm7E9l*RyP%eB39S0TdoFU;B$V?xmGCQ}zj@2!xmD`gR4}1|{CJ?3q z511c`|4}yQ>;-U=>UZT=xYi)FN0`}R>*CQTOzp|d0ws&s#zM_M>lDvQ?0jb@)9X-tRxQ%0(N3b0=+uXSwpc$ft9-1yx+@{34t zJacAI{Z_Gj*b(95Ax4qWq;&dMs{GwzdB^mRG3j(cN)lkNSl%$f_vtXHeRuuwkYLRj ziv-zKYD1J-oGEi2-Wy*QCXH(EN2obQgS}0lV44D~WqR7=Fc{02Pp#OV%4Wc_K+B9X z6M+%8mYYD9zai5)`7dWCtUXTGlyj5Mq@~8R@IS_>#(#^seR)I-Ln26Zw8yzF6?#Z!@-w$%u`x04mh)t7VvwRrhrGE< zWB@c=shC!VbL!b<{C_v-sDWF#qCMzW4Vrbdz{p(Dcl4c&mW^UmLR`_Y^qrNKjrbbv z5CP}h5GoreXoX1vpA_gj2}#wcUOr)^{)R&1 z65y382w70I`wapoRS?!#6O0Kltlg z5W4hF#H9LE<)2RJpFpJ2R8|m{6&SD+np7a;GI}sXvj!L7gW5`UPuwS8N?r|Z^y*XU?bblkFuiJF)V!uXl|yszJu<0LzNO^(^r=Dp>Q-8i z?>8EiJw{dM$+kYF1n?Ipsr!MziROY1T&gp^DdS;jF4_<|d|!dKo9JoSS`=nz<6XZn@F#nq7vvmD&jm+N5B*1OwpG?oO}c)e(C#={t8(6! zyTD)b*wQ?gzSe42T(c`8k*Ug^jbdHX29Baz<48@aPNkFqzf&r;&SKX`vnw!BsA^$& z;%AjRBE^fwk*8j?`?vfSK*T)c{3P}MLGIyd=pvl_0!|Q*_Ee>yVYq5xa$>mZR$t1$ zTrQsdI)q*bJn^gQ7KuVy^T=B&u5w;Jrl&{_Fy4)?y5*;Es+c#z^HxvYFx@rK^odVI z)jXn*ifay?rOBPWlcUjTZAcRS#RYcon+F>nm7rYa8_#pevSyV7I_1wLEQNRJC(kAI zA+N|2n*p!23H@+Sz6r|X+Z?wMDgIGZMy#&;tiE~1M1Fk>q?kD`(2j829k>G=Fe;y7 zAY(ppLXCYIgVKYj4d5R5dzlH(3&{#{#@ezTV4Jw_|8E572Nu66(m&#=?B8VlPjf+X zc`(|4k>nCi9;Wsd+O8(f&K9o!69tM@8I&7VLCbMSrjD&#TC37Vr$i17KZwG0L-JBN zekzT<3e5=NWO~#_2-+S*y(}J4R6`pLPB+;+ojyH%dHn7R=N$DVC>uL*qIuT@y-t$y z3mpbFqa>r#UN4qm8$!}$S%Nn)fCC#b8^4!jWlj(|Ns4k%8pthXG--~FF+t%ztx@&E zO?(}H#vYHA$@&nZ@X! zV*EvYc{nfhQ&`R^xxVvrVE#`F_TC>7kt1E{^@;be*SE?~DqObgQ0s-fJ z13p!7sCZ{#BRJaF%ft6l&T51ZWiK)B3{vs^ocmJ2|Ce{?KUC)oXk6!x9s5$ku3^|xGICxWRDi&3>`#Cwrk3UM*0_Rt^v%P zZ87Yq02x>iP#Z-<+$woFRK21lYY<iDSj(xz&Uk5Q zAZ?&+pk{wyU@L0CI6l~A`a21Ki-|rXm)?Q>v^0_5Sd;>r6Iy-^kLPU8O5V_bpKb>-JKK6I-Mn}Bav6>V(p<)PT(x8h zxD;a*f4-+G#^%;KFy+Ml3~8-5{57bH{z<#F_M*aQZDaL!TUm48pMJIQLH23)Lj3Id z#-cg%(o;^FU%-mS^mRL|XTXRkqo6#&7H6`eiPbJUN%d9@(v1M&+M3u@*tEx8tz9;> z-p7x)X>5mBJNwx9CO*pF{Ni1rCQ0MhG zLbgD&XID>@SnE)b*bq@5^K{G2z>M6|zB#Nu3@<#)Z*x1!ia!-E`+8U772Vq0ypy3@ z$7W)t1b|oi&Vl&!sfxT4JU2RGC{!@o+Q7Zx#IRD*dZaJwf&ktYqqJaq^1q;i4v1nS z6FFHmpqLZ4^qtat67rAaP~*9X9Hq8IlGU|^f_9PcDqJbGl{B__U^8!s4&ZMDGM zUcf3Z?m4x*#V{FJ_Dwv)+a}Gf$;3vh`x6axnydli_(h-+d|p$LU(-%f42s_08MJxTtIPr?RhB$JM+}lM(m~0*IGhvCbj8+J_5=fMA#K(KLM@_?S)#vJFd5nIkm3C z0{oW2eJ8bjd<#6%w|{6~ge~rVmiBcPUHodg;LzF>JkF+hc1-gNZ$N}ni2yq$7WJk! zgLVy?%;iV2Pd&jmL}+1nW|0?4t1h^w2JY}|nWw~{K3soRQl3O`-24!AH|lzlab}Lc zp{GCDV&>Q}RMU-46-Vqc%a3U|^<0}NK$ud1WK0Wfx7Ie_p-Gy`#YpZGgW|mf=v5AZ zcih}4d7!>Lz)kVK16nu{a++gR9plj*fp^n@QrIrTN~*Hxyu$K=DCS9E|jM(6oa)w)4Xm!1Mjc zb1(mV9%|O^+5r-d`6lHYF43IQIJ&%xkB_K${* z_Is7)dov0- zg~3t2RoQ!~ovwckqx|ao#?-CRvg>TjTH zuTOMo6?GRG4%dwsyv#5;X4j^m&-wqhqEjD|rYvAUmpm{J%efG&oIC(_{y@-)OjSys zyI1DDHhWzuayCeNe{G^-8RCeNe|{GbG!Gf8+4plF-7~)=V$PR#*C%2S8%~}W%Y2V)e2AA_|B3sB|AoAf zDYx76jNQ9knowjLH(?IztBe9RJM#fU)8==rk3CoS$g%<%JDZD%b3G08eP9zwKB zY@sti8{$H^*Krd=Rr~Pns`ii!r0+b_**HIPKfeX7#(w9h#VnZATYEBweiMs?sdY$P zxfh!w5Us*SL^1v&eg#)Xvx4G|I+mEd+IS!3IW2sZuLc3wv*H86AM#MmNeCr_W@cCK z4uKmJ&ekx8Bs$n)1^eqIQ)cdb@y#|QE-rBW2~DwXIX(HPc=B3$PbOyTYo)b{x$@at zN?H8X#vkmGq+foK@nAYCWnicUN5xOk?@_Hk)4CDr$nq262JYA$#(t9yCx?*!wSwN*Na#EHgj3cG#=$i82_OndwjK=6uaCWA%eF~h^ig*i-xLP z8UM~tmXjaoQg~-ty+R7ZXun*U0b`5FDiw(QmbbPQThN8p8<8 zE^nL7aMg61hoW7U{-9Vj5ZXVyE0Tx@AW#&aw?_EkzlkKjv5>A7zb|p)6TdO&E4&v? z@I1}%WoIlduO1pLul7xCA|dss6dOYRR5@*mh%f-^RZa;e0hmO{6#^qFJK}dc&#6I*_XeXz)6? z=9=dS(|01Mb9U)n- zP8ERElhM^u*R_s|ly;G6pOElcrvQpxge#XpL-NNTuBbnt<)wN!8BZ`FxWt+rZS)lFMl z_Cvd!d5n-JHwDEoKZl;Hk?WG)SVROVel)-|Ob`2888=8Q=0lSqFlFLB?O9+=u~vgt zQ~()&k@QvWyLG8Em&4oHdUwfkA;RzYfudBK@?n3j63EVm1LXG=l%#M^Sa7jUw(WwD zQ)=@9svFK5b`!vFdc$h!nm5a#+QOK$(8b%q=1GrzVBA)vvl+HaDlBu=rP%k7*99n@ zHLaF$8=YF#B1AuF*A=TLDnYWO3{_Aw30f=&32DF1JrIlde|{>^vDdt~59Gc^H2X!8 z4Ba^&7{uJmB5ZCeAG*0r5c8}ZZ~{7g^-D{4HkGK@Bw5FR<0>)`Aw}X-7D_-7?ec;I zIuPF#9NL^g1g@}f0q)$CNjMSuG{9|Ho1DHP6k13t5t^Z+AYMv1O$&%s@^cfX_JFBZ zb4URWZE~3xG1bhB74Iy)dbg-t1?F~v8O2)iJO<=EM%PwMrOt{doSv(%otRpoK4R&& z)-g$K9nZUpy88_;BblFT^xZ{A2DVGwtJoaJ{ux-?D@Y77ia-$*h!l;z zdHL;qwEaTim5{^UU>1KRV#KpW|4(jxfA4XoG|u-pQw3Z(VuyCll<0X+O%;&kB{fwsMv?%{3V)iE&w?%3oh|gp-d*o`ITXDP-lCBR`^ZQFS-&uP)&B3)l}Zu zS6J*2Tlt4tfEE(2VZE(_Qn`$1Wdp9Y8-DLk!q*<24%Llm7&3jI9Zpu3&jbop(t5d@ z3+KOtrIUr7e7}>RpUHWz>~DA(&lU^#ojZ&fwW$3Uh;H zI>iUEby(P0Azb*o$$`K?6%}5j7g1&N$%0&L8O^oKla5C-&I-ZFJa?k|-X=Ii-q9pQ z0r3g8blJl9DRcb@@q8(ZPKzEl0kVvIyMrWlz{C!7%=9EafzmL|z6a7Lbe@0Pzp{D^ zK_rc|4x3h+k%m~|jIgL{&ObWm{)_rr>Uz6J=ri0Bij)uBXJG9k3Q~;JE179(abs4c z^FZIeBJ{JyLBR;k7duBs>e9aAw>+tjK(*rmC7-_NyblR+86uQNWCG)+sJLS z4kzvI3cRyEOLU!_bx0G^Kg7^_e!fommHE^(N^OZ}e*x8LW*VnUyP`v+Zce8+0jc>; zNJXUXGXF`^Bb*9ChAf8{iEslAMm)5b+wd+piYp!VmLiUDORlkSQ|=>LBp<_dt96FF zQ>Z_I8_a<-$|Y-l{vtgXBultxl8B0D2CI4@$SHXn8PBGPQ-@p{!Vt2wx;Omb#5SIV zcJ9)%P9XJ$;UL4OSL15FC4zqI8arr1!X-}S$?VT;>SdByl3|r<-r~VOxmd7%`x*vTgF5yM|2}?rr%9l?K$8BJqDZZJFP~z(RM&Rw30fs1YbpLFH^JO-KV<MAIpXeT;a93+B*}C>SpMC$@x0Avc$_h+9e85ic*0L z8k%1lbt?J`d01J|2#iw|%y#AN?J;_@CG0R#)wd1H&dYbE@78CRboioKX?n|{cRh6s zNC+ntZeIlld%|_%zNILV%-Quk@oYwg7vkv0@(fP%dkLI~&g7Jq$2V2se8tfO_@aoy zGeKLci}%GfMJpx(ygxYF$$r_DSKS z_|LVIN1e{U6Cp)FJX^jWYFU02!1Ls8N}{ueWsly|vMXN9`k}Ylxy={Rh{2t`*nG3X zHzlTKnhjxg_(Ci|qPDmqc?$U|1jkWl!JtFq<8Z2_HOXCU(a^mLi6hDYw=>?r+~P|1 zc3yI;i+O3+p)8*)oNNX(Tzg_YI205XoRCO>NcrA z_3e}8u)nRP+?!^bcOpD2j&fIEkr#Hmg%Pe3{1_djYcDgXN{2Xl9*uH@`!wpzHP2TP z#?Q{}l2^c_Je!uDbp0u9Cd=esT_08;KeMWJ*ftkthite(?B^(gCpR|{z7&d$m`#M< zn>|Dn^S=71=hEr{V1j1O$bIkO*~p3`@bZb1PH`8;n5^05I@4C*Kx`&>Y2&7uTraTK zDf4F>X3i1wVLP-CZY#Xkr>(rdPBO$jn0;begKiq1C2B^|hN7_?Z?{3)*lppJV=jG&o17oUfDx^@%%RnAZ8nCk% zM)N0xk!w->5cNxef%q$05@Ykd6AVD!IaWuR0+_dTNJKtq#?T4Bh1zf$lLr5k**FHG99ln?6G&FQ7@`GY>v zWrV2yPM;m>AX@fHS#8`;rf#`uMSP#dx|hE2)fLbr@KYtfy~~?VPkvjvj$hP?d^H1+ zFa8T_<$jTuxM5mAQ0wugSZ7J24N>xmubrJzwT@yO?L%e`<`l{i>YvE^5U_iP0U1VUvcPa`JYGj3=wQW+5|^%IZb>>y2Pqd!Qg)@xm&P!w&pXV@ zqOlmzAF>BCHy^Uoa8a`i9%v7s-EE>@X^@&YB z*O_&Dw>I=;ub}YiHTCK1$}vTtm zLmeAaPk4oMbvI{^$h3PPhgiz9RG!llNu3WQfpcwL;Wlfi+eI(k%My4hN7UJVbW3^b zrEwWdu*JhkmWtM*asH6Bi=N1=z{c@$|L67ybw|W0`QBlVaXLa(v*W?Ol=LRqGyWwV z!Nj&Qbst3jqbBu#jRiR~V1>6&Qzs@_x>K%b1wN0i!!rmtEQ(*EIGYHNh5?xepEj)t z4?Bol!jrhKTM16VJ%mR;dY+bKV(`xGx6QN+fcorGj6!Ncs_-KZ-(%3i_EHoovA1y% z#RZ;lTHNOlD1sXX6PB-pf_6dn_?w8-i7MBAuNacA!+2jtF5D@A>=U}}e2BjX!?(<# zm{*9yEhi6{W=w`gJdTTD%MJxIXKmhpr@v}!Cj=)`Vq9varGsvtP>7WX(TMl7AJuyC z>FbSCU*)hfzFk*i0Rm5pLynamu`AO`J~OqvURb4wu@}uTm;9XqV*|1{S0``MU^B+M zVOA&TTLs?c85MtEM?DTp!|QMIQ=x4(YRFD~wEzm@V23^%`Eq!lz@^L_4ig(fszDm4 zGjlo~o<4m@!4O;HUbLx6GESC14s72_a8Sat7ZuLHmLyf%?$x1xZ5#lHcCE`P)B(iZ z{w24)xC|!FpG=pk1j$g>nkp=$OWESb>?pvWYKnfB7f zu$gv}9Anese2OWOLcVN}eN{`@qoH#P6$#;X)h4pRa%iG`4$^EuisVmi)UFK*-DE;Y zV=QG!mout6{8Nx(sF7Ia&JU46igh6>Q`9ehwdgtebpt7#Rv8x!; zzpsh*0_+S_%-J61l#tSg;92io{ex7eXx~8}0g5uM5kfc41q!<9aYJ7Z9-`lRFz&{x z$*u1w6ccI{r^(5Bdz`BCFnuV<+8T1njYCR$nA0q&SqR^RHbYZE!V1AW+RjtSM-$Nt# zbH%!_Kg^+v>aDuq0EyyU2>%BER4?jLw>OZXE~ZyAF?G5eaJUS8giGq$PcIX%!0!{?d*q|0$ zFrdB5bfV!<9Q?~1@jGoFS4Q%#FVEwN+IL`PyIcG0QF3<1VP!+ZR;G~9u+jTh1PVjZ zn~lVaUuK_WSW)2p4Y}m7xS$6e?xUaGUWO|W82wkxF}UldHWe&{dqt8!=G|+~`bV|% z`j-wL2}Acpkns1jQQI>~8@rDQJzvzNGDc$?Eg!!drYU5x-*xa{vGe`2u(+`#ksHt9 z0`!agxI7JYtm(2c8{^8-Kq@&X#CcBV?9@9JQ?pgx7y(O%I+A2UKVl8u2I1BZI5uv; zOk@}H7WbtX&Q`FU^;hy13+ghlg?FBqE%FleV|8hU2dPe^_~+X6Z?M%!8Zdutr5hVJ zCDnJx#l8s)rv&$F*;77#IM&q=@3Uu5vd1YQ&WVh4mdblUQhlqZp&P$+g`cI^P2c)Ri$&0eF^|XxS|4?d zR7XT)Zb0N&-9wpeCnnKig0hq2metK-3C4*JOp}Jp(B4?+N7e_dZq%HL3rJbac44?Z zOLsfqvUZ7<0X{ljE74w>Oig*#t$*80d^=;wnZlVn-Pw+kl+%OUvu+yily0b7 z$p0c^tc6(1C+?3K#uN?bUBG<;@`9TFXltxSIlxE`hdy5!rxGc;S&8Y2XMgU2ht;ts z`Mg*rftl65QV}9h=^1fJ4{4Rit(dc;A@F_l{w<_kpfESm#Zmg(L&OCCz#LzuG^&2W zXGY7^A?rhH&o1sSyGbq#Jl#XK29wMxwg24G*>p-v=cfK=j4h|9(WmwfKpN|Kd11h^ zM#*;(I{)X9@u<+S!}Z)26pZhQS|B!G=X}Jc2+{)tY1xGjb{!Q{MF0%-0(p0C>TNIv=Wm5 z3HQZ4ine78XB}dAElvrpxsvTLBYH+IMzQ|0imyj(5b9_QlCGO4 zO(EB6?xU_Docu1wF{Ay4pI`VX!%Lr9@>Fixtk=zJB>Ub*p^+)QBr%x-*?FB!Qf-+A;N zXH*`Mw?te3m|;CK4@ZwMy}?VLVwyS=9jiu>)}D0S!qDTu@+4vB6pEy;m+BXguuF$s^LBQ>Og-FKHL8$}RaAW37)i z^jJOxc($D#i7jK4%oHWoier{1jx724j3?KxK>vnNxL2JlCqhc>)R5wDCU-=0{6<+N z5_wOjt7mT0zhQeRW1E zh^MsR+II3ck-A%|fb^~Qu|QjL4QIILqhs9QicM!#jKJKB8_CM^ILkaz1xwGfh=>J3 zbj)+CT9fM5_`PbJ4m3?(%v#UAai{rnHLZKd-Rx-J-YrdK7djNZNNAD_TIcmDWRg52 z;8FmmA=}By+mK|;`XOf4=J?EB5SgrS_8YbTHxzQS&UpT7zkruNQu5dCBUy)cp}of* z!Ryo`OMlYSjRfng(P>*&x>1Egkn7{v5R1= z7mycn$IzNaDkO&bG_i1w&6JUMuPa5;4CK_ONRxEPq^iQ^+Y6PaST&#~u?qjR{b?>) zg)1jtg~L>-*P;P=P@)`@Dt00HNTF^`OS0J4&;f1X?Y&`@P#^Q_TqG@AM?;PEFEclC zF6t7gGmTu>!$Q=jI<*-h#&&lN--X|r+9UhdFXo=wWC-Hn4+H*3=hOw74mVv6a7S+;$W*j` zLSNSHAboJX!B#{o%FH!u)MarlzYZ@0-~Lc&$@ie5!6S(qLj;b(=SI(%GoMw9JF+dZ z>j_c&-M%9$&*GIZT#%BU75H2n;zHV?R zcW_H}$hrTS1a?Nw4u3tH)XXx54rjb`XMMxQ{NebZc%GGesq*Ki7M7#%l z|3Kj{C|fzI^rP2?GU6^cVF6NYx}X`90~QL8Px@39?S-@Y)D`W)&j(C%j%rbvaC3bP zcOIbh<; zMI^B9)|j7MV6a_~wj8P&pCt;t32~0rK1V1Y_boVRf)jk{o#PzaV+T^BWP@|*(#TLh znk;hsM`w>{SUF+aT}Nm4j_4{Se7huj$BW)ACIgn~kFE4zU#k=UC3$CSvx}El(Wr4? z?}gfeie5F(mT~r6BY*Y6?FJr5q~K$*3O-Ce2NASwz2(_==GV<0pK`i{NLvGL2rbTd z_||sVYyZCO&g^jX>VYJV$n87Tv$F;J&Um*PzgGb}rC{<>N_khhNTLbqq7gOEMyjT7 zEt~qC<;-aOKgx61s@~X2=h;E~!{VjZHWx*y*Gd?%KM)dJ@Q3<$Csf`J5*Y>gzU%B^ z@vU|LV3T{Ny?h=0QPRdBh&&Pd?jM2eHLAGqXF|{q>N*Gdsu>7(MX4~w5K30MhGz}Y zNIBn~XqL5}-O#4wwEjS&R0u&;p`2y0V!+t1Cbxy;o)`HmGv*b&BCw*e{aZ>P@63UQ zQbc57Rr*WeNx6hrKlRTfk}5f@U&hXmfnIL4*4C=^(3o9wxwE-{jt1#YzGw7zp5OGI#RS4kJ@WbI^r ztBcP1TD+9Y=tuqNM#3=j!f6|G?fUg>Z+t@9C@)t;q0I{*b^>>5fjb$G{O@EncGNq? z`P$HUzW#W(4@}p!%9~_#dBoD~6#ra~ynb)Nk(^x;@Xmu^msUcmEmP$A?VJiVhgUwb zK;l7%JmH!lFQ|2E&r9*j2keEafBBt$kCpbX zu+~=4uVf8oA`Y6!{}9q<&}_gJlBCuZ%RI#H7S+N4-*Q9tEKgF3lC80@LP~#TbIcVbEdP0O*6PoW z!*q5Muxo%rx+Gc3x0=0~%S|p@{Q0k@Mdxz*-P@8Emd2NDw}VhEM7tA?)LwfutfWhN zCSO^q$emlh{5~OlpJ;hG_7WPY$alUYY^+L~pd^H|bZ5-r-=6Erbq=&02 zzqjLcElIVP+sDt-RHNvgPR}Q|U~`Q6P=28<(}~EppR7;Q%s#_&OQ>cRY8l`m0x*|= z#G#zd);#^pb@j*g3zOEYAyl1Ip+cV7MzKb?Ueb~>70iKs+hO$tj<2kLi>f{=yG-wk z`+rwu=lo1N zWV=H-AUJs-y|21ZcRlJ?5Ts%OaPuy~%f&W5NM$$dlwSBaJq_ttEMK-Pc){{2SM1P+ zValVEqaQ{+Q%%>^7uB?0#r&a5(s%O26VI*4LP%1~18-_~=zf)g^zw%<#U@<_RGm-F z1;{GSZkpdFOP{Zbr;s0g-P`1yS=}}9oKeJgjprTl4_&NvyVhA37F^=s6 zq&B&J)sD2)8qG_oFu&q$rp@OhhIId8gIxag#dL+4-1&WsHDN5y5}LCsv%n>Z7%XZoVoDdWcm-%oG!Bf`QJ>ltfTw?A82lC)vPDCo|nJ;dbLf5 zc3H4+BmWY^GD2BmGtjSwhK1@MKtkoXCMqWArMv(0{B)|X{vuu(;((Vt$3k*p|W?+FhEsWIEDPvirLawmuVBkDe&Gk;xSL12AU^+tMBDA$E4DNzDOy<#H zIT`#?cON!_Qk->S(vF_P4e53r^)4_r)6Z#HJc#<=hTd-iB5aC7v2yPAl~*G9=O!xx)0)%`kbnw{j<7Lttcy4%ZC6H=3QO6u? z{hhRR_jy9aoUy6I&eWciJ8vyDF23yZ0G?M}{O19>#F5LS^S~3cU>i6cycBo$i?!L# zMkoD_>iTNm@wPT4*cvD+r{hz{b-rd_%wYE81WLjO`-^j6ZKV}cdMK^3vb|4y*ul3c zoCzY04p#C^f6epOVP$<8edDtf!P%N8Y$?&-KYl{`L)o756LD>Em&61hjtVj*147SR z52xdkwT@1f->vE@_vTYIKeHBA|FrUbOKY$0uJ0|6K4~iS)z*e%x4USm-xO{*v+I9) zB;lYYt>3d=6w>qxe7pCYWM18EHsw*0 zkh)rJuu#*17%N&U?L^kn29-D$iKqA%AU~WF<4B*Mvh?-Ey!<$o2ABvA zv%PG0Vll6*1ykcF=PMu%W~E&1kAknn%()rzj-%W?;=?h&TuBJV3Y}|w=WVnR6Hi*iz^xV6qtAt;c9302JYPY9DH z>7D%x@TA5Z4)VfmIcY%W=5QWW|2u+0DK2^+=FF==pg*<^dM4zP$klIm+)LY(W62I7 zJhk?B%-J4HT-ic4NsjzvvQiZcE5Hg_{wY*i+H5#+uI=h?WTOsw@71iaJ;0x*zzYH8 zeSh1NckA_;O=(2BxX}gfR7%WlLeCmX{>zRd0ChiLNaPcUCUJiePgR5jiTrnL8j?|q z@RGPAj&>uuDhvbcPMZgBa1!DV8%^L^p=Fde2f;=lA22kw@z^VEvOOxtgnNm{}&_sV(v8KG{&81=T7iqb#B%TZTHq{MVi=3I>>rd{v1O zkd7$Xxu(3JNP5^AQlzm8kzGMT#>UB>YB=1QW2PvA3l_vFg<&wQPJ%-UGf{q(u~&Ef z8WWEB9khi6Uq94kp12$|ANOc|-od%I9 zEe2Hc*-jj{>|5xCGsO|YX7dVcu!77hB7tQ5ZoLQ^u%E**Iscj=?S~bCb)r~O3%&TU zWJAfx202HP^=Q3Gxrtqeyj%3)6*F9i#v|Vii$0)(qcR~CBwz&@B?N~H$h0K@a?ZpF znmzJ4m!%oAx=5P&b@EEWwmTIZJN7MtL_6Wg>CcfdD5L5WtI25umqiV;*Hd0utl;qhDZD!t_A#u38e($;L1$hfJ9$Nc#kGdQM!4n)*qmGf*|>5m zlzYxFmmL~#O*nVPNQ{e-V5v=R}@pCyeENRE`u>fJH6OVn9bBiHpPJ}%pUvZ`B zJ1p6%n(8|TeSWJF$0gyV=HR^%KI6n-vqpnvVOr#&fOR|M_t5Qn#IX-x%-95F!$LR4 ziuC;xbJS}j(nB94I7H^!lARo!uYmN38+b{RR*csO`(3%`{kNwEOyf6F21?IpxpGRg zY8>noDF0wE`Jmm_dEvAUWz@@1--;IoPtN9C)HBnoKoj@}*u?2j)t7F&WbXtp9_ndk(Ip3;PCrV%t8kZQD*x zY}@9JofF%(?GxL!Z9ADf?>jX!-&C#YTKlf`S6BDmtE=yQ{mA14Z&#bbHi795ZTN`pW88|AKo0qE8!0EFu_zDh75m7KE zD?lk2weC>2-Bri&Xg5jy>F7~eE&Cj8yhJaOB+ig6ptd(=;oOL-m7Q)-`7;k!*lw6w zfZNK{B0`a+CH~TnFKNS(`8T`^joI|kd7vqJc%ImZk>8o5bjM)`|yi&b*)A|623iFGIsF^&0 zj4gR+!Vw;ueYzR^bScfT8<}VqJ#cxyzE34Vg%=m)>QjQ3eYO6a*qAhA5tdGIwmqsX zAup0oIHwGZW<2UGppmW03O5ELZ64K>I>LqwXRm-hn3Pme`Iu?8O~!?5WMXo?|7p6d z+TF@*IA03n$ZsSVl?=Wr9;8~nL4L9x1#9Z{f)Hk)8y=eTU4};QC;3576H~ zJ25(|KweS~Kz0fG@q+^w&>?5lELONrK>Z$Adff3wzZp*;4zw3K3Sv?B24(B~O@gHF z-Z9ia7?I8<#M`BSft0WpQV<>mp|6ibph1R6P5NmLHyCJ$ci7dNHCNwyqnyRniVG)9 z%Hpy*$&R#@$tojt5<__w-&`{izC`qUqSF^3E`z;1fQY=Y`wSaJHoT{;ykSMqJ2#Kf z{9U>W>{OUCUt(JWNy)ap-VrIwJG7@O1z)yQq+(RnY}jjnh08+aIdiyIsX41WY8nVn z!%+a@VTl2L3Z+Y23;V%ih>ITr_bt*;p<|fo(?Oa=f)>ouh6)@`->%R5U0bY=1K;2Kq-Z5)u& z@`7tMP&9UPm3_$Fbf%v{rZ%)3=QxH-(~KTzR|!WC&(&z^3_C`x3K9RQUm$O^* zqGD4{cz##4^p=_%jYu%qG;h}RuU?v1Jq1}ufS#AX(T?q*uut3Szw`%sMBQL6Q@XVD zzYB!v3(o%bwaIS%YQ({=nb2Ki0ar8CO`Rb+3E$*El7<~pJ=Utg>SU$9Te5yy;&SR~ zj2S}i|8uI2&Cq5+CrgfH3%)iaDpwV@q(9e~+^t7PUe40A@QW)im!Z5c9*QcO)PYs6 z4)6zmFmx|4PDJyd|I+;7FA0@}q(Zn6K@9EzMo`h~g^saj5%uV&A?Z7J6IJ069DiTF z87o(8Csy*(@{#?y72$)srQz>E4@^xsQ?-k#qEBcP37N_n?-WJzv^GuNV#8=#DaCSS zD-n$cZ2|9WV!lWQ*4-mJ=_2ApAes;SDFA-Lo0{qQb{Z-=L+A^mp;@NEV8N+=(L2ADC&^!24Cn4kX>S&*-{~@iZbgRchCa@db4fDR zxa&E56LwT@u&(_4T;^7=6o=uuTH@Tk2MR;gA?erbxiYYJh~(unzRZKc*e_Jt=YRz+ zhA{MaGYYT0cQSCeXv2=7H%dNdjs=lH)*LxFC#t5bHS`6~$sLNGx5nLS;tDeydh$ja z^quDgXCFdn0bdoG}#Q>xOY`zO=+r4JjT_^I=7U(@cpUii58yO57xTX_hQ8~`6!vD22X zuw%!#U!7s@LiS*en1e0w2YI{93d&yJ7WV4X!XC1dp9q4AHnd+wZWV{XSgJTb0FNQv z!bmyaucj5lOrxwl^TTAw1@_E%-1BpJ!r_n*<&=GMHQdXUTL-^;Ibw&VvDxv3DwXwnY#LY&Tu@a(v-2#7*+0`Z1ugE{y6V5e8H0pJmiWld z$oX(>dV@9^5o{X4w9(^?20a)C2^Ybj+#7zi1P1}w*x)tws(arYR{#xM0HFp9sV~li zu!ixWV^ogHN_~FiqEt!n+}0o~tMC=iNHA+el7kv`B21A(JXwNI>a^^J-^L5s(E+?NtkiMPS*|5@zM*~>Z0#$@&`!IsA0E(DiW}U)b5rH zL9)^Ho=C@jRI+MaNtxUxjqOn<4b~|B>`h35>{J;37-R+E$oJ2|_M$CG#~#H8F8m%P zwA7ZnqdH7c8KbXA)T>tXRm5IiSd#7YPs3i;3Fz0hg=3YlrDgp}9Fi-lQ?|HB#I~DW zYVFQLX6?2p9s(ql-cD*e^0G=eg8a9}wWv-#5p~2L|x9 zbrWu|7HQ8U6MPri(r-Exts4tX`qT-b6?d-4GPSnBij6%LTTbW}6Z({PY;B6>bh9%{ zhlJWiKIP{LZcRGzU3InzDJ$M;6s^yOR(<=5T2}piz$y>JC3LY)FKROnJUPj{YuozU zXTpuY?uQfknsYJ&4#B9bkfGIs6AG~1X8)uV>~#_>`vlG`V7kO+&UYV zL|xSh@R z-;$&NK+D8wUwwf`nX~9) zM1Fb7A34b++5JB(IsVG=rdiHv!GrVV3pAl>pV#7|+uzQ~`Djv#I+SmmgI4%=M4WWS z4=E%2>aHq#O259OkS0?^z{g_HbD2>$^{Cq|Ou%&5CL8MkAb*fs7-P<_C2C(UJZJ-`O9Lh20ih8Ag9o$D|drm)~h3blSXzS%>S-wULm8-Te`Xxi5=WNj3XoPCUquaF|UZQ%-=E{213)@2jo8wAxpXuUL<+k6&CzMDk)` zcRJ1Es6I}KgD2E#l`2MT=kG;2&mLqT2T@9U? ztJlrJ)QE)78+X~9j(yk?2gD&{;>>75R111MTD zUvI`+_R(C*$1Jc=SA5ukt6F`)*a+0MQrjy^Q@CAQn>-ib8_ z;k?wv+F*Gq)zD?s_1eQH@F50FPpc!ie279dcg9-T7zw%3yvD#FY_L9{O+^2905jMD zj#PKv&%rmclY<&QMNCa64^W*8_k&UDzdtlDbBUtRMAoX1k!XEg$h(%^ zeB<@EV1XzvOfV2hu{!`zlaz6aI!#JOY1+A3877#SSSMz5A1vxPkD{m~S$eN+l8O=2 z4uQO!K~w7Wu#35g%Z%~Vxl!1mb~9difzXC~mj+;+G66kO+Uu6YIx5A1HT+>#gJ?|z z!hhaSeKi8ARI%f=Z2RQuYMl3AZJ@*AC5Oyv?dN zL#-{+%6D`gYCzcr{g$Z}N!#J&$T*sQPN^#%uH73NE^r5QBeo4NA46KM612iS+6+|+ zO{R^h3PNcOp%rvlg#Yp4)1o7`4_9(kpz2`xGgUn>pom;ZUYz)Q%#j!Gp|U5O8nvtz zU-(kh&=-lGSp~)q1I+bSUzbW6$U08|sa~zDXr1zYaxc@nflIHucaL80vT23JJhnlD z!Fe=sK9L-7SUHvAXgoA}v{@)sCl>74EyEEKQwhNN9L-b4;qgh4n}w1Qi>2|1`WmQ5 ziOfSDPlxrmi;{^Cn&`V*`I*C0B9KC*rNp(UuG&UxI~@wjpA;wbCVX0XEG8wfPjnzi z#^iO#RcAj|qD^G*`+HYUyG<7`9Gf&7tij;T^#hCn&9@ERUiB*J6@S(Wb8QmIGBIGY zdHmzj#^Z6RHNfRf8!}58H!Ibv6N`%E>uCLPomL<14CZwInl{)*Jct4v`Z>s^+F@((ks4Fl>Yv7uYf_-X{1kyWcVK zz<{=V(Gk0(GO38E$qB1JrnoxBgwfkoEGvYpkYK`$YXHa?Fj+9B)ng$9$`eAc&6p3chwKmVzg@B* z&lK)nB%N=#?smi7kI=?lz#hTCZOZ;p<99w_{!uN#Lf&v_5$~JK`+Uw!>rd2)Qq+I2 z>JuNwqK!(Fu7LaUJcN4{aFhDG%!9LB3(=;ay@Kymr!$|GDLY9;0MXD^<}_jJ8UPIi zYpd3--ijBRMiEyGU7~US?oqbFDCWW_lwFFdoe-;4eCyRbP}jPy6-S~wpD}&uLN&Z@ z?hm&Od$neHys=;Khx0yCmk@EOVs6^1mxr&5)ybA#hmzyL+2r31)Hzcs4xvi_jSMA+ z2BkXLGIv_9n06UNjh;cZJ8@S4ymxneOZOc|Vq(L&H)(R&*Mn?=_0H;^+3BIAeWEao z-BZpD4ZjSr#%gmg+?dVpa@PSgM~LdXJZwJsn^7$3sWa}xtojPn1obPnpVW(666Q`W zgsi+1v4u&cJ^egqlzAI!$GNV~jVb3|FFm@X`zyp+UTg5#faBYZ zf#8)q(dUc=pL>mbS;*BSFQ{H2D^Xt@=5WpYZH+X~S(QoQSi9CVOs1tl{o^;^7pw^tu1-!SP0%4*#jA z{6F>LpSoQ4e|3nvyVu->bGd~h+v?@bzz0=Kz_j=l9ADURcBl7MlILdl+Q#H#yI1NK z^nTm*=1!pdm6}?Bk0XI~gU6ZoN2Cz7S*EajS^Ej0_3FemjK>)?z(4}h%BaKyo4epF zV)5>&Y{CtFL$&?Wz3@ALUUvEdyFf+Pt&PW$-j^&U9Wl!%ctPxj=Q zPu~}jj<2WgCmygn6)l$SF-|Fyw*WE-$;Lb=@)fe3q}QpOsd;2<#V*a5UM?XusjjTP zpM}#$lB=MS%mugi7qa{j@zvPxC63$sfYi;u?y$IC^8_c)Co%p=9B^{gou{gX=ADl56kRimI?pP9OXgy&3*C3>W)=9FuEEo1Gwth^*3RlseHGT8Can-+ z+PC|Q`L99RD@(u|E@%braF(*}@%=^8S)*Ey$19z8YfRyCR?gd(2jnehcNFK>r$y!- z!Qd@Bvt-Kk9aq;9c`q?HuWZK@K>jmAprafYeL7!pUm(5Uj@w%0=_GS_LYyLQq5LfYy9t&LPza>A zNV&CD{pbG@S{{-EI}eq%91qr+mYR$l$_4Juz-jU z?wn8J@3}a*BS$Ufw}GV3go%S~%=`FPVV5Xl-Hu{m-_l3)oXbIrL-x8IUI zQ6x^0?(|RdSB*1(`L_t0j1rekhw(p;SgBnz4c%OtQ{8Bl-IDy+oRamvGWF<3aZQLO zE)E*^tu$~ROAZ?7bmw}^)%_=i1q(6ZyWCy)4{o_@R$0c|IY$)Ld{RZ?rH}0sPDLBf z*mj@43UUA?$zA@m)G2rU-b%g;=eOFbV^-G+V=?!VuNE}`a%T<7H}1qcWlA!#M> zE!@&<X$ zyh`ZMuB*}#yJd&xh1aqiqn2BaKjXHJ4a>Bj6Xf38=X?pmkK^~XP*7QkOfEI+7hg%s zc<#8*;um88lLs=!bjDA1o~kocvBfY%H&Y?`5jE%o+rJw(*kSm$PN};6S|s}DX&aHn zFIUrFiX-0@;2YtMu`rYW4ewBcDF`Rngi z5!gQ~pTl*VoLkd=TPET~tg2iruQ={l7;wJBZDVR*v|PA37JMbQCK!92MgBZFJHE+6 zZ|9D$0JLe0zCC6?PX9hHU@b*Wk3me=zdjBkl=E(^F^qoIjx8~qFJQG+jU8!thkwRB z*+(%0LV2jG9OGj)ROF`frLD_b#xzVCwC8B@WkK_&&zkh+F1j8c-8KdJtt=^)aVd&3 zLt=FRNtf}aGoXd56z2BaPh827Y}w6phFFRw+_q)|BYPH}uosvtBj|bdmWF}5c72Xe z>U2=!qK-1!Kj8@H-k_$Daj>AroGJ;a>cwb)eFFp>Tv^S34oI1vjT6or7vk5hy+AhT z&*O3{H6E>c)qw_8BGjTi-uQf#Nw>4tLYjZSV8t38ubKd%e0RNAw1@eqvpK zvBq4EF-Mzr3fz+xElkLh>y$FV9>E6M_Erf`UnDN^j{L#8k@MOoy}2{8CU6-Jb#?Ko zM&m49jO3YOh=}qCbd8|(t~V_8zct3@HG!Tqw1ZoQHD92Kf6$M3XnAi_fzPf0ML?Q~`VV!33#3V2PeV2nfTwWdvQ!EB-y=OcZW-6y9Yuj zoIow+;~qus7`O+!ssm3_Q?{x=&yaMfwS2!@Yr$^#dV^W}gIq}+3@Qu~=amdSWJ8LA zeFUv`%dGG^l(qZ?t^DC#ArMsBYga+M8m7zd_2yLhN)i*r41cxQwc99wsfo=ZRVK$83z;_e7R4x4iD%eCX&y(MKkIb^3PL@~K{) zvdEp)gF8(geao@8nM?Xfb=372jO5f@&LP^tAC{7P$N)WEUBu6yzu%pReMutz1O6^- zZhrQ#=>ptp^5aF^(tLpac`2Wl57@NoQn)10aNCFg`k0TJRx2aB6+nvtfR(?a-!K#3 zBy%XX6Baf(a-$m@G~Hf?4`i@YhsI9%PapXqZsV(W(%A2uhmD8^kJjtY(%I24a+*--c<7sa$ix zorgN+LRSanz|sPt>r;HrDy{5xRVKZq&=1T9!Iz$@zDNt|v#XtH%po@+X}mV}ZzsUs(2!Y88uqdjSSdrGvXMB)py zz)e$%MyiFL6BRIF>fDZDAqO^y1NREYE<4^?%K;R`u?0gJ9`Fl^57;}{8Y;9Q6(%Yw z&^d_^J5rV113()en!LX*+csTd$KsUT*v1BbT5hmRJV8!`@6i`5L^8$>SM+r zH$NXN*lb=qF5`xPVQ`yaU-eGVq~DHfcVK;II5rs8o%N^r*-bQPuZy46c8oVY-wb6P zu6gB{xozJ7a}Q~`8J;gWR_Q(9?a-b{%bR@>pDZ3C&VV-xHm=Dn-t{$UqG~-PZSiWt zYQcWgO5;fEeL?oY+hD%aJYeOr1<+EHtyO8_irdV9Rxt%{fTA(^;DtzCdR}c08`O0c zhJJ(mpB-I)f0d3u9YAF|9^ILDLXq_7&-s{q)P1{sdBN6?|CbYTZ1l*goGhB zeBgIKs34>?g9Ne=8<{B(G9nUO!UO{r*~9>eH4so$1a)Z>RcUL=64h*7v&ZI7Hn`>U zve~8SqM21yb5qr$#yZvY`!uJMDNtp%+VAJ=cR-HQ*S+1b-c;9a8$$O3>yUcUtwnSe z77p|zUKHE~ENIIl+-u-h8_4d~Zd=A@#)sC2Q-@ecpAYfm*KVBaw?t2%1@^t~Nl*yw z?18zk(LMj!3G94k^S^`g@!%9WL4=WP?3S1k?w;h8_jEzMT<=>6Y5f>xmi_5 z1YCW=Q`6z=p(gKie3t!2rxyy;V1msIXf?Io8j28$Osb!+Pn$B;A2a=Ci#>@6Dcpr- z&a|jIy@Hs{~I)X?)|t&RAltYF5wsZI!0+%w!~l{u(YA zEo-y+$V=_ltQcjp4GhNfE$&Z(&1fg>SO=w7 zq05Zl3IKZ0HF;pTItGnjh3Q~>ug30JJ3!&MuRL}}>!ImhM%Gr>0ymw6fbSiB`;*KF zvFORSlYKlI@T=xmh-PqFSH?2^SU4!bkb>CZi~q4Jt?E|T3>Mc}kFKh(If_KJtV?EI zONShlD_0FWg3EM(IS3U@o7JMWA$XB^EHqNW|H>D-%s{J!{iSAAmBF*}spwc2Xg#FZ>az=R$IOJ{q##9x;JlZ=%)EdYRj$Qq(ky?vZVX9 z^V)RwnR2nk?+yK?TT67?rreJ3k@mnRRCN1tCC!&&z|akP7Jqid_>LQ^o^+4awPoiO zA2KjTaj!$(c_W7RA9rgi&65QXA2h-#2F|!)PEj!J)9+@g-Z@TykAyQ{=7o%bi;Od0 z{DsUeD;*bsv}-ZLd+W&ua5FHuoyjs!WHij)7co?2<4OwH4YlNscchQ(uN(lYjYg18IxG@RIv&O9I#Z`~=>-Oa4ZG%lq|30W~1RkN)pF z;4K8HmF5Y>V1=Fp@TXyJnKK9HW_n;Gr^F=|=v&FT)0~fxH=^y?4ho~9_s|@22zw() zEF;YLEV4SJ1}a_tLlU;&@o(&>J^5F0ZO-<*{x9Uf6cd;OmX~Li)a(78uwJ_i`472j zo#&1qtqg6z-V*xJb9U~_^?=mc)o00xd(MRXrBWo`vA+E;z7X1btjeA_Hb z#|cY9mgN0>y@;7>J+p>@NM zeFtQY?Kv`-Txuw7a|>m#S`sMGDJ38tS}30NxiQci=T-nz<$%;Y*hAF8jFj{}Dke(}$UnM9=^Ma{j+8{)x|WP4 zE{X(IyZB#Z#okI-H}NAriHFkK(6%^T@-$oxrKDf$_>glj*U7@u9VLT)PERwk^?({`F~M`z)+3`ENqQ~{D}B)&4FLL zNd};nv}DG75-BjOZ1==;S2H1$>m2Mj_|_F|mBNQn(OFi>Ev%0;b^+WLXJrAOk*NNi z89;3sYqoQS62g`Ww{aRpoyOz8O`Q7i3g-dg1{~cX{_1+hUhW(#m<1CcG1$#C z^h+R-_{Fx;Xp3c|USWlR%{4|^K>>f9@LDZS-3qZ`o%o~)Os2e#qvn%SSt&;EPZpp8 zpjUec*|1hwU>+X zg^LpohxvWedpqr=hyN`(1Jjvq;7ZEUxAN>aGl|#2_7Y`ZK~2HnoNwGX{$Ii}f+0rdN3f(?_`)FqtEFvLTKMTE0{dWRKnX`?Y%kedrclsY zvjb~h_K(H@;wuNn>ue-MFnJ2?2o%s1u#(3_VPznlg4g11n zJO7$@81=QFzI3qng?j?d6%z8^> z80fjB$v6MR1sVD=&qX6PbjdoJo!WvjUfOw57K%KzY%Fh@oX)obKQI~pA-sM5qZad#K{^%#bLtG~TXz(( z-=PZGF`erHSCiM>KU31jMI-eR>N%rWuHtT06C8zP0;mZjAbw}@`}1#b0+RW1IzaI_ z13?71Sob7h25b;LrS+=ZW`B+R*#_S|8~_G#$Q8=?rTo$>?F2?6W`&Np0Bq8SN?&;J z8q5NrX>y7a9Q1(*fk!c$jhZ||P6KpH7!wif;=DlG+|nKX=VVT}Ovi?C3k_W-!$fUa zz?y-=3;-8aOXX~4_(JAjZZemySJ-;2yDZ-qOj2G__!5qs@)DbpZAs?_Wdo5HdSghqy!B>Oy z$aS73mN`E;k#lrKi_^>3%UUDl>`-;qA@5K+1ULvdBYF@V3> zA%%plWK0tBCd!f-q?BlAu^!fj?%(0te!O z0c5<^_W~3Ado#m3<7|ov+{72qyOH>VJfBFswz$XlcYXN<+(RW$Df8B+G3R=@26~_w zUndf^gv}h8uS-`0h(oQbVA^g~Q=NS6har`!^>gvggF{0Jr!KZ? z0UVe+@cn!n1Y0bIX0Jj?u17pm->Gm+)Ai)qp*}Syy}+y9qs2CY2dPy;rTk6m{EC=! zWi)C-9k~zzuSLE6Bo&e8|$q zhK!Vt^fyZM7jx0V7v6(6Kks)^P%ID4R33?kG6yz36g2#j)?3HhHbp=egb8@xdLPjL z@RgxP!bb_KXA{c1NNx4LnSgf zuZ$8hA`-De&HKSCS;Gl*6R@;GBBREwWCSDEqZRuQ{2|<2ZzE=}05(Vdq+XHypoLl> z0#?>|n2k|PjJM7>tN8eX7tA9#AL$f#E5RN(+l(kvXy*AVtdALD5-kFo>a*7C!`v60 zhP{3Q?i4HR$bUsq^3bw0SSlEsc`Z@?_7xtp1~zwnjPh+96Pz5rc#D*8p5OOUTXaNQ zTH_dn7xmC;O4s=-0p@YWOAkk*6vcloSWpyJJ2uX_>X5hQ;zZu%x>Cn(6BbA`_F|Dg z@OJ1o=n+mqV;Gl#)vYO+u{TQ5dmnuCx7q|Noi6S{Z0FOIQla5T^AZtw_S0R7UD`qe zPKe&m>pYN{oBvL%EG?Ca^|7o(5ukm1Q1AfO>GIbgAF~3mfWKomeRVh(m^kK;XGTtx zY2vik>Q-31LqoWx%pZS<9z%CAj=kL_GrpEkOl*3O1dLtYRG9<%sMyoS?@;n4h?&&4 z--@%}{-SG;H?y<8Ej5x;iF4UC{#fhr58y%x-uK$ zr@`XTiVOTifVY-_Z_u$zU{VuI$M3(;BXmG{HooD0za2*8^^)zcP&nv|@`-HP$6;nrh9vkY^B~> zBUx?gZ%9~ef{G_g(n>y=3XYZN>pWbUTWtF^27Oc?0iLoKmgABg!b)Pm9V7Qd%+?|$ z$6JM?1pYFf4j?6}Xb$NZLe@t^!PQYTyE_}x4(hFF3P)*68fd|0m{b8ME=rVw=~f)N z%~?1W7=8jh*T3$I?*OhBilu|ct-eUy_%`0J=b(3x1#8sUq#^2R3sC9=v5SF|} z@B5XU$oU!c$mPvRLmC~twIys*s!6J<84gR)0IlS4=T&Wu7seJN-5~rKbzwM^)Tzja z@Sa6Z?>yXYg(=KS`h8z*dNY(2&Joq(hSd=cO%v~=NjDSf;G{by_Q%~kf!zTD~3nn)G+(xwYrUtzdyT! z0RL&0=dIH+aX*?RYMp?2rj05x@{eX&Z`f<1pZ*(yB84iLE<~td_PJFE3#;G6De{jo zHD!Hw6sm?;1WV*(zmgN1QlW)%djEZ*p|WLtGQXKq^tyI4>f@sOhLDeKUbkw??-uaP zR_cmN1tMGcl&-$R6o;szBxBdAT9}oan>Ab~!LbOhmM*W4Xn=135YhQ094#Au zDK05wg1MkMT{_%wu5*4&?9r6k#48kF(sMxvlMSj1NLdu5dKaWpQdQM^MA!(GeaL0Z z=~|=EsO@%_uYe~BkvLChU-mVJI691?Yt7RwNc;WyG!#t<^z&}TP3zKucPX^l)0Wes zE1_klJOrVMVeRKAzK3%K5H=WFW&FRGC9*60f0!k@g&;O~lh}$XMZ0=NZ%acjevn{n z-O7sED(Qy$#RUWnkxWq6FB)UE)ivC3)Tgs*l`=Dm+FmJSi)7j|o z(-0dzshqVf*5HqN>1QbP7<>-=&*3W)%PYX2Y%haKfUVA)HquHKh4XrYKr%*yfyd|i zF^-PB#yPNHAEgajq!!^lS8s|1gKwkUCK2hKSL-DK4Zme zW%|egVtr&b@X=bPBiAvMMPr8|hM_(Rlwx`T3R_Kqb#c%pOc_KsHvj6bTH zxq)8ke0}|Lz6Yl7p_>W}Gd~--){|&u_{E;^%zEq(+a2HcF4XcA9znZb{u?yD=LV_* zxkOKMil#)rqtNQq=05k+Zv2D-B3D+G0suHD$i^M&QC(wQo10-SJx9eKCTtk%elo9= zs=dC##S`7r8yBohCQtd9($!KW^s=qpTS#vKV!jn0My#qt-|7Jpk6a`%lV8ZQ-rP;V zsCHW;50Rw6gfpFGGZQK15s8N1zvw_%coR8$BqqNL(tFgWa^gw$X$3=gW5QmX$N=$_ z(4%^ZE}QgK71~I*%dqECvxD5)7}xO?AEAw{2ud_^^R0sxY_{6z!W)hQHUX`NIcs}+ zYa*4NoT;}1n$%SKiVWypL561983&F7O_a_K^Cs9jW2a2Si{K4Vdqv}E&YY2SNzNLn zxCuDR=s%vN(>sxajb!Pb$oc(-Cm<~7bxge-tXM-YtDY~Xz8lHJ2V#}(64%y;y}@Qp z$=0W(Ayu`%>N=xRvEp#)8Jv3lto5-g$I#~x>U=%|Wl5aAv}ldsm+zPd{Vw+SllyQ} z2%{Z7?m3G*zO%`5lt*NvSYxiN&0y*<4$iVSCeSY1J(7fZW3!b$EfV%B9YDMq`yMf# zr}pe|CUFLn9psm;)GrB&MtwIW%!F1r-TW#fMKD^!ObOiz8kg$Eg@B+qi}N8K(Y4n& z85r6bIz)6SyLx%fSEBR{r}$A{PLHZ3YV!X;%cWTErU4zsYOtXueaAH#x?yb_lp54h zv;Z;It+QiJl%~Ey@q7tFz-AB_B>`OqG`EA}xqDVrlQAH!c~v$A+SYP33Eh!sY(dJz zvWTfkDNP*;ok0=jcVut67E78)9ix8k&Kk%UJ^pftIq%$GNcTUn0&F966_*V)KDNIm^wL2xu1TbqPn1JE$4seB%E5Yt;@m2=&P2rl9$ub3&NO02HRfs@Ucfl(mA# z0+Sn6OspWdkWSV0;b?Crtvns*AJft@#Udwm0Dx~4_JT)e?35ANI4<}S%+N)>E8@Mu za5*GApdLBA9;(%J>X3Hg)Mky}%1oZbaj*j#4%!)bSPas&rG-!e3mI*-?4HnN@tWwO!x_9v{Y9=(xOu=Wg>Te`5aPj{ zYu1;xDfSwz#-*gN>o31#Thr_z$nnMXZdi*L#T|gesr#@QC?3&leydn|!6Y*>2z#k3 zcj%ZpTCs8ZAY7mSV_I_jwXjaYguuU2=FyIhV>#m)><0k^K%nsW#ZKp*4t+WmB9JS3 z#UMPmXKkTM(F)9292yaAp(>5*W9m5F%TzdT%mCan`o3KZsmQxb z*ic;B&?$My{D4S*)$Bsp2vf0}n0E+kp>olS(@+qTxpr98qY&4q>tpx@oSM5_)*u$a zMmC0;i>`3lq}q-&<-TkMrydx>2;DFxO)||jOh65nX+8buVzyawDiA48{=}XKMYySM zUL|XGTq>$X%x)fvHUQ~a5^^cojQgiiTrtYtbA*WkEB%6IZipBEC24*3Br-UcjXrzS zb0jj~cHiC)#{EQmQ7`U5pRPYT)y6Zp@ENvoh1xs+TspoN_y}CpikpEHw85&Gbg&8n`5L@Dkd{?xUrJ8N*-B2I6P- zJI^qV!;c}~yAVc(r{oERr>^!vK=!G=F65~WInk+1hH&K095u}DyD8GQEJ0NhIF=5W__l`S9&vGaQ07bD`ui@Ym^J$cOg zOj=8VTpp9ghcw(SQ0wd;F1`GM{#uHIpk9cFnu(M10g|?XU3znC=&p&>Z0@Mc57d z;~X9+M7|G>ljW|U3O9JKf^dba5OXue>8tTDqM^07&a1Uu+NN>Y!WfZs9?m~WN(NMu9xI+D9(!*jS8#i8i4xLrd}v;b z0q|bg2%wqCdd=tMR9bbkJ?4%7IPgpB3oI^2=p)ZdAYA)@MP3r`zeP!CKciTO(`laDTDu>D9PP^M=Sz~ZnkBh?bfC&Z9DA1uOYKV5 zC^Flo&rvlH9r z(Dj<+ofVVGBA(aG?rE|t@J{h!^vAP2es|`gZ-kDt2|JdPkFstsfA+$~i0GaaF!u0MH|O}NwbN#mE#xieEf!_~F~Ps~gwsb-tAGPi6E znQT<(r&q>4@NbfnN!yPhqDyXoL${(j$Xp${o-!%U>~o_&4)wzRny#o2P#Mx2{5|5 z3NJKc!DtwL^Wb^5HiUcQ!b+)D!qox$J9UVgRa29Kn*<27x`S@MyPF(l;sIkg!?5?_ z(|gTuJhijNpN7gFEWQ8)_5nf$?0~<+sZ%Y3584*79Kq)I!!uh$%BBnf`JE{c|7n&r zKP4w{N79@Yd%n);z&sRV+r7fj|EoJpH#ya)BXHce66LGcp z>;B*efDs4DlwuB;UL?tkVOSE=$Vl|ko{7gRIM=Cj);&QoSNk2mLL#5n^yF;Xp&ZK{isM^H90x5I_Y>tQz(7#qF z>K(U85!ovGI;z*ZcT##KFekr7)(w=4d2sJ}5;mZ0bKl%*9h*EaT@voSa%o>e$R*zB zHQed&2?B?14VoEzXZBdh(k((rO z6AI}bm-ZMSpe{il2eYUm1GGD6539C(bk|9*Jw-Oy6g0N*EW^j za~6?(a2LjZZSOVNH#~px4x5pIoO~w~Vs4v}NlBw(3AYy`6H1X~DYroeJZi)5w#v&7 zUgiT~y3Vn>CoiYu;d4PzoBdyOI+iZ~Z!*|9uHbf>vg<=y4PmtWNP!s{$A1eM(VBdFly z+8wvy{6p#QdYzjaEQ^c0z0PIK+WBHn<8H>EKi56eD_LSMu$hyW(36&~ufO)r;9&3U z3ZFfvnWy#kU0(dEc=f1zMVssWPKMu~rS-dh*J97>Pu(hlz5BY)-+uJP^;D0eT5_zd z!+W7z=?b33)+cPvSQ(p2AK|M!%yOx>#w>DDj;QR^P40FOe$;6-fv?Tui*0aVZ|%*E z4Vt%#OqaL#w0N~_d)@h#o_E~l z#!mG-*Bb9DvyY#eH0LlYMZ0|C&ciIU)ulQ~&F+cHWj=JpG)=RhGVI}OzRXve%Y}lz zr3ZU9KKfR~n`~V3_0y{6Rd2gw_KxZvv*)we&qbEEMD*(mw$5e+J0)Ba)v9 zxs)q5RqmQ{(N4=xY0957`!D?6vwPBsKB0@dH-9PbYHo6MPYmv}ebsOT<|*JZWMUh__xvPmy73I|BxfHGm&mD6{d|u7UmaZ3!Ocv{qbp9H_GKX zxuvPWjsNd+Ukx8#v#cfSr#H;p_jY=X@N3B_zmImG9QkHx>OCug>ZEtlTjf~N22aFN z@%LF?w*NA-v`DW}zRe_Y;C+^X0m$*Jf{py+htl)2w&Jg|T-hUbt9j{I|HJT4DkmJY z%XZIJD&1Etx=hk-&(?*TbDL-HWrebfuOAo6Q|Rzq=(stvtt8 ze)tWoC!;sgmN|U8NbjnQ<+*QX9lZ^r-A9E|TQy={A|M`jD0@>-PGpmArrJ&h6Vh zwL)@}!n}l)Dkb_8%$chXE%zELxWDJst{q`U4$U*N8*S<1TOyXvdy`-y?ND{tOD-W@D8!LAM7X1Q&3wqSUR)uGjYN6$-}IDU1_i~LHn%@+3$ zxBgtW{6>9pXJ@EmOsuNCf+DMl>7qCN82rN?6^(~CqYerd3HBZsqutOW&GkCV{Cu04 z9+NI^-LYc-j#|kt55qh%X1x)5^T_*2*!Vxje2Wg$Pg;;`ekuFdXuZsP4#9tn@^3l1 z+V;&zE>P3F`7-;^)7*#;S2gOhl{F{0_@*`luK#<$xkxlq@qwEkYkTJGm-WB4e*1IU z>W^mQ?T)y6n*#5ybiQZ0<(2Zjn!2+$A12+aK2<0+{e$_)TUQo|RoYbkx|_4L(^hLC zwmGe4V`BSs z#j~QsgT5IUMvOA-^@4X>ehrs4Hf?dh-)$L__wHv}eajmj?RK5YMD@u>EWT}E`Mxm@ zeeZlyUR~+hvs){Y`Hmz{%_w!hc63whxa?}91&6!*m+v^|uH%-5z=@7H*@R!b?8BABN>U&cavTschUZD`Nzx>!Mc(vsy z&3H%kOsS0IBFpUY<@?pt0`I=s8`F2C=?E*W$z+~W^3OYyl}65Y%%7fR^6T2)aqqE- zDhuU*Fq!##rcX4Kuk||S>UZ5%Q?`0(y7Ypl*~gp5T@Z5I+hq30@u689-^AJZZRQ@2 z@{d27x9^d~tkcG5tb3!(6mRB^43UKWW4tn%I@!y7Pb~F4wer08KC3N(BLi}lzc&im z;n7jWQh4Q1clYb38P_wITNI3P_Dhz|YBc(2(PL`b?4=i7w=_z+*Rn4$=~bB2`_yZU~(o)l}BLL@&DP;`6J^C-99e){1`;uxIc3rDkz<)18y*leCXGM<+fA z=zaZk_Pj5x$1?aHcUoPW$J5)wyZ+dbvohxHV)ffg=WWQE z8;Z?wIBKrFWben0_^lE4zq5-Xd~Ji68)A}OZ`5yzP?(pyqa`!uw^qWRqFm=noz>Zz zPxItXwRM+IuKPZgR;cP!;=e&{<(SDlekDR9{cj2S{rhT{%MZ5p zS&m#kIlst7u4kq1xV5)WNICk=Tz$2?^1eq>kg?>I3EEdyJpA>$J;0SEh+?88P_`JJ-MJKxu?ahs&3*AQ`@S#s*1eYj91h0g*&1@ zTtY9FykCNajX3))OKV1*)vN0oWAj!sbJksa;}hm9Zlar5@28!ypmat4jmPGp%O06I zKKm-UIGXw9PH1IqPQb;#WgnV79(#LNicA&#AXxEjwHV9(_SjE1c^kKfZ1{VepJg_+ z(Xv@zq%r^Ok{g8@70!KT@(~5o<-L;Kzn*crwRp?ec?)+M@NBI9t)zU*WTB*BytcDy z>y{~}jXhK^=1%{aIBCn@mY>yqj;iyn2iL&!|JLcJQdhqEc|-Pr`PXft+biA~_UxG! zo8mX=@_Xa+I)$^%yWWj9-Kwm2VWPsFd-_K;?xdbbAK7Xx@oQ;eM`_2y4cp#Neo|s+ z7SW^6xp!ALF|wp&1^)|i2K-fdd>o=G0vh8UoRBvScR(VZ54-jYN0{68uQy}L369#0|k+AiTAhsHJu2%|&y z1Vo6+l6wNxbkU0e%vsYfBx?MER;=Jbm+kmeS>Yl6`m;j<{X)Zo-F-rqg$BEZhpq}- z#thf<4f2VI2+pW=xoRLjwf$`1y|a^QBC2HeDd?Q?Sv-4-yHb*E@tWM6ZJM)N?Of!~ zRbF2!_F}L2sax6eZl9{Z?ak_2oyc>cO6_Hyv!3;ZC;mr9mU_Bxo$8*x^=Mj@?xy-{ zXY`&md$O|J{k^SZL(*r;jh(VBbXkky&5#e)&4Zz%MXk1S^G1Vn ze%D&|dAc08{87Ci=g1+=``ZlG2rNjNCVN$2v_>Y+0V{vwOab$@*w-D7y|`+X^o{ordgs8A^oX+?f%Pq2WGDgP8x}!kwEh3SF@U z7j~u1>QK=+yRyomsph(qtMq5HTe8ZI4yJ}LPR{G%N!)rtXw;}ZUL(BU!vAFZv8sY5 zyKCyUG{GjjJvj}fLMAIlCWjoElB(tok^H#ALO#pir+VaM9yM{TpRbZ7cc;lO@mCzN-K$+CB|?DekhfUS72%`c z5ewAU!ly=f!zn5_?0@vdMDT^|`gd840YQ`2<(ld}^4eE?M%>PA(q;8|S2rZA&k&56 zAT0J`cXb_)XR+LYZTVtvf0xarq(9;bzowv)ZO z#g+2wqFJXUC$B!8QCsbxWjKx(vy<(L*HjfT{5X2)NuE7s)CL>8w@_k1d-G|?Z4-Ok zPzQ`hq)#N1J!)#~gsvEfJG^8aIsc+&|3QOsF?=OyR#hg7lby1+oaMh%Kr}IJ!SmMR z6%YS(@)l3CHxF3#_Q=a;GYm76ojaZe9J_uf(8R(b;$_o{N&dPO=!wfDM}~3`zn<~C z{2gU>=50+&>>l;Lym(Ue*n)DV_O!A4)IGggWp)=X_W8j>HC;(^!PS#s`fLbZM^5n0 z3=Q%BUv%02%~p8$CO_}W>ADvq)Oek5fv|AZWZtQrwC&3lO0J5&;=ou`cZCt7xsvg7 ze9(sRZ_C@uV_Ajzv>BTO6@Jd&8Z;*VNOGQ&P>x3K^yc}iaywkoSymIvFSfX=J1q20 zWQNYV%M8jY{4~kKnqNXa`Pe!y{wk&Mo^k1oYR6hWFF5vRec+0!$O1gVuFJ*W;;i;n2MKwnj191LRCs?YtEvNM(}^crZ+!!zwY_5 z3)`YCG+xkv7T}cgfz?h|4Zfaf`8Jucf`J$KG(4(hfpoKneK z#Y@why5a5;(K$&^m2a;oY}B8v&=Q^zwwooNA2H)ZM|k0)OZ54B_|+t~Zg2{W)XdMG zlOE+8c(P4ANk;zEGe^H%?G?eewA3)Wh1VviPBXSiKY zP|9SzXg}fJv7v5s(+q#(&$AAmOiZzgox57heO`b_=B|~6;rXa2}~ zX0?o&a$Hv<{);isIl1jTB~tG`R2)C|!%_BpaP5V6wOjSBD3y0)rU zZ=c-#0CRq`us!KvwdSi8t@FM`!clT zkipJ_oA-Hi8O+N0elzKb>QS4#qPbzll@*2hb8f{7)vhpKs8^po`?U9+kMy_c3%a!D z?NH=#FVz(Nvi!5rxPmLWk`d1z+Bq=zG$cz*C-^N@F>-PqH9}upXlfdAQJL`3N%o<; zJ#U17N1Brt>!jK@6Ma)bdfC`>a~2z(DK>7ccCFG*JZ#kdE#z_Z-qvW%8$DfTFA1@j z#-{7+M@`I$-kwzAd$v&2ihozSR-N&Su@`rU--4sC<^6a%|Pl?HnoIfEd`^I{!4wmx%xt`ZGN7q}e0OHc)$I7tPxYF>UPC^?Xu6p)7k=0 z$&OSJ5{v)KyXDK?yFX*S%0Dyi+5A>adA`U-t@cAzn6Z_w>ZJoy)WxLyDuVmke~W+J zP$+)lY0I0p3Y8wpDVI8>?yM3^d9v|JR&ZS5m()`8oiDufBLBAjDY)07`JGj%w6|iC zWsjjuhFZ3v)Z0xPT66tJhQk8bY?+&7IjM7o+3MC?EKVkkf-$eh`ewZd#(DsJ zr~MztJok_f(#OYqSa@g{Gdwbo8KHa2P-u;T2<>wDNlkMz&9&RtnOk&i^zzjWa9=v| zZ@Kb`X!w`N`F<0ho}cl4?rD`p)#o?xJ4t!go7_GgK>I6ysqJEik86bYop;f!@S3XM zx|04W;|tQiZ@d!BcP_Rh?14ZrB9?(FAy_N9TrEC`$)K^3m?C3ALL{<@#B3NlVk1#f zBqnG4*=`lI4KgFFi+SkM3?Ui~!)Q=VSq6&$5BU+NeMWUS)J{P73k4&e|kTic}0*x!fwqeF7A@|#>@XiXOQ4ey@zOlbE@odHC7l##`5$I6C`lq=vu zPktIrhhp6}-2r|K)n#I138)=e0JYD6tg@BiA)$yWohYbcnvhlAQJA=PzHG;&wS6)RC-jfURE|KS4XW9&)T znbX%JgKRP(_V9fxyA7M>;&oDaJ245OX|syJ_A4Y2g_Y6y(4yCLNtCt+lfv+!IRA0n z3FLDC8$~bkA|wZxRMEKum=s}(r>K`WFZla0_}h+S2mGb5fGVVoCKa$bbWH+z_EDg>sFK7*O=7P8Gf+uG&x z4zzlR(*})NBmcod8iT8Uh|y^95HHt<8A=MRS;de?+xHI)zB02d(7Z@K z8f`KcH;wi(YCwqss@#Vu6F$7i>-?h?_<2CbBntoCm;rumlu*dVryJMpjs$*Qz&EGx zi>@BvmqKN?>C&hro-OptAa2E75ZVet6DUHD61jxt?!*)cqq0uVzI_?^6M)~C!rzm` z#orD=LNb-7$Xq2kL@Js-z810>uEGg z1`lmK$0GRaZ^nR-B-*=|o#K35jSOl)$rn(fMd4SILWVmrS;Tq}HAaD~dcGeUI}YFA^rmb( zeh5$s07aF8GHMLTdVdc)v(@6Z(3A;k-a*V%h%2pqz{lD_)&9DXNG+Y+;@Q61yMm#$ z>!6$UDGG{pNd+_aVQNH+Mnxq4Dh4|?!rDNI!n)jmWW@?GaUu4C0#8)zxnQ0t+Pxi< z%2pIcW24!g>x>4Aa>ajMiLv zFA}DP*%E`3kg99Hh+xiCWr-oP=fk465qsG|N}VlUdJVKtDCeD}Bud}F);2vaCBzbZ z_a1ylm1&qipbcroVzL_lSP;q%^f)XC?L3!}n#Mw7(Tg~C*R{t%i#Ktq^oi+;9R*Q= zq$1ZY;UP=M%g-v&_Q= zl;gNLM~_Gm&LKLgcLRW?M^ZS@$siGtQ z)s>t%4_C;)k*YAq=B>~Wzt^RK6WoU3L^A2@mDlf7V984x3YMe#N*Yz9v0GklH8OGy zm~SCUqdBoXK>oUzF;o`SrefN}V8y;i#hnGlZ}6qgFMD%`$jNf_^`x1eQiqAy2eOs{ zMc;|ML2_9i#87HF+fMzO^lKr|vE496IS#`Cly_3)kXR}VdtDwu0U}KW>9>thgcbi@ zjloNj=G_B=Ib|0mhmQv30UPnonS7QbQoNmiNHE05rSorxK*E>D)Yh%1O6Dvt5*;EP zvdw#pB#akt@DFuO5L`mhi#(FCQQX_Gl%}m|cfe9h$U~L`7UO^1DWgc{WERLGoAvAj z;j$iLr0XI#$LJwe1#c~ip#g3ce5sy4RyiPvbT(mv=t=)HX13kJyaifuWW?ZU?8jw_ z47ojW*#ved-t4bYBf5gv;Ih}&Tk429)S=14hqN}cV?rW?kN*%@WeYx|4!s*Be_kw) zG-oY+w(f1v31AN$!d}`yz!U5f3fRlilywy&jskn&5cX4z9QKxcHv1Dj{=+zW&=B?m z_c-j)h|SKjwwiYy*jEi??<|!+ljSn-jKQ%VVSO{w9!q z1lR+HuopCQ*pt9^0emY`+_(^BY{O*enJt{!x^0-0AYLoEIHtB1z08A6=!U2L^-^dI zf|G)xIQHzCzL}WR^IsASct?#uH=(15j6Nn0`u8Ds)q*@sg~%g6oU0X$VN46d5T!17 zroZNb5;x$H;7r!W3D28SAiR`en?W6BH`};``f@RTB)+dtb%Zbe#Q{Ul zJb1)7tvzwyBjPG_@of)X3ZuAsKQ6*(K>grUsXzd484zOaN9)3iP9uOiAKis;N;tzmD z4e%XDu`Ec5WF_*`=xwm)fYUiQT6A)gJ9OL!ut}Z5@2bqjAF>(45G#TQLzfPK4{*tK zqt~uZhTN&6IC!7&R*fnt&wT`O+?cGqvlin+)@uO_U#Q0^h(^1DLzAJER5M<2@eAVb z$Re(>A)XpYBe)p_v`~$`VE7~WQYE8JIhwF(K~c<^fe~;Lf-q@9P=&R_F%MepAUt?| zzQ~LtDBLfo>KKU(kFu4jo4%xZ@I$-t_EWrOX~mHh8<52{bIU7C9jkX0npy?nKb|80 z(4HeNG9d2~x(szDu$5aUn*6Djr_tJBy{bwPemR{ZY}qeNUV!92XvE#-Z&CAw7g|sY z7N}4_-uVuIj3FFlK7UCZeirKw&Z2Gvbe0dW^5qC48KlW0NCro>l`KmQ_-i0y)hO_) z!5kU1b}c5|zwH96i1T1LBHa{D@Z`LRWG`Ph8$>r842&T@W7)rHG(6W`9gw0fTk!aD zyK_<93+yq5=2903^oV|4;z%cnJt|7%L-&V)799|wj?%p`1ME2!(F*A48pt!a=|__w z&jiPF*9zv`Sw~%e;ik-qqy6%O5f=pBr|vis*Y-=x=8Rb*hIS;eM@Mz;x2M@)&Ibq? z>I7uDp1MjinpL>lgY&wihq#Il(3(pT@GQ=DO*P~>R_z{ekUS5mDj=}-G{t--z{+(TjJc8NM zn{Jae4M#9*x^g{U@SrC>VzVD&NF#075Tcz&u`%?L7LxqnC^ms!@r5h|Rls@U!x~Hi z{l3f)!@bJ>tn5UKk72gzV|jSlw&xrl7hwWK``?ToSQ?P7QIV$fXwF3DF*KN(ft_0$hwW8h%<{L(NkdDHYHNR zwUePul8=68h$ErXm=Il6jU)E%J42SN@5aU6k0-^za21>^f&xy1qT_lTiLhP<1Ol$; z>1mJi?X97@1@+ik_awrqieR_7kMhpYvc< zswuBHSLD$BiF#CF$~%$>KOzi>UUGz!FT4XU+wck_)eGR~TnYV9KaGZsU0;32z zQHD*SnVOI3tsa%xud0;2RuNK{68yDhVf8J3f$op~t2`k{LGhW{B z2+s@S6G2fr3>!iqTF8D?+CL>;Eq1TRc9H)3)>Rhr3&$se%pGKi|b1zWU`3U zT$K5jA(q};;G)!A1`iy)#6=0&)US7873j5xvx|Z5K3E0vXRmWnWUfHcdJm@T8y0cOBp)R>N^9o^cAQAzPT(;neZy1F_0CwbIoE%D@euAu?SP$^s#bhCI6CXdSSOY)CHv{6d zO%%k-5SzG4;F3m)_kcmC0T8>&2gss`)c^_aJsiy8j0duSkq804JHWW%DpIWBjA4EN2eYDuiag2%vgv% z%G!;((o{#q4=`2qtOWw?$X!f}CzOk@qzPhB>>g%LzdC|MB>4Kt7)rYb+FHd1*A+kK z8-aA5LEsUSs9X~?DoTdRL^YT(VBF)4s+uu9#MI%JBzw5k{~w?Nkt+k@-bNWj7gF!9zzNd4I&G56Zz$kbqll@g^`pwwxF5_ zj!P||b!G%f7PjXfNs=|50NHUBNe+GjElZ9g3sao>MFpP%PxxArJnJcp!rD~4pn}dk zg}9c=APcqL;6uFQh@3U?8T3N>X5{q@Zezle7+et~S6gM9k->9p^pJHGT#!b_-v*^{;A`@xs8za0hPDI4S&2{K1PpB9}&x z3=?n$-_UU8U@l6`Qx6}@NKxwn(TLEfa9^gW2?b+RAahn;YnP%o7^nnm%ozi=;eQD2 zBkYP@d7D_QB!I2vzbYy8IIE6Tt1-edA{GA+YNl z08XcXtvF18sSE}4BHL*+!E{J7cb-|ZeI>v-0h|K`F80{JY~wi2$ehwp&xqYWHv`Z+ zSnW-wfVrF`z!ZkshTq3cJhXvc#KHy^Z=$J*<&!$FNf6FwsZF##|35U5bUn2v4^L?n z!aa6+h{slz{ts~AF}N>29KPgn8gAWvb$atoIMkJc>yy+_V_hQPCJk+*-O`B2a39}D zj^`lchMsldLzh?wCto9wEC-OHA_Iel1buy$DgPp{1g*qWrmZX zG&t;CPG(_zy+mD1%;NQ^N9HjslCFr1m;5zLSfre}0u z1TwtH?)9LeGxIH>#~a}cgxc$S9un5f8H&X5D>;yj%!fJ^?=$Rm{@YkMz`@glEyc>o z&k1aoq1bboK|zKV7RF{i!(*b9!gKEd^9Eo#QZVIS5tws_Vsh+drykQ`q5wB|`L%aE z5#S6daE1c~Jm4JxK1|B+3JnJ@_(kIBj1sXL!V=Hcz*$rZ41#GCFq`&4VAN+qrZD|{ zqJkoEu-$v%BpSEuvxMepBSAPQl^A@TTD6k^lN@OFWSr-`g=tLxQ81X4c`$Dc7J~N0y<*Xkj}mG_g|QJ=bD(9Sp2JVa~@O~Tn0No zf}QphJ83*OjbzXB5(BlA|I^5l*Iq1WTc_(Jb ziolQvk6@pmAp8=`zZ9&QH~U!^D0ng?EY`?!6bzn`z%w%(Jv;_^Iosjc`Y;%dypZLn z#y%L$!5VBVtW)}3!I^=FkKyQ19y2dMH*SG$bf$FUF;$KN)qndM4`@}#kY&sml$Z`j zk$7yBj~HeD2|R#b*`)?rg9Zn5)*w)Pb>-{t9uwj074fh1bm>D2JqJuxh7}DJSx$$8 zEI$YteCrqzIVdBHFct2Ng0p4(&a=ssmJ1tkpcIEf^}7~Yj+A%=$yM8|aQji3&}95R zKI)yiFHAXT&O_0NY!8X^AITmb3=#bX{bLEZ)Bs>wa&QL+05rJYN-{6}dpL-TFVB#ZfSLN`bx_l=Z`10|JK+vE)_iL8AaY7Mei44BTkL(J*s(*TA~!AD$6o zHaFuJ$1g)hqk7!lo&!5fDD)>F^6DrauW#ahcjoi z;Id^wOpldOKHJWm8Gi-A(r9p_Ed{t^4hMMf%n0rF2nz~~ zbPkO9*D!4}VYci5H=KgVwWk2jozDUO&si+uU+J|g&Uv8@c*73HtrG>?)0>0sHHII$sXn;JK0*V_ZAMA#uT%Jx5|IcmTh9Zz{zT1%4dZVaz1wUr31_u&w2U zg9xMM>OAN*3ozA|g15z=gEu%FpxFb9nx(`0Q<^m@RRy{XgD#s*0iGVn0VW=XCN}B= zi<&8+k+IX^@#uhXX6(ScYabdFf-f3|3y{IP3uTJ7XTbuTOGZN;WM%a~$vWsXfpShj zy)rm1@hDHm4nBy$pNX}571>zH3tbos(;D@zzli^<2Gm0rl=FNHs4+oLzTj6D zm%`VM;)gU?;ge7F{_mcZD|k!rI|_AihQ& zJSRao_s>b}VFI~*_;|7Hns%xV^3qxuFI4>A1WvpRqhRn7?O*u`89W^~9s*K$NI)8{ zeHy+_}bHK6NKn+#J z?d=>D|AXN}GIf{p-o8BO`Sb8~phUopLJsPIkVS z;sE~pL=J}D5F-uzYn4wxvuz*=QN#4d9uDU0p+<5at3)!x|1}J>cF7|7|l5lo3r1|?;wDcfYDSZNFCz<4tB!eX_^{hf(Kup_ZoH%9Cwm~ z`Hwk}IJNN|KBujk95uZVj4c{s?1N$s@P8URq{p7nGd$A3*i^u^rG(YvGaSrejD<}B zezGy_8f)+r3O6oteXg7%fQ^^?`1u6;P)_A!&P%#kHr1}e53dto?3;3l(P(|7pe$R^ zJ~*WRUwNuJ$9mdDAUC?8^f(-2SZU;7}h(=)FKFpY<<{z!2Ba=%Mb%L2s_g zx61%P>mi2mTqHne{sT19CuDfUTfufgwSee51hKXJzYy)0hDQ#M$gBMI^dvxxheS+$ z@{p&BK%6nWjZxUMNwg}Gcv?+Et z{UD_6*wXzYba*2SQ#E&v00VZzSC;~_aU43;2M>X>VPK;%$bzEK<#{vJXtdj~KBeBO z`9g^h6=jQ(R}Lc3!g4rT!fogLgW$opU&c-&B(>O*!~MJ9K?{3S4+~m)M>sC0j7GeG zi;)I!?G!IK$MS2TZOH74=P=?=1xvh^5G@v-oFLPQIF zY{j$~o@7Z6ZTJCqS9!j|#xS}!5)9_VwN&Eb?4?(rsw@>lTh{Wcp}tpa3q)T7xwoHu z;x#-B;{6&hozvKyK(c43r*leTNb?OQMqm>6$xYgfw+xP^;iYZ3EO~L5xS*84T}8aL z4eE)vw#n0P4XJ~-x7pDP3b@b+ks_RYV?UKV8fCl#B(pNg74^_6F0Qb5*fjcrCN2sA zx44d95f>)SB(6vwy+6PthUUJ9Na*0Ee6EM<^44vjPN0#Z&gK!99B>JtF(2Um$vC*U z!*+-mO85XbXFO~jpg7Xy;8F@+z2p-h%DjNL*uh;TB53hP=(bOyf=EeNKpTA)5Ewz~ zy!jEHM0S!S=w|pm23icq@kB`jg?++I8F#bN@{3+CuYE)m$2*lP706@BB48- z;P>kn1yN@w2CqP=WHYe7Vz!L=)kJ9m@q7)=33q&cgGL13U~@Tr!zMBI-)5Iiegl_J zZ6r!MNbWmk&iH$uT^IKq9_YlcwBk2Oz`7l_1CIrfSd)N)*q~vL@Vi?W9c1lzr1JyX zWZpvX8lY6XB>t2r>7sMbu~ACY7ZlQHR+LOp0=yD!jIpEemHW^a?h%*22?)yD`X~^B z&q)YkasFR#@8f{I?SIi7%nsDmzR3#`jJQDi?>DJ&pg8Z4qtPZ(?3(H9V-}20e+ZHp zK8b5FDriDvW31aDlj6_Yp>^G0S2JXNqLDA?aJTyNZb&)Z7&pn~50K1-36c^z`MY1b z@()O_6k*ffcMHgoH^r;}1^V$3YzW=Iz)##PpMlf6#MyLksWfW)3zjdDW|P1GSrpU* zww@ZrMlI`sS5#Sz;V_6Gqh3gZ565y~oEd@290my_-v{>IS7no8`XEa`pTsUL)`m8I z?gJIp)3{|CCSU@&-h$vIM>ZMn^4wBEb4Kk9A*5u9nc&YoX)zjI*!3(P!3m6JS1xWm zKt`g!IM;7?HvLu)yv74hn)oeUjHfIie4V6%4$}qo8LDg8rCz$ADT9&BDG4H9hM=Tq SD^Dwr@|H{r>=;8tIS# delta 185248 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

Yznpi38gj}z0TjzI@2Z@9 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 diff --git a/lib/parsii-1.2.1.jar b/lib/parsii-1.2.1.jar index f41d6492493dc3dac2dfe6e27e9c06e4abdff98f..c68c7f1ad7cda4b5dcb56475736e585d488e8c47 100644 GIT binary patch delta 16618 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 b6flsn4gz2ifn~tAS%3j delta 16931 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 diff --git a/src/main/java/com/dfsek/terra/EventListener.java b/src/main/java/com/dfsek/terra/EventListener.java index 9dcf6fa62..15551566c 100644 --- a/src/main/java/com/dfsek/terra/EventListener.java +++ b/src/main/java/com/dfsek/terra/EventListener.java @@ -6,7 +6,6 @@ import com.dfsek.terra.config.genconfig.TreeConfig; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.registry.TreeRegistry; import com.dfsek.terra.util.StructureTypeEnum; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; @@ -24,6 +23,7 @@ import org.bukkit.event.world.StructureGrowEvent; import org.polydev.gaea.GaeaPlugin; import org.polydev.gaea.tree.Tree; import org.polydev.gaea.tree.TreeType; +import org.polydev.gaea.util.FastRandom; public class EventListener implements Listener { private final GaeaPlugin main; @@ -81,9 +81,9 @@ public class EventListener implements Listener { Tree tree = registry.get(TreeType.fromBukkit(e.getSpecies()).toString()); Debug.info("Overriding tree type: " + e.getSpecies()); if(tree instanceof TreeConfig) { - if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new XoRoShiRo128PlusPlusRandom())) { + if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new FastRandom())) { block.setBlockData(data); } - } else if(!tree.plant(e.getLocation(), new XoRoShiRo128PlusPlusRandom(), Terra.getInstance())) block.setBlockData(data); + } else if(!tree.plant(e.getLocation(), new FastRandom(), Terra.getInstance())) block.setBlockData(data); } } diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java index c3ed76555..70baefc9b 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java @@ -6,11 +6,11 @@ import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; +import org.polydev.gaea.util.FastRandom; import java.util.Random; import java.util.function.Consumer; @@ -36,7 +36,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder { Location spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()).toLocation(world); if(!TerraWorld.getWorld(world).getConfig().getBiome((UserDefinedBiome) getGrid().getBiome(spawn)).getStructures().contains(target)) return false; - Random r2 = new XoRoShiRo128PlusPlusRandom(spawn.hashCode()); + Random r2 = new FastRandom(spawn.hashCode()); Structure struc = target.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = target.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java b/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java index 2052659dd..3202dde91 100644 --- a/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java +++ b/src/main/java/com/dfsek/terra/biome/postprocessing/ErosionNoise.java @@ -1,6 +1,6 @@ package com.dfsek.terra.biome.postprocessing; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.polydev.gaea.math.FastNoiseLite; /** diff --git a/src/main/java/com/dfsek/terra/carving/Cavern.java b/src/main/java/com/dfsek/terra/carving/Cavern.java index d963e95b9..7ec405639 100644 --- a/src/main/java/com/dfsek/terra/carving/Cavern.java +++ b/src/main/java/com/dfsek/terra/carving/Cavern.java @@ -4,12 +4,12 @@ import com.dfsek.terra.procgen.GridSpawn; import com.dfsek.terra.procgen.voxel.DeformedSphere; import com.dfsek.terra.procgen.voxel.Tube; import com.dfsek.terra.procgen.voxel.VoxelGeometry; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.util.Vector; import org.polydev.gaea.math.FastNoiseLite; import org.polydev.gaea.math.MathUtil; +import org.polydev.gaea.util.FastRandom; import java.util.Random; @@ -24,7 +24,7 @@ public class Cavern { public VoxelGeometry carveChunk(int chunkX, int chunkZ) { long seedC = MathUtil.getCarverChunkSeed(chunkX, chunkZ, seed); - Random chunk = new XoRoShiRo128PlusPlusRandom(seedC); + Random chunk = new FastRandom(seedC); Vector org = node.getNodeLocation((chunkX << 4) + 8, (chunkZ << 4) + 8).clone().setY(chunk.nextInt(128)); VoxelGeometry carve = VoxelGeometry.getBlank(); @@ -34,7 +34,7 @@ public class Cavern { Bukkit.getLogger().info("Cavern: " + org.toString()); carve.merge(new DeformedSphere(org.clone(), chunk.nextInt(4) + 3, 0.75, smpl)); - Vector _00 = new Vector(org.getX() + 16, new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); + Vector _00 = new Vector(org.getX() + 16, new FastRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); carve.merge(new Tube(org, _00, 4)); return carve; diff --git a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java index 2f86e573d..8641dd229 100644 --- a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java +++ b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java @@ -1,6 +1,6 @@ package com.dfsek.terra.carving; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; import org.polydev.gaea.math.FastNoiseLite; diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index 1df4c251c..25f147d2c 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -3,12 +3,12 @@ package com.dfsek.terra.carving; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.math.Range; +import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.world.carving.Carver; import org.polydev.gaea.world.carving.Worm; @@ -41,7 +41,7 @@ public class UserDefinedCarver extends Carver { @Override public Worm getWorm(long l, Vector vector) { - Random r = new XoRoShiRo128PlusPlusRandom(l + hash); + Random r = new FastRandom(l + hash); return new UserDefinedWorm(length.get(r) / 2, r, vector, radius.getMax(), topCut, bottomCut); } @@ -60,7 +60,7 @@ public class UserDefinedCarver extends Carver { @Override public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) { ConfigPack c = TerraWorld.getWorld(w).getConfig(); - return new XoRoShiRo128PlusPlusRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); + return new FastRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); } private class UserDefinedWorm extends Worm { diff --git a/src/main/java/com/dfsek/terra/command/OreCommand.java b/src/main/java/com/dfsek/terra/command/OreCommand.java index dfae3ec5b..c5a13a29d 100644 --- a/src/main/java/com/dfsek/terra/command/OreCommand.java +++ b/src/main/java/com/dfsek/terra/command/OreCommand.java @@ -3,8 +3,7 @@ package com.dfsek.terra.command; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.genconfig.OreConfig; import com.dfsek.terra.config.lang.LangUtil; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.Command; @@ -13,6 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.command.WorldCommand; +import org.polydev.gaea.util.FastRandom; import java.util.Collections; import java.util.List; @@ -36,7 +36,7 @@ public class OreCommand extends WorldCommand { return true; } Vector source = new Vector(FastMath.floorMod(bl.getX(), 16), bl.getY(), FastMath.floorMod(bl.getZ(), 16)); - ore.doVein(source, bl.getChunk(), new XoRoShiRo128PlusPlusRandom()); + ore.doVein(source, bl.getChunk(), new FastRandom()); } else { LangUtil.send("command.ore.main-menu", sender); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index 338a22940..474b53b86 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -4,8 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; @@ -14,6 +13,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; import org.polydev.gaea.math.Range; +import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.world.Flora; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; @@ -53,7 +53,7 @@ public class FloraConfig extends TerraConfig implements Flora { physics = getBoolean("physics", false); ceiling = getBoolean("ceiling", false); - Palette p = new RandomPalette<>(new XoRoShiRo128PlusPlusRandom(getInt("seed", 4))); + Palette p = new RandomPalette<>(new FastRandom(getInt("seed", 4))); floraPalette = PaletteConfig.getPalette(getMapList("layers"), p); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java index a642539ab..917396877 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Material; diff --git a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java index 412d11bb9..2d93a465c 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java @@ -4,12 +4,12 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.exception.ConfigException; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; import org.polydev.gaea.math.FastNoiseLite; import org.polydev.gaea.math.ProbabilityCollection; +import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; import org.polydev.gaea.world.palette.SimplexPalette; @@ -36,7 +36,7 @@ public class PaletteConfig extends TerraConfig { pNoise.setFractalOctaves(4); pNoise.setFrequency(getDouble("frequency", 0.02)); pal = new SimplexPalette<>(pNoise); - } else pal = new RandomPalette<>(new XoRoShiRo128PlusPlusRandom(getInt("seed", 2403))); + } else pal = new RandomPalette<>(new FastRandom(getInt("seed", 2403))); palette = getPalette(getMapList("layers"), pal); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java index de316e4af..cf720f839 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java @@ -4,18 +4,18 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.math.ProbabilityCollection; +import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; public class BiomeOceanConfig extends TerraConfigSection { - private static final Palette oceanDefault = new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(Material.WATER.createBlockData(), 1); + private static final Palette oceanDefault = new RandomPalette(new FastRandom(0)).add(Material.WATER.createBlockData(), 1); private final Palette ocean; private final int seaLevel; @@ -26,7 +26,7 @@ public class BiomeOceanConfig extends TerraConfigSection { if(oceanN != null) { if(oceanN.startsWith("BLOCK:")) { try { - ocean = new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); + ocean = new RandomPalette(new FastRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData \"" + oceanN + "\" is invalid! (Ocean Palette)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java index 315bddd14..f7273ab84 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java @@ -4,11 +4,11 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; import org.polydev.gaea.math.ProbabilityCollection; +import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; @@ -29,7 +29,7 @@ public class BiomePaletteConfig extends TerraConfigSection { try { if(((String) entry.getKey()).startsWith("BLOCK:")) { try { - paletteMap.put((Integer) entry.getValue(), new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); + paletteMap.put((Integer) entry.getValue(), new RandomPalette(new FastRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData " + entry.getKey() + " is invalid! (Palettes)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java index ca15aef79..159378ca9 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java @@ -5,13 +5,13 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.math.ProbabilityCollection; +import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; @@ -42,7 +42,7 @@ public class BiomeSlabConfig extends TerraConfigSection { if(((String) entry.getValue()).startsWith("BLOCK:")) { try { Debug.info("Adding slab palette with single material " + entry.getKey()); - paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); + paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new FastRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("Invalid BlockData in slab configuration: " + ex.getMessage(), getParent().getConfig().getID()); } diff --git a/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java b/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java index 055fd261c..d9436e63a 100644 --- a/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java +++ b/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java @@ -4,7 +4,7 @@ import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.generation.TerraChunkGenerator; import com.dfsek.terra.image.ImageLoader; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.polydev.gaea.generation.GenerationPhase; diff --git a/src/main/java/com/dfsek/terra/image/ImageLoader.java b/src/main/java/com/dfsek/terra/image/ImageLoader.java index 4f248a1f7..99167bde8 100644 --- a/src/main/java/com/dfsek/terra/image/ImageLoader.java +++ b/src/main/java/com/dfsek/terra/image/ImageLoader.java @@ -5,7 +5,7 @@ import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.debug.gui.DebugGUI; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.World; import org.polydev.gaea.biome.NormalizationUtil; diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index 3fd495c26..998c9e19f 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -9,8 +9,7 @@ import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeFloraConfig; import com.dfsek.terra.event.TreeGenerateEvent; -import com.dfsek.terra.util.GlueList; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; @@ -22,9 +21,9 @@ import org.polydev.gaea.math.Range; import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; import org.polydev.gaea.tree.Tree; +import org.polydev.gaea.util.GlueList; import org.polydev.gaea.world.Flora; -import java.util.ArrayList; import java.util.List; import java.util.Random; diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index 7b1d7aefa..23ee5336d 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -13,8 +13,7 @@ import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; import com.dfsek.terra.structure.features.Feature; import com.dfsek.terra.util.structure.RotationUtil; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; @@ -23,6 +22,7 @@ import org.bukkit.inventory.BlockInventoryHolder; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.profiler.ProfileFuture; import org.polydev.gaea.structures.loot.LootTable; +import org.polydev.gaea.util.FastRandom; import java.util.Random; @@ -42,7 +42,7 @@ public class StructurePopulator extends BlockPopulator { for(StructureConfig conf : config.getAllStructures()) { Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world); if(!config.getBiome((UserDefinedBiome) grid.getBiome(spawn)).getStructures().contains(conf)) continue; - Random r2 = new XoRoShiRo128PlusPlusRandom(spawn.hashCode()); + Random r2 = new FastRandom(spawn.hashCode()); Structure struc = conf.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = conf.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java index 0a0e16ab9..6a53a9209 100644 --- a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java +++ b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java @@ -1,11 +1,10 @@ package com.dfsek.terra.procgen; -import com.dfsek.terra.util.GlueList; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.util.Vector; import org.polydev.gaea.math.MathUtil; +import org.polydev.gaea.util.FastRandom; +import org.polydev.gaea.util.GlueList; -import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -55,7 +54,7 @@ public class GridSpawn { * @return Vector representing spawnpoint */ public Vector getChunkSpawn(int structureChunkX, int structureChunkZ, long seed) { - Random r = new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); + Random r = new FastRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); int offsetX = r.nextInt(width); int offsetZ = r.nextInt(width); int sx = structureChunkX * (width + 2 * separation) + offsetX; diff --git a/src/main/java/com/dfsek/terra/procgen/math/Vector2.java b/src/main/java/com/dfsek/terra/procgen/math/Vector2.java index 3de79ec05..6ec295b17 100644 --- a/src/main/java/com/dfsek/terra/procgen/math/Vector2.java +++ b/src/main/java/com/dfsek/terra/procgen/math/Vector2.java @@ -1,6 +1,6 @@ package com.dfsek.terra.procgen.math; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; /** * oh yeah diff --git a/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java b/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java index 78a075e33..fb2df4824 100644 --- a/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java +++ b/src/main/java/com/dfsek/terra/procgen/pixel/Rectangle.java @@ -1,7 +1,7 @@ package com.dfsek.terra.procgen.pixel; import com.dfsek.terra.procgen.math.Vector2; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import java.util.HashSet; import java.util.Set; diff --git a/src/main/java/com/dfsek/terra/procgen/voxel/VoxelGeometry.java b/src/main/java/com/dfsek/terra/procgen/voxel/VoxelGeometry.java index b5db0e3a7..3d0405722 100644 --- a/src/main/java/com/dfsek/terra/procgen/voxel/VoxelGeometry.java +++ b/src/main/java/com/dfsek/terra/procgen/voxel/VoxelGeometry.java @@ -1,9 +1,8 @@ package com.dfsek.terra.procgen.voxel; -import com.dfsek.terra.util.GlueList; import org.bukkit.util.Vector; +import org.polydev.gaea.util.GlueList; -import java.util.ArrayList; import java.util.List; public abstract class VoxelGeometry { diff --git a/src/main/java/com/dfsek/terra/structure/Rotation.java b/src/main/java/com/dfsek/terra/structure/Rotation.java index cf4d02081..e9aac096e 100644 --- a/src/main/java/com/dfsek/terra/structure/Rotation.java +++ b/src/main/java/com/dfsek/terra/structure/Rotation.java @@ -1,6 +1,6 @@ package com.dfsek.terra.structure; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; public enum Rotation { CW_90(90), CW_180(180), CCW_90(270), NONE(0); diff --git a/src/main/java/com/dfsek/terra/structure/Structure.java b/src/main/java/com/dfsek/terra/structure/Structure.java index 2e26b7451..d68394b2f 100644 --- a/src/main/java/com/dfsek/terra/structure/Structure.java +++ b/src/main/java/com/dfsek/terra/structure/Structure.java @@ -3,7 +3,7 @@ package com.dfsek.terra.structure; import com.dfsek.terra.Debug; import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.util.structure.RotationUtil; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; diff --git a/src/main/java/com/dfsek/terra/structure/StructureInfo.java b/src/main/java/com/dfsek/terra/structure/StructureInfo.java index 1abcbcc09..e08fddcbf 100644 --- a/src/main/java/com/dfsek/terra/structure/StructureInfo.java +++ b/src/main/java/com/dfsek/terra/structure/StructureInfo.java @@ -1,7 +1,7 @@ package com.dfsek.terra.structure; import com.dfsek.terra.procgen.math.Vector2; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import java.io.Serializable; diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 19b126d32..c44bf2d85 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -4,9 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; -import com.dfsek.terra.util.GlueList; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; @@ -15,8 +13,9 @@ import org.bukkit.block.BlockFace; import org.bukkit.entity.EntityType; import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.Range; +import org.polydev.gaea.util.FastRandom; +import org.polydev.gaea.util.GlueList; -import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Random; @@ -57,7 +56,7 @@ public class EntityFeature implements Feature { @Override public void apply(Structure structure, Rotation r, Location l, Chunk chunk) { - Random random = new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); + Random random = new FastRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); for(Location attempt : getLocations(structure, r, l, random, amount.get(random))) { if(!isInChunk(chunk, attempt)) continue; // Don't attempt spawn if not in current chunk. attemptSpawn(attempt, l); diff --git a/src/main/java/com/dfsek/terra/util/DataUtil.java b/src/main/java/com/dfsek/terra/util/DataUtil.java index b2091c6a1..902d1accf 100644 --- a/src/main/java/com/dfsek/terra/util/DataUtil.java +++ b/src/main/java/com/dfsek/terra/util/DataUtil.java @@ -1,8 +1,8 @@ package com.dfsek.terra.util; -import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Material; import org.bukkit.block.data.BlockData; +import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; @@ -11,5 +11,5 @@ public final class DataUtil { public static final BlockData SNOW = Material.SNOW.createBlockData(); public static final BlockData WATER = Material.WATER.createBlockData(); public static final BlockData AIR = Material.AIR.createBlockData(); - public static final Palette BLANK_PALETTE = new RandomPalette(new XoRoShiRo128PlusPlusRandom(2403)).add(AIR, 1); + public static final Palette BLANK_PALETTE = new RandomPalette(new FastRandom(2403)).add(AIR, 1); } diff --git a/src/main/java/com/dfsek/terra/util/GlueList.java b/src/main/java/com/dfsek/terra/util/GlueList.java deleted file mode 100644 index 9079513d3..000000000 --- a/src/main/java/com/dfsek/terra/util/GlueList.java +++ /dev/null @@ -1,1050 +0,0 @@ -/** - * Copyright 2015 Ertuğrul Çetin - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.dfsek.terra.util; - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; -import java.util.AbstractList; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.ConcurrentModificationException; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.NoSuchElementException; -import java.util.Objects; - -import static org.apache.commons.math3.util.FastMath.abs; -import static org.apache.commons.math3.util.FastMath.max; -import static org.apache.commons.math3.util.FastMath.min; - - -/** - * GlueList is a brand new List implementation which is way faster than ArrayList and LinkedList. - * This implementation inspired from ArrayList and LinkedList working mechanism. - *
- * Nodes holding data in arrays, in the beginning the world just like ArrayList ,inserts data into array one by one when there is no space for insertion to array - * new Node will be created and linked with the last Node. - *
- * The array which belongs to newly created node has half of the size of list , just like ArrayList. - * In ArrayList when there is no space for it it creates new array with double of old size and inserts old data into new one. - * Unlike ArrayList GlueList does it dynamically way with creating new node so old data does NOT have to be moved to another array. - * You can think that GlueList is dynamic version of ArrayList. - *
- * Adding and removing operations much faster than ArrayList and LinkedList. - * Searching operations nearly same with ArrayList and way better than LinkedList. - *

- * Best Case
- * Add O(1)
- * Remove O(1)
- * Search O(1)
- * Access O(1) - *

- * "m" number of created nodes.
- * "n" size of node array.
- * If you insert 10_000_000 record into List there will be just 36 nodes.

- * Worst Case
- * Add O(n*m)
- * Remove O(n*m)
- * Search O(m)
- * Access O(m) - *

- * version v1.0 - *

- * Date: 03.11.2015 - *

- * - * @author ErtuÄŸrul Çetin ~ ertu.ctn@gmail.com - * @see Collection - * @see List - * @see LinkedList - * @see ArrayList - * @param the type of elements held in this collection - */ -public class GlueList extends AbstractList implements List, Cloneable, Serializable { - - transient Node first; - transient Node last; - - int size; - - int initialCapacity; - - private static final int DEFAULT_CAPACITY = 10; - - private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; - - public GlueList() { - - Node initNode = new Node<>(null, null, 0, DEFAULT_CAPACITY); - - first = initNode; - last = initNode; - } - - public GlueList(int initialCapacity) { - - this.initialCapacity = (initialCapacity > MAX_ARRAY_SIZE) ? MAX_ARRAY_SIZE : initialCapacity; - - Node initNode = new Node<>(null, null, 0, initialCapacity); - - first = initNode; - last = initNode; - } - - public GlueList(Collection c) { - - Objects.requireNonNull(c); - - Object[] arr = c.toArray(); - - int len = arr.length; - - if (len != 0) { - - Node initNode = new Node<>(null, null, 0, len); - - first = initNode; - last = initNode; - - System.arraycopy(arr, 0, last.elementData, 0, len); - - last.elementDataPointer += len; - } else { - - Node initNode = new Node<>(null, null, 0, DEFAULT_CAPACITY); - - first = initNode; - last = initNode; - } - - modCount++; - size += len; - } - - @Override - public boolean add(T element) { - - Node l = last; - - if (l.isAddable()) { - l.add(element); - } else { - Node newNode = new Node<>(l, null, size); - newNode.add(element); - last = newNode; - l.next = last; - } - - modCount++; - size++; - - return true; - } - - @SuppressWarnings("unchecked") - @Override - public void add(int index, T element) { - - rangeCheckForAdd(index); - - Node node = getNodeForAdd(index); - - if (node == null) { - - Node l = last; - - Node newNode = new Node<>(l, null, size); - - last = newNode; - - l.next = last; - - node = newNode; - } - - //if it is last and has extra space for element... - if (node == last && node.elementData.length - node.elementDataPointer > 0) { - - int nodeArrIndex = index - node.startingIndex; - - System.arraycopy(node.elementData, nodeArrIndex, node.elementData, nodeArrIndex + 1, node.elementDataPointer - nodeArrIndex); - - node.elementData[nodeArrIndex] = element; - - if (nodeArrIndex > 0) { - System.arraycopy(node.elementData, 0, node.elementData, 0, nodeArrIndex); - } - - node.elementDataPointer++; - } else { - - int newLen = node.elementData.length + 1; - T[] newElementData = (T[]) new Object[newLen]; - - int nodeArrIndex = index - node.startingIndex; - - System.arraycopy(node.elementData, nodeArrIndex, newElementData, nodeArrIndex + 1, node.elementDataPointer - nodeArrIndex); - - newElementData[nodeArrIndex] = element; - - if (nodeArrIndex > 0) { - System.arraycopy(node.elementData, 0, newElementData, 0, nodeArrIndex); - } - - node.elementData = newElementData; - node.endingIndex++; - node.elementDataPointer++; - } - - updateNodesAfterAdd(node); - - modCount++; - size++; - } - - private void rangeCheckForAdd(int index) { - - if (index > size || index < 0) { - throw new ArrayIndexOutOfBoundsException(index); - } - } - - private void updateNodesAfterAdd(Node nodeFrom) { - - for (Node node = nodeFrom.next; node != null; node = node.next) { - - node.startingIndex++; - node.endingIndex++; - } - } - - @SuppressWarnings("unchecked") - @Override - public boolean addAll(Collection c) { - - Objects.requireNonNull(c); - - Object[] collection = c.toArray(); - - int len = collection.length; - - if (len == 0) { - return false; - } - - if (size == 0) { - - if (initialCapacity >= len) { - System.arraycopy(collection, 0, last.elementData, 0, len); - } else { - last.elementData = Arrays.copyOf((T[]) collection, len); - last.endingIndex = len - 1; - } - - last.elementDataPointer += len; - - modCount++; - size += len; - - return true; - } - - int elementDataLen = last.elementData.length; - int elementSize = last.elementDataPointer; - - int remainedStorage = elementDataLen - elementSize; - - if (remainedStorage == 0) { - - Node l = last; - - int newLen = (size >>> 1); - int initialLen = (len > newLen) ? len : newLen; - - Node newNode = new Node<>(l, null, size, initialLen); - - System.arraycopy(collection, 0, newNode.elementData, 0, len); - - newNode.elementDataPointer += len; - - last = newNode; - l.next = last; - - modCount++; - size += len; - - return true; - } - - if (len <= remainedStorage) { - - System.arraycopy(collection, 0, last.elementData, elementSize, len); - - last.elementDataPointer += len; - - modCount++; - size += len; - - return true; - } - - if (len > remainedStorage) { - - System.arraycopy(collection, 0, last.elementData, elementSize, remainedStorage); - - last.elementDataPointer += remainedStorage; - size += remainedStorage; - - int newLen = (size >>> 1); - int remainedDataLen = len - remainedStorage; - - int initialLen = (newLen > remainedDataLen) ? newLen : remainedDataLen; - - Node l = last; - - Node newNode = new Node<>(l, null, size, initialLen); - - System.arraycopy(collection, remainedStorage, newNode.elementData, 0, remainedDataLen); - - newNode.elementDataPointer += remainedDataLen; - - last = newNode; - l.next = last; - - modCount++; - size += remainedDataLen; - - return true; - } - - return false; - } - - @Override - public T set(int index, T element) { - - rangeCheck(index); - - Node node = getNode(index); - - int nodeArrIndex = index - node.startingIndex; - - T oldValue = node.elementData[nodeArrIndex]; - - node.elementData[nodeArrIndex] = element; - - return oldValue; - } - - @Override - public T get(int index) { - - rangeCheck(index); - - Node node = getNode(index); - - return node.elementData[index - node.startingIndex]; - } - - @Override - public int indexOf(Object o) { - - int index = 0; - - if (o == null) { - - for (Node node = first; node != null; node = node.next) { - for (int i = 0; i < node.elementDataPointer; i++) { - if (node.elementData[i] == null) { - return index; - } - index++; - } - } - } else { - - for (Node node = first; node != null; node = node.next) { - for (int i = 0; i < node.elementDataPointer; i++) { - if (o.equals(node.elementData[i])) { - return index; - } - index++; - } - } - } - - return -1; - } - - @Override - public int lastIndexOf(Object o) { - - int index = size - 1; - - if (o == null) { - for (Node node = last; node != null; node = node.pre) { - for (int i = node.elementDataPointer - 1; i >= 0; i--) { - if (node.elementData[i] == null) { - return index; - } - index--; - } - } - } else { - - for (Node node = last; node != null; node = node.pre) { - for (int i = node.elementDataPointer - 1; i >= 0; i--) { - if (o.equals(node.elementData[i])) { - return index; - } - index--; - } - } - } - - return -1; - } - - @Override - public boolean contains(Object o) { - return indexOf(o) != -1; - } - - @SuppressWarnings("unchecked") - @Override - public T remove(int index) { - - rangeCheck(index); - - Node node; - - if (size == 2 && first != last) { - - Node newNode = new Node<>(null, null, 0, 2); - newNode.add(first.elementData[0]); - newNode.add(last.elementData[0]); - - node = first = last = newNode; - } else { - node = getNode(index); - } - - T[] elementData = node.elementData; - - int elementSize = node.elementDataPointer; - - int nodeArrIndex = index - node.startingIndex; - - T oldValue = elementData[nodeArrIndex]; - - int numMoved = elementSize - nodeArrIndex - 1; - - if (numMoved > 0) { - System.arraycopy(node.elementData, nodeArrIndex + 1, node.elementData, nodeArrIndex, numMoved); - } - - if (first == last || node == last) { - node.elementData[elementSize - 1] = null; - } else { - node.elementData = Arrays.copyOf(node.elementData, elementSize - 1); - node.endingIndex = (--node.endingIndex < 0) ? 0 : node.endingIndex; - } - - node.elementDataPointer--; - - updateNodesAfterRemove(node); - - if (node.elementDataPointer == 0 && first != last) { - - Node next = node.next; - Node prev = node.pre; - - if (prev == null) { - first = next; - } else { - prev.next = next; - node.pre = null; - } - - if (next == null) { - last = prev; - } else { - next.pre = prev; - node.next = null; - } - - node.elementData = null; - } - - size--; - modCount++; - - return oldValue; - } - - @Override - public boolean removeAll(Collection c) { - - Objects.requireNonNull(c); - - Object[] arr = c.toArray(); - if (arr.length == 0) { - return false; - } - - boolean isModified = false; - - for (Object o : arr) { - isModified |= remove(o); - } - - return isModified; - } - - @Override - public boolean retainAll(Collection c) { - - Objects.requireNonNull(c); - - Object[] arr = c.toArray(); - if (arr.length == 0) { - return false; - } - - boolean isModified = false; - - Object[] elements = toArray(); - - for (Object element : elements) { - - if (!c.contains(element)) { - isModified |= remove(element); - } - } - - return isModified; - } - - @Override - public boolean remove(Object o) { - - int index = indexOf(o); - - if (index != -1) { - remove(index); - return true; - } else { - return false; - } - } - - private void updateNodesAfterRemove(Node fromNode) { - - for (Node node = fromNode.next; node != null; node = node.next) { - - node.startingIndex = (--node.startingIndex < 0) ? 0 : node.startingIndex; - node.endingIndex = (--node.endingIndex < 0) ? 0 : node.endingIndex; - } - } - - private Node getNode(int index) { - - int firstStartingIndex = first.startingIndex; - int firstEndingIndex = first.endingIndex; - - int firstMinDistance = min(abs(index - firstStartingIndex), abs(index - firstEndingIndex)); - - int lastStartingIndex = last.startingIndex; - int lastEndingIndex = last.endingIndex; - - int lastMinDistance = min(abs(index - lastStartingIndex), abs(index - lastEndingIndex)); - - if (firstMinDistance <= lastMinDistance) { - - Node node = first; - do { - - if (node.startingIndex <= index && index <= node.endingIndex) { - return node; - } - - node = node.next; - } while (true); - } else { - - Node node = last; - do { - - if (node.startingIndex <= index && index <= node.endingIndex) { - return node; - } - - node = node.pre; - } while (true); - } - } - - private Node getNodeForAdd(int index) { - - if (index == size && !(last.startingIndex <= index && index <= last.endingIndex)) { - return null; - } - - return getNode(index); - } - - private void rangeCheck(int index) { - - if (index >= size || index < 0) { - throw new ArrayIndexOutOfBoundsException(index); - } - } - - @Override - public void clear() { - - for (Node node = first; node != null; ) { - - Node next = node.next; - - node.next = null; - node.pre = null; - node.elementData = null; - - node = next; - } - - first = last = null; - - int capacity = min(MAX_ARRAY_SIZE, max(size, max(initialCapacity, DEFAULT_CAPACITY))); - - Node initNode = new Node<>(null, null, 0, capacity); - - initialCapacity = capacity; - - first = initNode; - last = initNode; - - modCount++; - size = 0; - } - - public void trimToSize() { - - int pointer = last.elementDataPointer; - int arrLen = last.elementData.length; - - if (pointer < arrLen && arrLen > 2) { - - if (pointer < 2) { - last.elementData = Arrays.copyOf(last.elementData, 2); - last.endingIndex -= arrLen - 2; - } else { - last.elementData = Arrays.copyOf(last.elementData, pointer); - last.endingIndex -= arrLen - pointer; - } - } - } - - @Override - public List subList(int fromIndex, int toIndex) { - return super.subList(fromIndex, toIndex); - } - - @Override - public Object[] toArray() { - - Object[] objects = new Object[size]; - - int i = 0; - for (Node node = first; node != null; node = node.next) { - - int len = node.elementDataPointer; - - if (len > 0) { - System.arraycopy(node.elementData, 0, objects, i, len); - } - - i += len; - } - - return objects; - } - - @SuppressWarnings("unchecked") - @Override - public T[] toArray(T[] a) { - return (T[]) Arrays.copyOf(toArray(), size, a.getClass()); - } - - public boolean isEmpty() { - return size == 0; - } - - @Override - public Iterator iterator() { - return new Itr(); - } - - private class Itr implements Iterator { - - Node node = first; - - int i = 0;//inner-array index - int j = 0;//total index -> cursor - - int lastReturn = -1; - - int expectedModCount = modCount; - int elementDataPointer = node.elementDataPointer; - - @Override - public boolean hasNext() { - return j != size; - } - - @Override - public T next() { - - checkForComodification(); - - if (j >= size) { - throw new NoSuchElementException(); - } - - if (j >= last.endingIndex + 1) { - throw new ConcurrentModificationException(); - } - - if (j == 0) {// it's for listIterator.when node becomes null. - node = first; - elementDataPointer = node.elementDataPointer; - i = 0; - } - - T val = node.elementData[i++]; - - if (i >= elementDataPointer) { - node = node.next; - i = 0; - elementDataPointer = (node != null) ? node.elementDataPointer : 0; - } - - lastReturn = j++; - - return val; - } - - @Override - public void remove() { - - if (lastReturn < 0) { - throw new IllegalStateException(); - } - - checkForComodification(); - - try { - GlueList.this.remove(lastReturn); - - j = lastReturn; - - lastReturn = -1; - - i = (--i < 0) ? 0 : i; - - elementDataPointer = (node != null) ? node.elementDataPointer : 0; - - expectedModCount = modCount; - } catch (IndexOutOfBoundsException e) { - throw new ConcurrentModificationException(); - } - } - - void checkForComodification() { - if (modCount != expectedModCount) { - throw new ConcurrentModificationException(); - } - } - } - - @Override - public ListIterator listIterator(int index) { - - checkPositionIndex(index); - - return new ListItr(index); - } - - private void checkPositionIndex(int index) { - - if (!(index >= 0 && index <= size)) { - throw new ArrayIndexOutOfBoundsException(index); - } - } - - @Override - public ListIterator listIterator() { - return new ListItr(0); - } - - private class ListItr extends Itr implements ListIterator { - - public ListItr(int index) { - node = (index == size) ? last : getNode(index); - j = index; - i = index - node.startingIndex; - elementDataPointer = node.elementDataPointer; - } - - @Override - public boolean hasPrevious() { - return j != 0; - } - - @Override - public T previous() { - - checkForComodification(); - - int temp = j - 1; - - if (temp < 0) { - throw new NoSuchElementException(); - } - - if (temp >= last.endingIndex + 1) { - throw new ConcurrentModificationException(); - } - - if (j == size) { - - node = last; - - elementDataPointer = node.elementDataPointer; - - i = elementDataPointer; - } - - int index = j - node.startingIndex; - if (index == 0) { - - node = node.pre; - - elementDataPointer = node.elementDataPointer; - - i = elementDataPointer; - } - - T val = node.elementData[--i]; - - if (i < 0) { - node = node.pre; - i = (node != null) ? node.elementDataPointer : 0; - } - - j = temp; - - lastReturn = j; - - return val; - } - - @Override - public int nextIndex() { - return j; - } - - @Override - public int previousIndex() { - return j - 1; - } - - @Override - public void set(T t) { - - if (lastReturn < 0) { - throw new IllegalStateException(); - } - - checkForComodification(); - - try { - GlueList.this.set(lastReturn, t); - } catch (IndexOutOfBoundsException e) { - throw new ConcurrentModificationException(); - } - } - - @Override - public void add(T t) { - - checkForComodification(); - - try { - int temp = j; - - GlueList.this.add(temp, t); - - j = temp + 1; - - lastReturn = -1; - - i++; - elementDataPointer = (node != null) ? node.elementDataPointer : 0; - - expectedModCount = modCount; - } catch (IndexOutOfBoundsException e) { - throw new ConcurrentModificationException(); - } - } - } - - @Override - public int size() { - return size; - } - - @SuppressWarnings("unchecked") - @Override - public Object clone() { - - try { - GlueList clone = (GlueList) super.clone(); - - clone.first = clone.last = null; - - int capacity = min(MAX_ARRAY_SIZE, max(clone.size, max(clone.initialCapacity, DEFAULT_CAPACITY))); - - Node initNode = new Node<>(null, null, 0, capacity); - - clone.initialCapacity = capacity; - - clone.first = clone.last = initNode; - - clone.modCount = 0; - clone.size = 0; - - for (Node node = first; node != null; node = node.next) { - - for (int i = 0; i < node.elementDataPointer; i++) { - clone.add(node.elementData[i]); - } - } - - return clone; - } catch (CloneNotSupportedException e) { - throw new InternalError(); - } - } - - private void writeObject(ObjectOutputStream s) throws IOException { - - int expectedModCount = modCount; - - s.defaultWriteObject(); - - s.writeInt(size); - - for (Node node = first; node != null; node = node.next) { - for (int i = 0; i < node.elementDataPointer; i++) { - s.writeObject(node.elementData[i]); - } - } - - if (modCount != expectedModCount) { - throw new ConcurrentModificationException(); - } - } - - - @SuppressWarnings("unchecked") - private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { - - clear(); - - s.defaultReadObject(); - - int size = s.readInt(); - - for (int i = 0; i < size; i++) { - last.add((T) s.readObject()); - } - } - - static class Node { - - Node pre; - Node next; - - int listSize; - - int startingIndex; - int endingIndex; - - T[] elementData; - int elementDataPointer; - - @SuppressWarnings("unchecked") - Node(Node pre, Node next, int listSize) { - this.pre = pre; - this.next = next; - this.listSize = listSize; - this.elementData = (T[]) new Object[listSize >>> 1]; - this.startingIndex = listSize; - this.endingIndex = listSize + elementData.length - 1; - } - - Node(Node pre, Node next, int listSize, int initialCapacity) { - this.pre = pre; - this.next = next; - this.listSize = listSize; - this.elementData = createElementData(initialCapacity); - this.startingIndex = listSize; - this.endingIndex = listSize + elementData.length - 1; - } - - @SuppressWarnings("unchecked") - T[] createElementData(int capacity) { - - if (capacity == 0 || capacity == 1) { - return (T[]) new Object[DEFAULT_CAPACITY]; - } else if (capacity > 1) { - return (T[]) new Object[capacity]; - } else { - throw new IllegalArgumentException("Illegal Capacity: " + capacity); - } - } - - boolean isAddable() { - return elementDataPointer < elementData.length; - } - - void add(T element) { - elementData[elementDataPointer++] = element; - } - - @Override - public String toString() { - return String.format("[sIndex: %d - eIndex: %d | elementDataPointer: %d | elementDataLength: %d]", startingIndex, endingIndex, elementDataPointer, elementData.length); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java index 4edc5153b..4d8bfa2a7 100644 --- a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java +++ b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java @@ -2,7 +2,7 @@ package com.dfsek.terra.util.structure; import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.structure.Rotation; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Directional; diff --git a/src/test/java/DistributionTest.java b/src/test/java/DistributionTest.java index 22b646a7a..e391073d7 100644 --- a/src/test/java/DistributionTest.java +++ b/src/test/java/DistributionTest.java @@ -1,4 +1,4 @@ -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.junit.jupiter.api.Test; import org.polydev.gaea.math.FastNoiseLite; diff --git a/src/test/java/LookupGenerator.java b/src/test/java/LookupGenerator.java index 34407b501..05c1b2919 100644 --- a/src/test/java/LookupGenerator.java +++ b/src/test/java/LookupGenerator.java @@ -1,7 +1,7 @@ -import com.dfsek.terra.util.GlueList; -import org.apache.commons.math3.util.FastMath; +import net.jafama.FastMath; import org.junit.jupiter.api.Test; import org.polydev.gaea.math.FastNoiseLite; +import org.polydev.gaea.util.GlueList; import java.util.ArrayList; import java.util.Collections; From 1fff01aae6a36c4781fddf91a08518655639b4ff Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Fri, 20 Nov 2020 16:46:41 -0600 Subject: [PATCH 27/57] Remove unnecessary lib --- build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2d9697088..c68dd0c7a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -43,7 +43,6 @@ dependencies { implementation("commons-io:commons-io:2.4") implementation("org.apache.commons:commons-imaging:1.0-alpha2") - implementation("org.apache.commons:commons-rng-core:1.3") compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT") implementation("org.bstats:bstats-bukkit:1.7") From 28109bf9995d1d78a0c32ceed09f636690846ce1 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Fri, 20 Nov 2020 16:48:14 -0600 Subject: [PATCH 28/57] Fix Build --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c68dd0c7a..2b1599f4c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -112,8 +112,8 @@ tasks.named("shadowJar") { tasks.build { dependsOn(tasks.shadowJar) - dependsOn(testWithPaper) - testWithPaper.mustRunAfter(tasks.shadowJar) +// dependsOn(testWithPaper) +// testWithPaper.mustRunAfter(tasks.shadowJar) } val testDir = "target/server/" From ab906b47c8f51d7b85d9138781b55bfd3ff9fb0a Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Fri, 20 Nov 2020 20:49:10 -0600 Subject: [PATCH 29/57] Misc Perf improvements --- .../dfsek/terra/config/base/ConfigUtil.java | 3 ++- .../dfsek/terra/config/base/WorldConfig.java | 2 +- .../terra/config/genconfig/CarverConfig.java | 10 ++-------- .../config/genconfig/biome/BiomeConfig.java | 2 +- .../genconfig/biome/BiomeSlabConfig.java | 3 ++- .../generation/ElevationInterpolator.java | 20 +++++++++---------- .../dfsek/terra/population/CavePopulator.java | 7 ++++--- .../dfsek/terra/population/OrePopulator.java | 4 ++-- .../terra/util/structure/RotationUtil.java | 5 +++-- 9 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java index d19ae54e5..70c4fed2e 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java @@ -17,6 +17,7 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.time.Duration; +import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.Objects; @@ -59,7 +60,7 @@ public final class ConfigUtil { } public static Set toBlockData(List list, String phase, String id) throws InvalidConfigurationException { - Set bl = new HashSet<>(); + Set bl = EnumSet.noneOf(Material.class); for(String s : list) { try { if(s.startsWith("#")) { diff --git a/src/main/java/com/dfsek/terra/config/base/WorldConfig.java b/src/main/java/com/dfsek/terra/config/base/WorldConfig.java index ae8729502..ab292d9ae 100644 --- a/src/main/java/com/dfsek/terra/config/base/WorldConfig.java +++ b/src/main/java/com/dfsek/terra/config/base/WorldConfig.java @@ -42,7 +42,7 @@ public class WorldConfig { FileConfiguration config = new YamlConfiguration(); Debug.info("Loading config " + configID + " for world " + worldID); try { // Load/create world config file - if(configID == null || configID.equals("")) + if(configID == null || configID.isEmpty()) throw new ConfigException("Config pack unspecified in bukkit.yml!", worldID); File configFile = new File(main.getDataFolder() + File.separator + "worlds", worldID + ".yml"); if(!configFile.exists()) { diff --git a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java index 2f4a9e454..ed85dfb39 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java @@ -15,13 +15,7 @@ import org.polydev.gaea.math.Range; import java.io.File; import java.io.IOException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.TreeMap; +import java.util.*; public class CarverConfig extends TerraConfig { private final UserDefinedCarver carver; @@ -74,7 +68,7 @@ public class CarverConfig extends TerraConfig { double rm = getDouble("recalculate-magnitude", 4); shift = new HashMap<>(); for(Map.Entry e : Objects.requireNonNull(getConfigurationSection("shift")).getValues(false).entrySet()) { - Set l = new HashSet<>(); + Set l = EnumSet.noneOf(Material.class); for(String s : (List) e.getValue()) { l.add(Bukkit.createBlockData(s).getMaterial()); Debug.info("Added " + s + " to shift-able blocks"); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java index b3dd53bef..eebe63227 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java @@ -136,7 +136,7 @@ public class BiomeConfig extends TerraConfig { ySlantOffsetBottom = getDouble("slant.y-offset.bottom", 0.25); //Make sure equation is non-null - if(eq == null || eq.equals("")) + if(eq == null || eq.isEmpty()) throw new ConfigException("Could not find noise equation! Biomes must include a noise equation, or extend an abstract biome with one.", getID()); // Create decorator for this config. diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java index 159378ca9..69f353b55 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java @@ -15,6 +15,7 @@ import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; +import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -34,7 +35,7 @@ public class BiomeSlabConfig extends TerraConfigSection { } protected Map> getSlabPalettes(List> paletteConfigSection) throws InvalidConfigurationException { - Map> paletteMap = new HashMap<>(); + Map> paletteMap = new EnumMap<>(Material.class); for(Map e : paletteConfigSection) { for(Map.Entry entry : e.entrySet()) { diff --git a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java index 4ff119fc1..c446775d0 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java @@ -19,7 +19,7 @@ public class ElevationInterpolator { for(int x = -2; x < 8; x++) { for(int z = -2; z < 8; z++) { - gens[x + 2][z + 2] = (WorldGenerator) grid.getBiome(xOrigin + x * 4, zOrigin + z * 4, GenerationPhase.BASE).getGenerator(); + gens[x + 2][z + 2] = (WorldGenerator) grid.getBiome(xOrigin + (x << 2), zOrigin + (z << 2), GenerationPhase.BASE).getGenerator(); } } @@ -58,15 +58,15 @@ public class ElevationInterpolator { } private double biomeAvg(int x, int z) { - return (elevate(getStoredGen(x + 1, z), x * 4 + 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x - 1, z), x * 4 - 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x, z + 1), x * 4 + xOrigin, z * 4 + 4 + zOrigin) - + elevate(getStoredGen(x, z - 1), x * 4 + xOrigin, z * 4 - 4 + zOrigin) - + elevate(getStoredGen(x, z), x * 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x - 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x - 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x + 1, z - 1), x * 4 + xOrigin, z * 4 + zOrigin) - + elevate(getStoredGen(x + 1, z + 1), x * 4 + xOrigin, z * 4 + zOrigin)) / 9D; + return (elevate(getStoredGen(x + 1, z), (x << 2) + 4 + xOrigin, (z << 2) + zOrigin) + + elevate(getStoredGen(x - 1, z), (x << 2) - 4 + xOrigin, (z << 2) + zOrigin) + + elevate(getStoredGen(x, z + 1), (x << 2) + xOrigin, (z << 2) + 4 + zOrigin) + + elevate(getStoredGen(x, z - 1), (x << 2) + xOrigin, (z << 2) - 4 + zOrigin) + + elevate(getStoredGen(x, z), (x << 2) + xOrigin, (z << 2) + zOrigin) + + elevate(getStoredGen(x - 1, z - 1), (x << 2) + xOrigin, (z << 2) + zOrigin) + + elevate(getStoredGen(x - 1, z + 1), (x << 2) + xOrigin, (z << 2) + zOrigin) + + elevate(getStoredGen(x + 1, z - 1), (x << 2) + xOrigin, (z << 2) + zOrigin) + + elevate(getStoredGen(x + 1, z + 1), (x << 2) + xOrigin, (z << 2) + zOrigin)) / 9D; } private double elevate(WorldGenerator g, int x, int z) { diff --git a/src/main/java/com/dfsek/terra/population/CavePopulator.java b/src/main/java/com/dfsek/terra/population/CavePopulator.java index dbed28e7b..4414aac20 100644 --- a/src/main/java/com/dfsek/terra/population/CavePopulator.java +++ b/src/main/java/com/dfsek/terra/population/CavePopulator.java @@ -66,14 +66,15 @@ public class CavePopulator extends BlockPopulator { updateNeeded.add(b); } } - for(Location l : shiftCandidate.keySet()) { + for(Map.Entry entry : shiftCandidate.entrySet()) { + Location l = entry.getKey(); Location mut = l.clone(); Material orig = l.getBlock().getType(); do mut.subtract(0, 1, 0); while(mut.getBlock().getType().equals(orig)); try { - if(c.getShiftedBlocks().get(shiftCandidate.get(l)).contains(mut.getBlock().getType())) { - mut.getBlock().setBlockData(shiftStorage.computeIfAbsent(shiftCandidate.get(l), Material::createBlockData), false); + if(c.getShiftedBlocks().get(entry.getValue()).contains(mut.getBlock().getType())) { + mut.getBlock().setBlockData(shiftStorage.computeIfAbsent(entry.getValue(), Material::createBlockData), false); } } catch(NullPointerException ignore) { } diff --git a/src/main/java/com/dfsek/terra/population/OrePopulator.java b/src/main/java/com/dfsek/terra/population/OrePopulator.java index 4a6097b1b..1ee7348dd 100644 --- a/src/main/java/com/dfsek/terra/population/OrePopulator.java +++ b/src/main/java/com/dfsek/terra/population/OrePopulator.java @@ -36,8 +36,8 @@ public class OrePopulator extends GaeaBlockPopulator { OreConfig ore = e.getKey(); int edgeOffset = ore.getChunkEdgeOffset(); for(int i = 0; i < num; i++) { - int x = random.nextInt(16 - edgeOffset * 2) + edgeOffset; - int z = random.nextInt(16 - edgeOffset * 2) + edgeOffset; + int x = random.nextInt(16 - (edgeOffset << 1)) + edgeOffset; + int z = random.nextInt(16 - (edgeOffset << 1)) + edgeOffset; int y = ores.getOreHeights().get(ore).get(random); Vector v = new Vector(x, y, z); diff --git a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java index 4d8bfa2a7..7dd5f8052 100644 --- a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java +++ b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java @@ -12,6 +12,7 @@ import org.bukkit.block.data.Rail; import org.bukkit.block.data.Rotatable; import org.bukkit.block.data.type.RedstoneWire; +import java.util.EnumMap; import java.util.HashMap; import java.util.Map; @@ -252,7 +253,7 @@ public final class RotationUtil { ((Directional) data).setFacing(rt); } else if(data instanceof MultipleFacing) { MultipleFacing mfData = (MultipleFacing) data; - Map faces = new HashMap<>(); + Map faces = new EnumMap<>(BlockFace.class); for(BlockFace f : mfData.getAllowedFaces()) { faces.put(f, mfData.hasFace(f)); } @@ -266,7 +267,7 @@ public final class RotationUtil { org.bukkit.Axis newAxis = getRotatedAxis(((Orientable) data).getAxis(), r); ((Orientable) data).setAxis(newAxis); } else if(data instanceof RedstoneWire) { - Map connections = new HashMap<>(); + Map connections = new EnumMap<>(BlockFace.class); RedstoneWire rData = (RedstoneWire) data; for(BlockFace f : rData.getAllowedFaces()) { connections.put(f, rData.getFace(f)); From 1b0cbe486f6868b3210b3d6a037f86ff445473c4 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 20 Nov 2020 20:06:21 -0700 Subject: [PATCH 30/57] Optimize ores --- .../terra/config/genconfig/OreConfig.java | 15 ------- .../terra/generation/TerraChunkGenerator.java | 3 +- .../dfsek/terra/population/OrePopulator.java | 43 ++++++++++--------- 3 files changed, 24 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java index 917396877..10383b116 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java @@ -31,8 +31,6 @@ public class OreConfig extends TerraConfig { private final double deformFrequency; private final String id; private final boolean update; - private final boolean crossChunks; - private final int chunkEdgeOffset; Set replaceable; public OreConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException { @@ -47,11 +45,6 @@ public class OreConfig extends TerraConfig { deform = getDouble("deform", 0.75); deformFrequency = getDouble("deform-frequency", 0.1); update = getBoolean("update", false); - crossChunks = getBoolean("cross-chunks", true); - chunkEdgeOffset = getInt("edge-offset", 1); - - if(chunkEdgeOffset > 7 || chunkEdgeOffset < 0) - throw new ConfigException("Edge offset is too high/low!", getID()); replaceable = ConfigUtil.toBlockData(getStringList("replace"), "replaceable", getID()); @@ -121,12 +114,4 @@ public class OreConfig extends TerraConfig { public String toString() { return "Ore with ID " + getID(); } - - public boolean crossChunks() { - return crossChunks; - } - - public int getChunkEdgeOffset() { - return chunkEdgeOffset; - } } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 86a9d6746..3cf6e68d3 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -57,7 +57,6 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { super(ChunkInterpolator.InterpolationType.TRILINEAR); this.configPack = c; popMan.attach(new FloraPopulator()); - popMan.attach(new OrePopulator()); popMan.attach(new SnowPopulator()); } @@ -226,7 +225,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { @Override public @NotNull List getDefaultPopulators(@NotNull World world) { - return Arrays.asList(new CavePopulator(), new StructurePopulator(), popMan); + return Arrays.asList(new CavePopulator(), new StructurePopulator(), new OrePopulator(), popMan); } @Override diff --git a/src/main/java/com/dfsek/terra/population/OrePopulator.java b/src/main/java/com/dfsek/terra/population/OrePopulator.java index 1ee7348dd..8b66f71a9 100644 --- a/src/main/java/com/dfsek/terra/population/OrePopulator.java +++ b/src/main/java/com/dfsek/terra/population/OrePopulator.java @@ -3,49 +3,52 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.OreConfig; import com.dfsek.terra.config.genconfig.biome.BiomeOreConfig; import com.dfsek.terra.event.OreVeinGenerateEvent; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; +import org.bukkit.generator.BlockPopulator; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.biome.Biome; import org.polydev.gaea.generation.GenerationPhase; +import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.Range; -import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; +import org.polydev.gaea.util.FastRandom; import java.util.Map; import java.util.Random; -public class OrePopulator extends GaeaBlockPopulator { +public class OrePopulator extends BlockPopulator { @SuppressWarnings("try") @Override public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("OreTime")) { TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; - ConfigPack config = tw.getConfig(); - Biome b = TerraWorld.getWorld(world).getGrid().getBiome((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8, GenerationPhase.POPULATE); - BiomeOreConfig ores = config.getBiome((UserDefinedBiome) b).getOres(); - for(Map.Entry e : ores.getOres().entrySet()) { - int num = e.getValue().get(random); - OreConfig ore = e.getKey(); - int edgeOffset = ore.getChunkEdgeOffset(); - for(int i = 0; i < num; i++) { - int x = random.nextInt(16 - (edgeOffset << 1)) + edgeOffset; - int z = random.nextInt(16 - (edgeOffset << 1)) + edgeOffset; - int y = ores.getOreHeights().get(ore).get(random); + for(int cx = -1; cx <= 1; cx++) { + for(int cz = -1; cz <= 1; cz++) { + FastRandom r = new FastRandom(MathUtil.getCarverChunkSeed(chunk.getX() + cx, chunk.getZ() + cz, world.getSeed())); + Biome b = TerraWorld.getWorld(world).getGrid().getBiome(((chunk.getX() + cx) << 4) + 8, ((chunk.getZ() + cz) << 4) + 8, GenerationPhase.POPULATE); + BiomeOreConfig ores = ((UserDefinedBiome) b).getConfig().getOres(); + for(Map.Entry e : ores.getOres().entrySet()) { + int num = e.getValue().get(r); + OreConfig ore = e.getKey(); + for(int i = 0; i < num; i++) { + int x = r.nextInt(16) + cx * 16; + int z = r.nextInt(16) + cz * 16; + int y = ores.getOreHeights().get(ore).get(r); - Vector v = new Vector(x, y, z); - OreVeinGenerateEvent event = new OreVeinGenerateEvent(tw, v.toLocation(world), ore); - Bukkit.getPluginManager().callEvent(event); - if(!event.isCancelled()) { - if(ore.crossChunks()) ore.doVein(v, chunk, random); - else ore.doVeinSingle(new Vector(x, y, z), chunk, random); + Vector v = new Vector(x, y, z); + OreVeinGenerateEvent event = new OreVeinGenerateEvent(tw, v.toLocation(world), ore); + Bukkit.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + ore.doVeinSingle(new Vector(x, y, z), chunk, r); + } + } } } } From e43d814169f67fb6556bd12976049fd579df9c17 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 20 Nov 2020 20:22:37 -0700 Subject: [PATCH 31/57] Minor optimizations --- .../java/com/dfsek/terra/async/AsyncStructureFinder.java | 3 +-- .../java/com/dfsek/terra/carving/UserDefinedCarver.java | 2 +- .../java/com/dfsek/terra/command/biome/BiomeCommand.java | 2 +- .../com/dfsek/terra/command/biome/BiomeInfoCommand.java | 2 +- src/main/java/com/dfsek/terra/config/base/ConfigPack.java | 8 -------- .../terra/config/genconfig/biome/BiomeSnowConfig.java | 6 ++++++ src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java | 2 +- .../java/com/dfsek/terra/population/FloraPopulator.java | 6 ++---- .../java/com/dfsek/terra/population/SnowPopulator.java | 4 ++-- .../com/dfsek/terra/population/StructurePopulator.java | 2 +- .../java/com/dfsek/terra/structure/spawn/AirSpawn.java | 4 +--- .../java/com/dfsek/terra/structure/spawn/OceanSpawn.java | 2 +- 12 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java index 70baefc9b..8a22f1158 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java @@ -1,6 +1,5 @@ package com.dfsek.terra.async; -import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.structure.StructureConfig; @@ -34,7 +33,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder { public boolean isValid(int x, int z, StructureConfig target) { World world = getWorld(); Location spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()).toLocation(world); - if(!TerraWorld.getWorld(world).getConfig().getBiome((UserDefinedBiome) getGrid().getBiome(spawn)).getStructures().contains(target)) + if(!((UserDefinedBiome) getGrid().getBiome(spawn)).getConfig().getStructures().contains(target)) return false; Random r2 = new FastRandom(spawn.hashCode()); Structure struc = target.getStructure(r2); diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index 25f147d2c..3ea0e040f 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -60,7 +60,7 @@ public class UserDefinedCarver extends Carver { @Override public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) { ConfigPack c = TerraWorld.getWorld(w).getConfig(); - return new FastRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); + return new FastRandom(random.nextLong() + hash).nextInt(100) < ((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getConfig().getCarverChance(this); } private class UserDefinedWorm extends Worm { diff --git a/src/main/java/com/dfsek/terra/command/biome/BiomeCommand.java b/src/main/java/com/dfsek/terra/command/biome/BiomeCommand.java index fbbd47429..8eb36ae61 100644 --- a/src/main/java/com/dfsek/terra/command/biome/BiomeCommand.java +++ b/src/main/java/com/dfsek/terra/command/biome/BiomeCommand.java @@ -25,7 +25,7 @@ public class BiomeCommand extends WorldCommand { public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) { TerraBiomeGrid grid = TerraWorld.getWorld(sender.getWorld()).getGrid(); UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome(sender.getLocation(), GenerationPhase.POPULATE); - LangUtil.send("command.biome.in", sender, TerraWorld.getWorld(w).getConfig().getBiome(biome).getID()); + LangUtil.send("command.biome.in", sender, biome.getID()); return true; } diff --git a/src/main/java/com/dfsek/terra/command/biome/BiomeInfoCommand.java b/src/main/java/com/dfsek/terra/command/biome/BiomeInfoCommand.java index 2a7e3b7d9..26b3f4b80 100644 --- a/src/main/java/com/dfsek/terra/command/biome/BiomeInfoCommand.java +++ b/src/main/java/com/dfsek/terra/command/biome/BiomeInfoCommand.java @@ -40,7 +40,7 @@ public class BiomeInfoCommand extends WorldCommand { sender.sendMessage("Erodible: " + b.isErodible()); - BiomeConfig bio = cfg.getBiome(b); + BiomeConfig bio = b.getConfig(); List structureConfigs = bio.getStructures(); if(structureConfigs.size() == 0) sender.sendMessage("No Structures"); diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index 9cd605b2e..618bfebaf 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -2,7 +2,6 @@ package com.dfsek.terra.config.base; import com.dfsek.terra.Debug; import com.dfsek.terra.Terra; -import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.carving.UserDefinedCarver; import com.dfsek.terra.config.ConfigLoader; import com.dfsek.terra.config.exception.ConfigException; @@ -274,13 +273,6 @@ public class ConfigPack extends YamlConfiguration { return dataFolder; } - public BiomeConfig getBiome(UserDefinedBiome b) { - for(BiomeConfig biome : biomes.values()) { - if(biome.getBiome().equals(b)) return biome; - } - throw new IllegalArgumentException("No BiomeConfig for provided biome."); - } - public BiomeConfig getBiome(String id) { return biomes.get(id); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java index 447114d96..f4a567ffb 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java @@ -13,11 +13,13 @@ import java.util.Map; public class BiomeSnowConfig extends TerraConfigSection { private final int[] snowHeights; private boolean doSnow = false; + private final boolean physics; public BiomeSnowConfig(TerraConfig parent) throws InvalidConfigurationException { super(parent); snowHeights = new int[256]; List> maps = parent.getMapList("snow"); + this.physics = getParent().getBoolean("snow-physics", false); if(maps.size() == 0) return; try { for(Map e : maps) { @@ -41,4 +43,8 @@ public class BiomeSnowConfig extends TerraConfigSection { public boolean doSnow() { return doSnow; } + + public boolean doPhysics() { + return physics; + } } diff --git a/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java b/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java index d9436e63a..0ca112209 100644 --- a/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java +++ b/src/main/java/com/dfsek/terra/debug/gui/DebugFrame.java @@ -41,7 +41,7 @@ public class DebugFrame extends JFrame implements ActionListener { xp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockX(), x) / x) * getWidth()); zp = (int) (((double) FastMath.floorMod(p.getLocation().getBlockZ(), z) / z) * getHeight()); } - String str = TerraWorld.getWorld(p.getWorld()).getConfig().getBiome((UserDefinedBiome) TerraWorld.getWorld(p.getWorld()).getGrid().getBiome(p.getLocation(), GenerationPhase.POPULATE)).getID(); + String str = ((UserDefinedBiome) TerraWorld.getWorld(p.getWorld()).getGrid().getBiome(p.getLocation(), GenerationPhase.POPULATE)).getID(); g.setColor(new Color(255, 255, 255, 128)); g.fillRect(xp + 13, zp - 13, (int) (8 + 8.25 * str.length()), 33); g.setColor(Color.BLACK); diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index 998c9e19f..ecfee13f8 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -5,7 +5,6 @@ import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.TerraBiomeGrid; -import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeFloraConfig; import com.dfsek.terra.event.TreeGenerateEvent; @@ -34,7 +33,7 @@ public class FloraPopulator extends GaeaBlockPopulator { private static boolean doTrees(@NotNull UserDefinedBiome biome, TerraWorld world, @NotNull Random random, @NotNull Chunk chunk, int x, int z) { for(Block block : getValidTreeSpawnsAt(chunk, x, z, new Range(0, 254))) { Tree tree = biome.getDecorator().getTrees().get(random); - Range range = world.getConfig().getBiome(biome).getTreeRange(tree); + Range range = biome.getConfig().getTreeRange(tree); if(!range.isInRange(block.getY())) continue; try { Location l = block.getLocation(); @@ -70,7 +69,6 @@ public class FloraPopulator extends GaeaBlockPopulator { int originX = chunk.getX() << 4; int originZ = chunk.getZ() << 4; TerraBiomeGrid grid = tw.getGrid(); - ConfigPack config = tw.getConfig(); for(int x = 0; x < 16; x++) { for(int z = 0; z < 16; z++) { UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); @@ -84,7 +82,7 @@ public class FloraPopulator extends GaeaBlockPopulator { } if(biome.getDecorator().getFloraChance() <= 0) continue; try { - BiomeConfig c = config.getBiome(biome); + BiomeConfig c = biome.getConfig(); BiomeFloraConfig f = c.getFlora(); for(int i = 0; i < f.getFloraAttempts(); i++) { Flora item; diff --git a/src/main/java/com/dfsek/terra/population/SnowPopulator.java b/src/main/java/com/dfsek/terra/population/SnowPopulator.java index 4abba7978..700a71894 100644 --- a/src/main/java/com/dfsek/terra/population/SnowPopulator.java +++ b/src/main/java/com/dfsek/terra/population/SnowPopulator.java @@ -55,7 +55,7 @@ public class SnowPopulator extends GaeaBlockPopulator { TerraBiomeGrid g = w.getGrid(); for(int x = 0; x < 16; x++) { for(int z = 0; z < 16; z++) { - BiomeConfig biome = w.getConfig().getBiome((UserDefinedBiome) g.getBiome(origX + x, origZ + z, GenerationPhase.PALETTE_APPLY)); + BiomeConfig biome = ((UserDefinedBiome) g.getBiome(origX + x, origZ + z, GenerationPhase.PALETTE_APPLY)).getConfig(); if(!biome.getSnow().doSnow()) continue; int y; Block b = null; @@ -66,7 +66,7 @@ public class SnowPopulator extends GaeaBlockPopulator { if(random.nextInt(100) >= biome.getSnow().getSnowChance(y)) continue; if(blacklistSpawn.contains(b.getType()) || b.isPassable()) continue; - chunk.getBlock(x, ++y, z).setBlockData(DataUtil.SNOW); + chunk.getBlock(x, ++y, z).setBlockData(DataUtil.SNOW, biome.getSnow().doPhysics()); } } } diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index 23ee5336d..92772f2ad 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -41,7 +41,7 @@ public class StructurePopulator extends BlockPopulator { structure: for(StructureConfig conf : config.getAllStructures()) { Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world); - if(!config.getBiome((UserDefinedBiome) grid.getBiome(spawn)).getStructures().contains(conf)) continue; + if(!((UserDefinedBiome) grid.getBiome(spawn)).getConfig().getStructures().contains(conf)) continue; Random r2 = new FastRandom(spawn.hashCode()); Structure struc = conf.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); diff --git a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java index 028fc49c5..126b121bc 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/AirSpawn.java @@ -2,7 +2,6 @@ package com.dfsek.terra.structure.spawn; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.generation.config.WorldGenerator; import org.bukkit.World; @@ -16,9 +15,8 @@ public class AirSpawn extends Requirement { @Override public boolean matches(int x, int y, int z) { TerraWorld tw = TerraWorld.getWorld(getWorld()); - ConfigPack wc = tw.getConfig(); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); - BiomeConfig c = wc.getBiome(b); + BiomeConfig c = b.getConfig(); if(y <= c.getOcean().getSeaLevel()) return false; int yf = (int) (y - ((WorldGenerator) b.getGenerator()).getElevation(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; diff --git a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java index 1ba455595..52a39b3b4 100644 --- a/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java +++ b/src/main/java/com/dfsek/terra/structure/spawn/OceanSpawn.java @@ -16,7 +16,7 @@ public class OceanSpawn extends Requirement { public boolean matches(int x, int y, int z) { TerraWorld tw = TerraWorld.getWorld(getWorld()); UserDefinedBiome b = (UserDefinedBiome) tw.getGrid().getBiome(x, z, GenerationPhase.POPULATE); - BiomeConfig c = tw.getConfig().getBiome(b); + BiomeConfig c = b.getConfig(); if(y > c.getOcean().getSeaLevel()) return false; int yf = (int) (y - ((WorldGenerator) b.getGenerator()).getElevation(x, z)); return b.getGenerator().getNoise(getNoise(), getWorld(), x, yf, z) <= 0; From c96127fde7fcac00acb6469394301b8729617137 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 20 Nov 2020 23:09:00 -0700 Subject: [PATCH 32/57] Slightly improve performance of NoiseFunction2 --- .../dfsek/terra/config/base/ConfigUtil.java | 3 -- .../com/dfsek/terra/math/NoiseFunction2.java | 25 +---------------- src/main/resources/config.yml | 1 - src/test/java/NoiseTest.java | 28 +++++++++++++++++++ 4 files changed, 29 insertions(+), 28 deletions(-) create mode 100644 src/test/java/NoiseTest.java diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java index 70c4fed2e..d9409ee4a 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java @@ -18,7 +18,6 @@ import java.io.IOException; import java.net.URISyntaxException; import java.time.Duration; import java.util.EnumSet; -import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; @@ -29,7 +28,6 @@ public final class ConfigUtil { public static boolean debug; public static long dataSave; // Period of population data saving, in ticks. public static boolean masterDisableCaves; - public static int cacheSize; public static void loadConfig(JavaPlugin main) { main.saveDefaultConfig(); @@ -38,7 +36,6 @@ public final class ConfigUtil { LangUtil.load(config.getString("language", "en_us"), main); debug = config.getBoolean("debug", false); - cacheSize = config.getInt("cache-size", 3); dataSave = Duration.parse(Objects.requireNonNull(config.getString("data-save", "PT6M"))).toMillis() / 20L; masterDisableCaves = config.getBoolean("master-disable.caves", false); diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index 2545e7e85..898b760c2 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -1,6 +1,5 @@ package com.dfsek.terra.math; -import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.generation.config.NoiseBuilder; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; @@ -8,7 +7,6 @@ import parsii.eval.Expression; import java.util.List; public class NoiseFunction2 implements NoiseFunction { - private final Cache cache = new Cache(); private final FastNoiseLite gen; public NoiseFunction2(long seed, NoiseBuilder builder) { @@ -22,32 +20,11 @@ public class NoiseFunction2 implements NoiseFunction { @Override public double eval(List list) { - return cache.get(list.get(0).evaluate(), list.get(1).evaluate()); + return gen.getNoise(list.get(0).evaluate(), list.get(1).evaluate()); } @Override public boolean isNaturalFunction() { return true; } - - private final class Cache { - private final double[] cacheX = new double[ConfigUtil.cacheSize]; - private final double[] cacheZ = new double[ConfigUtil.cacheSize]; - private final double[] cacheValues = new double[ConfigUtil.cacheSize]; - - public double get(double x, double z) { - for(int i = 0; i < cacheX.length; i++) { - if(cacheX[i] == x && cacheZ[i] == z) return cacheValues[i]; - } - cacheX[0] = x; - cacheZ[0] = z; - cacheValues[0] = gen.getNoise(x, z); - for(int i = 0; i < cacheX.length - 1; i++) { - cacheX[i + 1] = cacheX[i]; - cacheZ[i + 1] = cacheZ[i]; - cacheValues[i + 1] = cacheValues[i]; - } - return cacheValues[0]; - } - } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d87580b25..3488f1a05 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -3,6 +3,5 @@ data-save: PT6M language: "en_us" fail-type: SHUTDOWN dump-default: true -cache-size: 8 master-disable: caves: false \ No newline at end of file diff --git a/src/test/java/NoiseTest.java b/src/test/java/NoiseTest.java new file mode 100644 index 000000000..b11cacc94 --- /dev/null +++ b/src/test/java/NoiseTest.java @@ -0,0 +1,28 @@ +import com.dfsek.terra.generation.config.NoiseBuilder; +import com.dfsek.terra.math.NoiseFunction2; +import org.junit.jupiter.api.Test; +import parsii.eval.Expression; + +import java.util.Arrays; + +public class NoiseTest { + @Test + public void noise() { + NoiseFunction2 noiseFunction = new NoiseFunction2(12345, new NoiseBuilder()); + + for(int i = 0; i < 10; i++) { + long l = System.nanoTime(); + for(int j = 0; j < 1000000; j++) { + noiseFunction.eval(Arrays.asList(get(j), get(i))); + noiseFunction.eval(Arrays.asList(get(j), get(i))); + noiseFunction.eval(Arrays.asList(get(j), get(i))); + } + double n = System.nanoTime() - l; + System.out.println(n / 1000000 + "ms"); + } + } + + private Expression get(double val) { + return () -> val; + } +} From dada49f6bfc82c70956167002d0f5dd68c338b63 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 20 Nov 2020 23:09:19 -0700 Subject: [PATCH 33/57] Lower sampling resolution of AsyncBiomeFinder to drastically increase speed --- src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java index ed8d2e59c..1be836c41 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java @@ -27,11 +27,11 @@ public class AsyncBiomeFinder extends AsyncFeatureFinder { */ @Override public boolean isValid(int x, int z, Biome target) { - return getGrid().getBiome(x, z, GenerationPhase.POST_GEN).equals(target); + return getGrid().getBiome(x << 2, z << 2, GenerationPhase.POST_GEN).equals(target); } @Override public Vector finalizeVector(Vector orig) { - return orig; + return orig.multiply(4); } } From 6a70972ea8d0c3e6efb2700cd9a084ae2197e6b7 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 20 Nov 2020 23:12:18 -0700 Subject: [PATCH 34/57] Make Biome Search Resolution configurable. --- src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java | 5 +++-- src/main/java/com/dfsek/terra/config/base/ConfigUtil.java | 2 ++ src/main/resources/config.yml | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java index 1be836c41..df05abaee 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java @@ -1,6 +1,7 @@ package com.dfsek.terra.async; import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.config.base.ConfigUtil; import org.bukkit.Location; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; @@ -27,11 +28,11 @@ public class AsyncBiomeFinder extends AsyncFeatureFinder { */ @Override public boolean isValid(int x, int z, Biome target) { - return getGrid().getBiome(x << 2, z << 2, GenerationPhase.POST_GEN).equals(target); + return getGrid().getBiome(x * ConfigUtil.biomeSearchRes, z * ConfigUtil.biomeSearchRes, GenerationPhase.POST_GEN).equals(target); } @Override public Vector finalizeVector(Vector orig) { - return orig.multiply(4); + return orig.multiply(ConfigUtil.biomeSearchRes); } } diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java index d9409ee4a..5d8a0268b 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java @@ -28,6 +28,7 @@ public final class ConfigUtil { public static boolean debug; public static long dataSave; // Period of population data saving, in ticks. public static boolean masterDisableCaves; + public static int biomeSearchRes; public static void loadConfig(JavaPlugin main) { main.saveDefaultConfig(); @@ -38,6 +39,7 @@ public final class ConfigUtil { debug = config.getBoolean("debug", false); dataSave = Duration.parse(Objects.requireNonNull(config.getString("data-save", "PT6M"))).toMillis() / 20L; masterDisableCaves = config.getBoolean("master-disable.caves", false); + biomeSearchRes = config.getInt("biome-search-resolution", 4); if(config.getBoolean("dump-default", true)) { try(JarFile jar = new JarFile(new File(Terra.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 3488f1a05..902ae6a91 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -3,5 +3,6 @@ data-save: PT6M language: "en_us" fail-type: SHUTDOWN dump-default: true +biome-search-resolution: 4 master-disable: caves: false \ No newline at end of file From db2d00a1af2e4d5abf10349b05e5d40bf53b6c93 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Sat, 21 Nov 2020 08:34:35 -0600 Subject: [PATCH 35/57] Use Better Suggest Paper Method From Paperlib --- src/main/java/com/dfsek/terra/util/PaperUtil.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dfsek/terra/util/PaperUtil.java b/src/main/java/com/dfsek/terra/util/PaperUtil.java index 55fafc07f..aa8ed3197 100644 --- a/src/main/java/com/dfsek/terra/util/PaperUtil.java +++ b/src/main/java/com/dfsek/terra/util/PaperUtil.java @@ -7,11 +7,13 @@ import org.bukkit.plugin.java.JavaPlugin; import java.util.logging.Level; +import static io.papermc.lib.PaperLib.suggestPaper; + public final class PaperUtil { public static void checkPaper(JavaPlugin main) { Bukkit.getScheduler().scheduleSyncDelayedTask(main, () -> { if(!PaperLib.isPaper()) { - LangUtil.log("use-paper", Level.WARNING); + suggestPaper(main); } }, 100L); } From d96486919611a560d71f3e5e8b0e673ee5087fb8 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Sat, 21 Nov 2020 09:59:19 -0600 Subject: [PATCH 36/57] Add Base Timings --- build.gradle.kts | 3 +++ src/main/java/com/dfsek/terra/Terra.java | 9 +++++++++ .../com/dfsek/terra/generation/TerraChunkGenerator.java | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 2b1599f4c..1de3fa7c4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,6 +22,7 @@ repositories { maven { url = uri("http://maven.enginehub.org/repo/") } maven { url = uri("https://repo.codemc.org/repository/maven-public") } maven { url = uri("https://papermc.io/repo/repository/maven-public/") } + maven { url = uri("http://repo.aikar.co/nexus/content/groups/aikar/") } // maven { url = uri("https://maven.pkg.github.com/solonovamax/Gaea") } } @@ -53,6 +54,7 @@ dependencies { compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") implementation("io.papermc:paperlib:1.0.5") + implementation("co.aikar:minecraft-timings:1.0.4") implementation("net.jafama:jafama:2.3.2") @@ -107,6 +109,7 @@ tasks.named("shadowJar") { relocate("parsii", "com.dfsek.terra.lib.parsii") relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") relocate("net.jafama", "com.dfsek.terra.lib.jafama") + relocate("co.aikar", "com.dfsek.terra.lib.aikar") minimize() } diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index 7999adc6a..0e264dedb 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -1,5 +1,7 @@ package com.dfsek.terra; +import co.aikar.timings.lib.MCTiming; +import co.aikar.timings.lib.TimingManager; import com.dfsek.terra.command.TerraCommand; import com.dfsek.terra.command.structure.LocateCommand; import com.dfsek.terra.config.base.ConfigUtil; @@ -26,6 +28,8 @@ public class Terra extends GaeaPlugin { private static Terra instance; private final Map generatorMap = new HashMap<>(); + private static TimingManager timingManager; + public static Terra getInstance() { return instance; } @@ -58,6 +62,7 @@ public class Terra extends GaeaPlugin { Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, TerraChunkGenerator::saveAll, ConfigUtil.dataSave, ConfigUtil.dataSave); Bukkit.getPluginManager().registerEvents(new EventListener(this), this); PaperUtil.checkPaper(this); + timingManager = TimingManager.of(this); } @Override @@ -83,4 +88,8 @@ public class Terra extends GaeaPlugin { public Language getLanguage() { return LangUtil.getLanguage(); } + + public static MCTiming timing(String name) { + return timingManager.of(name); + } } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 3cf6e68d3..131011865 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -1,5 +1,6 @@ package com.dfsek.terra.generation; +import co.aikar.timings.lib.MCTiming; import com.dfsek.terra.Debug; import com.dfsek.terra.Terra; import com.dfsek.terra.TerraProfiler; @@ -142,6 +143,8 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { @Override @SuppressWarnings("try") public ChunkData generateBase(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, ChunkInterpolator interpolator) { + MCTiming timing = Terra.timing("Generate Base"); + timing.startTiming(); if(needsLoad) load(world); // Load population data for world. ChunkData chunk = createChunkData(world); TerraWorld tw = TerraWorld.getWorld(world); @@ -186,6 +189,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { } } } + timing.stopTiming(); return chunk; } From 0a8f36ad937f952a89cc8d484cdbaa531c2ee0bb Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Sat, 21 Nov 2020 10:51:55 -0600 Subject: [PATCH 37/57] Better Suggest Paper --- src/main/java/com/dfsek/terra/Terra.java | 4 +++- src/main/java/com/dfsek/terra/util/PaperUtil.java | 10 +--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index 0e264dedb..180967adc 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -23,6 +23,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; +import static io.papermc.lib.PaperLib.suggestPaper; + public class Terra extends GaeaPlugin { private static Terra instance; @@ -61,7 +63,7 @@ public class Terra extends GaeaPlugin { saveDefaultConfig(); Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, TerraChunkGenerator::saveAll, ConfigUtil.dataSave, ConfigUtil.dataSave); Bukkit.getPluginManager().registerEvents(new EventListener(this), this); - PaperUtil.checkPaper(this); + suggestPaper(this); timingManager = TimingManager.of(this); } diff --git a/src/main/java/com/dfsek/terra/util/PaperUtil.java b/src/main/java/com/dfsek/terra/util/PaperUtil.java index aa8ed3197..9a5bdb38c 100644 --- a/src/main/java/com/dfsek/terra/util/PaperUtil.java +++ b/src/main/java/com/dfsek/terra/util/PaperUtil.java @@ -9,12 +9,4 @@ import java.util.logging.Level; import static io.papermc.lib.PaperLib.suggestPaper; -public final class PaperUtil { - public static void checkPaper(JavaPlugin main) { - Bukkit.getScheduler().scheduleSyncDelayedTask(main, () -> { - if(!PaperLib.isPaper()) { - suggestPaper(main); - } - }, 100L); - } -} +public final class PaperUtil { } From d594cd8c028a10b486f0a7bc8bc3b3a2e916a9bc Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Sat, 21 Nov 2020 10:55:59 -0600 Subject: [PATCH 38/57] Revert "Add Base Timings" This reverts commit d96486919611a560d71f3e5e8b0e673ee5087fb8. --- build.gradle.kts | 3 --- src/main/java/com/dfsek/terra/Terra.java | 9 --------- .../com/dfsek/terra/generation/TerraChunkGenerator.java | 4 ---- 3 files changed, 16 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1de3fa7c4..2b1599f4c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,6 @@ repositories { maven { url = uri("http://maven.enginehub.org/repo/") } maven { url = uri("https://repo.codemc.org/repository/maven-public") } maven { url = uri("https://papermc.io/repo/repository/maven-public/") } - maven { url = uri("http://repo.aikar.co/nexus/content/groups/aikar/") } // maven { url = uri("https://maven.pkg.github.com/solonovamax/Gaea") } } @@ -54,7 +53,6 @@ dependencies { compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") implementation("io.papermc:paperlib:1.0.5") - implementation("co.aikar:minecraft-timings:1.0.4") implementation("net.jafama:jafama:2.3.2") @@ -109,7 +107,6 @@ tasks.named("shadowJar") { relocate("parsii", "com.dfsek.terra.lib.parsii") relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") relocate("net.jafama", "com.dfsek.terra.lib.jafama") - relocate("co.aikar", "com.dfsek.terra.lib.aikar") minimize() } diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index 180967adc..3e8d03c91 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -1,7 +1,5 @@ package com.dfsek.terra; -import co.aikar.timings.lib.MCTiming; -import co.aikar.timings.lib.TimingManager; import com.dfsek.terra.command.TerraCommand; import com.dfsek.terra.command.structure.LocateCommand; import com.dfsek.terra.config.base.ConfigUtil; @@ -30,8 +28,6 @@ public class Terra extends GaeaPlugin { private static Terra instance; private final Map generatorMap = new HashMap<>(); - private static TimingManager timingManager; - public static Terra getInstance() { return instance; } @@ -64,7 +60,6 @@ public class Terra extends GaeaPlugin { Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, TerraChunkGenerator::saveAll, ConfigUtil.dataSave, ConfigUtil.dataSave); Bukkit.getPluginManager().registerEvents(new EventListener(this), this); suggestPaper(this); - timingManager = TimingManager.of(this); } @Override @@ -90,8 +85,4 @@ public class Terra extends GaeaPlugin { public Language getLanguage() { return LangUtil.getLanguage(); } - - public static MCTiming timing(String name) { - return timingManager.of(name); - } } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 131011865..3cf6e68d3 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -1,6 +1,5 @@ package com.dfsek.terra.generation; -import co.aikar.timings.lib.MCTiming; import com.dfsek.terra.Debug; import com.dfsek.terra.Terra; import com.dfsek.terra.TerraProfiler; @@ -143,8 +142,6 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { @Override @SuppressWarnings("try") public ChunkData generateBase(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, ChunkInterpolator interpolator) { - MCTiming timing = Terra.timing("Generate Base"); - timing.startTiming(); if(needsLoad) load(world); // Load population data for world. ChunkData chunk = createChunkData(world); TerraWorld tw = TerraWorld.getWorld(world); @@ -189,7 +186,6 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { } } } - timing.stopTiming(); return chunk; } From f40f33aa6a9f9409ecda6cbfbce4b534142a4530 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Sat, 21 Nov 2020 14:57:54 -0600 Subject: [PATCH 39/57] Revert "Better Suggest Paper" This reverts commit 0a8f36ad937f952a89cc8d484cdbaa531c2ee0bb. --- src/main/java/com/dfsek/terra/Terra.java | 4 +--- src/main/java/com/dfsek/terra/util/PaperUtil.java | 10 +++++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index 3e8d03c91..7999adc6a 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -21,8 +21,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; -import static io.papermc.lib.PaperLib.suggestPaper; - public class Terra extends GaeaPlugin { private static Terra instance; @@ -59,7 +57,7 @@ public class Terra extends GaeaPlugin { saveDefaultConfig(); Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, TerraChunkGenerator::saveAll, ConfigUtil.dataSave, ConfigUtil.dataSave); Bukkit.getPluginManager().registerEvents(new EventListener(this), this); - suggestPaper(this); + PaperUtil.checkPaper(this); } @Override diff --git a/src/main/java/com/dfsek/terra/util/PaperUtil.java b/src/main/java/com/dfsek/terra/util/PaperUtil.java index 9a5bdb38c..aa8ed3197 100644 --- a/src/main/java/com/dfsek/terra/util/PaperUtil.java +++ b/src/main/java/com/dfsek/terra/util/PaperUtil.java @@ -9,4 +9,12 @@ import java.util.logging.Level; import static io.papermc.lib.PaperLib.suggestPaper; -public final class PaperUtil { } +public final class PaperUtil { + public static void checkPaper(JavaPlugin main) { + Bukkit.getScheduler().scheduleSyncDelayedTask(main, () -> { + if(!PaperLib.isPaper()) { + suggestPaper(main); + } + }, 100L); + } +} From 1f8d9a710f854a25bd8590ba70410b775efb95e4 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 21 Nov 2020 16:14:09 -0700 Subject: [PATCH 40/57] Implement NoiseFunction2 cache --- .../com/dfsek/terra/math/NoiseFunction2.java | 27 ++++++++++++++++- src/test/java/NoiseTest.java | 29 +++++++++++++++---- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index 898b760c2..ac3ab8d87 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -4,10 +4,12 @@ import com.dfsek.terra.generation.config.NoiseBuilder; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; +import java.util.HashMap; import java.util.List; public class NoiseFunction2 implements NoiseFunction { private final FastNoiseLite gen; + private final Cache cache = new Cache(); public NoiseFunction2(long seed, NoiseBuilder builder) { this.gen = builder.build((int) seed); @@ -20,11 +22,34 @@ public class NoiseFunction2 implements NoiseFunction { @Override public double eval(List list) { - return gen.getNoise(list.get(0).evaluate(), list.get(1).evaluate()); + return cache.get(gen, (int) list.get(0).evaluate(), (int) list.get(1).evaluate()); + } + + /** + * Evaluate without cache. For testing. + * + * @param list Parameters. + * @return Result. + */ + public double evalNoCache(List list) { + return gen.getNoise((int) list.get(0).evaluate(), (int) list.get(1).evaluate()); } @Override public boolean isNaturalFunction() { return true; } + + private static class Cache { + private final HashMap map = new HashMap<>(); + + public double get(FastNoiseLite noise, int x, int z) { + long key = (((long) x) << 32) + z; + + return map.computeIfAbsent(key, k -> { + if(map.size() > 512) map.clear(); + return noise.getNoise(x, z); + }); + } + } } diff --git a/src/test/java/NoiseTest.java b/src/test/java/NoiseTest.java index b11cacc94..7be68ad2d 100644 --- a/src/test/java/NoiseTest.java +++ b/src/test/java/NoiseTest.java @@ -9,13 +9,32 @@ public class NoiseTest { @Test public void noise() { NoiseFunction2 noiseFunction = new NoiseFunction2(12345, new NoiseBuilder()); - + System.out.println("Cache:"); for(int i = 0; i < 10; i++) { long l = System.nanoTime(); - for(int j = 0; j < 1000000; j++) { - noiseFunction.eval(Arrays.asList(get(j), get(i))); - noiseFunction.eval(Arrays.asList(get(j), get(i))); - noiseFunction.eval(Arrays.asList(get(j), get(i))); + for(int j = 0; j < 20000; j++) { + for(int x = 0; x < 4; x++) { + for(int y = 0; y < 64; y++) { + for(int z = 0; z < 4; z++) { + noiseFunction.eval(Arrays.asList(get(j * 16 + (x * 4)), get(i * 16 + (z * 4)))); + } + } + } + } + double n = System.nanoTime() - l; + System.out.println(n / 1000000 + "ms"); + } + System.out.println("No Cache:"); + for(int i = 0; i < 10; i++) { + long l = System.nanoTime(); + for(int j = 0; j < 20000; j++) { + for(int x = 0; x < 4; x++) { + for(int y = 0; y < 64; y++) { + for(int z = 0; z < 4; z++) { + noiseFunction.evalNoCache(Arrays.asList(get(j * 16 + (x * 4)), get(i * 16 + (z * 4)))); + } + } + } } double n = System.nanoTime() - l; System.out.println(n / 1000000 + "ms"); From 7ce789d570681070f9cfe8c27f31e86f0fa97136 Mon Sep 17 00:00:00 2001 From: budgidiere Date: Sat, 21 Nov 2020 23:43:08 -0600 Subject: [PATCH 41/57] Async Pop Chunks (#22) * Async Gaea Pop Chunks * newer gaea lib * Yell Twice as Loud about paper and fix bug --- lib/Gaea-1.14.3.jar | Bin 737528 -> 762538 bytes src/main/java/com/dfsek/terra/Terra.java | 2 +- .../terra/generation/TerraChunkGenerator.java | 1 + .../terra/population/FloraPopulator.java | 13 ++++++------ .../dfsek/terra/population/SnowPopulator.java | 11 +++++----- .../java/com/dfsek/terra/util/PaperUtil.java | 20 ------------------ 6 files changed, 15 insertions(+), 32 deletions(-) delete mode 100644 src/main/java/com/dfsek/terra/util/PaperUtil.java diff --git a/lib/Gaea-1.14.3.jar b/lib/Gaea-1.14.3.jar index 0fc0aa392d0d5127bb0fb24a932fec3ea3bf180d..62c845824f679aa33142c33274202f8d3cdb44bd 100644 GIT binary patch delta 85485 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ξj5PYIFUe0sC79%snLFlZTZXF<3tu~oX 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 delta 62138 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 futureChunk, int chunkX, int chunkZ) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("FloraTime")) { TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; - int originX = chunk.getX() << 4; - int originZ = chunk.getZ() << 4; TerraBiomeGrid grid = tw.getGrid(); + int originX = chunkX << 4; + int originZ = chunkZ << 4; for(int x = 0; x < 16; x++) { for(int z = 0; z < 16; z++) { - UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); + UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunkX << 4) + x, (chunkZ << 4) + z, GenerationPhase.POPULATE); if((x & 1) == 0 && (z & 1) == 0) { int treeChance = biome.getDecorator().getTreeDensity(); if(random.nextInt(1000) < treeChance) { int xt = offset(random, x); int zt = offset(random, z); - if(doTrees(biome, tw, random, chunk, xt, zt)) continue; + if(doTrees(biome, tw, random, futureChunk.join(), xt, zt)) continue; } } if(biome.getDecorator().getFloraChance() <= 0) continue; @@ -89,7 +90,7 @@ public class FloraPopulator extends GaeaBlockPopulator { if(f.isFloraSimplex()) item = biome.getDecorator().getFlora().get(f.getFloraNoise(), originX + x, originZ + z); else item = biome.getDecorator().getFlora().get(random); - for(Block highest : item.getValidSpawnsAt(chunk, x, z, c.getFloraHeights(item))) { + for(Block highest : item.getValidSpawnsAt(futureChunk.join(), x, z, c.getFloraHeights(item))) { if(random.nextInt(100) < biome.getDecorator().getFloraChance()) item.plant(highest.getLocation()); } diff --git a/src/main/java/com/dfsek/terra/population/SnowPopulator.java b/src/main/java/com/dfsek/terra/population/SnowPopulator.java index 700a71894..75763851f 100644 --- a/src/main/java/com/dfsek/terra/population/SnowPopulator.java +++ b/src/main/java/com/dfsek/terra/population/SnowPopulator.java @@ -20,6 +20,7 @@ import org.polydev.gaea.profiler.ProfileFuture; import java.util.HashSet; import java.util.Random; import java.util.Set; +import java.util.concurrent.CompletableFuture; public class SnowPopulator extends GaeaBlockPopulator { private static final Set blacklistSpawn = new HashSet<>(); @@ -46,10 +47,10 @@ public class SnowPopulator extends GaeaBlockPopulator { @SuppressWarnings("try") @Override - public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { + public void populate(@NotNull World world, @NotNull Random random, @NotNull CompletableFuture futureChunk, int chunkX, int chunkZ) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("SnowTime")) { - int origX = chunk.getX() << 4; - int origZ = chunk.getZ() << 4; + int origX = chunkX << 4; + int origZ = chunkZ << 4; TerraWorld w = TerraWorld.getWorld(world); if(!w.isSafe()) return; TerraBiomeGrid g = w.getGrid(); @@ -60,13 +61,13 @@ public class SnowPopulator extends GaeaBlockPopulator { int y; Block b = null; for(y = 254; y > 0; y--) { - b = chunk.getBlock(x, y, z); + b = futureChunk.join().getBlock(x, y, z); if(!b.getType().isAir()) break; } if(random.nextInt(100) >= biome.getSnow().getSnowChance(y)) continue; if(blacklistSpawn.contains(b.getType()) || b.isPassable()) continue; - chunk.getBlock(x, ++y, z).setBlockData(DataUtil.SNOW, biome.getSnow().doPhysics()); + futureChunk.join().getBlock(x, ++y, z).setBlockData(DataUtil.SNOW, biome.getSnow().doPhysics()); } } } diff --git a/src/main/java/com/dfsek/terra/util/PaperUtil.java b/src/main/java/com/dfsek/terra/util/PaperUtil.java deleted file mode 100644 index aa8ed3197..000000000 --- a/src/main/java/com/dfsek/terra/util/PaperUtil.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.dfsek.terra.util; - -import com.dfsek.terra.config.lang.LangUtil; -import io.papermc.lib.PaperLib; -import org.bukkit.Bukkit; -import org.bukkit.plugin.java.JavaPlugin; - -import java.util.logging.Level; - -import static io.papermc.lib.PaperLib.suggestPaper; - -public final class PaperUtil { - public static void checkPaper(JavaPlugin main) { - Bukkit.getScheduler().scheduleSyncDelayedTask(main, () -> { - if(!PaperLib.isPaper()) { - suggestPaper(main); - } - }, 100L); - } -} From 3dd08f30a78f19d4531a0c34a98712e04304fcb9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 21 Nov 2020 23:55:14 -0700 Subject: [PATCH 42/57] Revert "Async Pop Chunks (#22)" This reverts commit 7ce789d5 --- lib/Gaea-1.14.3.jar | Bin 762538 -> 737528 bytes src/main/java/com/dfsek/terra/Terra.java | 2 +- .../terra/generation/TerraChunkGenerator.java | 1 - .../terra/population/FloraPopulator.java | 13 ++++++------- .../dfsek/terra/population/SnowPopulator.java | 11 +++++------ .../java/com/dfsek/terra/util/PaperUtil.java | 17 +++++++++++++++++ 6 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/util/PaperUtil.java diff --git a/lib/Gaea-1.14.3.jar b/lib/Gaea-1.14.3.jar index 62c845824f679aa33142c33274202f8d3cdb44bd..0fc0aa392d0d5127bb0fb24a932fec3ea3bf180d 100644 GIT binary patch delta 62138 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ξj5PYIFUe0sC79%snLFlZTZXF<3tu~oX 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 diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index 60a2efe05..7999adc6a 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -6,6 +6,7 @@ import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.base.WorldConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.generation.TerraChunkGenerator; +import com.dfsek.terra.util.PaperUtil; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.command.PluginCommand; @@ -15,7 +16,6 @@ import org.jetbrains.annotations.Nullable; import org.polydev.gaea.GaeaPlugin; import org.polydev.gaea.generation.GaeaChunkGenerator; import org.polydev.gaea.lang.Language; -import org.polydev.gaea.util.PaperUtil; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 8747335ab..3cf6e68d3 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -44,7 +44,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; -import java.util.concurrent.CompletableFuture; import java.util.logging.Level; diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index b550e3c9b..ecfee13f8 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -25,7 +25,6 @@ import org.polydev.gaea.world.Flora; import java.util.List; import java.util.Random; -import java.util.concurrent.CompletableFuture; /** * Populates Flora and Trees @@ -63,22 +62,22 @@ public class FloraPopulator extends GaeaBlockPopulator { @SuppressWarnings("try") @Override - public void populate(@NotNull World world, @NotNull Random random, @NotNull CompletableFuture futureChunk, int chunkX, int chunkZ) { + public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("FloraTime")) { TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; + int originX = chunk.getX() << 4; + int originZ = chunk.getZ() << 4; TerraBiomeGrid grid = tw.getGrid(); - int originX = chunkX << 4; - int originZ = chunkZ << 4; for(int x = 0; x < 16; x++) { for(int z = 0; z < 16; z++) { - UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunkX << 4) + x, (chunkZ << 4) + z, GenerationPhase.POPULATE); + UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); if((x & 1) == 0 && (z & 1) == 0) { int treeChance = biome.getDecorator().getTreeDensity(); if(random.nextInt(1000) < treeChance) { int xt = offset(random, x); int zt = offset(random, z); - if(doTrees(biome, tw, random, futureChunk.join(), xt, zt)) continue; + if(doTrees(biome, tw, random, chunk, xt, zt)) continue; } } if(biome.getDecorator().getFloraChance() <= 0) continue; @@ -90,7 +89,7 @@ public class FloraPopulator extends GaeaBlockPopulator { if(f.isFloraSimplex()) item = biome.getDecorator().getFlora().get(f.getFloraNoise(), originX + x, originZ + z); else item = biome.getDecorator().getFlora().get(random); - for(Block highest : item.getValidSpawnsAt(futureChunk.join(), x, z, c.getFloraHeights(item))) { + for(Block highest : item.getValidSpawnsAt(chunk, x, z, c.getFloraHeights(item))) { if(random.nextInt(100) < biome.getDecorator().getFloraChance()) item.plant(highest.getLocation()); } diff --git a/src/main/java/com/dfsek/terra/population/SnowPopulator.java b/src/main/java/com/dfsek/terra/population/SnowPopulator.java index 75763851f..700a71894 100644 --- a/src/main/java/com/dfsek/terra/population/SnowPopulator.java +++ b/src/main/java/com/dfsek/terra/population/SnowPopulator.java @@ -20,7 +20,6 @@ import org.polydev.gaea.profiler.ProfileFuture; import java.util.HashSet; import java.util.Random; import java.util.Set; -import java.util.concurrent.CompletableFuture; public class SnowPopulator extends GaeaBlockPopulator { private static final Set blacklistSpawn = new HashSet<>(); @@ -47,10 +46,10 @@ public class SnowPopulator extends GaeaBlockPopulator { @SuppressWarnings("try") @Override - public void populate(@NotNull World world, @NotNull Random random, @NotNull CompletableFuture futureChunk, int chunkX, int chunkZ) { + public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("SnowTime")) { - int origX = chunkX << 4; - int origZ = chunkZ << 4; + int origX = chunk.getX() << 4; + int origZ = chunk.getZ() << 4; TerraWorld w = TerraWorld.getWorld(world); if(!w.isSafe()) return; TerraBiomeGrid g = w.getGrid(); @@ -61,13 +60,13 @@ public class SnowPopulator extends GaeaBlockPopulator { int y; Block b = null; for(y = 254; y > 0; y--) { - b = futureChunk.join().getBlock(x, y, z); + b = chunk.getBlock(x, y, z); if(!b.getType().isAir()) break; } if(random.nextInt(100) >= biome.getSnow().getSnowChance(y)) continue; if(blacklistSpawn.contains(b.getType()) || b.isPassable()) continue; - futureChunk.join().getBlock(x, ++y, z).setBlockData(DataUtil.SNOW, biome.getSnow().doPhysics()); + chunk.getBlock(x, ++y, z).setBlockData(DataUtil.SNOW, biome.getSnow().doPhysics()); } } } diff --git a/src/main/java/com/dfsek/terra/util/PaperUtil.java b/src/main/java/com/dfsek/terra/util/PaperUtil.java new file mode 100644 index 000000000..08f1fc2bc --- /dev/null +++ b/src/main/java/com/dfsek/terra/util/PaperUtil.java @@ -0,0 +1,17 @@ +package com.dfsek.terra.util; + +import io.papermc.lib.PaperLib; +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +import static io.papermc.lib.PaperLib.suggestPaper; + +public final class PaperUtil { + public static void checkPaper(JavaPlugin main) { + Bukkit.getScheduler().scheduleSyncDelayedTask(main, () -> { + if(!PaperLib.isPaper()) { + suggestPaper(main); + } + }, 100L); + } +} From 21d606853a3fd123f1caa7cec5b939dc04272f06 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 22 Nov 2020 00:27:12 -0700 Subject: [PATCH 43/57] Fix cache wackiness --- .../com/dfsek/terra/math/NoiseFunction2.java | 21 ++++++++++++------- src/test/java/NoiseTest.java | 15 +++++++------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index ac3ab8d87..7ceeee80a 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -4,8 +4,9 @@ import com.dfsek.terra.generation.config.NoiseBuilder; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; public class NoiseFunction2 implements NoiseFunction { private final FastNoiseLite gen; @@ -40,16 +41,20 @@ public class NoiseFunction2 implements NoiseFunction { return true; } - private static class Cache { - private final HashMap map = new HashMap<>(); + private static class Cache extends LinkedHashMap { + private static final long serialVersionUID = 8915092734723467010L; public double get(FastNoiseLite noise, int x, int z) { - long key = (((long) x) << 32) + z; + long key = (long) x << 32 | z & 0xFFFFFFFFL; - return map.computeIfAbsent(key, k -> { - if(map.size() > 512) map.clear(); - return noise.getNoise(x, z); - }); + return computeIfAbsent(key, k -> noise.getNoise(x, z)); + } + + + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + int maxSize = 512; + return size() > maxSize; } } } diff --git a/src/test/java/NoiseTest.java b/src/test/java/NoiseTest.java index 7be68ad2d..4c9dd5beb 100644 --- a/src/test/java/NoiseTest.java +++ b/src/test/java/NoiseTest.java @@ -10,9 +10,10 @@ public class NoiseTest { public void noise() { NoiseFunction2 noiseFunction = new NoiseFunction2(12345, new NoiseBuilder()); System.out.println("Cache:"); - for(int i = 0; i < 10; i++) { + int a = 0; + for(int i = 0; i < 200; i++) { long l = System.nanoTime(); - for(int j = 0; j < 20000; j++) { + for(int j = 0; j < 5000; j++) { for(int x = 0; x < 4; x++) { for(int y = 0; y < 64; y++) { for(int z = 0; z < 4; z++) { @@ -22,12 +23,13 @@ public class NoiseTest { } } double n = System.nanoTime() - l; - System.out.println(n / 1000000 + "ms"); + System.out.print((long) n / 1000000 + "ms" + ((a % 10 == 0) ? "\n" : " ")); + a++; } System.out.println("No Cache:"); - for(int i = 0; i < 10; i++) { + for(int i = 0; i < 200; i++) { long l = System.nanoTime(); - for(int j = 0; j < 20000; j++) { + for(int j = 0; j < 5000; j++) { for(int x = 0; x < 4; x++) { for(int y = 0; y < 64; y++) { for(int z = 0; z < 4; z++) { @@ -37,7 +39,8 @@ public class NoiseTest { } } double n = System.nanoTime() - l; - System.out.println(n / 1000000 + "ms"); + System.out.print((long) n / 1000000 + "ms" + ((a % 10 == 0) ? "\n" : " ")); + a++; } } From 8b95e86fe26a7e24bdefcce18357cc9c88fe0678 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 22 Nov 2020 00:27:26 -0700 Subject: [PATCH 44/57] Move trees to separate populator --- .../terra/generation/TerraChunkGenerator.java | 2 + .../terra/population/FloraPopulator.java | 45 ------------ .../dfsek/terra/population/TreePopulator.java | 71 +++++++++++++++++++ 3 files changed, 73 insertions(+), 45 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/population/TreePopulator.java diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 3cf6e68d3..d51230940 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -15,6 +15,7 @@ import com.dfsek.terra.population.FloraPopulator; import com.dfsek.terra.population.OrePopulator; import com.dfsek.terra.population.SnowPopulator; import com.dfsek.terra.population.StructurePopulator; +import com.dfsek.terra.population.TreePopulator; import com.dfsek.terra.util.DataUtil; import org.bukkit.Chunk; import org.bukkit.Material; @@ -56,6 +57,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { public TerraChunkGenerator(ConfigPack c) { super(ChunkInterpolator.InterpolationType.TRILINEAR); this.configPack = c; + popMan.attach(new TreePopulator()); popMan.attach(new FloraPopulator()); popMan.attach(new SnowPopulator()); } diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index ecfee13f8..1f9afa043 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -1,64 +1,27 @@ package com.dfsek.terra.population; -import com.dfsek.terra.Terra; import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeFloraConfig; -import com.dfsek.terra.event.TreeGenerateEvent; -import net.jafama.FastMath; -import org.bukkit.Bukkit; import org.bukkit.Chunk; -import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.generation.GenerationPhase; -import org.polydev.gaea.math.Range; import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; -import org.polydev.gaea.tree.Tree; -import org.polydev.gaea.util.GlueList; import org.polydev.gaea.world.Flora; -import java.util.List; import java.util.Random; /** * Populates Flora and Trees */ public class FloraPopulator extends GaeaBlockPopulator { - private static boolean doTrees(@NotNull UserDefinedBiome biome, TerraWorld world, @NotNull Random random, @NotNull Chunk chunk, int x, int z) { - for(Block block : getValidTreeSpawnsAt(chunk, x, z, new Range(0, 254))) { - Tree tree = biome.getDecorator().getTrees().get(random); - Range range = biome.getConfig().getTreeRange(tree); - if(!range.isInRange(block.getY())) continue; - try { - Location l = block.getLocation(); - TreeGenerateEvent event = new TreeGenerateEvent(world, l, tree); - Bukkit.getPluginManager().callEvent(event); - if(!event.isCancelled()) tree.plant(l, random, Terra.getInstance()); - } catch(NullPointerException ignore) { - } - } - return false; - } - public static List getValidTreeSpawnsAt(Chunk chunk, int x, int z, Range check) { - List blocks = new GlueList<>(); - for(int y : check) { - if(chunk.getBlock(x, y, z).getType().isSolid() && chunk.getBlock(x, y + 1, z).getType().isAir()) { - blocks.add(chunk.getBlock(x, y + 1, z)); - } - } - return blocks; - } - - private static int offset(Random r, int i) { - return FastMath.min(FastMath.max(i + r.nextInt(3) - 1, 0), 15); - } @SuppressWarnings("try") @Override @@ -72,14 +35,6 @@ public class FloraPopulator extends GaeaBlockPopulator { for(int x = 0; x < 16; x++) { for(int z = 0; z < 16; z++) { UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); - if((x & 1) == 0 && (z & 1) == 0) { - int treeChance = biome.getDecorator().getTreeDensity(); - if(random.nextInt(1000) < treeChance) { - int xt = offset(random, x); - int zt = offset(random, z); - if(doTrees(biome, tw, random, chunk, xt, zt)) continue; - } - } if(biome.getDecorator().getFloraChance() <= 0) continue; try { BiomeConfig c = biome.getConfig(); diff --git a/src/main/java/com/dfsek/terra/population/TreePopulator.java b/src/main/java/com/dfsek/terra/population/TreePopulator.java new file mode 100644 index 000000000..c2b59d000 --- /dev/null +++ b/src/main/java/com/dfsek/terra/population/TreePopulator.java @@ -0,0 +1,71 @@ +package com.dfsek.terra.population; + +import com.dfsek.terra.Terra; +import com.dfsek.terra.TerraWorld; +import com.dfsek.terra.biome.UserDefinedBiome; +import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.event.TreeGenerateEvent; +import net.jafama.FastMath; +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.jetbrains.annotations.NotNull; +import org.polydev.gaea.generation.GenerationPhase; +import org.polydev.gaea.math.Range; +import org.polydev.gaea.population.GaeaBlockPopulator; +import org.polydev.gaea.tree.Tree; +import org.polydev.gaea.util.GlueList; + +import java.util.List; +import java.util.Random; + +public class TreePopulator extends GaeaBlockPopulator { + private static void doTrees(@NotNull UserDefinedBiome biome, TerraWorld world, @NotNull Random random, @NotNull Chunk chunk, int x, int z) { + for(Block block : getValidTreeSpawnsAt(chunk, x, z, new Range(0, 254))) { + Tree tree = biome.getDecorator().getTrees().get(random); + Range range = biome.getConfig().getTreeRange(tree); + if(!range.isInRange(block.getY())) continue; + try { + Location l = block.getLocation(); + TreeGenerateEvent event = new TreeGenerateEvent(world, l, tree); + Bukkit.getPluginManager().callEvent(event); + if(!event.isCancelled()) tree.plant(l, random, Terra.getInstance()); + } catch(NullPointerException ignore) { + } + } + } + + public static List getValidTreeSpawnsAt(Chunk chunk, int x, int z, Range check) { + List blocks = new GlueList<>(); + for(int y : check) { + if(chunk.getBlock(x, y, z).getType().isSolid() && chunk.getBlock(x, y + 1, z).getType().isAir()) { + blocks.add(chunk.getBlock(x, y + 1, z)); + } + } + return blocks; + } + + private static int offset(Random r, int i) { + return FastMath.min(FastMath.max(i + r.nextInt(3) - 1, 0), 15); + } + + @Override + public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { + TerraWorld tw = TerraWorld.getWorld(world); + if(!tw.isSafe()) return; + TerraBiomeGrid grid = tw.getGrid(); + for(int x = 0; x < 16; x += 2) { + for(int z = 0; z < 16; z += 2) { + UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); + int treeChance = biome.getDecorator().getTreeDensity(); + if(random.nextInt(1000) < treeChance) { + int xt = offset(random, x); + int zt = offset(random, z); + doTrees(biome, tw, random, chunk, xt, zt); + } + } + } + } +} From b90993c492a9e202a67b7409deae6eb44b79ddf8 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 22 Nov 2020 13:12:52 -0700 Subject: [PATCH 45/57] Add trees to profiler --- .../java/com/dfsek/terra/TerraProfiler.java | 1 + .../dfsek/terra/population/TreePopulator.java | 27 +++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/dfsek/terra/TerraProfiler.java b/src/main/java/com/dfsek/terra/TerraProfiler.java index 428e318b8..e03c4ea2b 100644 --- a/src/main/java/com/dfsek/terra/TerraProfiler.java +++ b/src/main/java/com/dfsek/terra/TerraProfiler.java @@ -16,6 +16,7 @@ public class TerraProfiler extends WorldProfiler { super(w); this .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "FloraTime") + .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "TreeTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "OreTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "CaveTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "StructureTime") diff --git a/src/main/java/com/dfsek/terra/population/TreePopulator.java b/src/main/java/com/dfsek/terra/population/TreePopulator.java index c2b59d000..3adf2b908 100644 --- a/src/main/java/com/dfsek/terra/population/TreePopulator.java +++ b/src/main/java/com/dfsek/terra/population/TreePopulator.java @@ -1,6 +1,7 @@ package com.dfsek.terra.population; import com.dfsek.terra.Terra; +import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.TerraBiomeGrid; @@ -15,6 +16,7 @@ import org.jetbrains.annotations.NotNull; import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.math.Range; import org.polydev.gaea.population.GaeaBlockPopulator; +import org.polydev.gaea.profiler.ProfileFuture; import org.polydev.gaea.tree.Tree; import org.polydev.gaea.util.GlueList; @@ -52,18 +54,21 @@ public class TreePopulator extends GaeaBlockPopulator { } @Override + @SuppressWarnings("try") public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { - TerraWorld tw = TerraWorld.getWorld(world); - if(!tw.isSafe()) return; - TerraBiomeGrid grid = tw.getGrid(); - for(int x = 0; x < 16; x += 2) { - for(int z = 0; z < 16; z += 2) { - UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); - int treeChance = biome.getDecorator().getTreeDensity(); - if(random.nextInt(1000) < treeChance) { - int xt = offset(random, x); - int zt = offset(random, z); - doTrees(biome, tw, random, chunk, xt, zt); + try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("TreeTime")) { + TerraWorld tw = TerraWorld.getWorld(world); + if(!tw.isSafe()) return; + TerraBiomeGrid grid = tw.getGrid(); + for(int x = 0; x < 16; x += 2) { + for(int z = 0; z < 16; z += 2) { + UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); + int treeChance = biome.getDecorator().getTreeDensity(); + if(random.nextInt(1000) < treeChance) { + int xt = offset(random, x); + int zt = offset(random, z); + doTrees(biome, tw, random, chunk, xt, zt); + } } } } From 177a18855c99c4c4731916dfea8e64e0697af308 Mon Sep 17 00:00:00 2001 From: budgidiere Date: Sun, 22 Nov 2020 18:28:40 -0600 Subject: [PATCH 46/57] Faster Cache (#23) * Faster Cache * Optimize Imports --- .../dfsek/terra/config/base/ConfigUtil.java | 2 + .../terra/config/genconfig/CarverConfig.java | 8 +- .../com/dfsek/terra/math/NoiseFunction2.java | 28 +- .../dfsek/terra/util/hash/HashIntrinsic.java | 118 +++++++ .../terra/util/hash/HashMapDoubleDouble.java | 291 ++++++++++++++++++ .../terra/util/structure/RotationUtil.java | 1 - src/main/resources/config.yml | 1 + 7 files changed, 434 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/util/hash/HashIntrinsic.java create mode 100644 src/main/java/com/dfsek/terra/util/hash/HashMapDoubleDouble.java diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java index 5d8a0268b..048f551db 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java @@ -29,6 +29,7 @@ public final class ConfigUtil { public static long dataSave; // Period of population data saving, in ticks. public static boolean masterDisableCaves; public static int biomeSearchRes; + public static int cacheSize; public static void loadConfig(JavaPlugin main) { main.saveDefaultConfig(); @@ -40,6 +41,7 @@ public final class ConfigUtil { dataSave = Duration.parse(Objects.requireNonNull(config.getString("data-save", "PT6M"))).toMillis() / 20L; masterDisableCaves = config.getBoolean("master-disable.caves", false); biomeSearchRes = config.getInt("biome-search-resolution", 4); + cacheSize = config.getInt("cache-size", 512); if(config.getBoolean("dump-default", true)) { try(JarFile jar = new JarFile(new File(Terra.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) { diff --git a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java index ed85dfb39..2fde8d449 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java @@ -15,7 +15,13 @@ import org.polydev.gaea.math.Range; import java.io.File; import java.io.IOException; -import java.util.*; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.TreeMap; public class CarverConfig extends TerraConfig { private final UserDefinedCarver carver; diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index 7ceeee80a..b8f37240a 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -1,12 +1,12 @@ package com.dfsek.terra.math; +import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.generation.config.NoiseBuilder; +import com.dfsek.terra.util.hash.HashMapDoubleDouble; import org.polydev.gaea.math.FastNoiseLite; import parsii.eval.Expression; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; public class NoiseFunction2 implements NoiseFunction { private final FastNoiseLite gen; @@ -23,7 +23,7 @@ public class NoiseFunction2 implements NoiseFunction { @Override public double eval(List list) { - return cache.get(gen, (int) list.get(0).evaluate(), (int) list.get(1).evaluate()); + return cache.get(gen, list.get(0).evaluate(), list.get(1).evaluate()); } /** @@ -41,20 +41,22 @@ public class NoiseFunction2 implements NoiseFunction { return true; } - private static class Cache extends LinkedHashMap { + private static class Cache extends HashMapDoubleDouble { private static final long serialVersionUID = 8915092734723467010L; + private final int cacheSize = ConfigUtil.cacheSize; - public double get(FastNoiseLite noise, int x, int z) { - long key = (long) x << 32 | z & 0xFFFFFFFFL; - - return computeIfAbsent(key, k -> noise.getNoise(x, z)); + public double get(FastNoiseLite noise, double x, double z) { + double xx = x >= 0 ? x * 2 : x * -2 - 1; + double zz = z >= 0 ? z * 2 : z * -2 - 1; + double key = (xx >= zz) ? (xx * xx + xx + zz) : (zz * zz + xx); + double value = this.get(key); + if (this.size() > cacheSize) { this.clear(); } + return (value == 4.9E-324D ? addAndReturn(noise.getNoise(x, z), key) : value); } - - @Override - protected boolean removeEldestEntry(Map.Entry eldest) { - int maxSize = 512; - return size() > maxSize; + private double addAndReturn(double value, double key) { + this.put(key, value); + return value; } } } diff --git a/src/main/java/com/dfsek/terra/util/hash/HashIntrinsic.java b/src/main/java/com/dfsek/terra/util/hash/HashIntrinsic.java new file mode 100644 index 000000000..a5f13986b --- /dev/null +++ b/src/main/java/com/dfsek/terra/util/hash/HashIntrinsic.java @@ -0,0 +1,118 @@ +/* +Copyright 2009 Sandia Corporation. Under the terms of Contract +DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government +retains certain rights in this software. + +BSD Open Source License. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Sandia National Laboratories nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + */ + +package com.dfsek.terra.util.hash; + +import java.io.Serializable; + +public abstract class HashIntrinsic implements Serializable { + private static final long serialVersionUID = 8058099372006904458L; + protected static final int DEFAULT_INITIAL_CAPACITY = 16; + protected static final int MAXIMUM_CAPACITY = 1073741824; + protected static final float DEFAULT_LOAD_FACTOR = 0.75F; + protected int size; + protected int threshold; + protected float loadFactor; + protected int capMinus1; + public static final int FLOAT_EXP_BIT_MASK = 2139095040; + public static final int FLOAT_SIGNIF_BIT_MASK = 8388607; + public static final long DOUBLE_EXP_BIT_MASK = 9218868437227405312L; + public static final long DOUBLE_SIGNIF_BIT_MASK = 4503599627370495L; + + protected HashIntrinsic(int initialCapacity, float loadFactor) { + if (initialCapacity <= 0) { + throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity); + } else if (!(loadFactor <= 0.0F) && !Float.isNaN(loadFactor)) { + if (initialCapacity > 1073741824) { + initialCapacity = 1073741824; + } + + int capacity; + for(capacity = 1; capacity < initialCapacity; capacity <<= 1) { + } + + this.capMinus1 = capacity - 1; + this.loadFactor = loadFactor; + this.threshold = (int)((float)capacity * loadFactor); + } else { + throw new IllegalArgumentException("Illegal load factor: " + loadFactor); + } + } + + protected static int hashCodeLong(long value) { + return (int)(value ^ value >>> 32); + } + + protected static int hashCodeFloat(float value) { + return floatToIntBits(value); + } + + protected static int hashCodeDouble(double value) { + long bits = doubleToLongBits(value); + return (int)(bits ^ bits >>> 32); + } + + public static int floatToIntBits(float value) { + int result = Float.floatToRawIntBits(value); + if ((result & 2139095040) == 2139095040 && (result & 8388607) != 0) { + result = 2143289344; + } + + return result; + } + + public static long doubleToLongBits(double value) { + long result = Double.doubleToRawLongBits(value); + if ((result & 9218868437227405312L) == 9218868437227405312L && (result & 4503599627370495L) != 0L) { + result = 9221120237041090560L; + } + + return result; + } + + protected static int tableIndex(int hc, int lm1) { + hc ^= hc >>> 20 ^ hc >>> 12; + hc ^= hc >>> 7 ^ hc >>> 4; + return hc & lm1; + } + + public int size() { + return this.size; + } + + public boolean isEmpty() { + return this.size == 0; + } + + public abstract void clear(); +} diff --git a/src/main/java/com/dfsek/terra/util/hash/HashMapDoubleDouble.java b/src/main/java/com/dfsek/terra/util/hash/HashMapDoubleDouble.java new file mode 100644 index 000000000..ca5721612 --- /dev/null +++ b/src/main/java/com/dfsek/terra/util/hash/HashMapDoubleDouble.java @@ -0,0 +1,291 @@ +/* +Copyright 2009 Sandia Corporation. Under the terms of Contract +DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government +retains certain rights in this software. + +BSD Open Source License. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Sandia National Laboratories nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + */ + +package com.dfsek.terra.util.hash; + +import java.io.Serializable; +import java.util.NoSuchElementException; + +public class HashMapDoubleDouble extends HashIntrinsic { + private static final long serialVersionUID = 2109458761298324234L; + private HashMapDoubleDouble.Entry[] table; + + public HashMapDoubleDouble(int initialCapacity, float loadFactor) { + super(initialCapacity, loadFactor); + this.table = this.createTable(this.capMinus1 + 1); + } + + public HashMapDoubleDouble(int initialCapacity) { + this(initialCapacity, 0.75F); + } + + public HashMapDoubleDouble() { + this(16, 0.75F); + } + + public final boolean contains(double key) { + int i = tableIndex(hashCodeDouble(key), this.capMinus1); + + for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { + if (e.key == key) { + return true; + } + } + + return false; + } + + public boolean containsValue(double value) { + for(int i = 0; i < this.table.length; ++i) { + for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { + if (value == e.value) { + return true; + } + } + } + + return false; + } + + public double get(double key) { + int i = tableIndex(hashCodeDouble(key), this.capMinus1); + + for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { + if (key == e.key) { + return e.value; + } + } + + return 4.9E-324D; + } + + public HashMapDoubleDouble.Entry getEntry(double key) { + int i = tableIndex(hashCodeDouble(key), this.capMinus1); + + for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { + if (key == e.key) { + return e; + } + } + + return null; + } + + public double put(double key, double value) { + int i = tableIndex(hashCodeDouble(key), this.capMinus1); + + for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { + if (key == e.key) { + double oldValue = e.value; + e.value = value; + return oldValue; + } + } + + this.addEntry(key, value, i); + return 4.9E-324D; + } + + private void addEntry(double key, double value, int index) { + HashMapDoubleDouble.Entry e = this.table[index]; + this.table[index] = new HashMapDoubleDouble.Entry(key, value, e); + if (this.size++ >= this.threshold) { + this.resize(2 * this.table.length); + } + + } + + public void resize(int newCapacity) { + int oldCapacity = this.table.length; + if (oldCapacity == 1073741824) { + this.threshold = 2147483647; + } else { + HashMapDoubleDouble.Entry[] newTable = this.createTable(newCapacity); + this.capMinus1 = newCapacity - 1; + this.transfer(newTable); + this.table = newTable; + this.threshold = (int)((float)newCapacity * this.loadFactor); + } + } + + private void transfer(HashMapDoubleDouble.Entry[] newTable) { + for(int j = 0; j < this.table.length; ++j) { + HashMapDoubleDouble.Entry e = this.table[j]; + if (e != null) { + this.table[j] = null; + + HashMapDoubleDouble.Entry next; + do { + next = e.next; + int i = tableIndex(hashCodeDouble(e.key), this.capMinus1); + e.next = newTable[i]; + newTable[i] = e; + e = next; + } while(next != null); + } + } + + } + + public final HashMapDoubleDouble.Entry remove(double key) { + int i = tableIndex(hashCodeDouble(key), this.capMinus1); + HashMapDoubleDouble.Entry prev = this.table[i]; + + HashMapDoubleDouble.Entry e; + HashMapDoubleDouble.Entry next; + for(e = prev; e != null; e = next) { + next = e.next; + if (key == e.key) { + --this.size; + if (prev == e) { + this.table[i] = next; + } else { + prev.next = next; + } + + return e; + } + + prev = e; + } + + return e; + } + + public void clear() { + for(int i = 0; i < this.table.length; ++i) { + this.table[i] = null; + } + + this.size = 0; + } + + private HashMapDoubleDouble.Entry[] createTable(int capacity) { + return new HashMapDoubleDouble.Entry[capacity]; + } + + public long memoryEstimate(int ptrsize) { + return (long)ptrsize * (long)(this.capMinus1 + this.size + 1) + (long)(this.size * 64 / 4); + } + + public HashMapDoubleDouble.Iterator iterator() { + return new HashMapDoubleDouble.Iterator(); + } + + public class Iterator { + HashMapDoubleDouble.Entry next; + int index; + HashMapDoubleDouble.Entry current; + + Iterator() { + if (HashMapDoubleDouble.this.size > 0) { + while(this.index < HashMapDoubleDouble.this.table.length && (this.next = HashMapDoubleDouble.this.table[this.index++]) == null) { + } + } + + } + + public final boolean hasNext() { + return this.next != null; + } + + public HashMapDoubleDouble.Entry nextEntry() { + HashMapDoubleDouble.Entry e = this.next; + if (e == null) { + throw new NoSuchElementException(); + } else { + if ((this.next = e.next) == null) { + while(this.index < HashMapDoubleDouble.this.table.length && (this.next = HashMapDoubleDouble.this.table[this.index++]) == null) { + } + } + + this.current = e; + return e; + } + } + + public double next() { + return this.nextEntry().value; + } + + public void remove() { + if (this.current == null) { + throw new IllegalStateException(); + } else { + double k = this.current.key; + this.current = null; + HashMapDoubleDouble.this.remove(k); + } + } + } + + public static class Entry implements Serializable { + private final double key; + private double value; + private HashMapDoubleDouble.Entry next; + private static final long serialVersionUID = 7972173983741231238L; + + public Entry(double key, double val, HashMapDoubleDouble.Entry n) { + this.key = key; + this.value = val; + this.next = n; + } + + public final double getKey() { + return this.key; + } + + public final double getValue() { + return this.value; + } + + public final double setValue(double newValue) { + double oldValue = this.value; + this.value = newValue; + return oldValue; + } + + public final boolean equals(Object o) { + HashMapDoubleDouble.Entry e = (HashMapDoubleDouble.Entry)o; + return this.key == e.key && this.value == e.value; + } + + public final String toString() { + return this.key + " = " + this.value; + } + + public final int hashCode() { + return hashCodeDouble(key) + hashCodeDouble(value); + } + } +} diff --git a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java index 7dd5f8052..8e75a0fed 100644 --- a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java +++ b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java @@ -13,7 +13,6 @@ import org.bukkit.block.data.Rotatable; import org.bukkit.block.data.type.RedstoneWire; import java.util.EnumMap; -import java.util.HashMap; import java.util.Map; public final class RotationUtil { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 902ae6a91..9d303c647 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -4,5 +4,6 @@ language: "en_us" fail-type: SHUTDOWN dump-default: true biome-search-resolution: 4 +cache-size: 512 master-disable: caves: false \ No newline at end of file From 2b5fd16e4a0b0a45bedbe3b63222c9397acaa299 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 22 Nov 2020 17:35:39 -0700 Subject: [PATCH 47/57] Various minor optimizations --- src/main/java/com/dfsek/terra/TerraProfiler.java | 3 +-- .../java/com/dfsek/terra/config/base/ConfigUtil.java | 2 +- src/main/java/com/dfsek/terra/math/NoiseFunction2.java | 4 ++-- .../java/com/dfsek/terra/population/CavePopulator.java | 10 ++++------ .../java/com/dfsek/terra/population/TreePopulator.java | 6 +++++- src/main/resources/config.yml | 2 +- src/test/java/NoiseTest.java | 6 ++++-- 7 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/dfsek/terra/TerraProfiler.java b/src/main/java/com/dfsek/terra/TerraProfiler.java index e03c4ea2b..02cd702cb 100644 --- a/src/main/java/com/dfsek/terra/TerraProfiler.java +++ b/src/main/java/com/dfsek/terra/TerraProfiler.java @@ -21,8 +21,7 @@ public class TerraProfiler extends WorldProfiler { .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "CaveTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "StructureTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "ElevationTime") - .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "SnowTime") - .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "CaveBlockUpdate"); + .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "SnowTime"); } public static TerraProfiler fromWorld(World w) { diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java index 048f551db..7e3dc4558 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java @@ -41,7 +41,7 @@ public final class ConfigUtil { dataSave = Duration.parse(Objects.requireNonNull(config.getString("data-save", "PT6M"))).toMillis() / 20L; masterDisableCaves = config.getBoolean("master-disable.caves", false); biomeSearchRes = config.getInt("biome-search-resolution", 4); - cacheSize = config.getInt("cache-size", 512); + cacheSize = config.getInt("cache-size", 256); if(config.getBoolean("dump-default", true)) { try(JarFile jar = new JarFile(new File(Terra.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) { diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index b8f37240a..abb2b5655 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -33,7 +33,7 @@ public class NoiseFunction2 implements NoiseFunction { * @return Result. */ public double evalNoCache(List list) { - return gen.getNoise((int) list.get(0).evaluate(), (int) list.get(1).evaluate()); + return gen.getNoise(list.get(0).evaluate(), list.get(1).evaluate()); } @Override @@ -43,7 +43,7 @@ public class NoiseFunction2 implements NoiseFunction { private static class Cache extends HashMapDoubleDouble { private static final long serialVersionUID = 8915092734723467010L; - private final int cacheSize = ConfigUtil.cacheSize; + private static final int cacheSize = ConfigUtil.cacheSize; public double get(FastNoiseLite noise, double x, double z) { double xx = x >= 0 ? x * 2 : x * -2 - 1; diff --git a/src/main/java/com/dfsek/terra/population/CavePopulator.java b/src/main/java/com/dfsek/terra/population/CavePopulator.java index 4414aac20..189a59af0 100644 --- a/src/main/java/com/dfsek/terra/population/CavePopulator.java +++ b/src/main/java/com/dfsek/terra/population/CavePopulator.java @@ -79,12 +79,10 @@ public class CavePopulator extends BlockPopulator { } catch(NullPointerException ignore) { } } - try(ProfileFuture ignore = TerraProfiler.fromWorld(world).measure("CaveBlockUpdate")) { - for(Block b : updateNeeded) { - BlockData orig = b.getBlockData(); - b.setBlockData(AIR, false); - b.setBlockData(orig, true); - } + for(Block b : updateNeeded) { + BlockData orig = b.getBlockData(); + b.setBlockData(AIR, false); + b.setBlockData(orig, true); } /*for(Map.Entry e : new SimplexCarver(chunk.getX(), chunk.getZ()).carve(chunk.getX(), chunk.getZ(), world).getCarvedBlocks().entrySet()) { Vector v = e.getKey(); diff --git a/src/main/java/com/dfsek/terra/population/TreePopulator.java b/src/main/java/com/dfsek/terra/population/TreePopulator.java index 3adf2b908..38cc8e839 100644 --- a/src/main/java/com/dfsek/terra/population/TreePopulator.java +++ b/src/main/java/com/dfsek/terra/population/TreePopulator.java @@ -14,15 +14,18 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.generation.GenerationPhase; +import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.Range; import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; import org.polydev.gaea.tree.Tree; +import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.util.GlueList; import java.util.List; import java.util.Random; + public class TreePopulator extends GaeaBlockPopulator { private static void doTrees(@NotNull UserDefinedBiome biome, TerraWorld world, @NotNull Random random, @NotNull Chunk chunk, int x, int z) { for(Block block : getValidTreeSpawnsAt(chunk, x, z, new Range(0, 254))) { @@ -55,11 +58,12 @@ public class TreePopulator extends GaeaBlockPopulator { @Override @SuppressWarnings("try") - public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { + public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("TreeTime")) { TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; TerraBiomeGrid grid = tw.getGrid(); + FastRandom random = new FastRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), world.getSeed())); for(int x = 0; x < 16; x += 2) { for(int z = 0; z < 16; z += 2) { UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9d303c647..e3f406fc2 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -4,6 +4,6 @@ language: "en_us" fail-type: SHUTDOWN dump-default: true biome-search-resolution: 4 -cache-size: 512 +cache-size: 256 master-disable: caves: false \ No newline at end of file diff --git a/src/test/java/NoiseTest.java b/src/test/java/NoiseTest.java index 4c9dd5beb..346b4e5a0 100644 --- a/src/test/java/NoiseTest.java +++ b/src/test/java/NoiseTest.java @@ -13,7 +13,7 @@ public class NoiseTest { int a = 0; for(int i = 0; i < 200; i++) { long l = System.nanoTime(); - for(int j = 0; j < 5000; j++) { + for(int j = 0; j < 1000; j++) { for(int x = 0; x < 4; x++) { for(int y = 0; y < 64; y++) { for(int z = 0; z < 4; z++) { @@ -26,10 +26,12 @@ public class NoiseTest { System.out.print((long) n / 1000000 + "ms" + ((a % 10 == 0) ? "\n" : " ")); a++; } + System.out.println(); + System.out.println(); System.out.println("No Cache:"); for(int i = 0; i < 200; i++) { long l = System.nanoTime(); - for(int j = 0; j < 5000; j++) { + for(int j = 0; j < 1000; j++) { for(int x = 0; x < 4; x++) { for(int y = 0; y < 64; y++) { for(int z = 0; z < 4; z++) { From 7509c03cbdeb3ebbb74c68535c84b0b89136f33f Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 22 Nov 2020 20:20:26 -0700 Subject: [PATCH 48/57] Use FastRandom in populators, fix issues with flora/tree pop --- .../java/com/dfsek/terra/config/base/ConfigUtil.java | 2 +- .../dfsek/terra/generation/TerraChunkGenerator.java | 3 +-- .../com/dfsek/terra/population/CavePopulator.java | 4 +++- .../com/dfsek/terra/population/FloraPopulator.java | 10 +++++----- .../dfsek/terra/population/StructurePopulator.java | 4 +++- .../com/dfsek/terra/population/TreePopulator.java | 7 ++----- .../java/com/dfsek/terra/util/PopulationUtil.java | 11 +++++++++++ src/main/java/com/dfsek/terra/util/TagUtil.java | 2 +- src/main/resources/config.yml | 2 +- 9 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/util/PopulationUtil.java diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java index 7e3dc4558..a08824f44 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java @@ -41,7 +41,7 @@ public final class ConfigUtil { dataSave = Duration.parse(Objects.requireNonNull(config.getString("data-save", "PT6M"))).toMillis() / 20L; masterDisableCaves = config.getBoolean("master-disable.caves", false); biomeSearchRes = config.getInt("biome-search-resolution", 4); - cacheSize = config.getInt("cache-size", 256); + cacheSize = config.getInt("cache-size", 384); if(config.getBoolean("dump-default", true)) { try(JarFile jar = new JarFile(new File(Terra.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) { diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index d51230940..0bcd6b426 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -58,7 +58,6 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { super(ChunkInterpolator.InterpolationType.TRILINEAR); this.configPack = c; popMan.attach(new TreePopulator()); - popMan.attach(new FloraPopulator()); popMan.attach(new SnowPopulator()); } @@ -227,7 +226,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { @Override public @NotNull List getDefaultPopulators(@NotNull World world) { - return Arrays.asList(new CavePopulator(), new StructurePopulator(), new OrePopulator(), popMan); + return Arrays.asList(new CavePopulator(), new StructurePopulator(), new OrePopulator(), new FloraPopulator(), popMan); } @Override diff --git a/src/main/java/com/dfsek/terra/population/CavePopulator.java b/src/main/java/com/dfsek/terra/population/CavePopulator.java index 189a59af0..0bb3adaad 100644 --- a/src/main/java/com/dfsek/terra/population/CavePopulator.java +++ b/src/main/java/com/dfsek/terra/population/CavePopulator.java @@ -5,6 +5,7 @@ import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.genconfig.CarverConfig; +import com.dfsek.terra.util.PopulationUtil; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; @@ -30,9 +31,10 @@ public class CavePopulator extends BlockPopulator { @SuppressWarnings("try") @Override - public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { + public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { if(ConfigUtil.masterDisableCaves) return; try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("CaveTime")) { + Random random = PopulationUtil.getRandom(chunk); TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; ConfigPack config = tw.getConfig(); diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index 1f9afa043..ee8eebd74 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -6,12 +6,13 @@ import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeFloraConfig; +import com.dfsek.terra.util.PopulationUtil; import org.bukkit.Chunk; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.generator.BlockPopulator; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.generation.GenerationPhase; -import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; import org.polydev.gaea.world.Flora; @@ -20,13 +21,12 @@ import java.util.Random; /** * Populates Flora and Trees */ -public class FloraPopulator extends GaeaBlockPopulator { - - +public class FloraPopulator extends BlockPopulator { @SuppressWarnings("try") @Override - public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { + public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("FloraTime")) { + Random random = PopulationUtil.getRandom(chunk); TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; int originX = chunk.getX() << 4; diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index 92772f2ad..10da463a7 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -12,6 +12,7 @@ import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; import com.dfsek.terra.structure.features.Feature; +import com.dfsek.terra.util.PopulationUtil; import com.dfsek.terra.util.structure.RotationUtil; import net.jafama.FastMath; import org.bukkit.Chunk; @@ -30,8 +31,9 @@ public class StructurePopulator extends BlockPopulator { @SuppressWarnings("try") @Override - public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { + public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("StructureTime")) { + Random random = PopulationUtil.getRandom(chunk); int cx = (chunk.getX() << 4); int cz = (chunk.getZ() << 4); TerraWorld tw = TerraWorld.getWorld(world); diff --git a/src/main/java/com/dfsek/terra/population/TreePopulator.java b/src/main/java/com/dfsek/terra/population/TreePopulator.java index 38cc8e839..8b77f275d 100644 --- a/src/main/java/com/dfsek/terra/population/TreePopulator.java +++ b/src/main/java/com/dfsek/terra/population/TreePopulator.java @@ -14,12 +14,10 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.generation.GenerationPhase; -import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.Range; import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; import org.polydev.gaea.tree.Tree; -import org.polydev.gaea.util.FastRandom; import org.polydev.gaea.util.GlueList; import java.util.List; @@ -45,7 +43,7 @@ public class TreePopulator extends GaeaBlockPopulator { public static List getValidTreeSpawnsAt(Chunk chunk, int x, int z, Range check) { List blocks = new GlueList<>(); for(int y : check) { - if(chunk.getBlock(x, y, z).getType().isSolid() && chunk.getBlock(x, y + 1, z).getType().isAir()) { + if(chunk.getBlock(x, y, z).getType().isSolid() && chunk.getBlock(x, y + 1, z).isPassable()) { blocks.add(chunk.getBlock(x, y + 1, z)); } } @@ -58,12 +56,11 @@ public class TreePopulator extends GaeaBlockPopulator { @Override @SuppressWarnings("try") - public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { + public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("TreeTime")) { TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; TerraBiomeGrid grid = tw.getGrid(); - FastRandom random = new FastRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), world.getSeed())); for(int x = 0; x < 16; x += 2) { for(int z = 0; z < 16; z += 2) { UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); diff --git a/src/main/java/com/dfsek/terra/util/PopulationUtil.java b/src/main/java/com/dfsek/terra/util/PopulationUtil.java new file mode 100644 index 000000000..eb0638175 --- /dev/null +++ b/src/main/java/com/dfsek/terra/util/PopulationUtil.java @@ -0,0 +1,11 @@ +package com.dfsek.terra.util; + +import org.bukkit.Chunk; +import org.polydev.gaea.math.MathUtil; +import org.polydev.gaea.util.FastRandom; + +public final class PopulationUtil { + public static FastRandom getRandom(Chunk c) { + return new FastRandom(MathUtil.getCarverChunkSeed(c.getX(), c.getZ(), c.getWorld().getSeed())); + } +} diff --git a/src/main/java/com/dfsek/terra/util/TagUtil.java b/src/main/java/com/dfsek/terra/util/TagUtil.java index 41298ec88..dc2334db1 100644 --- a/src/main/java/com/dfsek/terra/util/TagUtil.java +++ b/src/main/java/com/dfsek/terra/util/TagUtil.java @@ -15,7 +15,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; @SuppressWarnings("unchecked") -public class TagUtil { +public final class TagUtil { private static final Map> tagMap; static { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e3f406fc2..b13793a3f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -4,6 +4,6 @@ language: "en_us" fail-type: SHUTDOWN dump-default: true biome-search-resolution: 4 -cache-size: 256 +cache-size: 384 master-disable: caves: false \ No newline at end of file From e270969fd17f098f91e287a3d9fc2ac211ea6651 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 23 Nov 2020 21:04:39 -0700 Subject: [PATCH 49/57] Update snowable blocks even with physics disabled. --- .../com/dfsek/terra/population/SnowPopulator.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dfsek/terra/population/SnowPopulator.java b/src/main/java/com/dfsek/terra/population/SnowPopulator.java index 700a71894..5e6860d37 100644 --- a/src/main/java/com/dfsek/terra/population/SnowPopulator.java +++ b/src/main/java/com/dfsek/terra/population/SnowPopulator.java @@ -12,6 +12,9 @@ import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Snowable; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.population.GaeaBlockPopulator; @@ -66,7 +69,14 @@ public class SnowPopulator extends GaeaBlockPopulator { if(random.nextInt(100) >= biome.getSnow().getSnowChance(y)) continue; if(blacklistSpawn.contains(b.getType()) || b.isPassable()) continue; - chunk.getBlock(x, ++y, z).setBlockData(DataUtil.SNOW, biome.getSnow().doPhysics()); + boolean phys = biome.getSnow().doPhysics(); + b.getRelative(BlockFace.UP).setBlockData(DataUtil.SNOW, phys); + if(!phys) { + BlockData data = b.getBlockData(); + if(data instanceof Snowable) { + ((Snowable) data).setSnowy(true); + } + } } } } From 8b0a7d422a39cb42b66f2d652e2cc9509ad09c4f Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 23 Nov 2020 21:57:09 -0700 Subject: [PATCH 50/57] do the populator shuffle B) --- .../com/dfsek/terra/generation/TerraChunkGenerator.java | 4 +++- src/main/java/com/dfsek/terra/population/OrePopulator.java | 4 ++-- .../java/com/dfsek/terra/population/SnowPopulator.java | 7 +++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 0bcd6b426..dc1fd894f 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -57,7 +57,9 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { public TerraChunkGenerator(ConfigPack c) { super(ChunkInterpolator.InterpolationType.TRILINEAR); this.configPack = c; + popMan.attach(new OrePopulator()); popMan.attach(new TreePopulator()); + popMan.attach(new FloraPopulator()); popMan.attach(new SnowPopulator()); } @@ -226,7 +228,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { @Override public @NotNull List getDefaultPopulators(@NotNull World world) { - return Arrays.asList(new CavePopulator(), new StructurePopulator(), new OrePopulator(), new FloraPopulator(), popMan); + return Arrays.asList(new CavePopulator(), new StructurePopulator(), popMan); } @Override diff --git a/src/main/java/com/dfsek/terra/population/OrePopulator.java b/src/main/java/com/dfsek/terra/population/OrePopulator.java index 8b66f71a9..417d6fa62 100644 --- a/src/main/java/com/dfsek/terra/population/OrePopulator.java +++ b/src/main/java/com/dfsek/terra/population/OrePopulator.java @@ -9,20 +9,20 @@ import com.dfsek.terra.event.OreVeinGenerateEvent; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; -import org.bukkit.generator.BlockPopulator; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.biome.Biome; import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.Range; +import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; import org.polydev.gaea.util.FastRandom; import java.util.Map; import java.util.Random; -public class OrePopulator extends BlockPopulator { +public class OrePopulator extends GaeaBlockPopulator { @SuppressWarnings("try") @Override public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { diff --git a/src/main/java/com/dfsek/terra/population/SnowPopulator.java b/src/main/java/com/dfsek/terra/population/SnowPopulator.java index 5e6860d37..9802fe5e1 100644 --- a/src/main/java/com/dfsek/terra/population/SnowPopulator.java +++ b/src/main/java/com/dfsek/terra/population/SnowPopulator.java @@ -70,13 +70,12 @@ public class SnowPopulator extends GaeaBlockPopulator { continue; if(blacklistSpawn.contains(b.getType()) || b.isPassable()) continue; boolean phys = biome.getSnow().doPhysics(); - b.getRelative(BlockFace.UP).setBlockData(DataUtil.SNOW, phys); if(!phys) { BlockData data = b.getBlockData(); - if(data instanceof Snowable) { - ((Snowable) data).setSnowy(true); - } + if(data instanceof Snowable) phys = true; } + b.getRelative(BlockFace.UP).setBlockData(DataUtil.SNOW, phys); + } } } From 70863b50eee9afdf2343671e698f583b792f163b Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 23 Nov 2020 22:55:36 -0700 Subject: [PATCH 51/57] Flora go brrr --- .../terra/config/genconfig/FloraConfig.java | 34 +++++++++---------- .../terra/population/FloraPopulator.java | 4 +-- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index 474b53b86..858e02fb3 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -64,26 +64,28 @@ public class FloraConfig extends TerraConfig implements Flora { @Override public List getValidSpawnsAt(Chunk chunk, int x, int z, Range range) { + int size = floraPalette.getSize(); + Block current = chunk.getBlock(x, range.getMin(), z); List blocks = new ArrayList<>(); - if(ceiling) for(int y : range) { - if(y > 255 || y < 1) continue; - Block check = chunk.getBlock(x, y, z); - Block other = check.getRelative(BlockFace.DOWN); - if(spawnable.contains(check.getType()) && replaceable.contains(other.getType())) { - blocks.add(check); - } - } - else for(int y : range) { - if(y > 254 || y < 0) continue; - Block check = chunk.getBlock(x, y, z); - Block other = check.getRelative(BlockFace.UP); - if(spawnable.contains(check.getType()) && replaceable.contains(other.getType()) && isIrrigated(check)) { - blocks.add(check); + for(int y : range) { + if(y > 255 || y < 0) continue; + current = current.getRelative(BlockFace.UP); + if(spawnable.contains(current.getType()) && isIrrigated(current) && valid(size, current)) { + blocks.add(current); } } return blocks; } + private boolean valid(int size, Block block) { + for(int i = 0; i < size; i++) { // Down if ceiling, up if floor + if(block.getY() + 1 > 255 || block.getY() < 0) return false; + block = block.getRelative(ceiling ? BlockFace.DOWN : BlockFace.UP); + if(!replaceable.contains(block.getType())) return false; + } + return true; + } + private boolean isIrrigated(Block b) { if(irrigable == null) return true; return irrigable.contains(b.getRelative(BlockFace.NORTH).getType()) @@ -96,10 +98,6 @@ public class FloraConfig extends TerraConfig implements Flora { public boolean plant(Location location) { int size = floraPalette.getSize(); int c = ceiling ? -1 : 1; - for(int i = 0; FastMath.abs(i) < size; i += c) { // Down if ceiling, up if floor - if(i + 1 > 255) return false; - if(!replaceable.contains(location.clone().add(0, i + c, 0).getBlock().getType())) return false; - } for(int i = 0; FastMath.abs(i) < size; i += c) { // Down if ceiling, up if floor int lvl = (FastMath.abs(i)); location.clone().add(0, i + c, 0).getBlock().setBlockData(floraPalette.get((ceiling ? lvl : size - lvl - 1), location.getBlockX(), location.getBlockZ()), physics); diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index ee8eebd74..d4e280494 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -10,9 +10,9 @@ import com.dfsek.terra.util.PopulationUtil; import org.bukkit.Chunk; import org.bukkit.World; import org.bukkit.block.Block; -import org.bukkit.generator.BlockPopulator; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.generation.GenerationPhase; +import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; import org.polydev.gaea.world.Flora; @@ -21,7 +21,7 @@ import java.util.Random; /** * Populates Flora and Trees */ -public class FloraPopulator extends BlockPopulator { +public class FloraPopulator extends GaeaBlockPopulator { @SuppressWarnings("try") @Override public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { From 65c2ad6b7ae2b4e3d8ad1ec740bf590c22e7bdd3 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 23 Nov 2020 22:56:11 -0700 Subject: [PATCH 52/57] Bump version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2b1599f4c..973dd071c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ java { targetCompatibility = JavaVersion.VERSION_1_8 } -val versionObj = Version("1", "4", "1", true) +val versionObj = Version("1", "5", "0", true) version = versionObj From f309bd8809add2a5ad351af0e07d72c42983a672 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 23 Nov 2020 23:02:36 -0700 Subject: [PATCH 53/57] [AUTO] Cleanup code --- .../genconfig/biome/BiomeSnowConfig.java | 2 +- .../com/dfsek/terra/math/NoiseFunction2.java | 4 +- .../dfsek/terra/util/hash/HashIntrinsic.java | 32 ++--- .../terra/util/hash/HashMapDoubleDouble.java | 124 +++++++++--------- src/test/java/DistributionTest.java | 4 +- src/test/java/LookupGenerator.java | 2 +- 6 files changed, 85 insertions(+), 83 deletions(-) diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java index f4a567ffb..e1a49dcc3 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java @@ -12,8 +12,8 @@ import java.util.Map; public class BiomeSnowConfig extends TerraConfigSection { private final int[] snowHeights; - private boolean doSnow = false; private final boolean physics; + private boolean doSnow = false; public BiomeSnowConfig(TerraConfig parent) throws InvalidConfigurationException { super(parent); diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index abb2b5655..f2f17cbc4 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -50,7 +50,9 @@ public class NoiseFunction2 implements NoiseFunction { double zz = z >= 0 ? z * 2 : z * -2 - 1; double key = (xx >= zz) ? (xx * xx + xx + zz) : (zz * zz + xx); double value = this.get(key); - if (this.size() > cacheSize) { this.clear(); } + if(this.size() > cacheSize) { + this.clear(); + } return (value == 4.9E-324D ? addAndReturn(noise.getNoise(x, z), key) : value); } diff --git a/src/main/java/com/dfsek/terra/util/hash/HashIntrinsic.java b/src/main/java/com/dfsek/terra/util/hash/HashIntrinsic.java index a5f13986b..74166a7a8 100644 --- a/src/main/java/com/dfsek/terra/util/hash/HashIntrinsic.java +++ b/src/main/java/com/dfsek/terra/util/hash/HashIntrinsic.java @@ -36,24 +36,24 @@ package com.dfsek.terra.util.hash; import java.io.Serializable; public abstract class HashIntrinsic implements Serializable { - private static final long serialVersionUID = 8058099372006904458L; - protected static final int DEFAULT_INITIAL_CAPACITY = 16; - protected static final int MAXIMUM_CAPACITY = 1073741824; - protected static final float DEFAULT_LOAD_FACTOR = 0.75F; - protected int size; - protected int threshold; - protected float loadFactor; - protected int capMinus1; public static final int FLOAT_EXP_BIT_MASK = 2139095040; public static final int FLOAT_SIGNIF_BIT_MASK = 8388607; public static final long DOUBLE_EXP_BIT_MASK = 9218868437227405312L; public static final long DOUBLE_SIGNIF_BIT_MASK = 4503599627370495L; + protected static final int DEFAULT_INITIAL_CAPACITY = 16; + protected static final int MAXIMUM_CAPACITY = 1073741824; + protected static final float DEFAULT_LOAD_FACTOR = 0.75F; + private static final long serialVersionUID = 8058099372006904458L; + protected int size; + protected int threshold; + protected float loadFactor; + protected int capMinus1; protected HashIntrinsic(int initialCapacity, float loadFactor) { - if (initialCapacity <= 0) { + if(initialCapacity <= 0) { throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity); - } else if (!(loadFactor <= 0.0F) && !Float.isNaN(loadFactor)) { - if (initialCapacity > 1073741824) { + } else if(!(loadFactor <= 0.0F) && !Float.isNaN(loadFactor)) { + if(initialCapacity > 1073741824) { initialCapacity = 1073741824; } @@ -63,14 +63,14 @@ public abstract class HashIntrinsic implements Serializable { this.capMinus1 = capacity - 1; this.loadFactor = loadFactor; - this.threshold = (int)((float)capacity * loadFactor); + this.threshold = (int) ((float) capacity * loadFactor); } else { throw new IllegalArgumentException("Illegal load factor: " + loadFactor); } } protected static int hashCodeLong(long value) { - return (int)(value ^ value >>> 32); + return (int) (value ^ value >>> 32); } protected static int hashCodeFloat(float value) { @@ -79,12 +79,12 @@ public abstract class HashIntrinsic implements Serializable { protected static int hashCodeDouble(double value) { long bits = doubleToLongBits(value); - return (int)(bits ^ bits >>> 32); + return (int) (bits ^ bits >>> 32); } public static int floatToIntBits(float value) { int result = Float.floatToRawIntBits(value); - if ((result & 2139095040) == 2139095040 && (result & 8388607) != 0) { + if((result & 2139095040) == 2139095040 && (result & 8388607) != 0) { result = 2143289344; } @@ -93,7 +93,7 @@ public abstract class HashIntrinsic implements Serializable { public static long doubleToLongBits(double value) { long result = Double.doubleToRawLongBits(value); - if ((result & 9218868437227405312L) == 9218868437227405312L && (result & 4503599627370495L) != 0L) { + if((result & 9218868437227405312L) == 9218868437227405312L && (result & 4503599627370495L) != 0L) { result = 9221120237041090560L; } diff --git a/src/main/java/com/dfsek/terra/util/hash/HashMapDoubleDouble.java b/src/main/java/com/dfsek/terra/util/hash/HashMapDoubleDouble.java index ca5721612..7ea6f735a 100644 --- a/src/main/java/com/dfsek/terra/util/hash/HashMapDoubleDouble.java +++ b/src/main/java/com/dfsek/terra/util/hash/HashMapDoubleDouble.java @@ -57,7 +57,7 @@ public class HashMapDoubleDouble extends HashIntrinsic { int i = tableIndex(hashCodeDouble(key), this.capMinus1); for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { - if (e.key == key) { + if(e.key == key) { return true; } } @@ -68,7 +68,7 @@ public class HashMapDoubleDouble extends HashIntrinsic { public boolean containsValue(double value) { for(int i = 0; i < this.table.length; ++i) { for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { - if (value == e.value) { + if(value == e.value) { return true; } } @@ -81,7 +81,7 @@ public class HashMapDoubleDouble extends HashIntrinsic { int i = tableIndex(hashCodeDouble(key), this.capMinus1); for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { - if (key == e.key) { + if(key == e.key) { return e.value; } } @@ -93,7 +93,7 @@ public class HashMapDoubleDouble extends HashIntrinsic { int i = tableIndex(hashCodeDouble(key), this.capMinus1); for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { - if (key == e.key) { + if(key == e.key) { return e; } } @@ -105,7 +105,7 @@ public class HashMapDoubleDouble extends HashIntrinsic { int i = tableIndex(hashCodeDouble(key), this.capMinus1); for(HashMapDoubleDouble.Entry e = this.table[i]; e != null; e = e.next) { - if (key == e.key) { + if(key == e.key) { double oldValue = e.value; e.value = value; return oldValue; @@ -119,7 +119,7 @@ public class HashMapDoubleDouble extends HashIntrinsic { private void addEntry(double key, double value, int index) { HashMapDoubleDouble.Entry e = this.table[index]; this.table[index] = new HashMapDoubleDouble.Entry(key, value, e); - if (this.size++ >= this.threshold) { + if(this.size++ >= this.threshold) { this.resize(2 * this.table.length); } @@ -127,21 +127,21 @@ public class HashMapDoubleDouble extends HashIntrinsic { public void resize(int newCapacity) { int oldCapacity = this.table.length; - if (oldCapacity == 1073741824) { + if(oldCapacity == 1073741824) { this.threshold = 2147483647; } else { HashMapDoubleDouble.Entry[] newTable = this.createTable(newCapacity); this.capMinus1 = newCapacity - 1; this.transfer(newTable); this.table = newTable; - this.threshold = (int)((float)newCapacity * this.loadFactor); + this.threshold = (int) ((float) newCapacity * this.loadFactor); } } private void transfer(HashMapDoubleDouble.Entry[] newTable) { for(int j = 0; j < this.table.length; ++j) { HashMapDoubleDouble.Entry e = this.table[j]; - if (e != null) { + if(e != null) { this.table[j] = null; HashMapDoubleDouble.Entry next; @@ -165,9 +165,9 @@ public class HashMapDoubleDouble extends HashIntrinsic { HashMapDoubleDouble.Entry next; for(e = prev; e != null; e = next) { next = e.next; - if (key == e.key) { + if(key == e.key) { --this.size; - if (prev == e) { + if(prev == e) { this.table[i] = next; } else { prev.next = next; @@ -195,65 +195,18 @@ public class HashMapDoubleDouble extends HashIntrinsic { } public long memoryEstimate(int ptrsize) { - return (long)ptrsize * (long)(this.capMinus1 + this.size + 1) + (long)(this.size * 64 / 4); + return (long) ptrsize * (long) (this.capMinus1 + this.size + 1) + (long) (this.size * 64 / 4); } public HashMapDoubleDouble.Iterator iterator() { return new HashMapDoubleDouble.Iterator(); } - public class Iterator { - HashMapDoubleDouble.Entry next; - int index; - HashMapDoubleDouble.Entry current; - - Iterator() { - if (HashMapDoubleDouble.this.size > 0) { - while(this.index < HashMapDoubleDouble.this.table.length && (this.next = HashMapDoubleDouble.this.table[this.index++]) == null) { - } - } - - } - - public final boolean hasNext() { - return this.next != null; - } - - public HashMapDoubleDouble.Entry nextEntry() { - HashMapDoubleDouble.Entry e = this.next; - if (e == null) { - throw new NoSuchElementException(); - } else { - if ((this.next = e.next) == null) { - while(this.index < HashMapDoubleDouble.this.table.length && (this.next = HashMapDoubleDouble.this.table[this.index++]) == null) { - } - } - - this.current = e; - return e; - } - } - - public double next() { - return this.nextEntry().value; - } - - public void remove() { - if (this.current == null) { - throw new IllegalStateException(); - } else { - double k = this.current.key; - this.current = null; - HashMapDoubleDouble.this.remove(k); - } - } - } - public static class Entry implements Serializable { + private static final long serialVersionUID = 7972173983741231238L; private final double key; private double value; private HashMapDoubleDouble.Entry next; - private static final long serialVersionUID = 7972173983741231238L; public Entry(double key, double val, HashMapDoubleDouble.Entry n) { this.key = key; @@ -276,8 +229,8 @@ public class HashMapDoubleDouble extends HashIntrinsic { } public final boolean equals(Object o) { - HashMapDoubleDouble.Entry e = (HashMapDoubleDouble.Entry)o; - return this.key == e.key && this.value == e.value; + HashMapDoubleDouble.Entry e = (HashMapDoubleDouble.Entry) o; + return this.key == e.key && this.value == e.value; } public final String toString() { @@ -288,4 +241,51 @@ public class HashMapDoubleDouble extends HashIntrinsic { return hashCodeDouble(key) + hashCodeDouble(value); } } + + public class Iterator { + HashMapDoubleDouble.Entry next; + int index; + HashMapDoubleDouble.Entry current; + + Iterator() { + if(HashMapDoubleDouble.this.size > 0) { + while(this.index < HashMapDoubleDouble.this.table.length && (this.next = HashMapDoubleDouble.this.table[this.index++]) == null) { + } + } + + } + + public final boolean hasNext() { + return this.next != null; + } + + public HashMapDoubleDouble.Entry nextEntry() { + HashMapDoubleDouble.Entry e = this.next; + if(e == null) { + throw new NoSuchElementException(); + } else { + if((this.next = e.next) == null) { + while(this.index < HashMapDoubleDouble.this.table.length && (this.next = HashMapDoubleDouble.this.table[this.index++]) == null) { + } + } + + this.current = e; + return e; + } + } + + public double next() { + return this.nextEntry().value; + } + + public void remove() { + if(this.current == null) { + throw new IllegalStateException(); + } else { + double k = this.current.key; + this.current = null; + HashMapDoubleDouble.this.remove(k); + } + } + } } diff --git a/src/test/java/DistributionTest.java b/src/test/java/DistributionTest.java index e391073d7..27f2d556b 100644 --- a/src/test/java/DistributionTest.java +++ b/src/test/java/DistributionTest.java @@ -62,7 +62,7 @@ class DistributionTest { int end = normalMap.length - 1; while(start + 1 < end) { int mid = start + (end - start) / 2; - if (normalMap[mid] <= d) { + if(normalMap[mid] <= d) { start = mid; } else { end = mid; @@ -70,7 +70,7 @@ class DistributionTest { } double left = FastMath.abs(normalMap[start] - d); double right = FastMath.abs(normalMap[end] - d); - if (left <= right) { + if(left <= right) { return start * (num) / (normalMap.length); } return end * (num) / (normalMap.length); diff --git a/src/test/java/LookupGenerator.java b/src/test/java/LookupGenerator.java index 05c1b2919..eea731910 100644 --- a/src/test/java/LookupGenerator.java +++ b/src/test/java/LookupGenerator.java @@ -95,7 +95,7 @@ class LookupGenerator { public static int normalizeNew(double d) { for(int i = 0; i < lookup.length; i++) { - if (d < lookup[i]) return i; + if(d < lookup[i]) return i; } return lookup.length - 1; } From 5a27cb1cdf3d8c58b7162b39d98eb676bcb36aa9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 23 Nov 2020 23:02:49 -0700 Subject: [PATCH 54/57] Don't redefine random in ore pop --- src/main/java/com/dfsek/terra/population/OrePopulator.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/com/dfsek/terra/population/OrePopulator.java b/src/main/java/com/dfsek/terra/population/OrePopulator.java index 417d6fa62..3aa1d4262 100644 --- a/src/main/java/com/dfsek/terra/population/OrePopulator.java +++ b/src/main/java/com/dfsek/terra/population/OrePopulator.java @@ -13,11 +13,9 @@ import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.polydev.gaea.biome.Biome; import org.polydev.gaea.generation.GenerationPhase; -import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.Range; import org.polydev.gaea.population.GaeaBlockPopulator; import org.polydev.gaea.profiler.ProfileFuture; -import org.polydev.gaea.util.FastRandom; import java.util.Map; import java.util.Random; @@ -25,13 +23,12 @@ import java.util.Random; public class OrePopulator extends GaeaBlockPopulator { @SuppressWarnings("try") @Override - public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { + public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("OreTime")) { TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; for(int cx = -1; cx <= 1; cx++) { for(int cz = -1; cz <= 1; cz++) { - FastRandom r = new FastRandom(MathUtil.getCarverChunkSeed(chunk.getX() + cx, chunk.getZ() + cz, world.getSeed())); Biome b = TerraWorld.getWorld(world).getGrid().getBiome(((chunk.getX() + cx) << 4) + 8, ((chunk.getZ() + cz) << 4) + 8, GenerationPhase.POPULATE); BiomeOreConfig ores = ((UserDefinedBiome) b).getConfig().getOres(); for(Map.Entry e : ores.getOres().entrySet()) { From 4ddb3a294e0d23abfd74957e3da7cc7646e97f0f Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 23 Nov 2020 23:04:46 -0700 Subject: [PATCH 55/57] brain moment --- src/main/java/com/dfsek/terra/population/FloraPopulator.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index d4e280494..a8716f75e 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -6,7 +6,6 @@ import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.config.genconfig.biome.BiomeFloraConfig; -import com.dfsek.terra.util.PopulationUtil; import org.bukkit.Chunk; import org.bukkit.World; import org.bukkit.block.Block; @@ -24,9 +23,8 @@ import java.util.Random; public class FloraPopulator extends GaeaBlockPopulator { @SuppressWarnings("try") @Override - public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { + public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("FloraTime")) { - Random random = PopulationUtil.getRandom(chunk); TerraWorld tw = TerraWorld.getWorld(world); if(!tw.isSafe()) return; int originX = chunk.getX() << 4; From b43b9ee7b9e378fb4abd9b18b08e430484cb9060 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 24 Nov 2020 16:04:25 -0700 Subject: [PATCH 56/57] Add RandomFunction and seed variable --- lib/Gaea-1.14.3.jar | Bin 737528 -> 736224 bytes .../generation/config/WorldGenerator.java | 5 +++ .../com/dfsek/terra/math/RandomFunction.java | 30 ++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 src/main/java/com/dfsek/terra/math/RandomFunction.java diff --git a/lib/Gaea-1.14.3.jar b/lib/Gaea-1.14.3.jar index 0fc0aa392d0d5127bb0fb24a932fec3ea3bf180d..42ac42aac99c24e4a5e7c025b573116f27a2b852 100644 GIT binary patch delta 88054 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%0A3|AXONT4ukNwvL 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 ok;P1;n!g@NjFvWRk|>`u=A0a9b&Q2+n{ diff --git a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java index 30bc4de2e..eacb1cb4a 100644 --- a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java @@ -3,6 +3,7 @@ package com.dfsek.terra.generation.config; import com.dfsek.terra.config.genconfig.noise.NoiseConfig; import com.dfsek.terra.math.NoiseFunction2; import com.dfsek.terra.math.NoiseFunction3; +import com.dfsek.terra.math.RandomFunction; import org.bukkit.World; import org.bukkit.block.data.BlockData; import org.polydev.gaea.biome.Generator; @@ -36,12 +37,15 @@ public class WorldGenerator extends Generator { @SuppressWarnings({"rawtypes", "unchecked"}) public WorldGenerator(long seed, String equation, String elevateEquation, Scope vScope, Map noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) { Parser p = new Parser(); + p.registerFunction("rand", new RandomFunction()); Parser ep = new Parser(); + ep.registerFunction("rand", new RandomFunction()); Scope s = new Scope().withParent(vScope); xVar = s.create("x"); yVar = s.create("y"); zVar = s.create("z"); + s.create("seed").setValue(seed); this.preventSmooth = preventSmooth; @@ -63,6 +67,7 @@ public class WorldGenerator extends Generator { this.noiseExp = p.parse(equation, s).simplify(); if(elevateEquation != null) { Scope es = new Scope().withParent(vScope); + es.create("seed").setValue(seed); this.elevationXVar = es.create("x"); this.elevationZVar = es.create("z"); this.elevationExp = ep.parse(elevateEquation, es).simplify(); diff --git a/src/main/java/com/dfsek/terra/math/RandomFunction.java b/src/main/java/com/dfsek/terra/math/RandomFunction.java new file mode 100644 index 000000000..bad8d3d6e --- /dev/null +++ b/src/main/java/com/dfsek/terra/math/RandomFunction.java @@ -0,0 +1,30 @@ +package com.dfsek.terra.math; + +import org.polydev.gaea.util.FastRandom; +import parsii.eval.Expression; +import parsii.eval.Function; + +import java.util.List; + +/** + * Provides access to a PRNG ({@link org.polydev.gaea.util.FastRandom}) + *

+ * Takes 1 argument, which sets the seed + */ +public class RandomFunction implements Function { + @Override + public int getNumberOfArguments() { + return 1; + } + + @Override + public double eval(List list) { + long seed = (long) list.get(0).evaluate(); + return new FastRandom(seed).nextDouble(); + } + + @Override + public boolean isNaturalFunction() { + return true; + } +} From 06a13f875779e58ef418537a842719fcf6d1b4f4 Mon Sep 17 00:00:00 2001 From: solonovamax Date: Tue, 24 Nov 2020 18:26:47 -0500 Subject: [PATCH 57/57] Action (should work) Signed-off-by: solonovamax --- .github/workflows/build.yml | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..af9b7a546 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,40 @@ +# This workflow will build a Java project with Gradle +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle + +name: Java CI with Gradle + +on: + push: + tags: + - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10 + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + + - name: Build Terra + run: gradle shadowJar + + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: Package + path: build/libs + + - name: Publish release + uses: marvinpinto/action-automatic-releases@latest + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + prerelease: false + files: | + build/libs/Terra-*.jar + LICENSE + \ No newline at end of file