From 63d4162c979f143182064c88b0600b194d6c7b44 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 5 Dec 2020 14:59:29 -0500 Subject: [PATCH 01/30] Fix missing paging on /user-content --- WebHostLib/static/assets/hostGame.js | 7 ------- WebHostLib/static/assets/userContent.js | 17 +++++++++++++++++ WebHostLib/static/styles/hostGame.css | 22 ---------------------- WebHostLib/static/styles/userContent.css | 21 +++++++++++++++++++++ WebHostLib/templates/hostGame.html | 2 +- WebHostLib/templates/userContent.html | 7 ++++--- 6 files changed, 43 insertions(+), 33 deletions(-) create mode 100644 WebHostLib/static/assets/userContent.js diff --git a/WebHostLib/static/assets/hostGame.js b/WebHostLib/static/assets/hostGame.js index e5756d34..db1ab1dd 100644 --- a/WebHostLib/static/assets/hostGame.js +++ b/WebHostLib/static/assets/hostGame.js @@ -7,12 +7,5 @@ window.addEventListener('load', () => { document.getElementById('host-game-form').submit(); }); - $("#host-game-table").DataTable({ - "paging": false, - "ordering": true, - "order": [[ 3, "desc" ]], - "info": false, - "dom": "t", - }); adjustFooterHeight(); }); diff --git a/WebHostLib/static/assets/userContent.js b/WebHostLib/static/assets/userContent.js new file mode 100644 index 00000000..dcc8f565 --- /dev/null +++ b/WebHostLib/static/assets/userContent.js @@ -0,0 +1,17 @@ +window.addEventListener('load', () => { + console.log("loaded"); + $("#rooms-table").DataTable({ + "paging": false, + "ordering": true, + "order": [[ 3, "desc" ]], + "info": false, + "dom": "t", + }); + $("#seeds-table").DataTable({ + "paging": false, + "ordering": true, + "order": [[ 2, "desc" ]], + "info": false, + "dom": "t", + }); +}); diff --git a/WebHostLib/static/styles/hostGame.css b/WebHostLib/static/styles/hostGame.css index 82946367..751dc7c8 100644 --- a/WebHostLib/static/styles/hostGame.css +++ b/WebHostLib/static/styles/hostGame.css @@ -28,25 +28,3 @@ #host-game button{ margin-top: 5px; } - -#host-game-table{ - margin-right: auto; - text-align: left; -} - -#host-game-table th{ - padding: 0 20px 0 0; -} - -#host-game-table td{ - padding: 6px 20px 0 0; -} - -#host-game-table td.center{ - text-align: center; -} - -#host-game-table.dataTable{ - width: unset; - -} diff --git a/WebHostLib/static/styles/userContent.css b/WebHostLib/static/styles/userContent.css index 40fdc7da..84774726 100644 --- a/WebHostLib/static/styles/userContent.css +++ b/WebHostLib/static/styles/userContent.css @@ -31,3 +31,24 @@ #user-content .center{ text-align: center; } + +#user-content-table{ + margin-right: auto; + text-align: left; +} + +#user-content .table td.center{ + text-align: center; +} + +#user-content table.dataTable{ + width: unset; +} + +table.dataTable thead th{ + padding: 0 20px 0 0; +} + +table.dataTable tbody td{ + padding: 6px 20px 0 0; +} diff --git a/WebHostLib/templates/hostGame.html b/WebHostLib/templates/hostGame.html index 9e4eff80..a8d6e5b1 100644 --- a/WebHostLib/templates/hostGame.html +++ b/WebHostLib/templates/hostGame.html @@ -1,4 +1,4 @@ -{% extends 'tablepage.html' %} +{% extends 'pageWrapper.html' %} {% block head %} {{ super() }} diff --git a/WebHostLib/templates/userContent.html b/WebHostLib/templates/userContent.html index 811300c9..59c81f83 100644 --- a/WebHostLib/templates/userContent.html +++ b/WebHostLib/templates/userContent.html @@ -1,9 +1,10 @@ -{% extends 'pageWrapper.html' %} +{% extends 'tablepage.html' %} {% block head %} {{ super() }} Generate Game + {% endblock %} {% block body %} @@ -15,7 +16,7 @@

Your Rooms

{% if rooms %} - +
@@ -46,7 +47,7 @@

Your Seeds

{% if seeds %} -
Seed
+
From 1a62772825a6db7ef4c8684ff5a226e858a428bd Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 5 Dec 2020 15:37:31 -0500 Subject: [PATCH 02/30] Slew of minor style adjustments - Added padding to bottom of /setup-guide to accomodate iPhone users with curved screen bottoms - Added screen orientation detection to /player-settings to force select inputs into a single column on mobile devices - Added an X to the cookie notice to indicate it can be closed - Changed "Generate Game" to "Start Game" so it matches the header --- WebHostLib/static/assets/cookieNotice.js | 4 ++++ WebHostLib/static/styles/cookieNotice.css | 5 +++++ WebHostLib/static/styles/playerSettings.css | 3 ++- WebHostLib/static/styles/tutorial.css | 5 +++-- WebHostLib/static/styles/weightedSettings.css | 1 + WebHostLib/templates/playerSettings.html | 2 +- 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/WebHostLib/static/assets/cookieNotice.js b/WebHostLib/static/assets/cookieNotice.js index f9cbb200..4149d076 100644 --- a/WebHostLib/static/assets/cookieNotice.js +++ b/WebHostLib/static/assets/cookieNotice.js @@ -5,6 +5,10 @@ window.addEventListener('load', () => { const cookieNotice = document.createElement('div'); cookieNotice.innerText = "This website uses cookies to store information about the games you play."; cookieNotice.setAttribute('id', 'cookie-notice'); + const closeButton = document.createElement('span'); + closeButton.setAttribute('id', 'close-button'); + closeButton.innerText = 'X'; + cookieNotice.appendChild(closeButton); document.body.appendChild(cookieNotice); cookieNotice.addEventListener('click', () => { localStorage.setItem('cookieNotice', "1"); diff --git a/WebHostLib/static/styles/cookieNotice.css b/WebHostLib/static/styles/cookieNotice.css index 25ed2abe..cb6b1109 100644 --- a/WebHostLib/static/styles/cookieNotice.css +++ b/WebHostLib/static/styles/cookieNotice.css @@ -9,3 +9,8 @@ text-align: center; cursor: pointer; } + +#cookie-notice #close-button{ + float: right; + padding-right: 10px; +} diff --git a/WebHostLib/static/styles/playerSettings.css b/WebHostLib/static/styles/playerSettings.css index b0fc2262..33a76d3d 100644 --- a/WebHostLib/static/styles/playerSettings.css +++ b/WebHostLib/static/styles/playerSettings.css @@ -75,6 +75,7 @@ html{ padding: 3px; border-radius: 3px; min-width: 150px; + background-color: #ffffff; } #player-settings #game-options, #player-settings #rom-options{ @@ -97,7 +98,7 @@ html{ cursor: default; } -@media all and (max-width: 1000px){ +@media all and (max-width: 1000px), all and (orientation: portrait){ #player-settings #game-options, #player-settings #rom-options{ justify-content: flex-start; flex-wrap: wrap; diff --git a/WebHostLib/static/styles/tutorial.css b/WebHostLib/static/styles/tutorial.css index 5499f92e..888c4ad6 100644 --- a/WebHostLib/static/styles/tutorial.css +++ b/WebHostLib/static/styles/tutorial.css @@ -5,12 +5,13 @@ html{ } #tutorial-wrapper{ - width: 70rem; + display: flex; + flex-direction: column; margin-left: auto; margin-right: auto; background-color: rgba(0, 0, 0, 0.15); border-radius: 8px; - padding: 1rem; + padding: 1rem 1rem 3rem; color: #eeffeb; } diff --git a/WebHostLib/static/styles/weightedSettings.css b/WebHostLib/static/styles/weightedSettings.css index 303095cb..4f788931 100644 --- a/WebHostLib/static/styles/weightedSettings.css +++ b/WebHostLib/static/styles/weightedSettings.css @@ -148,5 +148,6 @@ html{ padding: 3px; border-radius: 3px; min-width: 150px; + background-color: #ffffff; } diff --git a/WebHostLib/templates/playerSettings.html b/WebHostLib/templates/playerSettings.html index 78416ee7..6eb4c8d1 100644 --- a/WebHostLib/templates/playerSettings.html +++ b/WebHostLib/templates/playerSettings.html @@ -11,7 +11,7 @@ {% block body %} {% include 'header/grassHeader.html' %}
-

Generate Game

+

Start Game

Choose the options you would like to play with! You may generate a single-player game from this page, or download a settings file you can use to participate in a MultiWorld. If you would like to make your settings extra random, check out the weighted settings From 644ce713bdc10779367ebe7fb57c604717de7994 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 5 Dec 2020 16:05:53 -0500 Subject: [PATCH 03/30] Fix a style regression on /tutorial --- WebHostLib/static/styles/tutorial.css | 1 + 1 file changed, 1 insertion(+) diff --git a/WebHostLib/static/styles/tutorial.css b/WebHostLib/static/styles/tutorial.css index 888c4ad6..c79bfed1 100644 --- a/WebHostLib/static/styles/tutorial.css +++ b/WebHostLib/static/styles/tutorial.css @@ -7,6 +7,7 @@ html{ #tutorial-wrapper{ display: flex; flex-direction: column; + max-width: 70rem; margin-left: auto; margin-right: auto; background-color: rgba(0, 0, 0, 0.15); From e361b93a74f6411f43c4611822ef5208ad189d49 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 5 Dec 2020 23:15:39 +0100 Subject: [PATCH 04/30] GUI: Add Sprite File location to tooltip --- Gui.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Gui.py b/Gui.py index 94a145ab..9dc00d6a 100755 --- a/Gui.py +++ b/Gui.py @@ -1525,8 +1525,8 @@ class SpriteSelector(): title_link.pack(side=LEFT) title_link.bind("", open_custom_sprite_dir) - self.icon_section(alttpr_frametitle, self.alttpr_sprite_dir + '/*', 'ALTTPR sprites not found. Click "Update alttpr sprites" to download them.') - self.icon_section(custom_frametitle, self.custom_sprite_dir + '/*', 'Put sprites in the custom sprites folder (see open link above) to have them appear here.') + self.icon_section(alttpr_frametitle, self.alttpr_sprite_dir, 'ALTTPR sprites not found. Click "Update alttpr sprites" to download them.') + self.icon_section(custom_frametitle, self.custom_sprite_dir, 'Put sprites in the custom sprites folder (see open link above) to have them appear here.') frame = Frame(self.window) frame.pack(side=BOTTOM, fill=X, pady=5) @@ -1585,19 +1585,21 @@ class SpriteSelector(): sprites = [] - for file in glob(output_path(path)): - sprites.append(Sprite(file)) + for file in os.listdir(path): + sprites.append((file, Sprite(os.path.join(path, file)))) - sprites.sort(key=lambda s: str.lower(s.name or "").strip()) + sprites.sort(key=lambda s: str.lower(s[1].name or "").strip()) frame.buttons = [] - for sprite in sprites: + for file, sprite in sprites: image = get_image_for_sprite(sprite) if image is None: continue self.all_sprites.append(sprite) button = Button(frame, image=image, command=lambda spr=sprite: self.select_sprite(spr)) - ToolTips.register(button, sprite.name + ("\nBy: %s" % sprite.author_name if sprite.author_name else "")) + ToolTips.register(button, sprite.name + + ("\nBy: %s" % sprite.author_name if sprite.author_name else "") + + f"\nFrom: {file}") button.image = image frame.buttons.append(button) From 8b89c4d5c4f9fee8d0b5723b4a752fa301e63872 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 5 Dec 2020 23:25:26 +0100 Subject: [PATCH 05/30] Expand Webhost with per-sprite data with author and filename source --- WebHostLib/static/static/spriteData.json | 2 +- dumpSprites.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/WebHostLib/static/static/spriteData.json b/WebHostLib/static/static/spriteData.json index fdf9e7f5..8d322ca1 100644 --- a/WebHostLib/static/static/spriteData.json +++ b/WebHostLib/static/static/spriteData.json @@ -1 +1 @@ -{"Link": "001.link.1.zspr", "Four Swords Link": "4slink-armors.1.zspr", "Abigail": "abigail.1.zspr", "Adol": "adol.1.zspr", "Aggretsuko": "aggretsuko.1.zspr", "Alice": "alice.1.zspr", "Angry Video Game Nerd": "angry-video-game-nerd.1.zspr", "Arcane": "arcane.1.zspr", "Ark (No Cape)": "ark-dorana.1.zspr", "Ark (Cape)": "ark.1.zspr", "Arrghus": "arrghus.2.zspr", "Astronaut": "astronaut.1.zspr", "Asuna": "asuna.1.zspr", "Badeline": "badeline.1.zspr", "Bananas In Pyjamas": "bananas-in-pyjamas.1.zspr", "Bandit": "bandit.1.zspr", "Batman": "batman.1.zspr", "Beau": "beau.1.zspr", "Bewp": "bewp.1.zspr", "Big Key": "bigkey.1.zspr", "Birb": "birb.1.zspr", "Birdo": "birdo.1.zspr", "Black Mage": "blackmage.1.zspr", "Blacksmith Link": "blacksmithlink.1.zspr", "Blazer": "blazer.1.zspr", "Blossom": "blossom.1.zspr", "Bob": "bob.1.zspr", "Bob Ross": "bobross.1.zspr", "boco": "boco.1.zspr", "Boo 2": "boo-two.1.zspr", "Boo": "boo.2.zspr", "Bottle o' Goo": "bottle_o_goo.1.zspr", "BotW Link": "botw-link.1.zspr", "botw-zelda": "botw-zelda.1.zspr", "Bowser": "bowser.1.zspr", "Bowsette Red": "bowsette-red.1.zspr", "Bowsette": "bowsette.1.zspr", "Branch": "branch.1.zspr", "Brian": "brian.1.zspr", "Broccoli": "broccoli.1.zspr", "Bronzor": "bronzor.1.zspr", "B.S. Boy": "bsboy.1.zspr", "B.S. Girl": "bsgirl.1.zspr", "Bubbles": "bubbles.1.zspr", "Bullet Bill": "bullet_bill.1.zspr", "Buttercup": "buttercup.1.zspr", "Cactuar": "cactuar.1.zspr", "Cadence": "cadence.1.zspr", "CarlSagan42": "carlsagan42.1.zspr", "Casual Zelda": "casual-zelda.1.zspr", "Marvin the Cat": "cat.3.zspr", "Cat Boo": "catboo.1.zspr", "CD-i Link": "cdilink.1.zspr", "Celes": "celes.1.zspr", "Charizard": "charizard.1.zspr", "Cheep Cheep": "cheepcheep.1.zspr", "Chibity": "chibity.1.zspr", "Chrizzz": "chrizzz.1.zspr", "Cirno": "cirno.1.zspr", "Clifford": "clifford.1.zspr", "Clyde": "clyde.1.zspr", "Conker": "conker.1.zspr", "Cornelius": "cornelius.1.zspr", "Untitled": "corona.1.zspr", "Imposter": "crewmate.1.zspr", "Cucco": "cucco.1.zspr", "Cursor": "cursor.1.zspr", "Dark Panda": "dark-panda.1.zspr", "Dark Boy": "darkboy.1.zspr", "Dark Girl": "darkgirl.1.zspr", "Dark Link (Tunic)": "darklink-tunic.1.zspr", "Dark Link": "darklink.1.zspr", "Dark Swatchy": "darkswatchy.1.zspr", "Dark Zelda": "darkzelda.1.zspr", "Dark Zora": "darkzora.2.zspr", "Deadpool (Mythic)": "deadpool-mythic.1.zspr", "Deadpool (SirCzah)": "deadpool.1.zspr", "Deadrock": "deadrock.1.zspr", "Decidueye": "decidueye.1.zspr", "Dekar": "dekar.1.zspr", "Demon Link": "demonlink.1.zspr", "Dragonite": "dragonite.2.zspr", "Drake The Dragon": "drake.1.zspr", "D.Owls": "d_owls.2.zspr", "Eggplant": "eggplant.1.zspr", "EmoSaru": "emosaru.1.zspr", "Ezlo": "ezlo.1.zspr", "Fierce Deity Link": "fierce-deity-link.2.zspr", "Finn Merten": "finn.3.zspr", "Finny Bear": "finny_bear.1.zspr", "Floodgate Fish": "fish_floodgate.1.zspr", "Flavor Guy": "flavor_guy.1.zspr", "Fox Link": "foxlink.1.zspr", "Freya Crescent": "freya.1.zspr", "Frisk": "frisk.1.zspr", "Frog Link": "froglink.3.zspr", "Fujin": "fujin.2.zspr", "Future Trunks": "future_trunks.1.zspr", "Gamer": "gamer.1.zspr", "Mini Ganon": "ganon.1.zspr", "Ganondorf": "ganondorf.1.zspr", "Garfield": "garfield.2.zspr", "Garnet": "garnet.1.zspr", "Garo Master": "garomaster.1.zspr", "GBC Link": "gbc-link.1.zspr", "Geno": "geno.1.zspr", "GliitchWiitch": "gliitchwiitch.1.zspr", "Gobli": "gobli.1.zspr", "Goomba": "goomba.1.zspr", "Goose": "goose.1.zspr", "GrandPOOBear": "grandpoobear.2.zspr", "Gretis": "gretis.1.zspr", "Gruncle Stan": "grunclestan.1.zspr", "GuizDP": "guiz.1.zspr", "Hanna": "hanna.1.zspr", "Hardhat Beetle": "hardhat_beetle.1.zspr", "Hat Kid": "hat-kid.1.zspr", "Headless Link": "headlesslink.1.zspr", "Hello Kitty": "hello_kitty.1.zspr", "Hidari": "hidari.1.zspr", "Hint Tile": "hint_tile.1.zspr", "Hoarder (Bush)": "hoarder-bush.1.zspr", "Hoarder (Pot)": "hoarder-pot.1.zspr", "Hoarder (Rock)": "hoarder-rock.1.zspr", "hollow_test": "hollow-knight.1.zspr", "Homer Simpson": "homer.1.zspr", "Hotdog": "hotdog.1.zspr", "Hyrule Knight": "hyruleknight.1.zspr", "iBazly": "ibazly.1.zspr", "Ignignokt": "ignignokt.2.zspr", "Informant Woman": "informant_woman.1.zspr", "Inkling": "inkling.1.zspr", "Invisible Link": "invisibleman.1.zspr", "Jack Frost": "jack-frost.1.zspr", "Jason Frudnick": "jason_frudnick.1.zspr", "Jasp": "jasp.1.zspr", "Jogurt": "jogurt.1.zspr", "Katsura": "katsura.1.zspr", "Kecleon": "kecleon.1.zspr", "Kenny McCormick": "kenny_mccormick.1.zspr", "Ketchup": "ketchup.1.zspr", "Kholdstare": "kholdstare.1.zspr", "King Gothalion": "king_gothalion.1.zspr", "King Graham v1.1": "king_graham.1.zspr", "Kirby": "kirby-meta.1.zspr", "Kore8": "kore8.1.zspr", "Korok": "korok.1.zspr", "Lakitu": "lakitu.1.zspr", "Lapras": "lapras.1.zspr", "Lest": "lest.1.zspr", "Lily": "lily.1.zspr", "Linja": "linja.1.zspr", "Link Redrawn": "link-redrawn.1.zspr", "Hat Color Link": "linkhatcolor.1.zspr", "Tunic Color Link": "linktuniccolor.1.zspr", "Little Hylian": "little-hylian.1.zspr", "Pony": "littlepony.1.zspr", "Locke": "locke.1.zspr", "Figaro Merchant": "locke_merchant.1.zspr", "Lucario": "lucario.1.zspr", "Hitsuyan1337": "luffy.1.zspr", "Luigi": "luigi.1.zspr", "Luna Maindo": "luna-maindo.1.zspr", "Madeline": "madeline.1.zspr", "Magus": "magus.1.zspr", "Maiden": "maiden.1.zspr", "Mallow (Cat)": "mallow-cat.1.zspr", "Manga Link": "mangalink.1.zspr", "Maple Queen": "maplequeen.2.zspr", "Marin": "marin.2.zspr", "Mario (Classic)": "mario-classic.2.zspr", "Mario and Cappy": "mariocappy.1.zspr", "Tanooki Mario": "mario_tanooki.1.zspr", "Marisa Kirisame": "marisa.1.zspr", "Matthias": "matthias.1.zspr", "Meatwad": "meatwad.1.zspr", "Medallions": "medallions.1.zspr", "Medli": "medli.1.zspr", "Megaman X": "megaman-x.2.zspr", "Baby Metroid": "metroid.1.zspr", "MewLp": "mew.1.zspr", "Mike Jones": "mike-jones.2.zspr", "Minish Cap Link": "minishcaplink.2.zspr", "Minish Link": "minish_link.1.zspr", "missingno": "missingno.1.zspr", "MoblinSprite": "moblin.1.zspr", "Modern Link": "modernlink.1.zspr", "Mog": "mog.2.zspr", "Momiji Inubashiri": "momiji.1.zspr", "Moosh": "moosh.1.zspr", "Mouse": "mouse.1.zspr", "Ms. Paint Dog": "ms-paintdog.1.zspr", "Power Up with Pride Mushroom": "mushy.1.zspr", "Nature Link": "naturelink.1.zspr", "Navi": "navi.1.zspr", "Navirou": "navirou.2.zspr", "Ned Flanders": "ned-flanders.1.zspr", "Negative Link": "negativelink.1.zspr", "Neosad": "neosad.1.zspr", " NES Link": "neslink.1.zspr", "Ness (Earthbound)": "ness.1.zspr", "Nia": "nia.1.zspr", "Niddraig": "niddraig.1.zspr", "Niko": "niko.1.zspr", "Old Man": "oldman.2.zspr", "Ori": "ori.2.zspr", "Outline Link": "outlinelink.1.zspr", "Parallel Worlds Link": "parallelworldslink.1.zspr", "Paula": "paula.1.zspr", "Princess Peach": "peach.1.zspr", "Penguin Link": "penguinlink.1.zspr", "Pete (Harvest Moon)": "pete.1.zspr", "Phoenix Wright": "phoenix-wright.1.zspr", "Pikachu": "pikachu.1.zspr", "Pink Ribbon Link": "pinkribbonlink.2.zspr", "Piranha Plant": "piranha_plant.1.zspr", "Plague Knight": "plagueknight.1.zspr", "Pokey": "pokey.1.zspr", "Popoi": "popoi.1.zspr", "Poppy": "poppy.1.zspr", "Porg Knight": "porg_knight.1.zspr", "Powerpuff Girl": "powerpuff_girl.1.zspr", "Pride Link": "pridelink.2.zspr", "Primm": "primm.1.zspr", "Princess Bubblegum": "princess_bubblegum.1.zspr", "Psyduck": "psyduck.2.zspr", "The Pug": "pug.1.zspr", "Purple Chest": "purplechest-bottle.1.zspr", "Pyro": "pyro.1.zspr", "Rainbow Link": "rainbowlink.1.zspr", "Rat": "rat.1.zspr", "Red Mage": "red-mage.1.zspr", "Remeer": "remeer.1.zspr", "Rick (Redacted)": "rick.1.zspr", "Robo-Link 9000": "robotlink.1.zspr", "Rocko": "rocko.1.zspr", "Rottytops": "rottytops.1.zspr", "Rover": "rover.1.zspr", "Roy Koopa": "roykoopa.1.zspr", "Rumia": "rumia.1.zspr", "Rydia": "rydia.1.zspr", "Ryu": "ryu.1.zspr", "Sailor Moon": "sailormoon.1.zspr", "Saitama": "saitama.1.zspr", "Samus (Super Metroid)": "samus-sm.1.zspr", "Samus": "samus.2.zspr", "Samus (Classic)": "samus_classic.1.zspr", "Santa Link": "santalink.2.zspr", "Scholar": "scholar.1.zspr", "Selan": "selan.1.zspr", "SevenS1ns": "sevens1ns.1.zspr", "Shadow": "shadow.1.zspr", "Shadow Sakura": "shadowsaku.2.zspr", "Shantae": "shantae.1.zspr", "Shuppet": "shuppet.1.zspr", "Shy Gal": "shy-gal.1.zspr", "Shy Guy": "shy-guy.1.zspr", "SighnWaive": "sighn_waive.1.zspr", "DQ Slime": "slime.1.zspr", "Slowpoke": "slowpoke.1.zspr", "SNES Controller": "snes-controller.1.zspr", "Soda Can": "sodacan.1.zspr", "Solaire of Astora": "solaire.1.zspr", "Hyrule Soldier": "soldiersprite.1.zspr", "Sonic the Hedgehog": "sonic.1.zspr", "Sora": "sora.1.zspr", "Sora (KH1)": "sora_kh1.1.zspr", "SpongeBob SquarePants": "spongebob.1.zspr", "Squall": "squall.1.zspr", "Squirrel": "squirrel.1.zspr", "Squirtle": "squirtle.1.zspr", "Stalfos": "stalfos.1.zspr", "Stan": "stan.1.zspr", "Static Link": "staticlink.1.zspr", "Steamed Ham": "steamedhams.1.zspr", "Stick Man": "stick_man.1.zspr", "Super Bomb": "superbomb.1.zspr", "Super Bunny": "superbunny.2.zspr", "Super Meat Boy": "supermeatboy.1.zspr", "Susie": "susie.1.zspr", "Swatchy": "swatchy.1.zspr", "TASBot": "tasbot.1.zspr", "Tea Time": "teatime.1.zspr", "Terra (Esper)": "terra.1.zspr", "Tetra Sheet": "tetra.1.zspr", "TGH": "tgh.1.zspr", "Thief": "thief.1.zspr", "Thomcrow": "thomcrow.1.zspr", "Tile": "tile.2.zspr", "Tingle": "tingle.1.zspr", "TMNT": "tmnt.1.zspr", "Toad": "toad.2.zspr", "Toadette": "toadette.2.zspr", "Captain Toadette": "toadette_captain.1.zspr", "TotemLinks": "totem-links.1.zspr", "Trogdor the Burninator": "trogdor.1.zspr", "TP Zelda": "twilightprincesszelda.2.zspr", "TwoFaced": "two_faced.1.zspr", "Ty the Tasmanian Tiger": "ty.1.zspr", "Ultros": "ultros.1.zspr", "Valeera": "valeera.1.zspr", "VanillaLink": "vanillalink.1.zspr", "Vaporeon": "vaporeon.1.zspr", "Vegeta": "vegeta.1.zspr", "Vera": "vera.1.zspr", "Vitreous": "vitreous.1.zspr", "Vivi": "vivi.1.zspr", "Vivian": "vivian.1.zspr", "Wario": "wario.1.zspr", "Will": "will.1.zspr", "Wizzrobe": "wizzrobe.2.zspr", "Wolf Link (Festive)": "wolf_link.1.zspr", "Wolf Link (TP)": "wolf_link_tp.1.zspr", "Yoshi": "yoshi.1.zspr", "Yunica Tovah": "yunica.1.zspr", "Zandra": "zandra.1.zspr", "Zebra Unicorn": "zebraunicorn.1.zspr", "Zeckemyro": "zeck.1.zspr", "Zelda": "zelda.1.zspr", "Zero Suit Samus": "zerosuitsamus.2.zspr", "Zora": "zora.2.zspr"} \ No newline at end of file +{"sprites": [{"file": "neslink.1.zspr", "author": "MikeTrethewey/Fatmanspanda", "name": " NES Link"}, {"file": "abigail.1.zspr", "author": "Fish_waffle64", "name": "Abigail"}, {"file": "adol.1.zspr", "author": "Yuushia", "name": "Adol"}, {"file": "aggretsuko.1.zspr", "author": "skovacs1", "name": "Aggretsuko"}, {"file": "alice.1.zspr", "author": "Artheau", "name": "Alice"}, {"file": "angry-video-game-nerd.1.zspr", "author": "ABOhiccups", "name": "Angry Video Game Nerd"}, {"file": "arcane.1.zspr", "author": "MM102", "name": "Arcane"}, {"file": "ark.1.zspr", "author": "wzl", "name": "Ark (Cape)"}, {"file": "ark-dorana.1.zspr", "author": "Matt Dorana", "name": "Ark (No Cape)"}, {"file": "arrghus.2.zspr", "author": "fatmanspanda", "name": "Arrghus"}, {"file": "astronaut.1.zspr", "author": "Malmo", "name": "Astronaut"}, {"file": "asuna.1.zspr", "author": "Natsuru Kiyohoshi", "name": "Asuna"}, {"file": "bsboy.1.zspr", "author": "InTheBeef", "name": "B.S. Boy"}, {"file": "bsgirl.1.zspr", "author": "InTheBeef", "name": "B.S. Girl"}, {"file": "metroid.1.zspr", "author": "Jam", "name": "Baby Metroid"}, {"file": "badeline.1.zspr", "author": "Jam", "name": "Badeline"}, {"file": "bananas-in-pyjamas.1.zspr", "author": "codemann8", "name": "Bananas In Pyjamas"}, {"file": "bandit.1.zspr", "author": "Fenrika", "name": "Bandit"}, {"file": "batman.1.zspr", "author": "Ninjakauz", "name": "Batman"}, {"file": "beau.1.zspr", "author": "Achy", "name": "Beau"}, {"file": "bewp.1.zspr", "author": "Valechec", "name": "Bewp"}, {"file": "bigkey.1.zspr", "author": "Fouton", "name": "Big Key"}, {"file": "birb.1.zspr", "author": "Andrew Copple", "name": "Birb"}, {"file": "birdo.1.zspr", "author": "BlackTycoon", "name": "Birdo"}, {"file": "blackmage.1.zspr", "author": "TheRedMage", "name": "Black Mage"}, {"file": "blacksmithlink.1.zspr", "author": "Glan", "name": "Blacksmith Link"}, {"file": "blazer.1.zspr", "author": "Herowho", "name": "Blazer"}, {"file": "blossom.1.zspr", "author": "Artheau", "name": "Blossom"}, {"file": "bob.1.zspr", "author": "fatmanspanda", "name": "Bob"}, {"file": "bobross.1.zspr", "author": "CaptainApathy", "name": "Bob Ross"}, {"file": "boo.2.zspr", "author": "Zarby89", "name": "Boo"}, {"file": "boo-two.1.zspr", "author": "Achy", "name": "Boo 2"}, {"file": "botw-link.1.zspr", "author": "Pasta La Vista", "name": "BotW Link"}, {"file": "bottle_o_goo.1.zspr", "author": "Fish_waffle64", "name": "Bottle o' Goo"}, {"file": "bowser.1.zspr", "author": "Artheau", "name": "Bowser"}, {"file": "bowsette.1.zspr", "author": "Sarah Shinespark", "name": "Bowsette"}, {"file": "bowsette-red.1.zspr", "author": "Sarah Shinespark", "name": "Bowsette Red"}, {"file": "branch.1.zspr", "author": "cbass601", "name": "Branch"}, {"file": "brian.1.zspr", "author": "Herowho", "name": "Brian"}, {"file": "broccoli.1.zspr", "author": "fatmanspanda", "name": "Broccoli"}, {"file": "bronzor.1.zspr", "author": "fatmanspanda", "name": "Bronzor"}, {"file": "bubbles.1.zspr", "author": "Artheau", "name": "Bubbles"}, {"file": "bullet_bill.1.zspr", "author": "Artheau", "name": "Bullet Bill"}, {"file": "buttercup.1.zspr", "author": "Artheau", "name": "Buttercup"}, {"file": "cdilink.1.zspr", "author": "SnipSlum", "name": "CD-i Link"}, {"file": "cactuar.1.zspr", "author": "RyuTech", "name": "Cactuar"}, {"file": "cadence.1.zspr", "author": "Fish_waffle64", "name": "Cadence"}, {"file": "toadette_captain.1.zspr", "author": "Devan2002", "name": "Captain Toadette"}, {"file": "carlsagan42.1.zspr", "author": "FedoraFriday", "name": "CarlSagan42"}, {"file": "casual-zelda.1.zspr", "author": "Fish_waffle64", "name": "Casual Zelda"}, {"file": "catboo.1.zspr", "author": "JaySee87", "name": "Cat Boo"}, {"file": "celes.1.zspr", "author": "Deagans", "name": "Celes"}, {"file": "charizard.1.zspr", "author": "Charmander106", "name": "Charizard"}, {"file": "cheepcheep.1.zspr", "author": "Faw", "name": "Cheep Cheep"}, {"file": "chibity.1.zspr", "author": "Ecyro", "name": "Chibity"}, {"file": "chrizzz.1.zspr", "author": "Chrizzz", "name": "Chrizzz"}, {"file": "cirno.1.zspr", "author": "Achy", "name": "Cirno"}, {"file": "clifford.1.zspr", "author": "PlaguedOne", "name": "Clifford"}, {"file": "clyde.1.zspr", "author": "Artheau", "name": "Clyde"}, {"file": "conker.1.zspr", "author": "Charmander106/SePH", "name": "Conker"}, {"file": "cornelius.1.zspr", "author": "Lori", "name": "Cornelius"}, {"file": "cucco.1.zspr", "author": "MikeTrethewey", "name": "Cucco"}, {"file": "cursor.1.zspr", "author": "PlaguedOne", "name": "Cursor"}, {"file": "d_owls.2.zspr", "author": "D.Owls", "name": "D.Owls"}, {"file": "slime.1.zspr", "author": "KamenRideDecade", "name": "DQ Slime"}, {"file": "darkboy.1.zspr", "author": "iBazly", "name": "Dark Boy"}, {"file": "darkgirl.1.zspr", "author": "iBazly", "name": "Dark Girl"}, {"file": "darklink.1.zspr", "author": "iBazly", "name": "Dark Link"}, {"file": "darklink-tunic.1.zspr", "author": "Damon", "name": "Dark Link (Tunic)"}, {"file": "dark-panda.1.zspr", "author": "MM102", "name": "Dark Panda"}, {"file": "darkswatchy.1.zspr", "author": "Mike Trethewey", "name": "Dark Swatchy"}, {"file": "darkzelda.1.zspr", "author": "iBazly", "name": "Dark Zelda"}, {"file": "darkzora.2.zspr", "author": "iBazly", "name": "Dark Zora"}, {"file": "deadpool-mythic.1.zspr", "author": "Mythic", "name": "Deadpool (Mythic)"}, {"file": "deadpool.1.zspr", "author": "SirCzah", "name": "Deadpool (SirCzah)"}, {"file": "deadrock.1.zspr", "author": "Glan", "name": "Deadrock"}, {"file": "decidueye.1.zspr", "author": "Achy", "name": "Decidueye"}, {"file": "dekar.1.zspr", "author": "The3X", "name": "Dekar"}, {"file": "demonlink.1.zspr", "author": "Krelbel", "name": "Demon Link"}, {"file": "dragonite.2.zspr", "author": "Fish_waffle64", "name": "Dragonite"}, {"file": "drake.1.zspr", "author": "No Body The Dragon", "name": "Drake The Dragon"}, {"file": "eggplant.1.zspr", "author": "PlaguedOne", "name": "Eggplant"}, {"file": "emosaru.1.zspr", "author": "Achy", "name": "EmoSaru"}, {"file": "ezlo.1.zspr", "author": "cbass601", "name": "Ezlo"}, {"file": "fierce-deity-link.2.zspr", "author": "jeffreygriggs2", "name": "Fierce Deity Link"}, {"file": "locke_merchant.1.zspr", "author": "Artheau", "name": "Figaro Merchant"}, {"file": "finn.3.zspr", "author": "Devan2002", "name": "Finn Merten"}, {"file": "finny_bear.1.zspr", "author": "skovacs1", "name": "Finny Bear"}, {"file": "flavor_guy.1.zspr", "author": "PlaguedOne", "name": "Flavor Guy"}, {"file": "fish_floodgate.1.zspr", "author": "Delphi1024", "name": "Floodgate Fish"}, {"file": "4slink-armors.1.zspr", "author": "Mike Trethewey", "name": "Four Swords Link"}, {"file": "foxlink.1.zspr", "author": "InTheBeef", "name": "Fox Link"}, {"file": "freya.1.zspr", "author": "Demoncraze", "name": "Freya Crescent"}, {"file": "frisk.1.zspr", "author": "Original by Toby Fox, sprite edit by MisterKerr", "name": "Frisk"}, {"file": "froglink.3.zspr", "author": "Mike Trethewey", "name": "Frog Link"}, {"file": "fujin.2.zspr", "author": "FujinAkari", "name": "Fujin"}, {"file": "future_trunks.1.zspr", "author": "Merciter", "name": "Future Trunks"}, {"file": "gbc-link.1.zspr", "author": "skovacs1", "name": "GBC Link"}, {"file": "gamer.1.zspr", "author": "Unknown", "name": "Gamer"}, {"file": "ganondorf.1.zspr", "author": "Fish_waffle64", "name": "Ganondorf"}, {"file": "garfield.2.zspr", "author": "Fwiller", "name": "Garfield"}, {"file": "garnet.1.zspr", "author": "Artheau", "name": "Garnet"}, {"file": "garomaster.1.zspr", "author": "Herowho", "name": "Garo Master"}, {"file": "geno.1.zspr", "author": "FedoraFriday", "name": "Geno"}, {"file": "gliitchwiitch.1.zspr", "author": "Ivy-IV", "name": "GliitchWiitch"}, {"file": "gobli.1.zspr", "author": "Lantis", "name": "Gobli"}, {"file": "goomba.1.zspr", "author": "SirCzah", "name": "Goomba"}, {"file": "goose.1.zspr", "author": "Jam", "name": "Goose"}, {"file": "grandpoobear.2.zspr", "author": "proximitysound", "name": "GrandPOOBear"}, {"file": "gretis.1.zspr", "author": "SnakeGrunger", "name": "Gretis"}, {"file": "grunclestan.1.zspr", "author": "SirCzah", "name": "Gruncle Stan"}, {"file": "guiz.1.zspr", "author": "GuizDP", "name": "GuizDP"}, {"file": "hanna.1.zspr", "author": "Maya-Neko", "name": "Hanna"}, {"file": "hardhat_beetle.1.zspr", "author": "Artheau", "name": "Hardhat Beetle"}, {"file": "linkhatcolor.1.zspr", "author": "Damon", "name": "Hat Color Link"}, {"file": "hat-kid.1.zspr", "author": "skovacs1", "name": "Hat Kid"}, {"file": "headlesslink.1.zspr", "author": "fatmanspanda", "name": "Headless Link"}, {"file": "hello_kitty.1.zspr", "author": "qeeen", "name": "Hello Kitty"}, {"file": "hidari.1.zspr", "author": "Hidari", "name": "Hidari"}, {"file": "hint_tile.1.zspr", "author": "PlaguedOne", "name": "Hint Tile"}, {"file": "luffy.1.zspr", "author": "BOtheMighty", "name": "Hitsuyan1337"}, {"file": "hoarder-bush.1.zspr", "author": "Restomak", "name": "Hoarder (Bush)"}, {"file": "hoarder-pot.1.zspr", "author": "Restomak", "name": "Hoarder (Pot)"}, {"file": "hoarder-rock.1.zspr", "author": "Restomak", "name": "Hoarder (Rock)"}, {"file": "homer.1.zspr", "author": "Fwiller", "name": "Homer Simpson"}, {"file": "hotdog.1.zspr", "author": "Xag & Tylo", "name": "Hotdog"}, {"file": "hyruleknight.1.zspr", "author": "InTheBeef", "name": "Hyrule Knight"}, {"file": "soldiersprite.1.zspr", "author": "InTheBeef", "name": "Hyrule Soldier"}, {"file": "ignignokt.2.zspr", "author": "fatmanspanda", "name": "Ignignokt"}, {"file": "crewmate.1.zspr", "author": "Fish_waffle64", "name": "Imposter"}, {"file": "informant_woman.1.zspr", "author": "Herowho", "name": "Informant Woman"}, {"file": "inkling.1.zspr", "author": "RyuTech", "name": "Inkling"}, {"file": "invisibleman.1.zspr", "author": "Mike Trethewey", "name": "Invisible Link"}, {"file": "jack-frost.1.zspr", "author": "xypotion", "name": "Jack Frost"}, {"file": "jason_frudnick.1.zspr", "author": "Artheau", "name": "Jason Frudnick"}, {"file": "jasp.1.zspr", "author": "Chonixtu", "name": "Jasp"}, {"file": "jogurt.1.zspr", "author": "Nakuri", "name": "Jogurt"}, {"file": "katsura.1.zspr", "author": "atth3h3art0fwinter", "name": "Katsura"}, {"file": "kecleon.1.zspr", "author": "Gylergin", "name": "Kecleon"}, {"file": "kenny_mccormick.1.zspr", "author": "Artheau", "name": "Kenny McCormick"}, {"file": "ketchup.1.zspr", "author": "t0uchan", "name": "Ketchup"}, {"file": "kholdstare.1.zspr", "author": "fatmanspanda", "name": "Kholdstare"}, {"file": "king_gothalion.1.zspr", "author": "kickpixel", "name": "King Gothalion"}, {"file": "king_graham.1.zspr", "author": "MisterKerr", "name": "King Graham v1.1"}, {"file": "kirby-meta.1.zspr", "author": "KHRoxas", "name": "Kirby"}, {"file": "kore8.1.zspr", "author": "Skewer", "name": "Kore8"}, {"file": "korok.1.zspr", "author": "atth3h3art0fwinter", "name": "Korok"}, {"file": "lakitu.1.zspr", "author": "SirCzah", "name": "Lakitu"}, {"file": "lapras.1.zspr", "author": "Fish_waffle64", "name": "Lapras"}, {"file": "lest.1.zspr", "author": "PrideToRuleEarth", "name": "Lest"}, {"file": "lily.1.zspr", "author": "ScatlinkSean", "name": "Lily"}, {"file": "linja.1.zspr", "author": "Razhagal", "name": "Linja"}, {"file": "001.link.1.zspr", "author": "Nintendo", "name": "Link"}, {"file": "link-redrawn.1.zspr", "author": "Spiffy", "name": "Link Redrawn"}, {"file": "little-hylian.1.zspr", "author": "MM102", "name": "Little Hylian"}, {"file": "locke.1.zspr", "author": "Rose", "name": "Locke"}, {"file": "lucario.1.zspr", "author": "Achy", "name": "Lucario"}, {"file": "luigi.1.zspr", "author": "Achy", "name": "Luigi"}, {"file": "luna-maindo.1.zspr", "author": "IkkyLights", "name": "Luna Maindo"}, {"file": "madeline.1.zspr", "author": "Jam", "name": "Madeline"}, {"file": "magus.1.zspr", "author": "PlaguedOne", "name": "Magus"}, {"file": "maiden.1.zspr", "author": "Plan", "name": "Maiden"}, {"file": "mallow-cat.1.zspr", "author": "FedoraFriday", "name": "Mallow (Cat)"}, {"file": "mangalink.1.zspr", "author": "fatmanspanda", "name": "Manga Link"}, {"file": "maplequeen.2.zspr", "author": "Zarby89", "name": "Maple Queen"}, {"file": "marin.2.zspr", "author": "Nocturnesthesia", "name": "Marin"}, {"file": "mario-classic.2.zspr", "author": "Damon", "name": "Mario (Classic)"}, {"file": "mariocappy.1.zspr", "author": "Damon", "name": "Mario and Cappy"}, {"file": "marisa.1.zspr", "author": "Achy", "name": "Marisa Kirisame"}, {"file": "cat.3.zspr", "author": "Fish_waffle64", "name": "Marvin the Cat"}, {"file": "matthias.1.zspr", "author": "Marcus Bolduc", "name": "Matthias"}, {"file": "meatwad.1.zspr", "author": "fatmanspanda", "name": "Meatwad"}, {"file": "medallions.1.zspr", "author": "Mike Trethewey", "name": "Medallions"}, {"file": "medli.1.zspr", "author": "Kzinssie", "name": "Medli"}, {"file": "megaman-x.2.zspr", "author": "PlaguedOne", "name": "Megaman X"}, {"file": "mew.1.zspr", "author": "MewLp", "name": "MewLp"}, {"file": "mike-jones.2.zspr", "author": "Fish_waffle64", "name": "Mike Jones"}, {"file": "ganon.1.zspr", "author": "atth3h3art0fwinter", "name": "Mini Ganon"}, {"file": "minishcaplink.2.zspr", "author": "InTheBeef", "name": "Minish Cap Link"}, {"file": "minish_link.1.zspr", "author": "Artheau", "name": "Minish Link"}, {"file": "moblin.1.zspr", "author": "Noctai_", "name": "MoblinSprite"}, {"file": "modernlink.1.zspr", "author": "RyuTech", "name": "Modern Link"}, {"file": "mog.2.zspr", "author": "Krelbel", "name": "Mog"}, {"file": "momiji.1.zspr", "author": "Ardaceus", "name": "Momiji Inubashiri"}, {"file": "moosh.1.zspr", "author": "PlaguedOne", "name": "Moosh"}, {"file": "mouse.1.zspr", "author": "Malthaez", "name": "Mouse"}, {"file": "ms-paintdog.1.zspr", "author": "TehRealSalt", "name": "Ms. Paint Dog"}, {"file": "naturelink.1.zspr", "author": "iBazly", "name": "Nature Link"}, {"file": "navi.1.zspr", "author": "qwertymodo", "name": "Navi"}, {"file": "navirou.2.zspr", "author": "Lori", "name": "Navirou"}, {"file": "ned-flanders.1.zspr", "author": "JJ0033LL", "name": "Ned Flanders"}, {"file": "negativelink.1.zspr", "author": "iBazly", "name": "Negative Link"}, {"file": "neosad.1.zspr", "author": "Andrew Copple", "name": "Neosad"}, {"file": "ness.1.zspr", "author": "Lantis", "name": "Ness (Earthbound)"}, {"file": "nia.1.zspr", "author": "Mojonbo", "name": "Nia"}, {"file": "niddraig.1.zspr", "author": "Jakebob", "name": "Niddraig"}, {"file": "niko.1.zspr", "author": "ScatlinkSean", "name": "Niko"}, {"file": "oldman.2.zspr", "author": "Zarby89", "name": "Old Man"}, {"file": "ori.2.zspr", "author": "Phant", "name": "Ori"}, {"file": "outlinelink.1.zspr", "author": "VT", "name": "Outline Link"}, {"file": "parallelworldslink.1.zspr", "author": "SePH/InTheBeef", "name": "Parallel Worlds Link"}, {"file": "paula.1.zspr", "author": "Fish_waffle64", "name": "Paula"}, {"file": "penguinlink.1.zspr", "author": "Fish_waffle64", "name": "Penguin Link"}, {"file": "pete.1.zspr", "author": "Lantis", "name": "Pete (Harvest Moon)"}, {"file": "phoenix-wright.1.zspr", "author": "SnipSlum", "name": "Phoenix Wright"}, {"file": "pikachu.1.zspr", "author": "toucansham", "name": "Pikachu"}, {"file": "pinkribbonlink.2.zspr", "author": "fatmanspanda", "name": "Pink Ribbon Link"}, {"file": "piranha_plant.1.zspr", "author": "lecremateur", "name": "Piranha Plant"}, {"file": "plagueknight.1.zspr", "author": "Jenichi", "name": "Plague Knight"}, {"file": "pokey.1.zspr", "author": "fatmanspanda", "name": "Pokey"}, {"file": "littlepony.1.zspr", "author": "Botchos", "name": "Pony"}, {"file": "popoi.1.zspr", "author": "ItsSupercar", "name": "Popoi"}, {"file": "poppy.1.zspr", "author": "cbass601", "name": "Poppy"}, {"file": "porg_knight.1.zspr", "author": "PorgCollector", "name": "Porg Knight"}, {"file": "mushy.1.zspr", "author": "Achy", "name": "Power Up with Pride Mushroom"}, {"file": "powerpuff_girl.1.zspr", "author": "Jenichi", "name": "Powerpuff Girl"}, {"file": "pridelink.2.zspr", "author": "proximitysound", "name": "Pride Link"}, {"file": "primm.1.zspr", "author": "Artheau", "name": "Primm"}, {"file": "princess_bubblegum.1.zspr", "author": "Devan2002", "name": "Princess Bubblegum"}, {"file": "peach.1.zspr", "author": "RoPan", "name": "Princess Peach"}, {"file": "psyduck.2.zspr", "author": "skovacs1", "name": "Psyduck"}, {"file": "purplechest-bottle.1.zspr", "author": "Mike Trethewey", "name": "Purple Chest"}, {"file": "pyro.1.zspr", "author": "malmo", "name": "Pyro"}, {"file": "rainbowlink.1.zspr", "author": "fatmanspanda", "name": "Rainbow Link"}, {"file": "rat.1.zspr", "author": "atth3h3art0fwinter", "name": "Rat"}, {"file": "red-mage.1.zspr", "author": "TheRedMage", "name": "Red Mage"}, {"file": "remeer.1.zspr", "author": "Herowho", "name": "Remeer"}, {"file": "rick.1.zspr", "author": "Eric the Terrible/Devan 2002", "name": "Rick (Redacted)"}, {"file": "robotlink.1.zspr", "author": "fatmanspanda", "name": "Robo-Link 9000"}, {"file": "rocko.1.zspr", "author": "toucansham", "name": "Rocko"}, {"file": "rottytops.1.zspr", "author": "PlaguedOne", "name": "Rottytops"}, {"file": "rover.1.zspr", "author": "NO Body The Dragon", "name": "Rover"}, {"file": "roykoopa.1.zspr", "author": "Achy", "name": "Roy Koopa"}, {"file": "rumia.1.zspr", "author": "Achy", "name": "Rumia"}, {"file": "rydia.1.zspr", "author": "Sho", "name": "Rydia"}, {"file": "ryu.1.zspr", "author": "PlaguedOne", "name": "Ryu"}, {"file": "snes-controller.1.zspr", "author": "Cbass601", "name": "SNES Controller"}, {"file": "sailormoon.1.zspr", "author": "Jenichi", "name": "Sailor Moon"}, {"file": "saitama.1.zspr", "author": "Dabeanjelly/Ath3h3art0fwinter", "name": "Saitama"}, {"file": "samus.2.zspr", "author": "Fish_waffle64", "name": "Samus"}, {"file": "samus_classic.1.zspr", "author": "Fish_waffle64", "name": "Samus (Classic)"}, {"file": "samus-sm.1.zspr", "author": "Ben G", "name": "Samus (Super Metroid)"}, {"file": "santalink.2.zspr", "author": "HOHOHO", "name": "Santa Link"}, {"file": "scholar.1.zspr", "author": "Damon", "name": "Scholar"}, {"file": "selan.1.zspr", "author": "atth3h3art0fwinter", "name": "Selan"}, {"file": "sevens1ns.1.zspr", "author": "Hroun", "name": "SevenS1ns"}, {"file": "shadow.1.zspr", "author": "CGG Zayik", "name": "Shadow"}, {"file": "shadowsaku.2.zspr", "author": "iBazly", "name": "Shadow Sakura"}, {"file": "shantae.1.zspr", "author": "skovacs1", "name": "Shantae"}, {"file": "shuppet.1.zspr", "author": "fatmanspanda", "name": "Shuppet"}, {"file": "shy-gal.1.zspr", "author": "FedoraFriday", "name": "Shy Gal"}, {"file": "shy-guy.1.zspr", "author": "skovacs1", "name": "Shy Guy"}, {"file": "sighn_waive.1.zspr", "author": "GenoCL", "name": "SighnWaive"}, {"file": "slowpoke.1.zspr", "author": "Joey Rat", "name": "Slowpoke"}, {"file": "sodacan.1.zspr", "author": "Zarby89", "name": "Soda Can"}, {"file": "solaire.1.zspr", "author": "Knilip", "name": "Solaire of Astora"}, {"file": "sonic.1.zspr", "author": "Osaka", "name": "Sonic the Hedgehog"}, {"file": "sora.1.zspr", "author": "roxas232", "name": "Sora"}, {"file": "sora_kh1.1.zspr", "author": "ScatlinkSean", "name": "Sora (KH1)"}, {"file": "spongebob.1.zspr", "author": "JJ0033LL", "name": "SpongeBob SquarePants"}, {"file": "squall.1.zspr", "author": "Maessan", "name": "Squall"}, {"file": "squirrel.1.zspr", "author": "Fish_waffle64", "name": "Squirrel"}, {"file": "squirtle.1.zspr", "author": "Numberplay", "name": "Squirtle"}, {"file": "stalfos.1.zspr", "author": "Artheau", "name": "Stalfos"}, {"file": "stan.1.zspr", "author": "Kan", "name": "Stan"}, {"file": "staticlink.1.zspr", "author": "fatmanspanda", "name": "Static Link"}, {"file": "steamedhams.1.zspr", "author": "AFewGoodTaters", "name": "Steamed Ham"}, {"file": "stick_man.1.zspr", "author": "skovacs1", "name": "Stick Man"}, {"file": "superbomb.1.zspr", "author": "Ninjakauz", "name": "Super Bomb"}, {"file": "superbunny.2.zspr", "author": "TheOkayGuy", "name": "Super Bunny"}, {"file": "supermeatboy.1.zspr", "author": "Achy", "name": "Super Meat Boy"}, {"file": "susie.1.zspr", "author": "ZandraVandra", "name": "Susie"}, {"file": "swatchy.1.zspr", "author": "Mike Trethewey", "name": "Swatchy"}, {"file": "tasbot.1.zspr", "author": "GenoCL", "name": "TASBot"}, {"file": "tgh.1.zspr", "author": "Drew Wise, pizza_for_free", "name": "TGH"}, {"file": "tmnt.1.zspr", "author": "SirCzah", "name": "TMNT"}, {"file": "twilightprincesszelda.2.zspr", "author": "Fish_waffle64", "name": "TP Zelda"}, {"file": "mario_tanooki.1.zspr", "author": "Nocturnesthesia", "name": "Tanooki Mario"}, {"file": "teatime.1.zspr", "author": "SirCzah", "name": "Tea Time"}, {"file": "terra.1.zspr", "author": "All-in-one Mighty", "name": "Terra (Esper)"}, {"file": "tetra.1.zspr", "author": "Ferelheart", "name": "Tetra Sheet"}, {"file": "pug.1.zspr", "author": "Achy", "name": "The Pug"}, {"file": "thief.1.zspr", "author": "Devan2002", "name": "Thief"}, {"file": "thomcrow.1.zspr", "author": "Thom", "name": "Thomcrow"}, {"file": "tile.2.zspr", "author": "fatmanspanda", "name": "Tile"}, {"file": "tingle.1.zspr", "author": "Xenobond", "name": "Tingle"}, {"file": "toad.2.zspr", "author": "Zarby89", "name": "Toad"}, {"file": "toadette.2.zspr", "author": "Devan2002", "name": "Toadette"}, {"file": "totem-links.1.zspr", "author": "Yotohan", "name": "TotemLinks"}, {"file": "trogdor.1.zspr", "author": "MikeTrethewey/Spanda", "name": "Trogdor the Burninator"}, {"file": "linktuniccolor.1.zspr", "author": "Damon", "name": "Tunic Color Link"}, {"file": "two_faced.1.zspr", "author": "Devan2002", "name": "TwoFaced"}, {"file": "ty.1.zspr", "author": "Fish_waffle64", "name": "Ty the Tasmanian Tiger"}, {"file": "ultros.1.zspr", "author": "PlaguedOne", "name": "Ultros"}, {"file": "corona.1.zspr", "author": "Unknown", "name": "Untitled"}, {"file": "valeera.1.zspr", "author": "Glan", "name": "Valeera"}, {"file": "vanillalink.1.zspr", "author": "Jenichi", "name": "VanillaLink"}, {"file": "vaporeon.1.zspr", "author": "Aquana", "name": "Vaporeon"}, {"file": "vegeta.1.zspr", "author": "Merciter", "name": "Vegeta"}, {"file": "vera.1.zspr", "author": "aitchFactor", "name": "Vera"}, {"file": "vitreous.1.zspr", "author": "Glan", "name": "Vitreous"}, {"file": "vivi.1.zspr", "author": "RyuTech", "name": "Vivi"}, {"file": "vivian.1.zspr", "author": "SirCzah", "name": "Vivian"}, {"file": "wario.1.zspr", "author": "Deagans", "name": "Wario"}, {"file": "will.1.zspr", "author": "Xenobond", "name": "Will"}, {"file": "wizzrobe.2.zspr", "author": "iBazly", "name": "Wizzrobe"}, {"file": "wolf_link.1.zspr", "author": "Fish/Beef-Chan", "name": "Wolf Link (Festive)"}, {"file": "wolf_link_tp.1.zspr", "author": "Gfish59", "name": "Wolf Link (TP)"}, {"file": "yoshi.1.zspr", "author": "Yotohan", "name": "Yoshi"}, {"file": "yunica.1.zspr", "author": "Fish_waffle64", "name": "Yunica Tovah"}, {"file": "zandra.1.zspr", "author": "ZandraVandra", "name": "Zandra"}, {"file": "zebraunicorn.1.zspr", "author": "Brass Man", "name": "Zebra Unicorn"}, {"file": "zeck.1.zspr", "author": "aitchFactor", "name": "Zeckemyro"}, {"file": "zelda.1.zspr", "author": "Myriachan", "name": "Zelda"}, {"file": "zerosuitsamus.2.zspr", "author": "Fish_waffle64", "name": "Zero Suit Samus"}, {"file": "zora.2.zspr", "author": "Zarby, InTheBeef", "name": "Zora"}, {"file": "boco.1.zspr", "author": "", "name": "boco"}, {"file": "botw-zelda.1.zspr", "author": "", "name": "botw-zelda"}, {"file": "hollow-knight.1.zspr", "author": "Chew_Terr", "name": "hollow_test"}, {"file": "ibazly.1.zspr", "author": "Achy", "name": "iBazly"}, {"file": "missingno.1.zspr", "author": "", "name": "missingno"}]} \ No newline at end of file diff --git a/dumpSprites.py b/dumpSprites.py index 84fde3a7..e8a476fb 100644 --- a/dumpSprites.py +++ b/dumpSprites.py @@ -15,7 +15,7 @@ while not done.isSet(): print("Done updating sprites") -spriteData = {} +spriteData = [] for file in os.listdir(input_dir): sprite = Sprite(os.path.join(input_dir, file)) @@ -27,9 +27,9 @@ for file in os.listdir(input_dir): if sprite.valid: with open(os.path.join(output_dir, "sprites", f"{sprite.name}.gif"), 'wb') as image: image.write(get_image_for_sprite(sprite, True)) - spriteData[sprite.name] = file + spriteData.append({"file": file, "author": sprite.author_name, "name": sprite.name}) else: print(file, "dropped, as it has no valid sprite data.") - +spriteData.sort(key=lambda entry: entry["name"]) with open(f'{output_dir}/spriteData.json', 'w') as file: - json.dump(spriteData, file) + json.dump({"sprites": spriteData}, file) From dc0403493461c8e02e3f878de287b0dd02f1afb3 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 5 Dec 2020 21:34:15 -0500 Subject: [PATCH 06/30] Fix sprite data saving incorrectly on /player-settings --- WebHostLib/static/assets/playerSettings.js | 10 +++++----- WebHostLib/static/static/spriteData.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/WebHostLib/static/assets/playerSettings.js b/WebHostLib/static/assets/playerSettings.js index de9f75e5..e74bd47b 100644 --- a/WebHostLib/static/assets/playerSettings.js +++ b/WebHostLib/static/assets/playerSettings.js @@ -19,12 +19,12 @@ window.addEventListener('load', () => { // Sprite options const spriteData = JSON.parse(results[1]); const spriteSelect = document.getElementById('sprite'); - Object.keys(spriteData).forEach((sprite) => { - if (sprite.trim().length === 0) { return; } + spriteData.sprites.forEach((sprite) => { + if (sprite.name.trim().length === 0) { return; } const option = document.createElement('option'); - option.setAttribute('value', spriteData[sprite]); - if (playerSettings.rom.sprite === sprite) { option.selected = true; } - option.innerText = sprite; + option.setAttribute('value', sprite.name.trim()); + if (playerSettings.rom.sprite === sprite.name.trim()) { option.selected = true; } + option.innerText = sprite.name; spriteSelect.appendChild(option); }); }).catch((error) => { diff --git a/WebHostLib/static/static/spriteData.json b/WebHostLib/static/static/spriteData.json index 8d322ca1..b455f898 100644 --- a/WebHostLib/static/static/spriteData.json +++ b/WebHostLib/static/static/spriteData.json @@ -1 +1 @@ -{"sprites": [{"file": "neslink.1.zspr", "author": "MikeTrethewey/Fatmanspanda", "name": " NES Link"}, {"file": "abigail.1.zspr", "author": "Fish_waffle64", "name": "Abigail"}, {"file": "adol.1.zspr", "author": "Yuushia", "name": "Adol"}, {"file": "aggretsuko.1.zspr", "author": "skovacs1", "name": "Aggretsuko"}, {"file": "alice.1.zspr", "author": "Artheau", "name": "Alice"}, {"file": "angry-video-game-nerd.1.zspr", "author": "ABOhiccups", "name": "Angry Video Game Nerd"}, {"file": "arcane.1.zspr", "author": "MM102", "name": "Arcane"}, {"file": "ark.1.zspr", "author": "wzl", "name": "Ark (Cape)"}, {"file": "ark-dorana.1.zspr", "author": "Matt Dorana", "name": "Ark (No Cape)"}, {"file": "arrghus.2.zspr", "author": "fatmanspanda", "name": "Arrghus"}, {"file": "astronaut.1.zspr", "author": "Malmo", "name": "Astronaut"}, {"file": "asuna.1.zspr", "author": "Natsuru Kiyohoshi", "name": "Asuna"}, {"file": "bsboy.1.zspr", "author": "InTheBeef", "name": "B.S. Boy"}, {"file": "bsgirl.1.zspr", "author": "InTheBeef", "name": "B.S. Girl"}, {"file": "metroid.1.zspr", "author": "Jam", "name": "Baby Metroid"}, {"file": "badeline.1.zspr", "author": "Jam", "name": "Badeline"}, {"file": "bananas-in-pyjamas.1.zspr", "author": "codemann8", "name": "Bananas In Pyjamas"}, {"file": "bandit.1.zspr", "author": "Fenrika", "name": "Bandit"}, {"file": "batman.1.zspr", "author": "Ninjakauz", "name": "Batman"}, {"file": "beau.1.zspr", "author": "Achy", "name": "Beau"}, {"file": "bewp.1.zspr", "author": "Valechec", "name": "Bewp"}, {"file": "bigkey.1.zspr", "author": "Fouton", "name": "Big Key"}, {"file": "birb.1.zspr", "author": "Andrew Copple", "name": "Birb"}, {"file": "birdo.1.zspr", "author": "BlackTycoon", "name": "Birdo"}, {"file": "blackmage.1.zspr", "author": "TheRedMage", "name": "Black Mage"}, {"file": "blacksmithlink.1.zspr", "author": "Glan", "name": "Blacksmith Link"}, {"file": "blazer.1.zspr", "author": "Herowho", "name": "Blazer"}, {"file": "blossom.1.zspr", "author": "Artheau", "name": "Blossom"}, {"file": "bob.1.zspr", "author": "fatmanspanda", "name": "Bob"}, {"file": "bobross.1.zspr", "author": "CaptainApathy", "name": "Bob Ross"}, {"file": "boo.2.zspr", "author": "Zarby89", "name": "Boo"}, {"file": "boo-two.1.zspr", "author": "Achy", "name": "Boo 2"}, {"file": "botw-link.1.zspr", "author": "Pasta La Vista", "name": "BotW Link"}, {"file": "bottle_o_goo.1.zspr", "author": "Fish_waffle64", "name": "Bottle o' Goo"}, {"file": "bowser.1.zspr", "author": "Artheau", "name": "Bowser"}, {"file": "bowsette.1.zspr", "author": "Sarah Shinespark", "name": "Bowsette"}, {"file": "bowsette-red.1.zspr", "author": "Sarah Shinespark", "name": "Bowsette Red"}, {"file": "branch.1.zspr", "author": "cbass601", "name": "Branch"}, {"file": "brian.1.zspr", "author": "Herowho", "name": "Brian"}, {"file": "broccoli.1.zspr", "author": "fatmanspanda", "name": "Broccoli"}, {"file": "bronzor.1.zspr", "author": "fatmanspanda", "name": "Bronzor"}, {"file": "bubbles.1.zspr", "author": "Artheau", "name": "Bubbles"}, {"file": "bullet_bill.1.zspr", "author": "Artheau", "name": "Bullet Bill"}, {"file": "buttercup.1.zspr", "author": "Artheau", "name": "Buttercup"}, {"file": "cdilink.1.zspr", "author": "SnipSlum", "name": "CD-i Link"}, {"file": "cactuar.1.zspr", "author": "RyuTech", "name": "Cactuar"}, {"file": "cadence.1.zspr", "author": "Fish_waffle64", "name": "Cadence"}, {"file": "toadette_captain.1.zspr", "author": "Devan2002", "name": "Captain Toadette"}, {"file": "carlsagan42.1.zspr", "author": "FedoraFriday", "name": "CarlSagan42"}, {"file": "casual-zelda.1.zspr", "author": "Fish_waffle64", "name": "Casual Zelda"}, {"file": "catboo.1.zspr", "author": "JaySee87", "name": "Cat Boo"}, {"file": "celes.1.zspr", "author": "Deagans", "name": "Celes"}, {"file": "charizard.1.zspr", "author": "Charmander106", "name": "Charizard"}, {"file": "cheepcheep.1.zspr", "author": "Faw", "name": "Cheep Cheep"}, {"file": "chibity.1.zspr", "author": "Ecyro", "name": "Chibity"}, {"file": "chrizzz.1.zspr", "author": "Chrizzz", "name": "Chrizzz"}, {"file": "cirno.1.zspr", "author": "Achy", "name": "Cirno"}, {"file": "clifford.1.zspr", "author": "PlaguedOne", "name": "Clifford"}, {"file": "clyde.1.zspr", "author": "Artheau", "name": "Clyde"}, {"file": "conker.1.zspr", "author": "Charmander106/SePH", "name": "Conker"}, {"file": "cornelius.1.zspr", "author": "Lori", "name": "Cornelius"}, {"file": "cucco.1.zspr", "author": "MikeTrethewey", "name": "Cucco"}, {"file": "cursor.1.zspr", "author": "PlaguedOne", "name": "Cursor"}, {"file": "d_owls.2.zspr", "author": "D.Owls", "name": "D.Owls"}, {"file": "slime.1.zspr", "author": "KamenRideDecade", "name": "DQ Slime"}, {"file": "darkboy.1.zspr", "author": "iBazly", "name": "Dark Boy"}, {"file": "darkgirl.1.zspr", "author": "iBazly", "name": "Dark Girl"}, {"file": "darklink.1.zspr", "author": "iBazly", "name": "Dark Link"}, {"file": "darklink-tunic.1.zspr", "author": "Damon", "name": "Dark Link (Tunic)"}, {"file": "dark-panda.1.zspr", "author": "MM102", "name": "Dark Panda"}, {"file": "darkswatchy.1.zspr", "author": "Mike Trethewey", "name": "Dark Swatchy"}, {"file": "darkzelda.1.zspr", "author": "iBazly", "name": "Dark Zelda"}, {"file": "darkzora.2.zspr", "author": "iBazly", "name": "Dark Zora"}, {"file": "deadpool-mythic.1.zspr", "author": "Mythic", "name": "Deadpool (Mythic)"}, {"file": "deadpool.1.zspr", "author": "SirCzah", "name": "Deadpool (SirCzah)"}, {"file": "deadrock.1.zspr", "author": "Glan", "name": "Deadrock"}, {"file": "decidueye.1.zspr", "author": "Achy", "name": "Decidueye"}, {"file": "dekar.1.zspr", "author": "The3X", "name": "Dekar"}, {"file": "demonlink.1.zspr", "author": "Krelbel", "name": "Demon Link"}, {"file": "dragonite.2.zspr", "author": "Fish_waffle64", "name": "Dragonite"}, {"file": "drake.1.zspr", "author": "No Body The Dragon", "name": "Drake The Dragon"}, {"file": "eggplant.1.zspr", "author": "PlaguedOne", "name": "Eggplant"}, {"file": "emosaru.1.zspr", "author": "Achy", "name": "EmoSaru"}, {"file": "ezlo.1.zspr", "author": "cbass601", "name": "Ezlo"}, {"file": "fierce-deity-link.2.zspr", "author": "jeffreygriggs2", "name": "Fierce Deity Link"}, {"file": "locke_merchant.1.zspr", "author": "Artheau", "name": "Figaro Merchant"}, {"file": "finn.3.zspr", "author": "Devan2002", "name": "Finn Merten"}, {"file": "finny_bear.1.zspr", "author": "skovacs1", "name": "Finny Bear"}, {"file": "flavor_guy.1.zspr", "author": "PlaguedOne", "name": "Flavor Guy"}, {"file": "fish_floodgate.1.zspr", "author": "Delphi1024", "name": "Floodgate Fish"}, {"file": "4slink-armors.1.zspr", "author": "Mike Trethewey", "name": "Four Swords Link"}, {"file": "foxlink.1.zspr", "author": "InTheBeef", "name": "Fox Link"}, {"file": "freya.1.zspr", "author": "Demoncraze", "name": "Freya Crescent"}, {"file": "frisk.1.zspr", "author": "Original by Toby Fox, sprite edit by MisterKerr", "name": "Frisk"}, {"file": "froglink.3.zspr", "author": "Mike Trethewey", "name": "Frog Link"}, {"file": "fujin.2.zspr", "author": "FujinAkari", "name": "Fujin"}, {"file": "future_trunks.1.zspr", "author": "Merciter", "name": "Future Trunks"}, {"file": "gbc-link.1.zspr", "author": "skovacs1", "name": "GBC Link"}, {"file": "gamer.1.zspr", "author": "Unknown", "name": "Gamer"}, {"file": "ganondorf.1.zspr", "author": "Fish_waffle64", "name": "Ganondorf"}, {"file": "garfield.2.zspr", "author": "Fwiller", "name": "Garfield"}, {"file": "garnet.1.zspr", "author": "Artheau", "name": "Garnet"}, {"file": "garomaster.1.zspr", "author": "Herowho", "name": "Garo Master"}, {"file": "geno.1.zspr", "author": "FedoraFriday", "name": "Geno"}, {"file": "gliitchwiitch.1.zspr", "author": "Ivy-IV", "name": "GliitchWiitch"}, {"file": "gobli.1.zspr", "author": "Lantis", "name": "Gobli"}, {"file": "goomba.1.zspr", "author": "SirCzah", "name": "Goomba"}, {"file": "goose.1.zspr", "author": "Jam", "name": "Goose"}, {"file": "grandpoobear.2.zspr", "author": "proximitysound", "name": "GrandPOOBear"}, {"file": "gretis.1.zspr", "author": "SnakeGrunger", "name": "Gretis"}, {"file": "grunclestan.1.zspr", "author": "SirCzah", "name": "Gruncle Stan"}, {"file": "guiz.1.zspr", "author": "GuizDP", "name": "GuizDP"}, {"file": "hanna.1.zspr", "author": "Maya-Neko", "name": "Hanna"}, {"file": "hardhat_beetle.1.zspr", "author": "Artheau", "name": "Hardhat Beetle"}, {"file": "linkhatcolor.1.zspr", "author": "Damon", "name": "Hat Color Link"}, {"file": "hat-kid.1.zspr", "author": "skovacs1", "name": "Hat Kid"}, {"file": "headlesslink.1.zspr", "author": "fatmanspanda", "name": "Headless Link"}, {"file": "hello_kitty.1.zspr", "author": "qeeen", "name": "Hello Kitty"}, {"file": "hidari.1.zspr", "author": "Hidari", "name": "Hidari"}, {"file": "hint_tile.1.zspr", "author": "PlaguedOne", "name": "Hint Tile"}, {"file": "luffy.1.zspr", "author": "BOtheMighty", "name": "Hitsuyan1337"}, {"file": "hoarder-bush.1.zspr", "author": "Restomak", "name": "Hoarder (Bush)"}, {"file": "hoarder-pot.1.zspr", "author": "Restomak", "name": "Hoarder (Pot)"}, {"file": "hoarder-rock.1.zspr", "author": "Restomak", "name": "Hoarder (Rock)"}, {"file": "homer.1.zspr", "author": "Fwiller", "name": "Homer Simpson"}, {"file": "hotdog.1.zspr", "author": "Xag & Tylo", "name": "Hotdog"}, {"file": "hyruleknight.1.zspr", "author": "InTheBeef", "name": "Hyrule Knight"}, {"file": "soldiersprite.1.zspr", "author": "InTheBeef", "name": "Hyrule Soldier"}, {"file": "ignignokt.2.zspr", "author": "fatmanspanda", "name": "Ignignokt"}, {"file": "crewmate.1.zspr", "author": "Fish_waffle64", "name": "Imposter"}, {"file": "informant_woman.1.zspr", "author": "Herowho", "name": "Informant Woman"}, {"file": "inkling.1.zspr", "author": "RyuTech", "name": "Inkling"}, {"file": "invisibleman.1.zspr", "author": "Mike Trethewey", "name": "Invisible Link"}, {"file": "jack-frost.1.zspr", "author": "xypotion", "name": "Jack Frost"}, {"file": "jason_frudnick.1.zspr", "author": "Artheau", "name": "Jason Frudnick"}, {"file": "jasp.1.zspr", "author": "Chonixtu", "name": "Jasp"}, {"file": "jogurt.1.zspr", "author": "Nakuri", "name": "Jogurt"}, {"file": "katsura.1.zspr", "author": "atth3h3art0fwinter", "name": "Katsura"}, {"file": "kecleon.1.zspr", "author": "Gylergin", "name": "Kecleon"}, {"file": "kenny_mccormick.1.zspr", "author": "Artheau", "name": "Kenny McCormick"}, {"file": "ketchup.1.zspr", "author": "t0uchan", "name": "Ketchup"}, {"file": "kholdstare.1.zspr", "author": "fatmanspanda", "name": "Kholdstare"}, {"file": "king_gothalion.1.zspr", "author": "kickpixel", "name": "King Gothalion"}, {"file": "king_graham.1.zspr", "author": "MisterKerr", "name": "King Graham v1.1"}, {"file": "kirby-meta.1.zspr", "author": "KHRoxas", "name": "Kirby"}, {"file": "kore8.1.zspr", "author": "Skewer", "name": "Kore8"}, {"file": "korok.1.zspr", "author": "atth3h3art0fwinter", "name": "Korok"}, {"file": "lakitu.1.zspr", "author": "SirCzah", "name": "Lakitu"}, {"file": "lapras.1.zspr", "author": "Fish_waffle64", "name": "Lapras"}, {"file": "lest.1.zspr", "author": "PrideToRuleEarth", "name": "Lest"}, {"file": "lily.1.zspr", "author": "ScatlinkSean", "name": "Lily"}, {"file": "linja.1.zspr", "author": "Razhagal", "name": "Linja"}, {"file": "001.link.1.zspr", "author": "Nintendo", "name": "Link"}, {"file": "link-redrawn.1.zspr", "author": "Spiffy", "name": "Link Redrawn"}, {"file": "little-hylian.1.zspr", "author": "MM102", "name": "Little Hylian"}, {"file": "locke.1.zspr", "author": "Rose", "name": "Locke"}, {"file": "lucario.1.zspr", "author": "Achy", "name": "Lucario"}, {"file": "luigi.1.zspr", "author": "Achy", "name": "Luigi"}, {"file": "luna-maindo.1.zspr", "author": "IkkyLights", "name": "Luna Maindo"}, {"file": "madeline.1.zspr", "author": "Jam", "name": "Madeline"}, {"file": "magus.1.zspr", "author": "PlaguedOne", "name": "Magus"}, {"file": "maiden.1.zspr", "author": "Plan", "name": "Maiden"}, {"file": "mallow-cat.1.zspr", "author": "FedoraFriday", "name": "Mallow (Cat)"}, {"file": "mangalink.1.zspr", "author": "fatmanspanda", "name": "Manga Link"}, {"file": "maplequeen.2.zspr", "author": "Zarby89", "name": "Maple Queen"}, {"file": "marin.2.zspr", "author": "Nocturnesthesia", "name": "Marin"}, {"file": "mario-classic.2.zspr", "author": "Damon", "name": "Mario (Classic)"}, {"file": "mariocappy.1.zspr", "author": "Damon", "name": "Mario and Cappy"}, {"file": "marisa.1.zspr", "author": "Achy", "name": "Marisa Kirisame"}, {"file": "cat.3.zspr", "author": "Fish_waffle64", "name": "Marvin the Cat"}, {"file": "matthias.1.zspr", "author": "Marcus Bolduc", "name": "Matthias"}, {"file": "meatwad.1.zspr", "author": "fatmanspanda", "name": "Meatwad"}, {"file": "medallions.1.zspr", "author": "Mike Trethewey", "name": "Medallions"}, {"file": "medli.1.zspr", "author": "Kzinssie", "name": "Medli"}, {"file": "megaman-x.2.zspr", "author": "PlaguedOne", "name": "Megaman X"}, {"file": "mew.1.zspr", "author": "MewLp", "name": "MewLp"}, {"file": "mike-jones.2.zspr", "author": "Fish_waffle64", "name": "Mike Jones"}, {"file": "ganon.1.zspr", "author": "atth3h3art0fwinter", "name": "Mini Ganon"}, {"file": "minishcaplink.2.zspr", "author": "InTheBeef", "name": "Minish Cap Link"}, {"file": "minish_link.1.zspr", "author": "Artheau", "name": "Minish Link"}, {"file": "moblin.1.zspr", "author": "Noctai_", "name": "MoblinSprite"}, {"file": "modernlink.1.zspr", "author": "RyuTech", "name": "Modern Link"}, {"file": "mog.2.zspr", "author": "Krelbel", "name": "Mog"}, {"file": "momiji.1.zspr", "author": "Ardaceus", "name": "Momiji Inubashiri"}, {"file": "moosh.1.zspr", "author": "PlaguedOne", "name": "Moosh"}, {"file": "mouse.1.zspr", "author": "Malthaez", "name": "Mouse"}, {"file": "ms-paintdog.1.zspr", "author": "TehRealSalt", "name": "Ms. Paint Dog"}, {"file": "naturelink.1.zspr", "author": "iBazly", "name": "Nature Link"}, {"file": "navi.1.zspr", "author": "qwertymodo", "name": "Navi"}, {"file": "navirou.2.zspr", "author": "Lori", "name": "Navirou"}, {"file": "ned-flanders.1.zspr", "author": "JJ0033LL", "name": "Ned Flanders"}, {"file": "negativelink.1.zspr", "author": "iBazly", "name": "Negative Link"}, {"file": "neosad.1.zspr", "author": "Andrew Copple", "name": "Neosad"}, {"file": "ness.1.zspr", "author": "Lantis", "name": "Ness (Earthbound)"}, {"file": "nia.1.zspr", "author": "Mojonbo", "name": "Nia"}, {"file": "niddraig.1.zspr", "author": "Jakebob", "name": "Niddraig"}, {"file": "niko.1.zspr", "author": "ScatlinkSean", "name": "Niko"}, {"file": "oldman.2.zspr", "author": "Zarby89", "name": "Old Man"}, {"file": "ori.2.zspr", "author": "Phant", "name": "Ori"}, {"file": "outlinelink.1.zspr", "author": "VT", "name": "Outline Link"}, {"file": "parallelworldslink.1.zspr", "author": "SePH/InTheBeef", "name": "Parallel Worlds Link"}, {"file": "paula.1.zspr", "author": "Fish_waffle64", "name": "Paula"}, {"file": "penguinlink.1.zspr", "author": "Fish_waffle64", "name": "Penguin Link"}, {"file": "pete.1.zspr", "author": "Lantis", "name": "Pete (Harvest Moon)"}, {"file": "phoenix-wright.1.zspr", "author": "SnipSlum", "name": "Phoenix Wright"}, {"file": "pikachu.1.zspr", "author": "toucansham", "name": "Pikachu"}, {"file": "pinkribbonlink.2.zspr", "author": "fatmanspanda", "name": "Pink Ribbon Link"}, {"file": "piranha_plant.1.zspr", "author": "lecremateur", "name": "Piranha Plant"}, {"file": "plagueknight.1.zspr", "author": "Jenichi", "name": "Plague Knight"}, {"file": "pokey.1.zspr", "author": "fatmanspanda", "name": "Pokey"}, {"file": "littlepony.1.zspr", "author": "Botchos", "name": "Pony"}, {"file": "popoi.1.zspr", "author": "ItsSupercar", "name": "Popoi"}, {"file": "poppy.1.zspr", "author": "cbass601", "name": "Poppy"}, {"file": "porg_knight.1.zspr", "author": "PorgCollector", "name": "Porg Knight"}, {"file": "mushy.1.zspr", "author": "Achy", "name": "Power Up with Pride Mushroom"}, {"file": "powerpuff_girl.1.zspr", "author": "Jenichi", "name": "Powerpuff Girl"}, {"file": "pridelink.2.zspr", "author": "proximitysound", "name": "Pride Link"}, {"file": "primm.1.zspr", "author": "Artheau", "name": "Primm"}, {"file": "princess_bubblegum.1.zspr", "author": "Devan2002", "name": "Princess Bubblegum"}, {"file": "peach.1.zspr", "author": "RoPan", "name": "Princess Peach"}, {"file": "psyduck.2.zspr", "author": "skovacs1", "name": "Psyduck"}, {"file": "purplechest-bottle.1.zspr", "author": "Mike Trethewey", "name": "Purple Chest"}, {"file": "pyro.1.zspr", "author": "malmo", "name": "Pyro"}, {"file": "rainbowlink.1.zspr", "author": "fatmanspanda", "name": "Rainbow Link"}, {"file": "rat.1.zspr", "author": "atth3h3art0fwinter", "name": "Rat"}, {"file": "red-mage.1.zspr", "author": "TheRedMage", "name": "Red Mage"}, {"file": "remeer.1.zspr", "author": "Herowho", "name": "Remeer"}, {"file": "rick.1.zspr", "author": "Eric the Terrible/Devan 2002", "name": "Rick (Redacted)"}, {"file": "robotlink.1.zspr", "author": "fatmanspanda", "name": "Robo-Link 9000"}, {"file": "rocko.1.zspr", "author": "toucansham", "name": "Rocko"}, {"file": "rottytops.1.zspr", "author": "PlaguedOne", "name": "Rottytops"}, {"file": "rover.1.zspr", "author": "NO Body The Dragon", "name": "Rover"}, {"file": "roykoopa.1.zspr", "author": "Achy", "name": "Roy Koopa"}, {"file": "rumia.1.zspr", "author": "Achy", "name": "Rumia"}, {"file": "rydia.1.zspr", "author": "Sho", "name": "Rydia"}, {"file": "ryu.1.zspr", "author": "PlaguedOne", "name": "Ryu"}, {"file": "snes-controller.1.zspr", "author": "Cbass601", "name": "SNES Controller"}, {"file": "sailormoon.1.zspr", "author": "Jenichi", "name": "Sailor Moon"}, {"file": "saitama.1.zspr", "author": "Dabeanjelly/Ath3h3art0fwinter", "name": "Saitama"}, {"file": "samus.2.zspr", "author": "Fish_waffle64", "name": "Samus"}, {"file": "samus_classic.1.zspr", "author": "Fish_waffle64", "name": "Samus (Classic)"}, {"file": "samus-sm.1.zspr", "author": "Ben G", "name": "Samus (Super Metroid)"}, {"file": "santalink.2.zspr", "author": "HOHOHO", "name": "Santa Link"}, {"file": "scholar.1.zspr", "author": "Damon", "name": "Scholar"}, {"file": "selan.1.zspr", "author": "atth3h3art0fwinter", "name": "Selan"}, {"file": "sevens1ns.1.zspr", "author": "Hroun", "name": "SevenS1ns"}, {"file": "shadow.1.zspr", "author": "CGG Zayik", "name": "Shadow"}, {"file": "shadowsaku.2.zspr", "author": "iBazly", "name": "Shadow Sakura"}, {"file": "shantae.1.zspr", "author": "skovacs1", "name": "Shantae"}, {"file": "shuppet.1.zspr", "author": "fatmanspanda", "name": "Shuppet"}, {"file": "shy-gal.1.zspr", "author": "FedoraFriday", "name": "Shy Gal"}, {"file": "shy-guy.1.zspr", "author": "skovacs1", "name": "Shy Guy"}, {"file": "sighn_waive.1.zspr", "author": "GenoCL", "name": "SighnWaive"}, {"file": "slowpoke.1.zspr", "author": "Joey Rat", "name": "Slowpoke"}, {"file": "sodacan.1.zspr", "author": "Zarby89", "name": "Soda Can"}, {"file": "solaire.1.zspr", "author": "Knilip", "name": "Solaire of Astora"}, {"file": "sonic.1.zspr", "author": "Osaka", "name": "Sonic the Hedgehog"}, {"file": "sora.1.zspr", "author": "roxas232", "name": "Sora"}, {"file": "sora_kh1.1.zspr", "author": "ScatlinkSean", "name": "Sora (KH1)"}, {"file": "spongebob.1.zspr", "author": "JJ0033LL", "name": "SpongeBob SquarePants"}, {"file": "squall.1.zspr", "author": "Maessan", "name": "Squall"}, {"file": "squirrel.1.zspr", "author": "Fish_waffle64", "name": "Squirrel"}, {"file": "squirtle.1.zspr", "author": "Numberplay", "name": "Squirtle"}, {"file": "stalfos.1.zspr", "author": "Artheau", "name": "Stalfos"}, {"file": "stan.1.zspr", "author": "Kan", "name": "Stan"}, {"file": "staticlink.1.zspr", "author": "fatmanspanda", "name": "Static Link"}, {"file": "steamedhams.1.zspr", "author": "AFewGoodTaters", "name": "Steamed Ham"}, {"file": "stick_man.1.zspr", "author": "skovacs1", "name": "Stick Man"}, {"file": "superbomb.1.zspr", "author": "Ninjakauz", "name": "Super Bomb"}, {"file": "superbunny.2.zspr", "author": "TheOkayGuy", "name": "Super Bunny"}, {"file": "supermeatboy.1.zspr", "author": "Achy", "name": "Super Meat Boy"}, {"file": "susie.1.zspr", "author": "ZandraVandra", "name": "Susie"}, {"file": "swatchy.1.zspr", "author": "Mike Trethewey", "name": "Swatchy"}, {"file": "tasbot.1.zspr", "author": "GenoCL", "name": "TASBot"}, {"file": "tgh.1.zspr", "author": "Drew Wise, pizza_for_free", "name": "TGH"}, {"file": "tmnt.1.zspr", "author": "SirCzah", "name": "TMNT"}, {"file": "twilightprincesszelda.2.zspr", "author": "Fish_waffle64", "name": "TP Zelda"}, {"file": "mario_tanooki.1.zspr", "author": "Nocturnesthesia", "name": "Tanooki Mario"}, {"file": "teatime.1.zspr", "author": "SirCzah", "name": "Tea Time"}, {"file": "terra.1.zspr", "author": "All-in-one Mighty", "name": "Terra (Esper)"}, {"file": "tetra.1.zspr", "author": "Ferelheart", "name": "Tetra Sheet"}, {"file": "pug.1.zspr", "author": "Achy", "name": "The Pug"}, {"file": "thief.1.zspr", "author": "Devan2002", "name": "Thief"}, {"file": "thomcrow.1.zspr", "author": "Thom", "name": "Thomcrow"}, {"file": "tile.2.zspr", "author": "fatmanspanda", "name": "Tile"}, {"file": "tingle.1.zspr", "author": "Xenobond", "name": "Tingle"}, {"file": "toad.2.zspr", "author": "Zarby89", "name": "Toad"}, {"file": "toadette.2.zspr", "author": "Devan2002", "name": "Toadette"}, {"file": "totem-links.1.zspr", "author": "Yotohan", "name": "TotemLinks"}, {"file": "trogdor.1.zspr", "author": "MikeTrethewey/Spanda", "name": "Trogdor the Burninator"}, {"file": "linktuniccolor.1.zspr", "author": "Damon", "name": "Tunic Color Link"}, {"file": "two_faced.1.zspr", "author": "Devan2002", "name": "TwoFaced"}, {"file": "ty.1.zspr", "author": "Fish_waffle64", "name": "Ty the Tasmanian Tiger"}, {"file": "ultros.1.zspr", "author": "PlaguedOne", "name": "Ultros"}, {"file": "corona.1.zspr", "author": "Unknown", "name": "Untitled"}, {"file": "valeera.1.zspr", "author": "Glan", "name": "Valeera"}, {"file": "vanillalink.1.zspr", "author": "Jenichi", "name": "VanillaLink"}, {"file": "vaporeon.1.zspr", "author": "Aquana", "name": "Vaporeon"}, {"file": "vegeta.1.zspr", "author": "Merciter", "name": "Vegeta"}, {"file": "vera.1.zspr", "author": "aitchFactor", "name": "Vera"}, {"file": "vitreous.1.zspr", "author": "Glan", "name": "Vitreous"}, {"file": "vivi.1.zspr", "author": "RyuTech", "name": "Vivi"}, {"file": "vivian.1.zspr", "author": "SirCzah", "name": "Vivian"}, {"file": "wario.1.zspr", "author": "Deagans", "name": "Wario"}, {"file": "will.1.zspr", "author": "Xenobond", "name": "Will"}, {"file": "wizzrobe.2.zspr", "author": "iBazly", "name": "Wizzrobe"}, {"file": "wolf_link.1.zspr", "author": "Fish/Beef-Chan", "name": "Wolf Link (Festive)"}, {"file": "wolf_link_tp.1.zspr", "author": "Gfish59", "name": "Wolf Link (TP)"}, {"file": "yoshi.1.zspr", "author": "Yotohan", "name": "Yoshi"}, {"file": "yunica.1.zspr", "author": "Fish_waffle64", "name": "Yunica Tovah"}, {"file": "zandra.1.zspr", "author": "ZandraVandra", "name": "Zandra"}, {"file": "zebraunicorn.1.zspr", "author": "Brass Man", "name": "Zebra Unicorn"}, {"file": "zeck.1.zspr", "author": "aitchFactor", "name": "Zeckemyro"}, {"file": "zelda.1.zspr", "author": "Myriachan", "name": "Zelda"}, {"file": "zerosuitsamus.2.zspr", "author": "Fish_waffle64", "name": "Zero Suit Samus"}, {"file": "zora.2.zspr", "author": "Zarby, InTheBeef", "name": "Zora"}, {"file": "boco.1.zspr", "author": "", "name": "boco"}, {"file": "botw-zelda.1.zspr", "author": "", "name": "botw-zelda"}, {"file": "hollow-knight.1.zspr", "author": "Chew_Terr", "name": "hollow_test"}, {"file": "ibazly.1.zspr", "author": "Achy", "name": "iBazly"}, {"file": "missingno.1.zspr", "author": "", "name": "missingno"}]} \ No newline at end of file +{"sprites": [{"file": "neslink.1.zspr", "author": "MikeTrethewey/Fatmanspanda", "name": " NES Link"}, {"file": "abigail.1.zspr", "author": "Fish_waffle64", "name": "Abigail"}, {"file": "adol.1.zspr", "author": "Yuushia", "name": "Adol"}, {"file": "aggretsuko.1.zspr", "author": "skovacs1", "name": "Aggretsuko"}, {"file": "alice.1.zspr", "author": "Artheau", "name": "Alice"}, {"file": "angry-video-game-nerd.1.zspr", "author": "ABOhiccups", "name": "Angry Video Game Nerd"}, {"file": "arcane.1.zspr", "author": "MM102", "name": "Arcane"}, {"file": "ark.1.zspr", "author": "wzl", "name": "Ark (Cape)"}, {"file": "ark-dorana.1.zspr", "author": "Matt Dorana", "name": "Ark (No Cape)"}, {"file": "arrghus.2.zspr", "author": "fatmanspanda", "name": "Arrghus"}, {"file": "astronaut.1.zspr", "author": "Malmo", "name": "Astronaut"}, {"file": "asuna.1.zspr", "author": "Natsuru Kiyohoshi", "name": "Asuna"}, {"file": "bsboy.1.zspr", "author": "InTheBeef", "name": "B.S. Boy"}, {"file": "bsgirl.1.zspr", "author": "InTheBeef", "name": "B.S. Girl"}, {"file": "metroid.1.zspr", "author": "Jam", "name": "Baby Metroid"}, {"file": "badeline.1.zspr", "author": "Jam", "name": "Badeline"}, {"file": "bananas-in-pyjamas.1.zspr", "author": "codemann8", "name": "Bananas In Pyjamas"}, {"file": "bandit.1.zspr", "author": "Fenrika", "name": "Bandit"}, {"file": "batman.1.zspr", "author": "Ninjakauz", "name": "Batman"}, {"file": "beau.1.zspr", "author": "Achy", "name": "Beau"}, {"file": "bewp.1.zspr", "author": "Valechec", "name": "Bewp"}, {"file": "bigkey.1.zspr", "author": "Fouton", "name": "Big Key"}, {"file": "birb.1.zspr", "author": "Andrew Copple", "name": "Birb"}, {"file": "birdo.1.zspr", "author": "BlackTycoon", "name": "Birdo"}, {"file": "blackmage.1.zspr", "author": "TheRedMage", "name": "Black Mage"}, {"file": "blacksmithlink.1.zspr", "author": "Glan", "name": "Blacksmith Link"}, {"file": "blazer.1.zspr", "author": "Herowho", "name": "Blazer"}, {"file": "blossom.1.zspr", "author": "Artheau", "name": "Blossom"}, {"file": "bob.1.zspr", "author": "fatmanspanda", "name": "Bob"}, {"file": "bobross.1.zspr", "author": "CaptainApathy", "name": "Bob Ross"}, {"file": "boo.2.zspr", "author": "Zarby89", "name": "Boo"}, {"file": "boo-two.1.zspr", "author": "Achy", "name": "Boo 2"}, {"file": "botw-link.1.zspr", "author": "Pasta La Vista", "name": "BotW Link"}, {"file": "botw-zelda.1.zspr", "author": "Roo", "name": "BotW Zelda"}, {"file": "bottle_o_goo.1.zspr", "author": "Fish_waffle64", "name": "Bottle o' Goo"}, {"file": "bowser.1.zspr", "author": "Artheau", "name": "Bowser"}, {"file": "bowsette.1.zspr", "author": "Sarah Shinespark", "name": "Bowsette"}, {"file": "bowsette-red.1.zspr", "author": "Sarah Shinespark", "name": "Bowsette Red"}, {"file": "branch.1.zspr", "author": "cbass601", "name": "Branch"}, {"file": "brian.1.zspr", "author": "Herowho", "name": "Brian"}, {"file": "broccoli.1.zspr", "author": "fatmanspanda", "name": "Broccoli"}, {"file": "bronzor.1.zspr", "author": "fatmanspanda", "name": "Bronzor"}, {"file": "bubbles.1.zspr", "author": "Artheau", "name": "Bubbles"}, {"file": "bullet_bill.1.zspr", "author": "Artheau", "name": "Bullet Bill"}, {"file": "buttercup.1.zspr", "author": "Artheau", "name": "Buttercup"}, {"file": "cdilink.1.zspr", "author": "SnipSlum", "name": "CD-i Link"}, {"file": "cactuar.1.zspr", "author": "RyuTech", "name": "Cactuar"}, {"file": "cadence.1.zspr", "author": "Fish_waffle64", "name": "Cadence"}, {"file": "toadette_captain.1.zspr", "author": "Devan2002", "name": "Captain Toadette"}, {"file": "carlsagan42.1.zspr", "author": "FedoraFriday", "name": "CarlSagan42"}, {"file": "casual-zelda.1.zspr", "author": "Fish_waffle64", "name": "Casual Zelda"}, {"file": "catboo.1.zspr", "author": "JaySee87", "name": "Cat Boo"}, {"file": "celes.1.zspr", "author": "Deagans", "name": "Celes"}, {"file": "charizard.1.zspr", "author": "Charmander106", "name": "Charizard"}, {"file": "cheepcheep.1.zspr", "author": "Faw", "name": "Cheep Cheep"}, {"file": "chibity.1.zspr", "author": "Ecyro", "name": "Chibity"}, {"file": "chrizzz.1.zspr", "author": "Chrizzz", "name": "Chrizzz"}, {"file": "cirno.1.zspr", "author": "Achy", "name": "Cirno"}, {"file": "clifford.1.zspr", "author": "PlaguedOne", "name": "Clifford"}, {"file": "clyde.1.zspr", "author": "Artheau", "name": "Clyde"}, {"file": "conker.1.zspr", "author": "Charmander106/SePH", "name": "Conker"}, {"file": "cornelius.1.zspr", "author": "Lori", "name": "Cornelius"}, {"file": "cucco.1.zspr", "author": "MikeTrethewey", "name": "Cucco"}, {"file": "cursor.1.zspr", "author": "PlaguedOne", "name": "Cursor"}, {"file": "d_owls.2.zspr", "author": "D.Owls", "name": "D.Owls"}, {"file": "slime.1.zspr", "author": "KamenRideDecade", "name": "DQ Slime"}, {"file": "darkboy.1.zspr", "author": "iBazly", "name": "Dark Boy"}, {"file": "darkgirl.1.zspr", "author": "iBazly", "name": "Dark Girl"}, {"file": "darklink.1.zspr", "author": "iBazly", "name": "Dark Link"}, {"file": "darklink-tunic.1.zspr", "author": "Damon", "name": "Dark Link (Tunic)"}, {"file": "dark-panda.1.zspr", "author": "MM102", "name": "Dark Panda"}, {"file": "darkswatchy.1.zspr", "author": "Mike Trethewey", "name": "Dark Swatchy"}, {"file": "darkzelda.1.zspr", "author": "iBazly", "name": "Dark Zelda"}, {"file": "darkzora.2.zspr", "author": "iBazly", "name": "Dark Zora"}, {"file": "deadpool-mythic.1.zspr", "author": "Mythic", "name": "Deadpool (Mythic)"}, {"file": "deadpool.1.zspr", "author": "SirCzah", "name": "Deadpool (SirCzah)"}, {"file": "deadrock.1.zspr", "author": "Glan", "name": "Deadrock"}, {"file": "decidueye.1.zspr", "author": "Achy", "name": "Decidueye"}, {"file": "dekar.1.zspr", "author": "The3X", "name": "Dekar"}, {"file": "demonlink.1.zspr", "author": "Krelbel", "name": "Demon Link"}, {"file": "dragonite.2.zspr", "author": "Fish_waffle64", "name": "Dragonite"}, {"file": "drake.1.zspr", "author": "No Body The Dragon", "name": "Drake The Dragon"}, {"file": "eggplant.1.zspr", "author": "PlaguedOne", "name": "Eggplant"}, {"file": "emosaru.1.zspr", "author": "Achy", "name": "EmoSaru"}, {"file": "ezlo.1.zspr", "author": "cbass601", "name": "Ezlo"}, {"file": "fierce-deity-link.2.zspr", "author": "jeffreygriggs2", "name": "Fierce Deity Link"}, {"file": "locke_merchant.1.zspr", "author": "Artheau", "name": "Figaro Merchant"}, {"file": "finn.3.zspr", "author": "Devan2002", "name": "Finn Merten"}, {"file": "finny_bear.1.zspr", "author": "skovacs1", "name": "Finny Bear"}, {"file": "flavor_guy.1.zspr", "author": "PlaguedOne", "name": "Flavor Guy"}, {"file": "fish_floodgate.1.zspr", "author": "Delphi1024", "name": "Floodgate Fish"}, {"file": "4slink-armors.1.zspr", "author": "Mike Trethewey", "name": "Four Swords Link"}, {"file": "foxlink.1.zspr", "author": "InTheBeef", "name": "Fox Link"}, {"file": "freya.1.zspr", "author": "Demoncraze", "name": "Freya Crescent"}, {"file": "frisk.1.zspr", "author": "Original by Toby Fox, sprite edit by MisterKerr", "name": "Frisk"}, {"file": "froglink.3.zspr", "author": "Mike Trethewey", "name": "Frog Link"}, {"file": "fujin.2.zspr", "author": "FujinAkari", "name": "Fujin"}, {"file": "future_trunks.1.zspr", "author": "Merciter", "name": "Future Trunks"}, {"file": "gbc-link.1.zspr", "author": "skovacs1", "name": "GBC Link"}, {"file": "gamer.1.zspr", "author": "Unknown", "name": "Gamer"}, {"file": "ganondorf.1.zspr", "author": "Fish_waffle64", "name": "Ganondorf"}, {"file": "garfield.2.zspr", "author": "Fwiller", "name": "Garfield"}, {"file": "garnet.1.zspr", "author": "Artheau", "name": "Garnet"}, {"file": "garomaster.1.zspr", "author": "Herowho", "name": "Garo Master"}, {"file": "geno.1.zspr", "author": "FedoraFriday", "name": "Geno"}, {"file": "gliitchwiitch.1.zspr", "author": "Ivy-IV", "name": "GliitchWiitch"}, {"file": "gobli.1.zspr", "author": "Lantis", "name": "Gobli"}, {"file": "goomba.1.zspr", "author": "SirCzah", "name": "Goomba"}, {"file": "goose.1.zspr", "author": "Jam", "name": "Goose"}, {"file": "grandpoobear.2.zspr", "author": "proximitysound", "name": "GrandPOOBear"}, {"file": "gretis.1.zspr", "author": "SnakeGrunger", "name": "Gretis"}, {"file": "grunclestan.1.zspr", "author": "SirCzah", "name": "Gruncle Stan"}, {"file": "guiz.1.zspr", "author": "GuizDP", "name": "GuizDP"}, {"file": "hanna.1.zspr", "author": "Maya-Neko", "name": "Hanna"}, {"file": "hardhat_beetle.1.zspr", "author": "Artheau", "name": "Hardhat Beetle"}, {"file": "linkhatcolor.1.zspr", "author": "Damon", "name": "Hat Color Link"}, {"file": "hat-kid.1.zspr", "author": "skovacs1", "name": "Hat Kid"}, {"file": "headlesslink.1.zspr", "author": "fatmanspanda", "name": "Headless Link"}, {"file": "hello_kitty.1.zspr", "author": "qeeen", "name": "Hello Kitty"}, {"file": "hidari.1.zspr", "author": "Hidari", "name": "Hidari"}, {"file": "hint_tile.1.zspr", "author": "PlaguedOne", "name": "Hint Tile"}, {"file": "luffy.1.zspr", "author": "BOtheMighty", "name": "Hitsuyan1337"}, {"file": "hoarder-bush.1.zspr", "author": "Restomak", "name": "Hoarder (Bush)"}, {"file": "hoarder-pot.1.zspr", "author": "Restomak", "name": "Hoarder (Pot)"}, {"file": "hoarder-rock.1.zspr", "author": "Restomak", "name": "Hoarder (Rock)"}, {"file": "homer.1.zspr", "author": "Fwiller", "name": "Homer Simpson"}, {"file": "hotdog.1.zspr", "author": "Xag & Tylo", "name": "Hotdog"}, {"file": "hyruleknight.1.zspr", "author": "InTheBeef", "name": "Hyrule Knight"}, {"file": "soldiersprite.1.zspr", "author": "InTheBeef", "name": "Hyrule Soldier"}, {"file": "ignignokt.2.zspr", "author": "fatmanspanda", "name": "Ignignokt"}, {"file": "crewmate.1.zspr", "author": "Fish_waffle64", "name": "Imposter"}, {"file": "informant_woman.1.zspr", "author": "Herowho", "name": "Informant Woman"}, {"file": "inkling.1.zspr", "author": "RyuTech", "name": "Inkling"}, {"file": "invisibleman.1.zspr", "author": "Mike Trethewey", "name": "Invisible Link"}, {"file": "jack-frost.1.zspr", "author": "xypotion", "name": "Jack Frost"}, {"file": "jason_frudnick.1.zspr", "author": "Artheau", "name": "Jason Frudnick"}, {"file": "jasp.1.zspr", "author": "Chonixtu", "name": "Jasp"}, {"file": "jogurt.1.zspr", "author": "Nakuri", "name": "Jogurt"}, {"file": "katsura.1.zspr", "author": "atth3h3art0fwinter", "name": "Katsura"}, {"file": "kecleon.1.zspr", "author": "Gylergin", "name": "Kecleon"}, {"file": "kenny_mccormick.1.zspr", "author": "Artheau", "name": "Kenny McCormick"}, {"file": "ketchup.1.zspr", "author": "t0uchan", "name": "Ketchup"}, {"file": "kholdstare.1.zspr", "author": "fatmanspanda", "name": "Kholdstare"}, {"file": "king_gothalion.1.zspr", "author": "kickpixel", "name": "King Gothalion"}, {"file": "king_graham.1.zspr", "author": "MisterKerr", "name": "King Graham v1.1"}, {"file": "kirby-meta.1.zspr", "author": "KHRoxas", "name": "Kirby"}, {"file": "kore8.1.zspr", "author": "Skewer", "name": "Kore8"}, {"file": "korok.1.zspr", "author": "atth3h3art0fwinter", "name": "Korok"}, {"file": "lakitu.1.zspr", "author": "SirCzah", "name": "Lakitu"}, {"file": "lapras.1.zspr", "author": "Fish_waffle64", "name": "Lapras"}, {"file": "lest.1.zspr", "author": "PrideToRuleEarth", "name": "Lest"}, {"file": "lily.1.zspr", "author": "ScatlinkSean", "name": "Lily"}, {"file": "linja.1.zspr", "author": "Razhagal", "name": "Linja"}, {"file": "001.link.1.zspr", "author": "Nintendo", "name": "Link"}, {"file": "link-redrawn.1.zspr", "author": "Spiffy", "name": "Link Redrawn"}, {"file": "little-hylian.1.zspr", "author": "MM102", "name": "Little Hylian"}, {"file": "locke.1.zspr", "author": "Rose", "name": "Locke"}, {"file": "lucario.1.zspr", "author": "Achy", "name": "Lucario"}, {"file": "luigi.1.zspr", "author": "Achy", "name": "Luigi"}, {"file": "luna-maindo.1.zspr", "author": "IkkyLights", "name": "Luna Maindo"}, {"file": "madeline.1.zspr", "author": "Jam", "name": "Madeline"}, {"file": "magus.1.zspr", "author": "PlaguedOne", "name": "Magus"}, {"file": "maiden.1.zspr", "author": "Plan", "name": "Maiden"}, {"file": "mallow-cat.1.zspr", "author": "FedoraFriday", "name": "Mallow (Cat)"}, {"file": "mangalink.1.zspr", "author": "fatmanspanda", "name": "Manga Link"}, {"file": "maplequeen.2.zspr", "author": "Zarby89", "name": "Maple Queen"}, {"file": "marin.2.zspr", "author": "Nocturnesthesia", "name": "Marin"}, {"file": "mario-classic.2.zspr", "author": "Damon", "name": "Mario (Classic)"}, {"file": "mariocappy.1.zspr", "author": "Damon", "name": "Mario and Cappy"}, {"file": "marisa.1.zspr", "author": "Achy", "name": "Marisa Kirisame"}, {"file": "cat.3.zspr", "author": "Fish_waffle64", "name": "Marvin the Cat"}, {"file": "matthias.1.zspr", "author": "Marcus Bolduc", "name": "Matthias"}, {"file": "meatwad.1.zspr", "author": "fatmanspanda", "name": "Meatwad"}, {"file": "medallions.1.zspr", "author": "Mike Trethewey", "name": "Medallions"}, {"file": "medli.1.zspr", "author": "Kzinssie", "name": "Medli"}, {"file": "megaman-x.2.zspr", "author": "PlaguedOne", "name": "Megaman X"}, {"file": "mew.1.zspr", "author": "MewLp", "name": "MewLp"}, {"file": "mike-jones.2.zspr", "author": "Fish_waffle64", "name": "Mike Jones"}, {"file": "ganon.1.zspr", "author": "atth3h3art0fwinter", "name": "Mini Ganon"}, {"file": "minishcaplink.2.zspr", "author": "InTheBeef", "name": "Minish Cap Link"}, {"file": "minish_link.1.zspr", "author": "Artheau", "name": "Minish Link"}, {"file": "moblin.1.zspr", "author": "Noctai_", "name": "MoblinSprite"}, {"file": "modernlink.1.zspr", "author": "RyuTech", "name": "Modern Link"}, {"file": "mog.2.zspr", "author": "Krelbel", "name": "Mog"}, {"file": "momiji.1.zspr", "author": "Ardaceus", "name": "Momiji Inubashiri"}, {"file": "moosh.1.zspr", "author": "PlaguedOne", "name": "Moosh"}, {"file": "mouse.1.zspr", "author": "Malthaez", "name": "Mouse"}, {"file": "ms-paintdog.1.zspr", "author": "TehRealSalt", "name": "Ms. Paint Dog"}, {"file": "naturelink.1.zspr", "author": "iBazly", "name": "Nature Link"}, {"file": "navi.1.zspr", "author": "qwertymodo", "name": "Navi"}, {"file": "navirou.2.zspr", "author": "Lori", "name": "Navirou"}, {"file": "ned-flanders.1.zspr", "author": "JJ0033LL", "name": "Ned Flanders"}, {"file": "negativelink.1.zspr", "author": "iBazly", "name": "Negative Link"}, {"file": "neosad.1.zspr", "author": "Andrew Copple", "name": "Neosad"}, {"file": "ness.1.zspr", "author": "Lantis", "name": "Ness (Earthbound)"}, {"file": "nia.1.zspr", "author": "Mojonbo", "name": "Nia"}, {"file": "niddraig.1.zspr", "author": "Jakebob", "name": "Niddraig"}, {"file": "niko.1.zspr", "author": "ScatlinkSean", "name": "Niko"}, {"file": "oldman.2.zspr", "author": "Zarby89", "name": "Old Man"}, {"file": "ori.2.zspr", "author": "Phant", "name": "Ori"}, {"file": "outlinelink.1.zspr", "author": "VT", "name": "Outline Link"}, {"file": "parallelworldslink.1.zspr", "author": "SePH/InTheBeef", "name": "Parallel Worlds Link"}, {"file": "paula.1.zspr", "author": "Fish_waffle64", "name": "Paula"}, {"file": "penguinlink.1.zspr", "author": "Fish_waffle64", "name": "Penguin Link"}, {"file": "pete.1.zspr", "author": "Lantis", "name": "Pete (Harvest Moon)"}, {"file": "phoenix-wright.1.zspr", "author": "SnipSlum", "name": "Phoenix Wright"}, {"file": "pikachu.1.zspr", "author": "toucansham", "name": "Pikachu"}, {"file": "pinkribbonlink.2.zspr", "author": "fatmanspanda", "name": "Pink Ribbon Link"}, {"file": "piranha_plant.1.zspr", "author": "lecremateur", "name": "Piranha Plant"}, {"file": "plagueknight.1.zspr", "author": "Jenichi", "name": "Plague Knight"}, {"file": "pokey.1.zspr", "author": "fatmanspanda", "name": "Pokey"}, {"file": "littlepony.1.zspr", "author": "Botchos", "name": "Pony"}, {"file": "popoi.1.zspr", "author": "ItsSupercar", "name": "Popoi"}, {"file": "poppy.1.zspr", "author": "cbass601", "name": "Poppy"}, {"file": "porg_knight.1.zspr", "author": "PorgCollector", "name": "Porg Knight"}, {"file": "mushy.1.zspr", "author": "Achy", "name": "Power Up with Pride Mushroom"}, {"file": "powerpuff_girl.1.zspr", "author": "Jenichi", "name": "Powerpuff Girl"}, {"file": "pridelink.2.zspr", "author": "proximitysound", "name": "Pride Link"}, {"file": "primm.1.zspr", "author": "Artheau", "name": "Primm"}, {"file": "princess_bubblegum.1.zspr", "author": "Devan2002", "name": "Princess Bubblegum"}, {"file": "peach.1.zspr", "author": "RoPan", "name": "Princess Peach"}, {"file": "psyduck.2.zspr", "author": "skovacs1", "name": "Psyduck"}, {"file": "purplechest-bottle.1.zspr", "author": "Mike Trethewey", "name": "Purple Chest"}, {"file": "pyro.1.zspr", "author": "malmo", "name": "Pyro"}, {"file": "rainbowlink.1.zspr", "author": "fatmanspanda", "name": "Rainbow Link"}, {"file": "rat.1.zspr", "author": "atth3h3art0fwinter", "name": "Rat"}, {"file": "red-mage.1.zspr", "author": "TheRedMage", "name": "Red Mage"}, {"file": "remeer.1.zspr", "author": "Herowho", "name": "Remeer"}, {"file": "rick.1.zspr", "author": "Eric the Terrible/Devan 2002", "name": "Rick (Redacted)"}, {"file": "robotlink.1.zspr", "author": "fatmanspanda", "name": "Robo-Link 9000"}, {"file": "rocko.1.zspr", "author": "toucansham", "name": "Rocko"}, {"file": "rottytops.1.zspr", "author": "PlaguedOne", "name": "Rottytops"}, {"file": "rover.1.zspr", "author": "NO Body The Dragon", "name": "Rover"}, {"file": "roykoopa.1.zspr", "author": "Achy", "name": "Roy Koopa"}, {"file": "rumia.1.zspr", "author": "Achy", "name": "Rumia"}, {"file": "rydia.1.zspr", "author": "Sho", "name": "Rydia"}, {"file": "ryu.1.zspr", "author": "PlaguedOne", "name": "Ryu"}, {"file": "snes-controller.1.zspr", "author": "Cbass601", "name": "SNES Controller"}, {"file": "sailormoon.1.zspr", "author": "Jenichi", "name": "Sailor Moon"}, {"file": "saitama.1.zspr", "author": "Dabeanjelly/Ath3h3art0fwinter", "name": "Saitama"}, {"file": "samus.2.zspr", "author": "Fish_waffle64", "name": "Samus"}, {"file": "samus_classic.1.zspr", "author": "Fish_waffle64", "name": "Samus (Classic)"}, {"file": "samus-sm.1.zspr", "author": "Ben G", "name": "Samus (Super Metroid)"}, {"file": "santalink.2.zspr", "author": "HOHOHO", "name": "Santa Link"}, {"file": "scholar.1.zspr", "author": "Damon", "name": "Scholar"}, {"file": "selan.1.zspr", "author": "atth3h3art0fwinter", "name": "Selan"}, {"file": "sevens1ns.1.zspr", "author": "Hroun", "name": "SevenS1ns"}, {"file": "shadow.1.zspr", "author": "CGG Zayik", "name": "Shadow"}, {"file": "shadowsaku.2.zspr", "author": "iBazly", "name": "Shadow Sakura"}, {"file": "shantae.1.zspr", "author": "skovacs1", "name": "Shantae"}, {"file": "shuppet.1.zspr", "author": "fatmanspanda", "name": "Shuppet"}, {"file": "shy-gal.1.zspr", "author": "FedoraFriday", "name": "Shy Gal"}, {"file": "shy-guy.1.zspr", "author": "skovacs1", "name": "Shy Guy"}, {"file": "sighn_waive.1.zspr", "author": "GenoCL", "name": "SighnWaive"}, {"file": "slowpoke.1.zspr", "author": "Joey Rat", "name": "Slowpoke"}, {"file": "sodacan.1.zspr", "author": "Zarby89", "name": "Soda Can"}, {"file": "solaire.1.zspr", "author": "Knilip", "name": "Solaire of Astora"}, {"file": "sonic.1.zspr", "author": "Osaka", "name": "Sonic the Hedgehog"}, {"file": "sora.1.zspr", "author": "roxas232", "name": "Sora"}, {"file": "sora_kh1.1.zspr", "author": "ScatlinkSean", "name": "Sora (KH1)"}, {"file": "spongebob.1.zspr", "author": "JJ0033LL", "name": "SpongeBob SquarePants"}, {"file": "squall.1.zspr", "author": "Maessan", "name": "Squall"}, {"file": "squirrel.1.zspr", "author": "Fish_waffle64", "name": "Squirrel"}, {"file": "squirtle.1.zspr", "author": "Numberplay", "name": "Squirtle"}, {"file": "stalfos.1.zspr", "author": "Artheau", "name": "Stalfos"}, {"file": "stan.1.zspr", "author": "Kan", "name": "Stan"}, {"file": "staticlink.1.zspr", "author": "fatmanspanda", "name": "Static Link"}, {"file": "steamedhams.1.zspr", "author": "AFewGoodTaters", "name": "Steamed Ham"}, {"file": "stick_man.1.zspr", "author": "skovacs1", "name": "Stick Man"}, {"file": "superbomb.1.zspr", "author": "Ninjakauz", "name": "Super Bomb"}, {"file": "superbunny.2.zspr", "author": "TheOkayGuy", "name": "Super Bunny"}, {"file": "supermeatboy.1.zspr", "author": "Achy", "name": "Super Meat Boy"}, {"file": "susie.1.zspr", "author": "ZandraVandra", "name": "Susie"}, {"file": "swatchy.1.zspr", "author": "Mike Trethewey", "name": "Swatchy"}, {"file": "tasbot.1.zspr", "author": "GenoCL", "name": "TASBot"}, {"file": "tgh.1.zspr", "author": "Drew Wise, pizza_for_free", "name": "TGH"}, {"file": "tmnt.1.zspr", "author": "SirCzah", "name": "TMNT"}, {"file": "twilightprincesszelda.2.zspr", "author": "Fish_waffle64", "name": "TP Zelda"}, {"file": "mario_tanooki.1.zspr", "author": "Nocturnesthesia", "name": "Tanooki Mario"}, {"file": "teatime.1.zspr", "author": "SirCzah", "name": "Tea Time"}, {"file": "terra.1.zspr", "author": "All-in-one Mighty", "name": "Terra (Esper)"}, {"file": "tetra.1.zspr", "author": "Ferelheart", "name": "Tetra Sheet"}, {"file": "pug.1.zspr", "author": "Achy", "name": "The Pug"}, {"file": "thief.1.zspr", "author": "Devan2002", "name": "Thief"}, {"file": "thomcrow.1.zspr", "author": "Thom", "name": "Thomcrow"}, {"file": "tile.2.zspr", "author": "fatmanspanda", "name": "Tile"}, {"file": "tingle.1.zspr", "author": "Xenobond", "name": "Tingle"}, {"file": "toad.2.zspr", "author": "Zarby89", "name": "Toad"}, {"file": "toadette.2.zspr", "author": "Devan2002", "name": "Toadette"}, {"file": "totem-links.1.zspr", "author": "Yotohan", "name": "TotemLinks"}, {"file": "trogdor.1.zspr", "author": "MikeTrethewey/Spanda", "name": "Trogdor the Burninator"}, {"file": "linktuniccolor.1.zspr", "author": "Damon", "name": "Tunic Color Link"}, {"file": "two_faced.1.zspr", "author": "Devan2002", "name": "TwoFaced"}, {"file": "ty.1.zspr", "author": "Fish_waffle64", "name": "Ty the Tasmanian Tiger"}, {"file": "ultros.1.zspr", "author": "PlaguedOne", "name": "Ultros"}, {"file": "corona.1.zspr", "author": "Unknown", "name": "Untitled"}, {"file": "valeera.1.zspr", "author": "Glan", "name": "Valeera"}, {"file": "vanillalink.1.zspr", "author": "Jenichi", "name": "VanillaLink"}, {"file": "vaporeon.1.zspr", "author": "Aquana", "name": "Vaporeon"}, {"file": "vegeta.1.zspr", "author": "Merciter", "name": "Vegeta"}, {"file": "vera.1.zspr", "author": "aitchFactor", "name": "Vera"}, {"file": "vitreous.1.zspr", "author": "Glan", "name": "Vitreous"}, {"file": "vivi.1.zspr", "author": "RyuTech", "name": "Vivi"}, {"file": "vivian.1.zspr", "author": "SirCzah", "name": "Vivian"}, {"file": "wario.1.zspr", "author": "Deagans", "name": "Wario"}, {"file": "will.1.zspr", "author": "Xenobond", "name": "Will"}, {"file": "wizzrobe.2.zspr", "author": "iBazly", "name": "Wizzrobe"}, {"file": "wolf_link.1.zspr", "author": "Fish/Beef-Chan", "name": "Wolf Link (Festive)"}, {"file": "wolf_link_tp.1.zspr", "author": "Gfish59", "name": "Wolf Link (TP)"}, {"file": "yoshi.1.zspr", "author": "Yotohan", "name": "Yoshi"}, {"file": "yunica.1.zspr", "author": "Fish_waffle64", "name": "Yunica Tovah"}, {"file": "zandra.1.zspr", "author": "ZandraVandra", "name": "Zandra"}, {"file": "zebraunicorn.1.zspr", "author": "Brass Man", "name": "Zebra Unicorn"}, {"file": "zeck.1.zspr", "author": "aitchFactor", "name": "Zeckemyro"}, {"file": "zelda.1.zspr", "author": "Myriachan", "name": "Zelda"}, {"file": "zerosuitsamus.2.zspr", "author": "Fish_waffle64", "name": "Zero Suit Samus"}, {"file": "zora.2.zspr", "author": "Zarby, InTheBeef", "name": "Zora"}, {"file": "boco.1.zspr", "author": "", "name": "boco"}, {"file": "hollow-knight.1.zspr", "author": "Chew_Terr", "name": "hollow_test"}, {"file": "ibazly.1.zspr", "author": "Achy", "name": "iBazly"}, {"file": "missingno.1.zspr", "author": "", "name": "missingno"}]} \ No newline at end of file From 6450e72deb0067a43d44dc1c3050fe5b3a105e82 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 6 Dec 2020 00:16:22 -0500 Subject: [PATCH 07/30] Add options to /player-settings, fix incorrect names, note that the /weighted-settings page is advanced --- WebHostLib/static/static/playerSettings.json | 16 ++++++++++++++-- WebHostLib/templates/playerSettings.html | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/WebHostLib/static/static/playerSettings.json b/WebHostLib/static/static/playerSettings.json index 4d9d5c2d..c2858cb0 100644 --- a/WebHostLib/static/static/playerSettings.json +++ b/WebHostLib/static/static/playerSettings.json @@ -37,9 +37,17 @@ "name": "Master Sword Pedestal", "value": "pedestal" }, + { + "name": "Master Sword Pedestal + Ganon", + "value": "ganon_pedestal" + }, { "name": "Triforce Hunt", "value": "triforce_hunt" + }, + { + "name": "Triforce Hunt + Ganon", + "value": "ganon_triforce_hunt" } ] }, @@ -313,6 +321,10 @@ "name": "Big Keys Only", "value": "b" }, + { + "name": "Small and Big Keys", + "value": "sb" + }, { "name": "Full Keysanity", "value": "mscb" @@ -334,11 +346,11 @@ "value": "none" }, { - "name": "Dungeon Entrances", + "name": "Simple Dungeon Entrance Shuffle", "value": "dungeonssimple" }, { - "name": "Dungeon Interiors", + "name": "Full Dungeon Entrance Shuffle", "value": "dungeonsfull" }, { diff --git a/WebHostLib/templates/playerSettings.html b/WebHostLib/templates/playerSettings.html index 6eb4c8d1..8f3e584a 100644 --- a/WebHostLib/templates/playerSettings.html +++ b/WebHostLib/templates/playerSettings.html @@ -14,7 +14,7 @@

Start Game

Choose the options you would like to play with! You may generate a single-player game from this page, or download a settings file you can use to participate in a MultiWorld. If you would like to make - your settings extra random, check out the weighted settings + your settings extra random, check out the advanced weighted settings page. There, you will find examples of all available sprites as well.

A list of all games you have generated can be found here.

From e98a8cae9ae8ed9a08f8af655e0cc8c2dfb44749 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 6 Dec 2020 14:04:52 +0100 Subject: [PATCH 08/30] add user-specific api endpoints requires session cookie --- WebHostLib/api/__init__.py | 5 +++-- WebHostLib/api/user.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 WebHostLib/api/user.py diff --git a/WebHostLib/api/__init__.py b/WebHostLib/api/__init__.py index abe4aeb2..76878e49 100644 --- a/WebHostLib/api/__init__.py +++ b/WebHostLib/api/__init__.py @@ -7,7 +7,8 @@ from ..models import Room api_endpoints = Blueprint('api', __name__, url_prefix="/api") -from . import generate +from . import generate, user # trigger registration + # unsorted/misc endpoints @@ -20,4 +21,4 @@ def room_info(room: UUID): "players": room.seed.multidata["names"], "last_port": room.last_port, "last_activity": room.last_activity, - "timeout": room.timeout} \ No newline at end of file + "timeout": room.timeout} diff --git a/WebHostLib/api/user.py b/WebHostLib/api/user.py new file mode 100644 index 00000000..ec129394 --- /dev/null +++ b/WebHostLib/api/user.py @@ -0,0 +1,33 @@ +from flask import session, jsonify + +from WebHostLib.models import * +from . import api_endpoints + + +@api_endpoints.route('/get_rooms') +def get_rooms(): + response = [] + for room in select(room for room in Room if room.owner == session["_id"]): + response.append({ + "room_id": room.id, + "seed_id": room.seed.id, + "creation_time": room.creation_time, + "last_activity": room.last_activity, + "last_port": room.last_port, + "timeout": room.timeout, + "tracker": room.tracker, + "players": room.seed.multidata["names"] if room.seed.multidata else [["Singleplayer"]], + }) + return jsonify(response) + + +@api_endpoints.route('/get_seeds') +def get_seeds(): + response = [] + for seed in select(seed for seed in Seed if seed.owner == session["_id"]): + response.append({ + "seed_id": seed.id, + "creation_time": seed.creation_time, + "players": seed.multidata.names if seed.multidata else [["Singleplayer"]], + }) + return jsonify(response) \ No newline at end of file From a5d00e17c9ffdd0634be5ed27f313e1f94ecd674 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 6 Dec 2020 14:05:47 +0100 Subject: [PATCH 09/30] fix attribute access in user api --- WebHostLib/api/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebHostLib/api/user.py b/WebHostLib/api/user.py index ec129394..43a7bdcf 100644 --- a/WebHostLib/api/user.py +++ b/WebHostLib/api/user.py @@ -28,6 +28,6 @@ def get_seeds(): response.append({ "seed_id": seed.id, "creation_time": seed.creation_time, - "players": seed.multidata.names if seed.multidata else [["Singleplayer"]], + "players": seed.multidata["names"] if seed.multidata else [["Singleplayer"]], }) return jsonify(response) \ No newline at end of file From 93239cf763e3381fdd98fa9e03bbbf4050883045 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 6 Dec 2020 14:36:14 +0100 Subject: [PATCH 10/30] update icon --- icon.ico | Bin 8293 -> 219326 bytes setup.py | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/icon.ico b/icon.ico index 797410abee15d5261fbf51479b9cccee9a4e1cc2..a142b56b143dff85a9f1f04bba0b9435aa1461c0 100644 GIT binary patch literal 219326 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

E<&D4bXd*g3 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

iwK=#={0f9n62~zed$pd+KB#s=N#O#yP z0$v;uQ$nC1+$2xPDPf3F`T;P(vqwS#GLVxXjN}|r;!-PtGh-N}PQbzi{KwD!DeZT6 zRPIkB0-ja?sFoYxE*SxL)c_zOW?K=bTTQLtn>SFigN-3GMkok0JcuxFQx

G-P6$0AP^aX-PI&`fAwwz(U(5M=O97nb|6A>Di_z_d z`RN`i{rfOzyi#rnhh%%XAjVQ_fF&G&4E9<~C_9A_NxCHFfJ_k)B;O?uN&|8lkR8Jr z&A zGqZcs_iuM~?b?V=GXO@1azq{GHp+V<_fI_hDE;Zb`Xlt~XZ4g*^AVcaH)SnqM0pybwHpnz` z2v}%U-n z-?NRN%?}=3Xc?!X0Kfg^ucx=)d)r;Reih5b3Jdl6OKD!s?I(6*C4D8nCoKP<75uyk ztW#ER5n!(tdqwseEBT#N{P#xb->%blcZOZ_NkagTol3llLMmhlACp%jfShCqPy~o{ z5m@X~bb|*;o|8O8_J$TyK4EBbQ*c4^`Uwk?niAd#pTsLmUyKFo|1mQ2ttgQZ z1$CFG(uK!RTJio(=~ER7z%+yiU}6x|Gg1)83WSpz*C_nzt7Z&%YC;2~MnHuW)I5RA z8J_+4n#Sya!Vl08K}3XSZPrA9*8)O;5_xz;j+|VAi@GncIAa|a*yIfc9w0@&oEQNq zVc1Gc=tqkG1cmxT z7;6Cdiu6~f*%$&ar~GZ)UBy2=xW&0sVhj<8QJymcjsWk0t|N3F@LtNHg6AyHJG&NX zvbpR+1!QxRx&aR47+|OIRWS^pDVSEPTvR&2gMjG49&j1dEt$!8NNE5^f)5THr6zd@ z9$)^_pV0pP!#9(QIW%jI{MQow<_dz;n?SoEoE8hb*^Q_t^G@8f*<(%-dx!}b-+`Hw~ zV)is}4~L{_d;kC-07*naR0i{c?3H*KeChzM~*-uENF%Q z@yq`MJ$CNVTVeg*Nx45Q1@NwpyKVqfWWZgUfo%X*@S~22*1f~+QRfGnH{dWO9RWAl z5FUHKYmGZB` z-e)?|o6j%+pdT`hjx(-Yi@0(PI6P(?9x*msM&C2~K}%w?{;oLKc=#cQ;DPtASrHH* zNRJXY2b@1gIKS`k$tOLwJ#c=X@#x1qE}nPjLLFE9;A?fx7?>QMw7VclSyrx6{z`Zy zOPv5&*jDtl*Nw+P%^hYf^b(W_zU?D^?Nh&vr#|`YKtwl_i#7-TwBjG9Z31&__noo8 zTl56vHqXR!b)03{@$Ev7531aM`r}XIPrv@(4&VI2-*-fkrypqS=xK5IV1!;v?aPe7 z@^?|-4#5ZVEJc0{-giXkyhkVm;tK8`QvfAfsPg{Jn>U4D$MdHOzc$LJaDQt6=qIZG z@1CKPDZS12n?Ii*3KGL?J_b+t0g{?GW(RCCm~}&OA&ENz(BBSrA|qKISR)EK(|<8v$=*p{_G#&cb@**S0tRq+#PB}Dd%~OVBy6^f z;3K>T_V)-+KIU=$9Ps$ZfX5&0uv*?3SmQ*9piHARd6!%5oZN0HFeK@ML{VqW>H%0N zzzKmUGYKIuGp7MD^?3M^Pvdi+`Q7ZCJB#wS=XMR-^IY7o&ik)7hPgDLImrLEHiJ_X z_+8&zDh|+{lzR&i)a8M1Meg12e&MUQeEkYN|Ju*tLDKj~IX+6fW3RD)=Nx>7WCS=# z6YhMV688teC1APK)MCvpFhyUC0CgY=^lu)2QTR2T#9V?g5eDJweQBoiR00{2PVD9V5aKLKmK2WG*jw>L0qID7^TVI+2XvLJw03b+#b~OfA zx}XInWG2d)xN|Ff!?%- zE$M}R3;`IC(3t;LD%^;F1Wd?$Cn5bQIk<)I@5`7&5$sK_4FZ(V0Q1N>uvSA>t~hf> zcEZ$mEd4wZdFgb>QoYergr|r=QY6W-c>O~fFlgB(uwyE`00Maeq8I?m|C6Q^af1ut zJpR{j{LlS`)%jZu`Q0LMWp#zzib0fSac=)1BbDtMEtGv41lVo@^`j*O z?TP`G4d6qp{B7I`xv!0ZngdWb392XR)JZ$Px3~OvzxA*4H^2LLZqsiOh~QbW0K6vz z=ZG?ZZRW1?=(>)~v+ooUv^oOb$$J($2+AD_weqhrg6bkZh7y*vy$Z&!tNGnGMSnY^ zoH9-JJzK{aSqQoywQd7KyE<+sSpj2=E_mzuS1JF>X>GNd$m?9Kt+5r#M(FeiPVfRuq)8ww;L zg3OG)r6|ReM7i$o5&8%OC!bjaVAC^l9<7s{?b_@j)LT*DH8aZVAu{>_I9?~b{&vFt z9^sQuW_;=?!jq3VtX3ZG0~!OhAt2!ZVf2!rPF63sUYYm!5Sh37uY8ck3gORd>XWNfCDj+V*-IV_6a@> zB1{hOU<3~MlP~_e_~lRhraPnD?=t$^ES3+Q+}~>i0GMu|hSSFCxwfk6*kEmCwYkzY z7od#^?iv$s;o%DpqaOwwua8F*AcVs3Cs1MhkDa~hv_4ZtwM4iEKIRbo?d^88AuuwcjU1>3 z01+rDQIH&B3~x#Q=Au{CyP0?Z|y? z>|1rvI#Xa*TA+i!o=EC_cqtInc?Tv@^b0RpK?d`ild!PN zAqc}?_(QIW_18K6Rqqe9F#pZY_Cr4Es72jX3>q%56heYl0VPPoE}6HK&BG^T3LH5~ z0D*il3LJ#b;k<+l9C@Opv^K;(+90D*`)apYa z_xB?NV9#@L!8Ru7F?#-M$Of>||IeidS$ombP=MK+?VQ8ok37a#+*OKkD5-was(zyd zUpLn%2fhX6zu88-{#L?^zleC}a>AyU8u?s@1XLZdKH9_Q46HnXys-XlECOMFpK$GZ zMjzYtq{czTo6Z2%+YACQM5&rb8vmCeMnLc+@qY^^FtEQ81-#ixSc284@H+dRfYp)^ zqo5Hf0tZKomwuV>%IgV_KH~7HPkKD_Nnmev<`VDIDaPyqvEeU z0fPrJ8tWf>aM#y$)^WTZ@cP>sufLV?i(mHW z2T_(r);sBgPH7AVv71q_-7*#nQL>vYW4mP>uM;lz4mmS|CwK=8gT(uj*1`5P#vN1C zkT?O3w0F3dP=K`V1;Ca?Fbz2zZy3vkpbnWCi=gMHr=AJudoc{krDX|Y3Kw?oIZs^55JeRG+I~o7_*^Xr40mmP_}0U-+%`gP*_P-aouX zoqGFTo69U0i{klr!61Gi4t8No3-ne`zzD*X;y2HKoRsRs=I-(bFbYm6d`39wL5MYG^jucHtK)O5MY)tt7G8@)D;qa5>9|iL*W8=>fy)( zS+Xm{DKKqS)Zn;0kHODilFRqrqIitTt`Pwd?9~!y8=OKVoHUm@KwI^@n zpc?+0V^^AIFvkwIn|mga^4`r^#cEGc;E>7zAC8H-LlbJke_E}PF9hGOx2yjk*kDNgNrRIRL?(O=#lWU8S)f19& z{YJ+3e%#~bHweG^8HZ0i!Pr~*3GwhOhQP_NKz$5?^8t%)$)$qlj}r6$#JEMd-{N%TKW7BgWWYKb2snf6pWoYe-+1;b{JoccN=KXZ*eJ*c zMFl)u1{SWXlzu32eya>>%HNQsLhz$z=eXGxe}*%+Bj!FM9%b}bBJvd=A2QM*BX1bo zGjh*mW!3H3!ov;}fcQR_P#tObjvV066a0CH?h_u|19YAd9`)!hIx!e@eclnn;Dj-t zSp=+zi5UXg0(ep;Ik^%Bkb-Q=-y#n`Y~kSW@ZLlC+B08H=U3-;&1h{D?1KJlnXL`} zTH)_f{tu+w-wzG|Fh9W-3p8eMZ2+|86ziB^O&+pMVV5^>CPRRTXm7R0{m|3YgB%t9 zS#MI#z`IuyzWu!o4h}Om8}Y#NF0hABzU>3y;st>ZkJk*Yh=4IMu3k@YP8E3KqLdjx z>>1>!yaq63^E2QBBLsOfMTT35CBjTdd75$HJs|`tA&FrCwi||1F0I7#Al>&M28eAg zUbFGc$Z<++B;9aw25uZMe)vLTsH`cG|)t}*oj+6}=tET`1~|0pp3=f+v&-jw)h2!MqEYP6t!HpBm{*+2vU z%Wgqm|ID-LC$Ig&Z->5+{1zdU%6(lBZjhmag%41&g+_$%WIEq%&RF$j9vJIOJ@O?& zyqXcOX5>R52;~T{DSK6sB z+&*FPq=!2XxW|Fz;~m`U4z1ZLL_j1x2_$5~AT0ux^4M6-kprdb|8N+xmzBbV{caDR zd-5~!q5TUrDs(dw%b@>=DdN}4d+YgssO0{>7yvhc1Px*_g3qo>OYM8@f;_? z{=CN{5Bcf5iMX6F1SZHyF#_cJG=wvE^Qd{Qp}0AZ;AZUqId5QY{o0zf_5YEA{@Zaz zxo-`C))1&O0Rm2@2Da$m%`yWfe_Jh<{@G`KgI{^)O(_$u%D)Q|66gvscx>cTGyF?S zUbA{n`|%d)o0+e)&Dgx#gRc_ewT$6XM!cHDt8czbPG!3_WgV5mU~Zp~H!SbP=`olY zlxdtby*ry%v}SlBu*z*dX2kb0I0J4;I64;*9`#r}?tv#VmLCi7EBApy87)`9i~)u? zHCYVj_U^m2C zdssE>(mwj;`DPgbz%7OYM4>rw=JNV1W4%rI@rym4e{sOkah8&~-~#oxx4FIR43rRo z^O90`a17~Vtsi!7RQ8-0tb!{_Rv`NXf#nxV!fHuauc5_*iY5hD-U(+&oqdHZ_f~|9 z=Osg6oy2V)A|pj9jA43fy%zcqlGauiiuA^U7z8MW6lVuNjvS@oHGJ!6WCP+tW5*D=Mdn17^lg- z837I>8F0=3SVHEuP6KSi0(D)7TOtJSFIV)LPdv@fyTIhrTqO=@jGV<|BPP$ z4g@f+6Z$t2`Zp7X%L(a7pnU2G+;j2R=Z`lYl$?6^ii2bZc%vUliWJx^=!2Qz0)Ya7 zx6(b2dmht=?D_!9umvYZx&fpc5!+WHXhAsYBD%*NR!;}Gr-8-AaQntU8y+CiPNA{~ z<%;X$$iZa?%7lgQ@X+2x>@8Qjy#3Y$yV<&&3-`62ey#i;c)7oC27q2{W}#}g-ayN` zY;&&LJj~YnpF;s|Yjz2uya{$wTfR(;+2z=xI9Bp0#1@5xW96m^Uq~<6QG;|H7ZERf)~y? z#0;$0j2Id3UXhcsJbGpbQAiI|>s15R4YI48AW3CRz)=)rp>U#jydFae3L#SG>FAj8 zlb=Vt_IAc^ezwEYpO8=ltP>d;Zbs$DpUe=r`EA_sz6t7CNPxEz2P_cahdt;2EaMcp zH@~x%*&5=nGXks}u&>^;62fg(z%ID=)J3scEa{VvJ%Q^-2Z$+EEPspfkG(%YRbIbb zH^=L_e547ChPXxe5ZHLzJ zkk;FpBVg?^5bDp{PV-hJ+W$jRk?c5(G1g2T#z#MBY#Uz_D! z*KcI}PfYj{YU!_sYeX5=Z zOpO8K0JZ5>RvgF-gBl?)4pD9V*K&WRMX?AS9=-4|A8po@IG1KVZPT7JL;lT3F=M!# zuzfjU`({GCn!#4Nt1?-*28pXdkQrjj${|>v-q{6Z#(Lh=n*hK`QxaLd`6E;^G`$** zYA6uHfr^t-{-)f6(oTzjbi_z6MbN9j=0e8e>5T3fLif0b3%4kr)uqZEmHmd{KwdHh zyf$ZYQ`B$QzQ0SxP5HO!e=Wji4^#f9G5;SpxxeoQK-Dm04vNV$uh06hiLU4{A50tQ z`A&=gX5h6q2R!#rYrJ>s&VaAs}OL+Q|oooO+ z-r})9(;Xjkn?%hCm@5iW=l<^61lslgt1w!x%Z&b-6u683Q)mCQuZS+)T4+y1@nC0P<%07(;1MLIE8Y+n6xl&b;!L0}! z#W>&uq#KOwO9}leKzJ-;`HY8q2Iy|uhC|0>5^T?qTTA-mRYk>JUVn9j6R%rc(~^Eq z0OrOnsIHFZ*LnUn=B&8-y$`(8GJs3( zM*RJEkMPQCeetwyT)f~)x?Aah1=f5j$d2We^(09}S~3+;PP1{C*Gr3W1;X@SkA#JwMqS%9OYBqp$1Z zopJ1vyE&O|(*Wm+ezmnf+BI2+vmY3_f6xp7YM$-?2IaNFJoo*%_va@2wv2(4ffs(h z!FT`Z7{?n%2xBpv@)69Y*Q2cYr*s6sd(A(poA#K zR(ZJQ|Mh3|Y9~hL93LfBfB%&oGmU~;1fVqrTJOuAcNq!xXzv?v8?p~TiDz=gH@kV9 zf#KbR>)+WR-N;I;Q-gljj)bW#K%U?ql2Bki)(jr~BS%KOngB;qyCZQ)(*vuapmJZ1 z-Jp`>85EpYU|Bs4^Egxn%g``j**SZF*Q}fXRl*FEK!F(rfP@{YdLD(?sDDG2@W9bO z_3*!R*!w)tJ>|!Yp=ydIH%|9~J1}-30WAlh&IFjN2H5thsXhM(PVOHR1E3bndQ+Xt z=dIswANBF>_!uJNx$hm}+uuI|6TvGHFTp&0t$UwDIWmg}d+~ykihFBm=X>#jbi#Z8 zYEo}p2zXtm-Z=w7$#k65gI2G+^Mu~Bmh=UNo=dDebFCbk3AXo03nLKViO>Z}!z<)M zH4277l&~pzA|>^a9mD#0%Wr#EZHy|VLY9KI>4oMZ6VC6;ym^O7k)b)qy)ODQc`iGF zwD&zYWc=fgB97L;XMf#e(cRG{FlPkR#b(^h`>iK&g8cKKcmWTEwlM$$Mt ztMyJn)n1Ym!Bn9FQc4M0cJP=bkT!4nJv;ZU?v77lJih$ z;0zH;ujgH?mrD6B2yO}F4J2*Z{;oU$D^bi_M!b}8_-;b?l*iteJ;KAjnl}4xMZUbV zW6lVeLju~=-}ZIQ`>Bn9e=z{+!Pc>5Dwu6q&-&56-x>$)1NZ>KZX+}B{pXMI+>efs zRG4zMDtoMOzIx78v>`EYyvYLPLpB~3amgZ58R!UZ zNyu9k?;WCC-HMRc#swHpfE6|**eqy*pChrsZQpZKPs2(G+l*2z z4SB3pLi%9>Nw~lop<#Ng{td~DSbjQV`MDrrifZofg7R-iyB>Fi1!@BDTsr#1`+t!5 zKKI=Kz;3U;&gZQwg0-*1%;#I9-~)}68UOIzL%i_P8r#7FT(UNXVHARXD=_%}9^vp< z$bOE*OYarRj**3x5A&2IeQ%-UKUpHImGb1+%mUA^x1_&T)ak{PQ}(L`AuJsF?dbgzxRmY7ei704z}LSV(A{d9QFR*n zYzm@Xr*mtw%|ov}O=^zC%uN4+0+cbQ{A=ah8VL3G<_v*d4_AHfj_kxl;t?OeJmB#A z8}yf>6xdn-%cndxuQAYTyW95c%}A}$0SDpViMl8mLS>}NAV`o8JBU(NYnu~50dV_H zIW;_)QPLV92HBGb!UYG8Kw2|6GKP0$T8XJTKN=^mHH{%iqGkWoE1wg-<|D@XrxE?@8T-$6@K1{~bQhKAX$P*6s?&HXbIkt-PWc1(*#J=Qe@^k+Mp{?* zvgfw(&s-0HIh5eGjDcZb{LQzog!guOH9{nYY_a45l{_9 z0qUF7$|~)6+-$VQ#2xeg>yeH!4*zM3lsJi?a{sIvHz70{$l(6+a9f9 z-pczfXRhE}*^uSJoXHOmLO~#-9^%cDM z@&>^J&wR4OjYGknQ_k?JC<%F$n@(4)W9s7y{x+MWjB~6bU;OZE>69G>Vh(m^j`It#eU8@&B znib%H{S{$IvVoW}67zT|7Q;WkuW6BLKunqfX-FX^O!o#gOhyJUA?qzRG(>Tce{PN8y#!7`-ZIEBSUv1)6vXOm#0ysAzsd-3##>3k z?gs&REfoPp9z^hJgI%n10xe1S02}?Aas<-a*!$Jz?I#(9CA72c-}-HtVK8Y4O7)j#X5VC7=ZTmAC&o$tdP2IMvH#T$-6wrXb-s;J zuakQ1)p9#0AC+q4Lbt5>JtFlo?%cSOg$OLRLjN zMph+7aIp~2d>B}e0Vn6)1u-%qX4!pSNhnip4Si~z#zdB-srD73Q&~=-sOGO8*jT2&u!MN!GC9b#rm8h{Zb|Sfhjc6pnHJihhs5*EO7N9}Iu6vK zeAewdVa^|GH^704-^r?)7yuHGBa3n2ASYv}gYFwts(Ohr;DXc@;DIIOhyXH7D+9EU z@P=>#zaSoorpSR~qyxs`e;u&;T*lrPgBU+| zZq)0qbtvb0PPFT=y*dCOO$UGAWc{dq6pWUR6P3eB&b-v7tT8*%_blSrza*x2oj_36`spk8tiz_B@_Unu@j&JnB`cR zMX1aOXAMg@0?zF@Jao}vy%o=Yp&v?7Awf_<9UKXN02y#ej07nSDoWfr1q66B_$|G! zaFEoCDKY#kH3qzs`4@CRK48SZ;7P9+g|{HJN@P=OI}A$J0^#y|8PEN&$M65ng7;Rp z6@=TR{OfLXweq)zy;rvao%0OxuecFV&+S<^-`41#+mPD~ja~b|*#`sL%Mn-q{s_k} z_fjCI8sUNiTNsWZo<3)(qz5(jb=M_F$dR=|CWD6z&XV(=dSUk$v@0_5AmIiizy+-j zprwG*nkVNtYE&^i*Z~x1%p1-OctSW&poN4F5T)HNb%gGsM>^Kb1C!$*Mgs-;f8C#; zbSJE4nh0WKY~%o(<#$VK;%e%OR5G+Ukq{a=K`JG(35)KT17q{Eh;)^)_gewsVfR7q zY-@nF>u*;_O4CVmPH1b0K9Gj~JvRV&q;Bt0{%x#(i7B+&*8M)s2)LOiaAL`%#Q5f4 zy^H5xJi>D6km7jWDGS+-SrpZ>b5giRbLf*Q*Uctlz0TqVtP^6CY=E2z!8>qPcwK|| zIqPKjQP>WSaxoT&1bJ9=;*Ap-5s#3PDBs`-VDat&^SVXrrYs6P*zv4(e}&31ap4IB zFJ*NUTNF62+AJ9?}2~1#?$5#lsvl=R*908Au)+23 z9U~oUMZFWnw;&494(U=>J`ZmEWy(qc?5-!MDLUAi627462;+QK~93z6a zQ=OP_qX-%&2HAI<%6$fS&6+i!EPI3RNsVie)Chngj6FbB5zt}e0_g8ieK#4x{#QN& z_exftsR05-91-Q1lOjoWIJ;ga6W#V9!GVbJv4;XuV%#`j3^8M~l{h|mDUrMA9QOAe4v#WY9-H%UM=&B^ z?E#xmJ16=1Ms{<0dO0zO98zK&9%hi2-^iUn?#`(pp~|#w(#xu($-5INf?`ZKcug^k zTAs9znub(30#-;!Qt*sN5H&vONPpK=$vLv*mAQ`+i!=kkK4a)W&XNt`Ix#SuW)WC+ z1VfCLvFjiz6u=As(yWOQ39w_o`A)(QJEE_DDX{ijXobICA9Gu)oq4@xYXo2qV|mcJ zD_C0&)L6k8BPx)A;wH@e^hb8o`@tO4Kj-bYjzY^DI*TE2OM?f-)$bhP%6~lqAf!9V z?H@hgvF^Qk?h8V==#YCxI%4?FAzbu;WAyK*LbwB@kWaEEJz)x|bCPg@3k2G-r2b_& zCsXEQ{_V`w&A341NIdZbg$AiawDTZg160>GVd|F)R%NepYVrwnT4a9YTFkI;=as-{ zX0)BwEbDjXyiN8=-((;iWE?#=AV14keb!3|;nv4#C_vkadWDmSpCNr#49E-oBy?SFP1irnc!=`84IE+{=9YP3Ls0W=Z%Ngp)+hVth0W~VLTsSNjgd2xR3joP6 z94Ui7i*oi^Qf?Lj@CwIemOB1f*}AKauvp4@9Id4@AY6qssAbN~7)%XS@TGJIG|xaw z7FU(bd?)8*Us3zL2x;(w07$AMu;}FdA&#U);VKv;AVz{zSA@Kr>3l61(MVNvBpBQfDjfdV)Lx@ z(e(dTP^q*jfEo`;(gkzR*#Am*JLJID+^7+$T0gZ;Xl(>oLn`C^)QF#%JP(v?-!lWC zQvS68u*(RTQ~s^uuQ!5Sv6uQcC#O?Cr_A{K=dRK}{_r}uBS1aY;3bWXF?!K^tAH*z z9IrD{5?DNR4*4izxo}vm90*d!f1R>;$`0s)D5jjaFl1BC#n6zmQ6;+(NZn%EoPnV2 zehs%zN&eq6v=;&Evq0zj3&O(>ixeEK8ID*=`g$r%epU}TLx_Lg0bS>iv%D@bOHDz{ zNsI@tx%J*jUcPgJLewU%dFeiA`kzM$0SIzn+oYQ?|A#?S8Z||LNC}oe=`v`eAPL2ZmRcjAHdyx{Ucfn=tPED?2Dj-# zh8q7Wg#z0BVAozyD}0lG+Y9DC)1raC`K`JAV0OYeG2Z|7A#S{|M(P!Y*X5A41_%MA zqn_V)z#)}-{JCf3UXL{}^09o*%5A$qKqnBtnc8ewH9%S1c`fm9YxgVl^dWJ1tpNf+ z$bK{;2R6&Bie8KWDye!!0o(Ui1X?)ob~GqRxl3Y1NJT$R1m4KGI+G43$OshT2Z>>j zk2CzfAP$_>0AgkLw@QC*b?Et7H&Qd5&Hl1_2^bjLpGEK%IQR8XG81kxYPoOa+#vjn zlaA>gM8?}Lfafqp`&vUEcz`%R_c{bn3*cOwZ!Vv@7WQ3SfH`45&EmJg0O-}%*Zg{S_!$V&+yupGaVRRspgYJ~Nf_ zy*4?+U^C@FDp{6$8?~qpc&zWuEU1Ec^_E(fSlIC~i7~LW;NWMV-tQj(5ibxBn_9-v4D)u95`_Q^nQ zn8b@9A&IE$=?uB^UhPdQ(QNTfkbM5dUqn3mh~p<8D+b7%@~=nhleC1uc7s^WJnFKc zb(OG5&T#cxAK5We17r>foP%ELJ)r&n93QA91lqW%cE|(s<-fg7SATGfcq74g4&6gu zD(&eJI5W7H_2rj@e4K?iOOW!skzqtuhU@_jsvs31^jV>DHW-~t_e*K5OQTU>#sk~$ zL-v6x_10D>Egbwl2|;h8e^U#b&HSuq#Gx1m0GIF|S^a-S2sz6hXULo78#4ngK#Y{E zMu(yo2-;4(G$WeI@#O#Z-{ub0^9~2Nr5F|YD1!%p^&GaZMsUwK_l=I-m?3ahi@KF_ zGXh$aZ@^gp-yXYKe$UGHgJ1;QO9P2Zu?ZX(y?5jL}d?0ERxpt-N;HQ=(i1vSTNAl@}da`J6s0!bCbl(k+#65}Q40dpR&&m=E+pz~w%q2RUSVO3AX z!U963RBy^Lpkb2`2rfx`w&GVmA^t+6JwmwMxpz6_%6Yr&U##?`Wg%19C z0}8tnQ=CAF)x#U1a5Ty}>1P=uDgb~Na_O9^&rZxCkugdb3l}le_`t-F0rVJq1d56i zs$ga@1y)A`?B zusf$-#EyGCGwcj4y4f1}#`W396y-}e+4{RS0P68T)Bw3B2Ea_(-!7}awd8j}|8x2O zZQ7rWxf{*^FhtIO@n0^xOYd))8I)tjb`34y!;*XMMA2F2IRa}z98q3F%%d0UAS`(g z?61T)Sg)mZuOljF76-<#73Ib->zztL940Bo!`jo^sZ=<#oFNtZJOmx+yb}^{Mj_;o z?gIdnY{RAa2OJPI?&yQ0_i-Mp7g|VyVJv^B;vY8_Q`kZ0%BmIS%*y=N(#AkhWVuq{ z77i#LjsAv}`vr~PE5simW61r`_l!p+X@3NA45x@dW?-?D>$KN~?hpajZ)808!-4+o zzh30!qFCZJ5>T%pZeG`htUZ@&D8I2Tq%eH@^8k-FQK2fP{qy)WGGWG5Cc;?z70QX6B@x;TDAMf=3&{tG;H83oj0qS(Hu3E~H(SR)b=%n;-mOD{%4$KiL#f4hw za}siZ1GpDsr$DAzjVLv^Kzhwt&TF`oaqyj<&VOUU{z5ru`wOjHbMt>&pBX2O0OR(U zfp1EGj`Ul~0oRZFjRM>&1fVql&T8@3@aY`f*AjqEi~Ua~nHlu$?_R-AUOYfbjKs{2 z94!|r=t`&q0I4viO?oz22tdK1>jc(Io2+ST+D(t8I-Xhe-ji|#0M6n$q#}f(kr*s- z{fr5LrB;;IiZo~G3P=v{&LIRznaSp{>tX9=8764rwu&(lJg~RY+Wbir_Oc_KKj$zE zjN{FS)J-gZ_4*msDp;ZaokSe}M$9XoG&sl!s{VN&IzZl)uzSQO5C-vgzjDU6>*&5r$6gED9 zJ#R3r3($57t5JZ~WB5pnGu8lU!+-6Z*84*Jnc6XE9fDm5K&=os56o};=lALOtu5Tj zA+0mwaYEiCXbVlvxDm}v3&P@}M_Om(f#EudtMN8Vu^vsABaaetOUG#6&OrF)^N$>v2@&H?~tCHeHIgak#fod?{$LwMLB9p@rr0MzT( z3ZyD?R%)9QwBCmUX_$@mj+!w)3HD-Y=-agx)n_#g2Hm7;^wR?fvJtS>IVpEee;dXR zGIT?a5ie&PJ=fFu-(N(xS9Vsr=W~j8&NytHRU`SCfo~xJLjY>NPn-EuKY;tp2e|77 zKvm;=m*?Nc{aOpZh5eT}>G_|g_<@-l{n9Uw(%(JzzVDMLbngkvrQ^MQPyI%fhQ`&R zcI1;zeqz;|TIm9zcebKLFjHovEsqdB03XD&?dxga@IEHi_bmIi&Eai@i0uI9V?~RD3DyfJKiKVR}zA~JLW*-2| zj7={U0Xr{z0AcjYUGPc}GV-1k3-WziH$LUFh5~jO0o9!=@ZcN|p!HhoIAPl=v?T@>Lg0g1J?wVJ zZDawp4nT_v))3ZP1m6y7F+bP+V=XL7vISUL&fAVqRWly4`98=3cCTkJ`@ z@O3r=V~XJzRutkf206CZ%%R*X@{k#h9NdCrX16GH2#C!C$5@|36+U$pI-sXyh(ICm z>Hb0r&k?j}k?uL1fV_qXw0*yBTO(`O6(LJe;$FUUWBxr=p1;QIyay~L$6@Nh zCygI^6~34l=~%z(G$c_GjI3x6kr*Z+j2RO#jzXFA|K5?JC(x{ektkW;6f3k;&x!m^ zkdzRleXzsWLYVc-Y@`KK+gXYul{h0wjL>)kQY}#`7z0vy@JBBW{Ln>mk3Kx%1E5() z?f(fQJh;mUm?H$%oPc_huv8&4F77)-c!x(Vn{#`?F7&UhuDFl+l;D;RWU>F7jO^qhM8vP_-RbKwL~RHVUSEYxEPzjAnFa3KW3{^Um421bR>8pgm9A{B1D{)zim zg$m4wknck_n9POCR2u>Pn+epBKlk;Js5{jND89wa`xf%E!a(Nnn*mTG0CNVw16Kp& zt{MOp+*e!uZOpHQPH*;T4S@Q%rzw8`!n*zDU%%si`PQ*4zRXzdc?knpcRY#1GkGEh zjs0td9n$R}C1`%WSZ=PebgLOCr&9kdX(10sC}9TZCldp)2mER@7NVBM^p%xOYRL=3 zemp>7*^*AQ16E5(?du0d2!zFgq?NFxB&uT))msPwrGQR3E>KeV7=+-Y6W?kjDUsPA zK~O>O9F3)hS>Lp3i3Q%nD99;^u~N{1nxF_sPXvcTJTwFVOmI5EWuEOj#Rx#@P2dRJ z4^-N-5(7uajOSm7?)U#y7nfrpk<&H^ThlcPP*)AxRW!uH0IjEB-*we-KQczZZPoy( z=dZ20);b6+^M7s+nBDmEkn@{=^`5)*U#^0dj-3~n%gX#(4G{BEhie0p=IQ&DL*6om zg9yKJ=(-?_QdgJ4F#HiR`5qu|xNCJ?f zdgs-#8RChjEVT}b>yEJ)kfrWfYLO}P!f9|C(|0I&{0r>|5Y?bCqsI=PtNTDSA`~$j zV#0;ESQ`&yw}HpGGv=`w5^r5jc=>BU~9Y13g|Je z=Nc-!=NrP^7`IsiWLGNXoYJr3{;eZm_pVVH1@_0=-@58AfA2bTN5bA`FnN%WejyM( zG5lVD3l8x(3j^J0&ir8%uYXUG#I0lsn9`*V;@N8|pX@DJJoRoo8;(*=T#SP;_Z|lS zTSd%d8Vw>_WBEM^f9(-EtpSpbq`trHC8RYqoS|hbVMTI~Ysn(-lv(AJO6;9FjJ*%M zTvI_5>X@L(chG8sYK|G=kz-?}+Y}5cleQrerLdp{MIFR?xBETlMn}ifbptXf~ns&s9i8Bl(wE?r!!!<41Si79%9%%4>9=|h*A)NACL>QYL08q%E)zFZ+9$OG+ zmfw5f7m+{yxO0y@q}Igl^)zP$n0F9yb7f}iVO#gMff&SSK@Hm&KI|xf%~NYMomK;6 zj`2U2_Sc31?RVM1N)g(w+;V8yP`AuI@ z5A8du0;zK%n`&fGb+;ssA5%s@0oDM7>>3=#*gYgA&k>I`4|ap}l zrT>A|05J!^{BUhkJbuUaJ|5*h+cALki;=@)j=LwE5sSi z`RRA|z3v=l4X+#;^?5fe@ zIbhkLG$$(8rjMLVF15En7DIzE8Xrkhh)Pz48^aHlT4bq+F|lwDFrq9re_D`8*$!HCNg4R+;M`w$aYft<(TH4FPB?f!=KH zCf@(%%D^xG**l>>h(H#34=YiGxtDmL;(TBL@gQM1NRn!*a+n8ESmc1b&86dA>3*3o zDFy60f?p|oKDn!={B^=inYyW>BnQpkA2~nL+IRe19)NTsOVvRJ;9W^ooSL*UJ!Yub zSr}?p-n4V6l`oA3MeXIo3=RFUJTUUHmNxEXKCF+zWN%Q_N**O85newVNYa~CUZoo$ zMpfLT8&XH00CxMtw5W{+`9DX-(GLb6uVpWm!bAzz<1{&+OH4d6hU$6O5 zcYEA513*VRajn(AEB<#{Y0uL<|D7A<^@ASI|MLx(GYgYn^7TLjELUD~>2sbaLRJmB zS~yGPh0p2tt-_$d;xy*hQ$?_25%8E<``+{9 z9Lp?M7w^4z(u)r07IM5HYMb3Axh!W!KM4Q9WF%{PQN0XZr6}#$1h=FOL6rLtNxPoj{J5nVG=?U#ooNKEtk#NflQB{Jw+R z6TF)%=$aq~Lp%`TAZONk0Qz?ecUc)j$9P(q?SIZ!nc2>a5WXVga$|q915dCE@bCgicGny+>aZV98*4H8>4P9SdeWlgR!Y!WZ@K*D zaw)>xYe62c#l%IZW0LBF&I{>oZiGPCUy233SPHxU;4ov^p?J9l{{ztUL)J7xJ&0{s zGzyL>YH2zo*JI^;Q-m5*uB0=DlGZ2JV~as5_Mwm&Eza+~a2*^8dLUH;7S>#6_S)?wY-U{nsTTrXuS_5DS zf&N-3dy6q6;IxXCZFKd+W(Ca6&z$l&RL2mj zsbN7P<9iwF=VQ13wJuVa1Y}x$ax){~Lt6vnt{4Cf>1WRR-<1M*Gf%08`F!&mvqk^| zcyvCi#KILcbr!e0mTH4rMGh!4) z?$rRYTsbp}1csL|hI#hciXwqZ4+JxYtP>)j`-dCToSXxK6DOf=Cge1+u9m1=V1wEH z0RZs!rG(etO5xMbc;k6Cvpo6#E+b%WeYelMYS+&xvpb^vtJ)kp$DQCC+@%^IyXI@x zK5)XLyZ-V~eDhoHcWKB#QpLA)2>Tv+n@8e>h3~R>msx6nm{m#C5vaGLijlyHkv7_x zOV5N9%C@=!^{Oek@);xJKVYo>X$@@#@zS9Nw8Xzy*0m}Ba@@)oFe4r`;onGpeJ(IM z1=*`uX=+x|cru$73drNcl7rOvXF31873EEx{LOj}*k`FDv{FN!VgEFm{ zXg6oPyE60DjkaroW?odk1yCVaat1apC4@&@xBLyi1x=Li96DaFXA3~=lJyTo4UoHq z0PIr!bI^agDc%h7tJ8dTDt;RWheQ6>KVEhzWt=mkNNQ!mFu=2tzSTneR!Ou zV_*$LDH@Tglp=$^Yl}Yw!g3+G_?xX&#}a|ftX6NeoQ!SioP-+&SG5GzO~cN^LA>&0 z`~mga%?hZfMPq1yfUJs~9N<7>k)Fz^F*rVWLRbKCK;b8p!XlOW%jOvnO2HrPT~vh& z1bxX_(jNUn=7gE_8Knu6ncU8xMjpcoKYeMSPdwq$-fH4o)!QOfuWhaGA_H1{+ct+D z(|F)%gtp?xeF%F5w93ClNbYG3kp9MyU;T?q-S%oP9H1bJj5A|cNAMsss&o1>vpc)Em?(e%WP&704}8%d*NgNZ10Q5Ek^(@2Ah8>#c$L2Xb^;WbW^3j#PZdV! z3nLIcylueECqZK1*)xwZ>4F&HXEzLltG!w0aUlFRzccD*pAJo2CVJi1YW4SzrEkNa z&&3FTVf|@;(xwaSFs|7H44eR=mlL_L(JfveJuZglE?a0g`;CGXvw!a`_@l zt{pHB#d7xxDNnJ~`A11&Gs+3bgM0ePjDO;Y0-!C3oR<9s5sH&t?{V}RXY#U00)|XF z3=!Qx*MGpc5H0lr<3(%{7`rvDfvQ@8S6>T$`RkfhFOM&rkM(|G*fMmFf!xQU0PEj_ zs?x@THy&yI+J$32o3j`8#occ`a!H!^zvTp6;z&G}0=(q?_xpX)Ay85L?0^4ty7~Ox zms!Pd#pc1n=2?tmFR_6Q%IGL*yOwIXeD4KdX6QjENxR=&{u@UAfmaJyq-w^3O#QV6 zv=dr)z@~lg^P_P9uv`U70PopU1l{{i*WB9V5<3APYT>Z-@&NzXQ}; z#r=zJtCaX%OMy^FuAgx56SHOgIbr*^=nS#&!gdvs*nN_z0`c8ORAOI>K&{jRVjx3idr>w3_}Q z+vntHX$T@H>Ul&!x=0H%up1b+_kzRGuSe0dR7bzXHPa3-lnVUh|1J7^znjW#*LchE z@qV1g^VXPuj0m_D-P+;-#BU2=uEB-he`Gte8%=D`&N z-U#8H2)FM>FPqyS{}GlveGHkZfXw3FIGyQecr?*V@D#WA=Q|6$!vvISX$i%G)`1`a zhG%38N*=6Fz?eN0$97yq)|xl55fh=-E1*>eq{#PMv!hT*WB_2rnC*VdGgQfx5385{ zmEy6RZjp{_Tb)TApr~~=Ji7_YHEUj42kyRpE%^NJD*w^%=cgj?G2RuAkM}LE%NE#; z++cr%PXUni@jUkbr#8LteDOU81pTqb`KQ(2|KJ)R^P%X^|Kv*^pJnK=qD}-1z;t7Y zc@-n)O7b0ACe}mBE(BH-njA#C21rX6oG%J?0oZ(Uo&6}IR((gUHom{Al*o{}0wL!M zg0c0lc+u;JojLWM!vjar>+>gt4zS(<1rV6N+D#^8b%L`UP=o!e87D$6EjO zpMRCgEQ`mgKrLd%YorCi+tDu&mkB8|uC5u=qyQ<3xIVXkRMeUNzT?ADOomqtdB?6^ zzD!^uJx+?_$*g)r76D_m^9qeufh%!2`ACiY=LPK`HG|oYh-p$xiq`nXjG}ckR8mNx zHUZZosm5;wfR72IF>yLk6Ixces3r&yFy>(RFKLIkO)0sSKO1{Gk+u>-lm4X!b^@4* zABO;7rI1I5z{pRL50$dAPHyz44)nl}HM`irRwUpY3)o+^0zdg_Nx%DBiJo0IZgPBl z%lNJrg)L+ESiU-Qg9Sb77$hDz(l*1p!Mkgd7jlmDJd zk32?{ymY<_1^xB^_Dg;HE7Jg>XAJVl7Vj7-G0H*O*oVUM*945$)@Nh-rhu4@ovr|w zke?;1^RLUC>p{4s2NXeSQBe=s2g=3*8G#o5Zo)THXVL}&d+H&q=+dOCi!#QXvt`R} zP8jQmviW)wC4bsQ?qv1~hB&r44u!Z8_SA-|eTE0S z_T)l7%WwHbi*s{*lm`%*yWi`-=f`n&Trrabs5gqkPilJpzw%7^VtRZFc=vX0oesD( z&*O3O&rY}uXg^vc;6q0M*0+4U5Uz8gTOq(p6aJmiJ^=jre|(jH{>xkC%nSN+*N&4( z*s204TY_j9E!=mwub57XPd^XnI1$20JI!>R0B-nHM)U8?1Z31Ew?|5xW@tv3@8YzsJyKW?t!-j&-Mf+ z%d?vS?G_(GGyW~VPv`IP3Lu0cAkd{00EpPE3mM?PEU?!EpoaXtb6N$6+6 zgIPU2su|0ors${o*KiN73_qthb0hIpU(7=?xsANA=Iu%&%6!iTr2`F}7ckL}-qYVy z?Ef&0!|!nI-r2h9J$xW6$&3%70n#NlTXgNCkbgfG2Vg7ozYd3PMF6%Ii8a|LhSJ4t zo<;ukpMS|yQLxW4O4^oX6+)S+6VMpZajNCZvysW<-tI#RYb>@fhyc4CFp|C3DhbGq z8jSF^8>~@InH9-_2;i)BN8$6V#Jof(&d_em+1_*4_7)nen0$gY<4V}=7^;esixEZc zzSd5CMJhPG8QlO7RKk}r(a4G#>M!HpUnD4 zzn^fmKO1`e9i!DQVyteJy6tf;8ybDZ5B~qC4~FlfZz8e=0BZwy2?$&|&i?E#8UNnT zdh8LOi}Mddy*~FKL~Vsfx4Qg&XAO{YtoZ5w@df5Xfy{!tzdzyAfA$=t*3x^rpIz%8 zjWpJb83U&`1>^w0LjDdwXT^M5ZBZ75W&)39v}INs-(fhHajV2Y+8Y{`du_&zcNS@o z$pHl{N*QE2ofSMVh~**~m@%@9h2m_0PW5pZ)v> zTE(JHoKUMEC2ov#qU46kyy&?oK&F|WIkiw=tzx1XiJgqg4Fs4dk9n1;3ylL-=U+>O zs+AF~!CR#7gh*2|!dw+4QJavp2q1(!_5wXt-j>`*$Al~umg}pwXsLQEU%>&44~NJ(aQw)5dwB+D>w!A{VwgnzQ!@MdH?ZV zH>ta}-!`z=2$`a;7D#pFjL$$$9! zNgf@1%aN}ahIQ0yOYG(f=K>+IugERNC1|$<=W}Aq_&@dBPP2P{%(!p8F01#q08qau z_CR2*khZ=i-&q3$3ViWrU-K7#`n8e(oEe|}^A{Md228i60V2gBc4oW;ni*1z+{V}0 z!~6dJY=gK?f_fw19}JKpC~qrvKOQYTz(9WKYYSP_z`S=K&JtmK3aJWEBI13N&uJsJ zQZtekb&yFHX8ZbFV}4Y1-HWi;us#Lq$KQRv@eum)&da`Az@eq`e19?O;Jv4)kFlNh!yi_i8L9X!2i-gAufT2(411D{VZhCWwi@24D#1K->7(va0jn zRZO4Py!(R${1ejvS#KXJ0?=QOOKE^L09e2Gu1wzt+n@ZapQm5{>J6TMdX3BsftcDC z0U$QCn#hfY*UWo_K$V~>7*hh&Sngp=%z&9Nh^mFSQvymM?Dq+^n8yt)9`9m5duP!$ zaie3h!sbYb*Zp!LBG0M!JjFZ^b|c|*LhJGeEU5yh<@BeyMbBJEAgXbe=cBehn+qQL!~TGz$Z_KPp7{=t8n3UQk^TjQ~x zxDgf%L%79!4?}psIRMaZA3Zy`|J^MB@E8!-`rEJWgXiAp%OkH{0sw@Eq`xi0f4zDw zjQ>_z@VzuZPPems{(pbPS_R|vfN~U+A}DW89>pRXCt+#WxIOhC(4xp!$#^~NV{J0g zAYwv(o-C9v!0<97?HM|I32zL1)h55Y7*aFj?IseSqFV245UZdy_Y3RPN(RHIt(FqX zgtRj*jGX+lKE~lhy*_Ht!pRKt)+dGZ3==|wpCR*mMs&<}y;^k8&#Q&-W1VpUC5;Jg z);@a`t$E$hXerY1!!&j*HM7A(Z5vh|6a`h!?DOue{sv# z&v(cJqf7#w1^cT3l*pQ0Rlz(9uJ#$F0y!s$2+9%21A{ZSh{mvIoQ{eNMe^2^Ox9wv zR6(gGM=O<3E|i${8#6ErWS@6%QLCb;Hu9j?)@x=ntRjl4mJzQNIGwB+5rk3Iyn<+4 z6gNWD27P!7F-Z-Os|lPWGkC|Nw#GjObV8kv+)!G%9VZ}uMSY(`B8(%j8_1RV;9-2@ zEaXrL1AwN@Z~J(_C-CS&0084$EL{Q5TuwogBo1Z2*@a93uo2)&hfU=H`yDl~6g>|( z0RvkE#E2SQD^Z|T82s($760;INdEL?z^(_|dQpgZ5G6iaWWc_GNQi^<;s01n; zsdEJhz(a0^irQ3R$WcHENLT4RYF1+m!`j@AHaK}C?0z^P?Guh)&S##dRDg$iWP0B9rDd#;hs(Wde#W-f{mW_h`~{GI5=^+Evm-PXK^+269?? zEMbYzX?I>?KqVxR+cYK%k9*qR~{5l~I-f{3`J4}B53R5eL2!!bjP|Mc? zR@RqN0;eXLqD;2$7WPkQ%>9-sXwLzDx{(x{6MULc)-DR522MoGYp-1hp9t2E zK)qbhodd8h%>Fy~N9)j7X0NnxV9@|bu`&hbUB+i?lJ?JA5wPC)pRjNM zCM>d`)O|;=0DyR}pKDKnfXBcF0&**)1OqbJk26Mk z-1!=-oNqyu)9(EIp3uOMJAoYi^{(mC!yAERWc#V1SXtosd#Uh0o(4!i&OfN(kL_bc z0M_CEcgg#&jsK;5-^EQ8_&5Ldi?NDWewYYj0*FQP9M!DFCny zW?%e2`|SZYH`PMNUazmKrLKkh{k34Z2TOh2u{X^zV^mx~C**453Wmoj-uaDtgOC!@&Z8Bx=P*?P7C@CSRY5HZ^_kfaI4>c3A}7^>76b0anw_)Y zRS{aM)f|(z*JfH2`$7}Fkp}5p>F+FE5SPK9&*XZ;@cSi>>l#2nI`gC279*4rVcCbH zHChvk0J8=+z#<;E_loN)YMKObPk;V-)j$4&B*U=kvhz{^03ZNKL_t&zQf|(N-j^F- zOIDQl&3Fg`)Gwu|4FKK+2wXbu$Bh5hBZ!F=4*>vh?zP8a*N6U};bAJ^ zgOLBe_;;^{H^019EdVn&@F*%q{G|pd5fj?vc5M=emz%7d#tdTWe{z}pcWMSYdOU0A(_DVqJaS+Z5N^)p2!e zn23NTTSw03PX&@WZl6U3s!;K`)cfYG0$1Zy>t-9aTQ;4qqpBNNEP3_F{?kioNf;s zObO4t=n(iJ0)_-siu}J#fbi;*8#NH{@)?5@@b-=3eo~A(GhkDJMtZ>vt9K@30}3y$ z$hw~;doPS~6FKss7952{Xf^yz#ji8gvFP;?g5U)V*^R8C8R7{2vrlv)v?fZuds}t6 zu4f>??=P*6Rr)W-SIMp$&CB;9S|G6)b=zFD@c{@+ibB-@*y}ff*Kaic){k06I4+FI zEkJyUAasRuZSWodteb_zZ*ljT#{dCV|EJaK?NY^M?jDZ;fO_HYEdbD;^QBg)>k5GH ztN~JvwSN9@ze;ryv<`A=9)1-|_h<|@z(VE`_DTc{jQotPWiM%K!V_0W)yRWP3>u9y z5ViB#rQPz2WX%4fnz4^7?st(#T7e4p{N1QV^i59M-6&cd4d3LXz!A{di-W}tptIej zUbbIawK+BLx!I2jMgKm<%Q)jHkeZ+nV@UyIw1{Mj1`zDJyMS0o{gU%9G)5^jDzE)g z(Gu|xUDha^d;ZG>u?Wanq=o=wyKw6{zj0OCy*T`&r15tX@w1Pj0kQ@K>*#kpw$Ac{ zY#%!X@K^=FW5)lzCVXsv{+D0Tw>Oh}h6-keh~jWJfrzlb8nEB{YQVtmDuKxAYzr#h zeyiB+(=xi;xSbAW#G@xR+=zq~j1YOuOHpIfm#WR+&66!MCPZY0uS%5N*#uMQ84$36 zuB|=pvui>k!tI?vR9#h%aGWdd?iHLEIl+W(TuCo3oWR!=HN*Vk1shp#T0-<;@Dyle zfhqYTqY3>~MN568WF?Q0b8lgOcy9wCQz>-*K&$tU#R2D_AdLAL@zEDe@oODS-lZvs zwl>9pkv)rpty=9GwyFSG_TNVr7I0x;=omHOye{?|AM0$aqWOCiyV z+ZX@-Ret@8Tcu6|M7>0m2#_K`f<^x{(tzg4%cRJ|h&nGaw*-%NiLum~*bH@6?=0uQ zIjoi&LOCf=#6Ur3GE~$mi-xttonJUV!)RQizSf*6^1(Pm!I{z7v_`BuAJA08;wx^$ zA-3OU=rufRFJrU??EF~b4_^=a(Gw{UB{UG#NPe*(HXq3VN&8Oo^szm1HAIT2or8Jz z7QH*GUg*}0vlv-Bhx6;vfA7I}yREzuoc^}r>VL{hH>b;69|hPN`;RH#Zt(!tbM`kg z0)U4Hx?Yf;GX9rHfA2i$Re?YGS3l)9-`-;w5{7XA$m;YtTaWJfR4|MgAY0TK#$4xY zNL&RdV(oyi13&yUEt3UU zNNI^|g>~u9LcrnRQ=Te?8c4F1_789`ykc2Ok};AWZ)(EZ()RsZKd&UGA`7TbD@ z$r^_qDE<-`pl=HrN7RS^*8m`lYY!|g0RdopF##UVsWkuygMZ2UUju+GkkX%Xzwm|U zA8CM|{oi{;TkFBat*3iG5{eu(kU0^rD+K1Y& zxK%BvqUG*291{NxD+Bbw&M+@sVCjq=oqIT*y8kcH0_s+LMJOn8j8Gp9A?j!6WM3wN zh5uuXZD3$IHv}MQ4uP*J@TdsEIS#s98(_)#s~<-(q9DXCA8$kg;+p&GssIXb_wQ%j z{b4eVg@>O8&Tmm~|JEt*Eh6A!qCgME{D-at_|O2LUuZ6Q|7$Ria1H`4h5i9NoC~qt zA7=gLUg&Ul#LcAm?6+Qk2$+rqIWsf?w>L*zKi^}w%ecQQ$V0|%pD~OXOoaWjgxys} zPK^7v1#=N7rSsKXJvRmdQj`{&QeVLATFjVQc^@qX2X0(pgWcw3cS`ZOWCIk%^aQjj z1`y_GMNX}35L)fGb|aw_fx6yr6VCAiCjzp|@$UD8U>;GiTKX2och8@*$rPuA#->%Z z;|ZQX3hzUEAh8(v>kg`T30< zf|{AAA|PfYB_IJz3CT;w7}3zmWO`FdX7B{iDnLfZ8Hf-ST$IP02JX@WfEo5$U0o<| z9Il@QF?ol-D6>;Q$RZR>es#HoHZPxwofc60FNfbIzaI`4d7y+fm%4g zucLDs9*kZ9QN^%S5g2DddK7!ab5sC z1yRRS45yQM_c<>ufE&q=Y=S2SvV(xqN(62BU^n7SZeab`qrGn|Ght98DgcU`sAoWd z8LfOTjDJf5NL(2k0xF7H)P;TQd}>9L2R^yyZ|##8Z@<(fO(5cx7h-i9*z|uWS_t}hdPC)Pd$Mf3wUjopNEhg*Zejfm^ z{<~jxwL6yFJ@=qzt&hGYL&f)=H2kss=l|;$>Dw=FaQ))S(^?8tHD@%j+QDzc(+1A zgc!Apgv93+>LY<5zTPRY7=8bV7G1#EVVmjggr(aav{Xr_A@1+59i3ESC0`9%W{&(3vbQM56ZvlZzfM6^1|1O@& z*>C^Ve}0uur-J7%_ed$>a5v%p?Gc}R_6&eE_ZfEyyIsPt8!%56JI-KJ*(!>gn+f0i zeYH{{BIKM}-Z;Yd*3^bfO4Pl>>P&lX9xpYy+v=nh6C5I2Y&?BHY@gv|t$V{u4}%X< zWCtu&fcv9h+!3B8778woE*evj;P*;(%*Rz*NC zKoA6^AXfGyzJ=v)MzrPi39Y@cD7EVt|Ejuo-w88$DpKg^`e-AF6UJ!a1pV`=m zVe-DU0~bXhFmW-vTb}C=!>Vfi2VllaCnqH;Ta7=V_5Wy_D8&6TT3VTGkuDL5(c?iO41odC#Pp7}FsQ*%O`jl~Di@Cm@pS`2I6$R)O zLf28Rj}8Jp1OTAb-&>ET41ZdE=Doas0Ql;gBM``v2>a_D@{pYfSlfU%z-{j^Pub7rM!b@a&p#JPGQgw*QeZP3}t4lAF&7O+uK+QUSZs z+6)r`#}isl07}bfRwZv~Z2O56!BWDvAoMW)>TSq+fZ$i=?4GG~>NdIJeZM9s@rwd*9ctq)5|p?iQ94{N`(`_lk`M=mUKg0o%)Ou+4}po-4S zG+r2zYd{<)ALCrG7{j%PAB)9f;s2)qz`LXXF3qcT1fYMu#QyI;x4sTr(T}w(asYs} z=O52cZm<5!o2mjHu1um=2{;@ktDYGd@G5{fGj`@WKt`PN@h3$b#4^&}SOmeL;n73? zRa=A*N2>y8-9-hM?<+VH(sh@_cLdqg2Z6IjJd_Mb=xmLMqO_P`$EHP4OK0rGuNb+A z7~@xe?q=3l|M-+klJmYR43_QGs-y9NRU5q@z^aU78 zG$Z!k{cWSdKffN4-8^s2aP|D56&CgIC}3zS5CJhWwJcl+g?~OU-NBBri3r6$e8z_S zGbY9KOW~_eIMM)@0RQ@V9r@l$18hm)Uz)>ffc?F;k3|C9GX9T&fc`V<#p$WV3dd8? zpZ(%nkh`rS0%pdz%aBrWxSMe}7JT;O7nn=I;W%R)2WR%0OmG?!=96IDCp>>KU>F#+ zR4^099fO2$JXQ-qOH>fM2cU3LiGrOMpw+tb0UiYqiyXYTHkexlxVtwtzqnkef}Gr@ zrWp`M);;d45sjFZ5&*Rx2DKET}UcPuVKt)li ztrtPkv!Av5u&4v-nb9X*sxhEIG&L$NEvjn7%{gRSec=HuhCk960m|+Uio1K=efqL3 zO^+F=el7^k0YGR2^Z;STk|J2=)%$&|=hynN_4%#&)o)u%?b^UU_UOO2{=I(AZ-qkF zrBLhK|K)3}z_0$|tAPpN9a|MlRuJt#i6Nw@A{cT8;3QxISj+%44UlesS`_==8Zh0| z#fv335E0y^^YKhTlckNTkoMf9cD0zd8X6!$5C)-<@-z;>6GO^CY6LWer6d*b+Iw?) zyec3OXh+Z!OglfKiQ=o(Bp%im)8y^uX>bxia3dL-9cI8=WWxV%<&Z(@)deUd2O^OQ zaDz{g0`UDPqqRppGyZW+<-!e*XhkpMP5q zr;@Q zm)da;H$27bD@GOb`o{q+G#v&byoXW+cZcc(J_81TdD*s^5wd+p&55CFPUh*V^A9qc zcYi!t-fkQSi515QENKQGkB{@P=XdD2G) zz6$`@GWc6jwXKEhg0Hoi4u~kg`t|iSS+5Cek7%t6a>@I-xE*g!^7hLEhdw{U7H~@= z2@Ebd$msL6MdTPuQy*R`cp7lAych&%TDiv^v z2e37F-(}5ta{Evzfb~VV1Ona#2y87_kD{$V|Bqkt@l;@S<{pZZDC$yNz1ZRE#oiV7 ztZ|P*z-hpc6F&Lu3b$`3h!`=>YR5gy2f^L#1Sw{icKd{@eZpxn&l_s_@wqDI*^~vR z*^KIbmw=A-K23@;TX|siegoR+fX3i$Z22CZ!~QHHAaRRCo}W*^ZpS#DfYT(+*cLA# zjC6p7#!Vjq>bddB7J{oCVPIhPC_tnRf|)Nc7JYcfEnKfgQsmX}j1<9A)4zly8$!qV zq8Oonsp0k8_i9m;vJe;v#*F~rBtTanWPp_#c!)?q`@61YjeA>m2V6ISwdoO%S36_} zIZ^o#z~}9a>Jl;73<;i%)77Jo0>suE$4lyZ>$&k1c)s+&#&f$ecnAb!_4g$}umu46 z^WRz!pQ;9Wa{KD1-_m@l;DN37o=x9lo~@nlZa-kS_WMWxJ)7uGo^jw!L zM_LXAq5sh!xhzV70rcC26JyhBRj-W)>g;p5hynNn>%i-PK2StU2ec(Yfo$oCbZx}I zdTU`W9sv+RjurJzkrO+SO?|Ge?xy%IGa-M%7EznD8E=hfp4xud?*#c>Y3Y)M`0x4OFx2VUFWAiLUEkEdOF_XuZL#ID_ zfS-=l2Oa~X4@{W1AS^&;42kgK2N{VOw|CV^bK1h@q=f1ybY#YhXN+l99F8`lER_(Z zh@5z4r%$ftb)3|@8VaNmYL|}(OuK(BUZxjbcT6N0NU0SVvLFrIjJAkkcCRK39r<;b zt9$&8sDl95Kj2Y{-YZZnk&qrL6FI10d#{Qa@9eF8r2@4WKcdW@$JdVSufXAC<$Uq~ zHRGTBdPY=&)PG|zPp68ay6!*Q1qP7`EgdIIGmIHc2O)8%mPkHM031&W5!95LH@~&T z7!D)O-DlIrXJam`J?iyb>ka*u@$Zf2B>;ep|HrYeAN}iFM*q@x`i;Bi_i+XuUk4QU z*?;(gPScE}0CR%X@Eb$FPJ&tmJfx=B2en^dp9CsoydW~!;1o++GsgBq3IdYrfb7`4 zNNO#wbyDcDf-+%vo|X`DM}Dn$0#so5VQMXTHO4BNkye3);lbPB~!8B1!p2Oc`(<3ksy(1yI5sbrUZ=W6HIq)*y1N27?OIceuKuof*Q323BQL-~c9Nev5s~|E;eOR~kN<46cEdGBY1bnm zx-3q=s(Ssu=7+&4mxTedrVbuzli$cjE!{K;WHE_KUA>TtgoK z6jc?+!;HKeQKo|Z^&VgW5u=iT$vpFUnsFk+>u(O24i)pP*o_G(`zUr}$YU%Jz*Gdd zn+?&E8QJ+%vEOApyJo1e*W)`Ph3ER%Lda&=)ynIfc%shCRT0;nr`BMHyGfE6;LONA zK*^1_Og82sui3Qw2{7d?`#Zxr_g!BxQYhK$}zu zMBc5n1ZxxoLh%%Yx|gqh4XW!Nl!BI0X;BQZt0`(>&S^3OFP-sUssa>w0H~O!Rmrp$ zOxs`a?M=Vlm|vItmPc2_luX7rrSAB7i2^7PYLDuG;LKEX|HsDvV~I(t_ru5POX}A9 z>^~d(dd&03BmeKW_3^Ha{v{yLzrMu*SObB_)`cwxV14cnfWC%520 zlh(CTU0U+g3RAv|Gs-aI7$?>~10&N_04L+U2;7(|8dzYTbXbKOxH$#*O zG*~Dbur-Khid>~Hu{u+&m=3g^p?lH@o$^9(Y2_Hb^rnPdmx~EC8%$7%s+lo z0|d*}-vqpmMFSoaz}lKq-+B8O9DsQ4C;3*G@)8(W1Bgd~!0}Y{%P((SpoT$Yq8%@P z@C+#@R0u=`q^1v0#k^>#=7!FtqTT~#5*+Sk;KdHtL&CT>&mno=dudH|1oKJ31DmJe zAt_P8&20rpnu48)$e12EgP8cK+7c(g}{z_4ZfM)Fu3z%q5R?#yGr-}8Xkii`nr%M#ev2!8fYrTWthD)YjzWB zDH~we6NaRi{ajm)pACE@CJb5O?IH|3VF~>Q2+GbAm}d;T@qw3q$+-4LzBl4ny_dVo zyao-l@&DdnUh)%~JuU`uw(EtCj@2-z!D{}Fe1MmO{eEaJgAp(!rBZh4A zO+>*XBNO3tCm62=WM(ikcF(i1?2AHJK}nE?49aAwzFEwR%+@_H#<7Zms^{V-flRZl zIRFx~mBsA{X)r(`#f_$eSk4ZluhN)v zSAzUw?p}Ro5D-TFk|^F&ARyL<54L^iDuDj)t;gE%UkYEolko?DSKr*@{_Y6n3?3K) z0W&os+^|c?DS?^r{F6QI?0FQe++_7ZYhjKZvnb5Ysi~g{S6nPFk%JSBV#?<#*iHKpT&72{p;)3 z)=S^JfPnaW>$CBQ^ScB{)@#J2b6Foh0O02D@0k4Ant2 zGdN|GV*!dufHQ2Yp6+IpS4WSynFdHZxyU)Y5D$S`j7Hrt5OzI{D5H&1JcY6D*(Nge zpK&oEanUa8eAmsLt`@%@1ZgCs=L+?4*(86P1^7?^VC!JE4F5XRx0M3e3ISeRVSoDb*OK=;7EyRddH@#kvEJSTuAYsUPQ~Oo zogA13GydgNkw$=-G3=7H5f;VazF1V?wqSof;L{)Ok(kW5R3K%-e$VEKM{Pc|h0_5i zr;#lvlewJ6WUm6A3HNu^O3y?sB$>{~5$7dG$4r=JY5U<6q&zzgqc0GWhaXiHMX0g% zDUi8){Y*gh+MD8oJ`X@jrYAr^li0NkfTDuHzKlm1UX&#Uz+k3D7|B7?T$XaaAo-~R zH5vG+5%PCq-<17)-)9YcJpY(O5h&{b03ZNKL_t(DP>Q8dB%&}0=5@KaK&ZV{0g5PC zJPi?`5B8gYEriK4`Q)B{&S*J*=7kdwN{N=nX=DAV3E3O}c8j~$`ejL1-+RoUZ_Sgf z#c1nzp4y)J%wr(n(tGQDUpoGGMparA!_{C0tHKmHhYSKirV6OB?wFIU4#~z*N(`9= zq!u+gzM1gshgaA=9~SjE)z&;G!zWIJ!G%!|6%0lin@?cP#SXG0au`;*a^;-~0u-#z z*xHx0?tjhOkMne}OX~Z3#*m}f=LZ8PHM-yt%+rP&_F$Dn{r=9v{2)M2Scr|0)=(H< z!dGSj&dLFM$zPx|{;G{j(DnseKh79q(mnf}Ym&cV{9C(UPo_3-Lul2#Cz_&E!TtRS^RZw)6_CfH8D2}v z0K>duTR2=yyT{9WU z?(W`r1~u|)&OZ=QoF)?&+U*o6F+fWfJir%2#5L|;_xmA0PK$S5!#nqoTo`dtWAiJt zmFdj|O{c#~q+G(|@ACVq$VA9Y5DEgJeNe>CKh*xRdmg0-l5-&jUsUH}Kwxl?)w&+~ z^~%|p)ggiu;r|v5NJJ^wem1sP6t;Yc^@7kZOZ~Fb1BNZb{@82l?Ol!OI~(0czPlAA z=$Bnu{rx`A4>qZS`B-RoJ)lfgwZeEZ1EU-Zjwi)wnsIft2UIan1(Xs(A{YeF$beMj z>x|vY0VyTaQUE68fsHtKs!$la-<)j&;O0@PiD-GJJ5hjUUxTUwl`vcr@{5EBBg?&5 zSbdJGL6*-(=Y=MFofzO9TEu}ephOVw69OpGbuthzi&q$sE8H0n2?w6K(bPO&QJ_#O zvqPc=C|ZLc!9oo5btNzd594x5tR(!FP2`xghfcGU*P%?=(DlB7Sy-8&p)DmTt7Iy?(Z$zx5bHD zd;XWI06y6EF-U;1ZGnKbm%sIRa?;0EtLnFJ5A1gqU^gnW4H!-d6%|sdvFEeVwaLA8 zRbUvnG23@n+4}}mC@HS46F4*GNpQTcII*D2Avj|l#S|7|W;KFgmD=*s9-RUrM8$;t zj`8d|;r>u@JXvW^%$-sdG+DdgcKW=C_3#8xB4iM*Mn+MqkB=R+Fg&ny*UzJ_7(}K$yR3 zKu=Wx_Wl7L3Cq`PMru}IK+8Kfk2X%c2+CdclZggIXk~!5Zu!Z!-n}+C2?hYPE^2?o zfSwHL(r7AtGTFScp9u1>8}_PJ8Yv2{1WXFK7tqMYA;>V+I|tw(@U^WQGP^O36*`Q3 zPil;t)%&+`!=<|ptARi<-_`%FFn&;lku60*9@){^!}X@+WEB?^T8A@~{MtI3MUrY>^7YFRFEiuK zHz!O}F?GQ);dBy|0_?8{5JL5FAQd)hMpDJ?w0tihZ>q`WJ-Uf^I${U zzE;Iam#$xi^cN7J3Q$)I9gU83nTIjI+GGra9vc0@+V9DHjRPR)(kiy2Artl^;Z)Si z?+nQg16lPzLF*g91Plq7Pl`mq^|ORpEES<*x!;r+&#sK=e}A-9VH_>bALpDr)SsBV zc@ikdfsyX;1tkE$)?A3!)?P1G|9`MH;^Ct5k7ek;%l2K4`@MnD@pdwqUs$lSLn`shFWs>PCS{>KY#>z`4EW-99~5u1?tF zJ)@o$Kw#d)GAAQlM^yo4pTD+#FuCd-V;RIje~_4egfpeT=4g0%Y`-^rIfM7yZuIf?gkd+}>WU#yoK6K$&zq-= zX{xAI8Y)y35GU_mr=L3(ihGi#h!qhB69)kxz~pHNn*h{Wnudp4E4<7QV5kwK!sCyJhr^6~rwweV zANTA+B4K!&%AO;DCIS=&-=9NPICK)CJD&y+5GUwC&j^N97f~RnftX2+@n4z}peZg! zZ8j&um;njl7GHEY(i;jZi3-C{rhrJEU-1Y41s5PC``zFJ`1QDC+}HC$SO4F7pC9?m zf9>1*oX6GvNE}5zsjhPNx-bo%w~)$keQKo3?2xnnqf7WULSK_ z(u)dErKKqkLg+^z#NbTG&oekN>P_|Xx$wlzm_+Bn#EkrcO)TgrW(_&4qIvvHpu?7V zBhb0H5J4R|SM&4w8m$_#l|L``@ zdCE&#u=h*D_=jzes)WcqwsJ+lK#_VFe>QJjC)joOQorbmAxAsj#?j~)|Ka?QgB6o} z@Pim^&DE-lL~yK61n{092m4)1vG}o(0i*LUs4FlQ6dE2>>|6q|TOgo+JZAiR(9rMi zHzooQ+uHbVo$xxmvHt)1dlwgiyThE0v*7usFLAm*;&hl$OU1Jn&mk%(#o|_+=Or`+ zMJXop3m8$*a{5M28*)P4nKv;VXAcY6=v7r5PgYz`Z28AB`S>F9A#9S7mj|&A_6XIZ zvFpW0Xms8qD25E|2FBZysrjYER?<|(8R~W^1m<-o4^s+RG^5Pi$bqWV(pW{Tsm`o#*goc1$Hk(xbR!_(Se1dD2gYSSue7+F@Wii&het%CY zY}Eu|)Qg?-dvl>H5Kmj7=L021NZ4XG$gHSUFx{7S@S=boO=}=MV~Zvhaf`PIdx2n#e%O9!>?#DH zpxMfcjd2=4)W&vGwqt+?UbOn%c*{g)09Bh&kH|nP>mxwDb01%G6CY};a%Tv8fuB|) zs3sH?Ey&MJ8a=q9q~{!=ATomqdQ_E*E@(P$|TkdXI7-=;R!3|xq_6CassiTbqe7O@>09x!XO%`(~VZh@Y%7N z@Q(U|LhiNuBxeuj6#+1-$^C-C$wJ??+U1B+H9*Z98O(Dh0hDR^J-7e~$9I6aq8Wah z#O8H`XI_e-a?-@9Wb;uN(swf_nLiIA=c!*c=#f}Y&F zXE@Q1+S&yyAiytjD?1Ex)}jId7{X8jXCOe)os+m{U+hhSX)Zv_@FMd3)%gZRUF-)~ z!icbls~i5-`EPL1qT({lQRkmw5rvaNGr(5_N_tL649DgW(Fp&)|K!72prFyxC-tCv zeonIf#3S1!An;UFytk8QAmIC^0X`N9@Dd2Pgl4wF|4(iTV4f@PZ{L8JFkX#dFphTz z0Ko403X}+^(*#Zl!;p|NBM)gI0nw5Z8%L|dFI6lQC<|Ie`Rsn^aA#t>Jb#n`n; z9136B#%k7%jH2#ll-8e76^+p!1MAgy=RlZkXYCgL* zFp?hp03tt6vP2panRt&o8LgpMtUIHTj>}QoJOiT%1F70N)Qol*aeKMt>;u#<$Kc0j zh$u{x19LwXH}DWMvNQk`X$wKi`;%BIKnofnus6m{9ty1Yq1*=sss7|CJi8ZOwS^_on-QIGO>@+=~;bbqCd@(GPh~ zgD=6f5z*`s+jz};9VaJru{3>mv;qXA$y;G77AhmO7qCAX+Y{zDqWEMzhfJC&92)uXkFi#&)HdL>b+6vpc z{t;RQfmE{ST?N#ePg7EBF-+#sN4Q_rO8G)i?94+Bzz~Z>Rm({R^U%ZisvQUjrNa>3 z5m-5-^ARj9fJK#0me+`2A^zEoyBmLabP|Hr=K!M6*`p~1=aB?pNg?=sI*SbWB|aO~ zp)F7iz{u?x{JFGk*|w+b;$uKy{r&GX?>?3ez}9Pzo%9yEd2(HyONFXHs^D}uBJV~F z!-(DW&L+GFh9P0xKSvr8%3N^r1>KCSjq*GU#w7L$C}K?hFkZxFq?-95%Lhs&pI~+h zCbnY>tcaDBFngH2NZTi~m$7-Py_DGNd#%N%6oL46jnu;qJgjD)JcJe?A=l&tIy3xL z)YotGGUnODed3}HL5OMA+HFH}?S$FVZmL!aR~bMvh;|&sbC`1x`@1n^$-q!7j6T0a zynL^rYd;r(@eq3uyexXP z0-U>xNB}YF%{Q@Adl_Vr0abt$db)+YO(06B-~0+XA2a0)Z~~3jNT2++V*ecJli!~B z#g7IWcK@IkBn=75p8GEX;n4K3h=3FUS5pYJYJmhMBAFDbYD)mS?u97oNl;asdSx}{ z`P!-n48U5EevJs5c>E_><019he9CTIJ?%(L7+xmqemp=YMZFQE=M3TmISDv3c+Zd{ zd}y9$-6d_|d3Z`d-SCnda0}bQnEj#XR~&@IzG|ST#i)lDq1mDs@fnJI zzeh+SDnS_@ofTV`70!Jy{R99lS{pw`X*u7Bjs)-kaF%A&3Y2fdK%5Q9-bdLo&TIR( z_1e2UKFIbl+X46QT{?lszW3yIIJ)3F6L!~oguKr%4o>PJ%b~g9Ev2-{$P8#D>k`I- zF&jay%pMX|ZJsQVdCTNv8#+5m0|ZR86oad}wm%_7R6*hU2JY|e>+@_3+8qH9vJ#?9 z5HaH4FtCx9px&Jii1DS)Vn3c-f*6Xbf>JEEm@;AKA@RBBS!zHOrg<(NW#q+Jr$ipA z7e9aYkiX^pHBMZu{-2<24MZ4f5Q^II5te9jq!0j45r|kAcd`Ym7AFL1SHi@E{k~h! z0KeW&0wij`ZKaR)`vI~VtR`T{Xd3^b=p=saPUh@{z%cIK5Xh=R9)|y;$Q`&bl4CMqmB?cROOqKiUPI@j&5If?mu*UFeec_q z6F@7<-~SC%1SAzY+3K#Rd&tczKm=vjjo3Xydhr?f<&TL!{hgVg{UA}^(Z{+#rrt;p zGT>}seMM#G=dg9m1b~_toT@k5s-_5;h-6lkY}G?5iU~&Y%Q=DBl>Vw$)Km}a8!6YW zsj9W-RuV|99UHyP)HqtCJtIF$sCO0hNNBRUfC*ns;vsW4wG3kydj?qjoUmut!tbol zV#g5O{4Bh`)VAwnV2205E2fvN!nHQ6yI>>y0gC}7_2rg8E=(jrl2a_9_s(-}OI8G* zBBx*DZ^xePdk?*Sh%Tjr5mBgSuxU@wNg;O*CS1or9AMa(M-1ad#n6GhoE#iP5 zP0RFYO^h61=&YzW6)F%)@0 zWgw;8Lg~?!FIu|Vz!flCLm#OXr-OwP0XDY18zQKAv+TfmU@PSj_nrr5{6j+oCvw|p zWIOg$!f6%=jBJ<(ySEk!XUvnmKTtvrwJO-L@?gfQiW#?P)vII+$E+SwC;LL}@|MA- zH$!EuZq;*usutEB(n5TTC|;DvRg*FV1dG?3&?*H=NcH+XNgf`Tx~K?>niphJz;=x0 zwAe`=rT|PGfv`QR-|M)Z*0+Ehzy$_NWG#G$fto-NImaR=%k2-*EXmhhBLsq4gP&|5 zVHjvp|KlM2Eg}D4*P}@@KzSY5zQZNH9Q-UYXR46EUK4rLuX7q1C|2oBJe-7SzdlhSaPi$x;F` z8_$C%A^(58y=jvzNpc-_+#@pYt$Ocu_bebVz$}0Ohy(?YG?_?#lIbtYB$-4r(TvnW z!axj2U;rBcL(BlPFFoD!wyJw?W`w&w9QVkq>Uv9W%C_5eU)5bQBO}7yj~_oiRUDoG zw;x^xv%gLns3VBhbqs>8b-*t~4h11dUYMp62c#R8rz_e`AI4~Xy22q$V~C?)!a&6c z+hXX?BM@(~Nv3*V+irwQpjZm7^(6Kgpfd@8-s1BSPQfJMK;W*??$kJd?wpWB6ok{o zc4f2JmEVrZ;U9erL~m!<2U-y0kz9a%)bDWU#3oC&I>~zJ*;g6pL8dGuq;&kkJ+53U z-*<7Q41}A7UdK3g0Bc15;kw=FBala;rMtsU4m58lGJlfk`@lo*{k-oCJoLARP=>cY zK94GZkNciaz9R@H2#vK-%C}a`hXdRkYg5lk^u*zDkSVlQCvToUC z4jp>q!zhx|Kmi*5UPVv}A@jpbL$t2pvCAe;3#Z&K;Wl>sqvJqlr#Fg^)FAJ5BOl@F zK<)q}8tD`OkxED;StCa_rT9(W1DEkSGe8>`UU%6l4u&X6qyPlNW6*G7dfSi{GoluV z?@pU0>EJjZomvK|*RQcevXPKAV4i%y_{RgUIivP4_(Roi)b}ew1#nk2P`3AEMMOFh zpB)0=?rlZ?)laSc{JYvd{IS^S1zA9@ z?Hi`={RWsS`1B(u;pn+Uglx{Po08EU=c|=$fTNLWS^+4u0$oHJx=UvVLB#v5JL*Bv zVc`@Bv=cJ7AO^$YbHS8=#(UFQg@F!41PR431hg_JaS)Eu8pbTjU=fv9}c+5&vEaS2A+WG+US(7lB1P?qSf=(C-}3 zI}Sj?`1|zUa00L+_X&oi@6JCFbB;l9jWp7gwt%URoSuupOWXhzAewtwDhXzl(>bmw z_9k0E#AGHX$d-)^IS7eqZqxU9>97@RIpE_s0QYU)Lr%a$x&Ql*&*b<#rGW1r51sUV zpYc_%d-yQJ&GY9tK6(dI6;%qn8r_$a z!X&WMC@w++dpJ~JW={Zmz&0AlxH&H8hTd6cf4m0V*dT}zgW!u_o^d!-s8WLOFfn{( zKAd7g=8jqw$AjW9Q}Z8D4Pec10?@jms6(~lFojr9XT<&JTJhwu;`s~1Wg*E;HKc{H z34>@Mymx&dF>qNO@4dtC6d{q1pKGWQP4tL762?EwG^8(rW#1Z60E7e3fvp+bx8ki!-em*;1+!*FbaG1I3_NnXaHYfyt0Zt_9}DI`X_+w*0gdIsyRimnr8C9RP)B z4|L68t8sIOfWEXqtGYKwJCk1|RiI9VKg*n16?iu`o^oO?>s=%=h$qC|Z18v12-?t&o|%-#sRetlek0`#Xwr>g9(Ndtwk zO!|DPX#61q|EkCR*TX$TpFcr4;3swf@=JFov_CQ2``fFG|2@+%e*ad7sN!&S1$QnQ z>P3*Tsw%jCas?>`4kHuPsTVKd+L{T97If>VQgJ+1ESHY=fBrlsphWIhsS0S+2(JL7 zQd0EhW(@-*IG?x(R12MdH(VBj1ztBzWYJ4ZauKkTUo38O$IF{Gv;uO0h!~r56vfSL z!>wy5RSB|-T`dZ;j@BHjC{+DUt$UK+%owqsFE;uTKpgABGQpQO)I>NOSmt=sjj;Uc zqg&sT$8?_7X3@TP+azj4(2GUcUuPMeAad-LlEfAy!o4hTYs~GB4vTd|AOxH7SA?N2 z7-J<8H5qZw-02WJ*u@vB001BWNkluvG&%O7C*;kTtf`x$%*jpjYnI6gN9>HZhFLFy5J!28Q>UDO$JxQ5+4C3L@E zGY$-tK(^1ZgW2M*Xrx)oA zh(7)j^vhpE`SLd))8XR}BzE^=r!!lk(ndn}-;1Lc8xu*3pj|rpN~enQ-vuy8U(BsX zKAv7b;7X-Y38~;BklvAvc9?4pCbC$tgrZxG)Lb0 z%qyAzg{Y*DxfqeHCl6^u#k}#eN7-B=0ge#e;rV!y?}kNp44L9Y;(A=`IG?b5>Kl~r zbd2)6J@fBrjmwXKSX=~?`8SvcgeWds6hBy45^@4u6g_F%hPl!_&iW1+IC)xzP6Dgqh~ zDTm@BiiS>5W0DZxNojC_bY)$6z}b+Pv%WJ<07lcC1am!%KEl8TeAd<=FUJ1hAKC7s z;kg;4E4&60kldh(4PF<%UuS+qzum5%jvjB3H#*KPAk3a6)c_Z7?r)Ks_sG9%We(k! zopPxA-RM7uAdEH%gPa4B_eOaRFpQuEA@%D9_-aTF*H{O`iQ3i$$CRIMi@`22b{Y=B zC4!0L=7>p+Jiaq+0;SSo$_4uih1_I%IKDH|A^_59yV{+_$D6Jn{rCOHL-7Br-v5b? zPvig$o$HStuW|?;GX4&v=;kY(gV!F1nNa82R-h;j*H<{*+!7Kq*4tV)Ts?Y(tLuvM z>B5`c9MB-_xZ&mV6Pv?4xk9NGMR|>)3K-Z%xX?8)2{DieqV@}YniR*!6*teBi#K=J zxzQ_E2?a5M7cd2prFglyhiDBzG@$a+(M@nZcdSLCQy`6?IiO-FrBKWVAhA(sU|TT# zd-X7KQRb(NxN9}soNYkxEgEa|PUEfxXe$>^Rp8R-fIMw|kbopu_#X3OSp`eLe3?Gh z8u_|zICY{BY5cRC&;d--COSkr$3HX&5IMP^PlO?gYYygqsgcL8eBCtBX?lDuFcY~% z-m(-r3G=i?_FJ3ZJ?y{n0MhX9QxPBM@XIaMUwjYC55JB6?0xvY!^jT4|LD%f-%FhW zQs=;WU&l%4d}Ip1I#dhXdhi0`V)uD`EsPjrTlKa8=Nri38Zym*HFl-T`>Pdld<5w^KlgzXh3& zAA6ubk`{>5QUO#7x^OL8ln!br25O;TP*=+_moDAgO37fY%H}^%8ZslPP%MmSM!dQU zH3cJ|Z3R%U)Ym(s?d?`mw;<|$ILFs4GY;e_;b&(mLBZU;9thn_4dP#C?YlUUk8&i^ zW9NX%L*`a1o#Fw(E1eDzA8Tuy?ARQa@D*J>y7h&FzuUDF-cO^Pejtf{9Ct*AQz;U8 zd>bW$$xZb$I~HQ1jPd4B<+x#UwvsH|qKtTnb1osXyz)e3Vyc8?KoPmb)PyDK6Q6sr z;W+74tcOY;W-AT+B)0#~@sQzvo5yEzd{PA9p%d5}{`uQ_`2EYw&B>RW}buPGhcEa&$#&np_Tcfu>MS9Y?S@!NI z4oF1jd78Pu8915hfh0YFvln$EP_o7C;eurz}&f*01HAoMv;f}0a?zR=RPMn1yzRl(sPxIGzQj>9bB zMDV%8gU!!|M5PjrZ-&v(N8mu0fXO{uu8&Fq%Jc%aXA22pcK4eno>$t0JBC&Ob6#_b z6amc1sRFe)uC6phd%~EDU@mlKZci>{yf*6j>s}f-jQ+0KPX^lg8i;HY{NpS?H}vQ4 z7iN5_SvjL(7di5@&y2~vir9=y?q2K(9&TO4&{I`${-quKY zVRJ5Y7v;g>r9hPh)o!etPL733$G+k~v_Rsu3@sPUH z*X8Ls*6;rX^n)Lu{KoI2eDSMq9Pm7q{V~u0o&@Kh5aAmZL~M*rj~ng)%7`XiYAeou z^b+&XARhT-I8egC6_WO7jKTpC;oq7;!H7LY!tBE9R%LTC&6JE8TIXEU$}(nzvDR=d zM1*Ut8(@W<3B&Mj28q{YD^m$EC@lZWz$3@cFwWiAQNj-?P6sD?pK!18(SEn5l43;2 z64CwMx6RKVQGSHd5@bK$p?L|}Q+<(@9Vq#CY<&^N^on&b0;qVJ+yZqvM7ObA3Sf&x z1q9#kNi58uB2p#!c}QvCyp}zuRuJivHy#g7;8%GL_l^90dwT!*&g1;}$LHA$=)N)E z8~^)`z(dZ!>%U0g@4a(;S*tv5V3cEE?rktdYe5yodRZU_TtB(S<+Mc9&d3=6=3|BG zHQxL36Fhq73eSIai{-X4YK@$t0$A6E)qv}AAe@HqE}gl!b?JD~Eb?U05J*9NX-|h9aA-^6lg`%+5=r2zDhJb z0xpsB&eA)BM4dcm{&K-++_N^y{9cw#0T7XI?@m=g0k96@4j1m;#291{Cu{UKs70_C zwe=4(;rCi;7mo+FFTTC?A;Vh~s1r9M2P-57|Dh@l6P-To8wyY-;5a8YhM!-fwtt#v z^wS~O%KLVl1I17Tj5&9I4!-v2FF(ZjZ~i0N2R~w@tpz?L*7mb}3!PGrJyrWW43xEn zC3(HUBcd0r;av4l``b_fWa9>Y3abTza3Q{ZpVR}S9(V>jCx-}wqFlcNlnD@J{lACa zg*A8& z==FPd#&(}af7NZ+I{{fCz^<5Csw;ydpqfT5elI=jF?+#{G#2j$fPm;Zx+u^fm__6ww*4e?@YXlOO2-CFCo~`P2FA1{qGEvel=s_~n72NDwHfk3%md5vfatpr&n>uf z2H+BoRY3l-m;O~@4n7TVzzG6u$Z0+%!RX6pKDrBfpf%az*c-ZIkxd8KJoETWPks6uX6%E)$v(50QU{Q-+TU$!M|_#A94a-d!Z^~=hH1L z+_d%iGh97>0+oXGVmMx3u_Oc-?5%9G3&H5JSBheORI#oNZE4K=)+m>Wezfj_X(~ZP zanw>!t75q{^wyXIRmEyFNb}5^Y44N>CYg^esySt7Yl+n(%yD-YMu(Z3g$&deh$a@% z>eh?k`nuvUD+PfT!})BuTuAT($l!+pRTR@q2cm`jY37g>NXbqu!0BSRT!>E8Noe?2 z8&bt%KMzqNHOH!+feY9HjW0@KF4xSa07&5?8ruB4%)O@)VCLH)SxF!`TnQdu32ttw zJgBHD^_MgRJA1mDiElFezFu(o{$Jwq z{cpi8FCk^3vFO=J?*12jU%WQ95fYuyi;gdY1ChMVis9U^j>%nlnU(Fq~bu!TW-- z(+@Ai&_Dbk?B+w%fAqU3zwvuaQ{)RAcPaoLI>z6`=>+8PAshkqJNKDRdmsM}a+=uU zPJy9d)j_CyH#_=bu+wIgQi&2mnBJRHHW*P6FtKwW>+zMUc&outpt?oWyq}w4qC+FR zXAYJeFBYG}0dc2sFJTBhNqpj=eeW1#$%<&CBX^vEjB35x<`fE$eFHX8pNQ(y$*Jjg z`e55T^}{!UU~URI2hI_thu^WK53r#bnZfeSq1amqlTfd&U?l@M{;3lqQ#dyrmOc9g6faEkr_K2-ihn4j;~L3A{_ixuwgy*aL~E8hL$0q2{J+ndJnAw+JvDC(q` zro#MpXEnkK9i?UN29GkL2#~mtWFPGV>&mKx?#z2Ft6^Dyn_H$wYJ8tm!vw)JD~geD zCrTomI!nvfmFbN~SAuyim?y#Q*>E}&@+Wf`m@6UtwFe<^7toGKCD_9r9{X^fkF?nyPWEq@oHU6HW6Y(JZ zYj^Y>8#H%(&qzAwYc^ge6?(YlXV}=4k&t{6@+ci$pjS^Ai7zL(HQ0;y4O@z4|YDnZmBqZuXH8?@)rrG=|Y2SDSC*t=W_YM7<9&ded*H_c@m9KmWFV_jr z-~TzfJ089FUgXm>br~$Ba)Hww51aX1!ST~*w?Y`8Qd$+nZUNNsr{0Set2*Z8Tq zZ8|PXc<4ehUGJcdc@JsQD0l24Sl2Dzsws3coClW741p4NEDLk<*2rzhy}5|u>Pq1! z!?KX+pRje2*su&}5%On#(c;`KX2R0Q3Ld5Iae5*#79G)sG@>fm)Con|8L-F(-P7=A z$)m_rBMlIxhspF8-7)>^!!`b&#Q59!2A6;M3oJkV4*KmgZfwH(`t`$~z%2FkcQZU3 z)4ib|hsP#3)TcnGKf*&%je36oS{dbQfiEXmy9A+W1*}1CpJN~id-z`vcQ(mdbeP?Z z8*+DeBt2b9XayKV4_go}fNWi7!U0L=CBj1uPYZ%w9_fLBmF;gM1n-1&Twpg(v3&2F zC?Eb9^=p3w93OM7ct*!>Mgs;fV6*-xlAI5xiW~q3JBDhZG4I9TXtaNaXayYqK?L<0 zuuDNZ1!+(OS6@1y%mt?pSOrm2!ZI{K>`d=ji$V{4*x3LRmncUKsoW$T6b%=2XfIUkZ`#&?^!HeRb4#mE8;lg#K5M0}>8iv^@xwJU|a* z{`VIa5i*95&LG95hmh0RaOaK;r!6=zmO1|_9QzY{7U)dJhkxIRy8gKlFI*ahRuaJv(lnJq5I&R1l7@6WO1LntuUWTW~&IFwN5t26A+` zY3P0f>t#iqDhX9WLR0IOfemxaV5yX`iwMjNW{%zrMOo9ot{u;xoGuE`q#K`3{pHG3G$oHqn&pdB+{Q3U-QGX&Zz{fED?pS~M z1DyWre?oiyOTap8xdcQX5q57ogSL4*yvHC)l@NZEfq3tb`3QlqM&B8lNjQfHI5;C; zDV5N_bznL3wXt*Ca>BSsY>{$C|K3(I`W3MA3t;@+fW;uw#PT$)Q37ZfNmbb8oJ5uVY}*uR#O$PC$0w zWAx3S!8>#D#dUB4QaH!0K!W9HzOq4&Fw*YLVXc!{?tqI2@i@LWG(gmREb?-tG<*WM zIhLCs>Iw#tO=0kv6Sv(o;8vqexv+Cz0Wc}Ncjo&=*;!EO?4n{Y=*@)A$JroP3Vjr% z1uM%0`%5FTa8%yj8yh)v`hJf3mM+v@u>GR}0x3L*ocG2jAVqB1I01{(wJPd_m# zkhZqLcMZQIrX3=(&zydw6*8}n5|Y8Uj{2pbHl|c?3X+)TVrRNWoDN43*x6Yz;eem- z?ooT09Z|rS;9GpW;~~2iyZm_m|J(6-C;>j?1l*7E`vbrGSjHa!rb)}8MwDL!T4uD? zhp`m|oaavUzoMv99n4#Evg`@5(^d6+j&K6t@J_}|??%RSr|d952p$s`NAG0vn`JNh z%{@f#p$?|FoI93Nr)Q}W&W4T-n%t+kAT;#M+sgB$ByntV9-=vF!@1BPz+GJ{Y7wk! zG|qvu%r8h#wJ5svIL|FgVDI$!9F^S9AR?$rr{Q@wOjDNjapMkGXKbnxUQNm(j|t(7 zw34yE4+yf(STh2zq3N&5F(BzM`w{F7c_H*KDdSrUJO9;aBRo&RTTqO)z8|gezia&8 z81=V?)8G9mF8}c7uqBoCI{N7)VfVVDLgxL^0&gqa7N9a;uk#UhX8Ed=8R(trZ&F}= z2}ia-k4K0}?^eSur&<~SN{#99*S1`O4v^eWRp?~nl554skh&Jo(#KqZn(08#ku zbJ+L)4E_8J_(#7FosY;sOn}#-0qF!F9nCNZv7(V~61>B!pd8{pCO58`ltc04EYP5F zp7-<0s8STC4=*vdf?SvRbZpfwdkqj@z%sq6$Yw?~s@!AH9JY33>8-7f^=ZfYyaTBt z)p(LJ3G`s_mAP-NyjEMugQyPl6Pp@&2l|asDz}6~A3%;R7%+Zc99e+U7Yrj!v?v?_ zp_4HXg3iy9F0kUmF-XG?&`Gdci_{08*BCq_moTyxpLKURjVFULBZ!w0uvOHf`M{H2dX_cv<1;)A=c>}WWgQ(!0$~b7Yr2XEe}r6yT`{d`1kFizvgdmb$lKO zKpOn}hCg|rZ*l_ee_kFR87LLS?|$P;{_p~xD7D~nB1M(Kj-#2Orm+T4Y9*mC^Gwbh>_(mwxJq>7BU(U17%W|o zl;)~*C>*hxH1@lI49&r+#4S3q;1GB;+z}y8!Mw3BHL&>35VJqP;ULf#gxd#>Wz^&+ zYCzfCqQL0_z$p+^r|3So%gMvZ`d^x0?Z#$2QC2s#O%YI{5~3D_fXS9aW8}|U?%*j6 zs6HA0noNF=CQ50@J#zg@hJQQ`vkpfA*y{Z2PT}v97=L%i`t%n#{muW2Yo;PYjjk1 z%jZsz9fP^4`30{)3*`8iC4?8|{apl7XXw>Cz;X*}o`%y|DnN=mrL(QTBLt-CU@VGs zJ|N8fTUc3(vcft6vEJ?uc#fMPh$?`0$Qqv=V*yZ*X#MHmqTW1(fAxU6BQK+rFpwsGl$P?uaH>@+~k9h!cK z3M3C^r zj(B|~Jbk#j4&t4|dPiFq+&q1WM~@%l0zfM_;=-Q5NG7v`FrJ3k!@4v&1mL8pMI#ym z%nYYnCgUDGVaeZgU^-!4S{Sx8u2FteWe9+be7krE+GM#ICouH_h+MdbBOpM+^{UKm zTSUz?Fx-fGcf7deMr$#t$NPgN&jv&hn2ARV-qhUU_g@zNZaI@_ytNb-ED3Kq0Fd>c z=m7w3Yyr=Wz|a{fnF!mhtM7Sl5$$Viazp}Z)BzU-4l`wYA=$8Ji{@()$&$WWNcsyg z$gRY0ME*PI|Kl3}-f{lXU*q<>{~3O{0m`(iyB{-?KLYBNl!k7!2BL+8k=|hI1v(uV zUH6rS9MP$AKElM=xIh#(TKAUW%)yy+e#p*klmZ#o=#j?{3_Kz>gZC5mGQTN$p`+#|3WEZP&p zqP=!H{n<=R$c=%qflWz8NMKYesVEI{O#?)u+gt1tw=vuYg&c%=ZUgMb;N8&A5`7|w zD99}Ax3kduWt8hESB0&0Z=#%f4%U2klv&2w?LEe{vad)Ycj(+l++yCq$21!|dll$` z$OFRZu#;2h=OAJDvGEq-mXF>AiP~&l9wYq&bx-WfKZ*mcKzr%%wTE+JfocS@aJHQU zMXdiKC{GmqWawv}e3{rykhP1l5fAf54Y=s74f)LV{iQZ-e4 zfItq1h~Se^Z19lm1q^Fn!;zq2DpO&U+Kf;&SYykUzu^U2uWX+TEbJmx?+3b%fgn!6pIV(d{vYZWkTUJlnOkV z7=@kAB>iQcd~Jqh&GbYFf(*FUN9q6&WI0!=1Dermw+I8$vEhXmJY@!z}h`{#XKar(}m;N^Gz6G$?R zZhTn^Ap)Ha@ZLsq9w{>sf%O8r+yZq%xq1hpiuU}2EtCL4$S3mm8auv)k@pUn4vgS+ zfd@S9gIpLa%8^UIw`}&mOYVRa=IvpD9ykp%0JN3Y;oG&LZ#n#}yo`okQmW3m9>%D# zH#E_Q$ic|rQ8aS6r&5@ocjriJyF&=v!buF-BnRyD0`mPogSA`eul+71i9sjfRq25H zPC&qaL;^e}E4Ir@PL6vSYt(w?v>p9SV?z=hsjuozR($wfy>+wku1-2dTo26wg+)@y;^(6QMFjGz)C z8#pb%oqhoKkJlOQhl1z*^Uu`SKXiN+RRFJh><#=wM*mau03Kf-@b2RSZqEy*>X3KD?XMPEJyS+WX1gD2tU@WBBXZIGj@-;Uj{ z8+W26VNf>XpMmfFi2t>bzZp({|6lOp@4ks7qZuRg!#PZUD2&dS5 zM+CkuVFc6qL>Xah+bBYIc;<#n$(zQ{*Fv!%4|t!y9MLpDgWx?JfvM8LsdMxR$nP4j z-u>9c02v-uWm+M|m>Tj5bVK{mUqhD#)7Soxgt(l4Z*l^5gC$`o6ha50D&a`;p>IJ@ z!_XHKY2va{R7R?zTnTVy3NR5qcsLiLG}@8Yf;ce8_rPFI?19_~YtX}!Y!S6O^ZF_q6MiD{nB+XBC4(3TM)T@`oeX~F`RGKW-4`1vlDzCB=K?+)|7}qC znbNn^Ig*+0fSqG{L_tV?o(Hml>?@KSs3aF31$r&8XMJleo?mH(b|b+L@SU?p$0a!@ z#D2;z~<@45H%PEWzH#i!@DL#uEkXgsb13Rld zB&z|k)<60Ih*l~FCd2PvQ#f}FdPmhIpuJKmMI(qUYw8Gd5;vv zkpe;MnT9<=L_u7S2)#2Gz#2)4hetfOG~O*7zjQnX0`Pz{z{Sq)o@Oz(eJ6|)DXG4q z|Lkue?E?MAzkrl^14UkO>`8&?#HOadV21|W$q743D=4eM&BdC#UIgV4(}2tK71kVG zdKf%L?OGTB*cxb|Nr)104Y`LC5WW`>&Oing!g1?S0_+x1`fBh6=mM0gO!ZZk1N$V< z_?@H_Mbz}$N<$|O$hAO^g$}@tg=5b(EP@~wg53pot#!HA!~h#nJ2-fMumu3_fGiG~ zw|z6EAdxs9cKCG4AobvG;HTjtY&{hT-R5ol$ylBXk1viX5qap%dkS7z|=y z*@7;QJ!|j`a{3*Zerc<->nO_r;|kvTxNqM+uED?mS)c0otg8Ut2QRbVO^Gh9t)0-9*CzR` zsUHAwK#sp|8ReHS`fh9*q*3DMf|9Ce>M&#Tp?-EaCUhTIx%vdCd%txmd)EW11?S@PH9fA;RsR&yq}*h=2*M4 zOh{xz`V!~1_o9Kj8%IWN{CsW-={(4A0Jii3kM#Ly=Ue!5s=VGQ{~pl4 z?vR0fW1m+U|NBQ@Ry_Nwe~+8L|8w-4XDD?-dGzkqX4k=JInqkge1u)ju+DtHuM1$& z_$H$#Lv%u`G=NbW#ybBn#?I;!`hjfVlW@EsZj`3y5zzmJ)8=SGrx`L|!`Ia82j_1X z8?ip-bD{@#$^?h(@DwK=yQQxGQf?r-jt&uO|j`sdPptKe8jsG6yaD~){e-kMXVf>TTFOjkWz;Zi}ZKgZQ ztSB=}a3^!|R-!_a>sKa+&N^DYP3X`d#2hRYDg1REyL!?Te1Y7zdD+^$RzSS{`dFZ|ybk`~A8%{)Ul$C&jZ^Tk zj?cmYc-=)j6#cgce)qaGz`bSg(eMA~|KuzEfBCmlSQ4Ba9MQ32B#h`L(?vT#WhtsCmZWIDS$Pfq^KQ2Nf@^8YD!R4~kQ~(WW-w_uD=~QGXAQz`78~n62Dj!OSw(RbxJ3?uU z-=2+ldLzFgjsDe9G3_+_DfYv>{vP@-Rfh2|x*-7fjsN`_b>H5&1Gb#-;h+5*oPP8j zNGUjc`Dt$>9VvVcZ+?68dLp@7WuT__&F$hYJz5e2-%mK0}?2;0a9$X2QVooXp1 z(iHJA=72C&mZ>8^nD>{oB<1e-Yw!W~dI@_(V9yB4BKefV@(y@q*VF%TtmH}s_i z@i!vma4HNLNYlX!?k~?OE|~_3=StBY4zdG~S?POKrfmR0IfS!*>#*vmR|PsDjA0nf zFud&rHmTj{_&gN)I^ZwqfVyF;Hszoa1TPqkb>M(6&W1u&HY2^yrRPwGQ?uXkJ^Wf} zfZY<^u@RB`7;~=GySC7F<$`(;lxs!137rJv`EX2~<&lDM@9DDyC&9@humw@pxam5$ zk#H#$@dXO{oFeOuS)~G@%U$d@KwD&Dwee% z<@H(07Z+Izy0ZSYwKa4AfI3e!R_1`xd+zQO-;jjc9j&b>rE*axdp}SF$;Bun?e*SZ z*3qpKb_;bp1Yb`cZ|bpb=h-lx}QMMzud*fI1OQbQqpKT`^A` z*N-ZVZg2yVSh%b{AaD!l)CEHdw|B>~5{cH%)WS5gSr6b?8`AUGZJ@z981n&fqqsRc1!_%;RURKk{|5*Y8iB!X72a^1p{7|LyZ$s)R4a*by+On_ zqZ+&th*D=?O6cfJg2-Z_M6t7&B-$@PX3p#~^m* zIJYCA;Po;-pAM2i+BqEZGBiC%S~b|ypQC;EPcZ%7zXT3X-s}YIQvtYJ9!L-&Pyllj zE2y?b(QYno?rsk4iqah3mCj;V_;oe3Qx9V%=tx2!0UdJkVhq^+l7`Eje5FY1DI)R@ zXj-9^o(8s{l;Lcp&Y55;F%&w zs3N#83>LWly~}6HT4Q`yF41thlsyJsSFPr+c%J`$$Y$<;|G7H?pBDmf|H59y z{@?Qf9=gE$KOgk8zVPlN`JJ!-8vgv-KcS-8*ib5svqu*#73!x~3U$CRq<4i17y}N6 zIm+=!XsC6V5GvJ57(Yo;68%8kI}C-*e|o1f;H+qC$8uf+O0PIxDN3nWPE=IOnr0dv zg`wlcixnzc3($-UNkVp@JJyAy!5Xk+>!C;(Ik=Q7zSfa!p8{VrMl)}V#TdDa%_d==_>px#8l?EQS&oWcFXc2I%t>M>vzsRTylZVf1u z{q?>8jgF|ms3Gr6BaF>9?uVE$t<@qO7D&PPPA$;GHT2PYyoQTGDv<-q2TPt<3>q2k zWOtKQgXa}dr#o-Od)J*FHQ9LObxa;cuqjtwg@0n9@r;^c1JywQQEutV(!)*+5~D0N?dK|ab(+Y@5ZG4 zL>19&#N?p?;s88gZtqT2zi`~m0d$MDx-2hNu!o38n#jAOUxF(U)esOsXTd6%?nCr4BR0S*uFfUJIJ6vF(aPbfF z4lovqM8(zG3|7M6XR@ngJK)?4xVbt=KC7hw6G$M8yrJ#)^mwE(SBdVNRZxqfHOJ|) z!Dr838g5P<$61GAHZzn+1vt|A35dVQNGlhG3L+^l!J z|IPm$H$V6*l<63??h!TE4zbb7h`B8r2`-3eww%!~C#WiHxh0$uI{sQ}-1D8mOnrPQ z!}8eqCDKST{|}}Tg5W2mvXyV|G-hRroO*n&Zn=C|qy!4nm6Ap|_pXfGmJ85Uaua6C zWn&E|AnHD~5)JUS@G}$EF%KEsH0(;qx=b;+Tgqw}{(DXV*V4{mC{gq2ot+HhW=aZ6 zAnNGFF*Fx;>4E$@cc4H2IqHx80xdWJe0#p~Rt`^??cmvcP*G@MvsALmerG)!1DW7@PsXhwtdYa}kly zGzi{;Z|?zQbio|t;7CnsN+vHmCm_}(;#!g)0bylXoZC3ypz^SwX3MKhsE zHdI1+u>$fv{7lqt`cipd;=J;BmBD|T$3u?8XL5WV-2m@j=tCTU{o`%80B`iL{^%cn zrTuUJ?yqWZhIPH5XoY*B7cWsp21mP`VBK&$Ua{c@JQ~d~Ct7L^VjfEXi_~cEX-GZu z?$P82Y$dEUO5zL@a1o)xUgu&v947S2(w}u{c+q!}N)BBpPzjhb6d@aUo`A!#;C$N$ z`xJ0!jT|c|m=k-|kRr}M%>_{iC>I=O&KY8z_t`r2`X!8Ut&9Y--oB8R zAn9D>MhS!?oQbjcgE%W>w7~lX-2F62j>*7Er-A3;-5?$%v8g^-G%hPR2U$Jf;JMK; z@W`9RcgLw{Cc7P|g?b2mk4a*(hc7Enq~sbiXuklJq#Y47FQW5 z%jA3r9O|UQCde{!-4jr+75!{%b_4!fioh?9zLLWuE|A$Fs%%{xyRt_VtKqoxTOx<) zEcew|b02e397HN&{Id|nJr=IU{D?ikyF)@E9I;0M7_E)VBMlWo8)Lkud1L^`M;PF; z`+oSyJ9-s5QnpQZZwB1>pcTORJ8$8n$~K?I*9y;jyT)8fPe8%zpmF;GoHUV zQJS|I3T5zOudsmU8_q9Zpw^0MKJxb_Fz={Z;ob@13TvMY9jffMH!GND6vU<#L>>2t z*tw%50TIPV^j0cYvGqO}#t4XgLr&8PAQB+T^1bH=VQVzvy*pZ` z(@>&q>EXaKCoK^XfT@l;F@jHzf>FE^H?qu^GrIsDuA>xnLK3z3{wU|{eKV#5 zTHj8vOb5txKtDZW_dO`GYK0NJ(>YMKtVWqBgph3gA=;qO`2Z==`09Lv5ppHzFVX=N zw_3OP6<(bP;dV)s!W}RfJO&9gAj?NK{$4y$iZqOp$vW|xZ3Qy5fi%$hUiKkiA$mtl zl-)|-?RVq;g%OG!-{tOW_%dG0`pdsZEfxCJKLkn*C*Y%ELF0Fxw@Eht#hvRpc0KJ5 z>x8{^R+OgbtBH2?67angMzOAia@wbWr@?4g3!MfT7smDMtwV>X29In$W_=?TGvAJ_ z8Yd*Zr3th!7_jCzf4HK|1v(4r6JVo!#FI@WsaWZB8CP&j4UGA^_nmSWi8J=vNXBn$Q>IhYOvc zd|kVBpo9t{oP3KSLEgM;fOHbn$K`b*KzrMD-#+H^w?)M78~=|u0-yBw)DFOo2>2@R z=Ao$nRgZ_#00~yT_W1G_9_!b?@*e*3`7MpNcb3;UWo}EYXuUy-;P~j8k#@hJPDi+R zv}HlLeuR`jm4pYAywnZrvZ72tt##D;i<8J!6_8R`^B=Ih7D25Q-7KU(S)Ow^R>JWM znbi)K3tFrIb4CpX0&~Op)V9TuFliWV0ftt9g%Ma+YVRKoL?-|$11_tf)Cq@c<`>t+ zaXeDHfNFxQV)6(VMJ;p!9824_ru_mm0BzyIs?)Fq0D$Fec)l=#pJ%26sDI$m^I$W8 zW{&fvqo|LPz9jxB4U?$)=9|~_Kkh)&Z^xAPuoui0PFbGxBmlv^__15 zwGe7HhZK&DIEI1M`3h1i#eJ;PK`1k<-$3h;(76c7fy*gMvjkEn=Hjg*3a((@piE0?A1a8AXxZ2p&Iaiq$4~WCXi8*^28E2x|^Z@{O_Ri0s8CznD;smlLvVLviFP9X_rWE2-E~R zDcSy$p_syEMO}jr)Ep@6QG&|)eRrnN(%2C><9N{5qc%WqEZt*U1PT5TAl=X}j6}(A zQuNdS2`4@~9%>cV-FGSiq8n^Usb7lY*oBeq9e=cdiiL$-saywc5%44N2Vi{6{eNTJ>&%!*A|ZPSUjUitxQuR-o_mT#sbk#BX*1@WJBT*H zLhb*PqdcNR&=-SDJonUU+2=gVBSpDRZR|H5_nm+@MgRAmfcwtF-Vyjz$7g~7gcI=4 z1-=UUU*mD#_&-z`aQ~toL;_R=|HB`B9e?$mpU^9ga-rTMXKx0#hEfl}qye7;?$lY= zsc_2>AB(c6L^+$H9x7~Qiz_O=1tA9x^p3R~>SQDzi3I7*(OL_m$q8;AixR+c$;s#> z%UO^TLzJQ?>}G~(s*u8xx}eHp5bshfJD^JmxN2=co%rpg2o6EsG89O36wDU8a5@c} z%3nl59#Kl>)^fmyJMYl(Sri;vn~y34Ex?l}(KyJcbAWIHAcAQka?(-*Cm_FCqS;U6 z{YtsqH7qeb|3o0)Ur4`#wJS%l`mhFEnTwGqwx!;iGGiqCR>D zu#UEzA`f3->zR?^bcnHx6j5(+5*jdg5C}!Kw1QbWa-0bP{d3a{s9e(khP-e_WFS=R z3H`@?WTe)C^+cn+vNbhIg-99s*6~QhrA|Z^qD?i^1z|u-Wh9=0LovvnIs$3@mESW4 zxHl3MBQ@cDC9<*S0Ho7^NO(A~FHa2jFV3akdEXEg%H9F6AObTb60;ZC6_mb8NBha& zqFj9u`p!Q>7UbS-X4eZR$zTEKeIak2(VRc&IYqtq=eJ_@Dmuf7|}&|MOe*!>2F#3&FP0Ds{Kr zJEr*nH$$x@)c*uE>a)8wNN*5Tl=%P(XaFJw(}8lrlI4Iw3>zCY98)dK|9dWg&bwz! z69B;JhLWw_dPE!~yB4D_S#Z288sl8+(yoF04nN z=Mww?uGQ0NOB1}jZ5-r=FxoVxrj$Q*cNB@HLm-ULz%({g-4I%LLpK@ahv|4|VL9O1 zxM>zaa1NY#dkKC*d?=xJcjn7Q0qp_LGa8}Mx8MNi z$VW>dfzaEE(fnb)eRLsGIYf(=76 zxD4(?emN4(fEXlG6PV-sFVT&X=kI-m{qQfKzx%J)MKDQlI?g7q{%%TP=PYnNG1}Ft zD3Km(i$beWBLE_`voz2FlwJVu%p<3vi`sdEVV(=gqZg(u#f2rw78)Q9a1gjBXbS(# z1$yLpTWWv^hLO*-qgJ_F76|@L;@aG4NF~G%`XYDcgQOvkQ4;m2k@ta?dWZt0&VFx! zTKb(K+>E_|V_Jz+^a~BV2DmNw@C9O^H9`1bilrz~|Kt_)Sj05|8^x zKt6vJ0`Oq;pU3Zf?aTF_{o(K7KYsJS;&S_9Y%nG3HcJgdSO#RO0bhEz*js4S=lPf* zV(fWArisaxh9%3?ic$jf>d^t0(}K%sfrZ#gb^v2^V^|j(&?F~+z{}Z+GRhD{l*pjc zTW@VwmJ(55seqf{;uZ$Zs3>cjgzyH=&;YHCghGmP_~yh%WKwGICVYd-EWWSCtREhJ z7*Yovh!*IrJNW{ag_5=!sD=cdng)AqY%{D%Y2s?BZCEG2K1G)L;yIUewT`R zxZ=27ZbFo2i+H`QL$_amktP@nMxGo`IK>aR+wL}`4uJ58W{ckphIS5V-aJQG9Ag+I z9P}t@EO3yd2$Mi5V#Xxd@19vqIA1iRd25BFlA%t_^Ny%IB0~4U9H(QWa2Iasy9Jdf z$^AUe5I0IBBGxy?HSa>%(2bQk6Z*9kqb@KGyM2oGy>FuY{{IM>4oH&Reb4dNzW@Lr z07*naRK>tV0!EY!jI4+%RsYoZ(>jf8nTdK;2W(c@sw~y(e2quM>QNVON@c{U}uIZ(NW3Nq*=BH z0E_{TuW_w4P!G_!Q^1G&rYL|(V5bmi(okUSca49}`Mm`2J^Wyd-SI1L3jRN04`1g9 zJd_516B7QJ9G@2g@U|Cw9|3rX6OdYavBCko!VxH{_}72<8}0x3<8M`j>K5GLu7teZ zk^Ru=6&B`smj&x`#?|$s(CuGQ9zBYE*N35J^%RXbbL5KRTRxS>w;{!U^1T2?WSR-` zbgF5ajrluC&s+FAfQ)O?;eaTzqJimvmoJtO1ObtPur-Hc$^fFiISHe;9!85eYCa`I1(5B~a3@a+44jcm??TAY*Gl6mYqFla;9?U@`y*HYjj}bUxHFb_kbvlh=$a9xgbcXTI8TgD*Nef$MXGq26@thwcZXL1 zEd;qhBHra@#o+VAo{^-u(OBr>1Z2V?v~DbSOLfk^oi&`1usX<1QYDvE5WN&I>f6Wn zcsTf~&_m?Sqi!Bkc$raxxWyK-x7vKVQw2=q#+s2Z70RfN*grZ()IU-doqKjWQ`QenV6}=%ld4?lh&$&loA7*sCFY-|-6*4quwi z01kNg@ZHacoPbY4ivRz(d$(pww(LCU8*|Rgwf3&6bM4cot(L4-OGs+Tx>*vI5GW)h zEE!}R1P~AqIC$ZK7x)J}@j$=}FMcuv5j+54a0G;f2o!`QhmDMNv1RMlt!v*-cc1Rl z=TcRBua%i|j={q>#>`x+)~-_>I@J!yh*f*n+Ut@zbIv)&_{KNBaq01AKAsl>uq7^B zN&##i=V-td1=x}xHYVim<43;#WBBl^FW`+g-v)H?d_5uidOVV>r}Vx{DJa9ps`~`i zyblGttG(x!>EUMqH+GKi#KcpG-O?HFmebSimyv7Zf>B>Wiv}j$U8VM%+>|5u_58G2yC@s z78}NCj2Nd;GCwcn6|x=*u-`MSusF)lRIx0Kj>-@uKVUy5Z|);5^NSOve>?(yJT+FA z4*~Gr7ybla`JMk8S{IU{-@&w~)nG2PVn15sVFy@}oM$8)B1 zX#9Mn6uvUl4N2Va(n5bvNGo<7R`}Y;h%^@J#J}g_4!5q?ozm*$`V2)}Zyw!psP{@3 zRz5-WMF_a551+-P8HL z;y_8LuTdxyY)#4a@f^Aopri~Gpw118!(^7|Y_pzSP?eT2!40DTaJGNv2W(PqB>uq( zg62k9I!XZmD7+nQQKSM__Ddutdk$S#V8YU9=Rv8ly>Q+EwMy?D(ETXC1^mSW8#m(c z#z$6-<#ax#^Lq+;)EKS%bLx$NB(s_V!QA%`U(Z!U`4co0N!2U4)rl+Q7_u7EGldr{ghAsSBQvsKpfDiQez#M?SDL(1_oI3&W z^V|`5ngeiY050zGuf6i1{LuG(9B=;eW3*)^i*DbwE=nrCP*{$%EaB;4XT#E2l0(7CJNYVtDUi1*-vkpLR|`ZH93q#6ONnc6%DpoCGC#?mrs+ zq}3itM`)ge{^N*cJl{OTo4@gkm><52TwF#FbO77&;1O$($h@z6X1-sXWM|q?=UYgW zvi0b^`CS)RjP&iNE-=&{jjnBktw;Hi6JhkW(CCB2)Ibvif|OTy++535QpPqR8TYL( zlT>K19R82IJ$L-(W9AKqTJ`TkcM8J5cBh5jD#eGATbIP#w$})He*gs}uh4zhT|K`s zZs4q~#+Q(l-?c=kWfwuR8dAkrJ>Ty9`k00%&|x8gg=%YT=uyh14a;YL8)g3j(!Ez! zbnB_5fzo}9)d@&I0rTr6Ar-^0E9^oiP1>YZn-bz41k!|}IO@GeJfFsNB*m@9F=IYb z$6kE*lEH;;Y}F=!(6FnnO`1gEoF!okVlVk^v(hOaQ=iWpw-C`OPi8?I6nPZL!0T$u z+5GLs8AKkErw}rbyalfv(H(>?t((%C#c7@*+_4lg9D?5cFvU5opVJNst%mX-_j5BP zPoNzd^1Y0_lkV`O9V;a;f#dH@esuOuo4%i^nFCBw*$`fe@5Nbg{Y^W09|>TrBlEs? zaD5mWTVp! zQYGZ3TEXovK?+j>b)Jz^LXr`y3Y707nI(lZULK8^llhXa`F{5tx6ysygFUjU5R@T9 z3ZeaFi5w~epJnDkOdhecW@r@{MlVB5lmM1c*aD-?lmulIZx!4COQ@clkFRgl^XuLg zbeZT_Wbb*+n@FAVamU55%)SX_u-hTv&W1Y?3S8}krG*D$F9QLz(E-rH4v40$E1EH< z&)>(R|VWe{yn`CljF`ALMQACzy5#X<}06vWUBg=-JWyA6dLyu zAY|?DTh-_MnzbS7^Ce*V3m{d863zO#*`~}*HZ|_FXN^4qQbF&QhnQapEY21;^4^+y z1BrJn_4ve8kj5Qg>b(T0AZTrY=>q9tqB|O96c-Y|_L#K27Clm188Yl4DLMpyA_^N)IMFLAJyCo(b$y!(sfbCkjLMHk>js(z;A!b%1j6_RQh5 z8SHoi{rv9$AO8_nbKv6b>;c5;^D$!X62T^H_dAdjs4Zb=8Bne{apNNePI}{ciFeOb zC)24BmadKaev~M7f}0qc0y*TQU2!y+{z-)O@STtY1ibRz9fl^8(U0Lx>fzt6~H`tDWVZ$rF_7r(WA>>EFn z{`j+RAtAXTD{Brv2}&A}2PgGuL#q`z7vwZxns0zSV7J?GaYLz=#&7|x&D^`Zw5csK zNC4xk;yU1cs>=dx6=k<)6xkHDvV=#MirSjP;~s4%dhyE~Fub#UT^l@Q#}p*|2zA7WH(>oSMCz<}y zejgByPIRo%3PY4a#(4T8CgC=Ciob(-a8W~h=Zi>he;WAkw|7r69Jte)iPh-A8Sic! zM9Bxpg(ZQlDpE~IRZ&J}?ahP+sj$TG$`y9L_4)mH(aCR=A~;(_xCB%HZdo1XdNb8e~_nyUM7u zA@4co>P;hhn+4^HCEe}d=v4t7u|QXh;||by*xetodwF=801!44?P-Spu9EmILU0KI z_&|^6;Q+*iC!7w#`2d`A0A>)NiQfmDIssjiYV-4=BXIwEpMLtsJ|TbdxxZ^|o{%MB zsRxwZHAW|5nHjxrA)B_&llQb9aR0?um~+g6w#=C430DtZWI2_Sl6tNd!O#w4=Uw+e zhHf4bOtOn;H7xUjWv=WipA&%Gy~~s{QqHKYt}vwo?20wtM}ePiU^uFyB5x3YTiKSz{V3exTxHXQ)(Pk?~_X;!c$o%Xw9>O6r0 z8AlrH8Vo5yO_B#U;?DSw_cYI)+nJ{oSJ)f{*&-mG8h|?n5cNwqNtIZ)WMSmN@>()J zN7tU$jf1lN@~{GM{e$c|{Yat7lRvxXw%%8kE2_(Dlc!MM_$0~;uOr=i`KggcIQijQ zNCG7K1E?^Up5Unf7x5{E48zb2br5O;BtYHZ7}V2CKvOzzqJ}&a4;UEDs}nP~8X)G{ z1Z>Hx&gA#AOjIZ|QK)6|4g^#xHK2h`L!>~-=oh3gs*c9=tjfmufq#}{fs8Esiz)VQ7^8-6RPzPYc0|1^JfVLSVru3UJrD^z#6I_Q(Ii{J;P5KN;Tm;#ZwL zpO8DdnjO@Vc-|6%{r-vu-r;y{%*B?Hz=T_csUVFk)2XeYEe)j%NZC7;`DvxZy6ZNv z1hEVwAclEbaGWN;L15Ltom?@35V&VrL1e=eIcKsWw9zzjpMnGq)|BsP5*KJ)i~9*@8L z23zXxuSrreqi%mLX!F4hv`2O>3RLz~h+H1M!@6r>dsit5d4CVE2Afx=GIuf0bvn-3 z%RaR+9TeoY4i&iZjydX{jkUR7gX98~fyOzaVt@TQ4*VXGm>Wie7gY&?zBsfV=VCsO z1aNqq2B>>j2qQ1+IZKRoT7RYtlo8Tq*Gt$K;V@VsCgjenz!8k(eJNB|@?St$PekE< zZOzFrC(*r+Uly+KKnon%f}tyUQg1{1x!Lg%>;FS z1Ws$Jhf0XP0m}_FKu|rBH=rfw4S)y)`%k#D(6pPFVQ80!1FOqWi>@>89K8I;QVNzBJ3+8 zB#~ET8L-7rj}561p^5V~0a_)>_40S#7fEt98BdOFka{Woz2(4N`uQ{j`~!Cao@W{0 zIRvtG1TGQ(=Cj|&&Ho3SmIPkd5l)ZSUU^V{>R+<3= z47-HmZ6&#E24LL z+A)SA?Dp3o{sd&%I0M}=*g63l19(0Y{g`gv!@HmPy&lDH4RChN2W^#U8el_4Q>0-B zxZzG^=#gnuQs_qUk2|D7>k%mx8j&7K`Y&#Dsh=4XO6lhVkohkFYzbY03R@ zZm5G$K1?*F+xUi{eo1AzS#lVLN3&K}QV`z{IMJ$C{i z@cc-C!08EJ%71L5|7r7cn+Di=Ljx`k#KqlEMC7mj)c4K**RTHW_@ytu%LOBXl$iSr zMY@#54GeYr8ND)c&%*%81t}n~L`Ha97KiI;R5=-4BG`fe!^va{%+rLNxxtp*K=!FG zQuX|3h!xG#+zlr}tILsNxAf#@p_BH2&=jq9*;@ennLlXki-gLEB%e|7mwA^cppRPN1KoM{IC5Y>U4nVg2P*1#tYx@O??8@<85cu z!yJlaVjq?=mdEdMyu+{xHRY{V)Z53ND^w?UjTHH*mHNd2Z8&Q^Hewm~3}WX4f<>Q( z9gSd{`_3w5WUd|ps|!*dpq?|oIPX)2j91*y$_SCf?tx|3udl=Ze(&jogkOEKh*l3P z#CPKT>XAI)>5Wi2WO=OQfog}qDdElyJqb+0Nt824*QR8$1d_Y1%lrUuXBIgv+W0}`~_XsFG#13;Kiy$`$;C*$<8u}xVDfSfb(Adr@6{4!w8 zFdY})z-joc8OHs9oY;j=;d}%mS&-fN+_^~!3z#xc-z=LOx6nI?K+!COGPuJe-$~7# zg_Kyj7fOaPFlOEaCI0U$@#G>tDT}xIUAy{4y?^$<#Ur}?1tNVS{Bs@=+v$J4@~MA> zH-G;(Ax4SV7r*J_DEmE@o5xg3tBX553EC<$3REksRt#6yt`QCzi&lXo(7Hg6k1*VO z8CEOW?Rywsd<{{Pn64i5^hPQ>Sk%V5kd)O;!V+${cY9UV-#L1Z(=w>r~3UA=PF?#20f7^VKJ7&%!kTk$j$fUc0$fA{N*3-75P9_`&PBERzn z@cPF9TSb6QoK824w*9|^k0Vq9ErwK-sYRCzPFW=n$=c!&w|K-V%ucKCBBq99f(FmW zyAuFom4riKDYiMfk;cU4N#6g&goH)|xfLeSXp2O`xbPle zWuV+=P}gRkKbhWo z?*`co2qVf2U1oZ@gO?t)2`L2>yhrHOi?QKJ4vgB%n@knf8irv+(?%w*d7DlMmU(vh zVM4e-g1RwgfM>p#>0OH$gzP7e#G{_r>(sTPwFNhi9OAPci<2>YY}j89*j*LeJe+#< zR$a&@-i-ss-QfEz;Xrl(;s}}oOIzq5lr^{9bk+0DC9$Sh2zeqIJ0uR=fmF>)D5dWX zA=jId*ZqriE&q6qBW9AbOaFSW^d9}^Qv?9ArU3eJ!6lq-AL9$Z^ABL!FkD}w9gk?s zg0@V|Z_2unniKTY3~f3BbwSx(K@y`~Q-#(Asjxv%-raY#Kt;KJ0eRfJffe6mooLxr z0nrVTEmJHQ{@)aOyy0Ysy7}0JyW{8=8Fl>Ii_e8D|5jaQ7;BVniWBi3#CZE19`+;_ z>f+~_VnE>anvj&~m_!8aWzZ7W)cwA6a^C1X0)A_d7T1Ny?u(K~uRMqAR_1u0U($&mqg`UO?(%%zn3jwoBpB@1tuv|Bhkmp3ecwbip1YncG z-d@(Oh)y(YvqDjO_fjbtobiHHgXGNJsuPryQaKNB!I5 zdFlXMivHiP4DeY{fC6kgmpmN>_~`4e$Y1`Kz8in*7k=Fh25&H1^}0*1GgA^CkuhJ-s2~@?JkKyw%+o?6RT86rRVWl{l|z;|d?E=d+M}vi zl&NWF-kJh+;dy3FUXRblMB)xiFwg~pR0w}+U4?MO4gYBbA4Vv27PujGGGGw@@_EF+ z4GiVf6+BxeZ~ehP#`NeNm>KF!#H7`Qx$1#@ik>@mr^1#ANfOfagEhnfR-++8&4@zz zv{VL+4?c`EUSWCnOFkWhDq+I-+{ORSOMlqf4Xe zBs+>S^w7fHflhT0Mdl++UBM7O{vznzt)gTwNPicP%{|fzee@RW z-8X>OzxDKQXKx`2;FC~%9wjdi^hYiU%~1e94Ur;Nh6LMX%*O;I63}3RwgBe63vAQ) zW*7>xJ6yH0N`PHSeK$zX#@7fm609~l2)--ZVzA6~gc-=f4-JqFdXQ2=9%a=A@QjVs zO}fO1hthz2MPqChMw>(3mWb57jL-kZJ;zo|H-)3%#`lJidytP~Np+ObJY@kxxng;9 ztwd0u0IK5nXmvK|Fr@I)AW5(sD%#R8-7H9BLK%49n$iU$fl%?pl07*naR3}jy-GKk$ zIl!h$SQmPbi%kcZ zjtlA%Q52DcTo@^&1gI*e;{sK~em_8xU^;kxu87OZE0#+6-WaQ#f!Yj*n+bWyxOZ>x z0*cMBdvv%ghT;N9>!{5ZI@FCR=>hZaCSi~6(6{)+U^kaf4Zcua>Iy!rdT zf#q<+`z1>sGf7_7SJGwzMO#)y9tQRWFhlPKXhx$Nxp1F#G;j&+;N^r6hvA<#Gh@sG z!VWJ+I1r(%=SG*`yEWi)iURaTLb1ym$$iba4Jp3MR)+-PBnfhch3HZ^3whx04$(^{>SEyx#f|Uk zn&4Qu9s>!F18lkhmZP8Bg1fjAaW76tnXRI}@%z9_--tZ!PmJRU3eeL7K8pk!RzOQSk=;%)JOUp- z>+;0Vh|UdJfTn)V0APZ=2X-$P=wvv!28axaT!7UBK<_ou5*zMJdTOLSUm%rEK%{uo z-zNpD214Zh7dB0U65bbKw66m69s~e%s!;V(?uC^Pk_4@>HF8^;_iNzPG-pwkD+YJ- zVIcszV=4iO$f!0&zRGAvIu0NH?w2oS-OgtaPL1|?x!)!E`&mRTY2aKk{vWs#@bw}A zhBuUPcS+!k)4{n*AZV)#@Jz=mFWxWz&d>cQ{`0@_zd=%273G9NFGJZe$1johZb*6X z#h_TGBhoHAln-t?1;}}X)+1CG*8ZxKt9&!hneS=Sj0RFKgySwgk1pbQ1Nux2}@jHWCDN-28{GAFsX^U^mokNC_R@6=lRH5$}Y5Y0DTMi)sH z!%zs*4+#m4fm;SraiuTcpkr1h7*rD$V_p9=b#`5bgw?=+^114t6(T-n=$iT`*D7RJVdI!sBMd9< zP(%(sUM~eegSG{7eB6h!*Zli4+8Vp{nR!&t=P8U7;zJRw(`cgzJLVO?h7tZ66EMfw>n1uleQr+Ma3^+m;Uu@+K z)w!aSf*~|O;F8&6!qtmA)I-B`pu;03(CQi>LNvr&|G-pH_622MP>+rI^C00J0sHC% ztH5$w>A&rg`-yUT@d7M!h0OBAdSv8poyb=Y;gtHGF!DZ|f3NtSNE9Ok#RP3q@^MOX z`UYPgT~bp4hU)?(u-c(HwIsO`X*0A&$DHJ8>m`M0AX3_nF34mGoei}$eC)?Rg6mgy z!9lxpoEzv%(Ela7cFFiZtpZ^CeILm2TpR%B0dyY`mj~sp6u=QIvly|W0Xv)yQg8vD zDGeYZ@d|C&VqgMc+MEkYx$e;h+4kw|>pW6mT^bFtx`9u{ z_a5!!s#YuJX+mhWo3N=205oGtV7i?EF^u~w#Fvh%ar8Va6x z8X(eut#`FvXE>uh;`e;MI8+<&>CJnhlrJSZxq;QB4CKMvSU zf{W{zuVI7BH~XGrSk+Fq?^7jX-++>WSQsz>oZpZb`OiLXaQ;JRC4f$YiD9{=O5yIh zU_P*7tEsxP#_?P~7v@XbH^x=1=-q)!~N5#E*ef5P~i*|Ko}E^z?1pV^&&r|x}U zU9?LYgk|7Usk(FD&p zB1!^Ni9X~s$Vn60JfSYP00iUpOa2Ws9J(y1OZ5PQwWi9@nWVX<$O@z~qFKYu(Y>gMx9OpH|b@r$h(Z35{4mRzt1RTqxGLxwZC(Xfs+|_;kmc|=%3=@o1g6+ z?kqMoGr-yYuuNlb1{o8QB$f&;6Lt?qv}K`~O^~ic)`&rz1e%DlhzFoO$aDj!%Mqy6 zH_A-}strgPDV56?;>L~SQ8#)4m4Kf`q`)0N5olvy3vv_^x**HuGvmFK4?Z)0B3-w@ zylgR+mC1@ub)uj6XL`Q9=lP9MdKdFC^9qpFUpKGHF-Z|`(YK%p%}088TD6PBV`TN^Msn#d(}iImGmWHE(fF&8P~E3|GUPGCGMI8PuQCwt4w#v4 z`Nki9P42&b6}INm@wCYQ67jDa{4?YKEG2*+`0?Bv01?WZ;K>0xCr6wc{OGeh_|JHZ z{wP>00-m`f5CC3(^+owBKmNV)KmGjQGr>K!x=cVqMM`A-!&vX#<{Ll+!~VW|`o3{^ z&P%PKRYK+@@}*w)U#oZIDj7&X8An{*zmGOA)Z6fKC-sdztLp%aV^5*7G*7*=SVnfu z^T?Y~?vv<%m_SrGnT`3sx}Xn>x_2+Wu}2gP7;bNlPS!JIWLFY247-GJ%n(^&GX{nU z^Q>$<658I0eaS6>N_nA-=1vQ9e+fmBZ;0k_z9EYR8T>TwAODZMzhLut`mL_Zj4%A& zucIx5jH7zP03anKRkXRnazjcxP9Ou+TP%tcSX0#L=wzXEx)E6e#yw`XbMp)_aL39_i%&WcYi^gENi@g!5y>IRrHHg&VmeVv#N||6JSN zMqY_ig9qTKMB99BAKl# z1puStr8eNvj8xdQv<%sO74z575fDc&WE9_rRztns66pbdoyedct_y};K0$7XB!ux^ z*KMBbk5CKLXyxrfNdPb(7v#}p&_QL^_K1@2 zL|Y8CR!q}^{k;)aukP{9f9WHWh&)aAKPJo5qW`B!-d`&JyNdw$fja_UPXxd*ruWqX zIClW{{#-Z!gTFo;fbi+w7X=Uj{>o4MK>eqm`h5PQ&%H&WpNsntj#8omsdU9X$pg%Q zwoK60kjoXCl3ZsXqa0GumWoKG(9$Ow4aoZ*|*Yx`LhkwF&oBIE%?8`d@8qSk=d{7WeN zrL+qEi1RT{jQ%r1U+;YGkMYhMpYAzA<%zmPGt)NIFL1tv0P0b?q(T<8FeRX^LL|E5 zIsDoHn70UaBu3m&#tvw0=}Ksl0}97#z~g#Mzz%p$aPtk;3#?8&MG<&kRF9fgqfay-uZv288xdrVi1z*3 zdih{lod$OjjE3JJNh~GUwv5ovkHSo?4`1^611pY<_&K=tKp;Kh&N{DOPaGmC14}32 zC4mN>lflO}zRiD|Zh-f`2z>ZkaA_1T9wK0^86)J*WpSC{Tm*T@NQL?J(7>l-WW6t`YU4DEH)T5+*O+37$QtVEkPsE|q4qH$H^A42`^Dr6P^c_g z_?rKnpQGd;IP}l*zcmdJs(>XW9ByVT%Ys@f<^}k+ANU4by%cI*7mxG6HtgJa)W1cx z?~=WLCi&kF68;CCvjcDe1-Jx}TuK96LIk#4fUPb-Ba*M3a@#{ck3 z>AlBCXSx>zL!Ao;kZ})~^$CTP8A&@_q`Hmx3QU-{Z7u-Bpv5IUlt#a4!#q#OY3Kwf z?oQIRPYe_x%DDi?V`mYMyAk{Q_n=>W2gkz!*3_f*1PD=pW*%gUcwKNrhz67lLqlui zCgdSu*bi8yO5@jujzhWB1$t}VqF8}MDa}9_$j((lg=0pM45)a65=O7B0%8d{IS(rX zaiK#=*zGcgA$gSV8UdXU2shHQM#axK@BaAz`4v3;!WVG;(hE-hGe~QYVd$Gs5bspk znNjk}kuYnJG$J?w);ArmW)Rj9=j;uAP?5(SpcS?_5zzSt8@q2$oWB`U1w;p!m)3>X znxdWVhS(|i4;gCYM{3rIoKZUtv@wmkN}8t~ z_mf&11e=Nq1!mU(NjW6WX;8I>gCF~qryyY@Ll>q_o6)IQ9naN>6PY>-U)5k$`aatQ zhyX-Sfk=mJyC9~W;OhPeGsAMIlsh+2Pr=um`FU~{7^hh#vI<+P2mp9G#GS+}kU_9} zalps^(nnODAm}`CJT3aaMEpB<0?s9X?==3;<9OZ(0PrMyu^p%wq`@Cy{EvQaBTmx* z;TS}pfUPD#>~_HW*otrcrq}UvKly#j-~Pql99r|7k;Bu{RmgzuTZlomVp)zz3WyBs zHYEZ>MxAc3%rk%lGhqv0H6&z`bd;WJGv@4TG{`X$?WpcYrnc4@w~yXKDg#=r^k7@V zbiCze;tW*?J$iLEG>Li{(OS46916fNK$c~N-b7Ga!!*skqQH<~jj4f@1O(4#_xj<6 zQRpm0vk)lKC{CJJIv|#y5NBXhvZYlLokRwtY^);4KrRVoNUra{Df5#R5m=w!*o>zf z%kdVEzVxRU?_DDeg=v6Fa%Cuhi70GYQ1*LRUC3HDflV_|3er$wpF49yB!?P z8;2WC{^mRlID~3#Et88S*%Am4z&Olyid zH!M@-Ufge&b&f(Hn|VkWb{U696XE{m0z^h0#yl^mwV`T-LUEjDeD{xjOzyvS^|amQ z+@@_)+jo_?zhCtKb&~*&S3&2VjR40od{YB1I5sfV}zqa5V3{ zc_K(Z{)69v&wuG{`3JxCr!Z^K)?EFsz_h~D3`)qz%+OkesiNxKi$Syr9fRqB>c@P0*^y zB~k|h7|Ugv6AYvEZ^SGj0%?k6ayC1Fl=vCe$Q(v&FyclzbBJ4PCONT^44&4AKr=Br zYYsn(qZ2vjX!Q#Sn;Wq#lDSex=6f1|C_o?>PrI9^$Cp3-hiEn<@Aq_Ws^akY5mL?= z_l$De;!&U(1)d}^hdK-$2G%-zFgGCY_Ul$Fi6w-IO=%P^tvVkOEtvu4Fxz~Cln3P9 zl{5d%^WzbvdWgJr99%ZnT7~q^YT|U)#8S8(Wy%^^!;t_H&-Zg4cO7;!M_>$?k5E%~ zGR%dDK|P>{N&dN3Cv?ABqMT29j=wYgWz+O0t*?W))`FkY`ZxccApG?-KuAMv92pTv z1p0mtXcz$WXpYESh%T+syFiAK&RUcWO5$bes?KQhEgg@xcy8OB3g-l&Ep%M!414f z-8G4#(v?X2%>t@H1-+C|5Rto25%79Zh#;;2#F`$BkBa3H(Yh(`d%In*92U-dC*@kq z@x*mz?(ms`t5KL z{y#VR?h`-bCipcRUk?NTxa=uiB1=SsAI3e5{dnPVP6XVd0Pj0eL&@pi_^BT}eDNy} zuRi_8TW-V%D@q!n%Td}g*)rWCje8&skRd~BWquZ!u$4#gk_T^mQF|Id!w^(%NF=5V zFf?xDVGPiie>Ja_*4RKebggC7WkG9{0_LI;&k<)f9|4WLS%`2La>+i!@6XT~Mcnn}@d$0d`j-zuT`XRQ$sGNnV#M zLLGo%%PA zYJddCNnn)7J1M`q3>&qsRhaal z%Pu9X6^yvu30Nj@zi}}h)rNUqfHHKY9fNgU|Lo;^Wz1NPlR^e=Y$V^%S-sSAN^>BJXL7!F6jR}^4~`M=bdij_e&_i z|F1Xzkp=+PK}%Tc_=5{juntTZ_kjQJLIMWR@Smdr&y1CP+n;}3{_0PB|MEZn!ap45 zr9qboNHbC%8L>-2U1pIySwi8&aRsf`w6joKoiR@br11&@lFcH@x12hurPj$K9Y!9^ zxp~`M000%%l91Kh8l(DD3Q8F;AS0EGwk)V^!LZ*E)~dB{_-hMw^bEgd{$T&BcUxP){QMsA@=C8D0@sC7(iD^>Vlbq{bY-Y2QGj zTV$uCia>weV=?3;hi1CVX(N>*1Fr2{sCi2A3o+j9I4eaw-vMWeNr0{#9gHvfW z{?d&`O8_Bg#?nBx_KmVULq)?Nh0VDPL`9$)%txO`0@2b z0D#q-iIPCFTGpRi$RrSeZ52SM1a2z@?kWq6+@3*E;{ppwRtH1S!PGB>r zu?$O*AZf%h9VN?P3>=ah%Y}wF575}?8*6wwV%faJF2sLS(BWDTk_Hk|$`qnd=EQ;Q zuQO;PGGRHRHp0hj@9TMVu+b0`!zs6lE&Dm3VGYa}8%`cP}d z&BMn?DPf*whl8V277ez}gqT$lj)w!vQZRVWa}Iz2VR&GGu;XD=Z6y~;iT1=n_=~(@ z7~F1npE|P)pZt5jjK}Z1hp`k4y8)8ob2AtHJfjRWVv$F-BuK^K2w1NQKt$ev*QERF z1M>88yfp5-368DNdY#ag15z3+UES+qKT(zl1L}0c_QVffrjhYzw(Bb7;$>}4b`yb3 zM+b|TCTx%2;n8S_vn`qs^h-HfP21gwWc8vf4AOJ~3K~w}Esr3%`(|MHc6nONm z%9M&5<#2Arn{e4elm^~wV>R~cz3K+PJKw9J^CY}i1^8d<1Q^iXegpE+??xV?hwkZd zLIw+d!A6)LW>mk5Sbz>ZNC7pXsz zcAN8f1csa2BMoyiXrUmNi6M<7%^^_=x8EkPJ@2wqM6G^Gsk5&F2}w}}qFAASpgREE ze>kquoXs3XJR3+?JoV{NE9Ig^T&+*hY`uSGKs`pe=$bBYb^#r8S5{>;KsZtidcNyl z{APUg6R(9Wx$8KO{?Dt}E*bmt$0dpT^ZNgj=>K`-|ADW63Lt)-!zY)x02!+Tu#Nb) zKSLNOZyw=TJaeyr-B9G;{+S=H?>@RIzx}Dt0+LqUelz6V{m5fUYt76^zNyQE>2QNQ zUPJO8R(8HeHJ73UBV}V7S*z+zO&B#18-_#i+BXg;8wf$z|2q{%P`QlA;||N=mc%E( z)dyz}Tu5+=1($athH(e270W!MXVQ()nJG|Y1iam?w9pVB%l~*hdeo{wBSSrx0%So| zFmIRz<8Hv=5o?ysD5>fCdyJmEl7i8_AthDF0qlIX!?4>CVR?K5(*;55 z>xh7P^+PATB_|V6c2)#b4@|R?Gdz<(vtlTu|0MCxD+0104+Ymd0V*)v&W!HG zu-}caqIg^nSiCtw4nfz*O(+#e{+L#K=LJg3r4fC-Ap#f3^%}7#4LT`wc$BgS2 z2kiGFj<>V7(QQo4^?6H!OnGDN)eLd4ABacr9b9qsLvhiwb#H`-xNZu12IA= zlJTxvxh~SD^4Ko1{x2E+yGVdfH~=DY=k)rs9$z;HVACI9>j0dm0Wvs1Vay9w<-bdh zEeGJ75EzaC@csd$y!hZc{q=wS$Cm%@Z%^g7KJ|tmG1tEw9zy|?a^?9d6IC-cgQXF9 z&uE%?SLXwm=ev;Ipc~ARH#<>E%ep~Hxd4`2_{9gt8r8$Xxt0V|!Mw~EAZS**l3$hx zike6FPCSFblqrCDI^gi=5q4MCC&yt<4VDBXX$r9h zl|=Zw&PXXEiFrPwAPpl@87=Rwh}P7(6V7@I;oTKW&r%pnpicmYuHm{9a5M+Ykz~{$ zP(-1<2;up%L)u*d5cUp;%{tHpfSa6TfAg=smz^|zXPbbE2+-lujCr!A=8M*G;WkNwiuQ`c-#RP_8GZkN{KJJ zHvCB$W{UYho>3kX@=h4NH#&E4B&4?1-$ww#Fr;0N?yYeTQ#e_1AQ4#|Eec$vYJ&`d zANjYwOJ4ZU_1D7sKM!8dm2JKQT7)NY1EFhPE6j)Z$RH2(Zk@ zUYFjgGVkhn{n{#Ias|U-KpDw44~=cOGFH+A6q1orQ#2tFNWfIU?Zd|y#sOt0NT#lN zz`ZnOK|8WG`FJ>BzPZKq{cGI6zXz-^IxdG4;({PBzBX=*PT&R`ov-;47c` z6qaei^~?8>OUC^82FLdv;>8cW>|%QvWjFd`51nTk7H45=t(YD^!r|>BqhJw~JixLe zG)f01cf$!9EqEFPKpKhISV|_&l<)Gi9;Nh%-SP_c3yFQ^C5GHEJsQr`D1bKDd;o?K zR_;SIv9;`Y#Z4XDyjd!xXXCe`5j|h7g6P@M;amSc$;B%j%u@x)dnTYq^u0GgR1tIz zK}7jnaw3T;m?@uaXS5Cyn{{X)g!5zG@W)~P)sAc&4qG?!{+X&B{pc;_jJgl#C4#m( zP%+o?2;@x1iT$lm#X#$2!}x zG>5vWpK(}@9@PRS8)UK0?i>qB%E*>Z5G4aJmcc8G7!^wvRBJdKXVk{l!zoeC@-VSV z0gE8X44)N@?oD8=B6{Me(5RZ{?IZ07fd@q9zE&WI>pW{lh0r`^@)5jsxLAY0AcJ2+ zI7VRiLx}XUY*ocHRVNhlvyanEv{jkrP{yfe2U+Q$bHU3*0`CN~$HwOSXy|^t3u&oFPBmS%iz_t?L+yPjLrO)65 zym0@z{HK5YXQ%(-Z~mR#AAj~uSlSDWM3kn6G~6SBff2jVaGPl;0D@vUmI0B1<`ASh zyi4^==J5#EfsKT8L0gU}xI)gX5@^c=k%XKF3|IGIMzRhGev3zM+#EGFWCKwJV%5F! zFL_roNy&3+-bWzdOS8Tiwc239Hx}c#miY^WAP-nzutX>twK! zGB+tzw0Xw#@EzQH5F=8O0|od6SSB3dDx80e{& z{uXzr%g)cguEsyK0o-78B%uH95OEL(haCx-ZfuckMKa<$)pVZ$)OrcPxcrZVQ?Sln=F}vibd)j@Mp!VfUZ>2S20#)qneU(w}_p%VuWWlgzLz6H)=% z@wV6X>oSX)n#cf@9i)sT2i7Bi*11L|K&!m>k_U|A6>`~QK0bm-LK&`*%8nb4H4^>W zgt*xZ(M3tjy$3HLIb4`?_Pw7B zY@J;RF|7nHmR5OwI-<11-sXTZ6(W>cF0MzwjgoD|WP<{1yZr@=7@#qa-|jl*>4>j> z;WM0D>O{VjFziRPrD1-2gJqiW;%l!$mIcf4h%yemMkUcM7nX76-5%rp`;bzI$cUhf zRJqf6^894$hG+%Xohtyb$Z4~Gy{x3QG9q8y=j*gVr&~s+y&(-DZW5lF*Mw(}oDwkZ zJ)P7Ly$Ps&Pv@lUuOVeXYcrjcGD7kQZBF7u^Lw=F_=nst4WX+Gnvnw#4n-;m^4v-8 zU-IglZH(hu7U(KN21t$!<^xH7p(UHdNW^&0Ltx`Dj4Zc5@jG<)YLN!2=i@6o%B)GoEl)`bE zP;$Z5y*=i6#^Jayn##`ok%axdf@N;Fbq$dH)rjnf&`NBz?$`oc4pzBWNlvgt`QfGw zbum}aT!o@!^#nP@VA|_AFaGg%;#fco!@j_vSZYL5fz&zlk5K&6jRU}WF)tNYFOT?{ z|L{kq>lgN4EA$`aze}wDXEFTGl>dL;#vk}+g8%@hD8OBiO2SG8+&Tg0|BontivlE^ zIsw4{%if#D%CaQqVP8aMRrTp}?tb4s^S0r9C;Mu2d@_+ne->ZM~zxxOD zd!P86iolAL;}L{_QW8WhZ!W|rrI6$^l+7LOj;_KaNR2H^>N#B7OOgRsgxeY?>R!|bx@i(TeR+3UTn3GTnI9SVBB0?z%yWPf-(pmq% zOe69%BF4@l+0Y>lE97xRNs~DUMPTdz+tP{1%ca>PWMlV-U=Y9Yjm;4NnZOZy3sNF4 zdo$0Z!Mn{Fs2k+MrrdA5{K-GCREV84N+vUseMA~3k5J6ulp-iQ?*S34VuHKaj7ooU z36e9)G`4;L+?!Us=E<)kdBvHr>UmfjFCb^-=rX?$TZ%NNYfv)E?hK8cETtg^^)$s5 z0M7wdN{(aoW)$7g12H6zfEc$xIa)6QkE|=YK&XN}Vhnlls5eaz+E_}1jUYI)`-2(( zer;u5DK+$kgARw>ZaF94TrELP&h zAmb7N0Oqy5l-jP1ag2sxKc_rlmv%_GxJEx?x3h*#f!T?)X7I8uG(gn&HGSVBm4tCj zW~_b9TM6^50g`gYm@}r7(09Q^vDh>~Qu5!GWX^da1lItm^GcZ04~_WBb>0h*JoUn` zC|uA=149=)kg4m(=NPji(B`qOmq_R+AmXj4l;K=twSdKsCjM@P(azIhR`o@6o z{5RiEH=nt3zh*!6((MPU`#o$fGXBfQJ`wPu-2XWQ;43}8CJulv5K(POxH_>lT3;IR zCA7bf2-I-&5d6Q70svox6F>l7eB%@JH-7vF^}qSae@g%2*MDD2&SYLBL3seFG2X!e z)L9-a@6HIggD_muMga6pQ>r#QF(3ug?lwTdWM{jT-MngCfMB@2ZKUeav;rxQ2FV30 zb2Bj>z&mCDfFlPPIgJRhLtL%FUIQ-EuHB$!AOMOTVql~)8EH=hS+Yl)>UnHN=f{}S zdd27|6Rcw2X+M4mNTf3SusD#*=wQtcsG@JiaGNB|x0;bVwf5OTq#EF3L6c`)3 zTgC2~Mh;Z5Ygm1%hPe3g_e!W+5QchAPVK&m%nflCQT1tW!5-b*|>LiC_0N zt<;!kiCu5I5t>9@FT$wi?Bc;)VG`%5BF0&>Yn z*_@~%gszL=fpO>VDej!Q2FNP-_gmZCni|SZq>WwG2wALWpw;#-=g;~MI9H{mWc+tx z*TkF|c-v#UUZU#l!b1^K60)M}s(@-m8#Z66inHAoXXA)<-y_Cg0ZJr%=!f5vUiyY- z`2o#-9u%bR%lsaK|L+(5UsU`5Rf+zAuN?wVM|H;uvjb2o0+!CeA;Z7#04$CEp)|mv zCu{r82ae~Td5r$XkN>&xzxq4>c=&~1{!PuLP=ywaiEj`aDS^U(Fsx0uLK3N}XVLQmUAFutTmyg#a;niCyo!t4zr`ax?k%05 zrJ%67vYoaYUp*pgaIF~msGtDJBVaEBBk~(o;T!86p%c@-`mFY>Xva6tAI2B`H>8rzL|B zQ9Jp8O#p_l`J`#@`(#8qA48o&b*K=r<3P&KW6)KsUEh z(uB|ti(lQlT4zTB?H)acaMkAwz{!7bH9$c@A#+GY1SL%rogi2$?s1_+~JOta1 ziwJVgcK>?Mh1f-`)JpwQQIt{et`ENn@A$xrf#=eqi?)|T(f=U?V88tD5bS@b_P;DX z_p2WL17BkY;6S@z#bHulEe$;60PqDrmySV;Q!xA5SiE-Mar4^c;jjNYKah@w*!|<5 z{S{4VB2__}M#NzafEznC#3K+}3*DS{#9;-qegzylRCv+)(sw{)bX{+TRsfJ7biJiA zi7dk5ny0N+*P~0(8Sc9_c9n$>ux+2)0_#MF^OxvqbX0B54+(vrc$ zH#3$stxIZanJL=mwUSkx^YE%5$)=d-Q9VjFVIvV$6{_by{!RvdhNDghya`2&gVoLi8jQDz=W(ofop*D9Ry;M+iqkla#y4Hb0$qay#cT3 zhiR&ansz}d#hhy=DOU(z08k*rz$%(~%z$yTY@ezQ{!|i-1jvw7Q#Yo0phfYPuYV5T z{-f_J{SX(6_S_NH*OmtPVQT)DQ2+k(i{Sr@YX84#<7RI1jVzI|0kmz-48? zA(G(o-%BT;A^~3%DG&fIpRD7*|Chc;&d#>{Pk!$IR_30Fqvf$^&Q#U?97NVrz*>xw zO4dLGj{Qtf0)PrTs}q6LyzokbLx`pe(DH2+?keud*m_~*Im%EoJj_wz?Jhd!A^q4a7iXo8rYc9E5Uuvzp=6Uc$cSuEqHcDOj?njvY3eWx z0SY@7>!jx!Ru>xz5NeZ@YE=BkgA}l)am209e;z8y+6udmcXHz@LKh*ExOZQByHhsg9ZxK#dfr?mQWx&*o{83@+r6zoB%IJ7_jz z3;~2I5mk|-Ae4-=af@4LcX2YT(RZDd3zMOQl14BQ0@2(RlNBUpP>Tq5J5xVg^*wq9 zikbsh)Hpvy3ND?jkwx(8ojVB3I6hh-MkAWCse`$Jx01iUisboxPG7c00B8unU@f5!Q-~N_#>FRn}8HRZ=pTER7 z9QhxD{g=7^tv~L^0k~fU!1DXQ;^R?p0Dy~~fT|C0sMdc;0^HB}@5BEMh4WF*dwJm> zi|`3n z!wbOWLj7h^0SO#Us488a!wbe;kTO9uAi|_#8Q$C^2Cq!8C`TbEC0V_)+HsSKCPOuw z5vv{enmwt=0zJ_91HkF6SFqijAqE0-XR&th?uP*4Fu1V>)>kiMynE&XNdJet&ew)eX3_{?TA`yKR1aE_%m036 z{Tm+xVq{JD`>1L$l$@XmZvcjt>Y{mW+m5kVha3%+BLYf+Z0{mmx_RF< zdhTNuyHSl^6)yYh*AtAU0$9m`({8ki7Re^(3&D2Up-Ng8HHlvKYsw{KmqwIQF!UYz zz5_^6Tu;Cn2q}vCdR7ztfk)#6!jv*@ot|P9J9K?SR`K2uK4nChvXL|IoNaLH?p+N1 zfUb|td6Z%ZL>(d~9>zKcG`4&Qr4-ybJwq-9myXxyTpnH6)l{XDHq8ODY6!m$Fs@Z) z{U5K6pm0<{6;D2Q9Y65n9~`eee%ZahgZuqr5udX|^>HZgUyc6m!1JZ?Khy#^!&`dpZLtHDruy=JwxbMwuw^keN+HlNTaHtOlPEV(2{mY+dIymvZbbp-58sHDbt*OI}BP{uPieiq4BJ$(SK+3$*f zUUsJ?SyxEHoT>pCsj=4NbFegls^!SZc^o|BMdV!wTSTtKzG1(vt1(0YBR`{;{2 zKcFzhs<|@35D>A?QH99VP_G)%lNO)^AQ|MZDj-Q#0U^#<$HKrn%%WD$W^<#?0}#`# zAZ48ExajCj>yB75w5#>+b#WU(u&zIdBU+B)&HHj46^$qWchK>4Z(ZKIm9&r9|17lBxF;PscV(7| z7P6dq03#JcR}`iJa{XG{0r>y`AOJ~3K~%~KVhD)dFC)pE4w(tPgw?9Y^>EqOAR)U0 zUPLfXrfD&B9bz=pt5n`XOT_@W2u8^;E~@wvvOQrc2~$q!Vr=M=`u!vxph!&ts$iEU zOCM;)jVG_*&;PX#Z=ZbjM)ak7DDbO4b@8Y{XthC0rN4b6zs33Jf8P-pao+GBjQ+ox z#vgbD9Dv1GPC78(B7ETIA?^Qt1Yr5|A_M=WI05Klh~NLG-&fxEr@k)#mw)T;^&kC( zUr}W;L>0yeCpVH%g>ppA*K_DW6o^6x4p9L`nKqEnfrydI2$2j(ZP6J`dRLvvO@MI@ zd^2v`LUFBaa*cq97<=osrrNZz0Yz0LY{;fAH!JeJhG#s=|DL3hzAP^&B^%k$|5ha- z7wb=6grO3wb0R83HyfJ4{k-AY7u2-#Y+ue@g~N!LsN&^Mf7~3M;0;4iqZ^AhO3B!r zZji?bd7RF*9M*Q8bniR|^pfUf88BC7G3sIOOMlckF z(3&LG^aRLP8HZ~9eO}p*-Osly$h@UMPH*AxwsBz1HrNQLDuDHU93lc2C*E4QZ7KIB>A3;^NE&P`L8+x^?TY@d+(z8%8p0E0oX$UmJm#x{H2i(nDqhn5r9LF zeFtEFlJ_eH7PslegNgX5$FBGP#eedb%iCXiF8=pF{qy?Tt=kYa%_^vMm8-mN5TI%X zQ%MoJ0U_KZg<^O5igM`Dtxha*PdjTcL2x7o6&Php4v zfYzRtgE=IQ>(0V3s78^X#iT$@_{W+3En*~42q3bCMnwv!nDC7%A<`Ob=GHyU=wChxt zsANbcCrkSI6FYe?Kogt6A_n>+XU6Ad=;!^-p^#wFe~ru)@V3N8K($uH^GbKI3lI3! zQG*%|*BgV}U^*dD&GD;5JbP}}wcXOTOV5abnxY(*?0qTr-A(mRTjbyB_dO4zB~#-G zP_VpynOw!s+cXn5N6ZYn5jjz{4B&!B?5c}uj)Xc&QIETc1}&XpCmL!=DBHWXwib<_ z?mL>#>y<<*?wni6YLN_(5%l_gKx7jftE4zl0e3w#Wu#)#wp~zvFi{Oh+T){eueEcVk}kxkcuFBkC3{?=KuTBg?Ktmk;M2c z?0+i|+g(+fG_YwkS+KC&bgM2y?R8Si9*GH&0*V&oVhxd&WI}c0&&1fJEpBb^;F&i* zhL8MvAEvjw`?*Xrxo8>jFE7~A?(FCN_iO!^5&pgdur&S`ssHVl|0(d*h5qY!BpiUn zSYCuWs&URZZ`hac{{Bzk{KW-kWMS!TDZHw9@t*r32KS8PqgD8~e)v1{+u!^g{_DT< z55mWO>*J;zC(j48YmS zO6pshdb+_K4I)E0sJDpO%Zl13?>Pd8hy6{-6E=5m8~>ti!V1&VXKnS<1fb-MZs<|- z*n@-WfQcJHCYBO2BygmLUN|huBqn>$VgaV5Xrt4Xw0%fkL0=So+KJ=jT) z6njvAWTm9Z;8+UYk4wf+S_gi?SMlSJm#+MIzjn!{8(a`tO; zz&4hqLN!JLRA+%i&Ksw_m8ofqoF;T3K6uAi{BEv;Uv70(y{>ox2YFepmDy%V$RY@2 zh?SAv#HNUyvmymWGNv@53muLI(*RKga$0DBsNF*$bT}FqQ=U+mk&<9?JpdJh>H{&l zegy&{<;fj6{~TWvsz7AMsvj_=gd&1f-y@fdoXzNqy1Jn#w&M<23XX;&L=MO$!O{)^ zRb9|Bl6C%VzNVCrvh_phy56se1v*4l)_6Ld;*Bppfgk-3ziaoxOHYS|@n2qved8~< zzwuwf{?*8D7C)DdCH#L;{=Y&0U#*(|L*r3$0G5Wi5&{)-MZgjTSU!OHg6{tti+?Xa zbNM=8)dD#1nGZFXDSY#L-inu=e>(l-|NOsqKlKlPPQUQlU1}wAQebUxXM_O`#m1Xf^odWLS*Bdm=u zly?{ZNGpM$Ns0HVk!P%$UeAb*!7_Un)q@IC-9+4Jk`h+q;^Kn)=xi^&*IWy0u= zQgCt~Ga;1;W3J7f2%4Rn5E!h~&;)>xOTsQq<|qPy6y%buiz&fH$pp{6^-28bfAC$? z)6YJ}zCY~;h7U6SONrk@gug>Zf8X$5Bm%S_`F~BvBjW%p#3JgXRD(^JNrC$)!19*c zhj-3>Jmy@>{w=DD$Fe$LA5nO~@dG!nUG9G3-}t`r;rG82|Lyfk#1p z^QdolnkP(~+vrx8O*bGLNexUO4JceMkLCU?qE}-sGeg84ss=M7Flu3c75lMXBL1Av z8UV3J%{3*^qII9M{R@$H8)zAE?fMm*oo=w*ZXv1Q@|6>)04WI=2~!9r73z6^Yjy;W znw&JLCJfYd9XNL25K+bv#f=Cv10tHoon1sG<3Xg!ft)#?&N0k6PG8rQGl(*TkE{ey z{al-JA;2+$yA{gWEmJJ4a<|1**Fr>N_PYp`iT*geUQ$ab(83T`0vsQm0ELbD-pE%@ z9PF%?9m)F!FhE7!Ihd;f>dj%WP9==CS6f7{=bVAr_*cgMoF-Tj{bb<;cr^)TxE&>1 z?!F2DserN@@T&7(Q3sAzMFTZ)A0}vw_Bq+Nf@!p$^&Tk&hIR!2R^H326MzGBbIZP) z1K_P@VKQ|ljD_>l@Sx#$u?{oN(fA`Pi8;@VXBIkdRZP+*dO9$YhTK^@?zi<2x!T*Pp|CX@-*VGAkWE=n= zy7#>9Qu`NjX`C;5?2qMV)z81^QPT@cC*+}SZDtPde(MYPn}7YUIxdwU0 zC-6S>vG;CaW;2+^tvJ@+b5NSQz(LQpJ(Wr8B0)!CMUTK8=PIBmIRffM8!VGAvS z0-UAqzhfc=(gwwndEA00l)+CW{~?TSWj>z4UC%{SX6Gy@idq{z8MtYkOmtANKF23a3}%TCF{= z*FbCgTWXt_7J=xlaR}6P92y~xoVNinGFoI<<$%;v1}iM5Tz7Bs?tYpLK6gVq8;nZ2 z%Z|)@#N`s!r0!@e#Dc7W%j~4JyOvyKuQk-E$3cGmixCcW5B^_p0~9qFSRe(ez*LWG z!3%(R6`Z#3GpE_2c&+Sz@wM!Yv*w$%ZX+HORA^h_NSaqxbSrSbhLlqm2byCPm5gq| zWWRTzE`QMe%QJ)yo#&L@Ib`c6GT*nZdgsEvQcL&T88a$@#YBvVo+FNiW1MYoV{{D= zaSad^LDX+6^KxjWQIMf%+eQiuaRp_QudeNd?VxNSG2Af2qOFogOlPlo6!ADX^d9Ya>taceoaP?% zfH@XD18O;TlK{26oD|FdQ7~kIoZ(H}p*9L?l@D(0tS1cl<_1(r(Pc|iUKstQv8TO% z?_UT7kaEVWryDQR3~^7D zlv1>)wOw_$9U+oMnL%1>VdzYfGEii`zs1`ySIE7VUz#&v;wy&2q&g`J&3~@~(RQdX zd0ciS3@fc-g0c8r8kJPdn8XeWf~F13n4?AZP%BG>?%bGHt_DyMC#a(UB0#ObCvpcR z%uzWo8~sM$^EK+dAGFLB0hI$&ok?p%RQ=?d*SCs+)>EOP0?qMIg(@{8YTm7r0!ROR z28G@se+A-dc3wCdLIAZs4b0v!$F2o!?*ii)YJ(*+lwMv40HvVg^BkIk3)LoP;SeY) zI%I}?rYKcOZe>8d2EM>5O~6(GRMZ`I*!|PT9;p~HaGW;A(k}^{>C}v~N8c@7KtSsf zS~*23zTsJ$Yq$o80zhEv`x&L8+jeAf?slbl>S$_v>4e#U=4@?Vzw z?YH(_M*e4ek9`E-A}634{{npNBmX)cDF?vEY#Glx0LwJMzOmm=3t;j4WvXELH~WiY z`F(YKNo9g{5D`6b^IH7T@BcQu|6OmUzx((9nf_1z%P(R|wLaUvN~Ctgvy!wtouMXx z&8QaSY2%Q+mkCwYH55=L5UG)}bisl)mN~~B3Id`z05WY1QufHJREB&za0W;`-wJy_ zkt?VHss)lqgb)D^b2L&E66&-m;1PR)cX2rtJ>9vn~3*!|Hg2)$x%>ck1UB8tTB&Ns0>7RA+{Qw2V7Qnt+o_h^?N! zVmG#>7Ez#NLkoOq&HH|hWh%^DiEGYKcY`X$Iy)LmT2YW@;;4TwIYjHwjm>2@K+$g`nFB{Qnm{VPy)1X`J3bpRWq zzZz#3`cadgHO&ljd^L~8aVgp7#Qsk52pu<8aS*yi=#0g8!Eg^Z$|@N&x*!l4pF^N7 z`eP0ec`In*V0|nq5>s0@I|`s>giaf~U;88b>JXs|5hPtyeLQ%0y3UadB0>lqh?5g{ z0YOzdtoOKA0H8DjD{78`MZ^ltqoGz}9D?K;AfO)Vgul9Zv3u5)J#Q!FsEebNqzjx{ zfl%M?LJY82LBS~thLMX6Jr^qFtk3G6LAX2c#WAn8{sazL7 zu6nVxp0igE0EFu|FX3PRv2UmMeemtOzHjDiU;Xv`1-KaYzaQg&Ki_|L;I%CdNB`%H zKhE2jujzQ?8~{fFmJxb&4eJB~=N*8HjPmle<>%;u*V|fOJg+~OPQU^$eE3shCcOFi zXY@b+iNC0S=?6YcKmE~P)c@fh{U5a5dA&Aw=K`8$FuX%q7*4#L$)W~v=vY-CPJ$s0 zL~P}hRvKo8JFZSJZEl$iE}4@d-pW(el;rKez_71=%P}5+>*%yauh6uGB zqT~XNmdUf;V!DdX?ATcDeAk3zK^pE@&iW6*`gp3Y)>~>t$GZ7ht=A; z{fU?o;FY5za2JtN!MGg_#%GIYkOkaDdvL9iFnFHpLaa)8Fo=|4sRS*fpNDtttEG1E zXddp!K%uDsT?C7^h+WDAhV^c5MugeQ&^(AnFxga6c4*)45l}OzQ zdD9{apoIZeR8n8P?W)gSBg47O(8~+eC%icv6}`|>fV}bd1}lX`2juMj%iLH9ARv$D zu7|p#vRHWSsikhx1J~;8%vR*f*P2RevL#X+qBm5aK)mKZyAxo)bC&>C6>oE#vz@-G z8U7foe@Lz=C>Ww-&O^lv?Y?Wr2qVYVv>mnUY4^2bTPPw(B|%_7 zU=Ei5C)Yj@puiBJ?AKaBZO&_YtnNFOn#@-6SP?}q-ud1a@E88dpWQwC!jtUM!-VtY z;SVzY`;dQy{r4gMYTWlD|1(@n{@btlKbQM|;DY%ojYrM_0Gbm3%oDZG1z1)F0Ov3C zzTrRgy#9N6F%CHc^|73%L*MyOBZfe4een(YpZ?X4$Pa(_2f{!6Xa8J(^6&o)-8!xH z;INx{+L%%421hVsE1@H2&x+@GiGWgeAdLt#_KKWK*lprRir6FN_P0)XDSN{3&Jp1bdwXRWS`>%000i1 zbs1A_(RelZb~*tFoAz^dU75Jj)?UzYcI8Jkq3h5dUy&CpUR)}^mGpyYc<6CXS}# zuQiIVXoyGDj#yODA*ebE!N#fJV5msrC3spc_%_haecnn4aM|I98?}O>RtOa@+fy|I zpJi%mOT09)@&lCEly9L{4Ui`{`W3S=F&<*;2T`D2S_v!tg*Ehn8*>$LoewmpyMO@K z00|+qza>vmkdhGnq}EB!znFFkp4m;Jh&0p}l!O>R(3w`>=mCo|m@B z&7FqoXjIsEfpjgUKI`8Q0aq^{6J`Zh{8$GP>YINhgNY zZJ~CvlcL_t2q;A`Z8nHQZ%#?Z*6o6F1o<;eUv;>%N3UjasxR{a9O4{;f&_n@> z0!hZ9P|n6faJ4$bXi<8epwzju#qAuefl@$)oU2ltZR`T}_O(R42jJcT&r=i(nVprA zppzLEdC1ac#$dQ@wEoR?g=(XE`23hy^EpZI!k;h9FhbHk~UZEaLzN!solO`|&p zie-g>p$fi!W>y%K8KnLl{-WB&P~t$E-3bCrk3s>k%N(nv23n5;GE~7dE&RK>0SK|l z7Q1JIdCS54ovJf$<3M1i_rBEru13T*=k^^Y+{Eqo;7YLdE_do}Z%f8*-1u7Y$`2w0 zs(ha6YPio*`36$^1$c>aGwhhxmhTZp$*Aec*{*V_NQ9rYni8j#_SVj*V#p52QZgZ+ zC~!8NT4^6g2$=&^_xUC8t3@ppM`{hr*iwj3zu__b&|my8z5j#n*z|o@%ltarzhdi< z;XefXA1d`*M*C*~PW`d(0NgM4|415t;1PBJfOAg3J`zyJ(x~qn`a{q6BmP4Mf9VJ; z5rO4<4tbhi^p$01e(veV@nawPv+^U~`=R{1pZHAwzx~p`)Sv(7zfQmYJAY`UE-8Ux z*ZOtaQK%bcL77HyH+X%%83wdw>k5t$#A_q^Ri-r6PFzk#%gGG76m&-?Ac{>2H|_2s z_G^UBo29ffwT<0+7IY>bOP)LSdTp6@kfXj$-;Jv$c`!i zh?`WAi?{t0jGSYTL-t8=M zWi$F!Sy9#GNtpxU(XmCy<7h_KtTL*4BljzWE~0GIN(Sw~Epjt8BH#E-{HMwiH)w$X zfFT?}ML}I}hRnrKERPZ_dab$l>h$CZpwPrz;QA9pa06E?AKtI5_8oBe-}kEupKsSU;fxh&2JyJo#Pix%r$-(;+y*<+cA>=es%y=T@yc3PcMd zc7ELZy8W9eAjTdc7%w7(24*+oN+^DM?ZH2(oHEhB}?CXhO{Y10~ zVpvo%h@mW97@$z3Y#JbefaI!<3j3Qtv1LML-dxzz~dzO!j^a#F` zbEM<-s(bfaU(i4G(sTM(|H60ge)YFL-hcGx|DW(nzx*-${%3A2PFm-Uv36%`5T~hO z!CB_!na@H&)?XllVh`~RjpG22fP8y+J~~Hezrx~+9=QnaympF9m)D40KxEV0A9oWp z3wE0gj*gG8S`C0G(p0cJ+o2R`X#fHc`VL{}l-b~R6IZfIjMxt#?NOXjZgt8QVTua! zxHAMLCv-<^GeX`W4PA%f>J5Z`z(lVA0NA@9!gIYk?NDWlxf{UU07*N8bCtba?haJ4 zM?yZ&IYT8`_rl>A;phZqdl!^OP`5I+xMUE+T17jYu5eOdzXEasudlcU09mellkFTi zTIrx>YdFQh<@GH(mfc-jOYZD7hk>l*PCc(Z!|99RhSZq$WQJVCjdXxcJIMAfDD*(r z+xGJCV11!20pf&PRtx~~8 zB#o{CA^^BJH^p=E3Tx*bIQlkXLOrESINROEdbo@jI}~r#Y{Ego(hFwFP`5g%<(eRn z&}`HzF&Cb?QcrWpoZq+QVMN%#5lr5>(W{h7nXo!q;p^Z3CVa>DzMtOt?iaT)#^9Iy zL2ca+1#|n{M}>$003ZNKL_t)Be_!Nh-}u*vf8PnX2>M^v{WtsJDT+sOJn{|zaLx$; z=KB1L#=fCG1nuubLiM#;2D0x2ELogA=2pZ@XW);82GqgKbh18LecmE-Naj7di ztkiEfvS`x@aCv*?nG!;6xinI%J}4Rky;&PO*`E_s(N!WYZos}>U!A~FJCE#Ip|Q4W^YP$vgU23+3) zAp+bvXQAfl9T^aDM}obqut0;f>)Fx;OR^;9suTdt@uCo*C8V|N8#6NvRVSiNMw*3<^bo zP?m(+D!6FYEJg^NQyAVoR4v&n91tAQm8<6_@Dkmc4ogJrUJpba8_@N*9 z4*KQ~y=z*p2O^?n`*+N%;+}CR$g6w%vc|tg{}&nmr2}vg^k13(2aW&11@H)s*M$S% zV;TKFDB7=&<-gB~Ff2ar&_b!+;-S2ez?=ZV?1e7764qn;W8*!6nXX^G)P3`N-lpI5 z?zbW5EU(_VoBr@qFRwoKTfdKg`I~=$Kl<#;_~d85fZKOwiUfDV;s_jIQvehYR+r{R zJ`T0kx^H$zLM53Y3!Nbddqc7rk83v`$FomAhG(9*j(5N91$y^epT~=Dd}6$EvW_8! zTIv7AG5fxl`3c4xpSB~qRm7b;XOJSeaqTj=oBJV@0!R@M3M3b-)&rVIk4wqqlt3GY z1e}RZP;77CLF~Jxh^EXaDO)!-f)m(mlx(eO%aqLV7zW5|uY!YDONcb0BDq6V;a$K! zA9*q*IB$DOFc;Cqb+8*I7PS)zc7ed_f>ds1c)txIO#4zhqcYEFCtH76c%(d&!`NyHLzvmx{{FnLug!5uPOW3~}`_sLDA2R+IO8q`6_5K%)*Np?P zC=Xnc0S`s`haL}t{`bp4>ht}4(em{UGZGMChHi-lJZQ0gk>?L|UF0WjTpOOaaZSJR zT`!>&(X;I?zx?WL{p=TB8$S8jSMc#qeh$C?N1w$jx9;GzI~&}(eTH!|$<1jJgsxwF zC>A>sA&(o>QmhyQV(c(<0XMH-#g)s)xOwd|-tfc?yzs^+=-H6fiNSBDi#NgxIaIJKI9V&;lk^ zb|IY2t-FXZ;ONpZx-J@l5V7T_Z6$xw4Fw za^Pt7_uxv{V((y9Q593L6DU{(3a_)5f->$vq2}jd4vYvSFaibCj(p8wlVZ98A|UM` zp5UP5l8+FvS#EsnM%P4#GLv_M9S}wUd0)~KSSYIKDy^%1Bm-`W* z%+S08CQD<~)C_rCGMDG*Pqwdw{H6a;i}093pI7(mMBM1SBl{p^m&w|v{X@#lZ|+vw|FdV_Rb zT&7kZc0avnU*9+W)o>r`=yy@A|GwPsQZwKlwZBK*_yeya2LL$d1OT(Qx4f4iV#SM8C3Vj+t@w>Lqgk6c|S{ibYn?(Q^7K3bg?RL75Ty z4x3wdF|1dh)nM&XMZij+U`9Fskd!UA8Ryoo3IL)I_PS*Nqzy|MU4|0x1O3i?VZUA)yxIePrjc3qOET`?(hl029 z9m)F`cpbY4xL+kWy}^P!$PlMT=k-y8$yo zw*pOKEv^aH6%as%Vk!xyO2I^AF}S!R!?8y{oM5}X1$GCF$Ygyh(_iuk0((iHrL~UM z*RkE*X$Y9W(^qvXRcl#1S0O2im|ztnnkI_`693D}SR%j?1T1Ftg& z062&Q>@NyuB%RB@ETR47^L+zfy~O>6Q*hqXO8|z&&x{!ns3j@ON`ZZ*>X+RaSPmw_ z(Q4qM)i6AUD?@$#B8KvzK|})%8~Cs2u|M=6!tv!RiqH|WLUOUlhXKh3*>;_Y3XS6g zh~m=aHOB2uRTTnjJqiW7qXEo}OOId2@#RZ6ef1XdW@`j1H^M?>X@XI~myX-UU1fk7 zgpxDH(>rbqVJd@QP_%S|phk@*zs#^GG`K`7wDvUjWUZRyE0b%Zi-Oqdx+w&&@CYr} zES0yw0i>?sP-NB|sL*zZKwxky(-Vt&LxN5)$3RV}N5z`(P&Jn13WuHpu92H+w&Saz zyKpn$r0P5Yn0#;ypc0^|m_rbH%f|=rZ_y2)ZUq_7Omv3;f~5wGcc3%#-3@ zZ@(j=rjn>RYa_XMl#C*V5`<{y=_rWqPAwf!3TQY2^=oLA19rm&*S|oB?zlY6k|p%L z5oWh>#5hf!BX5*H=b9u~0i?P%K?kK`DrjWomf~fUDO>eP41?oHbz4+`2t@_Ev;lWL z0@pqnl|$e%-;P2^5u9ybL#`Siz`YtE1Za%DzNCJfk&nTsl?s6SoC^o5tp}KMdvbZe zhraE7_`dJ^R(j!0Zzz2q_xH$$-7gQ3{c6sCzp2l@V9&mqUp4y6$I?ky=KS{=|Ml^@ z8LvAB;J~OC{?O~o=lhRCuOCVkEWOJ81y+9!IPX|gf?%x@*iQ}A@l`dZuNSZMVFwZE z-OZMIw>7Wax{GU<*XWoqrV%HXJin^|Gbxx+ij^`lX?q?*M1QGAni5h<2BSuk$yGJs zl^_D{dfPljfj)w}4l<6WNJxypf(%7uMi>SUavWN(S^@w9JiqQ71|c#*l)7=&Gy}** zT?`&(%tS|qf>vwedq{z#9c0`=rx7yk%n+CC-x&Ui zJL3hU(Tpn9BZ5Wu0H9`I%z3HCK;2-MIcW6W1U8vF&@RKoryL~+?1DsuCVgC^>^g75 z3e>M5o7;2MfjWd<1hhNz_QwFAuB0uXX|zffCh)LU&50;<;Qk0@dk0mTSY36HR3S2< z$}^(~%J$U0Q(+th;->yb1gjwUB1Q;|lj9?-hFEjz%U$xC_wyLSuZjID5AK~Q`G>O$_T03scV4L zO{=12wq_SwNgziwN?o-8ntSH|w=FOP!aLsiB0l(`chNU};GOyA8rGnGWy*)+ z#v0{_)pr{l-a9!iJL$0M7}y4H>F$=np8Eqd=-%dwT6vwK5;7}`U&pOEGBqmaU|a)l zYdmZ3TaCMT878U=rS0h%wOhYnO55@`*h4*-i97}^=$$HB)!2aSn zlslUCo>!wk!kmEW4D^e~K1r}T0}s*S!PFMTX5!AV&8#-NwC`HSnTt>)G2U)uo3@w7!X%S$eUA0$q>(RGZ~}2))fehT!>}vlmLQl z$R&>!!E+T~GGokQqB2^FwYDz=;^gE-SXrP;_9_ZcoQ&u2K8ZkNwEB4`&DBOwL=-69D)Ef_`kU3g&mBg8ni<5 zc7kTS8LdLW!dH~-T~i&*2|}dd=!8@Rx^<>M`{&iXeC18Jf~GkslkM_;+%%jtdF?NC zgus01(i$(FJgYCh_)Piy=U?OB_^sdLU;mBY#o1=pzRT8lRH_zh zGDO}FLb8>J#vUb408A@DNnzbQ1M)%xq^OmYYF9h;xu&FRfQ+M|B18eJ;ZpmqS|Ok! zcUViNkI1nO5q*Op1p^s)dYun!`Wo+(lv0C+5t$K^5 zAYcJvA3=eUb`xSBt!$4>vbYqBeyw$?c*7tw4hoB4MFb_gP)`?;Q^M}{?fF2RrB0#{ zR!Au*(_|`y%>d5gIkn-CQNnmJOVW%}l{B{Z%*}+XYo68pgRMM^x)q=TnYM-q3`d}@ zH@%27H3Ny9A=^_^9RvVzIbf?k10+Lsr;Zx9d~_xLDFAj^WXT@cD^MmttcSBz~JpGtH{nSnUz&E|8eEKsl$KU?l zPvE!z)gR(_fA3TH-F^SD;A3IG$p~mm3%Z;#M`% z5GKE#A#^xeUj=i(ECZ~b@3#g&vGeYTWND43pSp<`o_`8&ecSW&b#Hzno`2z~>Du*6 zF@~V9J@St`_EFp=aeKK}Uj+FtS^m`lxJciBN%*UuwO{gA+5U%8(65W}C&B>$uwNmt zV8XNr`;g&3lm^%*kSx8*{XWqv%!a={9~M6cnBnhmFCwti5V)vn;Psp)xL<_-py>ah z(18#;qR=7bf)E2bMC6>B9T2f@WvYsl3n&J}7%fs)YAR~P+@eaQ`SnoQ*-mb=diG#H z+1UCZHZFh&Bxi8n10u*dBZO+a6~zrkAVMBTl+hwP<0GI+4YN_h-I$TV-%QYCEOhoV zLf^p+if(o4FftZL(69!F2uaCuwhCy;)(?jRn4%rCYs1@N5>$4!=xYA~ml&?)c{*+& z`Sx5D(1?d@hgFZ=5evH|3kU(V#kI*35*nnUKrI_=ihIWFYoDQcY=*x5zZ!n=+uftx zh93C$P&ZgB-`yE3L2k~7L;qeBIP)0lMWN6`$E~#~b~M943^j*Fr0NaaZ<&5cgNSgv zUWGTm>5ckzFTN4q{q5hRcTP{!r$6<|@EgDV2l%z$_Tw=uD3S^9E!-;)pH|xN-e4JpJ@zc;fME zc5~|5Dd~U*Eqz4sigMf3wW> zFE#!T<^5lm<4=qO0NmpQv~`O)_YNF(0QRAzeKcUXz?LY$0P}2@4!{bwX!f0eLx@1Y zj0zB5f6l<6=>5>&>|cweQ+7YZh*Ie9@P*af@wE3xc`a4!#)N&W!x~Taj~lzYEB@IUg>sPPnJKymlKJtTqS~uHWe&yBM`tr-K z4WIe!EBK>7`W!y-N1w&3uie4jI~&}-bB1Y3C{+U_&Sb^vq}AwtT4;cDF(7swx)^Zd zhG~FYyLK5*K6wMrzVQiq=9$NE^XAp@#?32OAFVoX#S7S8_vIc-qhFt2l<%)by2ADs z)%Vxuy92N76aAJ7fA{44U+=`~KT!?U`pCfRQGqB_gU~x`gDTm-;jr*bJbl`XYAA9fqY|D0)hkawr*}c}oE3PC25_((#61K!kk^vjr5IeRB$iz69l%2%?1%E@Tl1im;Dt5V&GEN9~%9z*~ z454sL{HTPoDL}X&2Jx_v&OPVsy;k>}bBz2j#_TnBpI&S4BkogLv5P~89IYuL#f%Wfegu@|# zU13fDmto!0u#%{0Gm-Ur$*T@jGSo9+VuGmYx|@UTtatCd^Q!14Qh@Cx6atbmQ8`bJ ziX-YEx{|B+sen`5T@_aoD3LP9k{mzhzvBR62L(xPg6ybeE8j* zwfE_#tew~qI{QOh2~*%RIrubsdEcu6b;5vcG|vu}00f2%$*=>^I+tc`fN5d?{{8#& zN*!!S(MgN4IJGiafF#8xCYTWK+@BwouZe}gbm!u%yK`}dceNZKq8P?euC8|J@@kiJ z&N>XKd-(8jU7Q1C95Z&i5tUAQ)pzLoh_lVwCKT?T59?Jo#2EO_o%8N&vx@y|&jGTO z_19~3dtGkF`{tSdyyQQ3_5-dv{nqgxlJ9S|zUTq~phmS`AgpW^_QTatllkqY ziGZbf(l!8CY5~lHfHnX)76`Phfi?(e@dCj0$^d4Mf$I+UX>Iu_va z7M=e5```M)iwL1Z9ul_0h@1=hF5+stLrNLX-@A)`)#Lv2_ps^%BxQ`FIjPO22df$* zTwMVHDq3#bjm9qkBXS8{gcdbolcFd>dzD5X$s*DHTs~0M)NKOJs}k(YYbFh>6WNa? zo|es%PXRa|pyLRfPe1_*9m4tyGVGktg%J9+v9qO}Q3RJXfs%;Wl-UF@)jR=WMCgnu z4#Sm|*&T?e*(U=$LnM;@NH@rYg6g(A(2uFo(b}nG`;JgY`n(uz+6C)#6Ym+O^m^}u z>tsWnE~vpl)tRqxM-6;@5@2E;R6vlS+baMv{p}=COf+%O*YBII5?ZwEE(xj#XLqLw z0bZT?zVV%)87ho${>%-B=xb}tdk&E2?!PHHKDg09XnF+KGXAMPLau*j57$-O$`0 zbEG#p_WAQ;_s8B_`u?T$o^KZpe0EyD_2vwl^E()JTbyk+kW!FR!R2Pp_Ch!Gqj$~f3a9}HowlZvBG>xMY9J4JUK~q%z>f*bqXj%Dwn)W zV6*&+g!Jh1;QrFI9@cjtd1ohpZy5PTn%Z7;jD-D+q2p53XoEecb8CNr5H{44s1O8zJK-yBZ0aIUSHfMP<>e=C6Ny$nhUS`@b3X<*n?CJ^-k8U}Ug${`IwE0KvBJR0Du{6j~j98xZt( zvK=rF2CDOK!GiP2fi@60BtX)GZUY@)O0^T6O(i=aL}6adU|0rQr?QfnY!IT)B{&xf4oJTSOz zX20a<=liC89nJGY&c7Xl471O*tY9~uZTH{uR;W5|t22kZS@#f8>;~iH=RgR2hV^C* zh=N1F)#VnezPA8DEJKto+7B#>;z<6k@1Q9`iW=VvS(`~<&LwDPV}t%56Pp4bfH)z< zomt&S26+HNB?f{4524<3W=8OgyK=&V;S~aZy%;qt69F6$F7AP2hy3{S&~dOJpj$zK z$-!yfL9zW;(uwoH&Q z{#Cl(cAT$$ps<#NlQr!DcIvOI1vOOT1Y2K3f@VK-hz+?<*}#RW*A6bNEPq~UDC1z& z1rHX8_Ph!J6f$WNUOO?myKe!_Qw~Q^9Q~J1AuDI9Z((Ay!R~FJEcPhWp&PT=igQZmYn>dV4xirTnYx-w!k4i zfu+nExW0{Zn`i5-qdyi5&0n9t)-JofNVZO&XWKKk8VDRa>-3%Pd7u3ApZh7J9{#!j z03ZNKL_t&@hAl3y2Apqt%eGmtIbWlsVrXbBVD7E1Sj0vFeL}!Md_6+f8NZB|mU9*m z+n5!5(TKq)3NQsn_OrPLA}jCrJ<`L+(2^0l4x#T{ST|6Z8qRt{Z3W%y-Tj9 z0Y$_>e?-ROHw6K*}TYt;b-D0Y)7pY<-RKW>Es0#lhB zJ%}KAfKd@wyu*G>(Q6%6y7yUhs~Q+r0fo*m6H@HQtf$;W3Z&EaC@_uJX&#|UR>CI& z$CdFii~|gj8DJ>=1kGh1EO0;-)}acBtf0vdq2qu&Y>n1AnCx-Y7pNxiAf}Fq?g z=MQ`d2LQkm)qr{ewm`wQ6jg(QHv5lw5*N_nNswUc*xMlB5Ge3i5U>OmY#+DT^`U-x z+Xgrk0Nmv4=cT$b`@3m3`+dDqwiS#H`;)9|{=TgM+<0Mp_j}$?yjp|P2xiL^t*>qw zUhE<$5TJx1CDS+u(5*TX@$uenI}Jce&g^IEZS3XjK*8A9iWuE4SIQnE%gLpnY=!MnsMUg zCw4LQH0{NjoUBQP|ee%87i)e~Ypg7HtmZ=~yHX`uksg?691D^oi$7LBX-A z*PF@v9IJF3N-z#pRa-~BG}phB@z4LRb^3E5pE=O)3FrSN!B2ca_9YzvRP$;8usi%IkoXGtzDcCbHS;Rgcg` zl&t~pAcV@kMoJJA>@FW8I7p6Mf8NIEY!9diFb*c@5~G3tN`c7EiF5#{XY_;#V<1I= zl58TtGi%GpgE@MwJOj1^DXKZnxB}4*l1AU-jLPC(c?{}!UmXWzr-G5{NSjPwN(OW1 z{04TYREb&@1;-xfdSD!UTu&jxc7L!=ScH9+E_K49^7{)QI(TcsnHx13u~D}MC^*5B z$s*^fj*Oum6klvvze`$>GkmFw}^&cwvf6+RB;1mE%HUkMB8X2sw)oMU>Xl+HH1_0H; zwZuOyBjA$LpWph~XXldwPtz7?aREygn)bv5mYx2gKxkeKmWuFKJMg!F8d;w*4Zkav0y%eh&XesC`^4?4L&J6>Q zTJN5tk>)6Tmfm(FhX}+lImSE|NXgh-FuE=xtk;l~Evv5mc!*W7WnWQXB4aZ2tbPAo z06Ys9F-V)Jf;f7n?8HEX>1S6876jyE>nElMASfUXLxZ(tQ8?wK;G9A;;gA`VW=- zzo?x*a0&pPuqF^_0c>pm&^o^A{FitG+Dbs{pj)TDISqYH$f zR_YJIosufHLxSXti}Q_vJO~pwO#s9gJVORj5kw~Ev4<@~)B=nm=#&up0FD71U60;- z-%^tG+yU^W2WOL!O}i12%)u!LjN9=o}4o=DUlx3}zG<|hg)9)Ad zXJdnrGD)RFDJel3Haf+DAV`i9q!sDdMhGGj(n>2zml8?~QWBzc4JD)Jo(^E}Tv=RWtj@45+{s94aJ8c=hWH3l$XB3bB8M-QH#eE@4)ue5`0r`v_8G(o9w z9m0r|S+5~jqiDf@Jm}N}9jA5kRR1k)qEzB_BQ^@1g36Hd9oJ}~Xw*5(|LE$<+g92B4^e@qRGpHGWQlz)egbbD~4RKv?1 zIIB1MSL)M*174_{m{aG`g44V~zaRY#czzr4cm;$E=5_PIi?xcL*AKRawGiHZ&EE7M z^;LYc6mmEof;C&0a_2&5z~IG>k=zgTjy2!AzX8M%O=@_}vh%s_18iJeJfEJ?Gi4mT zQ4L^)#2LLVusk(?TUznr{?yZf%P+>4S796(PT(G+&vCUea&3c>RF0W-s+7Xl49n#* zO1Ks2&}yB*U#vMoD=!IF5Y6OXaOpqtqS6i!@SfX5TjlG1WUV}nke4}Zfxd^ElAdmm zm@Dz(;zYq<@Jl986rG|6Dg^!8C37+SaLE!9DOnLhI2HwfB1i2KN{fROtZ&Eal-e`|l5{LqDB#(t$h{$QQI&8*Auwo&8xhH}_tx%j*+r?MJ% zt-)-szX_8yjFVAgrdci`JV{R#@7u#mvVCP?;Q)X7@`zXPOQbky!t9hje9ZCHGuMd4 zh?|=J8jr;Lm}C&>I&1!V$d(G5A2+0PfJ)GQ!5O?jU1Sb`bv7iZ`(?_j*y02LX5K1A zF*1s82LO!zDoS#tybx$+%7Cpooq!m5zaI8^lLbPK-9(-UB*)yzEw$-$CL3RJe5mw> z_5D_W?C|Ou&C$dQAqZg)6)9qj22mB zCDwQ_<*@S#| zjL>>+>9MHO<^HcQHv0Y_1koxlvCS69P9t+nsF3`n>qlUoe4iUFbl-*waJ9rbC%7@8 zdmnQ7%-Q|%3F*L(Pd6Qhx!lgHRmZhmLoGqjkCl4523f= zIbFS!B8;!^J{0YeDE|8b{2Cgo#35L+$aDd#Dxl$mk&p3Jmpvql$ZUgX4~U?!KQ$#7 z_?=^%*WOpP)SEGY-Ot*yY{5(J<>0nya;?2CkOPeVJxe&O2lnr|9j`^YaZUnt39POCIfkLjwjbVAiqkN zzP|GCTq!xXRhHsn0FOwKpJ9aD@|bSId?7WL9KN)`)NuFMX}uG%BCr)|I!5q&7rLpf zl7{)?Onee@Fu#x5E~ZFVG_~(UhY(6DB1*6#iaF$+gIY&VjoxR$Gpg1&l*q9$KfN9l zm4xloG@kL}+B{2J)O)WPL)gP>;b;s?Od>;7;|z&)aP4=l8SZ66urn}sUC^p>Vo~hd z?NxfkouJLhP;d#jz#M7(3riO{54sYLgY0`dVO4s6ZaOH!^m2f(#djgTbGfj)#A)r7 zi;ptS93R{{4D+N0{zkhLp4_%zvjYoE!P^GE6>Y?G+4u@#Un|7mcj0u>(so>44+FT> z3-d;n8g;8-w{g1=je zbK0FDY|&48PKUC8-$}Zr6i8PakfV;o7rKJHPn0Ux$5m|ffOz=}2TE18nHjBzzP;^3 zy1{A4&~8}B6d`EG;;?Y-0(T$SiJH2=J`N7>08qdA-!$7~PvtWN_T~@WJ2(ygypvhD z_b0#Q&#xm6;oX6I?@#x?_P?2}tU}1IpT~uo=C#;nGE67eZgu;8d3jVa8@ z_A7~AN-a&{*nA6mIg5mu$D!&p^mgJ4Yz<|O(9cNpNVD_$9rvxdE;7;Ibp~ck^x;Xg z51#?CkgXv1tt^M*fM_0T&|=$dmJv9KzPKQVZ3jkgfPn~+g*f3RHta2X0>AD9Uu-xN z&`3rD7p6)Yeg~1X&$3SiOrO}0W%nHyI&$9_>Z+z_U2;!`S$Brz80Wcu?xe~%YJV0P zKn$_))+!XMi)%%8x9`G32IS2`LCK4?G;ihPxbJ`LCtA#xcfEI+fq-MY*Z{CC8B7=* zgMq%!NK@O@C4+M<$8i){;?9`_Uoq3m&#B$7>FbitMB|&owmce6_WVuzw$wvgz!@hv3`}>Vkak9zsOQi7)|@vZjTt-UJLPy-brPD2evk(-IOFd> ztwosH-V>3Ovb<&sWu|uobzq{-z$ua4D;)@a{+OR8}V2F-;s@%yF#M@6vS$SI+7$&z}aq15=YrddNbg5c3R zuYz5;o|w&Z7ApT+)trflnubLxi0QCzgjQOO6i2=ez5Z@pc@;p$Reix;m9VklO?Z%< zhsKM4pO!2+YT)-G2&X@DqT8!Nt!Y#e*s0QXy^gp*E))w9FwdN#l1}h(d_1re@ozyW&48_Dxo!g!% z%ryFQwGz);Wnb-5!jj0u{1wYoQHV7M?FsiFn9yKAR9WnVuX%1c?Zb+=`5PGDXRU$H zkSW}n@WvRVw;1O8=;+{s*JMW-VbGL;z)~)4h)Jm4lUN%{$IL3PqOYroulWdeHMM0` zR|9;HQ2rx+J#e@Vw|DZ- zvGXr%Bg&LX3qZXe$>gwqsrsfLKWe41tb&1IYcpU*Ub&-0r71>``=094z1a8#wl?6J z+q)>83@!3hvTtW#ZZ+M7k(Mf>yC7-4L<$y*Y4N&>!inP;5$O`}P}7227VsyJl)B6L z-1X=5l{bWu_YwG6Txk~FnIy<%MjGY z^^4hr948+UD>Xk=v`kw=XLj>erhVjy>H!`isK5i5rXl<(g0=%IxPJ@1_0x zy8n9VuL2@?JM7|3dJEl^uuEr&_{V*JnIc=(MHyH`%0F7szsp-!cs5H_0L8IN$~ESI z*}p+pP0UC0Ucw)<8_j^CTcSTGrA}w|i&86{M~Ay2*mjZ-mNNd3nCf4tuiL}ejmqf& z8;(5P%IM7UmAh22?M1I@H|~%z7JXCSXxD;EKD58WJaQv(w&Nb&^2eM)sO)Jo;ePV^ zzmF)Wj?$V(mY;60g0-pJm62^7vgg{lQip1`EKqk&E{Pcc{q%dO6ve)&w{7aR=cdep z*spXmmADjcdHJM7Q&>Q)7O{U{u!A{}HBK_ICtUc7MM^}kj;-~ijGu_xX+u$B3|w?J zbhq@$ZW@blo`3K1N{=z{Gp)`a@GF^Wk@0uk+*RoYH^b$SQ*o_xA14>uyvp>3w_ zHM9^RyMjFq=B$T$b)6HAC>|<77s1gi>#^#KG9@b-|p%=5e8ocY0L08w`DbF zeA-eV?}k0l^m~M)a~F*?;zr4pit)1`slE<&F@d;O!1kF9uo!F`&Dt3y^d8n{uVYNr zju7_90cxT-_<;$@a~4*DxE^uNiIU9YX}bE$d+8nwBN{`v-ejTful2%RL@cd6Ia#(hJ`bGum5)g-&d@wRO%`YIV~@L8%+UX##_;d_gw_#oUgkFVeI% zj4*JWejP2^mmy(e9ezG%a{aru0@HKqr110Y5X6%h{dbsh(NyBfpqHWBGF z!wftJW9Rl5LsSBvSNwu2hO#fJcbnNh2;_L5{r1bQxm@t00&I9nH*rx=Au1pd1u#&i2ZDR71snGRIiow3pr7ACd-7^)F!aaNZ!W-H z0W7~#%!{=!MTIk}PI=r_t;(UIRRMa^{*=nQxMc%7Wv%2;04X#H%YAvtI`Ipd_6+e@ zqWGrPTL_AmUbBc~yNY&=*>R<~=2K9_>nVeR?p4)Bl-N!NN${<>htRFlI&1Z>T6 zbwWbq-1Rdt>lYT9jk=$5Vk}0#2628i#h!f^WzHiXsT3e(13bp?lcN8D&-~n7WrBJk zA#e=g@w;~yKS+9pMBHWPA zW2fREOi7z@GY~oHKUnWo^J(B3X7L?fE%&s#_1&~IuY?1;)Pqu{uVTn77lD`IV0yJS ziMW`~)fc-n1ZVe=EJ`znt}6Y8M6Yk`eWm*}6BsP5Aboik(^ zS>)%wD^DbXm&Iiy9`21r^GyiTrSkXqvd2u8+!Fpx%f0I26cRst6vt?pkfQpTOig1Z z3xuX7#}=3H6e9IhlSH{?n7D-p6x~q>n6$wN`IAcJ zF-wJM5#FzzzOK`COo`6;;YSBvjC6@N=JBL?>(irs*LJ0hq8~P{n*CCjfmff_SWXB5 z0kj)HLYq=@b1x3Re40N_C%WJD?9n6rRO~6CX#{4~iW&$G>wXlp{=J}(!p7p#m+xD5 z%M!x^;`|gdMTo|qTC;579)q#BO3gI+)wg{3-3MhJC|rSSAp5SV3$NO1Y%zW@zd2jp zpShULogS&8bug?Ggj9Id^u33*p2W5~yJXjBYhd%Podr=nlQfrC-)uBtG=dOH$i8Dg z55QVv@5%&RIikkm)-!11R*~Q6vmPgwxr-Mf#l?*}J8^=L&I#Q4oIC+q0_BBpFvN=d zdsu}cja8Z0HW?~iQK<|^uDEw#4$M#XmGjlMZJ5@O+q#?Xm(WLVB6ltc{PHwFRZVNG zTxw;wP)1Br`RmPKBMG7Ru+MRI%9j)tB)tj7czN#dc(ZvIkowdXx3HgxeJZnQ$}INq zlUF;ncqpIIXqbxozQGp`LaB89_{oN8Ejf_hFc@Su6fyR%eLKA^?0@%yhkl+1HUIik z>%i)qK)W8RIrj+}Nn z$OE4cLFoI)iP1Jy_&8gqiba&2EbI4jVLvm=l)dwx#wb6s&y2}Dk4ouKt>Ny}^nBbj zqR@v>EB8>5an)r>x+`W!6yHvnRUk}kuYnUH;q|1cj6+{ zXnM84{G9>Q6qm4UJh3KR`AwLoekMt%Dr}C32TcV2Yi%AN!;W2hpeVg{9`poz3kvKL zs-Cq%1eHd9+dex33>`u-u>VE;T`k4dE!GT0l=RR_;n}Hf$cAIU4YfseRphzFG_kU1 zwr@>V{N^cW5#fRl$;vFRG`lip{yc#ARMbpo@=>t8ewmp_8nU|dgf_G! zHQhk%I3m4&2X_aZ?H@MOg$Z;Mqw7iiF?sdF(-K-5&!;=G*$|($A+9mz^lJKk`ZV#Y z(T^h1EkLzbQHbC6l+Wrs?oAL@a@JKYXt_G>5l8OvYUOGQkb@&$(4LRM!SD>SucK5# zPASG%v?=ZzWFWk!YxrK10DZWZ$+Ir`D1*t0fqJ%=c=OxFecU~rLSFFKJQu~(*ph_W zN#lpFHll&VbwE%`uu8Eu{PP{=W-3_!Ytc5CyE~R1OIhF^>hr`9+b{DtakD{$Dp4@c z3CuS&8}=awqT-C#_;|>|z3`hNO4*|IQcgoF?0uC-#z^Edsvg1XJ9NBbemln>J7U)O zpA(*^`m`TKZ#G(tIm>VtJOM_w!Gc=UkjR_#g+Zlc=)84$Idnr)XX0&RW|UsQN^lEj z=}YIYeBD#VkD4GMitpWQKV6;$(Sn8P(1X!N{+lyN;!XrvWs0==b#uV`7R>w`#jRRu z5;PuIYu6(7`z*VUP#KpE#>zG{gN?R^hr}VQl_Lu5A}_@TphN9g<%)XfvT?gds^b&3 zjEt701^i9on(ZYoBIM-uyzmnP8aj}=ZeD*PD|aVr*>D1wkFKQ8?;#Ve$pe{|#AX(c z)ELh86)fgvS?4K*vBo~pi5b2F)2n+b$7oCi9=}?5+@cRs<>{QKqB_{7$$qs~sG4Mq zQwnhhREK&ttGPGH%LWI3mXA*;hb%snRW(+-rrjA96*kINuR6~2(Q$D2JC-~A*7pO3 zEF$*8SBQ?AW;nEFD-)tlk#pN88^GO>1ND%>L-$-5as1l@irfhy7V0986ZUr-Q?8mY z&6HPtZK!(CTh-Ap{pP+n-P(S2Pw^4};6RjgVr8J`sRVWD_?Ut!k8Oo#&O`IxuY{Vc z%I)3@E)(Zi(J%9hE&)X8tIETfto&mSGe~9p$7T@4AcvKIlTUQWEqXa-R(7)8UiZ^Y z1*_nYrE(SJC6m3#H4b`t9Ua{=htCaQ&zODe6VO!GhH&YTX0z0Mw7 zBx5d;i{g9wx{|C< zklQ&%))chNgk`2--Cg{?05D_!G2~vvAFQ`t{@cP6m%Xq(L4z{a=;^KE)3R!0yxX#0 z`XnFGHYMC{a<*ECS0FC}>KfrY201U_lX66PbBu*jL|s1@s%{U_4vHwu+b;W>_%e0h z0Z8fT`qc&R@T4IBv+=h-!<8>W^|{{tT~`H%##x^DYutGG0%RPF9g8M}aF7>KeLbAA z0H!%is4@(=wKWrc>Q>s%k9d%uxUH>mjo8u2FA0am+bd`Kg3>prKR2;>wM>gJt2EwY zN9Ic{s}P}~u=c~N^BVd#QAL?ey=3+iHg@cFV?S6jYeI_~z~4vWQMFMC5%vBt9<6Ei zqLj5I+P&8_Z|MXbd2D|(BMje*w?%JbRL=2rU(%j!q@PGw&>*e-2rd71x}E|Ot*rxi zj_H! zr6zVHT=+{g2mTJOzm(#8`q_PQ_zzgb*DR9gDT|dAfs`--nvi$fWPXZ2u9vskYWl$n zfl`-uL5+6KnXSV7lrUE{WpMIUW;cX}3^M|nSVK~VmUklgIdsCTHR`vLy5o!?j1f*{ zLTs6d_llX!xp{#Ss~jWhy8 z%r-e)`%SX7t^hyXei%>2KBI_`_Hwbi*mq%wLm#POEYYR^C|{ z`S$!)UblCpIWNjR*b}&Oq!9_&c>OGYU_SfhcwRD@i*6~rfJo#$SNE4SZ>ADdjR&DUFf6M$6^)L zs50=o*pliz`}5fo*sUHNc@k&rTs-8)+@UYm4;kL4Kj~60S6I`>CWk&<`faspUJms> zbp^1?VgE7^&p6qssB*gEA8k-WJG{>auQ2zU7q$yi=WnBKc<2j_H73A?p7Hc{)Ok+p{VeQlH$2&t$0W%rQd=)GE$OLRP)6C^wy{U6 zgF_x9_b__nYJ#w#84X<`uV80lR+3((mP;zh|D(P(Hr(VJ7u*rfXiEZb;O`t|gtRsF zu7UH`dFO}&nAo$!$-8Z>K_Nrh({#{!eUFM8yKe)h-R2MozbyRnq4>!D8g0VL@$ZHE z&xu{N_W|!3v+r31?_zDap|oYX);==-Fk7!?d`YMG5|Wg=0ALG`iElZzM5rQm8Hh*+ zFG5)2t5jd>48Viu*@S03H~rw?5PO?*pa-scEVY0&R==0|t&f?Y4zLg7&^!fKD7qG4II*R?cQ{`2YgBii^L7 z`q8H^^HE=7C$}hRA(84}mr0rh31O$*5Y))4&^9l(gXn;Z?&?SYNs%cv9zO6=x|8#{ zYT0GAZiI^{p+o*GN;CS*LlW10Pr4d>-1(NL(|k?cP^PR9-$vFREPW^Vj#;(>L@F>*wquRx8L0WEQ8vnY)e7N(W|6U_onk)3DwT77eV84)b@OI zClh}u`gY~G<%_Ye%JZs(c*lhHn!Xh6MdPZYvaey*!caIeEj-0I3dWnzC54ciAJkjz z8WE^?Z+73Hl-b;pSHe5YkDTedU!&%*JD6&n3C!R(JzIOtpO;n62uouo!*BlF(mg%8 z4aULe^j&T%Pt#qgdOguPmW8|O>esgUhOXsFrn3R^g(apvKZ@Q-WKx9>@~#Ljy#D^g z6p4xFpmv0H1@9DJ*S!K)i!rQsYkYmZyRr>(B;ugfOF8?M5B$ZD20if!^jwWft;bFQMA@)zoqmF7{CZ(OhH^yV3OH@G zV&$*A$0TMBkz3g<={6K)_U)Ru*uvr}zUjX}mQ1QK&Ht2}Z=$U-fxA=#qT+2fA}h=f z4e`f+8e7*9uek_~h`xkM&bRy(>3Ot8h5$)$t(Bs@ooVr@Dl@1v=y(yRNAB#^)LwCK zq7}5~bNXALs7uwwlTYpbm5iq9OmF;l1i%PBGi~!@$J+DxubU<~Z`sTrBhKZO!kVC^ zye4bbtY2OQ$cRZ$kqP!cl;Xki2nv2dYP3lfC{AjflTs9!=szk|6S4z&HG)%R`rMLV`_#=WiNt%u$ z4D@=Y6_sB(JioGQ^_dBqcDRjNCdN+me#zZn1hPm_%?B#frvr7C!L^-f038(y&HD}- zVOA}TntK3>w+F|>wEpSfYTqVYZV!tSeu+Q)P!T(-fR)dPpf@t{3}sq0HlW~UOB`S? z1$ZYmuaff6-;mjSYNf*(YI&J9&|?iG7cHZ?N#118-VKa+m~Bw!B0nN$5aJa_Td7%UOVrVT@&k++c<-hR5FL7`z~1e;h#l z=sstP6+mZh>z)`5PvBAl!>bggu?|&0Z)37h1Vpl;^u(wChPZRH8>4C=v6ElI#_)BGk zT$c4r;M6Y+lqi~i>9uf@enz|p0ST;NYRrCmGMc(QqJ(|_HG{~uxVFfY z<^!&*5!j;M^SO5dWb2YrXNOcm0yK?|K$|W~M^v92c=SF+l8#d7MrTDw$u_cIuy`Wa zp(|0zTld-qE)jQRKs(IF7X0X1t+Pd$1(=r)9$w8EOQFxBMg4k;%P{+o*FC9*+&lN7 z_Q;8{M6KUf^XP^1zSZ3|2E3=lvi*8L z_x>fPaif(mF?YkUvgE(RwYKa5pfMn)jg=D-W^Q{7sC=+Fjd;ZrtdOygYewd&ymt^^ z89)*GcOh2?ahh;(_yPq%URkt}$TgET%FvCUhagEvC#&Rpa4&Rr%ADr@VA`Kx zUo2ynM=tf(uqE8fUTWt%ds#zE(aG~e5^umZhP@diTddG477U!BmvBzy0GdR}lj@g; ziz(K6nW*Ows<;WZ7r!pM>lLHU7T?LV<2JR=rE-~n5`ve{DGegCUfqi6X^UqhQ;XBo z)s1NYgWNvYk_kus-E(alB`rIBQi~f~=7~S)LL4gpE44WzZ&BTF-nv*RB%U(&N_PP$-7Dw=#p^WmIF*C; z^b^^z1=$_q#V_J|%v0Rs16FDq7Vs}Q6zqM;&0Uc~?gYv&j_c>80}D)|+!?QJc7<`E zjo5*fj;Jsl+Id;0wwq%7bXQFtb?gRO;^g>Tk$uofuY%b3;esmHSFW`xoZ)p|F<#-a z4ktS`!IJ&0*@bno_P1}5F9_@$a`?3W5J!+R1TS&l`+apSnc=T{5Txr}w;7CQej~p3 zhV1$H788TrP%T-3;q6G50IXG_kIb(^R=636@aWZri{dcv3ctC>15L^|pQ_Fdw45CJ zi&@P+Cx~{nbm)~|PmbkI;8Qu#M&OPyCl2}XI8J#(&o}lD3#wJ5*D*0u7T*7hmBRmx zmDAJ=*Y$U<)d1)m$QwABKG&mRd}B#_%d?#6r$0yN3Kx;#^v}EK-EkGdV<2+F;jwV| zD2dQinCNI^7aVFpX*Mk?v(70Ac@|p#F^B16Rh0bcMgd|u1;(+@Sy8m~rlr~ulx$ej zVU5Sdl-T6t11Mk~Y!k~?=e+=SS}An!?jk{yp``3l1~J*$>Zj~zeuLVI+Akqiw< zFnZ&ZAG6XNSgW>M%QNpH*hh<^7fR}D;_t7y3jK!QcFEup`j1K%%F8et1d@ZGL!e^- zIgZ!)jtvxm!ISc#eStkPeIH`MPp>av`H$+=>clA}rvBJ3yxl%+8(&DqEQ_aA*w(h& zH-;b9j`83hEn{?Ny^5(MR!$KxKxwkq<}L{`7YM#vHcXM>eBXnOyG<;9G*f#clbGfy zN{*(3mEizyAARhWmDNrzVGEHQw$Y7Iy6pRiNsW`Tt(x5eU}qKkEf}7=_GG@e>dCT? zlB#l?!1v|L_6fJ4#ttzH0)@c-)$(Cwh zVCc)BXG2G_AHsiZVxzBc{c-Tupc=5#I}o%v$~T{kVw>vlon!u$~G1Kpr!W zrg&8gTF*xwqJ~~8^=R-&Uo@aTV4#+^@msz?vA5#z8(YrzD0;wdXS*ewG4 zZ{5qHd1VWK1y2mcrxUyIXK#09iLLne3YQ-X&{yB5?98{XJgJ^UjcXT8j4^T@MhNRL z@7rW=ijR5rMZ|^D}2A*tYgwPm$q@CLO6`99! zXGPCle9_qZ3)|i4ylqmEM9z5Yfmfp5ARi>&@L(ZQ3 zcKw>iY^>pL=nb|?Rd1)(z9Cx^tBD@-)4E2`T5~WD_;f_A4?3N#d%;X`mRjtKKF`z1 z>77_7s@7+^x;_zV4vO<7J7$nMkYk*(O!n!gB3d z7%f$rIbb=4$jT!Auck010eo+!Xv?t{Hsyv&gPyY+Dub7v#bAjmV9(Fz$6Mu>d$t#0 zr)-#YuRSlqk=M1&oT*j3+|5og^fdipN{Wug9f|yHUi+00kUH+$Z8u|v-K4C$Llgf( z8(TV#)~L8|cTf6q->l@%*uUjOVbor-o#cz))$Zd~AHO?uf}^aydPs>}ERV`k)oAdk z#tB!k`40lH^dC%0m~FAI^r*hU_mP_I!&uzo{t4Q5WFU_u)6L4K%#8luB%c>+{%KWE zW691Q+M&4lt!Lbb$k~)NEAKCGMc_sa;LiT()xqiQUhT^dNWEKv^rkcNh>p?05<36w zRw$lO%vHeBx>x#6kytqY$>PUB{m60d{foLA#JU5#ijDoH<+IBHLa*Ub$#gN;yJmdm zkty~|vP}@d`~yDB&yY&m_NMm_wn7KobvS7O4T1N?yXIdQ6FTBNt`@8HZvpp{FTGMhkMTziFH(kJrUk~DNORZhAY0z z=bQ1-I(pJ}D_r_|s&~|7F<4&Yc~+9~ZY<88Rf==l55|MudD3zi6lF4ELeag!N?~A1 zakyRfutBZ4#4Z*1jjVFf{A1E?Krg5#QiH+>3M zO+Z35tw|XC3YYcYxqaJs#4#Brb#5P5InZAgP{TXId8HdD@u|WaA7Neyl!83a-ep9L zFd=v2PW|s;znbv@lUm=2J1@PQFURpP-rO!Vb|IMH%3tGCA;`!|GG0^waL$wzi)=H1~So`nvw8y#I4IC7^Y4 z(d9HtYOItFqDBM%!YDDx`nF_#?di)=*C%1~= znZT1xDxG%W^GfPuJ3hdtlY@jpL*jh~P&zT&)iRov-C21MHPzKrg8wUmfUYI}7 zvr^1b^mF2_7jbj6^gK-yEiHYNXbW~G?his%-V*R` zoZ;6YMHUGhz(m(#MqH5jolN^b(h53;)ou(Fn+BNg(uu-ngML23U4K~`W6ENcsD33@ zvuSs-!Xxe?ylGf#(CKkv*9^3(AexIiq8*9q2b2VNerx@v7YK&fak_jn#8c{5=YuE;{c&);OnS)qsSj;#BsynwKYQ zj1&`J1Kx&b4*SD#y;2u3SyHiPyZ{4*eO*{<33jr9`qsKkpdC2z6PjHd1W4}ipHrKc zIv8~A;+Nun*lGB^<_Xe(;gUX~b*^>wl*S}g%Ukjl#+gvX3QoL8f9*!eC=|B6o=+MB zmj%gu=&+B}{)_O*!ydOB9G>`K{vn2jl!?sJ%0zXKyf6E<_GgyDL~$s{haKsAso#$g z=xR-F-ue&v3Ys4I`~8r5M+xSlO*XyTb|Vpe-b4#_y)j>mBo$Uq!Z?Y)KC0X>GfTg? zhdEkFambrWxM?n99eh$kgYs>F0!1kW%CH&D^;8CSMRdp|v{nrr>XUr+D5w56j7;mN z1HsSWjbhgs1q;jGQleJ?jX4PMd{#w3NC|L|I7Bw-h9`GhLS$8BR zQM0}M8Rdqu!$h*Z7169wWYNm|2?^is}=7To~v)d z-`b!57`=GEkqT0Wp;j1Ao+pG-x2z*BRf4uo>s{_2Ax6$Jk1x`f2?<6QbB{K*C;ExS z2bh}i(f_r?b1*+aSkVQb|LJnHcc>kwzYsb1KBtWHnA98OId9ExlEI6u+0OPCtypFbE<*TK_4GsG@$`dI} zOcA@Ug8{`h`oWcZq&2vzd`f%%8>{9LjMRK4j^CKxYg_(Y;D{~deSoryVqi40m=V~q zAa-X^XKW~g@?k&y;rQKb{42!eM`D?k)lBc*Nn*x+uJfh-LYTe_QD2Gj!c7E-4#%b) z9jBb;ZupW|5~S=j%1l!5fYt;xrroI8+#O%ZXl{9COQN+(eSt#Gd5;b|ZE9E?Ms8q7Z5)m>sC;%xR9wv%-*~v+Q%1=l^O`@nBPamIpm+>9m4a+~PLIPb*RoeXXNa$Ti}7 z{w{Xe|0uanasLkFYi4v}+l-Sa^s zqUafhlB_C)VC!?)z?qmsLI7U=hX5FreFuPZ>f?|RFB`a=2`D2yES>#=kfMJQI-PqOH&+wU8u z&@zvZIgbdSpDo+A)(CW@qP*gD8wfi%gD-|=#(4r*m|?k{11iZ)CDcutWqhhM%7`hx z{(!WNLC_c**P@F7vDw$H)8*3l8!EjJpoo~{}@HXIHUDP^+Z#JNt zvrpF#rF=(rs0-=H0V|LCB@8hd0Vj^P5|0ntBPg)K#jO0acVOHL7cB51Mu|^koBh?w zVF%_8G!yPJKdnf*rUcih3Fwa;Yg@UhT8IH}{cC*2{X12hrxtG+mdL+f;X3>z*;;kw zB|Dk|4L*Vc`=4bdkq3)|=tpdBojKcR)?^-HCcMBXE~c+#Hj(;_^~sYJ_H-g9c>I!2 z*EhS>G9hPcGTQ&)zPTNmR_0H>&Q0Tqs)<;8J~BgoofL!w!u&L<=QfXA+J@j0@5pK= z?N}!8OQ-g|9WgDXBT1=QQ<5TF!?8)OijSx7(8jl;{+xTRUq5{K`n4o;Zd-9BWM#%} zdSY%)SMA0lT`<$dZ%sKlY3u1Ll)SzVQkc4uB`?>e@!vmT_N{`aJwAR-Fj!Ade~0s?dcqB&8=E$7?#OJ?E@VLRQc$(NI-ma5A|Rt#zo`H%koxLDy5HHCry z2LP<)%OOax9yi@?OMtWn2n~W-)+OHF5q$a7a3sDzumVvb@K$4jj;_L>jB}a11MCB$ zx1^Nx5`Uk3qw^HBN?dGo0?ip$zG!gB7&A}Ai%IxqRoO8t|spK z=E1+l-5LC4bMVCmgXO#7n5m1jOvO8Y$A4XZ2|};{7wx^d&foxwHnjt>I@5iA&BIsIf z$XTX{o@>6F(JzDGwIBmPSQp-?W{_)uc zg#DHJ*cWjXr16)o z@lfK~t`hL;7V(Q9jHga+?|gM=(LRzZO5?(MWnr;n*O38#HfH;`_+zVV^M1VI%bHut z&)o>fxqtYYXy()VQ@I~63W52>d&7wA2=Vi2MdGUqk`>>%n{*kiIWuzXEYOmR1$2<- z4mg1Wbg?zSTl0R{jsd^|QevoD@l)LnJzm}pi^hcfiP~dnJ!6{s;0qnfPtFv3KNau? z^-6fe6pHst3ZWLZ)jsF2j=A?|H)PL7=g!mjJ_RfwI;6FkPy4*fKWltCMQnkN)>oZ* zx+lVa#>SXs1RP9Af9+yaiZy>EXgyrNa(K)h!U(6siUb)8VAQPWSP9DAqeQD#8>G&- z6=O9!D#hslbkd;qH^3ndfw{QVLKyL%eV1_g&(CyRcdDq6jgB`=4B+4W!GoB}u(g

eL`};85{hgONaP@I?$|c=S`IU;8 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 L94xENak2jgo2Sda literal 8293 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 diff --git a/setup.py b/setup.py index 80ad9064..48872d7b 100644 --- a/setup.py +++ b/setup.py @@ -13,9 +13,9 @@ buildfolder = Path("build", folder) sbuildfolder = str(buildfolder) libfolder = Path(buildfolder, "lib") library = Path(libfolder, "library.zip") -print("Outputting to: " + str(buildfolder)) -compress = False -icon="icon.ico" +print("Outputting to: " + sbuildfolder) + +icon = "icon.ico" if os.path.exists("X:/pw.txt"): print("Using signtool") @@ -28,13 +28,16 @@ else: from hashlib import sha3_512 import base64 + def _threaded_hash(filepath): hasher = sha3_512() hasher.update(open(filepath, "rb").read()) return base64.b85encode(hasher.digest()).decode() + os.makedirs(buildfolder, exist_ok=True) + def manifest_creation(): hashes = {} manifestpath = os.path.join(buildfolder, "manifest.json") @@ -51,11 +54,11 @@ def manifest_creation(): print("Created Manifest") -scripts = {"MultiClient.py" : "BerserkerMultiClient", - "MultiMystery.py" : "BerserkerMultiMystery", - "MultiServer.py" : "BerserkerMultiServer", - "gui.py" : "BerserkerMultiCreator", - "Mystery.py" : "BerserkerMystery"} +scripts = {"MultiClient.py": "BerserkerMultiClient", + "MultiMystery.py": "BerserkerMultiMystery", + "MultiServer.py": "BerserkerMultiServer", + "gui.py": "BerserkerMultiCreator", + "Mystery.py": "BerserkerMystery"} exes = [] @@ -66,7 +69,6 @@ for script, scriptname in scripts.items(): icon=icon, )) - import datetime buildtime = datetime.datetime.utcnow() @@ -137,5 +139,4 @@ if signtool: print(f"Signing {exe.targetName}") os.system(signtool + exe.targetName) - manifest_creation() From c53798bdf89c3021f0cb7873623a7a177fef4f68 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 6 Dec 2020 14:40:57 +0100 Subject: [PATCH 11/30] increment version --- Utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utils.py b/Utils.py index fe7d726d..98109239 100644 --- a/Utils.py +++ b/Utils.py @@ -6,7 +6,7 @@ def tuplize_version(version: str) -> typing.Tuple[int, ...]: return tuple(int(piece, 10) for piece in version.split(".")) -__version__ = "3.4.1" +__version__ = "3.4.2" _version_tuple = tuplize_version(__version__) import os From 45d55414e1d8767b76294a6fc5c7bea0a2985fa7 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 6 Dec 2020 14:45:53 +0100 Subject: [PATCH 12/30] unify simple settings ER options naming scheme --- WebHostLib/static/static/playerSettings.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/WebHostLib/static/static/playerSettings.json b/WebHostLib/static/static/playerSettings.json index c2858cb0..3c5b628e 100644 --- a/WebHostLib/static/static/playerSettings.json +++ b/WebHostLib/static/static/playerSettings.json @@ -346,15 +346,15 @@ "value": "none" }, { - "name": "Simple Dungeon Entrance Shuffle", + "name": "Only Dungeons, Simple", "value": "dungeonssimple" }, { - "name": "Full Dungeon Entrance Shuffle", + "name": "Only Dungeons, Full", "value": "dungeonsfull" }, { - "name": "Simple Entrances", + "name": "Simple", "value": "simple" }, { @@ -362,15 +362,15 @@ "value": "restricted" }, { - "name": "Full Shuffle", + "name": "Full", "value": "full" }, { - "name": "Crossed Shuffle", + "name": "Crossed", "value": "crossed" }, { - "name": "Insanity Shuffle", + "name": "Insanity", "value": "insanity" } ] From 493d5aa156076834034fa3b0db91c21636b23637 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 6 Dec 2020 14:48:21 +0100 Subject: [PATCH 13/30] technically random --- WebHostLib/static/static/playerSettings.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WebHostLib/static/static/playerSettings.json b/WebHostLib/static/static/playerSettings.json index 3c5b628e..c642db55 100644 --- a/WebHostLib/static/static/playerSettings.json +++ b/WebHostLib/static/static/playerSettings.json @@ -624,7 +624,7 @@ "value": "default" }, { - "name": "Shuffled", + "name": "Randomized", "value": "random" } ] @@ -640,7 +640,7 @@ "value": "default" }, { - "name": "Shuffled", + "name": "Randomized", "value": "random" } ] @@ -656,7 +656,7 @@ "value": "default" }, { - "name": "Shuffled", + "name": "Randomized", "value": "random" } ] @@ -672,7 +672,7 @@ "value": "default" }, { - "name": "Shuffled", + "name": "Randomized", "value": "random" } ] From 5a1f936694fd9d0eb1cc8dcd898656acfed33884 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 6 Dec 2020 10:55:58 -0500 Subject: [PATCH 14/30] Fix missing sprites on /weighted-settigs page, add author information to tooltip --- WebHostLib/static/assets/weightedSettings.js | 24 +++++++++----------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/WebHostLib/static/assets/weightedSettings.js b/WebHostLib/static/assets/weightedSettings.js index 7f6afcd2..19b2f5e4 100644 --- a/WebHostLib/static/assets/weightedSettings.js +++ b/WebHostLib/static/assets/weightedSettings.js @@ -13,11 +13,8 @@ window.addEventListener('load', () => { localStorage.setItem(`weightedSettings${i}`, JSON.stringify(updatedObj)); } - // Parse spriteData into useful sets - spriteData = JSON.parse(results[2]); - // Build the entire UI - buildUI(JSON.parse(results[1])); + buildUI(JSON.parse(results[1]), JSON.parse(results[2])); // Populate the UI and add event listeners populateSettings(); @@ -29,6 +26,7 @@ window.addEventListener('load', () => { document.getElementById('reset-to-default').addEventListener('click', resetToDefaults); adjustHeaderWidth(); }).catch((error) => { + console.error(error); gameSettings.innerHTML = `

Something went wrong while loading your game settings page.

${error}

@@ -170,7 +168,7 @@ const download = (filename, text) => { document.body.removeChild(downloadLink); }; -const buildUI = (settings) => { +const buildUI = (settings, spriteData) => { const settingsWrapper = document.getElementById('settings-wrapper'); const settingTypes = { gameOptions: 'Game Options', @@ -244,7 +242,7 @@ const buildUI = (settings) => { settingsWrapper.appendChild(spriteOptionsWrapper); // Append sprite picker - settingsWrapper.appendChild(buildSpritePicker()); + settingsWrapper.appendChild(buildSpritePicker(spriteData)); }; const buildRangeSettings = (parentElement, settings) => { @@ -404,7 +402,7 @@ const removeSpriteOption = (event) => { tr.parentNode.removeChild(tr); }; -const buildSpritePicker = () => { +const buildSpritePicker = (spriteData) => { const spritePicker = document.createElement('div'); spritePicker.setAttribute('id', 'sprite-picker'); @@ -415,18 +413,18 @@ const buildSpritePicker = () => { const sprites = document.createElement('div'); sprites.setAttribute('id', 'sprite-picker-sprites'); - Object.keys(spriteData).forEach((spriteName) => { + spriteData.sprites.forEach((sprite) => { const spriteImg = document.createElement('img'); - spriteImg.setAttribute('src', `static/static/sprites/${spriteName}.gif`); - spriteImg.setAttribute('data-sprite', spriteName); - spriteImg.setAttribute('alt', spriteName); + spriteImg.setAttribute('src', `static/static/sprites/${sprite.name}.gif`); + spriteImg.setAttribute('data-sprite', sprite.name); + spriteImg.setAttribute('alt', sprite.name); // Wrap the image in a span to allow for tooltip presence const imgWrapper = document.createElement('span'); imgWrapper.className = 'sprite-img-wrapper'; - imgWrapper.setAttribute('data-tooltip', spriteName); + imgWrapper.setAttribute('data-tooltip', `${sprite.name}${sprite.author ? `, by ${sprite.author}` : ''}`); imgWrapper.appendChild(spriteImg); - imgWrapper.setAttribute('data-sprite', spriteName); + imgWrapper.setAttribute('data-sprite', sprite.name); sprites.appendChild(imgWrapper); imgWrapper.addEventListener('click', addSpriteOption); }); From c6148ce6ade007ee44852f7bb5100675a59cc33b Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 6 Dec 2020 11:03:50 -0500 Subject: [PATCH 15/30] Include BotW Zelda.gif --- WebHostLib/static/static/sprites/BotW Zelda.gif | Bin 0 -> 541 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 WebHostLib/static/static/sprites/BotW Zelda.gif diff --git a/WebHostLib/static/static/sprites/BotW Zelda.gif b/WebHostLib/static/static/sprites/BotW Zelda.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ad3ab04bfc9456b2fda8190637d435f69dbda52 GIT binary patch literal 541 zcma)2p;E*!6igf5rO9QQ$dlkI5J(sd3XVTO9uA2-864k$LRKPA@(K3|m6a8UqF^^c zRI+nVABW*H zO^4V0IPPG`NBuO1<&Md+WS+*86Oc^;(=I$dJm05UdS>tn`Z3A!v=9lG@-zYn(Jih!Pu?G+JVI WD2XBwFaKw#1!6{~DbK}tQP;nnh%|x# literal 0 HcmV?d00001 From 70f398ec739180bdc430ee4998bf9229e72e2777 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 6 Dec 2020 17:12:41 +0100 Subject: [PATCH 16/30] re-export spriteData --- WebHostLib/static/static/spriteData.json | 1610 ++++++++++++++++- WebHostLib/static/static/sprites/.gif | Bin 541 -> 0 bytes WebHostLib/static/static/sprites/Ark.gif | Bin 541 -> 0 bytes .../static/static/sprites/BotW Zelda.gif | Bin 541 -> 0 bytes dumpSprites.py | 2 +- 5 files changed, 1610 insertions(+), 2 deletions(-) delete mode 100644 WebHostLib/static/static/sprites/.gif delete mode 100644 WebHostLib/static/static/sprites/Ark.gif delete mode 100644 WebHostLib/static/static/sprites/BotW Zelda.gif diff --git a/WebHostLib/static/static/spriteData.json b/WebHostLib/static/static/spriteData.json index b455f898..b0c744ec 100644 --- a/WebHostLib/static/static/spriteData.json +++ b/WebHostLib/static/static/spriteData.json @@ -1 +1,1609 @@ -{"sprites": [{"file": "neslink.1.zspr", "author": "MikeTrethewey/Fatmanspanda", "name": " NES Link"}, {"file": "abigail.1.zspr", "author": "Fish_waffle64", "name": "Abigail"}, {"file": "adol.1.zspr", "author": "Yuushia", "name": "Adol"}, {"file": "aggretsuko.1.zspr", "author": "skovacs1", "name": "Aggretsuko"}, {"file": "alice.1.zspr", "author": "Artheau", "name": "Alice"}, {"file": "angry-video-game-nerd.1.zspr", "author": "ABOhiccups", "name": "Angry Video Game Nerd"}, {"file": "arcane.1.zspr", "author": "MM102", "name": "Arcane"}, {"file": "ark.1.zspr", "author": "wzl", "name": "Ark (Cape)"}, {"file": "ark-dorana.1.zspr", "author": "Matt Dorana", "name": "Ark (No Cape)"}, {"file": "arrghus.2.zspr", "author": "fatmanspanda", "name": "Arrghus"}, {"file": "astronaut.1.zspr", "author": "Malmo", "name": "Astronaut"}, {"file": "asuna.1.zspr", "author": "Natsuru Kiyohoshi", "name": "Asuna"}, {"file": "bsboy.1.zspr", "author": "InTheBeef", "name": "B.S. Boy"}, {"file": "bsgirl.1.zspr", "author": "InTheBeef", "name": "B.S. Girl"}, {"file": "metroid.1.zspr", "author": "Jam", "name": "Baby Metroid"}, {"file": "badeline.1.zspr", "author": "Jam", "name": "Badeline"}, {"file": "bananas-in-pyjamas.1.zspr", "author": "codemann8", "name": "Bananas In Pyjamas"}, {"file": "bandit.1.zspr", "author": "Fenrika", "name": "Bandit"}, {"file": "batman.1.zspr", "author": "Ninjakauz", "name": "Batman"}, {"file": "beau.1.zspr", "author": "Achy", "name": "Beau"}, {"file": "bewp.1.zspr", "author": "Valechec", "name": "Bewp"}, {"file": "bigkey.1.zspr", "author": "Fouton", "name": "Big Key"}, {"file": "birb.1.zspr", "author": "Andrew Copple", "name": "Birb"}, {"file": "birdo.1.zspr", "author": "BlackTycoon", "name": "Birdo"}, {"file": "blackmage.1.zspr", "author": "TheRedMage", "name": "Black Mage"}, {"file": "blacksmithlink.1.zspr", "author": "Glan", "name": "Blacksmith Link"}, {"file": "blazer.1.zspr", "author": "Herowho", "name": "Blazer"}, {"file": "blossom.1.zspr", "author": "Artheau", "name": "Blossom"}, {"file": "bob.1.zspr", "author": "fatmanspanda", "name": "Bob"}, {"file": "bobross.1.zspr", "author": "CaptainApathy", "name": "Bob Ross"}, {"file": "boo.2.zspr", "author": "Zarby89", "name": "Boo"}, {"file": "boo-two.1.zspr", "author": "Achy", "name": "Boo 2"}, {"file": "botw-link.1.zspr", "author": "Pasta La Vista", "name": "BotW Link"}, {"file": "botw-zelda.1.zspr", "author": "Roo", "name": "BotW Zelda"}, {"file": "bottle_o_goo.1.zspr", "author": "Fish_waffle64", "name": "Bottle o' Goo"}, {"file": "bowser.1.zspr", "author": "Artheau", "name": "Bowser"}, {"file": "bowsette.1.zspr", "author": "Sarah Shinespark", "name": "Bowsette"}, {"file": "bowsette-red.1.zspr", "author": "Sarah Shinespark", "name": "Bowsette Red"}, {"file": "branch.1.zspr", "author": "cbass601", "name": "Branch"}, {"file": "brian.1.zspr", "author": "Herowho", "name": "Brian"}, {"file": "broccoli.1.zspr", "author": "fatmanspanda", "name": "Broccoli"}, {"file": "bronzor.1.zspr", "author": "fatmanspanda", "name": "Bronzor"}, {"file": "bubbles.1.zspr", "author": "Artheau", "name": "Bubbles"}, {"file": "bullet_bill.1.zspr", "author": "Artheau", "name": "Bullet Bill"}, {"file": "buttercup.1.zspr", "author": "Artheau", "name": "Buttercup"}, {"file": "cdilink.1.zspr", "author": "SnipSlum", "name": "CD-i Link"}, {"file": "cactuar.1.zspr", "author": "RyuTech", "name": "Cactuar"}, {"file": "cadence.1.zspr", "author": "Fish_waffle64", "name": "Cadence"}, {"file": "toadette_captain.1.zspr", "author": "Devan2002", "name": "Captain Toadette"}, {"file": "carlsagan42.1.zspr", "author": "FedoraFriday", "name": "CarlSagan42"}, {"file": "casual-zelda.1.zspr", "author": "Fish_waffle64", "name": "Casual Zelda"}, {"file": "catboo.1.zspr", "author": "JaySee87", "name": "Cat Boo"}, {"file": "celes.1.zspr", "author": "Deagans", "name": "Celes"}, {"file": "charizard.1.zspr", "author": "Charmander106", "name": "Charizard"}, {"file": "cheepcheep.1.zspr", "author": "Faw", "name": "Cheep Cheep"}, {"file": "chibity.1.zspr", "author": "Ecyro", "name": "Chibity"}, {"file": "chrizzz.1.zspr", "author": "Chrizzz", "name": "Chrizzz"}, {"file": "cirno.1.zspr", "author": "Achy", "name": "Cirno"}, {"file": "clifford.1.zspr", "author": "PlaguedOne", "name": "Clifford"}, {"file": "clyde.1.zspr", "author": "Artheau", "name": "Clyde"}, {"file": "conker.1.zspr", "author": "Charmander106/SePH", "name": "Conker"}, {"file": "cornelius.1.zspr", "author": "Lori", "name": "Cornelius"}, {"file": "cucco.1.zspr", "author": "MikeTrethewey", "name": "Cucco"}, {"file": "cursor.1.zspr", "author": "PlaguedOne", "name": "Cursor"}, {"file": "d_owls.2.zspr", "author": "D.Owls", "name": "D.Owls"}, {"file": "slime.1.zspr", "author": "KamenRideDecade", "name": "DQ Slime"}, {"file": "darkboy.1.zspr", "author": "iBazly", "name": "Dark Boy"}, {"file": "darkgirl.1.zspr", "author": "iBazly", "name": "Dark Girl"}, {"file": "darklink.1.zspr", "author": "iBazly", "name": "Dark Link"}, {"file": "darklink-tunic.1.zspr", "author": "Damon", "name": "Dark Link (Tunic)"}, {"file": "dark-panda.1.zspr", "author": "MM102", "name": "Dark Panda"}, {"file": "darkswatchy.1.zspr", "author": "Mike Trethewey", "name": "Dark Swatchy"}, {"file": "darkzelda.1.zspr", "author": "iBazly", "name": "Dark Zelda"}, {"file": "darkzora.2.zspr", "author": "iBazly", "name": "Dark Zora"}, {"file": "deadpool-mythic.1.zspr", "author": "Mythic", "name": "Deadpool (Mythic)"}, {"file": "deadpool.1.zspr", "author": "SirCzah", "name": "Deadpool (SirCzah)"}, {"file": "deadrock.1.zspr", "author": "Glan", "name": "Deadrock"}, {"file": "decidueye.1.zspr", "author": "Achy", "name": "Decidueye"}, {"file": "dekar.1.zspr", "author": "The3X", "name": "Dekar"}, {"file": "demonlink.1.zspr", "author": "Krelbel", "name": "Demon Link"}, {"file": "dragonite.2.zspr", "author": "Fish_waffle64", "name": "Dragonite"}, {"file": "drake.1.zspr", "author": "No Body The Dragon", "name": "Drake The Dragon"}, {"file": "eggplant.1.zspr", "author": "PlaguedOne", "name": "Eggplant"}, {"file": "emosaru.1.zspr", "author": "Achy", "name": "EmoSaru"}, {"file": "ezlo.1.zspr", "author": "cbass601", "name": "Ezlo"}, {"file": "fierce-deity-link.2.zspr", "author": "jeffreygriggs2", "name": "Fierce Deity Link"}, {"file": "locke_merchant.1.zspr", "author": "Artheau", "name": "Figaro Merchant"}, {"file": "finn.3.zspr", "author": "Devan2002", "name": "Finn Merten"}, {"file": "finny_bear.1.zspr", "author": "skovacs1", "name": "Finny Bear"}, {"file": "flavor_guy.1.zspr", "author": "PlaguedOne", "name": "Flavor Guy"}, {"file": "fish_floodgate.1.zspr", "author": "Delphi1024", "name": "Floodgate Fish"}, {"file": "4slink-armors.1.zspr", "author": "Mike Trethewey", "name": "Four Swords Link"}, {"file": "foxlink.1.zspr", "author": "InTheBeef", "name": "Fox Link"}, {"file": "freya.1.zspr", "author": "Demoncraze", "name": "Freya Crescent"}, {"file": "frisk.1.zspr", "author": "Original by Toby Fox, sprite edit by MisterKerr", "name": "Frisk"}, {"file": "froglink.3.zspr", "author": "Mike Trethewey", "name": "Frog Link"}, {"file": "fujin.2.zspr", "author": "FujinAkari", "name": "Fujin"}, {"file": "future_trunks.1.zspr", "author": "Merciter", "name": "Future Trunks"}, {"file": "gbc-link.1.zspr", "author": "skovacs1", "name": "GBC Link"}, {"file": "gamer.1.zspr", "author": "Unknown", "name": "Gamer"}, {"file": "ganondorf.1.zspr", "author": "Fish_waffle64", "name": "Ganondorf"}, {"file": "garfield.2.zspr", "author": "Fwiller", "name": "Garfield"}, {"file": "garnet.1.zspr", "author": "Artheau", "name": "Garnet"}, {"file": "garomaster.1.zspr", "author": "Herowho", "name": "Garo Master"}, {"file": "geno.1.zspr", "author": "FedoraFriday", "name": "Geno"}, {"file": "gliitchwiitch.1.zspr", "author": "Ivy-IV", "name": "GliitchWiitch"}, {"file": "gobli.1.zspr", "author": "Lantis", "name": "Gobli"}, {"file": "goomba.1.zspr", "author": "SirCzah", "name": "Goomba"}, {"file": "goose.1.zspr", "author": "Jam", "name": "Goose"}, {"file": "grandpoobear.2.zspr", "author": "proximitysound", "name": "GrandPOOBear"}, {"file": "gretis.1.zspr", "author": "SnakeGrunger", "name": "Gretis"}, {"file": "grunclestan.1.zspr", "author": "SirCzah", "name": "Gruncle Stan"}, {"file": "guiz.1.zspr", "author": "GuizDP", "name": "GuizDP"}, {"file": "hanna.1.zspr", "author": "Maya-Neko", "name": "Hanna"}, {"file": "hardhat_beetle.1.zspr", "author": "Artheau", "name": "Hardhat Beetle"}, {"file": "linkhatcolor.1.zspr", "author": "Damon", "name": "Hat Color Link"}, {"file": "hat-kid.1.zspr", "author": "skovacs1", "name": "Hat Kid"}, {"file": "headlesslink.1.zspr", "author": "fatmanspanda", "name": "Headless Link"}, {"file": "hello_kitty.1.zspr", "author": "qeeen", "name": "Hello Kitty"}, {"file": "hidari.1.zspr", "author": "Hidari", "name": "Hidari"}, {"file": "hint_tile.1.zspr", "author": "PlaguedOne", "name": "Hint Tile"}, {"file": "luffy.1.zspr", "author": "BOtheMighty", "name": "Hitsuyan1337"}, {"file": "hoarder-bush.1.zspr", "author": "Restomak", "name": "Hoarder (Bush)"}, {"file": "hoarder-pot.1.zspr", "author": "Restomak", "name": "Hoarder (Pot)"}, {"file": "hoarder-rock.1.zspr", "author": "Restomak", "name": "Hoarder (Rock)"}, {"file": "homer.1.zspr", "author": "Fwiller", "name": "Homer Simpson"}, {"file": "hotdog.1.zspr", "author": "Xag & Tylo", "name": "Hotdog"}, {"file": "hyruleknight.1.zspr", "author": "InTheBeef", "name": "Hyrule Knight"}, {"file": "soldiersprite.1.zspr", "author": "InTheBeef", "name": "Hyrule Soldier"}, {"file": "ignignokt.2.zspr", "author": "fatmanspanda", "name": "Ignignokt"}, {"file": "crewmate.1.zspr", "author": "Fish_waffle64", "name": "Imposter"}, {"file": "informant_woman.1.zspr", "author": "Herowho", "name": "Informant Woman"}, {"file": "inkling.1.zspr", "author": "RyuTech", "name": "Inkling"}, {"file": "invisibleman.1.zspr", "author": "Mike Trethewey", "name": "Invisible Link"}, {"file": "jack-frost.1.zspr", "author": "xypotion", "name": "Jack Frost"}, {"file": "jason_frudnick.1.zspr", "author": "Artheau", "name": "Jason Frudnick"}, {"file": "jasp.1.zspr", "author": "Chonixtu", "name": "Jasp"}, {"file": "jogurt.1.zspr", "author": "Nakuri", "name": "Jogurt"}, {"file": "katsura.1.zspr", "author": "atth3h3art0fwinter", "name": "Katsura"}, {"file": "kecleon.1.zspr", "author": "Gylergin", "name": "Kecleon"}, {"file": "kenny_mccormick.1.zspr", "author": "Artheau", "name": "Kenny McCormick"}, {"file": "ketchup.1.zspr", "author": "t0uchan", "name": "Ketchup"}, {"file": "kholdstare.1.zspr", "author": "fatmanspanda", "name": "Kholdstare"}, {"file": "king_gothalion.1.zspr", "author": "kickpixel", "name": "King Gothalion"}, {"file": "king_graham.1.zspr", "author": "MisterKerr", "name": "King Graham v1.1"}, {"file": "kirby-meta.1.zspr", "author": "KHRoxas", "name": "Kirby"}, {"file": "kore8.1.zspr", "author": "Skewer", "name": "Kore8"}, {"file": "korok.1.zspr", "author": "atth3h3art0fwinter", "name": "Korok"}, {"file": "lakitu.1.zspr", "author": "SirCzah", "name": "Lakitu"}, {"file": "lapras.1.zspr", "author": "Fish_waffle64", "name": "Lapras"}, {"file": "lest.1.zspr", "author": "PrideToRuleEarth", "name": "Lest"}, {"file": "lily.1.zspr", "author": "ScatlinkSean", "name": "Lily"}, {"file": "linja.1.zspr", "author": "Razhagal", "name": "Linja"}, {"file": "001.link.1.zspr", "author": "Nintendo", "name": "Link"}, {"file": "link-redrawn.1.zspr", "author": "Spiffy", "name": "Link Redrawn"}, {"file": "little-hylian.1.zspr", "author": "MM102", "name": "Little Hylian"}, {"file": "locke.1.zspr", "author": "Rose", "name": "Locke"}, {"file": "lucario.1.zspr", "author": "Achy", "name": "Lucario"}, {"file": "luigi.1.zspr", "author": "Achy", "name": "Luigi"}, {"file": "luna-maindo.1.zspr", "author": "IkkyLights", "name": "Luna Maindo"}, {"file": "madeline.1.zspr", "author": "Jam", "name": "Madeline"}, {"file": "magus.1.zspr", "author": "PlaguedOne", "name": "Magus"}, {"file": "maiden.1.zspr", "author": "Plan", "name": "Maiden"}, {"file": "mallow-cat.1.zspr", "author": "FedoraFriday", "name": "Mallow (Cat)"}, {"file": "mangalink.1.zspr", "author": "fatmanspanda", "name": "Manga Link"}, {"file": "maplequeen.2.zspr", "author": "Zarby89", "name": "Maple Queen"}, {"file": "marin.2.zspr", "author": "Nocturnesthesia", "name": "Marin"}, {"file": "mario-classic.2.zspr", "author": "Damon", "name": "Mario (Classic)"}, {"file": "mariocappy.1.zspr", "author": "Damon", "name": "Mario and Cappy"}, {"file": "marisa.1.zspr", "author": "Achy", "name": "Marisa Kirisame"}, {"file": "cat.3.zspr", "author": "Fish_waffle64", "name": "Marvin the Cat"}, {"file": "matthias.1.zspr", "author": "Marcus Bolduc", "name": "Matthias"}, {"file": "meatwad.1.zspr", "author": "fatmanspanda", "name": "Meatwad"}, {"file": "medallions.1.zspr", "author": "Mike Trethewey", "name": "Medallions"}, {"file": "medli.1.zspr", "author": "Kzinssie", "name": "Medli"}, {"file": "megaman-x.2.zspr", "author": "PlaguedOne", "name": "Megaman X"}, {"file": "mew.1.zspr", "author": "MewLp", "name": "MewLp"}, {"file": "mike-jones.2.zspr", "author": "Fish_waffle64", "name": "Mike Jones"}, {"file": "ganon.1.zspr", "author": "atth3h3art0fwinter", "name": "Mini Ganon"}, {"file": "minishcaplink.2.zspr", "author": "InTheBeef", "name": "Minish Cap Link"}, {"file": "minish_link.1.zspr", "author": "Artheau", "name": "Minish Link"}, {"file": "moblin.1.zspr", "author": "Noctai_", "name": "MoblinSprite"}, {"file": "modernlink.1.zspr", "author": "RyuTech", "name": "Modern Link"}, {"file": "mog.2.zspr", "author": "Krelbel", "name": "Mog"}, {"file": "momiji.1.zspr", "author": "Ardaceus", "name": "Momiji Inubashiri"}, {"file": "moosh.1.zspr", "author": "PlaguedOne", "name": "Moosh"}, {"file": "mouse.1.zspr", "author": "Malthaez", "name": "Mouse"}, {"file": "ms-paintdog.1.zspr", "author": "TehRealSalt", "name": "Ms. Paint Dog"}, {"file": "naturelink.1.zspr", "author": "iBazly", "name": "Nature Link"}, {"file": "navi.1.zspr", "author": "qwertymodo", "name": "Navi"}, {"file": "navirou.2.zspr", "author": "Lori", "name": "Navirou"}, {"file": "ned-flanders.1.zspr", "author": "JJ0033LL", "name": "Ned Flanders"}, {"file": "negativelink.1.zspr", "author": "iBazly", "name": "Negative Link"}, {"file": "neosad.1.zspr", "author": "Andrew Copple", "name": "Neosad"}, {"file": "ness.1.zspr", "author": "Lantis", "name": "Ness (Earthbound)"}, {"file": "nia.1.zspr", "author": "Mojonbo", "name": "Nia"}, {"file": "niddraig.1.zspr", "author": "Jakebob", "name": "Niddraig"}, {"file": "niko.1.zspr", "author": "ScatlinkSean", "name": "Niko"}, {"file": "oldman.2.zspr", "author": "Zarby89", "name": "Old Man"}, {"file": "ori.2.zspr", "author": "Phant", "name": "Ori"}, {"file": "outlinelink.1.zspr", "author": "VT", "name": "Outline Link"}, {"file": "parallelworldslink.1.zspr", "author": "SePH/InTheBeef", "name": "Parallel Worlds Link"}, {"file": "paula.1.zspr", "author": "Fish_waffle64", "name": "Paula"}, {"file": "penguinlink.1.zspr", "author": "Fish_waffle64", "name": "Penguin Link"}, {"file": "pete.1.zspr", "author": "Lantis", "name": "Pete (Harvest Moon)"}, {"file": "phoenix-wright.1.zspr", "author": "SnipSlum", "name": "Phoenix Wright"}, {"file": "pikachu.1.zspr", "author": "toucansham", "name": "Pikachu"}, {"file": "pinkribbonlink.2.zspr", "author": "fatmanspanda", "name": "Pink Ribbon Link"}, {"file": "piranha_plant.1.zspr", "author": "lecremateur", "name": "Piranha Plant"}, {"file": "plagueknight.1.zspr", "author": "Jenichi", "name": "Plague Knight"}, {"file": "pokey.1.zspr", "author": "fatmanspanda", "name": "Pokey"}, {"file": "littlepony.1.zspr", "author": "Botchos", "name": "Pony"}, {"file": "popoi.1.zspr", "author": "ItsSupercar", "name": "Popoi"}, {"file": "poppy.1.zspr", "author": "cbass601", "name": "Poppy"}, {"file": "porg_knight.1.zspr", "author": "PorgCollector", "name": "Porg Knight"}, {"file": "mushy.1.zspr", "author": "Achy", "name": "Power Up with Pride Mushroom"}, {"file": "powerpuff_girl.1.zspr", "author": "Jenichi", "name": "Powerpuff Girl"}, {"file": "pridelink.2.zspr", "author": "proximitysound", "name": "Pride Link"}, {"file": "primm.1.zspr", "author": "Artheau", "name": "Primm"}, {"file": "princess_bubblegum.1.zspr", "author": "Devan2002", "name": "Princess Bubblegum"}, {"file": "peach.1.zspr", "author": "RoPan", "name": "Princess Peach"}, {"file": "psyduck.2.zspr", "author": "skovacs1", "name": "Psyduck"}, {"file": "purplechest-bottle.1.zspr", "author": "Mike Trethewey", "name": "Purple Chest"}, {"file": "pyro.1.zspr", "author": "malmo", "name": "Pyro"}, {"file": "rainbowlink.1.zspr", "author": "fatmanspanda", "name": "Rainbow Link"}, {"file": "rat.1.zspr", "author": "atth3h3art0fwinter", "name": "Rat"}, {"file": "red-mage.1.zspr", "author": "TheRedMage", "name": "Red Mage"}, {"file": "remeer.1.zspr", "author": "Herowho", "name": "Remeer"}, {"file": "rick.1.zspr", "author": "Eric the Terrible/Devan 2002", "name": "Rick (Redacted)"}, {"file": "robotlink.1.zspr", "author": "fatmanspanda", "name": "Robo-Link 9000"}, {"file": "rocko.1.zspr", "author": "toucansham", "name": "Rocko"}, {"file": "rottytops.1.zspr", "author": "PlaguedOne", "name": "Rottytops"}, {"file": "rover.1.zspr", "author": "NO Body The Dragon", "name": "Rover"}, {"file": "roykoopa.1.zspr", "author": "Achy", "name": "Roy Koopa"}, {"file": "rumia.1.zspr", "author": "Achy", "name": "Rumia"}, {"file": "rydia.1.zspr", "author": "Sho", "name": "Rydia"}, {"file": "ryu.1.zspr", "author": "PlaguedOne", "name": "Ryu"}, {"file": "snes-controller.1.zspr", "author": "Cbass601", "name": "SNES Controller"}, {"file": "sailormoon.1.zspr", "author": "Jenichi", "name": "Sailor Moon"}, {"file": "saitama.1.zspr", "author": "Dabeanjelly/Ath3h3art0fwinter", "name": "Saitama"}, {"file": "samus.2.zspr", "author": "Fish_waffle64", "name": "Samus"}, {"file": "samus_classic.1.zspr", "author": "Fish_waffle64", "name": "Samus (Classic)"}, {"file": "samus-sm.1.zspr", "author": "Ben G", "name": "Samus (Super Metroid)"}, {"file": "santalink.2.zspr", "author": "HOHOHO", "name": "Santa Link"}, {"file": "scholar.1.zspr", "author": "Damon", "name": "Scholar"}, {"file": "selan.1.zspr", "author": "atth3h3art0fwinter", "name": "Selan"}, {"file": "sevens1ns.1.zspr", "author": "Hroun", "name": "SevenS1ns"}, {"file": "shadow.1.zspr", "author": "CGG Zayik", "name": "Shadow"}, {"file": "shadowsaku.2.zspr", "author": "iBazly", "name": "Shadow Sakura"}, {"file": "shantae.1.zspr", "author": "skovacs1", "name": "Shantae"}, {"file": "shuppet.1.zspr", "author": "fatmanspanda", "name": "Shuppet"}, {"file": "shy-gal.1.zspr", "author": "FedoraFriday", "name": "Shy Gal"}, {"file": "shy-guy.1.zspr", "author": "skovacs1", "name": "Shy Guy"}, {"file": "sighn_waive.1.zspr", "author": "GenoCL", "name": "SighnWaive"}, {"file": "slowpoke.1.zspr", "author": "Joey Rat", "name": "Slowpoke"}, {"file": "sodacan.1.zspr", "author": "Zarby89", "name": "Soda Can"}, {"file": "solaire.1.zspr", "author": "Knilip", "name": "Solaire of Astora"}, {"file": "sonic.1.zspr", "author": "Osaka", "name": "Sonic the Hedgehog"}, {"file": "sora.1.zspr", "author": "roxas232", "name": "Sora"}, {"file": "sora_kh1.1.zspr", "author": "ScatlinkSean", "name": "Sora (KH1)"}, {"file": "spongebob.1.zspr", "author": "JJ0033LL", "name": "SpongeBob SquarePants"}, {"file": "squall.1.zspr", "author": "Maessan", "name": "Squall"}, {"file": "squirrel.1.zspr", "author": "Fish_waffle64", "name": "Squirrel"}, {"file": "squirtle.1.zspr", "author": "Numberplay", "name": "Squirtle"}, {"file": "stalfos.1.zspr", "author": "Artheau", "name": "Stalfos"}, {"file": "stan.1.zspr", "author": "Kan", "name": "Stan"}, {"file": "staticlink.1.zspr", "author": "fatmanspanda", "name": "Static Link"}, {"file": "steamedhams.1.zspr", "author": "AFewGoodTaters", "name": "Steamed Ham"}, {"file": "stick_man.1.zspr", "author": "skovacs1", "name": "Stick Man"}, {"file": "superbomb.1.zspr", "author": "Ninjakauz", "name": "Super Bomb"}, {"file": "superbunny.2.zspr", "author": "TheOkayGuy", "name": "Super Bunny"}, {"file": "supermeatboy.1.zspr", "author": "Achy", "name": "Super Meat Boy"}, {"file": "susie.1.zspr", "author": "ZandraVandra", "name": "Susie"}, {"file": "swatchy.1.zspr", "author": "Mike Trethewey", "name": "Swatchy"}, {"file": "tasbot.1.zspr", "author": "GenoCL", "name": "TASBot"}, {"file": "tgh.1.zspr", "author": "Drew Wise, pizza_for_free", "name": "TGH"}, {"file": "tmnt.1.zspr", "author": "SirCzah", "name": "TMNT"}, {"file": "twilightprincesszelda.2.zspr", "author": "Fish_waffle64", "name": "TP Zelda"}, {"file": "mario_tanooki.1.zspr", "author": "Nocturnesthesia", "name": "Tanooki Mario"}, {"file": "teatime.1.zspr", "author": "SirCzah", "name": "Tea Time"}, {"file": "terra.1.zspr", "author": "All-in-one Mighty", "name": "Terra (Esper)"}, {"file": "tetra.1.zspr", "author": "Ferelheart", "name": "Tetra Sheet"}, {"file": "pug.1.zspr", "author": "Achy", "name": "The Pug"}, {"file": "thief.1.zspr", "author": "Devan2002", "name": "Thief"}, {"file": "thomcrow.1.zspr", "author": "Thom", "name": "Thomcrow"}, {"file": "tile.2.zspr", "author": "fatmanspanda", "name": "Tile"}, {"file": "tingle.1.zspr", "author": "Xenobond", "name": "Tingle"}, {"file": "toad.2.zspr", "author": "Zarby89", "name": "Toad"}, {"file": "toadette.2.zspr", "author": "Devan2002", "name": "Toadette"}, {"file": "totem-links.1.zspr", "author": "Yotohan", "name": "TotemLinks"}, {"file": "trogdor.1.zspr", "author": "MikeTrethewey/Spanda", "name": "Trogdor the Burninator"}, {"file": "linktuniccolor.1.zspr", "author": "Damon", "name": "Tunic Color Link"}, {"file": "two_faced.1.zspr", "author": "Devan2002", "name": "TwoFaced"}, {"file": "ty.1.zspr", "author": "Fish_waffle64", "name": "Ty the Tasmanian Tiger"}, {"file": "ultros.1.zspr", "author": "PlaguedOne", "name": "Ultros"}, {"file": "corona.1.zspr", "author": "Unknown", "name": "Untitled"}, {"file": "valeera.1.zspr", "author": "Glan", "name": "Valeera"}, {"file": "vanillalink.1.zspr", "author": "Jenichi", "name": "VanillaLink"}, {"file": "vaporeon.1.zspr", "author": "Aquana", "name": "Vaporeon"}, {"file": "vegeta.1.zspr", "author": "Merciter", "name": "Vegeta"}, {"file": "vera.1.zspr", "author": "aitchFactor", "name": "Vera"}, {"file": "vitreous.1.zspr", "author": "Glan", "name": "Vitreous"}, {"file": "vivi.1.zspr", "author": "RyuTech", "name": "Vivi"}, {"file": "vivian.1.zspr", "author": "SirCzah", "name": "Vivian"}, {"file": "wario.1.zspr", "author": "Deagans", "name": "Wario"}, {"file": "will.1.zspr", "author": "Xenobond", "name": "Will"}, {"file": "wizzrobe.2.zspr", "author": "iBazly", "name": "Wizzrobe"}, {"file": "wolf_link.1.zspr", "author": "Fish/Beef-Chan", "name": "Wolf Link (Festive)"}, {"file": "wolf_link_tp.1.zspr", "author": "Gfish59", "name": "Wolf Link (TP)"}, {"file": "yoshi.1.zspr", "author": "Yotohan", "name": "Yoshi"}, {"file": "yunica.1.zspr", "author": "Fish_waffle64", "name": "Yunica Tovah"}, {"file": "zandra.1.zspr", "author": "ZandraVandra", "name": "Zandra"}, {"file": "zebraunicorn.1.zspr", "author": "Brass Man", "name": "Zebra Unicorn"}, {"file": "zeck.1.zspr", "author": "aitchFactor", "name": "Zeckemyro"}, {"file": "zelda.1.zspr", "author": "Myriachan", "name": "Zelda"}, {"file": "zerosuitsamus.2.zspr", "author": "Fish_waffle64", "name": "Zero Suit Samus"}, {"file": "zora.2.zspr", "author": "Zarby, InTheBeef", "name": "Zora"}, {"file": "boco.1.zspr", "author": "", "name": "boco"}, {"file": "hollow-knight.1.zspr", "author": "Chew_Terr", "name": "hollow_test"}, {"file": "ibazly.1.zspr", "author": "Achy", "name": "iBazly"}, {"file": "missingno.1.zspr", "author": "", "name": "missingno"}]} \ No newline at end of file +{ + "sprites": [ + { + "file": "neslink.1.zspr", + "author": "MikeTrethewey/Fatmanspanda", + "name": " NES Link" + }, + { + "file": "abigail.1.zspr", + "author": "Fish_waffle64", + "name": "Abigail" + }, + { + "file": "adol.1.zspr", + "author": "Yuushia", + "name": "Adol" + }, + { + "file": "aggretsuko.1.zspr", + "author": "skovacs1", + "name": "Aggretsuko" + }, + { + "file": "alice.1.zspr", + "author": "Artheau", + "name": "Alice" + }, + { + "file": "angry-video-game-nerd.1.zspr", + "author": "ABOhiccups", + "name": "Angry Video Game Nerd" + }, + { + "file": "arcane.1.zspr", + "author": "MM102", + "name": "Arcane" + }, + { + "file": "ark.1.zspr", + "author": "wzl", + "name": "Ark (Cape)" + }, + { + "file": "ark-dorana.1.zspr", + "author": "Matt Dorana", + "name": "Ark (No Cape)" + }, + { + "file": "arrghus.2.zspr", + "author": "fatmanspanda", + "name": "Arrghus" + }, + { + "file": "astronaut.1.zspr", + "author": "Malmo", + "name": "Astronaut" + }, + { + "file": "asuna.1.zspr", + "author": "Natsuru Kiyohoshi", + "name": "Asuna" + }, + { + "file": "bsboy.1.zspr", + "author": "InTheBeef", + "name": "B.S. Boy" + }, + { + "file": "bsgirl.1.zspr", + "author": "InTheBeef", + "name": "B.S. Girl" + }, + { + "file": "metroid.1.zspr", + "author": "Jam", + "name": "Baby Metroid" + }, + { + "file": "badeline.1.zspr", + "author": "Jam", + "name": "Badeline" + }, + { + "file": "bananas-in-pyjamas.1.zspr", + "author": "codemann8", + "name": "Bananas In Pyjamas" + }, + { + "file": "bandit.1.zspr", + "author": "Fenrika", + "name": "Bandit" + }, + { + "file": "batman.1.zspr", + "author": "Ninjakauz", + "name": "Batman" + }, + { + "file": "beau.1.zspr", + "author": "Achy", + "name": "Beau" + }, + { + "file": "bewp.1.zspr", + "author": "Valechec", + "name": "Bewp" + }, + { + "file": "bigkey.1.zspr", + "author": "Fouton", + "name": "Big Key" + }, + { + "file": "birb.1.zspr", + "author": "Andrew Copple", + "name": "Birb" + }, + { + "file": "birdo.1.zspr", + "author": "BlackTycoon", + "name": "Birdo" + }, + { + "file": "blackmage.1.zspr", + "author": "TheRedMage", + "name": "Black Mage" + }, + { + "file": "blacksmithlink.1.zspr", + "author": "Glan", + "name": "Blacksmith Link" + }, + { + "file": "blazer.1.zspr", + "author": "Herowho", + "name": "Blazer" + }, + { + "file": "blossom.1.zspr", + "author": "Artheau", + "name": "Blossom" + }, + { + "file": "bob.1.zspr", + "author": "fatmanspanda", + "name": "Bob" + }, + { + "file": "bobross.1.zspr", + "author": "CaptainApathy", + "name": "Bob Ross" + }, + { + "file": "boo.2.zspr", + "author": "Zarby89", + "name": "Boo" + }, + { + "file": "boo-two.1.zspr", + "author": "Achy", + "name": "Boo 2" + }, + { + "file": "botw-link.1.zspr", + "author": "Pasta La Vista", + "name": "BotW Link" + }, + { + "file": "bottle_o_goo.1.zspr", + "author": "Fish_waffle64", + "name": "Bottle o' Goo" + }, + { + "file": "bowser.1.zspr", + "author": "Artheau", + "name": "Bowser" + }, + { + "file": "bowsette.1.zspr", + "author": "Sarah Shinespark", + "name": "Bowsette" + }, + { + "file": "bowsette-red.1.zspr", + "author": "Sarah Shinespark", + "name": "Bowsette Red" + }, + { + "file": "branch.1.zspr", + "author": "cbass601", + "name": "Branch" + }, + { + "file": "brian.1.zspr", + "author": "Herowho", + "name": "Brian" + }, + { + "file": "broccoli.1.zspr", + "author": "fatmanspanda", + "name": "Broccoli" + }, + { + "file": "bronzor.1.zspr", + "author": "fatmanspanda", + "name": "Bronzor" + }, + { + "file": "bubbles.1.zspr", + "author": "Artheau", + "name": "Bubbles" + }, + { + "file": "bullet_bill.1.zspr", + "author": "Artheau", + "name": "Bullet Bill" + }, + { + "file": "buttercup.1.zspr", + "author": "Artheau", + "name": "Buttercup" + }, + { + "file": "cdilink.1.zspr", + "author": "SnipSlum", + "name": "CD-i Link" + }, + { + "file": "cactuar.1.zspr", + "author": "RyuTech", + "name": "Cactuar" + }, + { + "file": "cadence.1.zspr", + "author": "Fish_waffle64", + "name": "Cadence" + }, + { + "file": "toadette_captain.1.zspr", + "author": "Devan2002", + "name": "Captain Toadette" + }, + { + "file": "carlsagan42.1.zspr", + "author": "FedoraFriday", + "name": "CarlSagan42" + }, + { + "file": "casual-zelda.1.zspr", + "author": "Fish_waffle64", + "name": "Casual Zelda" + }, + { + "file": "catboo.1.zspr", + "author": "JaySee87", + "name": "Cat Boo" + }, + { + "file": "celes.1.zspr", + "author": "Deagans", + "name": "Celes" + }, + { + "file": "charizard.1.zspr", + "author": "Charmander106", + "name": "Charizard" + }, + { + "file": "cheepcheep.1.zspr", + "author": "Faw", + "name": "Cheep Cheep" + }, + { + "file": "chibity.1.zspr", + "author": "Ecyro", + "name": "Chibity" + }, + { + "file": "chrizzz.1.zspr", + "author": "Chrizzz", + "name": "Chrizzz" + }, + { + "file": "cirno.1.zspr", + "author": "Achy", + "name": "Cirno" + }, + { + "file": "clifford.1.zspr", + "author": "PlaguedOne", + "name": "Clifford" + }, + { + "file": "clyde.1.zspr", + "author": "Artheau", + "name": "Clyde" + }, + { + "file": "conker.1.zspr", + "author": "Charmander106/SePH", + "name": "Conker" + }, + { + "file": "cornelius.1.zspr", + "author": "Lori", + "name": "Cornelius" + }, + { + "file": "cucco.1.zspr", + "author": "MikeTrethewey", + "name": "Cucco" + }, + { + "file": "cursor.1.zspr", + "author": "PlaguedOne", + "name": "Cursor" + }, + { + "file": "d_owls.2.zspr", + "author": "D.Owls", + "name": "D.Owls" + }, + { + "file": "slime.1.zspr", + "author": "KamenRideDecade", + "name": "DQ Slime" + }, + { + "file": "darkboy.1.zspr", + "author": "iBazly", + "name": "Dark Boy" + }, + { + "file": "darkgirl.1.zspr", + "author": "iBazly", + "name": "Dark Girl" + }, + { + "file": "darklink.1.zspr", + "author": "iBazly", + "name": "Dark Link" + }, + { + "file": "darklink-tunic.1.zspr", + "author": "Damon", + "name": "Dark Link (Tunic)" + }, + { + "file": "dark-panda.1.zspr", + "author": "MM102", + "name": "Dark Panda" + }, + { + "file": "darkswatchy.1.zspr", + "author": "Mike Trethewey", + "name": "Dark Swatchy" + }, + { + "file": "darkzelda.1.zspr", + "author": "iBazly", + "name": "Dark Zelda" + }, + { + "file": "darkzora.2.zspr", + "author": "iBazly", + "name": "Dark Zora" + }, + { + "file": "deadpool-mythic.1.zspr", + "author": "Mythic", + "name": "Deadpool (Mythic)" + }, + { + "file": "deadpool.1.zspr", + "author": "SirCzah", + "name": "Deadpool (SirCzah)" + }, + { + "file": "deadrock.1.zspr", + "author": "Glan", + "name": "Deadrock" + }, + { + "file": "decidueye.1.zspr", + "author": "Achy", + "name": "Decidueye" + }, + { + "file": "dekar.1.zspr", + "author": "The3X", + "name": "Dekar" + }, + { + "file": "demonlink.1.zspr", + "author": "Krelbel", + "name": "Demon Link" + }, + { + "file": "dragonite.2.zspr", + "author": "Fish_waffle64", + "name": "Dragonite" + }, + { + "file": "drake.1.zspr", + "author": "No Body The Dragon", + "name": "Drake The Dragon" + }, + { + "file": "eggplant.1.zspr", + "author": "PlaguedOne", + "name": "Eggplant" + }, + { + "file": "emosaru.1.zspr", + "author": "Achy", + "name": "EmoSaru" + }, + { + "file": "ezlo.1.zspr", + "author": "cbass601", + "name": "Ezlo" + }, + { + "file": "fierce-deity-link.2.zspr", + "author": "jeffreygriggs2", + "name": "Fierce Deity Link" + }, + { + "file": "locke_merchant.1.zspr", + "author": "Artheau", + "name": "Figaro Merchant" + }, + { + "file": "finn.3.zspr", + "author": "Devan2002", + "name": "Finn Merten" + }, + { + "file": "finny_bear.1.zspr", + "author": "skovacs1", + "name": "Finny Bear" + }, + { + "file": "flavor_guy.1.zspr", + "author": "PlaguedOne", + "name": "Flavor Guy" + }, + { + "file": "fish_floodgate.1.zspr", + "author": "Delphi1024", + "name": "Floodgate Fish" + }, + { + "file": "4slink-armors.1.zspr", + "author": "Mike Trethewey", + "name": "Four Swords Link" + }, + { + "file": "foxlink.1.zspr", + "author": "InTheBeef", + "name": "Fox Link" + }, + { + "file": "freya.1.zspr", + "author": "Demoncraze", + "name": "Freya Crescent" + }, + { + "file": "frisk.1.zspr", + "author": "Original by Toby Fox, sprite edit by MisterKerr", + "name": "Frisk" + }, + { + "file": "froglink.3.zspr", + "author": "Mike Trethewey", + "name": "Frog Link" + }, + { + "file": "fujin.2.zspr", + "author": "FujinAkari", + "name": "Fujin" + }, + { + "file": "future_trunks.1.zspr", + "author": "Merciter", + "name": "Future Trunks" + }, + { + "file": "gbc-link.1.zspr", + "author": "skovacs1", + "name": "GBC Link" + }, + { + "file": "gamer.1.zspr", + "author": "Unknown", + "name": "Gamer" + }, + { + "file": "ganondorf.1.zspr", + "author": "Fish_waffle64", + "name": "Ganondorf" + }, + { + "file": "garfield.2.zspr", + "author": "Fwiller", + "name": "Garfield" + }, + { + "file": "garnet.1.zspr", + "author": "Artheau", + "name": "Garnet" + }, + { + "file": "garomaster.1.zspr", + "author": "Herowho", + "name": "Garo Master" + }, + { + "file": "geno.1.zspr", + "author": "FedoraFriday", + "name": "Geno" + }, + { + "file": "gliitchwiitch.1.zspr", + "author": "Ivy-IV", + "name": "GliitchWiitch" + }, + { + "file": "gobli.1.zspr", + "author": "Lantis", + "name": "Gobli" + }, + { + "file": "goomba.1.zspr", + "author": "SirCzah", + "name": "Goomba" + }, + { + "file": "goose.1.zspr", + "author": "Jam", + "name": "Goose" + }, + { + "file": "grandpoobear.2.zspr", + "author": "proximitysound", + "name": "GrandPOOBear" + }, + { + "file": "gretis.1.zspr", + "author": "SnakeGrunger", + "name": "Gretis" + }, + { + "file": "grunclestan.1.zspr", + "author": "SirCzah", + "name": "Gruncle Stan" + }, + { + "file": "guiz.1.zspr", + "author": "GuizDP", + "name": "GuizDP" + }, + { + "file": "hanna.1.zspr", + "author": "Maya-Neko", + "name": "Hanna" + }, + { + "file": "hardhat_beetle.1.zspr", + "author": "Artheau", + "name": "Hardhat Beetle" + }, + { + "file": "linkhatcolor.1.zspr", + "author": "Damon", + "name": "Hat Color Link" + }, + { + "file": "hat-kid.1.zspr", + "author": "skovacs1", + "name": "Hat Kid" + }, + { + "file": "headlesslink.1.zspr", + "author": "fatmanspanda", + "name": "Headless Link" + }, + { + "file": "hello_kitty.1.zspr", + "author": "qeeen", + "name": "Hello Kitty" + }, + { + "file": "hidari.1.zspr", + "author": "Hidari", + "name": "Hidari" + }, + { + "file": "hint_tile.1.zspr", + "author": "PlaguedOne", + "name": "Hint Tile" + }, + { + "file": "luffy.1.zspr", + "author": "BOtheMighty", + "name": "Hitsuyan1337" + }, + { + "file": "hoarder-bush.1.zspr", + "author": "Restomak", + "name": "Hoarder (Bush)" + }, + { + "file": "hoarder-pot.1.zspr", + "author": "Restomak", + "name": "Hoarder (Pot)" + }, + { + "file": "hoarder-rock.1.zspr", + "author": "Restomak", + "name": "Hoarder (Rock)" + }, + { + "file": "homer.1.zspr", + "author": "Fwiller", + "name": "Homer Simpson" + }, + { + "file": "hotdog.1.zspr", + "author": "Xag & Tylo", + "name": "Hotdog" + }, + { + "file": "hyruleknight.1.zspr", + "author": "InTheBeef", + "name": "Hyrule Knight" + }, + { + "file": "soldiersprite.1.zspr", + "author": "InTheBeef", + "name": "Hyrule Soldier" + }, + { + "file": "ignignokt.2.zspr", + "author": "fatmanspanda", + "name": "Ignignokt" + }, + { + "file": "crewmate.1.zspr", + "author": "Fish_waffle64", + "name": "Imposter" + }, + { + "file": "informant_woman.1.zspr", + "author": "Herowho", + "name": "Informant Woman" + }, + { + "file": "inkling.1.zspr", + "author": "RyuTech", + "name": "Inkling" + }, + { + "file": "invisibleman.1.zspr", + "author": "Mike Trethewey", + "name": "Invisible Link" + }, + { + "file": "jack-frost.1.zspr", + "author": "xypotion", + "name": "Jack Frost" + }, + { + "file": "jason_frudnick.1.zspr", + "author": "Artheau", + "name": "Jason Frudnick" + }, + { + "file": "jasp.1.zspr", + "author": "Chonixtu", + "name": "Jasp" + }, + { + "file": "jogurt.1.zspr", + "author": "Nakuri", + "name": "Jogurt" + }, + { + "file": "katsura.1.zspr", + "author": "atth3h3art0fwinter", + "name": "Katsura" + }, + { + "file": "kecleon.1.zspr", + "author": "Gylergin", + "name": "Kecleon" + }, + { + "file": "kenny_mccormick.1.zspr", + "author": "Artheau", + "name": "Kenny McCormick" + }, + { + "file": "ketchup.1.zspr", + "author": "t0uchan", + "name": "Ketchup" + }, + { + "file": "kholdstare.1.zspr", + "author": "fatmanspanda", + "name": "Kholdstare" + }, + { + "file": "king_gothalion.1.zspr", + "author": "kickpixel", + "name": "King Gothalion" + }, + { + "file": "king_graham.1.zspr", + "author": "MisterKerr", + "name": "King Graham v1.1" + }, + { + "file": "kirby-meta.1.zspr", + "author": "KHRoxas", + "name": "Kirby" + }, + { + "file": "kore8.1.zspr", + "author": "Skewer", + "name": "Kore8" + }, + { + "file": "korok.1.zspr", + "author": "atth3h3art0fwinter", + "name": "Korok" + }, + { + "file": "lakitu.1.zspr", + "author": "SirCzah", + "name": "Lakitu" + }, + { + "file": "lapras.1.zspr", + "author": "Fish_waffle64", + "name": "Lapras" + }, + { + "file": "lest.1.zspr", + "author": "PrideToRuleEarth", + "name": "Lest" + }, + { + "file": "lily.1.zspr", + "author": "ScatlinkSean", + "name": "Lily" + }, + { + "file": "linja.1.zspr", + "author": "Razhagal", + "name": "Linja" + }, + { + "file": "001.link.1.zspr", + "author": "Nintendo", + "name": "Link" + }, + { + "file": "link-redrawn.1.zspr", + "author": "Spiffy", + "name": "Link Redrawn" + }, + { + "file": "little-hylian.1.zspr", + "author": "MM102", + "name": "Little Hylian" + }, + { + "file": "locke.1.zspr", + "author": "Rose", + "name": "Locke" + }, + { + "file": "lucario.1.zspr", + "author": "Achy", + "name": "Lucario" + }, + { + "file": "luigi.1.zspr", + "author": "Achy", + "name": "Luigi" + }, + { + "file": "luna-maindo.1.zspr", + "author": "IkkyLights", + "name": "Luna Maindo" + }, + { + "file": "madeline.1.zspr", + "author": "Jam", + "name": "Madeline" + }, + { + "file": "magus.1.zspr", + "author": "PlaguedOne", + "name": "Magus" + }, + { + "file": "maiden.1.zspr", + "author": "Plan", + "name": "Maiden" + }, + { + "file": "mallow-cat.1.zspr", + "author": "FedoraFriday", + "name": "Mallow (Cat)" + }, + { + "file": "mangalink.1.zspr", + "author": "fatmanspanda", + "name": "Manga Link" + }, + { + "file": "maplequeen.2.zspr", + "author": "Zarby89", + "name": "Maple Queen" + }, + { + "file": "marin.2.zspr", + "author": "Nocturnesthesia", + "name": "Marin" + }, + { + "file": "mario-classic.2.zspr", + "author": "Damon", + "name": "Mario (Classic)" + }, + { + "file": "mariocappy.1.zspr", + "author": "Damon", + "name": "Mario and Cappy" + }, + { + "file": "marisa.1.zspr", + "author": "Achy", + "name": "Marisa Kirisame" + }, + { + "file": "cat.3.zspr", + "author": "Fish_waffle64", + "name": "Marvin the Cat" + }, + { + "file": "matthias.1.zspr", + "author": "Marcus Bolduc", + "name": "Matthias" + }, + { + "file": "meatwad.1.zspr", + "author": "fatmanspanda", + "name": "Meatwad" + }, + { + "file": "medallions.1.zspr", + "author": "Mike Trethewey", + "name": "Medallions" + }, + { + "file": "medli.1.zspr", + "author": "Kzinssie", + "name": "Medli" + }, + { + "file": "megaman-x.2.zspr", + "author": "PlaguedOne", + "name": "Megaman X" + }, + { + "file": "mew.1.zspr", + "author": "MewLp", + "name": "MewLp" + }, + { + "file": "mike-jones.2.zspr", + "author": "Fish_waffle64", + "name": "Mike Jones" + }, + { + "file": "ganon.1.zspr", + "author": "atth3h3art0fwinter", + "name": "Mini Ganon" + }, + { + "file": "minishcaplink.2.zspr", + "author": "InTheBeef", + "name": "Minish Cap Link" + }, + { + "file": "minish_link.1.zspr", + "author": "Artheau", + "name": "Minish Link" + }, + { + "file": "moblin.1.zspr", + "author": "Noctai_", + "name": "MoblinSprite" + }, + { + "file": "modernlink.1.zspr", + "author": "RyuTech", + "name": "Modern Link" + }, + { + "file": "mog.2.zspr", + "author": "Krelbel", + "name": "Mog" + }, + { + "file": "momiji.1.zspr", + "author": "Ardaceus", + "name": "Momiji Inubashiri" + }, + { + "file": "moosh.1.zspr", + "author": "PlaguedOne", + "name": "Moosh" + }, + { + "file": "mouse.1.zspr", + "author": "Malthaez", + "name": "Mouse" + }, + { + "file": "ms-paintdog.1.zspr", + "author": "TehRealSalt", + "name": "Ms. Paint Dog" + }, + { + "file": "naturelink.1.zspr", + "author": "iBazly", + "name": "Nature Link" + }, + { + "file": "navi.1.zspr", + "author": "qwertymodo", + "name": "Navi" + }, + { + "file": "navirou.2.zspr", + "author": "Lori", + "name": "Navirou" + }, + { + "file": "ned-flanders.1.zspr", + "author": "JJ0033LL", + "name": "Ned Flanders" + }, + { + "file": "negativelink.1.zspr", + "author": "iBazly", + "name": "Negative Link" + }, + { + "file": "neosad.1.zspr", + "author": "Andrew Copple", + "name": "Neosad" + }, + { + "file": "ness.1.zspr", + "author": "Lantis", + "name": "Ness (Earthbound)" + }, + { + "file": "nia.1.zspr", + "author": "Mojonbo", + "name": "Nia" + }, + { + "file": "niddraig.1.zspr", + "author": "Jakebob", + "name": "Niddraig" + }, + { + "file": "niko.1.zspr", + "author": "ScatlinkSean", + "name": "Niko" + }, + { + "file": "oldman.2.zspr", + "author": "Zarby89", + "name": "Old Man" + }, + { + "file": "ori.2.zspr", + "author": "Phant", + "name": "Ori" + }, + { + "file": "outlinelink.1.zspr", + "author": "VT", + "name": "Outline Link" + }, + { + "file": "parallelworldslink.1.zspr", + "author": "SePH/InTheBeef", + "name": "Parallel Worlds Link" + }, + { + "file": "paula.1.zspr", + "author": "Fish_waffle64", + "name": "Paula" + }, + { + "file": "penguinlink.1.zspr", + "author": "Fish_waffle64", + "name": "Penguin Link" + }, + { + "file": "pete.1.zspr", + "author": "Lantis", + "name": "Pete (Harvest Moon)" + }, + { + "file": "phoenix-wright.1.zspr", + "author": "SnipSlum", + "name": "Phoenix Wright" + }, + { + "file": "pikachu.1.zspr", + "author": "toucansham", + "name": "Pikachu" + }, + { + "file": "pinkribbonlink.2.zspr", + "author": "fatmanspanda", + "name": "Pink Ribbon Link" + }, + { + "file": "piranha_plant.1.zspr", + "author": "lecremateur", + "name": "Piranha Plant" + }, + { + "file": "plagueknight.1.zspr", + "author": "Jenichi", + "name": "Plague Knight" + }, + { + "file": "pokey.1.zspr", + "author": "fatmanspanda", + "name": "Pokey" + }, + { + "file": "littlepony.1.zspr", + "author": "Botchos", + "name": "Pony" + }, + { + "file": "popoi.1.zspr", + "author": "ItsSupercar", + "name": "Popoi" + }, + { + "file": "poppy.1.zspr", + "author": "cbass601", + "name": "Poppy" + }, + { + "file": "porg_knight.1.zspr", + "author": "PorgCollector", + "name": "Porg Knight" + }, + { + "file": "mushy.1.zspr", + "author": "Achy", + "name": "Power Up with Pride Mushroom" + }, + { + "file": "powerpuff_girl.1.zspr", + "author": "Jenichi", + "name": "Powerpuff Girl" + }, + { + "file": "pridelink.2.zspr", + "author": "proximitysound", + "name": "Pride Link" + }, + { + "file": "primm.1.zspr", + "author": "Artheau", + "name": "Primm" + }, + { + "file": "princess_bubblegum.1.zspr", + "author": "Devan2002", + "name": "Princess Bubblegum" + }, + { + "file": "peach.1.zspr", + "author": "RoPan", + "name": "Princess Peach" + }, + { + "file": "psyduck.2.zspr", + "author": "skovacs1", + "name": "Psyduck" + }, + { + "file": "purplechest-bottle.1.zspr", + "author": "Mike Trethewey", + "name": "Purple Chest" + }, + { + "file": "pyro.1.zspr", + "author": "malmo", + "name": "Pyro" + }, + { + "file": "rainbowlink.1.zspr", + "author": "fatmanspanda", + "name": "Rainbow Link" + }, + { + "file": "rat.1.zspr", + "author": "atth3h3art0fwinter", + "name": "Rat" + }, + { + "file": "red-mage.1.zspr", + "author": "TheRedMage", + "name": "Red Mage" + }, + { + "file": "remeer.1.zspr", + "author": "Herowho", + "name": "Remeer" + }, + { + "file": "rick.1.zspr", + "author": "Eric the Terrible/Devan 2002", + "name": "Rick (Redacted)" + }, + { + "file": "robotlink.1.zspr", + "author": "fatmanspanda", + "name": "Robo-Link 9000" + }, + { + "file": "rocko.1.zspr", + "author": "toucansham", + "name": "Rocko" + }, + { + "file": "rottytops.1.zspr", + "author": "PlaguedOne", + "name": "Rottytops" + }, + { + "file": "rover.1.zspr", + "author": "NO Body The Dragon", + "name": "Rover" + }, + { + "file": "roykoopa.1.zspr", + "author": "Achy", + "name": "Roy Koopa" + }, + { + "file": "rumia.1.zspr", + "author": "Achy", + "name": "Rumia" + }, + { + "file": "rydia.1.zspr", + "author": "Sho", + "name": "Rydia" + }, + { + "file": "ryu.1.zspr", + "author": "PlaguedOne", + "name": "Ryu" + }, + { + "file": "snes-controller.1.zspr", + "author": "Cbass601", + "name": "SNES Controller" + }, + { + "file": "sailormoon.1.zspr", + "author": "Jenichi", + "name": "Sailor Moon" + }, + { + "file": "saitama.1.zspr", + "author": "Dabeanjelly/Ath3h3art0fwinter", + "name": "Saitama" + }, + { + "file": "samus.2.zspr", + "author": "Fish_waffle64", + "name": "Samus" + }, + { + "file": "samus_classic.1.zspr", + "author": "Fish_waffle64", + "name": "Samus (Classic)" + }, + { + "file": "samus-sm.1.zspr", + "author": "Ben G", + "name": "Samus (Super Metroid)" + }, + { + "file": "santalink.2.zspr", + "author": "HOHOHO", + "name": "Santa Link" + }, + { + "file": "scholar.1.zspr", + "author": "Damon", + "name": "Scholar" + }, + { + "file": "selan.1.zspr", + "author": "atth3h3art0fwinter", + "name": "Selan" + }, + { + "file": "sevens1ns.1.zspr", + "author": "Hroun", + "name": "SevenS1ns" + }, + { + "file": "shadow.1.zspr", + "author": "CGG Zayik", + "name": "Shadow" + }, + { + "file": "shadowsaku.2.zspr", + "author": "iBazly", + "name": "Shadow Sakura" + }, + { + "file": "shantae.1.zspr", + "author": "skovacs1", + "name": "Shantae" + }, + { + "file": "shuppet.1.zspr", + "author": "fatmanspanda", + "name": "Shuppet" + }, + { + "file": "shy-gal.1.zspr", + "author": "FedoraFriday", + "name": "Shy Gal" + }, + { + "file": "shy-guy.1.zspr", + "author": "skovacs1", + "name": "Shy Guy" + }, + { + "file": "sighn_waive.1.zspr", + "author": "GenoCL", + "name": "SighnWaive" + }, + { + "file": "slowpoke.1.zspr", + "author": "Joey Rat", + "name": "Slowpoke" + }, + { + "file": "sodacan.1.zspr", + "author": "Zarby89", + "name": "Soda Can" + }, + { + "file": "solaire.1.zspr", + "author": "Knilip", + "name": "Solaire of Astora" + }, + { + "file": "sonic.1.zspr", + "author": "Osaka", + "name": "Sonic the Hedgehog" + }, + { + "file": "sora.1.zspr", + "author": "roxas232", + "name": "Sora" + }, + { + "file": "sora_kh1.1.zspr", + "author": "ScatlinkSean", + "name": "Sora (KH1)" + }, + { + "file": "spongebob.1.zspr", + "author": "JJ0033LL", + "name": "SpongeBob SquarePants" + }, + { + "file": "squall.1.zspr", + "author": "Maessan", + "name": "Squall" + }, + { + "file": "squirrel.1.zspr", + "author": "Fish_waffle64", + "name": "Squirrel" + }, + { + "file": "squirtle.1.zspr", + "author": "Numberplay", + "name": "Squirtle" + }, + { + "file": "stalfos.1.zspr", + "author": "Artheau", + "name": "Stalfos" + }, + { + "file": "stan.1.zspr", + "author": "Kan", + "name": "Stan" + }, + { + "file": "staticlink.1.zspr", + "author": "fatmanspanda", + "name": "Static Link" + }, + { + "file": "steamedhams.1.zspr", + "author": "AFewGoodTaters", + "name": "Steamed Ham" + }, + { + "file": "stick_man.1.zspr", + "author": "skovacs1", + "name": "Stick Man" + }, + { + "file": "superbomb.1.zspr", + "author": "Ninjakauz", + "name": "Super Bomb" + }, + { + "file": "superbunny.2.zspr", + "author": "TheOkayGuy", + "name": "Super Bunny" + }, + { + "file": "supermeatboy.1.zspr", + "author": "Achy", + "name": "Super Meat Boy" + }, + { + "file": "susie.1.zspr", + "author": "ZandraVandra", + "name": "Susie" + }, + { + "file": "swatchy.1.zspr", + "author": "Mike Trethewey", + "name": "Swatchy" + }, + { + "file": "tasbot.1.zspr", + "author": "GenoCL", + "name": "TASBot" + }, + { + "file": "tgh.1.zspr", + "author": "Drew Wise, pizza_for_free", + "name": "TGH" + }, + { + "file": "tmnt.1.zspr", + "author": "SirCzah", + "name": "TMNT" + }, + { + "file": "twilightprincesszelda.2.zspr", + "author": "Fish_waffle64", + "name": "TP Zelda" + }, + { + "file": "mario_tanooki.1.zspr", + "author": "Nocturnesthesia", + "name": "Tanooki Mario" + }, + { + "file": "teatime.1.zspr", + "author": "SirCzah", + "name": "Tea Time" + }, + { + "file": "terra.1.zspr", + "author": "All-in-one Mighty", + "name": "Terra (Esper)" + }, + { + "file": "tetra.1.zspr", + "author": "Ferelheart", + "name": "Tetra Sheet" + }, + { + "file": "pug.1.zspr", + "author": "Achy", + "name": "The Pug" + }, + { + "file": "thief.1.zspr", + "author": "Devan2002", + "name": "Thief" + }, + { + "file": "thomcrow.1.zspr", + "author": "Thom", + "name": "Thomcrow" + }, + { + "file": "tile.2.zspr", + "author": "fatmanspanda", + "name": "Tile" + }, + { + "file": "tingle.1.zspr", + "author": "Xenobond", + "name": "Tingle" + }, + { + "file": "toad.2.zspr", + "author": "Zarby89", + "name": "Toad" + }, + { + "file": "toadette.2.zspr", + "author": "Devan2002", + "name": "Toadette" + }, + { + "file": "totem-links.1.zspr", + "author": "Yotohan", + "name": "TotemLinks" + }, + { + "file": "trogdor.1.zspr", + "author": "MikeTrethewey/Spanda", + "name": "Trogdor the Burninator" + }, + { + "file": "linktuniccolor.1.zspr", + "author": "Damon", + "name": "Tunic Color Link" + }, + { + "file": "two_faced.1.zspr", + "author": "Devan2002", + "name": "TwoFaced" + }, + { + "file": "ty.1.zspr", + "author": "Fish_waffle64", + "name": "Ty the Tasmanian Tiger" + }, + { + "file": "ultros.1.zspr", + "author": "PlaguedOne", + "name": "Ultros" + }, + { + "file": "corona.1.zspr", + "author": "Unknown", + "name": "Untitled" + }, + { + "file": "valeera.1.zspr", + "author": "Glan", + "name": "Valeera" + }, + { + "file": "vanillalink.1.zspr", + "author": "Jenichi", + "name": "VanillaLink" + }, + { + "file": "vaporeon.1.zspr", + "author": "Aquana", + "name": "Vaporeon" + }, + { + "file": "vegeta.1.zspr", + "author": "Merciter", + "name": "Vegeta" + }, + { + "file": "vera.1.zspr", + "author": "aitchFactor", + "name": "Vera" + }, + { + "file": "vitreous.1.zspr", + "author": "Glan", + "name": "Vitreous" + }, + { + "file": "vivi.1.zspr", + "author": "RyuTech", + "name": "Vivi" + }, + { + "file": "vivian.1.zspr", + "author": "SirCzah", + "name": "Vivian" + }, + { + "file": "wario.1.zspr", + "author": "Deagans", + "name": "Wario" + }, + { + "file": "will.1.zspr", + "author": "Xenobond", + "name": "Will" + }, + { + "file": "wizzrobe.2.zspr", + "author": "iBazly", + "name": "Wizzrobe" + }, + { + "file": "wolf_link.1.zspr", + "author": "Fish/Beef-Chan", + "name": "Wolf Link (Festive)" + }, + { + "file": "wolf_link_tp.1.zspr", + "author": "Gfish59", + "name": "Wolf Link (TP)" + }, + { + "file": "yoshi.1.zspr", + "author": "Yotohan", + "name": "Yoshi" + }, + { + "file": "yunica.1.zspr", + "author": "Fish_waffle64", + "name": "Yunica Tovah" + }, + { + "file": "zandra.1.zspr", + "author": "ZandraVandra", + "name": "Zandra" + }, + { + "file": "zebraunicorn.1.zspr", + "author": "Brass Man", + "name": "Zebra Unicorn" + }, + { + "file": "zeck.1.zspr", + "author": "aitchFactor", + "name": "Zeckemyro" + }, + { + "file": "zelda.1.zspr", + "author": "Myriachan", + "name": "Zelda" + }, + { + "file": "zerosuitsamus.2.zspr", + "author": "Fish_waffle64", + "name": "Zero Suit Samus" + }, + { + "file": "zora.2.zspr", + "author": "Zarby, InTheBeef", + "name": "Zora" + }, + { + "file": "boco.1.zspr", + "author": "", + "name": "boco" + }, + { + "file": "botw-zelda.1.zspr", + "author": "", + "name": "botw-zelda" + }, + { + "file": "hollow-knight.1.zspr", + "author": "Chew_Terr", + "name": "hollow_test" + }, + { + "file": "ibazly.1.zspr", + "author": "Achy", + "name": "iBazly" + }, + { + "file": "missingno.1.zspr", + "author": "", + "name": "missingno" + } + ] +} \ No newline at end of file diff --git a/WebHostLib/static/static/sprites/.gif b/WebHostLib/static/static/sprites/.gif deleted file mode 100644 index 3ad3ab04bfc9456b2fda8190637d435f69dbda52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcma)2p;E*!6igf5rO9QQ$dlkI5J(sd3XVTO9uA2-864k$LRKPA@(K3|m6a8UqF^^c zRI+nVABW*H zO^4V0IPPG`NBuO1<&Md+WS+*86Oc^;(=I$dJm05UdS>tn`Z3A!v=9lG@-zYn(Jih!Pu?G+JVI WD2XBwFaKw#1!6{~DbK}tQP;nnh%|x# diff --git a/WebHostLib/static/static/sprites/Ark.gif b/WebHostLib/static/static/sprites/Ark.gif deleted file mode 100644 index 3d0d9289429055eb5f4dea1328ea6a8c15069b4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcma)&ty07=6or%9BBLcSoj3p`kTL}uEeefVABW*H zO^4V0IPPG`NBuO1<&Md+WS+*86Oc^;(=I$dJm05UdS>tn`Z3A!v=9lG@-zYn(Jih!Pu?G+JVI WD2XBwFaKw#1!6{~DbK}tQP;nnh%|x# diff --git a/dumpSprites.py b/dumpSprites.py index e8a476fb..f29ad202 100644 --- a/dumpSprites.py +++ b/dumpSprites.py @@ -32,4 +32,4 @@ for file in os.listdir(input_dir): print(file, "dropped, as it has no valid sprite data.") spriteData.sort(key=lambda entry: entry["name"]) with open(f'{output_dir}/spriteData.json', 'w') as file: - json.dump({"sprites": spriteData}, file) + json.dump({"sprites": spriteData}, file, indent=1) From 7872285e957c0ee99fe81057759b926b614bfda4 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 6 Dec 2020 17:21:44 +0100 Subject: [PATCH 17/30] re-re-export spriteData --- WebHostLib/static/static/spriteData.json | 10 +++++----- .../sprites/{botw-zelda.gif => BotW Zelda.gif} | Bin 2 files changed, 5 insertions(+), 5 deletions(-) rename WebHostLib/static/static/sprites/{botw-zelda.gif => BotW Zelda.gif} (100%) diff --git a/WebHostLib/static/static/spriteData.json b/WebHostLib/static/static/spriteData.json index b0c744ec..4f7ab8a4 100644 --- a/WebHostLib/static/static/spriteData.json +++ b/WebHostLib/static/static/spriteData.json @@ -165,6 +165,11 @@ "author": "Pasta La Vista", "name": "BotW Link" }, + { + "file": "botw-zelda.1.zspr", + "author": "Roo", + "name": "BotW Zelda" + }, { "file": "bottle_o_goo.1.zspr", "author": "Fish_waffle64", @@ -1585,11 +1590,6 @@ "author": "", "name": "boco" }, - { - "file": "botw-zelda.1.zspr", - "author": "", - "name": "botw-zelda" - }, { "file": "hollow-knight.1.zspr", "author": "Chew_Terr", diff --git a/WebHostLib/static/static/sprites/botw-zelda.gif b/WebHostLib/static/static/sprites/BotW Zelda.gif similarity index 100% rename from WebHostLib/static/static/sprites/botw-zelda.gif rename to WebHostLib/static/static/sprites/BotW Zelda.gif From 4ecc32b2b0d7e7da27403496fb9079a8db6ea5d6 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 6 Dec 2020 11:28:20 -0500 Subject: [PATCH 18/30] Add /output and /Output Logs to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 1b54572f..9ba862d6 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,5 @@ mystery_result_*.yaml /db.db3 *-errors.txt success.txt +output/ +Output Logs/ From 0e8d72b2746b6aeae7ea59a8066394a4a6576c8e Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 6 Dec 2020 12:03:14 -0500 Subject: [PATCH 19/30] Add capacity upgrades to shop shuffle on /player-settings --- WebHostLib/static/static/playerSettings.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/WebHostLib/static/static/playerSettings.json b/WebHostLib/static/static/playerSettings.json index c642db55..0484be25 100644 --- a/WebHostLib/static/static/playerSettings.json +++ b/WebHostLib/static/static/playerSettings.json @@ -478,16 +478,24 @@ "value": "none" }, { - "name": "Shuffle Inventory", + "name": "Inventory", "value": "i" }, { - "name": "Shuffle Prices", + "name": "Prices", "value": "p" }, { - "name": "Shuffle Both", + "name": "Capacity Upgrades", + "value": "u" + }, + { + "name": "Inventory and Prices", "value": "ip" + }, + { + "name": "Inventory, Prices, and Upgrades", + "value": "ipu" } ] } From abaaa88304a606950272ff0b52d79d5e774a782a Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 6 Dec 2020 12:19:25 -0500 Subject: [PATCH 20/30] Change "Tile Hints" to "Hints" --- WebHostLib/static/static/playerSettings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebHostLib/static/static/playerSettings.json b/WebHostLib/static/static/playerSettings.json index 0484be25..d57fb589 100644 --- a/WebHostLib/static/static/playerSettings.json +++ b/WebHostLib/static/static/playerSettings.json @@ -217,7 +217,7 @@ }, "hints": { "type": "select", - "friendlyName": "Tile Hints", + "friendlyName": "Hints", "description": "Choose to enable or disable tile hints", "defaultValue": "on", "options": [ From 2e1f3c2338f4f4247599e114613b0c226fb664b9 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 6 Dec 2020 12:42:16 -0500 Subject: [PATCH 21/30] Include updated French tutorial by Coxla --- .../static/assets/tutorial/tutorial_fr.md | 57 ++++++++++++------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/WebHostLib/static/assets/tutorial/tutorial_fr.md b/WebHostLib/static/assets/tutorial/tutorial_fr.md index 49994932..114a0b0d 100644 --- a/WebHostLib/static/assets/tutorial/tutorial_fr.md +++ b/WebHostLib/static/assets/tutorial/tutorial_fr.md @@ -9,7 +9,7 @@ ## Logiciels requis - [Utilitaires du MultiWorld](https://github.com/Berserker66/MultiWorld-Utilities/releases) - [QUsb2Snes](https://github.com/Skarsnik/QUsb2snes/releases) (Inclus dans les utilitaires précédents) -- Une solution logicielle ou matérielle capable de charger et de jouer des fichiers ROM de SNES +- Une solution logicielle ou matérielle capable de charger et de lancer des fichiers ROM de SNES - Un émulateur capable d'éxécuter des scripts Lua ([snes9x Multitroid](https://drive.google.com/drive/folders/1_ej-pwWtCAHYXIrvs5Hro16A1s9Hi3Jz), [BizHawk](http://tasvideos.org/BizHawk.html)) @@ -21,17 +21,17 @@ ### Installation sur Windows 1. Téléchargez et installez les utilitaires du MultiWorld à l'aide du lien au-dessus, faites attention à bien installer la version la plus récente. **Le fichier se situe dans la section "assets" en bas des informations de version**. Si vous voulez jouer des parties classiques de multiworld, -vous voudrez télécharger `Setup.BerserkerMultiWorld.exe` - - Si vous voulez jouer à la version alternative avec le mélangeur de portes dans les donjons, vous voudrez télécharger le fichier +téléchargez `Setup.BerserkerMultiWorld.exe` + - Si vous voulez jouer à la version alternative avec le mélangeur de portes dans les donjons, vous téléchargez le fichier `Setup.BerserkerMultiWorld.Doors.exe`. - Durant le processus d'installation, il vous sera demandé de localiser votre ROM v1.0 japonaise. Si vous avez déjà installé le logiciel auparavant et qu'il s'agit simplement d'une mise à jour, la localisation de la ROM originale ne sera pas requise. - Il vous sera peut-être également demandé d'installer Microsoft Visual C++. Si vous le possédez déjà (possiblement parce qu'un jeu Steam l'a déjà installé), l'installateur ne reproposera pas de l'installer. -2. Si vous utilisez un émulateur, vous devriez assigner votre émulateur capable d'éxécuter des scripts Lua comme programme +2. Si vous utilisez un émulateur, il est recommandé d'assigner votre émulateur capable d'éxécuter des scripts Lua comme programme par défaut pour ouvrir vos ROMs. - 1. Extrayez votre dossier d'émulateur sur votre Bureau, ou quelque part dont vous vous souviendrez. + 1. Extrayez votre dossier d'émulateur sur votre Bureau, ou à un endroit dont vous vous souviendrez. 2. Faites un clic droit sur un fichier ROM et sélectionnez **Ouvrir avec...** 3. Cochez la case à côté de **Toujours utiliser cette application pour ouvrir les fichiers .sfc** 4. Descendez jusqu'en bas de la liste et sélectionnez **Rechercher une autre application sur ce PC** @@ -49,14 +49,12 @@ sur comment il devrait générer votre seed. Chaque joueur d'un multiwolrd devra joueur d'apprécier une expérience customisée selon ses goûts, et les différents joueurs d'un même multiworld peuvent avoir différentes options. ### Où est-ce que j'obtiens un fichier YAML ? -Un fichier YAML de base est disponible dans le dossier où les utilitaires du MultiWorld sont installés. Il est situé dans le dossier -`players` et se nomme `easy.yaml` -La page des [paramètres du joueur](/player-settings) vous permet de configurer vos paramètres personnels et de télécharger un fichier `yaml`. -Vous pouvez configurez jusqu'à trois pré-paramétrages sur cette page. +La page [Génération de partie](/player-settings) vous permet de configurer vos paramètres personnels et de les exporter vers un fichier YAML. -### Votre fichier YAML est pondéré -La page de paramétrage a de nombreuses options qui sont essentiellement représentées avec des curseurs glissants. Cela vous permet de choisir quelles -sont les chances qu'une certaine option apparaisse par rapport aux autres disponibles. +### Configuration avancée du fichier YAML +Une version plus avancée du fichier YAML peut être créée en utilisant la page des [paramètres de pondération](/weighted-settings), qui vous permet +de configurer jusqu'à trois préréglages. Cette page a de nombreuses options qui sont essentiellement représentées avec des curseurs glissants. +Cela vous permet de choisir quelles sont les chances qu'une certaine option apparaisse par rapport aux autres disponibles dans une même catégorie. Par exemple, imaginez que le générateur crée un seau étiqueté "Mélange des cartes", et qu'il place un morceau de papier pour chaque sous-option. Imaginez également que la valeur pour "On" est 20 et la valeur pour "Off" est 40. @@ -65,14 +63,15 @@ Dans cet exemple, il y a soixante morceaux de papier dans le seau : vingt pour " décide s'il doit oui ou non activer le mélange des cartes pour votre partie, , il tire aléatoirement un papier dans le seau. Dans cet exemple, il y a de plus grandes chances d'avoir le mélange de cartes désactivé. -S'il y a une option dont vous ne voulez jamais, mettez simplement sa valeur à zéro. +S'il y a une option dont vous ne voulez jamais, mettez simplement sa valeur à zéro. N'oubliez pas qu'il faut que pour chaque paramètre il faut +au moins une option qui soit paramétrée sur un nombre strictement positif. ### Vérifier son fichier YAML Si vous voulez valider votre fichier YAML pour être sûr qu'il fonctionne, vous pouvez le vérifier sur la page du [Validateur de YAML](/mysterycheck). ## Générer une partie pour un joueur -1. Aller sur la [page du générateur](/generate) et téléversez votre fichier YAML. +1. Aller sur la page [Génération de partie](/player-settings), configurez vos options, et cliquez sur le bouton "Generate Game". 2. Il vous sera alors présenté une page d'informations sur la seed, où vous pourrez télécharger votre patch. 3. Double-cliquez sur le patch et l'émulateur devrait se lancer automatiquement avec la seed. Etant donné que le client n'est pas requis pour les parties à un joueur, vous pouvez le fermer ainsi que l'interface Web (WebUI). @@ -120,10 +119,6 @@ Les utilisateurs de SD2SNES et de FXPak Pro peuvent télécharger le micro-logic [ici](https://github.com/RedGuyyyy/sd2snes/releases). Pour les autres solutions, de l'aide peut être trouvée [sur cette page](http://usb2snes.com/#supported-platforms). -**Pour vous connecter avec une solution matérielle vous devez utiliser une ancienne version de QUsb2Snes -([v0.7.16](https://github.com/Skarsnik/QUsb2snes/releases/tag/v0.7.16)).** -Les versions postérieures brisent la compatibilité avec le multiworld. - 1. Fermez votre émulateur, qui s'est potentiellement lancé automatiquement. 2. Fermez QUsb2Snes, qui s'est lancé automatiquement avec le client. 3. Lancez la version appropriée de QUsb2Snes (v0.7.16). @@ -149,13 +144,31 @@ La méthode recommandée pour héberger une partie est d'utiliser le service d'h 1. Récupérez les fichiers YAML des joueurs. 2. Créez une archive zip contenant ces fichiers YAML. -3. Téléversez l'archive zip sur le lien au-dessus. +3. Téléversez l'archive zip sur le lien ci-dessus. 4. Attendez un moment que les seed soient générées. -5. Lorsque les seeds sont générées, vous serez redirigé vers une page d'informations. +5. Lorsque les seeds sont générées, vous serez redirigé vers une page d'informations "Seed Info". 6. Cliquez sur "Create New Room". Cela vous amènera à la page du serveur. Fournissez le lien de cette page aux autres joueurs afin qu'ils puissent récupérer leurs patchs. **Note:** Les patchs fournis sur cette page permettront aux joueurs de se connecteur automatiquement au serveur, tandis que ceux de la page "Seed Info" non. 7. Remarquez qu'un lien vers le traqueur du MultiWorld est en haut de la page de la salle. Vous devriez également fournir ce lien aux joueurs - pour qu'ils puissent la progression de la partie. N'importe quel personne voulant observer devrait avoir accès à ce lien. -8. Une fois que tous les joueurs ont rejoint, vous pouvez commencer à jouer. \ No newline at end of file + pour qu'ils puissent suivre la progression de la partie. N'importe quel personne voulant observer devrait avoir accès à ce lien. +8. Une fois que tous les joueurs ont rejoint, vous pouvez commencer à jouer. + +## Auto-tracking +Si vous voulez utiliser l'auto-tracking, plusieurs logiciels offrent cette possibilité. +Le logiciel recommandé pour l'auto-tracking actuellement est +[OpenTracker](https://github.com/trippsc2/OpenTracker/releases). + +### Installation +1. Téléchargez le fichier d'installation approprié pour votre ordinateur (Les utilisateurs Windows voudront le fichier `.msi`). +2. Durant le processus d'installation, il vous sera peut-être demandé d'installer les outils "Microsoft Visual Studio Build Tools". Un +lien est fourni durant l'installation d'OpenTracker, et celle des outils doit se faire manuellement. + +### Activer l'auto-tracking +1. Une fois OpenTracker démarré, cliquez sur le menu "Tracking" en haut de la fenêtre, puis choisissez **AutoTracker...** +2. Appuyez sur le bouton **Get Devices** +3. Sélectionnez votre appareil SNES dans la liste déroulante. +4. Si vous voulez tracquer les petites clés ainsi que les objets des donjons, cochez la case **Race Illegal Tracking** +5. Cliquez sur le bouton **Start Autotracking** +6. Fermez la fenêtre "AutoTracker" maintenant, elle n'est plus nécessaire \ No newline at end of file From 51fa516ab988151033e8f9f05c89eb3173eed394 Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Tue, 8 Dec 2020 21:30:07 -0800 Subject: [PATCH 22/30] Add nice seed generation error page. --- WebHostLib/generate.py | 13 +++++++++---- WebHostLib/templates/seedError.html | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 WebHostLib/templates/seedError.html diff --git a/WebHostLib/generate.py b/WebHostLib/generate.py index d8c78ee0..8d6aa077 100644 --- a/WebHostLib/generate.py +++ b/WebHostLib/generate.py @@ -45,8 +45,14 @@ def generate(race=False): return redirect(url_for("wait_seed", seed=gen.id)) else: - seed_id = gen_game({name: vars(options) for name, options in gen_options.items()}, - race=race, owner=session["_id"].int) + try: + seed_id = gen_game({name: vars(options) for name, options in gen_options.items()}, + race=race, owner=session["_id"].int) + except BaseException as e: + from .autolauncher import handle_generation_failure + handle_generation_failure(e) + return render_template("seedError.html", seed_error=(e.__class__.__name__ + ": "+ str(e))) + return redirect(url_for("viewSeed", seed=seed_id)) return render_template("generate.html", race=race) @@ -114,8 +120,7 @@ def wait_seed(seed: UUID): if not generation: return "Generation not found." elif generation.state == STATE_ERROR: - import html - return f"Generation failed, please retry.
{html.escape(generation.meta.decode())}" + return render_template("seedError.html", seed_error=generation.meta.decode()) return render_template("waitSeed.html", seed_id=seed_id) diff --git a/WebHostLib/templates/seedError.html b/WebHostLib/templates/seedError.html new file mode 100644 index 00000000..b0414f83 --- /dev/null +++ b/WebHostLib/templates/seedError.html @@ -0,0 +1,19 @@ +{% extends 'pageWrapper.html' %} +{% import "macros.html" as macros %} + +{% block head %} + Generation failed, please retry. + +{% endblock %} + +{% block body %} + {% include 'header/oceanHeader.html' %} +
+
+

Generation failed

+

please retry

+ {{ seed_error }} +
+
+ {% include 'islandFooter.html' %} +{% endblock %} From 132b20c2d3d399783d566172883a9c2ad2090eb6 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 9 Dec 2020 15:36:05 +0100 Subject: [PATCH 23/30] document Regions.location_table --- EntranceShuffle.py | 2 +- Regions.py | 493 +++++++++++++++++++++++---------------------- 2 files changed, 253 insertions(+), 242 deletions(-) diff --git a/EntranceShuffle.py b/EntranceShuffle.py index a89ac837..66a9a657 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -139,7 +139,7 @@ def link_entrances(world, player): dw_must_exits = list(DW_Entrances_Must_Exit) old_man_entrances = list(Old_Man_Entrances) caves = list(Cave_Exits + Cave_Three_Exits) - single_doors = list(Single_Cave_Doors) + bomb_shop_doors = list(Bomb_Shop_Single_Cave_Doors + Bomb_Shop_Multi_Cave_Doors) blacksmith_doors = list(Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) door_targets = list(Single_Cave_Targets) diff --git a/Regions.py b/Regions.py index bdef78ac..48c42df9 100644 --- a/Regions.py +++ b/Regions.py @@ -1,4 +1,5 @@ import collections +import typing from BaseClasses import Region, Location, Entrance, RegionType, Shop, TakeAny, UpgradeShop, ShopType @@ -450,247 +451,257 @@ key_drop_data = { 'Ganons Tower - Mini Helmasaur Key Drop': [0x14001e, 0x14001f] } -location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), - 'Bottle Merchant': (0x2eb18, 0x186339, False, 'with a merchant'), - 'Flute Spot': (0x18014a, 0x18633d, False, 'underground'), - 'Sunken Treasure': (0x180145, 0x186354, False, 'underwater'), - 'Purple Chest': (0x33d68, 0x186359, False, 'from a box'), - "Blind's Hideout - Top": (0xeb0f, 0x1862e3, False, 'in a basement'), - "Blind's Hideout - Left": (0xeb12, 0x1862e6, False, 'in a basement'), - "Blind's Hideout - Right": (0xeb15, 0x1862e9, False, 'in a basement'), - "Blind's Hideout - Far Left": (0xeb18, 0x1862ec, False, 'in a basement'), - "Blind's Hideout - Far Right": (0xeb1b, 0x1862ef, False, 'in a basement'), - "Link's Uncle": (0x2df45, 0x18635f, False, 'with your uncle'), - 'Secret Passage': (0xe971, 0x186145, False, 'near your uncle'), - 'King Zora': (0xee1c3, 0x186360, False, 'at a high price'), - "Zora's Ledge": (0x180149, 0x186358, False, 'near Zora'), - 'Waterfall Fairy - Left': (0xe9b0, 0x186184, False, 'near a fairy'), - 'Waterfall Fairy - Right': (0xe9d1, 0x1861a5, False, 'near a fairy'), - "King's Tomb": (0xe97a, 0x18614e, False, 'alone in a cave'), - 'Floodgate Chest': (0xe98c, 0x186160, False, 'in the dam'), - "Link's House": (0xe9bc, 0x186190, False, 'in your home'), - 'Kakariko Tavern': (0xe9ce, 0x1861a2, False, 'in the bar'), - 'Chicken House': (0xe9e9, 0x1861bd, False, 'near poultry'), - "Aginah's Cave": (0xe9f2, 0x1861c6, False, 'with Aginah'), - "Sahasrahla's Hut - Left": (0xea82, 0x186256, False, 'near the elder'), - "Sahasrahla's Hut - Middle": (0xea85, 0x186259, False, 'near the elder'), - "Sahasrahla's Hut - Right": (0xea88, 0x18625c, False, 'near the elder'), - 'Sahasrahla': (0x2f1fc, 0x186365, False, 'with the elder'), - 'Kakariko Well - Top': (0xea8e, 0x186262, False, 'in a well'), - 'Kakariko Well - Left': (0xea91, 0x186265, False, 'in a well'), - 'Kakariko Well - Middle': (0xea94, 0x186268, False, 'in a well'), - 'Kakariko Well - Right': (0xea97, 0x18626b, False, 'in a well'), - 'Kakariko Well - Bottom': (0xea9a, 0x18626e, False, 'in a well'), - 'Blacksmith': (0x18002a, 0x186366, False, 'with the smith'), - 'Magic Bat': (0x180015, 0x18635e, False, 'with the bat'), - 'Sick Kid': (0x339cf, 0x186367, False, 'with the sick'), - 'Hobo': (0x33e7d, 0x186368, False, 'with the hobo'), - 'Lost Woods Hideout': (0x180000, 0x186348, False, 'near a thief'), - 'Lumberjack Tree': (0x180001, 0x186349, False, 'in a hole'), - 'Cave 45': (0x180003, 0x18634b, False, 'alone in a cave'), - 'Graveyard Cave': (0x180004, 0x18634c, False, 'alone in a cave'), - 'Checkerboard Cave': (0x180005, 0x18634d, False, 'alone in a cave'), - 'Mini Moldorm Cave - Far Left': (0xeb42, 0x186316, False, 'near Moldorms'), - 'Mini Moldorm Cave - Left': (0xeb45, 0x186319, False, 'near Moldorms'), - 'Mini Moldorm Cave - Right': (0xeb48, 0x18631c, False, 'near Moldorms'), - 'Mini Moldorm Cave - Far Right': (0xeb4b, 0x18631f, False, 'near Moldorms'), - 'Mini Moldorm Cave - Generous Guy': (0x180010, 0x18635a, False, 'near Moldorms'), - 'Ice Rod Cave': (0xeb4e, 0x186322, False, 'in a frozen cave'), - 'Bonk Rock Cave': (0xeb3f, 0x186313, False, 'alone in a cave'), - 'Library': (0x180012, 0x18635c, False, 'near books'), - 'Potion Shop': (0x180014, 0x18635d, False, 'near potions'), - 'Lake Hylia Island': (0x180144, 0x186353, False, 'on an island'), - 'Maze Race': (0x180142, 0x186351, False, 'at the race'), - 'Desert Ledge': (0x180143, 0x186352, False, 'in the desert'), - 'Desert Palace - Big Chest': (0xe98f, 0x186163, False, 'in Desert Palace'), - 'Desert Palace - Torch': (0x180160, 0x186362, False, 'in Desert Palace'), - 'Desert Palace - Map Chest': (0xe9b6, 0x18618a, False, 'in Desert Palace'), - 'Desert Palace - Compass Chest': (0xe9cb, 0x18619f, False, 'in Desert Palace'), - 'Desert Palace - Big Key Chest': (0xe9c2, 0x186196, False, 'in Desert Palace'), - 'Desert Palace - Boss': (0x180151, 0x18633f, False, 'with Lanmolas'), - 'Eastern Palace - Compass Chest': (0xe977, 0x18614b, False, 'in Eastern Palace'), - 'Eastern Palace - Big Chest': (0xe97d, 0x186151, False, 'in Eastern Palace'), - 'Eastern Palace - Cannonball Chest': (0xe9b3, 0x186187, False, 'in Eastern Palace'), - 'Eastern Palace - Big Key Chest': (0xe9b9, 0x18618d, False, 'in Eastern Palace'), - 'Eastern Palace - Map Chest': (0xe9f5, 0x1861c9, False, 'in Eastern Palace'), - 'Eastern Palace - Boss': (0x180150, 0x18633e, False, 'with the Armos'), - 'Master Sword Pedestal': (0x289b0, 0x186369, False, 'at the pedestal'), - 'Hyrule Castle - Boomerang Chest': (0xe974, 0x186148, False, 'in Hyrule Castle'), - 'Hyrule Castle - Map Chest': (0xeb0c, 0x1862e0, False, 'in Hyrule Castle'), - "Hyrule Castle - Zelda's Chest": (0xeb09, 0x1862dd, False, 'in Hyrule Castle'), - 'Sewers - Dark Cross': (0xe96e, 0x186142, False, 'in the sewers'), - 'Sewers - Secret Room - Left': (0xeb5d, 0x186331, False, 'in the sewers'), - 'Sewers - Secret Room - Middle': (0xeb60, 0x186334, False, 'in the sewers'), - 'Sewers - Secret Room - Right': (0xeb63, 0x186337, False, 'in the sewers'), - 'Sanctuary': (0xea79, 0x18624d, False, 'in Sanctuary'), - 'Castle Tower - Room 03': (0xeab5, 0x186289, False, 'in Castle Tower'), - 'Castle Tower - Dark Maze': (0xeab2, 0x186286, False, 'in Castle Tower'), - 'Old Man': (0xf69fa, 0x186364, False, 'with the old man'), - 'Spectacle Rock Cave': (0x180002, 0x18634a, False, 'alone in a cave'), - 'Paradox Cave Lower - Far Left': (0xeb2a, 0x1862fe, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Left': (0xeb2d, 0x186301, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Right': (0xeb30, 0x186304, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Far Right': (0xeb33, 0x186307, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Middle': (0xeb36, 0x18630a, False, 'in a cave with seven chests'), - 'Paradox Cave Upper - Left': (0xeb39, 0x18630d, False, 'in a cave with seven chests'), - 'Paradox Cave Upper - Right': (0xeb3c, 0x186310, False, 'in a cave with seven chests'), - 'Spiral Cave': (0xe9bf, 0x186193, False, 'in spiral cave'), - 'Ether Tablet': (0x180016, 0x18633b, False, 'at a monolith'), - 'Spectacle Rock': (0x180140, 0x18634f, False, 'atop a rock'), - 'Tower of Hera - Basement Cage': (0x180162, 0x18633a, False, 'in Tower of Hera'), - 'Tower of Hera - Map Chest': (0xe9ad, 0x186181, False, 'in Tower of Hera'), - 'Tower of Hera - Big Key Chest': (0xe9e6, 0x1861ba, False, 'in Tower of Hera'), - 'Tower of Hera - Compass Chest': (0xe9fb, 0x1861cf, False, 'in Tower of Hera'), - 'Tower of Hera - Big Chest': (0xe9f8, 0x1861cc, False, 'in Tower of Hera'), - 'Tower of Hera - Boss': (0x180152, 0x186340, False, 'with Moldorm'), - 'Pyramid': (0x180147, 0x186356, False, 'on the pyramid'), - 'Catfish': (0xee185, 0x186361, False, 'with a catfish'), - 'Stumpy': (0x330c7, 0x18636a, False, 'with tree boy'), - 'Digging Game': (0x180148, 0x186357, False, 'underground'), - 'Bombos Tablet': (0x180017, 0x18633c, False, 'at a monolith'), - 'Hype Cave - Top': (0xeb1e, 0x1862f2, False, 'near a bat-like man'), - 'Hype Cave - Middle Right': (0xeb21, 0x1862f5, False, 'near a bat-like man'), - 'Hype Cave - Middle Left': (0xeb24, 0x1862f8, False, 'near a bat-like man'), - 'Hype Cave - Bottom': (0xeb27, 0x1862fb, False, 'near a bat-like man'), - 'Hype Cave - Generous Guy': (0x180011, 0x18635b, False, 'with a bat-like man'), - 'Peg Cave': (0x180006, 0x18634e, False, 'alone in a cave'), - 'Pyramid Fairy - Left': (0xe980, 0x186154, False, 'near a fairy'), - 'Pyramid Fairy - Right': (0xe983, 0x186157, False, 'near a fairy'), - 'Brewery': (0xe9ec, 0x1861c0, False, 'alone in a home'), - 'C-Shaped House': (0xe9ef, 0x1861c3, False, 'alone in a home'), - 'Chest Game': (0xeda8, 0x18636b, False, 'as a prize'), - 'Bumper Cave Ledge': (0x180146, 0x186355, False, 'on a ledge'), - 'Mire Shed - Left': (0xea73, 0x186247, False, 'near sparks'), - 'Mire Shed - Right': (0xea76, 0x18624a, False, 'near sparks'), - 'Superbunny Cave - Top': (0xea7c, 0x186250, False, 'in a connection'), - 'Superbunny Cave - Bottom': (0xea7f, 0x186253, False, 'in a connection'), - 'Spike Cave': (0xea8b, 0x18625f, False, 'beyond spikes'), - 'Hookshot Cave - Top Right': (0xeb51, 0x186325, False, 'across pits'), - 'Hookshot Cave - Top Left': (0xeb54, 0x186328, False, 'across pits'), - 'Hookshot Cave - Bottom Right': (0xeb5a, 0x18632e, False, 'across pits'), - 'Hookshot Cave - Bottom Left': (0xeb57, 0x18632b, False, 'across pits'), - 'Floating Island': (0x180141, 0x186350, False, 'on an island'), - 'Mimic Cave': (0xe9c5, 0x186199, False, 'in a cave of mimicry'), - 'Swamp Palace - Entrance': (0xea9d, 0x186271, False, 'in Swamp Palace'), - 'Swamp Palace - Map Chest': (0xe986, 0x18615a, False, 'in Swamp Palace'), - 'Swamp Palace - Big Chest': (0xe989, 0x18615d, False, 'in Swamp Palace'), - 'Swamp Palace - Compass Chest': (0xeaa0, 0x186274, False, 'in Swamp Palace'), - 'Swamp Palace - Big Key Chest': (0xeaa6, 0x18627a, False, 'in Swamp Palace'), - 'Swamp Palace - West Chest': (0xeaa3, 0x186277, False, 'in Swamp Palace'), - 'Swamp Palace - Flooded Room - Left': (0xeaa9, 0x18627d, False, 'in Swamp Palace'), - 'Swamp Palace - Flooded Room - Right': (0xeaac, 0x186280, False, 'in Swamp Palace'), - 'Swamp Palace - Waterfall Room': (0xeaaf, 0x186283, False, 'in Swamp Palace'), - 'Swamp Palace - Boss': (0x180154, 0x186342, False, 'with Arrghus'), - "Thieves' Town - Big Key Chest": (0xea04, 0x1861d8, False, "in Thieves' Town"), - "Thieves' Town - Map Chest": (0xea01, 0x1861d5, False, "in Thieves' Town"), - "Thieves' Town - Compass Chest": (0xea07, 0x1861db, False, "in Thieves' Town"), - "Thieves' Town - Ambush Chest": (0xea0a, 0x1861de, False, "in Thieves' Town"), - "Thieves' Town - Attic": (0xea0d, 0x1861e1, False, "in Thieves' Town"), - "Thieves' Town - Big Chest": (0xea10, 0x1861e4, False, "in Thieves' Town"), - "Thieves' Town - Blind's Cell": (0xea13, 0x1861e7, False, "in Thieves' Town"), - "Thieves' Town - Boss": (0x180156, 0x186344, False, 'with Blind'), - 'Skull Woods - Compass Chest': (0xe992, 0x186166, False, 'in Skull Woods'), - 'Skull Woods - Map Chest': (0xe99b, 0x18616f, False, 'in Skull Woods'), - 'Skull Woods - Big Chest': (0xe998, 0x18616c, False, 'in Skull Woods'), - 'Skull Woods - Pot Prison': (0xe9a1, 0x186175, False, 'in Skull Woods'), - 'Skull Woods - Pinball Room': (0xe9c8, 0x18619c, False, 'in Skull Woods'), - 'Skull Woods - Big Key Chest': (0xe99e, 0x186172, False, 'in Skull Woods'), - 'Skull Woods - Bridge Room': (0xe9fe, 0x1861d2, False, 'near Mothula'), - 'Skull Woods - Boss': (0x180155, 0x186343, False, 'with Mothula'), - 'Ice Palace - Compass Chest': (0xe9d4, 0x1861a8, False, 'in Ice Palace'), - 'Ice Palace - Freezor Chest': (0xe995, 0x186169, False, 'in Ice Palace'), - 'Ice Palace - Big Chest': (0xe9aa, 0x18617e, False, 'in Ice Palace'), - 'Ice Palace - Iced T Room': (0xe9e3, 0x1861b7, False, 'in Ice Palace'), - 'Ice Palace - Spike Room': (0xe9e0, 0x1861b4, False, 'in Ice Palace'), - 'Ice Palace - Big Key Chest': (0xe9a4, 0x186178, False, 'in Ice Palace'), - 'Ice Palace - Map Chest': (0xe9dd, 0x1861b1, False, 'in Ice Palace'), - 'Ice Palace - Boss': (0x180157, 0x186345, False, 'with Kholdstare'), - 'Misery Mire - Big Chest': (0xea67, 0x18623b, False, 'in Misery Mire'), - 'Misery Mire - Map Chest': (0xea6a, 0x18623e, False, 'in Misery Mire'), - 'Misery Mire - Main Lobby': (0xea5e, 0x186232, False, 'in Misery Mire'), - 'Misery Mire - Bridge Chest': (0xea61, 0x186235, False, 'in Misery Mire'), - 'Misery Mire - Spike Chest': (0xe9da, 0x1861ae, False, 'in Misery Mire'), - 'Misery Mire - Compass Chest': (0xea64, 0x186238, False, 'in Misery Mire'), - 'Misery Mire - Big Key Chest': (0xea6d, 0x186241, False, 'in Misery Mire'), - 'Misery Mire - Boss': (0x180158, 0x186346, False, 'with Vitreous'), - 'Turtle Rock - Compass Chest': (0xea22, 0x1861f6, False, 'in Turtle Rock'), - 'Turtle Rock - Roller Room - Left': (0xea1c, 0x1861f0, False, 'in Turtle Rock'), - 'Turtle Rock - Roller Room - Right': (0xea1f, 0x1861f3, False, 'in Turtle Rock'), - 'Turtle Rock - Chain Chomps': (0xea16, 0x1861ea, False, 'in Turtle Rock'), - 'Turtle Rock - Big Key Chest': (0xea25, 0x1861f9, False, 'in Turtle Rock'), - 'Turtle Rock - Big Chest': (0xea19, 0x1861ed, False, 'in Turtle Rock'), - 'Turtle Rock - Crystaroller Room': (0xea34, 0x186208, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Bottom Left': (0xea31, 0x186205, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Bottom Right': (0xea2e, 0x186202, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Top Left': (0xea2b, 0x1861ff, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Top Right': (0xea28, 0x1861fc, False, 'in Turtle Rock'), - 'Turtle Rock - Boss': (0x180159, 0x186347, False, 'with Trinexx'), - 'Palace of Darkness - Shooter Room': (0xea5b, 0x18622f, False, 'in Palace of Darkness'), - 'Palace of Darkness - The Arena - Bridge': (0xea3d, 0x186211, False, 'in Palace of Darkness'), - 'Palace of Darkness - Stalfos Basement': (0xea49, 0x18621d, False, 'in Palace of Darkness'), - 'Palace of Darkness - Big Key Chest': (0xea37, 0x18620b, False, 'in Palace of Darkness'), - 'Palace of Darkness - The Arena - Ledge': (0xea3a, 0x18620e, False, 'in Palace of Darkness'), - 'Palace of Darkness - Map Chest': (0xea52, 0x186226, False, 'in Palace of Darkness'), - 'Palace of Darkness - Compass Chest': (0xea43, 0x186217, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Basement - Left': (0xea4c, 0x186220, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Basement - Right': (0xea4f, 0x186223, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Maze - Top': (0xea55, 0x186229, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Maze - Bottom': (0xea58, 0x18622c, False, 'in Palace of Darkness'), - 'Palace of Darkness - Big Chest': (0xea40, 0x186214, False, 'in Palace of Darkness'), - 'Palace of Darkness - Harmless Hellway': (0xea46, 0x18621a, False, 'in Palace of Darkness'), - 'Palace of Darkness - Boss': (0x180153, 0x186341, False, 'with Helmasaur King'), - "Ganons Tower - Bob's Torch": (0x180161, 0x186363, False, "in Ganon's Tower"), - 'Ganons Tower - Hope Room - Left': (0xead9, 0x1862ad, False, "in Ganon's Tower"), - 'Ganons Tower - Hope Room - Right': (0xeadc, 0x1862b0, False, "in Ganon's Tower"), - 'Ganons Tower - Tile Room': (0xeae2, 0x1862b6, False, "in Ganon's Tower"), - 'Ganons Tower - Compass Room - Top Left': (0xeae5, 0x1862b9, False, "in Ganon's Tower"), - 'Ganons Tower - Compass Room - Top Right': (0xeae8, 0x1862bc, False, "in Ganon's Tower"), - 'Ganons Tower - Compass Room - Bottom Left': (0xeaeb, 0x1862bf, False, "in Ganon's Tower"), - 'Ganons Tower - Compass Room - Bottom Right': (0xeaee, 0x1862c2, False, "in Ganon's Tower"), - 'Ganons Tower - DMs Room - Top Left': (0xeab8, 0x18628c, False, "in Ganon's Tower"), - 'Ganons Tower - DMs Room - Top Right': (0xeabb, 0x18628f, False, "in Ganon's Tower"), - 'Ganons Tower - DMs Room - Bottom Left': (0xeabe, 0x186292, False, "in Ganon's Tower"), - 'Ganons Tower - DMs Room - Bottom Right': (0xeac1, 0x186295, False, "in Ganon's Tower"), - 'Ganons Tower - Map Chest': (0xead3, 0x1862a7, False, "in Ganon's Tower"), - 'Ganons Tower - Firesnake Room': (0xead0, 0x1862a4, False, "in Ganon's Tower"), - 'Ganons Tower - Randomizer Room - Top Left': (0xeac4, 0x186298, False, "in Ganon's Tower"), - 'Ganons Tower - Randomizer Room - Top Right': (0xeac7, 0x18629b, False, "in Ganon's Tower"), - 'Ganons Tower - Randomizer Room - Bottom Left': (0xeaca, 0x18629e, False, "in Ganon's Tower"), - 'Ganons Tower - Randomizer Room - Bottom Right': (0xeacd, 0x1862a1, False, "in Ganon's Tower"), - "Ganons Tower - Bob's Chest": (0xeadf, 0x1862b3, False, "in Ganon's Tower"), - 'Ganons Tower - Big Chest': (0xead6, 0x1862aa, False, "in Ganon's Tower"), - 'Ganons Tower - Big Key Room - Left': (0xeaf4, 0x1862c8, False, "in Ganon's Tower"), - 'Ganons Tower - Big Key Room - Right': (0xeaf7, 0x1862cb, False, "in Ganon's Tower"), - 'Ganons Tower - Big Key Chest': (0xeaf1, 0x1862c5, False, "in Ganon's Tower"), - 'Ganons Tower - Mini Helmasaur Room - Left': (0xeafd, 0x1862d1, False, "atop Ganon's Tower"), - 'Ganons Tower - Mini Helmasaur Room - Right': (0xeb00, 0x1862d4, False, "atop Ganon's Tower"), - 'Ganons Tower - Pre-Moldorm Chest': (0xeb03, 0x1862d7, False, "atop Ganon's Tower"), - 'Ganons Tower - Validation Chest': (0xeb06, 0x1862da, False, "atop Ganon's Tower"), - 'Ganon': (None, None, False, 'from me'), - 'Agahnim 1': (None, None, False, 'from Ganon\'s wizardry form'), - 'Agahnim 2': (None, None, False, 'from Ganon\'s wizardry form'), - 'Floodgate': (None, None, False, None), - 'Frog': (None, None, False, None), - 'Missing Smith': (None, None, False, None), - 'Dark Blacksmith Ruins': (None, None, False, None), - 'Eastern Palace - Prize': ([0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], None, True, 'Eastern Palace'), - 'Desert Palace - Prize': ([0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], None, True, 'Desert Palace'), - 'Tower of Hera - Prize': ( - [0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], None, True, 'Tower of Hera'), - 'Palace of Darkness - Prize': ( - [0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], None, True, 'Palace of Darkness'), - 'Swamp Palace - Prize': ( - [0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], None, True, 'Swamp Palace'), - 'Thieves\' Town - Prize': ( - [0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], None, True, 'Thieves\' Town'), - 'Skull Woods - Prize': ( - [0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], None, True, 'Skull Woods'), - 'Ice Palace - Prize': ( - [0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], None, True, 'Ice Palace'), - 'Misery Mire - Prize': ( - [0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], None, True, 'Misery Mire'), - 'Turtle Rock - Prize': ( - [0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], None, True, 'Turtle Rock')} +# tuple contents: +# address to write to for item +# address to write to for player getting the item +# can this location drop a crystal +# hint tile/npc text for this location +location_table: typing.Dict[str, + typing.Tuple[typing.Optional[typing.Union[int, typing.Tuple[int, ...]]], + typing.Optional[int], + bool, + typing.Optional[str]]] = \ + {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), + 'Bottle Merchant': (0x2eb18, 0x186339, False, 'with a merchant'), + 'Flute Spot': (0x18014a, 0x18633d, False, 'underground'), + 'Sunken Treasure': (0x180145, 0x186354, False, 'underwater'), + 'Purple Chest': (0x33d68, 0x186359, False, 'from a box'), + "Blind's Hideout - Top": (0xeb0f, 0x1862e3, False, 'in a basement'), + "Blind's Hideout - Left": (0xeb12, 0x1862e6, False, 'in a basement'), + "Blind's Hideout - Right": (0xeb15, 0x1862e9, False, 'in a basement'), + "Blind's Hideout - Far Left": (0xeb18, 0x1862ec, False, 'in a basement'), + "Blind's Hideout - Far Right": (0xeb1b, 0x1862ef, False, 'in a basement'), + "Link's Uncle": (0x2df45, 0x18635f, False, 'with your uncle'), + 'Secret Passage': (0xe971, 0x186145, False, 'near your uncle'), + 'King Zora': (0xee1c3, 0x186360, False, 'at a high price'), + "Zora's Ledge": (0x180149, 0x186358, False, 'near Zora'), + 'Waterfall Fairy - Left': (0xe9b0, 0x186184, False, 'near a fairy'), + 'Waterfall Fairy - Right': (0xe9d1, 0x1861a5, False, 'near a fairy'), + "King's Tomb": (0xe97a, 0x18614e, False, 'alone in a cave'), + 'Floodgate Chest': (0xe98c, 0x186160, False, 'in the dam'), + "Link's House": (0xe9bc, 0x186190, False, 'in your home'), + 'Kakariko Tavern': (0xe9ce, 0x1861a2, False, 'in the bar'), + 'Chicken House': (0xe9e9, 0x1861bd, False, 'near poultry'), + "Aginah's Cave": (0xe9f2, 0x1861c6, False, 'with Aginah'), + "Sahasrahla's Hut - Left": (0xea82, 0x186256, False, 'near the elder'), + "Sahasrahla's Hut - Middle": (0xea85, 0x186259, False, 'near the elder'), + "Sahasrahla's Hut - Right": (0xea88, 0x18625c, False, 'near the elder'), + 'Sahasrahla': (0x2f1fc, 0x186365, False, 'with the elder'), + 'Kakariko Well - Top': (0xea8e, 0x186262, False, 'in a well'), + 'Kakariko Well - Left': (0xea91, 0x186265, False, 'in a well'), + 'Kakariko Well - Middle': (0xea94, 0x186268, False, 'in a well'), + 'Kakariko Well - Right': (0xea97, 0x18626b, False, 'in a well'), + 'Kakariko Well - Bottom': (0xea9a, 0x18626e, False, 'in a well'), + 'Blacksmith': (0x18002a, 0x186366, False, 'with the smith'), + 'Magic Bat': (0x180015, 0x18635e, False, 'with the bat'), + 'Sick Kid': (0x339cf, 0x186367, False, 'with the sick'), + 'Hobo': (0x33e7d, 0x186368, False, 'with the hobo'), + 'Lost Woods Hideout': (0x180000, 0x186348, False, 'near a thief'), + 'Lumberjack Tree': (0x180001, 0x186349, False, 'in a hole'), + 'Cave 45': (0x180003, 0x18634b, False, 'alone in a cave'), + 'Graveyard Cave': (0x180004, 0x18634c, False, 'alone in a cave'), + 'Checkerboard Cave': (0x180005, 0x18634d, False, 'alone in a cave'), + 'Mini Moldorm Cave - Far Left': (0xeb42, 0x186316, False, 'near Moldorms'), + 'Mini Moldorm Cave - Left': (0xeb45, 0x186319, False, 'near Moldorms'), + 'Mini Moldorm Cave - Right': (0xeb48, 0x18631c, False, 'near Moldorms'), + 'Mini Moldorm Cave - Far Right': (0xeb4b, 0x18631f, False, 'near Moldorms'), + 'Mini Moldorm Cave - Generous Guy': (0x180010, 0x18635a, False, 'near Moldorms'), + 'Ice Rod Cave': (0xeb4e, 0x186322, False, 'in a frozen cave'), + 'Bonk Rock Cave': (0xeb3f, 0x186313, False, 'alone in a cave'), + 'Library': (0x180012, 0x18635c, False, 'near books'), + 'Potion Shop': (0x180014, 0x18635d, False, 'near potions'), + 'Lake Hylia Island': (0x180144, 0x186353, False, 'on an island'), + 'Maze Race': (0x180142, 0x186351, False, 'at the race'), + 'Desert Ledge': (0x180143, 0x186352, False, 'in the desert'), + 'Desert Palace - Big Chest': (0xe98f, 0x186163, False, 'in Desert Palace'), + 'Desert Palace - Torch': (0x180160, 0x186362, False, 'in Desert Palace'), + 'Desert Palace - Map Chest': (0xe9b6, 0x18618a, False, 'in Desert Palace'), + 'Desert Palace - Compass Chest': (0xe9cb, 0x18619f, False, 'in Desert Palace'), + 'Desert Palace - Big Key Chest': (0xe9c2, 0x186196, False, 'in Desert Palace'), + 'Desert Palace - Boss': (0x180151, 0x18633f, False, 'with Lanmolas'), + 'Eastern Palace - Compass Chest': (0xe977, 0x18614b, False, 'in Eastern Palace'), + 'Eastern Palace - Big Chest': (0xe97d, 0x186151, False, 'in Eastern Palace'), + 'Eastern Palace - Cannonball Chest': (0xe9b3, 0x186187, False, 'in Eastern Palace'), + 'Eastern Palace - Big Key Chest': (0xe9b9, 0x18618d, False, 'in Eastern Palace'), + 'Eastern Palace - Map Chest': (0xe9f5, 0x1861c9, False, 'in Eastern Palace'), + 'Eastern Palace - Boss': (0x180150, 0x18633e, False, 'with the Armos'), + 'Master Sword Pedestal': (0x289b0, 0x186369, False, 'at the pedestal'), + 'Hyrule Castle - Boomerang Chest': (0xe974, 0x186148, False, 'in Hyrule Castle'), + 'Hyrule Castle - Map Chest': (0xeb0c, 0x1862e0, False, 'in Hyrule Castle'), + "Hyrule Castle - Zelda's Chest": (0xeb09, 0x1862dd, False, 'in Hyrule Castle'), + 'Sewers - Dark Cross': (0xe96e, 0x186142, False, 'in the sewers'), + 'Sewers - Secret Room - Left': (0xeb5d, 0x186331, False, 'in the sewers'), + 'Sewers - Secret Room - Middle': (0xeb60, 0x186334, False, 'in the sewers'), + 'Sewers - Secret Room - Right': (0xeb63, 0x186337, False, 'in the sewers'), + 'Sanctuary': (0xea79, 0x18624d, False, 'in Sanctuary'), + 'Castle Tower - Room 03': (0xeab5, 0x186289, False, 'in Castle Tower'), + 'Castle Tower - Dark Maze': (0xeab2, 0x186286, False, 'in Castle Tower'), + 'Old Man': (0xf69fa, 0x186364, False, 'with the old man'), + 'Spectacle Rock Cave': (0x180002, 0x18634a, False, 'alone in a cave'), + 'Paradox Cave Lower - Far Left': (0xeb2a, 0x1862fe, False, 'in a cave with seven chests'), + 'Paradox Cave Lower - Left': (0xeb2d, 0x186301, False, 'in a cave with seven chests'), + 'Paradox Cave Lower - Right': (0xeb30, 0x186304, False, 'in a cave with seven chests'), + 'Paradox Cave Lower - Far Right': (0xeb33, 0x186307, False, 'in a cave with seven chests'), + 'Paradox Cave Lower - Middle': (0xeb36, 0x18630a, False, 'in a cave with seven chests'), + 'Paradox Cave Upper - Left': (0xeb39, 0x18630d, False, 'in a cave with seven chests'), + 'Paradox Cave Upper - Right': (0xeb3c, 0x186310, False, 'in a cave with seven chests'), + 'Spiral Cave': (0xe9bf, 0x186193, False, 'in spiral cave'), + 'Ether Tablet': (0x180016, 0x18633b, False, 'at a monolith'), + 'Spectacle Rock': (0x180140, 0x18634f, False, 'atop a rock'), + 'Tower of Hera - Basement Cage': (0x180162, 0x18633a, False, 'in Tower of Hera'), + 'Tower of Hera - Map Chest': (0xe9ad, 0x186181, False, 'in Tower of Hera'), + 'Tower of Hera - Big Key Chest': (0xe9e6, 0x1861ba, False, 'in Tower of Hera'), + 'Tower of Hera - Compass Chest': (0xe9fb, 0x1861cf, False, 'in Tower of Hera'), + 'Tower of Hera - Big Chest': (0xe9f8, 0x1861cc, False, 'in Tower of Hera'), + 'Tower of Hera - Boss': (0x180152, 0x186340, False, 'with Moldorm'), + 'Pyramid': (0x180147, 0x186356, False, 'on the pyramid'), + 'Catfish': (0xee185, 0x186361, False, 'with a catfish'), + 'Stumpy': (0x330c7, 0x18636a, False, 'with tree boy'), + 'Digging Game': (0x180148, 0x186357, False, 'underground'), + 'Bombos Tablet': (0x180017, 0x18633c, False, 'at a monolith'), + 'Hype Cave - Top': (0xeb1e, 0x1862f2, False, 'near a bat-like man'), + 'Hype Cave - Middle Right': (0xeb21, 0x1862f5, False, 'near a bat-like man'), + 'Hype Cave - Middle Left': (0xeb24, 0x1862f8, False, 'near a bat-like man'), + 'Hype Cave - Bottom': (0xeb27, 0x1862fb, False, 'near a bat-like man'), + 'Hype Cave - Generous Guy': (0x180011, 0x18635b, False, 'with a bat-like man'), + 'Peg Cave': (0x180006, 0x18634e, False, 'alone in a cave'), + 'Pyramid Fairy - Left': (0xe980, 0x186154, False, 'near a fairy'), + 'Pyramid Fairy - Right': (0xe983, 0x186157, False, 'near a fairy'), + 'Brewery': (0xe9ec, 0x1861c0, False, 'alone in a home'), + 'C-Shaped House': (0xe9ef, 0x1861c3, False, 'alone in a home'), + 'Chest Game': (0xeda8, 0x18636b, False, 'as a prize'), + 'Bumper Cave Ledge': (0x180146, 0x186355, False, 'on a ledge'), + 'Mire Shed - Left': (0xea73, 0x186247, False, 'near sparks'), + 'Mire Shed - Right': (0xea76, 0x18624a, False, 'near sparks'), + 'Superbunny Cave - Top': (0xea7c, 0x186250, False, 'in a connection'), + 'Superbunny Cave - Bottom': (0xea7f, 0x186253, False, 'in a connection'), + 'Spike Cave': (0xea8b, 0x18625f, False, 'beyond spikes'), + 'Hookshot Cave - Top Right': (0xeb51, 0x186325, False, 'across pits'), + 'Hookshot Cave - Top Left': (0xeb54, 0x186328, False, 'across pits'), + 'Hookshot Cave - Bottom Right': (0xeb5a, 0x18632e, False, 'across pits'), + 'Hookshot Cave - Bottom Left': (0xeb57, 0x18632b, False, 'across pits'), + 'Floating Island': (0x180141, 0x186350, False, 'on an island'), + 'Mimic Cave': (0xe9c5, 0x186199, False, 'in a cave of mimicry'), + 'Swamp Palace - Entrance': (0xea9d, 0x186271, False, 'in Swamp Palace'), + 'Swamp Palace - Map Chest': (0xe986, 0x18615a, False, 'in Swamp Palace'), + 'Swamp Palace - Big Chest': (0xe989, 0x18615d, False, 'in Swamp Palace'), + 'Swamp Palace - Compass Chest': (0xeaa0, 0x186274, False, 'in Swamp Palace'), + 'Swamp Palace - Big Key Chest': (0xeaa6, 0x18627a, False, 'in Swamp Palace'), + 'Swamp Palace - West Chest': (0xeaa3, 0x186277, False, 'in Swamp Palace'), + 'Swamp Palace - Flooded Room - Left': (0xeaa9, 0x18627d, False, 'in Swamp Palace'), + 'Swamp Palace - Flooded Room - Right': (0xeaac, 0x186280, False, 'in Swamp Palace'), + 'Swamp Palace - Waterfall Room': (0xeaaf, 0x186283, False, 'in Swamp Palace'), + 'Swamp Palace - Boss': (0x180154, 0x186342, False, 'with Arrghus'), + "Thieves' Town - Big Key Chest": (0xea04, 0x1861d8, False, "in Thieves' Town"), + "Thieves' Town - Map Chest": (0xea01, 0x1861d5, False, "in Thieves' Town"), + "Thieves' Town - Compass Chest": (0xea07, 0x1861db, False, "in Thieves' Town"), + "Thieves' Town - Ambush Chest": (0xea0a, 0x1861de, False, "in Thieves' Town"), + "Thieves' Town - Attic": (0xea0d, 0x1861e1, False, "in Thieves' Town"), + "Thieves' Town - Big Chest": (0xea10, 0x1861e4, False, "in Thieves' Town"), + "Thieves' Town - Blind's Cell": (0xea13, 0x1861e7, False, "in Thieves' Town"), + "Thieves' Town - Boss": (0x180156, 0x186344, False, 'with Blind'), + 'Skull Woods - Compass Chest': (0xe992, 0x186166, False, 'in Skull Woods'), + 'Skull Woods - Map Chest': (0xe99b, 0x18616f, False, 'in Skull Woods'), + 'Skull Woods - Big Chest': (0xe998, 0x18616c, False, 'in Skull Woods'), + 'Skull Woods - Pot Prison': (0xe9a1, 0x186175, False, 'in Skull Woods'), + 'Skull Woods - Pinball Room': (0xe9c8, 0x18619c, False, 'in Skull Woods'), + 'Skull Woods - Big Key Chest': (0xe99e, 0x186172, False, 'in Skull Woods'), + 'Skull Woods - Bridge Room': (0xe9fe, 0x1861d2, False, 'near Mothula'), + 'Skull Woods - Boss': (0x180155, 0x186343, False, 'with Mothula'), + 'Ice Palace - Compass Chest': (0xe9d4, 0x1861a8, False, 'in Ice Palace'), + 'Ice Palace - Freezor Chest': (0xe995, 0x186169, False, 'in Ice Palace'), + 'Ice Palace - Big Chest': (0xe9aa, 0x18617e, False, 'in Ice Palace'), + 'Ice Palace - Iced T Room': (0xe9e3, 0x1861b7, False, 'in Ice Palace'), + 'Ice Palace - Spike Room': (0xe9e0, 0x1861b4, False, 'in Ice Palace'), + 'Ice Palace - Big Key Chest': (0xe9a4, 0x186178, False, 'in Ice Palace'), + 'Ice Palace - Map Chest': (0xe9dd, 0x1861b1, False, 'in Ice Palace'), + 'Ice Palace - Boss': (0x180157, 0x186345, False, 'with Kholdstare'), + 'Misery Mire - Big Chest': (0xea67, 0x18623b, False, 'in Misery Mire'), + 'Misery Mire - Map Chest': (0xea6a, 0x18623e, False, 'in Misery Mire'), + 'Misery Mire - Main Lobby': (0xea5e, 0x186232, False, 'in Misery Mire'), + 'Misery Mire - Bridge Chest': (0xea61, 0x186235, False, 'in Misery Mire'), + 'Misery Mire - Spike Chest': (0xe9da, 0x1861ae, False, 'in Misery Mire'), + 'Misery Mire - Compass Chest': (0xea64, 0x186238, False, 'in Misery Mire'), + 'Misery Mire - Big Key Chest': (0xea6d, 0x186241, False, 'in Misery Mire'), + 'Misery Mire - Boss': (0x180158, 0x186346, False, 'with Vitreous'), + 'Turtle Rock - Compass Chest': (0xea22, 0x1861f6, False, 'in Turtle Rock'), + 'Turtle Rock - Roller Room - Left': (0xea1c, 0x1861f0, False, 'in Turtle Rock'), + 'Turtle Rock - Roller Room - Right': (0xea1f, 0x1861f3, False, 'in Turtle Rock'), + 'Turtle Rock - Chain Chomps': (0xea16, 0x1861ea, False, 'in Turtle Rock'), + 'Turtle Rock - Big Key Chest': (0xea25, 0x1861f9, False, 'in Turtle Rock'), + 'Turtle Rock - Big Chest': (0xea19, 0x1861ed, False, 'in Turtle Rock'), + 'Turtle Rock - Crystaroller Room': (0xea34, 0x186208, False, 'in Turtle Rock'), + 'Turtle Rock - Eye Bridge - Bottom Left': (0xea31, 0x186205, False, 'in Turtle Rock'), + 'Turtle Rock - Eye Bridge - Bottom Right': (0xea2e, 0x186202, False, 'in Turtle Rock'), + 'Turtle Rock - Eye Bridge - Top Left': (0xea2b, 0x1861ff, False, 'in Turtle Rock'), + 'Turtle Rock - Eye Bridge - Top Right': (0xea28, 0x1861fc, False, 'in Turtle Rock'), + 'Turtle Rock - Boss': (0x180159, 0x186347, False, 'with Trinexx'), + 'Palace of Darkness - Shooter Room': (0xea5b, 0x18622f, False, 'in Palace of Darkness'), + 'Palace of Darkness - The Arena - Bridge': (0xea3d, 0x186211, False, 'in Palace of Darkness'), + 'Palace of Darkness - Stalfos Basement': (0xea49, 0x18621d, False, 'in Palace of Darkness'), + 'Palace of Darkness - Big Key Chest': (0xea37, 0x18620b, False, 'in Palace of Darkness'), + 'Palace of Darkness - The Arena - Ledge': (0xea3a, 0x18620e, False, 'in Palace of Darkness'), + 'Palace of Darkness - Map Chest': (0xea52, 0x186226, False, 'in Palace of Darkness'), + 'Palace of Darkness - Compass Chest': (0xea43, 0x186217, False, 'in Palace of Darkness'), + 'Palace of Darkness - Dark Basement - Left': (0xea4c, 0x186220, False, 'in Palace of Darkness'), + 'Palace of Darkness - Dark Basement - Right': (0xea4f, 0x186223, False, 'in Palace of Darkness'), + 'Palace of Darkness - Dark Maze - Top': (0xea55, 0x186229, False, 'in Palace of Darkness'), + 'Palace of Darkness - Dark Maze - Bottom': (0xea58, 0x18622c, False, 'in Palace of Darkness'), + 'Palace of Darkness - Big Chest': (0xea40, 0x186214, False, 'in Palace of Darkness'), + 'Palace of Darkness - Harmless Hellway': (0xea46, 0x18621a, False, 'in Palace of Darkness'), + 'Palace of Darkness - Boss': (0x180153, 0x186341, False, 'with Helmasaur King'), + "Ganons Tower - Bob's Torch": (0x180161, 0x186363, False, "in Ganon's Tower"), + 'Ganons Tower - Hope Room - Left': (0xead9, 0x1862ad, False, "in Ganon's Tower"), + 'Ganons Tower - Hope Room - Right': (0xeadc, 0x1862b0, False, "in Ganon's Tower"), + 'Ganons Tower - Tile Room': (0xeae2, 0x1862b6, False, "in Ganon's Tower"), + 'Ganons Tower - Compass Room - Top Left': (0xeae5, 0x1862b9, False, "in Ganon's Tower"), + 'Ganons Tower - Compass Room - Top Right': (0xeae8, 0x1862bc, False, "in Ganon's Tower"), + 'Ganons Tower - Compass Room - Bottom Left': (0xeaeb, 0x1862bf, False, "in Ganon's Tower"), + 'Ganons Tower - Compass Room - Bottom Right': (0xeaee, 0x1862c2, False, "in Ganon's Tower"), + 'Ganons Tower - DMs Room - Top Left': (0xeab8, 0x18628c, False, "in Ganon's Tower"), + 'Ganons Tower - DMs Room - Top Right': (0xeabb, 0x18628f, False, "in Ganon's Tower"), + 'Ganons Tower - DMs Room - Bottom Left': (0xeabe, 0x186292, False, "in Ganon's Tower"), + 'Ganons Tower - DMs Room - Bottom Right': (0xeac1, 0x186295, False, "in Ganon's Tower"), + 'Ganons Tower - Map Chest': (0xead3, 0x1862a7, False, "in Ganon's Tower"), + 'Ganons Tower - Firesnake Room': (0xead0, 0x1862a4, False, "in Ganon's Tower"), + 'Ganons Tower - Randomizer Room - Top Left': (0xeac4, 0x186298, False, "in Ganon's Tower"), + 'Ganons Tower - Randomizer Room - Top Right': (0xeac7, 0x18629b, False, "in Ganon's Tower"), + 'Ganons Tower - Randomizer Room - Bottom Left': (0xeaca, 0x18629e, False, "in Ganon's Tower"), + 'Ganons Tower - Randomizer Room - Bottom Right': (0xeacd, 0x1862a1, False, "in Ganon's Tower"), + "Ganons Tower - Bob's Chest": (0xeadf, 0x1862b3, False, "in Ganon's Tower"), + 'Ganons Tower - Big Chest': (0xead6, 0x1862aa, False, "in Ganon's Tower"), + 'Ganons Tower - Big Key Room - Left': (0xeaf4, 0x1862c8, False, "in Ganon's Tower"), + 'Ganons Tower - Big Key Room - Right': (0xeaf7, 0x1862cb, False, "in Ganon's Tower"), + 'Ganons Tower - Big Key Chest': (0xeaf1, 0x1862c5, False, "in Ganon's Tower"), + 'Ganons Tower - Mini Helmasaur Room - Left': (0xeafd, 0x1862d1, False, "atop Ganon's Tower"), + 'Ganons Tower - Mini Helmasaur Room - Right': (0xeb00, 0x1862d4, False, "atop Ganon's Tower"), + 'Ganons Tower - Pre-Moldorm Chest': (0xeb03, 0x1862d7, False, "atop Ganon's Tower"), + 'Ganons Tower - Validation Chest': (0xeb06, 0x1862da, False, "atop Ganon's Tower"), + 'Ganon': (None, None, False, 'from me'), + 'Agahnim 1': (None, None, False, 'from Ganon\'s wizardry form'), + 'Agahnim 2': (None, None, False, 'from Ganon\'s wizardry form'), + 'Floodgate': (None, None, False, None), + 'Frog': (None, None, False, None), + 'Missing Smith': (None, None, False, None), + 'Dark Blacksmith Ruins': (None, None, False, None), + 'Eastern Palace - Prize': ([0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], None, True, 'Eastern Palace'), + 'Desert Palace - Prize': ([0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], None, True, 'Desert Palace'), + 'Tower of Hera - Prize': ( + [0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], None, True, 'Tower of Hera'), + 'Palace of Darkness - Prize': ( + [0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], None, True, 'Palace of Darkness'), + 'Swamp Palace - Prize': ( + [0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], None, True, 'Swamp Palace'), + 'Thieves\' Town - Prize': ( + [0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], None, True, 'Thieves\' Town'), + 'Skull Woods - Prize': ( + [0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], None, True, 'Skull Woods'), + 'Ice Palace - Prize': ( + [0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], None, True, 'Ice Palace'), + 'Misery Mire - Prize': ( + [0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], None, True, 'Misery Mire'), + 'Turtle Rock - Prize': ( + [0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], None, True, 'Turtle Rock')} lookup_id_to_name = {data[0]: name for name, data in location_table.items() if type(data[0]) == int} lookup_id_to_name = {**lookup_id_to_name, **{data[1]: name for name, data in key_drop_data.items()}, -1: "cheat console"} From 7d8e95717ae2e28a228c2c9861ce197a855dc5f2 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 9 Dec 2020 15:38:23 +0100 Subject: [PATCH 24/30] correct typing.Tuple to typing.List for location_table crystal addresses --- Regions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Regions.py b/Regions.py index 48c42df9..24ac56c1 100644 --- a/Regions.py +++ b/Regions.py @@ -457,7 +457,7 @@ key_drop_data = { # can this location drop a crystal # hint tile/npc text for this location location_table: typing.Dict[str, - typing.Tuple[typing.Optional[typing.Union[int, typing.Tuple[int, ...]]], + typing.Tuple[typing.Optional[typing.Union[int, typing.List[int, ...]]], typing.Optional[int], bool, typing.Optional[str]]] = \ From 4b3388f635d300eec0a42058c650d067c9a24e0e Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 9 Dec 2020 15:41:34 +0100 Subject: [PATCH 25/30] typing.List doesn't support ellipsis notation --- Regions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Regions.py b/Regions.py index 24ac56c1..4326e7d1 100644 --- a/Regions.py +++ b/Regions.py @@ -457,7 +457,7 @@ key_drop_data = { # can this location drop a crystal # hint tile/npc text for this location location_table: typing.Dict[str, - typing.Tuple[typing.Optional[typing.Union[int, typing.List[int, ...]]], + typing.Tuple[typing.Optional[typing.Union[int, typing.List[int]]], typing.Optional[int], bool, typing.Optional[str]]] = \ From 447857a8f70b97906898639acc25f75d862f8463 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 9 Dec 2020 20:27:59 +0100 Subject: [PATCH 26/30] add python 3.8 setup --- inno_setup_38.iss | 141 ++++++++++++++++++++++++++++ inno_setup.iss => inno_setup_39.iss | 0 2 files changed, 141 insertions(+) create mode 100644 inno_setup_38.iss rename inno_setup.iss => inno_setup_39.iss (100%) diff --git a/inno_setup_38.iss b/inno_setup_38.iss new file mode 100644 index 00000000..0e6c8608 --- /dev/null +++ b/inno_setup_38.iss @@ -0,0 +1,141 @@ +#define sourcepath "build\exe.win-amd64-3.8\" +#define MyAppName "BerserkerMultiWorld" +#define MyAppExeName "BerserkerMultiClient.exe" +#define MyAppIcon "icon.ico" + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. +; Do not use the same AppId value in installers for other applications. +AppId={{6D826EE0-49BE-4B36-BACE-09C6971CD85C}} +AppName={#MyAppName} +AppVerName={#MyAppName} +DefaultDirName={commonappdata}\{#MyAppName} +DisableProgramGroupPage=yes +DefaultGroupName=Berserker's Multiworld +OutputDir=setups +OutputBaseFilename=Setup {#MyAppName} +Compression=lzma2 +SolidCompression=yes +LZMANumBlockThreads=8 +ArchitecturesInstallIn64BitMode=x64 +ChangesAssociations=yes +ArchitecturesAllowed=x64 +AllowNoIcons=yes +SetupIconFile={#MyAppIcon} +UninstallDisplayIcon={app}\{#MyAppExeName} +SignTool= signtool +LicenseFile= LICENSE +WizardStyle= modern +SetupLogging=yes + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; + + +[Dirs] +NAME: "{app}"; Flags: setntfscompression; Permissions: everyone-modify users-modify authusers-modify; + +[Files] +Source: "{code:GetROMPath}"; DestDir: "{app}"; DestName: "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc"; Flags: external +Source: "{#sourcepath}*"; Excludes: "*.sfc, *.log, data\sprites\alttpr"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "vc_redist.x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall +; NOTE: Don't use "Flags: ignoreversion" on any shared system files + +[Icons] +Name: "{group}\{#MyAppName} Folder"; Filename: "{app}"; +Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; +Name: "{commondesktop}\{#MyAppName} Folder"; Filename: "{app}"; Tasks: desktopicon +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon + +[Run] +Filename: "{tmp}\vc_redist.x64.exe"; Parameters: "/passive /norestart"; Check: IsVCRedist64BitNeeded; StatusMsg: "Installing VC++ redistributable..." +Filename: "{app}\BerserkerMultiCreator"; Parameters: "update_sprites"; StatusMsg: "Updating Sprite Library..." + +[UninstallDelete] +Type: dirifempty; Name: "{app}" + +[Registry] + +Root: HKCR; Subkey: ".bmbp"; ValueData: "{#MyAppName}patch"; Flags: uninsdeletevalue; ValueType: string; ValueName: "" +Root: HKCR; Subkey: "{#MyAppName}patch"; ValueData: "Berserker's Multiworld Binary Patch"; Flags: uninsdeletekey; ValueType: string; ValueName: "" +Root: HKCR; Subkey: "{#MyAppName}patch\DefaultIcon"; ValueData: "{app}\{#MyAppExeName},0"; ValueType: string; ValueName: "" +Root: HKCR; Subkey: "{#MyAppName}patch\shell\open\command"; ValueData: """{app}\{#MyAppExeName}"" ""%1"""; ValueType: string; ValueName: "" + +Root: HKCR; Subkey: ".multidata"; ValueData: "{#MyAppName}multidata"; Flags: uninsdeletevalue; ValueType: string; ValueName: "" +Root: HKCR; Subkey: "{#MyAppName}multidata"; ValueData: "Berserker's Multiworld Server Data"; Flags: uninsdeletekey; ValueType: string; ValueName: "" +Root: HKCR; Subkey: "{#MyAppName}multidata\DefaultIcon"; ValueData: "{app}\BerserkerMultiServer.exe,0"; ValueType: string; ValueName: "" +Root: HKCR; Subkey: "{#MyAppName}multidata\shell\open\command"; ValueData: """{app}\BerserkerMultiServer.exe"" --multidata ""%1"""; ValueType: string; ValueName: "" + + + +[Code] +// See: https://stackoverflow.com/a/51614652/2287576 +function IsVCRedist64BitNeeded(): boolean; +var + strVersion: string; +begin + if (RegQueryStringValue(HKEY_LOCAL_MACHINE, + 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64', 'Version', strVersion)) then + begin + // Is the installed version at least the packaged one ? + Log('VC Redist x64 Version : found ' + strVersion); + Result := (CompareStr(strVersion, 'v14.28.29325') < 0); + end + else + begin + // Not even an old version installed + Log('VC Redist x64 is not already installed'); + Result := True; + end; +end; + +var ROMFilePage: TInputFileWizardPage; +var R : longint; +var rom: string; + +procedure InitializeWizard(); +begin + rom := FileSearch('Zelda no Densetsu - Kamigami no Triforce (Japan).sfc', WizardDirValue()); + if Length(rom) > 0 then + begin + log('existing ROM found'); + log(IntToStr(CompareStr(GetMD5OfFile(rom), '03a63945398191337e896e5771f77173'))); + if CompareStr(GetMD5OfFile(rom), '03a63945398191337e896e5771f77173') = 0 then + begin + log('existing ROM verified'); + exit; + end; + log('existing ROM failed verification'); + end; + rom := '' + ROMFilePage := + CreateInputFilePage( + wpLicense, + 'Select ROM File', + 'Where is your Zelda no Densetsu - Kamigami no Triforce (Japan).sfc located?', + 'Select the file, then click Next.'); + + ROMFilePage.Add( + 'Location of ROM file:', + 'SNES ROM files|*.sfc|All files|*.*', + '.sfc'); +end; + +function GetROMPath(Param: string): string; +begin + if Length(rom) > 0 then + Result := rom + else if Assigned(RomFilePage) then + begin + R := CompareStr(GetMD5OfFile(ROMFilePage.Values[0]), '03a63945398191337e896e5771f77173') + if R <> 0 then + MsgBox('ROM validation failed. Very likely wrong file.', mbInformation, MB_OK); + + Result := ROMFilePage.Values[0] + end + else + Result := ''; + end; diff --git a/inno_setup.iss b/inno_setup_39.iss similarity index 100% rename from inno_setup.iss rename to inno_setup_39.iss From b0681627f4abadfcf6cde44e1b62eeba9ed03151 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 12 Dec 2020 20:14:23 +0000 Subject: [PATCH 27/30] Bump ini from 1.3.5 to 1.3.8 in /data/web Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8) Signed-off-by: dependabot[bot] (cherry picked from commit eb6e094157ac65cbea3aa1b284d2fc86da1aa9f8) --- data/web/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/web/package-lock.json b/data/web/package-lock.json index fda4a04e..b8935516 100644 --- a/data/web/package-lock.json +++ b/data/web/package-lock.json @@ -5694,9 +5694,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { "version": "7.1.0", From 7b38e3e037097f967543c30c08c06013556ab4df Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 17 Dec 2020 22:32:05 -0500 Subject: [PATCH 28/30] Add some random junk hints. Hopefully these work well. (cherry picked from commit bbab35fd6bc599485771cddfe38d7f922692fd5b) --- Text.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Text.py b/Text.py index 76b33849..e04c24e2 100644 --- a/Text.py +++ b/Text.py @@ -258,6 +258,16 @@ TavernMan_texts = [ ] junk_texts = [ + "{C:GREEN}\nAgitha's good\nin Hyrule\nWarriors. >", + "{C:GREEN}\nConsult Fi if\nthe batteries\nare low. >", + "{C:GREEN}\nThere is no\n3rd quest in\nthis game. >", + "{C:GREEN}\nI am Error.\n \n >", + "{C:GREEN}\nThe Wind Fish\nknows all in\nhere. Hoot! >", + "{C:GREEN}\nThere are no\nwallets in\nthis game. >", + "{C:GREEN}\nCrossbow\nTraining is\na fun game. >", + "{C:GREEN}\nThe shrine\ncontains\nMagnesis. >", + "{C:GREEN}\nThe loftwing\nlet the duck\ntake over. >", + "{C:GREEN}\nStasis would\nbe very\noverpowered.>", "{C:GREEN}\nIt’s a secret\nto everybody.\n >", "{C:GREEN}\nDodongo\ndislikes\nsmoke. >", "{C:GREEN}\n> Digdogger\nhates certain\nkind of sound.", From 84d74fab778362829af0f0f8d096e3124f5dfbde Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 19 Dec 2020 19:29:33 +0100 Subject: [PATCH 29/30] use sortable table on Roll Results page (cherry picked from commit 32d8f33932d913154989e41c940ba24adc98a881) --- WebHostLib/static/assets/autodatatable.js | 9 +++++++++ WebHostLib/templates/autotablepage.html | 5 +++++ 2 files changed, 14 insertions(+) create mode 100644 WebHostLib/static/assets/autodatatable.js create mode 100644 WebHostLib/templates/autotablepage.html diff --git a/WebHostLib/static/assets/autodatatable.js b/WebHostLib/static/assets/autodatatable.js new file mode 100644 index 00000000..a1437514 --- /dev/null +++ b/WebHostLib/static/assets/autodatatable.js @@ -0,0 +1,9 @@ +window.addEventListener('load', () => { + let tables = $(".autodatatable").DataTable({ + "paging": false, + "ordering": true, + "info": false, + "dom": "t", + }); + console.log(tables); +}); diff --git a/WebHostLib/templates/autotablepage.html b/WebHostLib/templates/autotablepage.html new file mode 100644 index 00000000..0bb30f87 --- /dev/null +++ b/WebHostLib/templates/autotablepage.html @@ -0,0 +1,5 @@ +{% extends "tablepage.html" %} +{% block head %} + {{ super() }} + +{% endblock %} From 7f9b4ef9d0dbaa354a9b27411abe611cc714ab65 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 19 Dec 2020 19:38:12 +0100 Subject: [PATCH 30/30] use sortable table on Roll Results page (cherry picked from commit 32d8f33932d913154989e41c940ba24adc98a881) --- WebHostLib/templates/checkResult.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WebHostLib/templates/checkResult.html b/WebHostLib/templates/checkResult.html index a6e8e0b8..5bc4fa9d 100644 --- a/WebHostLib/templates/checkResult.html +++ b/WebHostLib/templates/checkResult.html @@ -1,8 +1,8 @@ -{% extends 'pageWrapper.html' %} +{% extends 'autotablepage.html' %} {% block head %} {{ super() }} - Upload Mystery YAML + Mystery YAML Test Roll Results {% endblock %} @@ -12,7 +12,7 @@

Verification Results

The results of your requested file check are below.

-
Seed
+
File