From 50a06237a41525faa39b2c5ff6a1e10c88a9cd59 Mon Sep 17 00:00:00 2001 From: Fenhl Date: Sun, 25 Sep 2022 10:57:59 +0000 Subject: [PATCH 1/2] Bump tracker context version for CFG_DUNGEON_INFO_REWARD_SUMMARY_ENABLE --- ASM/src/config.asm | 2 +- Notes/auto-tracker-ctx.md | 31 +++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/ASM/src/config.asm b/ASM/src/config.asm index 79d2b36a2..3dc777a2a 100644 --- a/ASM/src/config.asm +++ b/ASM/src/config.asm @@ -156,7 +156,7 @@ PLANDOMIZER_USED: ; Any changes made here should be documented in Notes/auto-tracker-ctx.md AUTO_TRACKER_CONTEXT: AUTO_TRACKER_VERSION: -.word 3 ; Increment this if the auto-tracker context layout changes +.word 4 ; Increment this if the auto-tracker context layout changes CFG_DUNGEON_INFO_ENABLE: .word 0 diff --git a/Notes/auto-tracker-ctx.md b/Notes/auto-tracker-ctx.md index 6e555d610..954feed9c 100644 --- a/Notes/auto-tracker-ctx.md +++ b/Notes/auto-tracker-ctx.md @@ -1,10 +1,11 @@ The **auto-tracker context** is a region of memory where a portion of the randomizer's configuration variables are stored in a versioned layout defined below. Its intent is to give some symbols added by the randomizer well-defined addresses so that auto-trackers can read them reliably without needing the symbols.json for the specific randomizer version that was used to generate the seed. -The starting address of the auto-tracker context is listed at address `0x8040_000c` (randomizer context + `0xc`). On versions of the randomizer before this feature was added, the starting address is given as zero. At that address, the following data can be found: +The starting address of the auto-tracker context is listed at address `0x8040_000c` (randomizer context + `0xc`). On versions of the randomizer before this feature was added, the starting address is given as zero. At that address, a 4-byte integer can be found. This is the version number of the auto-tracker context and defines the layout of the remainder of the context according to the sections below. The current version is 4. + +# Versions 1–2 |Offset|Name|Min version|Size|Description| |--:|---|--:|--:|---| -|`0x00`|`AUTO_TRACKER_VERSION`|1|`0x04`|Defines which entries in this table are available. Future versions may also change the layout of this table in an incompatible manner. The current version is 3.| |`0x04`|`CFG_DUNGEON_INFO_ENABLE`|1|`0x04`|Defines how information about dungeons will be displayed on the inventory screen on the pause menu. `0` = disabled, `1` = a single menu shown when holding A, `2` = separate menus shown when holding D-pad buttons.| |`0x08`|`CFG_DUNGEON_INFO_MQ_ENABLE`|1|`0x04`|`1` if the dungeon info in the pause menu should include info about which dungeons are in Master Quest mode.| |`0x0c`|`CFG_DUNGEON_INFO_MQ_NEED_MAP`|1|`0x04`|`1` if the Master Quest info should only be displayed for dungeons whose maps have been obtained or which don't have maps.| @@ -21,3 +22,29 @@ The starting address of the auto-tracker context is listed at address `0x8040_00 |`0x46`|`TRIFORCE_PIECES_REQUIRED`|2|`0x02`|In Triforce hunt, the total number of Triforce pieces (across all worlds) required to win the game.| |`0x48`|`SPECIAL_DEAL_COUNTS`|2|`0x08`|A byte representing the number of special deal slots in each shop, in the following order: KF Shop, Market Bazaar, Market Potion Shop, Market Bombchu Shop, Kak Bazaar, Kak Potion Shop, GC Shop, ZD Shop.| |`0x50`|`CFG_DUNGEON_REWARD_AREAS`|3|`0xcf`|For each dungeon reward in the order of Emerald, Ruby, Sapphire, Light, Forest, Fire, Water, Shadow, and Spirit, a null-terminated `0x16`-byte (`0x17` including the null terminator) ASCII string containing the hint area of that reward, padded with spaces on the right.| + +# Version 3 + +Special care needs to be taken when working with version 3 of the auto-tracker context, since a breaking change was made in version 6.2.181 of the randomizer without an accompanying change to the auto-tracker context version. Versions 6.2.180 of the randomizer and earlier use the same layout as version 2 described above (with the addition of the `CFG_DUNGEON_REWARD_AREAS` field), while versions 6.2.181 and later use the same layout as version 4 described below. The version number at addresses 0x35–0x37 of the ROM header may be used to check for the randomizer version, but this may not be accurate for forks of the randomizer if they merged the change early. + +# Version 4 + +|Offset|Name|Min version|Size|Description| +|--:|---|--:|--:|---| +|`0x04`|`CFG_DUNGEON_INFO_ENABLE`|4|`0x04`|Defines how information about dungeons will be displayed on the inventory screen on the pause menu. `0` = disabled, `1` = a single menu shown when holding A, `2` = separate menus shown when holding D-pad buttons in addition to the summary menu on A.| +|`0x08`|`CFG_DUNGEON_INFO_MQ_ENABLE`|1|`0x04`|`1` if the dungeon info in the pause menu should include info about which dungeons are in Master Quest mode.| +|`0x0c`|`CFG_DUNGEON_INFO_MQ_NEED_MAP`|1|`0x04`|`1` if the Master Quest info should only be displayed for dungeons whose maps have been obtained or which don't have maps.| +|`0x10`|`CFG_DUNGEON_INFO_REWARD_ENABLE`|1|`0x04`|`1` if the dungeon info in the pause menu should include info about which medallions and stones are in which dungeon.| +|`0x14`|`CFG_DUNGEON_INFO_REWARD_NEED_COMPASS`|1|`0x04`|Defines which item is required to display the location of a dungeon reward in the pause menu. `0` = no item required, `1` = the compass of the dungeon in which the reward is found, `2` = the compass of the reward's vanilla dungeon. For example, if the Kokiri Emerald is in the Fire Temple, `1` means the Fire Temple compass is required and `2` means the Deku Tree compass is required.| +|`0x18`|`CFG_DUNGEON_INFO_REWARD_NEED_ALTAR`|1|`0x04`|`1` if the reward info should only be displayed for rewards whose Temple of Time altar text boxes have been read.| +|`0x1c`|`CFG_DUNGEON_INFO_REWARD_SUMMARY_ENABLE`|4|`0x04`|`1` if the summary menu shown when holding A should display dungeon reward locations.| +|`0x20`|`CFG_DUNGEON_REWARDS`|4|`0x0e`|A byte representing the medallion or stone for each dungeon. Dungeons without rewards are listed as `0xff`, and one reward is chosen arbitrarily if the dungeon has multiple rewards. For more complete data, use `CFG_DUNGEON_REWARD_AREAS` instead.| +|`0x2e`|`CFG_DUNGEON_IS_MQ`|4|`0x0e`|A byte set to `1` for each dungeon in Master Quest mode.| +|`0x3c`|`RAINBOW_BRIDGE_CONDITION`|4|`0x04`|The condition for spawning the rainbow bridge. `0` = open, `1` = medallions, `2` = dungeon rewards, `3` = stones, `4` = vanilla, `5` = tokens, `6` = hearts.| +|`0x40`|`LACS_CONDITION`|4|`0x04`|The condition for triggering the light arrow cutscene. `0` = vanilla, `1` = medallions, `2` = dungeons, `3` = stones, `4` = tokens, `5` = hearts.| +|`0x44`|`RAINBOW_BRIDGE_COUNT`|4|`0x02`|The number of items (of the kind defined in `RAINBOW_BRIDGE_CONDITION`) required to spawn the rainbow bridge.| +|`0x46`|`LACS_CONDITION_COUNT`|4|`0x02`|The number of items (of the kind defined in `LACS_CONDITION`) required to trigger the light arrow cutscene.| +|`0x48`|`TRIFORCE_HUNT_ENABLED`|4|`0x02`|`1` if Triforce hunt is enabled.| +|`0x4a`|`TRIFORCE_PIECES_REQUIRED`|4|`0x02`|In Triforce hunt, the total number of Triforce pieces (across all worlds) required to win the game.| +|`0x4c`|`SPECIAL_DEAL_COUNTS`|4|`0x08`|A byte representing the number of special deal slots in each shop, in the following order: KF Shop, Market Bazaar, Market Potion Shop, Market Bombchu Shop, Kak Bazaar, Kak Potion Shop, GC Shop, ZD Shop.| +|`0x54`|`CFG_DUNGEON_REWARD_AREAS`|4|`0xcf`|For each dungeon reward in the order of Emerald, Ruby, Sapphire, Light, Forest, Fire, Water, Shadow, and Spirit, a null-terminated `0x16`-byte (`0x17` including the null terminator) ASCII string containing the hint area of that reward, padded with spaces on the right.| From 423db7dd0de689600a89b4b01a8d34a5256683a4 Mon Sep 17 00:00:00 2001 From: Fenhl Date: Sun, 25 Sep 2022 11:14:50 +0000 Subject: [PATCH 2/2] Recompile --- ASM/build/asm_symbols.txt | 684 +- ASM/build/bundle.o | Bin 90584 -> 91148 bytes ASM/build/c_symbols.txt | 340 +- data/generated/rom_patch.txt | 33633 +++++++++++++++++---------------- data/generated/symbols.json | 186 +- 5 files changed, 17447 insertions(+), 17396 deletions(-) diff --git a/ASM/build/asm_symbols.txt b/ASM/build/asm_symbols.txt index 56003a4e0..e0c3f8704 100644 --- a/ASM/build/asm_symbols.txt +++ b/ASM/build/asm_symbols.txt @@ -775,348 +775,348 @@ 80404594 handle_dpad,0000045C 804049F0 draw_dpad,00000940 80405330 draw_background,00000128 -80405458 draw_dungeon_info,000016A8 -80406B00 interpolate,00000064 -80406B64 extern_scene_init,00000018 -80406B7C process_extern_ctxt,00000290 -80406F7C read_file_data,000003D0 -8040734C draw_file_icons,0000096C -80407D08 draw_file_message,0000025C -80407F64 draw_file_select_hash,00000240 -804081A4 check_ganon_entry,00000048 -804081EC countSetBitsRec,00000054 -80408240 give_ganon_boss_key,00000158 -80408398 item_overrides_init,0000007C -80408414 get_override_search_key,00000110 -80408524 lookup_override_by_key,000000A0 -804085C4 lookup_override,0000004C -80408610 activate_override,00000100 -80408710 clear_override,0000004C -8040875C set_outgoing_override,00000038 -80408794 push_pending_item,00000088 -8040881C push_coop_item,00000060 -8040887C push_delayed_item,00000040 -804088BC pop_pending_item,00000034 -804088F0 after_key_received,00000064 -80408954 pop_ice_trap,0000006C -804089C0 after_item_received,0000007C -80408A3C try_pending_item,000000C4 -80408B00 handle_pending_items,00000130 -80408C30 get_item,00000134 -80408D64 get_skulltula_token,00000138 -80408E9C give_sarias_gift,00000070 -80408F0C sprite_bytes_per_tile,0000002C -80408F38 sprite_bytes,00000030 -80408F68 sprite_load,000001A0 -80409108 sprite_draw,000000F8 -80409200 gfx_init,000001F0 -804093F0 update_hud_colors,0000039C -8040978C rupee_hud_color,0000004C -804097D8 ice_trap_is_pending,00000014 -804097EC push_pending_ice_trap,00000018 -80409804 give_ice_trap,00000088 -8040988C draw_gi_bombchu_and_masks,0000009C -80409928 draw_gi_eggs_and_medallions,000000C0 -804099E8 draw_gi_sold_out,000000A4 -80409A8C draw_gi_compass,00000120 -80409BAC draw_gi_various_opa0,0000009C -80409C48 draw_gi_various_opa1023,000000F0 -80409D38 draw_gi_wallets,00000150 -80409E88 draw_gi_various_xlu01,000000C0 -80409F48 draw_gi_various_opa0_xlu1,00000118 -8040A060 draw_gi_coins_and_cuccos,00000130 -8040A190 draw_gi_magic_arrows,0000012C -8040A2BC draw_gi_various_opa10_xlu32,00000144 -8040A400 draw_gi_bullet_bags,0000015C -8040A55C draw_gi_small_rupees,00000160 -8040A6BC draw_gi_goron_swords,00000108 -8040A7C4 draw_gi_deku_nut,00000114 -8040A8D8 draw_gi_recovery_heart,00000118 -8040A9F0 draw_gi_fish_bottle,00000108 -8040AAF8 draw_gi_magic_spells,00000154 -8040AC4C draw_gi_scales,0000016C -8040ADB8 draw_gi_potions,000001D0 -8040AF88 draw_gi_mirror_shield,000001A4 -8040B12C draw_gi_gs_token,0000018C -8040B2B8 draw_gi_blue_fire_candle,000001D0 -8040B488 draw_gi_fairy_lantern,000001EC -8040B674 draw_gi_poe_bottles,00000208 -8040B87C draw_gi_song_notes,00000118 -8040B994 draw_gi_small_keys,0000017C -8040BB10 draw_gi_boss_keys,000001DC -8040BCEC base_draw_gi_model,00000038 -8040BD24 no_effect,00000008 -8040BD2C full_heal,0000000C -8040BD38 give_triforce_piece,000000BC -8040BDF4 give_tycoon_wallet,00000038 -8040BE2C give_biggoron_sword,0000000C -8040BE38 give_bottle,00000038 -8040BE70 give_dungeon_item,00000014 -8040BE84 give_small_key,00000050 -8040BED4 give_small_key_ring,0000009C -8040BF70 give_defense,0000001C -8040BF8C give_magic,0000001C -8040BFA8 give_double_magic,00000024 -8040BFCC give_fairy_ocarina,0000000C -8040BFD8 give_song,00000018 -8040BFF0 ice_trap_effect,0000001C -8040C00C give_bean_pack,00000018 -8040C024 fill_wallet_upgrade,0000002C -8040C050 clear_excess_hearts,0000001C -8040C06C open_mask_shop,0000007C -8040C0E8 get_item_row,0000003C -8040C124 resolve_upgrades,00000060 -8040C184 call_effect_function,0000002C -8040C1B0 no_upgrade,00000008 -8040C1B8 hookshot_upgrade,00000014 -8040C1CC strength_upgrade,0000002C -8040C1F8 bomb_bag_upgrade,0000002C -8040C224 bow_upgrade,00000028 -8040C24C slingshot_upgrade,00000030 -8040C27C wallet_upgrade,00000030 -8040C2AC scale_upgrade,00000018 -8040C2C4 nut_upgrade,0000001C -8040C2E0 stick_upgrade,0000001C -8040C2FC magic_upgrade,00000010 -8040C30C bombchu_upgrade,00000030 -8040C33C ocarina_upgrade,00000020 -8040C35C arrows_to_rupee,0000001C -8040C378 bombs_to_rupee,0000001C -8040C394 seeds_to_rupee,00000024 -8040C3B8 letter_to_bottle,00000070 -8040C428 health_upgrade_cap,00000034 -8040C45C c_init,0000003C -8040C498 before_game_state_update,0000003C -8040C4D4 after_game_state_update,00000044 -8040C518 before_skybox_init,0000003C -8040C554 after_scene_init,00000034 -8040C588 c_equipment_menu_slot_filled,00000100 -8040C688 update_sword_trail_colors,000000A4 -8040C72C update_boomerang_trail_colors,000001A4 -8040C8D0 update_bombchu_trail_colors,00000274 -8040CB44 get_bombchu_back_color,00000274 -8040CDB8 update_navi_colors,00000224 -8040CFDC update_misc_colors,00000040 -8040D01C load_object_file,0000006C -8040D088 load_object,00000028 -8040D0B0 get_object,00000060 -8040D110 set_object_segment,0000004C -8040D15C scale_top_matrix,00000068 -8040D1C4 draw_model_low_level,00000078 -8040D23C scale_factor,0000007C -8040D2B8 draw_model,00000088 -8040D340 models_init,0000004C -8040D38C models_reset,0000002C -8040D3B8 lookup_model_by_override,0000005C -8040D414 lookup_model,00000040 -8040D454 heart_piece_draw,00000064 -8040D4B8 small_key_draw,00000088 -8040D540 heart_container_draw,00000064 -8040D5A4 skull_token_draw,00000064 -8040D608 ocarina_of_time_draw,00000064 -8040D66C item_etcetera_draw,000000E4 -8040D750 bowling_bomb_bag_draw,000000A4 -8040D7F4 bowling_heart_piece_draw,00000064 -8040D858 object_index_or_spawn,00000078 -8040D8D0 get_rainbow_color,0000022C -8040DAFC health_and_magic_refill,00000028 -8040DB24 store_scarecrow_fix,00000048 -8040DB6C text_init,0000002C -8040DB98 text_print_size,000000A8 -8040DC40 text_print,00000020 -8040DC60 text_flush_size,00000170 -8040DDD0 text_flush,00000030 -8040DE00 set_triforce_render,00000028 -8040DE28 draw_triforce_count,00000538 -8040E360 clear_twinrova_vars,00000014 -8040E374 heap_init,00000014 -8040E388 heap_alloc,0000003C -8040E3C4 file_init,00000044 -8040E408 override_weather_state,00000240 -8040E670 .byt:0042 -8040E670 freecam_modes -8040E834 .byt:000C -8040E834 icon_sprites -8040E858 .byt:000C -8040E858 rupee_colors -8040E954 .byt:0009 -8040E954 reward_rows -8040E960 .byt:0018 -8040E960 medals -8040E978 .byt:00A9 -8040E978 dungeons -8040EA24 .byt:0014 -8040EA24 extern_ctxt -8040EA38 .byt:0040 -8040EA38 hash_symbols -8040EA78 .byt:0040 -8040EA78 num_to_bits -8040EAB8 .byt:0010 -8040EAB8 heart_sprite -8040EAC8 .byt:0010 -8040EAC8 linkhead_skull_sprite -8040EAD8 .byt:0010 -8040EAD8 item_digit_sprite -8040EAE8 .byt:0010 -8040EAE8 key_rupee_clock_sprite -8040EAF8 .byt:0010 -8040EAF8 song_note_sprite -8040EB08 .byt:0010 -8040EB08 triforce_sprite -8040EB18 .byt:0010 -8040EB18 dpad_sprite -8040EB28 .byt:0010 -8040EB28 font_sprite -8040EB38 .byt:0010 -8040EB38 quest_items_sprite -8040EB48 .byt:0010 -8040EB48 items_sprite -8040EB58 .byt:0010 -8040EB58 medals_sprite -8040EB68 .byt:0010 -8040EB68 stones_sprite -8040EB78 .byt:0028 -8040EB78 setup_db -8040EBA0 .byt:10BC -8040EBA0 item_draw_table -8040FC5C .byt:001C -8040FC5C key_counts -8040FC78 .byt:1090 -8040FC78 item_table -80410D08 .byt:0004 -80410D08 dungeon_count -80410D0C .byt:0004 -80410D0C last_fog_distance -80410D10 .byt:0004 -80410D10 scene_fog_distance -80410D14 .byt:0008 -80410D14 hash_sprites -80410D20 .byt:0008 -80410D20 empty_dlist -80410D28 .byt:0004 -80410D28 text_cursor_border_max -80410D2C .byt:0004 -80410D2C text_cursor_border_base -80410D30 .byt:0004 -80410D30 text_cursor_inner_max -80410D34 .byt:0004 -80410D34 text_cursor_inner_base -80410D38 .byt:0004 -80410D38 c_note_font_glow_max -80410D3C .byt:0004 -80410D3C c_note_font_glow_base -80410D40 .byt:0004 -80410D40 c_note_glow_max -80410D44 .byt:0004 -80410D44 c_note_glow_base -80410D48 .byt:0004 -80410D48 a_note_font_glow_max -80410D4C .byt:0004 -80410D4C a_note_font_glow_base -80410D50 .byt:0004 -80410D50 a_note_glow_max -80410D54 .byt:0004 -80410D54 a_note_glow_base -80410D58 .byt:0004 -80410D58 c_note_b -80410D5C .byt:0004 -80410D5C c_note_g -80410D60 .byt:0004 -80410D60 c_note_r -80410D64 .byt:0004 -80410D64 a_note_b -80410D68 .byt:0004 -80410D68 a_note_g -80410D6C .byt:0004 -80410D6C a_note_r -80410D70 .byt:0004 -80410D70 c_button -80410D74 .byt:0004 -80410D74 b_button -80410D78 .byt:0004 -80410D78 a_button -80410D7C .byt:0004 -80410D7C normal_dd -80410D80 .byt:0004 -80410D80 beating_dd -80410D84 .byt:0004 -80410D84 normal_no_dd -80410D88 .byt:0004 -80410D88 beating_no_dd -80410D8C .byt:0006 -80410D8C defaultDDHeart -80410D94 .byt:0006 -80410D94 defaultHeart -80410D9C .byt:0004 -80410D9C CHEST_SIZE_TEXTURE -80410DA0 .byt:0004 -80410DA0 CHEST_SIZE_MATCH_CONTENTS -80410DA4 .byt:0004 -80410DA4 CHEST_TEXTURE_MATCH_CONTENTS -80410DAC .byt:0004 -80410DAC cfg_file_select_hash -80410DB0 .byt:0001 -80410DB0 NO_ESCAPE_SEQUENCE -80410DB2 .byt:0002 -80410DB2 GANON_BOSS_KEY_CONDITION_COUNT -80410DB4 .byt:0001 -80410DB4 GANON_BOSS_KEY_CONDITION -80410DB8 .byt:0001 -80410DB8 satisified_pending_frames -80410DBC .byt:0004 -80410DBC active_item_fast_chest -80410DC0 .byt:0004 -80410DC0 active_item_graphic_id -80410DC4 .byt:0004 -80410DC4 active_item_object_id -80410DC8 .byt:0004 -80410DC8 active_item_text_id -80410DCC .byt:0004 -80410DCC active_item_action_id -80410DD0 .byt:0004 -80410DD0 active_item_row -80410DD4 .byt:0004 -80410DD4 active_override_is_outgoing -80410DD8 .byt:0008 -80410DD8 active_override -80410DE0 .byt:0004 -80410DE0 dummy_actor -80410DE4 .byt:0004 -80410DE4 item_overrides_count -80410DE8 .byt:0001 -80410DE8 COMPLETE_MASK_QUEST -80410DE9 .byt:0001 -80410DE9 OPEN_KAKARIKO -80410DEA .byt:0001 -80410DEA MAX_RUPEES -80410E00 .byt:0004 -80410E00 heap_next -80410E04 .byt:0001 -80410E04 KAKARIKO_WEATHER_FORECAST -80410E34 .byt:1000 -80410E34 cfg_item_overrides -80411E34 .byt:0040 -80411E34 object_slots -80411E78 .byt:14C8 -80411E78 FONT_TEXTURE -80413340 .byt:0800 -80413340 DPAD_TEXTURE -80413B40 .byt:1000 -80413B40 TRIFORCE_ICON_TEXTURE -80414B40 .byt:1000 -80414B40 GILDED_CHEST_FRONT_TEXTURE -80415B40 .byt:0800 -80415B40 GILDED_CHEST_BASE_TEXTURE -80416340 .byt:1000 -80416340 SILVER_CHEST_FRONT_TEXTURE -80417340 .byt:0800 -80417340 SILVER_CHEST_BASE_TEXTURE -80417B40 .byt:1000 -80417B40 SKULL_CHEST_FRONT_TEXTURE -80418B40 .byt:0800 -80418B40 SKULL_CHEST_BASE_TEXTURE -80419340 AUDIO_THREAD_MEM_START -80419340 PAYLOAD_END +80405458 draw_dungeon_info,000016C8 +80406B20 interpolate,00000064 +80406B84 extern_scene_init,00000018 +80406B9C process_extern_ctxt,00000290 +80406F9C read_file_data,00000430 +804073CC draw_file_icons,00000924 +80407D44 draw_file_message,0000025C +80407FA0 draw_file_select_hash,00000240 +804081E0 check_ganon_entry,00000048 +80408228 countSetBitsRec,00000054 +8040827C give_ganon_boss_key,00000158 +804083D4 item_overrides_init,0000007C +80408450 get_override_search_key,00000110 +80408560 lookup_override_by_key,000000A0 +80408600 lookup_override,0000004C +8040864C activate_override,00000100 +8040874C clear_override,0000004C +80408798 set_outgoing_override,00000038 +804087D0 push_pending_item,00000088 +80408858 push_coop_item,00000060 +804088B8 push_delayed_item,00000040 +804088F8 pop_pending_item,00000034 +8040892C after_key_received,00000064 +80408990 pop_ice_trap,0000006C +804089FC after_item_received,0000007C +80408A78 try_pending_item,000000C4 +80408B3C handle_pending_items,00000130 +80408C6C get_item,00000134 +80408DA0 get_skulltula_token,00000138 +80408ED8 give_sarias_gift,00000070 +80408F48 sprite_bytes_per_tile,0000002C +80408F74 sprite_bytes,00000030 +80408FA4 sprite_load,000001A0 +80409144 sprite_draw,000000F8 +8040923C gfx_init,000001F0 +8040942C update_hud_colors,0000039C +804097C8 rupee_hud_color,0000004C +80409814 ice_trap_is_pending,00000014 +80409828 push_pending_ice_trap,00000018 +80409840 give_ice_trap,00000088 +804098C8 draw_gi_bombchu_and_masks,0000009C +80409964 draw_gi_eggs_and_medallions,000000C0 +80409A24 draw_gi_sold_out,000000A4 +80409AC8 draw_gi_compass,00000120 +80409BE8 draw_gi_various_opa0,0000009C +80409C84 draw_gi_various_opa1023,000000F0 +80409D74 draw_gi_wallets,00000150 +80409EC4 draw_gi_various_xlu01,000000C0 +80409F84 draw_gi_various_opa0_xlu1,00000118 +8040A09C draw_gi_coins_and_cuccos,00000130 +8040A1CC draw_gi_magic_arrows,0000012C +8040A2F8 draw_gi_various_opa10_xlu32,00000144 +8040A43C draw_gi_bullet_bags,0000015C +8040A598 draw_gi_small_rupees,00000160 +8040A6F8 draw_gi_goron_swords,00000108 +8040A800 draw_gi_deku_nut,00000114 +8040A914 draw_gi_recovery_heart,00000118 +8040AA2C draw_gi_fish_bottle,00000108 +8040AB34 draw_gi_magic_spells,00000158 +8040AC8C draw_gi_scales,00000170 +8040ADFC draw_gi_potions,000001D0 +8040AFCC draw_gi_mirror_shield,000001A4 +8040B170 draw_gi_gs_token,0000018C +8040B2FC draw_gi_blue_fire_candle,000001D0 +8040B4CC draw_gi_fairy_lantern,000001EC +8040B6B8 draw_gi_poe_bottles,00000208 +8040B8C0 draw_gi_song_notes,00000118 +8040B9D8 draw_gi_small_keys,0000017C +8040BB54 draw_gi_boss_keys,000001DC +8040BD30 base_draw_gi_model,00000038 +8040BD68 no_effect,00000008 +8040BD70 full_heal,0000000C +8040BD7C give_triforce_piece,000000BC +8040BE38 give_tycoon_wallet,00000038 +8040BE70 give_biggoron_sword,0000000C +8040BE7C give_bottle,00000038 +8040BEB4 give_dungeon_item,00000014 +8040BEC8 give_small_key,00000050 +8040BF18 give_small_key_ring,0000009C +8040BFB4 give_defense,0000001C +8040BFD0 give_magic,0000001C +8040BFEC give_double_magic,00000024 +8040C010 give_fairy_ocarina,0000000C +8040C01C give_song,00000018 +8040C034 ice_trap_effect,0000001C +8040C050 give_bean_pack,00000018 +8040C068 fill_wallet_upgrade,0000002C +8040C094 clear_excess_hearts,0000001C +8040C0B0 open_mask_shop,0000007C +8040C12C get_item_row,0000003C +8040C168 resolve_upgrades,0000005C +8040C1C4 call_effect_function,0000002C +8040C1F0 no_upgrade,00000008 +8040C1F8 hookshot_upgrade,00000014 +8040C20C strength_upgrade,0000002C +8040C238 bomb_bag_upgrade,0000002C +8040C264 bow_upgrade,00000028 +8040C28C slingshot_upgrade,00000030 +8040C2BC wallet_upgrade,00000030 +8040C2EC scale_upgrade,00000018 +8040C304 nut_upgrade,0000001C +8040C320 stick_upgrade,0000001C +8040C33C magic_upgrade,00000010 +8040C34C bombchu_upgrade,00000030 +8040C37C ocarina_upgrade,00000020 +8040C39C arrows_to_rupee,0000001C +8040C3B8 bombs_to_rupee,0000001C +8040C3D4 seeds_to_rupee,00000024 +8040C3F8 letter_to_bottle,00000070 +8040C468 health_upgrade_cap,00000034 +8040C49C c_init,0000003C +8040C4D8 before_game_state_update,0000003C +8040C514 after_game_state_update,00000044 +8040C558 before_skybox_init,0000003C +8040C594 after_scene_init,00000034 +8040C5C8 c_equipment_menu_slot_filled,00000100 +8040C6C8 update_sword_trail_colors,000000A4 +8040C76C update_boomerang_trail_colors,000001A4 +8040C910 update_bombchu_trail_colors,00000274 +8040CB84 get_bombchu_back_color,00000274 +8040CDF8 update_navi_colors,00000224 +8040D01C update_misc_colors,00000040 +8040D05C load_object_file,0000006C +8040D0C8 load_object,00000028 +8040D0F0 get_object,00000060 +8040D150 set_object_segment,0000004C +8040D19C scale_top_matrix,00000068 +8040D204 draw_model_low_level,00000078 +8040D27C scale_factor,0000007C +8040D2F8 draw_model,00000088 +8040D380 models_init,0000004C +8040D3CC models_reset,0000002C +8040D3F8 lookup_model_by_override,0000005C +8040D454 lookup_model,00000040 +8040D494 heart_piece_draw,00000064 +8040D4F8 small_key_draw,00000088 +8040D580 heart_container_draw,00000064 +8040D5E4 skull_token_draw,00000064 +8040D648 ocarina_of_time_draw,00000064 +8040D6AC item_etcetera_draw,000000E4 +8040D790 bowling_bomb_bag_draw,000000A4 +8040D834 bowling_heart_piece_draw,00000064 +8040D898 object_index_or_spawn,00000078 +8040D910 get_rainbow_color,0000022C +8040DB3C health_and_magic_refill,00000028 +8040DB64 store_scarecrow_fix,00000048 +8040DBAC text_init,0000002C +8040DBD8 text_print_size,000000A8 +8040DC80 text_print,00000020 +8040DCA0 text_flush_size,00000170 +8040DE10 text_flush,00000030 +8040DE40 set_triforce_render,00000028 +8040DE68 draw_triforce_count,00000534 +8040E39C clear_twinrova_vars,00000014 +8040E3B0 heap_init,00000014 +8040E3C4 heap_alloc,0000003C +8040E400 file_init,00000044 +8040E444 override_weather_state,00000240 +8040E6AC .byt:0042 +8040E6AC freecam_modes +8040E910 .byt:000C +8040E910 icon_sprites +8040E934 .byt:000C +8040E934 rupee_colors +8040EA34 .byt:0009 +8040EA34 reward_rows +8040EA40 .byt:0018 +8040EA40 medals +8040EA58 .byt:00A9 +8040EA58 dungeons +8040EB04 .byt:0014 +8040EB04 extern_ctxt +8040EB18 .byt:0040 +8040EB18 hash_symbols +8040EB58 .byt:0040 +8040EB58 num_to_bits +8040EB98 .byt:0010 +8040EB98 heart_sprite +8040EBA8 .byt:0010 +8040EBA8 linkhead_skull_sprite +8040EBB8 .byt:0010 +8040EBB8 item_digit_sprite +8040EBC8 .byt:0010 +8040EBC8 key_rupee_clock_sprite +8040EBD8 .byt:0010 +8040EBD8 song_note_sprite +8040EBE8 .byt:0010 +8040EBE8 triforce_sprite +8040EBF8 .byt:0010 +8040EBF8 dpad_sprite +8040EC08 .byt:0010 +8040EC08 font_sprite +8040EC18 .byt:0010 +8040EC18 quest_items_sprite +8040EC28 .byt:0010 +8040EC28 items_sprite +8040EC38 .byt:0010 +8040EC38 medals_sprite +8040EC48 .byt:0010 +8040EC48 stones_sprite +8040EC58 .byt:0028 +8040EC58 setup_db +8040EC80 .byt:10BC +8040EC80 item_draw_table +8040FD3C .byt:001C +8040FD3C key_counts +8040FD58 .byt:1090 +8040FD58 item_table +80410DE8 .byt:0004 +80410DE8 dungeon_count +80410DEC .byt:0004 +80410DEC last_fog_distance +80410DF0 .byt:0004 +80410DF0 scene_fog_distance +80410DF4 .byt:0008 +80410DF4 hash_sprites +80410E00 .byt:0008 +80410E00 empty_dlist +80410E08 .byt:0004 +80410E08 text_cursor_border_max +80410E0C .byt:0004 +80410E0C text_cursor_border_base +80410E10 .byt:0004 +80410E10 text_cursor_inner_max +80410E14 .byt:0004 +80410E14 text_cursor_inner_base +80410E18 .byt:0004 +80410E18 c_note_font_glow_max +80410E1C .byt:0004 +80410E1C c_note_font_glow_base +80410E20 .byt:0004 +80410E20 c_note_glow_max +80410E24 .byt:0004 +80410E24 c_note_glow_base +80410E28 .byt:0004 +80410E28 a_note_font_glow_max +80410E2C .byt:0004 +80410E2C a_note_font_glow_base +80410E30 .byt:0004 +80410E30 a_note_glow_max +80410E34 .byt:0004 +80410E34 a_note_glow_base +80410E38 .byt:0004 +80410E38 c_note_b +80410E3C .byt:0004 +80410E3C c_note_g +80410E40 .byt:0004 +80410E40 c_note_r +80410E44 .byt:0004 +80410E44 a_note_b +80410E48 .byt:0004 +80410E48 a_note_g +80410E4C .byt:0004 +80410E4C a_note_r +80410E50 .byt:0004 +80410E50 c_button +80410E54 .byt:0004 +80410E54 b_button +80410E58 .byt:0004 +80410E58 a_button +80410E5C .byt:0004 +80410E5C normal_dd +80410E60 .byt:0004 +80410E60 beating_dd +80410E64 .byt:0004 +80410E64 normal_no_dd +80410E68 .byt:0004 +80410E68 beating_no_dd +80410E6C .byt:0006 +80410E6C defaultDDHeart +80410E74 .byt:0006 +80410E74 defaultHeart +80410E7C .byt:0004 +80410E7C CHEST_SIZE_TEXTURE +80410E80 .byt:0004 +80410E80 CHEST_SIZE_MATCH_CONTENTS +80410E84 .byt:0004 +80410E84 CHEST_TEXTURE_MATCH_CONTENTS +80410E8C .byt:0004 +80410E8C cfg_file_select_hash +80410E90 .byt:0001 +80410E90 NO_ESCAPE_SEQUENCE +80410E92 .byt:0002 +80410E92 GANON_BOSS_KEY_CONDITION_COUNT +80410E94 .byt:0001 +80410E94 GANON_BOSS_KEY_CONDITION +80410E98 .byt:0001 +80410E98 satisified_pending_frames +80410E9C .byt:0004 +80410E9C active_item_fast_chest +80410EA0 .byt:0004 +80410EA0 active_item_graphic_id +80410EA4 .byt:0004 +80410EA4 active_item_object_id +80410EA8 .byt:0004 +80410EA8 active_item_text_id +80410EAC .byt:0004 +80410EAC active_item_action_id +80410EB0 .byt:0004 +80410EB0 active_item_row +80410EB4 .byt:0004 +80410EB4 active_override_is_outgoing +80410EB8 .byt:0008 +80410EB8 active_override +80410EC0 .byt:0004 +80410EC0 dummy_actor +80410EC4 .byt:0004 +80410EC4 item_overrides_count +80410EC8 .byt:0001 +80410EC8 COMPLETE_MASK_QUEST +80410EC9 .byt:0001 +80410EC9 OPEN_KAKARIKO +80410ECA .byt:0001 +80410ECA MAX_RUPEES +80410EE0 .byt:0004 +80410EE0 heap_next +80410EE4 .byt:0001 +80410EE4 KAKARIKO_WEATHER_FORECAST +80410F14 .byt:1000 +80410F14 cfg_item_overrides +80411F14 .byt:0040 +80411F14 object_slots +80411F58 .byt:14C8 +80411F58 FONT_TEXTURE +80413420 .byt:0800 +80413420 DPAD_TEXTURE +80413C20 .byt:1000 +80413C20 TRIFORCE_ICON_TEXTURE +80414C20 .byt:1000 +80414C20 GILDED_CHEST_FRONT_TEXTURE +80415C20 .byt:0800 +80415C20 GILDED_CHEST_BASE_TEXTURE +80416420 .byt:1000 +80416420 SILVER_CHEST_FRONT_TEXTURE +80417420 .byt:0800 +80417420 SILVER_CHEST_BASE_TEXTURE +80417C20 .byt:1000 +80417C20 SKULL_CHEST_FRONT_TEXTURE +80418C20 .byt:0800 +80418C20 SKULL_CHEST_BASE_TEXTURE +80419420 AUDIO_THREAD_MEM_START +80419420 PAYLOAD_END 804FF000 DEBUG_BUFFER 80500000 C_HEAP 80AD73A4 .byt:0004 diff --git a/ASM/build/bundle.o b/ASM/build/bundle.o index 2014eac9f3bb7b7bba1695e4235a7f7ca61dfbd5..ef49016f2937722fed5214b90c856ff8723a48c6 100644 GIT binary patch delta 23241 zcmc(H4_H*^mG`-q85|IGfI&wE9biCI632unD$xlbpg}{FC`o8S5RGYQLRy-V1TzyQ zijffFMIi}^Q^eGC*@i5(>+Z5$YS_e0-7Zbt)~{<@wzZAh+SX>>uA8-Gf9IYvO8olg z`JV6lcJI^cxxe$CfA2Zxeea(kJ@dA+?WD6K!>lQP%b)H_G|BLr6jKlrPR!eKWR%Ro zO|D1d*2I_t1!g!kudpT3R!lBjPireozEHW7a@u7qF|Y8*D0tPCLCRF#)V#u94YU;! z1q#Urep-8sH8pATL$-!1;xBX&)q4FEHMFGNGzVDAUrVkp;kv;5i27@ZDA7Gkce>Nb zbcgBA)=Wxl4Z?dkuQ2?KnL%D6w_C;&-=@SD-o|yN-!V>9?9S@19sEYpe;CFWt&^VH z)7oD68>){^qQF50MAAD8?9JMU(&hi&RzSsKgtog<_t%O-=*6P{W&iVdHWLOQey|D#$tk!e0UvpIj zDJ%PPwABivdSVNvBi<8MN$Nr7XM_LgiSoZq9dwH3Z&S0Ze@bf?H2BDz)kfSKC2hjuPV=V5?2<78sxmf$U*S?NHkg+9e0Z-7M2+54`@ti`6^#qL%*?81ab}>z{@-v&PbAC^P zxy73v-a>}s0a|E{X08bRf9@&DFoOssB9ofeM?RjEPUzk24TC%VmND6$*Z5B`*D01S zdzsT|1nCRbec7Ai{1l(xf+l^@`fB!&%bQN0v2(d|-pOlVL(a%mFgR!aTZYkXjV|!z zatht_+a&hbwuQ)3^U(nJw3|NqD))>h_?s`Z|B$Qko3n$d3%_Qj6qCpA{J}Uq>+|>F zy0eIUv~}>q8-8Y3FYTCI>wlIS{jt1c%CZVfZXu)1KWTgnTLAf6jMH|-f8_O7)=(_k z%h7QZE4zq{JJC8ub{Q`-2gL@0p5pO;^B*CDZS=1pYIjl}w`1V2wLXw(IIT|ymKtwc zUkuC%xq}oduHXVYO$1vey2lwQqBvHG1j&VtoWyv44DImOj{h3#XFL~c=y&MGtL|jg zjfZYLbSLjNr~cXjTkPwgIrS2>Pry#-h1?=?duj;VE0zfcSrJMLp)>^)$)rqNCsbgu zB7l7bF&Ia(H75zYHFiKJQVV$`9r819oq#}ppn=99(5bdMK-C({z^XY^pk2itA}`Hg&&=ZAg`LEE!{osuPQAxAK#ij|?qmUb{&VG81>g z@gxq0vv$>KkdmNZflS4RAe_wUv}<2SNraw8Z5?)292Dbkp*tdVlq?353V)A54-9T( zgRqw}!JbF$#i%_K_BOy?ir7mInJ|c3xLv>LyPcHBbxokj9T1!ip+1a-smSd|7Ld4{ zEXa&bkeRdF>3XLsf)YB%$0zX93lg#AE+*P<(yhH2G-J0(Hmmk+yC_8IU^?A3=!h6>FmfN_%ElnjZ2xpRiJQYuILHak{`op* zL;stzBHUm^_dBf1Nux~znKa!UG*8%%OT*@gfpqs$BG*mdM&#EI;AX{qHj*@Kyu(J& zYBB8@*qXqz&fZdF?6G`H(vp)=^IH2BTh6!P?0=6*uqu`mnr4F4xn#5Pu61EaCPdv! zpEQj|t8Hoe+*0helV;KWQdH(g`B_*gv>!Wg8*a4d!gsAxOYbp_d@Cn^4r`Rt zkO{9?3ov+U#b#qs97V!exQ)2lUT0CLI4O)~i80_+j?#6?C-VK-}+RXlT0(K zHT__Q_5Q7U5pMO$*>~n+1<|}CNJdk6G_m9Gdb5;URQw7;C{aGOVZXtV_sA!r~1E zj*O4Ld1UYxcaA&bim= zS2Z69E5T~mI@9{wCl(C;?13LTZJSAm_0zv2*16WqhYGD#55~o}KS(_^DG;Q0t$Vib z`J+l>e?Vf^!w*|KKH2hzCDOOSUu=Gu-p$X%g7x7+HV3DlV(kJ4-#lzRvVErYHxI|g z;CaL9|KwfP%=+QEqV;i&N$xN-eH7~sTbJw8CQZu6?kGBgpZe4{V`970+qWRe4O?dn z-uu|YMr=-c+hM`hj2!`M&tnS*SAM3#a75DEcMa}uJa0HyWAN$69j48*o__pJ>pM+f z7xwE<_>6>$Sv396DCXM(S^b-=_n#~i-8oO4RV%-3ZZsS@>7BiUk3a1*^<| zq9W^~eXFd$d)_nI3={42Wd&Mj+;X(teMdb}Nx~76wMXQd?CTovJ+u-HN~>{4D4~df zb4oGf;4v83LgOVwHZE|&=2kBrIcd4o{d|Sxcz#o5jIYGA^_p2v%{5aAM<$wz6;on5 zYKnRGyIssIqFs2;Gx3I4Ykl9`RiEs!a3EPlpchn;c~68wQVN-;S>I*gU^W8C~+Cxh+q0XvbBSocnHV7!mV^V2(i zqT?YE@Rc~oEWvvWZ@VKAD47%U?0yDgQ;K8lJjVv!NMEany9ewpRE7Kq`r z12KPJAcixTUiV@wO%(V)3*?>O5eRsa32%BdAZzsHlq~omhc`%dNOP+%y<-JA!Z_)L*zgisp_Oj1r*YpS$oRHes<8rxJl6I@+frX9v$i`k z`!ih+6_}?^IR%gVS}m_A|zUM`L#G`nWFZK=v8iMh)5=AY9_N zm(i4BJnzOtj%NAsqK4U>z&RXq_ux)eWs66A~opd1>@uNTtzyCYqAO^Z`+pj z@U{ny$vmSRH*S`@$TjzEEV)c_;x@h&+hB}0XvBCkG5f&hi!hN$Fw4LvA5U%l_=j0* zVQjBA9jRIr*-B(&co*RLF^P5}8+*&pt#IJl_8^^~koHM4-o~di{sO`e_WZdlNI%4< zFnlA5^dh6UuY2AY|5vKXw^sCaIo(OLp~L!4?~+7*x`PvbCc-T#D|@Ro=kN?8Xe~Kh z5^qM%XT=Pk&wAkpR{P-vu9z`-(j7d0xH1Nrx}_Q?-j;7^#(U7fHELgDjOiacC)%*D zJFnS^+WnpO(tnTfYeohWzVL#P0Baz2 zX;IN~Ury=zyXN~A|97%N|NSmM<}vg?HF1q1^go;a(hdLbD?WI~=(~n_W2$v${|sx< z`!1{|zIt?Yl4DV7c#`$xj}}||-p@7029LkLD%lG6$Az$g8CZc=4`A~uzy&b=ckKYc z4fxstjJx}_1K55kjdFnFqSs7;<0s${Gk6QQdH_$o3UC2D?K;!~;DiiS_~qLC-2aK(vU*8x&)|G}<^3 zI>Eoj7_t9cFgV5UVvtMWR)KE;Hv*?9#)o7hAGkpAN5Jf0reIr_^$lQ@&>jPfPS98g z)iJw>*ti9J+(7Mv@p4>o0DLfB1zKz)!O?5YsIfuEqWGTc@WV2H zaHRys=dKgjaUFi{I*eO}91}_y?fz&9qZ0(SCls9^<1gCzXA>I0klKsluV07HT!+tJ zhktn;{`JT4v|iu}oZR%h$~JNRd3o>=jTjFP_7RPkYs?2@E`g5$4#r%9Xo-ML2XGD# z;$VDr?aKtsB=7_FsEmhLA$I};-+3r+0%qsYnzO-l;DQO`*|-i)z)@S8L34?YMKNUY z{C~BnLo{)na#5oZlG$Ms$kcw<{GvGMj-YP4LI6Vz;?jV5;C4xGGOx+)wMH%`kSv$WB~u^b@EEVe28&toR?XjQW6675|XvnPb4YivJxOQ5)tH5FCSNVL1>r_aFZ* z7H+|X8i?`ZMWGeANfj`IssM1S;xc=)BePL)9iFU4Fs=c`G~wDlU>HXXmhH~7xbUic zH_>4PM3|6$|B2}bfKhVbPLcqHAzZr@W0}PKFSNxO;2t&b3tZcWI`}Qo1JE&a#*V8u zAQ^Y$6Ky^Yg>un%urK>?^Zenr9w|GI3r(>D8_#Z5=u?F*d{4Lt95wI-yx+5J&6wlM zxMu9d1aLERAedKrfTIDugKPWHfW8e7#_0&jj2-9fQT(Fodx#m_~&rlh%*#*@C;T-DpIW}c3MRD zaT5)z!W+1@4++qTyVowxSc8s#Lx*(&&VRlR{~AA3aX@tsp}WkK)>olP8D_#O{XfN#Lmc{kU%6{?`n| zUR{?m!`QbVfMz6@lpyx2ctb3J5xkG_GK@v^Eo?CA@Ly1K-e`0}u_)nd0pJ{wp9C{h zhg1FGGdT{s|HR>>h0NeX@e1@`9%>#`0~=ubD2AgL#&$LX>$;wV491P&jE;w)TLEiB z@QkLM)B#yGtr?kg1ObO~!H7nPntu8MW;m)2zfH8G3gepcNn@B1;8lk|W59<5>_San z;fx#=eb;OR;NoEkz%?ID%%a)@E<9g^c5=!z0M~7}whuMPW5@vIsln|Ct`#_H@JU;k z8TN&%ljv5+o7F1+I?)FrKqvA2NZ- zXv!9DYU!yEO}-J?L`tTg6ott_7-+dFK$GvZwegP{xDWl&2AF_=@S-yL;p@hC;6BxH zZN`(I$8Dn;Setkz&!(g;ZMiV}O9~W?s;{U`oWAu=H|DQ4)3awz|i@+2( zv!7x$pecpG_8|^Zj-$)_!O)#=3a=U;&ZsxqWCNFV{9kogdt@rIXmo?88`ab-EZZ93 z1d*S*jA%V)ts$h0wE*@Z4yNMn)p;HaP2p6YQ9e#hc_K2_i2$RkW@|2aK+d20Sf*Yx@v;)6l?14*XM44OSokFepdy-S{Xx2CO^Pv^w03>VbzO z;Au_R`5^D^P1iCx2rzx1#7~5|E*WXyF?E;Ag_D( zwC_V0nD7ItJ>#F^+CF3k{BH+l8oeF6`Jt0Ds1Dt^NI8OzHmMsmmlqG%gPz-NYWR<) z*o}3%lQW=Ot9u(#3?t;00NssvNWC&){8>ChMu3}j9QExu4xFPHW4r2seToP0dsi#s z(~P?R7WP6_5YQ%ZqbZD|z?wogdO{AJ@nxW9oY5w9;+h>qF}fZ(4VT1OvtraeLfR1FXv=aWk$fa7GOPT(jL0DYCUzsk zUU0O8iC?;I{O^gn!r*DsC;o`*Zy##ll0xnJB*xW*)-J(BdvsQ;+LCo#wwc|)2m30*CR1ek;wehd#>hfe^r zLk<|_NcslR9ym30#z_}GE}tCY8QO<9NX`R5&7w0-z8%|k1F$wx@+RE>&jV}EBtMF4 z%=)T)7}ewwRLYE#J8(T6rzrs?zloiYC#WS1C3D1noSNd~@8Y^lF=mkbOH=@}j4n$L zHXb=7U{4xi;XcqN^V~voJ2#!)8$8%qcX5DGe2=P2#zW-!EMBL1M!MB{!l+>oSewZ6 z0?{YxV6Z}FbZV#eTm-p6$tPVIWn4{%+B(;i3tJ#gN_ z0tM;-GnPYUnBsx+%a_xV3do3cLtP) zfg_4D@Yo#z)@MR5N+gFk^dg-H8o<$jyj!sqqh!%%J}(l@cSJjYX;@rsC>h2>q|3_t zikOS0*o$TLsS5~VR0F^xnH=g6C3*=AQ=8EHgX_kBgN-lmWK&s>USiKwC*$4tzqj8mr1?K2-ht89luZPJq!z2gD`F?LLhPiXmOP=< z23syfsg2?=wOIwjD%d6tQai*!YM&||6$iK(*)vM*7riv3mjg}HnWyQ@(*j~Y4GqH? zODj;hVz!T_NGlTuY1QH&twtRnBb>6dI#nD|#W9sTr*g;ymn7|?%Ar(tAXj7pbI=!D zk~vrsJo7nT(VMd!_W4JFIjN#Jr%@E=^pR1-f=5AF5i{g%aLxcIW0cIx7y)`2N62`Z z@dzmJTx5WIYR<6Ootr0i=T=Hj%|*s)MZkiro-@D&q%34C7}DDx{N6Fy{e2lJ819n43qZ8=QPmOCYxP3KLCQ=E>J?1w@+ zGJ!v0rSv>9W-`tPWei9A7{k#%#^sXI^q{0TU3(-0@@rr(qfP?O*e(HQbW6Y)Xl`C5 z8N;HVF&0vVi=vR}5QR(x!nMluNv$&dGP6uLU;~*2V!#hRJM;r{hWrSKGvu!leLph6 ztIA&^`hKLI_5Dq%A8Jv-HWAE1CO9Km`NGdCP(BQElVz2Ofh^5HR-MYBnb=X*ana9! z!x!Kv>kKIK&q;t;=Ow@_G$#if$|hlCqe-}?*-+#Nv+E?n>`s|s_EAyD?pOH{ah!cp z9A}@B0JG1k{+Q}tP&up)4safNfhRbx)8>b0UbhbPh=F-$-qaRUX$FE!G(=ZV>&O*fGX$;t4_iCco-yfHxJ`I7Bz8gPU}wH`S;@vnbqjOfgbv z8yrx4O7RuJHH@lS|P`+m1W=wo?Ebjj|m+3&U8Y)+X3dNO*n^dk* z`5NHOt;%mvew)bW)#Jxx1d?}BGMslxGJFdhbH;DsjPv@x<$@Skk{||_Xv9mrBDf?~ z6qg{C{{+P)eo*KwfpIpp1R3MzT7nGm%$J-Mx)klDcY^Y` zPGH%H+yj=O6nqa^c1i+Xb_Mn4o5OOFf#q<>j+f^uKcM_P2$cE5MBikLOnx)O7bCdffitRb8h1kGp9N+9MR{&tiCXfES7BN4j8_FE z<*N#CCu4pwDD$h7Un!+ng}WY?VpW6KS#=(->MVZ&_kTAAg5^YC03%od${4rHXBk8B zS;jR)FEg$KW!xjZ62y$S_CW;xWv1uI*anKfHZTrA{x<9n2Oxjj75q>QeqkyZ)4(tE zgMwd}kNbZ)51?u60o2kSXeJ|-1;d~$h*a^$Q8*w?SO^EU9yXqJ%s&eXxgwYFi`>F5 z@+iMR`N$y47r~z`Uyu90&1g_Yr{ZqKNAcwV0T!LYM@d$M;|g|!8UK_qO7v64mlR(X zTnxu7U+fk6;#8tz|Ud;R)Q0T1=Rfyo~N)cRLFNRj5R&2NgweEys3A+7prgdb@ zV~T)#m^Kl86$VSfpe)~_v>RW~ncoA-d}I#)ohX%{8Fw>2j^CJoLnTAFV8#d;53;~X zP{yP9ip3bsc%Ct4`YXm`pp4Js(D!LBTIY&3hSR0=;f%(V$Vc;?ZI?Nb`dHI&X zFyF?@+K7Jc03DK2m7Ny6CLnri@$=F)(9)aFk7bx`Bx+Q~aJ(9t-etfEj%vzu5t<6!rpx9lD35D43S~TH7 zracnK+K2?Qc0ihK?QyB?+F|@*5X+%QIIy*&64+WSLtFnM{wf9h+ey0oc87HN?FmxK z+Yuo5+U>~1yDT?^^`C+n++IaOhe283EEzLc;I#6`lz)!sU%)R<#YbbNxnyi-IRwCV z%F9Hq95b{r_7k>Oj?6yA^2jI$T0SO$mY+xcc^Q;nkjT~{QZB_hM9QUDmrBN`8T&vP z=SmZ;3rG{KJ1&OTol?C~)kDC%OxInI%&og3s{p?p*sEYY>~Lw;hsq_T>roqayuMlt ztlzEzbyDN?Xg03#`WEH)sor_~6*TKz0OfJ?2ya+-pa+9%J(S@(sj1xdH&i^evKT&OjV}8`y z=p(wo*bmAWrR!ph33u`O-xwf+yLe+BC<~yb4=~OLWn3%|ksDFl9LAOMjJL5$p7A!; z$OFm7I(Z=3*dUKu8yn?OYa=H3S+>^<%K9y2q+#Y8Tlqr<>c6o=_U4U8<;%v#0iy4+ z0-EN#tZ-8KVNm9ywjS{LZ}=L4D>1`H#+ac^1Ne!B`FWts#{~GnqY@KXz_>yw0$Ro! zNM!>qnARz617*P;{8GmJ2qyHGNI^0^Bo<43H! z3dp#RaS)U-W^D5@(<#ia1Z92=8FLt8qH`E;NBtwrs3(drqmk&}7&n13ZdQIP8H<^Z z%q(VpH_;elWN3_WL>(d{w=*9Zxt;mLs*mQi1HLSBn>^q{ZWI4j!j3ngRyHGFaiwB3 znLXZsKLTY11o#-sH;KVb&1$d@|2H)}eiW3)j}r|s9s*^I(r^HqMpXW!(hzF1lLt_n zoh*pjL>OZ|+m0^^-Hg(dfxj80DTCZ*lx7!W4=7`=Qk2HVQxGB)rDq>L5rcL~0q9WzFzc>I23igC?l!8KO|*Q$fsfZ#1v zGQOo+a9xk!I!u)Hx5Cd7zW;9>#swJL&=l-on^y!LWI^Bu2Lx|FCV2aZ;D|Suin6oeo)9aBGvhfk%4^R&w{f2XY)kEl0@LC zCc#fN3*NzoAipDDaVvf%a{zbX_c!Kug2M3Ad1Pz>emWl%IE1FIC ze%${#k`OiqTL2qF5#vS`z%t|UaIQQN;iquhaJX6whq3Ng!cZ8?ZzaoN-E$yeEH@4$ z+^_ho;AaA4BxC#;1elERXPWT*&yUe9on-7~+C#<-O#2W$(|)2)F+E1c5vHSLR5C?L z{)6cl8MB$5$KUBQy@)@70DTszKEpJJjL$PgDgKgaHBm3q?PN@48fwGO;e3JAH8AZV z`Z`n0XgBEYVf-H!R5pon<)X}sq%MgaWYzZ)~#54k-qq8~FKP04gm0w~7!AP|<{ z;}iKkew9B?^db16Jwv!)!ILUDs)DCg@RDGZ+IG|m0~?^&ikWSIUMo^+(+Vx?T0_RUZ@Pz+1a*9HLePaD^Gwplkp$WxUrzh6TLW3(6P{ZH!*9aWT<*JYELM z<5h}b$Ht8kz}{wYxHl{T?8QttfW4iJvHtf)l!26UD);s)KCbw@8or>0FKQr{G!XOv zznnf-4hqB1VKtm%3I}$e=YV+}nPvVykJ#CVfE>L3_qB-PzD_u1+${m@Lo;$f`;Ljj zeF%sR?i*5i7O&PUKL*Nt1X{=#ffh1G>3CJ`y9^54h9=~f&$c{J#s#Q9E3^egp$(~I zg|>24Xu%sQW29^~D_~|Nj1g!F;~teq25kp$Z0lbX{CvLP=i!LQpNBmje;)Q2xAXeH z8I1N~GHzxD0%&4f0m>MGJuWt>mObBxh5 zHf;iBelyWK%nzgf?=S;1f1H-?MI~)?fp`U4v)xnc!l5LBYF}g>hLQ@ldfhQ zAgX7I4EzPtRx%>6-_ZsNe;udD_#E>?7s%jevko*BKa;)aCc}?`{bl$z!xWM7eSd!# z6yy65&>F@Apo~X!{G^Vb*7374Zh6T_gdNLA#vY~!td1!%GaWQ!m6O4*Mi#n}1F_JI z9EgRC@D~dU&1Un5l|Lf1(<5&)qP-i_E{9@YKBcE(K(Hp!fI?=?pGJgo~ zjquYs49d^{ok+!I3>@%_!hsx7I8Y!82Z}}EK$)#T2P##*Rpr}MKBDqR@jeI#2l_$b z_`q?MM|1KrJ#bOv@g9hPQ2&Doc>lw|K{qHA4q`?e(7_5(IEd!s85~5D@eB?&;JuFJ z8$p?m%-QltJ!kUZ6`@_Q^Ehx1kCsuL_9V zR=6aNx?LjQT_6E=2PMF6WQGImt`@!S8qw=UNjSil;P_4i{!%$80(hwo^|u+@mC=Ov zI~HgLWr0?4@KT#NcnLGy$m3@~G5#_##wmT-BjYc_F^|6t$M$$c$NO~roQ`8+JpM`_ z>d#H~O1~_tR|aGmy>d+Pam8@V%kvdD=DqusF~u;*xCepoc#l_cm0|>9k7GiA3O_wq z|NIKqgOc$pT+eCT|82$@VZ4f_h-JaEV&GLa48d11Lz{NX7tbDc3`4JChBkj#@rdG+ zicblC4JBhguO*0|*HYzE>}#Qb2)>rDf(43$iYt{?k#U#}RD&X**Dk2sMHxTjQ_6af zJ5;Q=T&Y+2Rf;vh&>@ZRkUBneMg=qjhsG3-ssYrFXB>e8e$v?atIPT>Dn9mb~UM~mEcuWH6Jtu+mp660y{r6rJ#$mVA_ApZQCl0dzyUCAW z;BW`gM=)@>lZ;u6;b0cyJ~Ccpd=!*1W?au0Gp=WRRxupgcu4UD!F`zEw|M>cA@%P= zu@AL-ABsns1s`b<{5k^T@z)U;kH3zL*cchHalT^J=RXvWF=4$yX`|96rLb?0hq3>B_8 delta 22496 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