Cuphead plays on the iPhone: profile 0100A5C00D162000 (update 1.3.7, Unity 2017.4, SDK 5.5.0)

No host change was needed. The profile reports 84 MB of used memory (mem_used): the rewritten
modules take 80 MB, and with the default 64 MB SetHeapSize fails and the game aborts at its
first allocation. 3,118 shaders, every binding decoded; prewarm list recorded on the Mac
(boot, title, storybook, Elder Kettle's house, Inkwell Isle One, Forest Follies).
README, AGENTS.md and the game notes list it as playable on an iPhone.
This commit is contained in:
seedds committed 2026-10-21 09:45:15 +08:00
1 parent 05b329c625
commit bdc6792a84
14 files changed
+3275 -3

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
# Notes for agents
- This repository runs Nintendo Switch games natively on Apple platforms: the game's own code runs, rewritten only where Apple's kernel requires it. Twenty games are playable on the iPhone: Super Mario Bros. Wonder (update 1.2.1, profile `010015100B514000`), Fire Emblem Engage (update 2.0.0, `0100A6301214E000`), Metroid Dread (update 2.1.0, `010093801237C000`), 13 Sentinels: Aegis Rim (update 1.10, `01003FC01670C000`), Super Mario 3D World + Bowser's Fury (update 1.2.2, `010028600EBDA000`), The Legend of Zelda: Breath of the Wild (update 1.9.0, SDK 20, `01007EF00011E000`), The Legend of Zelda: Link's Awakening (update 1.1.0, SDK 8, `01006BB00C6F0000`) Super Mario Odyssey (update 1.4.1, SDK 7, `0100000000010000`), Hades (update 1.0.38233, SDK 9, `0100535012974000`), Hyrule Warriors: Age of Calamity (update 1.3.0, SDK 9.6, `01002B00111A2000`), Fire Emblem: Three Houses (update 1.2.0, SDK 6.5, `010055D009F78000`), Super Mario Galaxy (update 1.3.1, SDK 18, `010099C022B96000`) The Legend of Zelda: Tears of the Kingdom (update 1.4.3, SDK 20, `0100F2C0115B6000`) Monster Hunter Rise (update 16.0.2, SDK 11.4.3, `0100B04011742000`), Ace Attorney Investigations Collection (update 1.0.0.2, SDK 17.5.3, `010005501E68C000`), Hades II (base game, SDK 19.3.9, `0100A00019DE0000`), Unicorn Overlord (update 1.05, SDK 16.2.4, `010069401ADB8000`), Rhythm Heaven Groove (base game 1.0.0, SDK 21.4.0, `0100D9F01D474000`), Octopath Traveler 0 (update 1.0.5, SDK 19.3.13, `01005270232F2000`) and Pokémon Legends: Z-A (update 2.0.2, SDK 19.3.11, `0100F43008C44000`). Hades renders with Vulkan, which the host implements on Metal (`dm/gfx/vk/hle_vk.m`; `main` imports Vulkan, not NVN). Age of Calamity is Koei Tecmo's KTGL engine: files in RDB archives, shaders as GLSLC outputs (`shader_split.py` `idrk_shaders`). Three Houses is KTGL too; 9 of its shaders exist only as compiles of the game's own GLSLC at run time, captured once on the Mac (its `main` holds GLSL sources and imports `glslcCompile`). Breath of the Wild and Tears of the Kingdom run at 60 fps through a frame step the host decides in whole vsyncs (`patch_nso.py` `FRAME_STEP`, `nvn_fstep.h`, profile keys `fps_target` and `frame_step`); Tears of the Kingdom has a 5 GB guest layout. Monster Hunter Rise is Capcom's RE Engine: files in KPKA PAK archives (`shader_split.py` `kpka_jobs`, shaders in SDF files), the base game an XCI, its GPU heap a 64 GB sparse virtual pool (`hle_nvn.c` `vpool_*`, a 4 KB page table the replay reads textures through); it runs at 60 fps (30 on the Switch). Super Mario Galaxy is the Wii game on NERD's Hagi layer (PowerPC code recompiled into `main`), renders with Vulkan, and generates its shaders at run time, which the NSP script captures on the Mac (no SPIR-V file in its RomFS); its pointer is the touch screen in handheld mode (profile key `op_mode`). Ace Attorney Investigations Collection is Unity 2022 IL2CPP: its shaders keep their parameters as blob entries of their own (`shader_split.py` `unity_code_blobs`), and its C# file API goes through the SDK's C library, whose path checks the host answers (`hle_fs.c` `IsPathMounted` and the length limits). Hades II, unlike Hades, renders with NVN; its shaders bind textures at fixed slots up to 34 (slot 34's handle lies in the driver's image table, `dmsh_build.py`), and the two long lines through Melinoë while the staff's Omega attack charges are the game's own aim lines, not a rendering bug. Unicorn Overlord is Vanillaware's engine like 13 Sentinels (shaders compiled into `main`); both need the profile key `alloc_big_align`, which aligns large allocations to 64 KB so the ring heaps the engine cuts from a memory pool fit. Rhythm Heaven Groove is Nintendo's own 2D engine on SDK 21, the newest SDK so far (its DSP command list has no magic, `hle_audren.c`); it plays handheld with Boost (profile keys `op_mode handheld`, `perf_mode boost`), which skips its TV latency calibration and keeps its 1920x1080 draw size. Octopath Traveler 0 is Unreal Engine 5: everything in one pak with an AES-encrypted index whose key is found in `main` (`dm/gfx/tools/uepak.py`), its shaders Oodle-compressed in the pak's shader code archives and decoded once on the Mac by the game's own Oodle (any game with Unreal paks, `DM_OODLE_JOB`), its allocator replaced by the host's because Unreal's reserves 37 GB of address space (`patch_nso.py` cut, `hle_uemalloc.c`), its address region capped by the game's own argument (profile key `game_args`), and the particle shaders that pick a texture slot at run time bound by slot (profile key `tex_dyn_slots`); it runs at 60 fps (30 on the Switch) because the host writes Unreal's `t.MaxFPS` and `rhi.SyncInterval` in game memory (`hle_fpslock.c`, profile key `fps_target`). Pokémon Legends: Z-A is Game Freak's Trinity engine: everything in the packs of `arc/data.trpfs` (FlatBuffers, every file Oodle-compressed), which the shader split decodes with the game's own decoder in the Mac host's tool mode (`shader_spliLine truncated
- This repository runs Nintendo Switch games natively on Apple platforms: the game's own code runs, rewritten only where Apple's kernel requires it. Twenty-one games are playable on the iPhone: Super Mario Bros. Wonder (update 1.2.1, profile `010015100B514000`), Fire Emblem Engage (update 2.0.0, `0100A6301214E000`), Metroid Dread (update 2.1.0, `010093801237C000`), 13 Sentinels: Aegis Rim (update 1.10, `01003FC01670C000`), Super Mario 3D World + Bowser's Fury (update 1.2.2, `010028600EBDA000`), The Legend of Zelda: Breath of the Wild (update 1.9.0, SDK 20, `01007EF00011E000`), The Legend of Zelda: Link's Awakening (update 1.1.0, SDK 8, `01006BB00C6F0000`) Super Mario Odyssey (update 1.4.1, SDK 7, `0100000000010000`), Hades (update 1.0.38233, SDK 9, `0100535012974000`), Hyrule Warriors: Age of Calamity (update 1.3.0, SDK 9.6, `01002B00111A2000`), Fire Emblem: Three Houses (update 1.2.0, SDK 6.5, `010055D009F78000`), Super Mario Galaxy (update 1.3.1, SDK 18, `010099C022B96000`) The Legend of Zelda: Tears of the Kingdom (update 1.4.3, SDK 20, `0100F2C0115B6000`) Monster Hunter Rise (update 16.0.2, SDK 11.4.3, `0100B04011742000`), Ace Attorney Investigations Collection (update 1.0.0.2, SDK 17.5.3, `010005501E68C000`), Hades II (base game, SDK 19.3.9, `0100A00019DE0000`), Unicorn Overlord (update 1.05, SDK 16.2.4, `010069401ADB8000`), Rhythm Heaven Groove (base game 1.0.0, SDK 21.4.0, `0100D9F01D474000`), Octopath Traveler 0 (update 1.0.5, SDK 19.3.13, `01005270232F2000`), Pokémon Legends: Z-A (update 2.0.2, SDK 19.3.11, `0100F43008C44000`) and Cuphead (update 1.3.7, SDK 5.5.0, `0100A5C00D162000`). Hades renders with Vulkan, which the host implements on Metal (`dm/gfx/vk/hle_vk.m`; `main` imports Vulkan, not NVN). Age of Calamity is Koei Tecmo's KTGL engine: files in RDB archives, shaders as GLSLC outputs (`shader_split.py` `idrk_shaders`). Three Houses is KTGL too; 9 of its shaders exist only as compiles of the game's own GLSLC at run time, captured once on the Mac (its `main` holds GLSL sources and imports `glslcCompile`). Breath of the Wild and Tears of the Kingdom run at 60 fps through a frame step the host decides in whole vsyncs (`patch_nso.py` `FRAME_STEP`, `nvn_fstep.h`, profile keys `fps_target` and `frame_step`); Tears of the Kingdom has a 5 GB guest layout. Monster Hunter Rise is Capcom's RE Engine: files in KPKA PAK archives (`shader_split.py` `kpka_jobs`, shaders in SDF files), the base game an XCI, its GPU heap a 64 GB sparse virtual pool (`hle_nvn.c` `vpool_*`, a 4 KB page table the replay reads textures through); it runs at 60 fps (30 on the Switch). Super Mario Galaxy is the Wii game on NERD's Hagi layer (PowerPC code recompiled into `main`), renders with Vulkan, and generates its shaders at run time, which the NSP script captures on the Mac (no SPIR-V file in its RomFS); its pointer is the touch screen in handheld mode (profile key `op_mode`). Ace Attorney Investigations Collection is Unity 2022 IL2CPP: its shaders keep their parameters as blob entries of their own (`shader_split.py` `unity_code_blobs`), and its C# file API goes through the SDK's C library, whose path checks the host answers (`hle_fs.c` `IsPathMounted` and the length limits). Hades II, unlike Hades, renders with NVN; its shaders bind textures at fixed slots up to 34 (slot 34's handle lies in the driver's image table, `dmsh_build.py`), and the two long lines through Melinoë while the staff's Omega attack charges are the game's own aim lines, not a rendering bug. Unicorn Overlord is Vanillaware's engine like 13 Sentinels (shaders compiled into `main`); both need the profile key `alloc_big_align`, which aligns large allocations to 64 KB so the ring heaps the engine cuts from a memory pool fit. Rhythm Heaven Groove is Nintendo's own 2D engine on SDK 21, the newest SDK so far (its DSP command list has no magic, `hle_audren.c`); it plays handheld with Boost (profile keys `op_mode handheld`, `perf_mode boost`), which skips its TV latency calibration and keeps its 1920x1080 draw size. Octopath Traveler 0 is Unreal Engine 5: everything in one pak with an AES-encrypted index whose key is found in `main` (`dm/gfx/tools/uepak.py`), its shaders Oodle-compressed in the pak's shader code archives and decoded once on the Mac by the game's own Oodle (any game with Unreal paks, `DM_OODLE_JOB`), its allocator replaced by the host's because Unreal's reserves 37 GB of address space (`patch_nso.py` cut, `hle_uemalloc.c`), its address region capped by the game's own argument (profile key `game_args`), and the particle shaders that pick a texture slot at run time bound by slot (profile key `tex_dyn_slots`); it runs at 60 fps (30 on the Switch) because the host writes Unreal's `t.MaxFPS` and `rhi.SyncInterval` in game memory (`hle_fpslock.c`, profile key `fps_target`). Pokémon Legends: Z-A is Game Freak's Trinity engine: everything in the packs of `arc/data.trpfs` (FlatBuffers, every file Oodle-compressed), which the shader split decodes with the gLine truncated
- Each game's constants and shader tables form a game profile in `dm/games/<id>/`, where `<id>` is the base game's title ID: `game.tsv` plus the tables and `dmsh_chain.h`. Mario's profile is `010015100B514000`. Tools pick the profile with `DM_GAME`; `make -C dm/host` and `build_ipa.sh` pick it with `GAME`. There is no default game: set it every time (the tools stop and list the profiles otherwise). Put per-game values in the profile, not in code ([dm/games/README.md](dm/games/README.md)).
- Prefer general optimizations and fixes to game-specific rules. Performance work (frame pacing, power, caches, load times) counts here as much as correctness. First look for a change that holds for every game: Horizon / NVN / Vulkan semantics, or what the binary, its SDK version, its imports or its files show. Use a game-specific rule (a profile key, a rewriter cut, a build-ID gate, a per-game branch in the host) only when it is absolutely necessary, that is, when no general rule can do it.
- Per-build knowledge is keyed by the NSO build ID: rewriter cuts in `dm/tools/patch_nso.py`, the profile's `build` rows (the builds the NSP script accepts, and their display versions), and host behaviour that uses fixed module addresses checks `module_t.build_id` (from `fixups.tsv`; `dm_main_build()`). When a new game build appears, carry addresses over with `dm/tools/nso_fnmap.py` and check them by disassembly; never let fixed addresses run on a build they were not found in.
+2
View File
@@ -44,6 +44,7 @@ All of these are tested on an iPhone and playable:
| Rhythm&nbsp;Heaven&nbsp;Groove | ~3&nbsp;GB | |
| Octopath&nbsp;Traveler&nbsp;0 | ~4&nbsp;GB | Upgraded to 60 fps (30 fps on Switch); the upgrade needs update 1.0.5, it does not work with other versions |
| Pokémon&nbsp;Legends:&nbsp;Z-A | ~6&nbsp;GB | |
| Cuphead | ~5&nbsp;GB | |
| | |
|:---:|:---:|
@@ -57,6 +58,7 @@ All of these are tested on an iPhone and playable:
| ![Ace Attorney Investigations Collection](docs/images/ace-attorney-investigations.jpg)<br>Ace Attorney Investigations Collection | ![Hades II](docs/images/hades-ii.jpg)<br>Hades II |
| ![Unicorn Overlord](docs/images/unicorn-overlord.jpg)<br>Unicorn Overlord | ![Rhythm Heaven Groove](docs/images/rhythm-heaven-groove.jpg)<br>Rhythm Heaven Groove |
| ![Octopath Traveler 0](docs/images/octopath-traveler-0.jpg)<br>Octopath Traveler 0 | ![Pokémon Legends: Z-A](docs/images/pokemon-legends-z-a.jpg)<br>Pokémon Legends: Z-A |
| ![Cuphead](docs/images/cuphead.jpg)<br>Cuphead | |
Needs iOS / iPadOS 26 or later on an iPhone 15 Pro or newer (A17 Pro chip or later) or an iPad with an M1 chip or later: the games' textures are BC-compressed, and older iPhones can't read that format. Other games aren't supported yet. For them the script writes a survey and still tries its best to pack an IPA, guessing the game's settings; such an IPA may not start.
+1
View File
@@ -0,0 +1 @@
# generated
1 # generated
+4
View File
@@ -0,0 +1,4 @@
# chain b-f1a0d6cec37d 2026-10-21T09:17:11+08:00
101c4d73dbb253e2
a277d45a64c92ab6
b14f0b0add21e60a
1 # chain b-f1a0d6cec37d 2026-10-21T09:17:11+08:00
2 101c4d73dbb253e2
3 a277d45a64c92ab6
4 b14f0b0add21e60a
+2
View File
@@ -0,0 +1,2 @@
// Generated file (dm/gfx/tools/dmsh_chain.py --header, game 0100A5C00D162000): the B shader library translation chain version this source tree expects (default options); the host loads only <library dir>/b-<V>/
#define DMSH_CHAIN "f1a0d6cec37d"
+40
View File
@@ -0,0 +1,40 @@
# Game profile of Cuphead (Switch, base game v0 + update 1.3.7 = v655360, with The Delicious Last Course as DLC index 1). Plays on the Mac and on the iPhone
# Format: see dm/games/README.md
# Unity 2017.4.9f1 (IL2CPP), SDK 5.5.0 (the oldest so far), NVN API 53.313: the shaders are Shader objects in the AssetBundles of StreamingAssets and the player's serialized files (read by shader_split.py through unityfs.py).
# Unity 2017.4's serialized and Shader formats and the rewriter's jump-table form were found by armyja on this game (GitHub pull requests #1 and #2)
# ---- Identity ----
title_id 0100A5C00D162000
program_id 0100A5C00D162000
# ---- App ----
# Game name: only a label for profile listings and the Mac window title; the iOS app name is the game name in the base NSP, and the bundle ID comes from the base game title ID (build_ipa.sh / NSP script)
name Cuphead
ipa Cuphead.ipa
app_category public.app-category.action-games
# ---- Versions ----
# only the merged 1.3.7 copy is extracted
build v655360 1.3.7 main=d02cd50295124a48968488416e7e692b subsdk0=66ce9a2e7c75fc6d0a7fe1b5d6d5baee sdk=5afd9bdf1a579f10081d2ba1c4f9c7ac
package v655360
shader_versions v655360
# ---- Files ----
# load order as on Horizon: main, subsdk*, sdk (subsdk0 = NintendoSDK_movie)
modules main subsdk0 sdk
romfs_marker Data/globalgamemanagers
zip_store .assets:.dat:.png:.resource:.ress:.metallib
# ---- Memory ----
# The NPDM declares no system resource, so the game has no virtual address memory: Unity sets a heap of the application pool − used memory (3.12 GB) and allocates from it.
# The block is 256 MB in front + 256 MB alias region + 256 MB stack region + 3.25 GB heap region
mem_reserve 0x100000000
mem_alias 0x10000000
mem_stack 0x10000000
app_pool 0xCD500000
# the rewritten modules take 80 MB (main 59.9, sdk 12.7, subsdk0 7.3), more than the default 64 MB of used memory: with 64 MB the heap request plus the modules exceeds the pool and SetHeapSize fails
mem_used 0x5400000
# ---- Shader split (shader_split.py; Unity Shader objects, read by unityfs.py) ----
shader_groups /Data/=data
shader_note Cuphead shaders
1 # Game profile of Cuphead (Switch, base game v0 + update 1.3.7 = v655360, with The Delicious Last Course as DLC index 1). Plays on the Mac and on the iPhone
2 # Format: see dm/games/README.md
3 # Unity 2017.4.9f1 (IL2CPP), SDK 5.5.0 (the oldest so far), NVN API 53.313: the shaders are Shader objects in the AssetBundles of StreamingAssets and the player's serialized files (read by shader_split.py through unityfs.py).
4 # Unity 2017.4's serialized and Shader formats and the rewriter's jump-table form were found by armyja on this game (GitHub pull requests #1 and #2)
5 # ---- Identity ----
6 title_id 0100A5C00D162000
7 program_id 0100A5C00D162000
8 # ---- App ----
9 # Game name: only a label for profile listings and the Mac window title; the iOS app name is the game name in the base NSP, and the bundle ID comes from the base game title ID (build_ipa.sh / NSP script)
10 name Cuphead
11 ipa Cuphead.ipa
12 app_category public.app-category.action-games
13 # ---- Versions ----
14 # only the merged 1.3.7 copy is extracted
15 build v655360 1.3.7 main=d02cd50295124a48968488416e7e692b subsdk0=66ce9a2e7c75fc6d0a7fe1b5d6d5baee sdk=5afd9bdf1a579f10081d2ba1c4f9c7ac
16 package v655360
17 shader_versions v655360
18 # ---- Files ----
19 # load order as on Horizon: main, subsdk*, sdk (subsdk0 = NintendoSDK_movie)
20 modules main subsdk0 sdk
21 romfs_marker Data/globalgamemanagers
22 zip_store .assets:.dat:.png:.resource:.ress:.metallib
23 # ---- Memory ----
24 # The NPDM declares no system resource, so the game has no virtual address memory: Unity sets a heap of the application pool − used memory (3.12 GB) and allocates from it.
25 # The block is 256 MB in front + 256 MB alias region + 256 MB stack region + 3.25 GB heap region
26 mem_reserve 0x100000000
27 mem_alias 0x10000000
28 mem_stack 0x10000000
29 app_pool 0xCD500000
30 # the rewritten modules take 80 MB (main 59.9, sdk 12.7, subsdk0 7.3), more than the default 64 MB of used memory: with 64 MB the heap request plus the modules exceeds the pool and SetHeapSize fails
31 mem_used 0x5400000
32 # ---- Shader split (shader_split.py; Unity Shader objects, read by unityfs.py) ----
33 shader_groups /Data/=data
34 shader_note Cuphead shaders
@@ -0,0 +1,89 @@
# Prewarm seed list (shipped in the app, next to shader_map.tsv). Rows: S<TAB>shader key<TAB>stage / R<TAB>render pipeline key (pso_skey hex) / C<TAB>compute shader key. Recorded on the Mac: boot, title, save slot, the opening storybook, Elder Kettle's house, Inkwell Isle One and Forest Follies
S c58ee1901c9eaaff_b 0
S 89ad0f6d1416f673_b 1
S 91d0e9bc7608b1e1_b 0
S 8bddd3127210aae9_b 0
S 93ae3d4913bf4a90_b 1
S ac9dc969b43b05a6_b 0
S 2fba7b5c855eae41_b 1
S 7d942e699c54f2db_b 0
S 4c02d20fa437427e_b 1
S 229e46ed4370120b_b 0
S 302087f2d961a1dc_b 1
S 27996c8e76d30932_b 0
S 00ec7b8fd7dcf3bf_b 1
S 835b47f0f632c644_b 0
S 15b28bc8a7763a52_b 1
S bf6707736e88cca0_b 0
S 79765bff4524b8b0_b 1
S 9499d3c82266c865_b 0
S 6acd4d1360c85730_b 0
S 6862f87fecae2167_b 0
S 1a2e38d10cc54bd8_b 1
S 8e36438c7208b3c6_b 0
S 306877ea5c4a8154_b 1
S 2abce886bed05fd5_b 0
S 8f5dfea693d9352d_b 1
S 69cb0f7766061b6c_b 0
S 3dfe250394101c17_b 1
S 94f6fa4066c43e8f_b 0
S c3a320db6c8c8165_b 1
R 633538656531393031633965616166665f62000000000000383961643066366431343136663637335f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000080804810400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 393164306539626337363038623165315f6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000101804860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 386264646433313237323130616165395f62000000000000393361653364343931336266346139305f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 616339646339363962343362303561365f62000000000000326662613762356338353565616534315f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000220c0000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 376439343265363939633534663264625f62000000000000346330326432306661343337343237655f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 323239653436656434333730313230625f62000000000000333032303837663264393631613164635f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000380802820d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 323739393663386537366433303933325f62000000000000303065633762386664376463663362665f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000380802820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 633538656531393031633965616166665f62000000000000383961643066366431343136663637335f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000080810820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 383335623437663066363332633634345f62000000000000313562323862633861373736336135325f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000401c02820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 626636373037373336653838636361305f62000000000000373937363562666634353234623862305f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000080c02830400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 393439396433633832323636633836355f6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000500814820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 366163643464313336306338353733305f6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 363836326638376665636165323136375f62000000000000316132653338643130636335346264385f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 386533363433386337323038623363365f62000000000000333036383737656135633461383135345f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000380802820d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 323739393663386537366433303933325f62000000000000303065633762386664376463663362665f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000101804860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 326162636538383662656430356664355f62000000000000386635646665613639336439333532645f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000101804860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 363963623066373736363036316236635f62000000000000336466653235303339343130316331375f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 393466366661343036366334336538665f62000000000000633361333230646236633863383136355f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
S bde2a2fd31f647a9_b 0
S 4c6bf13182fca69b_b 1
R 626465326132666433316636343761395f62000000000000346336626631333138326663613639625f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000f7ffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
S 8d06257195b04c7a_b 0
S ae73c1bfb1ed6a60_b 1
S 276f55627252fd48_b 0
S 863489cc45bfb5c7_b 1
R 386430363235373139356230346337615f62000000000000616537336331626662316564366136305f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001018048604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000250c00001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 323736663535363237323532666434385f62000000000000383633343839636334356266623563375f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001018048604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000220c000025180000161c00001624000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
S ebb92dd98a9cace8_b 1
S de19977ca5221dca_b 1
S cf54bcbd14c4fb6d_b 1
R 393164306539626337363038623165315f62000000000000656262393264643938613963616365385f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000101804860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 393439396433633832323636633836355f62000000000000646531393937376361353232316463615f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000500814820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 366163643464313336306338353733305f62000000000000636635346263626431346334666236645f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
S 66ffc54aa13bbfdd_b 0
S 27e42b719904ee7a_b 1
R 363666666335346161313362626664645f62000000000000323765343262373139393034656537615f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
S 029bba11c71d1f00_b 0
S de67111d14063d0b_b 1
R 303239626261313163373164316630305f62000000000000646536373131316431343036336430625f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000f0ffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
S 551508d70ba926b2_b 0
S 534b5bc507cc2eb6_b 1
R 353531353038643730626139323662325f62000000000000353334623562633530376363326562365f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
S a211af8b99b9a164_b 0
S 283afc360a38c537_b 1
R 613231316166386239396239613136345f62000000000000323833616663333630613338633533375f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001018048604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000220c000025180000161c00001624000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 386264646433313237323130616165395f62000000000000393361653364343931336266346139305f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a8604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000250c00001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
S 77b39fd7bcdca77c_b 0
S d177126a6c28df58_b 1
S d3b1b1bbf973c728_b 0
S 172d7ab66d13a439_b 1
S 9015755115b0d31f_b 0
S 834e60f9d49b210c_b 1
S 1e8ed9f5038cd215_b 0
S 897d495083b16d7d_b 1
R 373762333966643762636463613737635f62000000000000643137373132366136633238646635385f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 643362316231626266393733633732385f62000000000000313732643761623636643133613433395f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 393031353735353131356230643331665f62000000000000383334653630663964343962323130635f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 316538656439663530333863643231355f62000000000000383937643439353038336231366437645f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
R 316538656439663530333863643231355f62000000000000383937643439353038336231366437645f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1 # Prewarm seed list (shipped in the app, next to shader_map.tsv). Rows: S<TAB>shader key<TAB>stage / R<TAB>render pipeline key (pso_skey hex) / C<TAB>compute shader key. Recorded on the Mac: boot, title, save slot, the opening storybook, Elder Kettle's house, Inkwell Isle One and Forest Follies
2 S c58ee1901c9eaaff_b 0
3 S 89ad0f6d1416f673_b 1
4 S 91d0e9bc7608b1e1_b 0
5 S 8bddd3127210aae9_b 0
6 S 93ae3d4913bf4a90_b 1
7 S ac9dc969b43b05a6_b 0
8 S 2fba7b5c855eae41_b 1
9 S 7d942e699c54f2db_b 0
10 S 4c02d20fa437427e_b 1
11 S 229e46ed4370120b_b 0
12 S 302087f2d961a1dc_b 1
13 S 27996c8e76d30932_b 0
14 S 00ec7b8fd7dcf3bf_b 1
15 S 835b47f0f632c644_b 0
16 S 15b28bc8a7763a52_b 1
17 S bf6707736e88cca0_b 0
18 S 79765bff4524b8b0_b 1
19 S 9499d3c82266c865_b 0
20 S 6acd4d1360c85730_b 0
21 S 6862f87fecae2167_b 0
22 S 1a2e38d10cc54bd8_b 1
23 S 8e36438c7208b3c6_b 0
24 S 306877ea5c4a8154_b 1
25 S 2abce886bed05fd5_b 0
26 S 8f5dfea693d9352d_b 1
27 S 69cb0f7766061b6c_b 0
28 S 3dfe250394101c17_b 1
29 S 94f6fa4066c43e8f_b 0
30 S c3a320db6c8c8165_b 1
31 R 633538656531393031633965616166665f62000000000000383961643066366431343136663637335f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000080804810400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
32 R 393164306539626337363038623165315f6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000101804860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
33 R 386264646433313237323130616165395f62000000000000393361653364343931336266346139305f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
34 R 616339646339363962343362303561365f62000000000000326662613762356338353565616534315f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000220c0000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
35 R 376439343265363939633534663264625f62000000000000346330326432306661343337343237655f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
36 R 323239653436656434333730313230625f62000000000000333032303837663264393631613164635f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000380802820d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
37 R 323739393663386537366433303933325f62000000000000303065633762386664376463663362665f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000380802820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
38 R 633538656531393031633965616166665f62000000000000383961643066366431343136663637335f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000080810820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
39 R 383335623437663066363332633634345f62000000000000313562323862633861373736336135325f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000401c02820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
40 R 626636373037373336653838636361305f62000000000000373937363562666634353234623862305f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000080c02830400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
41 R 393439396433633832323636633836355f6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000500814820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
42 R 366163643464313336306338353733305f6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
43 R 363836326638376665636165323136375f62000000000000316132653338643130636335346264385f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
44 R 386533363433386337323038623363365f62000000000000333036383737656135633461383135345f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000380802820d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
45 R 323739393663386537366433303933325f62000000000000303065633762386664376463663362665f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000101804860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
46 R 326162636538383662656430356664355f62000000000000386635646665613639336439333532645f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000101804860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
47 R 363963623066373736363036316236635f62000000000000336466653235303339343130316331375f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
48 R 393466366661343036366334336538665f62000000000000633361333230646236633863383136355f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
49 S bde2a2fd31f647a9_b 0
50 S 4c6bf13182fca69b_b 1
51 R 626465326132666433316636343761395f62000000000000346336626631333138326663613639625f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000f7ffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
52 S 8d06257195b04c7a_b 0
53 S ae73c1bfb1ed6a60_b 1
54 S 276f55627252fd48_b 0
55 S 863489cc45bfb5c7_b 1
56 R 386430363235373139356230346337615f62000000000000616537336331626662316564366136305f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001018048604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000250c00001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
57 R 323736663535363237323532666434385f62000000000000383633343839636334356266623563375f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001018048604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000220c000025180000161c00001624000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
58 S ebb92dd98a9cace8_b 1
59 S de19977ca5221dca_b 1
60 S cf54bcbd14c4fb6d_b 1
61 R 393164306539626337363038623165315f62000000000000656262393264643938613963616365385f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000101804860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
62 R 393439396433633832323636633836355f62000000000000646531393937376361353232316463615f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff00000000500814820400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
63 R 366163643464313336306338353733305f62000000000000636635346263626431346334666236645f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
64 S 66ffc54aa13bbfdd_b 0
65 S 27e42b719904ee7a_b 1
66 R 363666666335346161313362626664645f62000000000000323765343262373139393034656537615f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
67 S 029bba11c71d1f00_b 0
68 S de67111d14063d0b_b 1
69 R 303239626261313163373164316630305f62000000000000646536373131316431343036336430625f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000f0ffffff0000000028180a860400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000025180000161c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
70 S 551508d70ba926b2_b 0
71 S 534b5bc507cc2eb6_b 1
72 R 353531353038643730626139323662325f62000000000000353334623562633530376363326562365f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
73 S a211af8b99b9a164_b 0
74 S 283afc360a38c537_b 1
75 R 613231316166386239396239613136345f62000000000000323833616663333630613338633533375f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001018048604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000220c000025180000161c00001624000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
76 R 386264646433313237323130616165395f62000000000000393361653364343931336266346139305f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff0000000028180a8604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000250c00001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
77 S 77b39fd7bcdca77c_b 0
78 S d177126a6c28df58_b 1
79 S d3b1b1bbf973c728_b 0
80 S 172d7ab66d13a439_b 1
81 S 9015755115b0d31f_b 0
82 S 834e60f9d49b210c_b 1
83 S 1e8ed9f5038cd215_b 0
84 S 897d495083b16d7d_b 1
85 R 373762333966643762636463613737635f62000000000000643137373132366136633238646635385f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
86 R 643362316231626266393733633732385f62000000000000313732643761623636643133613433395f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
87 R 393031353735353131356230643331665f62000000000000383334653630663964343962323130635f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
88 R 316538656439663530333863643231355f62000000000000383937643439353038336231366437645f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000000000000000000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
89 R 316538656439663530333863643231355f62000000000000383937643439353038336231366437645f6200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000040100000401000001000000ff000000ffffffff000000001004048104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
@@ -0,0 +1 @@
# Answer table for translation queries (generated by dm/gfx/tools/shader_split.py, do not edit): key <TAB> fact JSON. This game has no PC version to pair with: only the thread group / shared memory of compute shaders (taken from the control section); other queries get the translator defaults
1 # Answer table for translation queries (generated by dm/gfx/tools/shader_split.py, do not edit): key <TAB> fact JSON. This game has no PC version to pair with: only the thread group / shared memory of compute shaders (taken from the control section); other queries get the translator defaults
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,2 @@
# kind: evidence control-section key conflict rulings: empty
dm_ctl_sha16 chosen_pc class candidates records
1 # kind: evidence control-section key conflict rulings: empty
2 dm_ctl_sha16 chosen_pc class candidates records
@@ -0,0 +1,2 @@
# kind: evidence vertex / pixel shader pairs within BNSH variations (generated by dm/gfx/tools/shader_split.py, do not edit): vertex key <TAB> pixel key
399b22379a2c6dc1 014f31b3225b4c1f
1 # kind: evidence vertex / pixel shader pairs within BNSH variations (generated by dm/gfx/tools/shader_split.py, do not edit): vertex key <TAB> pixel key
2 399b22379a2c6dc1 014f31b3225b4c1f
+2 -2
View File
@@ -38,7 +38,7 @@ None of them has a default game: without one they stop and list the profiles. To
| `romfs_marker` | A path that must exist in the RomFS |
| `zip_store` | Extensions the IPA stores without compressing |
| `mem_reserve`, `mem_alias`, `mem_stack`, `app_pool` | Guest address-space partition and application pool (`hle_svc.c`) |
| `mem_used` | Memory `GetInfo(UsedMemorySize)` reports beside the heap (default `0x4000000`, 64 MB). `SetHeapSize` checks a request against the real size of the loaded modules, so a game that sizes its heap as total − used and has more than 64 MB of modules needs at least their size here. Hyrule Warriors: Age of Calamity: 66.6 MB of modules, so the default made `SetHeapSize(pool − 64 MB)` fail and `nnMain` return at once; it sets 72 MB |
| `mem_used` | Memory `GetInfo(UsedMemorySize)` reports beside the heap (default `0x4000000`, 64 MB). `SetHeapSize` checks a request against the real size of the loaded modules, so a game that sizes its heap as total − used and has more than 64 MB of modules needs at least their size here. Hyrule Warriors: Age of Calamity: 66.6 MB of modules, so the default made `SetHeapSize(pool − 64 MB)` fail and `nnMain` return at once; it sets 72 MB. Cuphead: 80 MB of modules, 84 MB |
| `game_args` | Arguments the game gets when the command line gives none (the iOS app, the NSP script's Mac runs), split at spaces; `dmhost <dir> -- …` overrides them. The SDK hands them to the game before `nninitStartup`, as on hardware (`main.c`). Octopath Traveler 0 caps the address region Unreal's `nninitStartup` reserves (62 GB by default) with `-SwitchVirtualAddressSpaceSize=2048` (MB) |
| `mem_map_limit` | `on` / `off` (the default): `MapPhysicalMemory` fails with ResultLimitReached when it would take the process past the application pool (the pool less the used memory `GetInfo` reports), as on Horizon (`hle_svc.c`). Pokémon Legends: Z-A allocates and frees everything it can at startup and the SDK keeps the freed pages mapped until a map fails, then unmaps them and retries; without the limit they stay mapped and the game maps past the pool. Off by default: Ace Attorney Investigations Collection maps a little more than the 1 GB pool its profile reports |
| `present_interval` | `game` (the default): frames are paced by the present interval the game sets, as on the Switch (a frame presented with interval 2 stays on screen for two display ticks; a game that keeps asking for 2 for a second gets the 30 fps target, and on iOS the display link then runs at 30 Hz; Mario 1.2.1 switches to 2 for single frames after a slow one; Engage asks for 2 on the Switch, and a rewriter cut on its 2.0.0 `main` makes it ask for 1, see `0100A6301214E000/game.tsv`). `display`: one frame per display tick whatever the game asks, which is only right for games whose logic does not count frames (D2R's runs on its own 25 Hz clock). `DM_PRESENT_INTERVAL=game` / `display` overrides it, also from `Documents/env.txt` |
@@ -84,7 +84,7 @@ These are not profile keys: the tools read them from the game files each time, b
`python3 dm/games/profile_guess.py --check` runs these rules on every profile in `dm/games` (with the extractions under `/Volumes/T7/nsp`) and lists the keys where the guess differs.
After the rewrite, `mem_used` is set when the rewritten modules exceed the default 64 MB (a game without a system resource). A game with a system resource that sets a heap then gets a **heap check**: it boots in the Mac host (headless, no shader libraries) until its first heap request, or 5 s into `nnMain` without one, at most 30 s (`HEAP_CHECK_SECS`). A request the heap region cannot hold (`SetHeapSize OOM`) sets the alias / heap split (Tears of the Kingdom asks for 0x86000000, which gives its hand-made 0x98000000 alias region; Wonder's 1.44 GB gives 0xc0000000), and a pool check that fails for good sets `mem_used`. The profile gets a `# heap check:` line, and later runs keep its keys (delete the line to check again; `--no-heap-check` / `HEAP_CHECK = False` skips it). Other games skip the check, so it costs nothing for them and a few seconds plus a Mac host build for the rest.
After the rewrite, `mem_used` is set when the rewritten modules exceed the default 64 MB (a game without a system resource); keep it when the profile moves into `dm/games` (Cuphead without it: a 0.03 GB heap and an abort at the first allocation). A game with a system resource that sets a heap then gets a **heap check**: it boots in the Mac host (headless, no shader libraries) until its first heap request, or 5 s into `nnMain` without one, at most 30 s (`HEAP_CHECK_SECS`). A request the heap region cannot hold (`SetHeapSize OOM`) sets the alias / heap split (Tears of the Kingdom asks for 0x86000000, which gives its hand-made 0x98000000 alias region; Wonder's 1.44 GB gives 0xc0000000), and a pool check that fails for good sets `mem_used`. The profile gets a `# heap check:` line, and later runs keep its keys (delete the line to check again; `--no-heap-check` / `HEAP_CHECK = False` skips it). Other games skip the check, so it costs nothing for them and a few seconds plus a Mac host build for the rest.
No short run decides `render_cond`, `tex_flush_upload`, `tex_dirty_upload`, `core_preempt`, `gpu_timestamps`, `feedback_snap`, `alpha_from_red`, `vconv_range` or `present_interval`, nor `op_mode` / `pad_layout` outside the presets: they keep their defaults for a developer. A minute's boot without input counted Wonder's clears under render conditions (65,536 or more; it needs no `render_cond`) as readily as Tears of the Kingdom's, saw Breath of the Wild flush 32 CPU-filled textures with data (it needs no `tex_flush_upload`) and Age of Calamity none (its movie frames come later), and Metroid Dread's movie crash shows in about half the runs. On the iPhone, `Documents/env.txt` can still set `DM_OPMODE`, `DM_NVN_GPU_TS` and `DM_NVN_FB_SNAP`, and the pad layout switches in game.
+8
View File
@@ -307,6 +307,14 @@ The game's own work and its frame rate stay as they are; the host avoids work of
- **Graphics:** characters are skinned with transform feedback, the colour grading LUT is drawn as a layered pass, the deferred lighting reads stencil through a stencil-mode texture view, and the occlusion queries that decide how characters are animated need the draw's base instance in the driver segment ([04](agents/04-graphics.md)).
- **Mac input:** a fresh save reaches play in Lumiose City with `DM_KBD=Taylor DM_KEYS="f450:A,f1200:LRight~1,f1600:A,f1900:Down,f2000:Down,f2100:A,f2400:A*80/90"`; a save made there continues with `DM_KEYS="f300:A*3/150"` (play from about frame 600), and `LUp~12` then walks along the platform.
**Cuphead (`0100A5C00D162000`)**
- **Status:** brought up on the Mac with no host change: title, save slots, the opening storybook, Elder Kettle's house, Inkwell Isle One and Forest Follies at 60 fps with no red line; playable on an iPhone.
- **Engine:** Unity 2017.4.9f1 IL2CPP, SDK 5.5.0 (the oldest so far, NVN API 53.313), update 1.3.7 (v655360); its DLC (The Delicious Last Course) is mounted as add-on content 1. Unity 2017.4's serialized and `Shader` formats (`unityfs.py`, `shader_split.py`) and the rewriter's jump-table form (`patch_nso.py`) were found by armyja on this game (GitHub pull requests #1, #2).
- **Shaders:** 3,118 (1,558 pixel, 1,560 vertex) from the player's serialized files and AssetBundles, plus 4 GLSLC outputs in `main`. Every binding decodes.
- **Memory:** no system resource, so no virtual address memory: Unity sets a 3.12 GB heap (application pool − used memory) in a 4 GB block. The rewritten modules take 80 MB, so the profile reports 84 MB of used memory (`mem_used`); with the default 64 MB, `SetHeapSize` fails and the game aborts at its first allocation. On the Mac about 3.2 GB resident and 2.7 GB of Metal allocations, flat over the house and the map.
- **Saves:** the game writes a slot when it reaches the map, not when the slot is picked.
- **Mac input:** a fresh save goes through the title (L+R), a new slot, the storybook and the house to the map with `DM_KEYS="20:L+R,26:A,32:A,38:A,44:A,50:A,56:A*20/3,120:LRight~4,125:A,127:LRight~3,131:A*10/2,152:LLeft~3,155.5:A"` (the map at about 160 s). From that save, `DM_KEYS="20:L+R,26:A,32:A,35:A,40:LRight~1.5,42:LDown~1.5,45:LRight~3,49:LUp~1,51:LRight~3,54.5:LLeft~0.5,55.2:LUp~0.25,55.6:LRight~2,58:LUp~0.2,58.4:LRight~0.25,58.8:LUp~0.2,59.2:LRight~0.25,59.6:LUp~0.2,60:LRight~0.25,60.4:LUp~0.2,61:A,63:A"` crosses the bridge (its entry is narrow between the posts) and enters Forest Follies (play from about 68 s; Y shoots).
## Tools (`dm/tools`)
| Tool | What it does |
Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB