diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 2445098..769dfb9 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -105,6 +105,28 @@ jobs: exit 1 fi + - name: Smoke-test generic frontend config + run: | + set -euo pipefail + mkdir -p /tmp/mph-generic-config-smoke + set +e + output="$(../ndsrecomp/runner/build-mph-nightly/nds_runner \ + /tmp/mph-generic-config-smoke \ + --rom /tmp/mph-generic-config-smoke/missing.nds \ + --config "$PWD/game.toml" \ + --freebios --generated-firmware --boot direct 2>&1)" + status=$? + set -e + printf '%s\n' "$output" + test "$status" -ne 0 + if grep -q 'invalid frontend config' <<<"$output"; then + echo 'Generic game.toml was rejected by the runner frontend parser' >&2 + exit 1 + fi + grep -q 'cartridge image is missing or truncated' <<<"$output" + grep -q 'MPH_MULTIROM_RUNTIME_ADAPTIVE_CAPABILITY' \ + ../ndsrecomp/runner/src/main.cpp + - name: Install pinned AppImage packaging tools run: | set -euo pipefail diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 8c32a16..07062a2 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -142,6 +142,29 @@ jobs: exit 1 fi + - name: Smoke-test generic frontend config + shell: msys2 {0} + run: | + set -euo pipefail + mkdir -p .ci-generic-config-smoke + set +e + output="$(../ndsrecomp/runner/build-mph-nightly/nds_runner.exe \ + "$PWD/.ci-generic-config-smoke" \ + --rom "$PWD/.ci-generic-config-smoke/missing.nds" \ + --config "$PWD/game.toml" \ + --freebios --generated-firmware --boot direct 2>&1)" + status=$? + set -e + printf '%s\n' "$output" + test "$status" -ne 0 + if grep -q 'invalid frontend config' <<<"$output"; then + echo 'Generic game.toml was rejected by the runner frontend parser' >&2 + exit 1 + fi + grep -q 'cartridge image is missing or truncated' <<<"$output" + grep -q 'MPH_MULTIROM_RUNTIME_ADAPTIVE_CAPABILITY' \ + ../ndsrecomp/runner/src/main.cpp + - name: Build and test launcher shell: msys2 {0} run: | diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ec8b778..f37332d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,8 @@ jobs: run: | set -euo pipefail python -m py_compile \ + tools/patch_ndsrecomp_mph_runtime.py \ + tools/patch_ndsrecomp_mph_adaptive_capability.py \ tools/patch_ndsrecomp_rom_free_release.py \ tools/patch_recomp_ui_mph_multirom.py \ tools/ci/check_rom_free_release_sources.py \ diff --git a/.github/workflows/mph-multirom-static.yml b/.github/workflows/mph-multirom-static.yml index 4df8af0..a90348e 100644 --- a/.github/workflows/mph-multirom-static.yml +++ b/.github/workflows/mph-multirom-static.yml @@ -38,7 +38,11 @@ jobs: tools/promote_mph_static_coverage.py \ tools/promote_mph_runtime_coverage.py \ tools/probe_mph_wfc.py \ - tools/probe_mph_online_first_run.py + tools/probe_mph_online_first_run.py \ + tools/run_mph_friend_match.py \ + tools/mph_overlay_route.py \ + tools/overlay_coverage_report.py \ + tools/seed_overlay_from_coverage.py bash -n tools/build-linux.sh pwsh -NoProfile -Command ' $failed = $false @@ -55,20 +59,33 @@ jobs: shell: bash run: | set -euo pipefail - base=https://raw.githubusercontent.com/mstan/MetroidPrimeHuntersRecomp/5abcfee6187d572e752985ede2364f165d62dd6a + base=https://raw.githubusercontent.com/mstan/MetroidPrimeHuntersRecomp/905ffab20ecd0d9c3c1017fb757aec73c435a1ad curl -fsSL --retry 3 "$base/launcher/recomp-ui/launcher_main.cpp" -o /tmp/upstream-launcher.cpp curl -fsSL --retry 3 "$base/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp" -o /tmp/upstream-launcher-test.cpp curl -fsSL --retry 3 "$base/tools/mph_screens.py" -o /tmp/upstream-mph-screens.py curl -fsSL --retry 3 "$base/tools/probe_mph_wfc.py" -o /tmp/upstream-probe-wfc.py curl -fsSL --retry 3 "$base/tools/probe_mph_online_first_run.py" -o /tmp/upstream-probe-first-run.py + curl -fsSL --retry 3 "$base/tools/run_mph_friend_match.py" -o /tmp/upstream-friend-match.py + curl -fsSL --retry 3 "$base/tools/mph_overlay_route.py" -o /tmp/upstream-overlay-route.py + curl -fsSL --retry 3 "$base/tools/overlay_coverage_report.py" -o /tmp/upstream-overlay-report.py + curl -fsSL --retry 3 "$base/tools/seed_overlay_from_coverage.py" -o /tmp/upstream-overlay-seed.py cmp launcher/recomp-ui/launcher_main.cpp /tmp/upstream-launcher.cpp cmp launcher/recomp-ui/tests/launcher_mod_provider_test.cpp /tmp/upstream-launcher-test.cpp cmp tools/mph_screens.py /tmp/upstream-mph-screens.py cmp tools/probe_mph_wfc.py /tmp/upstream-probe-wfc.py cmp tools/probe_mph_online_first_run.py /tmp/upstream-probe-first-run.py + cmp tools/run_mph_friend_match.py /tmp/upstream-friend-match.py + cmp tools/mph_overlay_route.py /tmp/upstream-overlay-route.py + cmp tools/overlay_coverage_report.py /tmp/upstream-overlay-report.py + cmp tools/seed_overlay_from_coverage.py /tmp/upstream-overlay-seed.py grep -q 'copy_text(output->id, "hd-rendering")' launcher/recomp-ui/launcher_main.cpp grep -q -- '--firmware-state-path' launcher/recomp-ui/launcher_main.cpp + grep -q 'std::string rom_path;' launcher/recomp-ui/launcher_main.cpp grep -q 'feature_count == 3' launcher/recomp-ui/tests/launcher_mod_provider_test.cpp + grep -q 'rom path round trip' launcher/recomp-ui/tests/launcher_mod_provider_test.cpp + for ov in 000 001 002 003 004 008 009 010 015; do + test -f "config/mph_arm9_ov${ov}.toml" + done - name: Cross-check melonPrimeDS detector and widescreen table shell: bash @@ -148,7 +165,8 @@ jobs: run: | set -euo pipefail pin="$(tr -d '\r\n' < ndsrecomp.pin)" - test "$pin" = 6c6a03bdcf99093f64555c4d05d16e522dc58634 + test "$pin" = 302404ada0929528b680fa6808aad253b425c7a2 + grep -q "pin = \"$pin\"" game.toml git init /tmp/ndsrecomp git -C /tmp/ndsrecomp remote add origin https://github.com/mstan/ndsrecomp.git git -C /tmp/ndsrecomp fetch --depth 1 origin "$pin" @@ -185,6 +203,8 @@ jobs: grep -q 'copy_text(output->id, "hd-rendering")' "$file" grep -q -- '--firmware-state-path' "$file" grep -q 'bool adaptive_widescreen = true;' "$file" + grep -q 'std::filesystem::is_regular_file(default_rom, initial_rom_error)' "$file" + grep -q 'exe.string().c_str(), initial_rom.c_str(),' "$file" done grep -q 'game.region = "Europe";' /tmp/mph-launcher-eu11/launcher_main_profile.cpp grep -q 'exe / "Metroid Prime Hunters (Europe Rev 1).nds";' /tmp/mph-launcher-eu11/launcher_main_profile.cpp @@ -214,6 +234,7 @@ jobs: diff -u /tmp/first.sha256 /tmp/second.sha256 grep -q 'nds_title_patches_select_mph_runtime_profile' /tmp/ndsrecomp/runner/src/main.cpp grep -q 'nds_title_patches_set_mph_adaptive' /tmp/ndsrecomp/runner/src/main.cpp + grep -q 'slirp_virtual_network_instance' /tmp/ndsrecomp/runner/src/main.cpp grep -q '0x02111B5Cu, 0x0211D208u, 0x02111380u' /tmp/ndsrecomp/runner/src/mph_widescreen_profiles.generated.h ! grep -q 'kMphUs10MorphState' /tmp/ndsrecomp/runner/src/frontend.cpp ! grep -q 'kMphUs10AimX' /tmp/ndsrecomp/runner/src/title_patches.cpp diff --git a/config/game-eu11.toml b/config/game-eu11.toml deleted file mode 100644 index f1e62d5..0000000 --- a/config/game-eu11.toml +++ /dev/null @@ -1,34 +0,0 @@ -[game] -name = "Metroid Prime Hunters" -id = "AMHP" -region = "Europe" -revision = 1 -status = "EU1.1 bootstrap: ROM-header main banks with interpreter fallback" -rom = "Metroid Prime Hunters (Europe Rev 1).nds" -rom_size = 0x04000000 -sha1 = "bdcd1dea293e24c98d4c481430e90d21198985a5" - -[display] -screen_layout = "separate" -supersampling = 1 -antialiasing = 0 -# melonPrimeDS and mphCodex identify the revision-specific projection, -# 3D-to-2D projection and Q12 culling-aspect locations for every retail MPH -# revision. The runner applies those writes only after authoritative executable -# checksum validation, so EU1.1 can expose the same 21:9 feature as US1.0. -adaptive_widescreen = "top" -adaptive_capability = "top" -adaptive_width = 448 -adaptive_skybox_fill = false -adaptive_hud_anchor = true -adaptive_hud_center_width = 128 - -[system] -startup_mode = "automatic" - -[cartridge] -# Metroid Prime Hunters uses the same 256 KiB flash save geometry across the -# retail revisions tracked by the project. Keep this game-owned rather than a -# shared-runner default. -save_type = "flash" -save_size = 262144 diff --git a/config/mph_arm9_ov000.toml b/config/mph_arm9_ov000.toml new file mode 100644 index 0000000..ed2367c --- /dev/null +++ b/config/mph_arm9_ov000.toml @@ -0,0 +1,5572 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 0" +id = "mph_amhe0_arm9_ov000" +load_address = 0x02102220 +size = 0x00045140 +entry_pc = 0x02103010 +authoritative_entry_points = false + +[identity] +sha1 = "5983749ec5c2982e54a10e5f1107ef92b86342b0" + +[[entry_point]] +addr = 0x02103010 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02103088 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02103144 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103154 +mode = "arm" +kind = "runtime_observed" +# hits = 68 + +[[entry_point]] +addr = 0x02103158 +mode = "arm" +kind = "runtime_observed" +# hits = 5885 + +[[entry_point]] +addr = 0x02103184 +mode = "arm" +kind = "runtime_observed" +# hits = 16999 + +[[entry_point]] +addr = 0x02103208 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0210324C +mode = "arm" +kind = "runtime_observed" +# hits = 33267 + +[[entry_point]] +addr = 0x021033DC +mode = "arm" +kind = "runtime_observed" +# hits = 33267 + +[[entry_point]] +addr = 0x0210346C +mode = "arm" +kind = "runtime_observed" +# hits = 104 + +[[entry_point]] +addr = 0x02103494 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x021034CC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021034D0 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x021034E8 +mode = "arm" +kind = "runtime_observed" +# hits = 21 + +[[entry_point]] +addr = 0x021034F4 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x02103510 +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x02103550 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021035CC +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021035F8 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103604 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103640 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021036E8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210372C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103740 +mode = "arm" +kind = "runtime_observed" +# hits = 13 + +[[entry_point]] +addr = 0x021037AC +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02103834 +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02103838 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0210384C +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02103868 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02103870 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103890 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x021038D4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02103954 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02103974 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02103994 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021039E8 +mode = "arm" +kind = "runtime_observed" +# hits = 17 + +[[entry_point]] +addr = 0x02103AA0 +mode = "arm" +kind = "runtime_observed" +# hits = 17 + +[[entry_point]] +addr = 0x02103B58 +mode = "arm" +kind = "runtime_observed" +# hits = 15233 + +[[entry_point]] +addr = 0x02103C04 +mode = "arm" +kind = "runtime_observed" +# hits = 15258 + +[[entry_point]] +addr = 0x02103D2C +mode = "arm" +kind = "runtime_observed" +# hits = 615 + +[[entry_point]] +addr = 0x02103DD0 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02103DF4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103FFC +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104094 +mode = "arm" +kind = "runtime_observed" +# hits = 615 + +[[entry_point]] +addr = 0x021040DC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021040E0 +mode = "arm" +kind = "runtime_observed" +# hits = 33 + +[[entry_point]] +addr = 0x021040F0 +mode = "arm" +kind = "runtime_observed" +# hits = 60 + +[[entry_point]] +addr = 0x021040F8 +mode = "arm" +kind = "runtime_observed" +# hits = 64 + +[[entry_point]] +addr = 0x02104100 +mode = "arm" +kind = "runtime_observed" +# hits = 446 + +[[entry_point]] +addr = 0x02104354 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021043EC +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0210463C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104738 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104764 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021047CC +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021048A4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210491C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02104928 +mode = "arm" +kind = "runtime_observed" +# hits = 14749 + +[[entry_point]] +addr = 0x021049CC +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021049FC +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x02104AB4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104B3C +mode = "arm" +kind = "runtime_observed" +# hits = 44 + +[[entry_point]] +addr = 0x02104BB0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104BF8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104CAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02104CFC +mode = "arm" +kind = "runtime_observed" +# hits = 648 + +[[entry_point]] +addr = 0x02104FDC +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02104FE0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021050C8 +mode = "arm" +kind = "runtime_observed" +# hits = 648 + +[[entry_point]] +addr = 0x02105198 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02105420 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02105444 +mode = "arm" +kind = "runtime_observed" +# hits = 35876 + +[[entry_point]] +addr = 0x02105468 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x02105508 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021055E8 +mode = "arm" +kind = "runtime_observed" +# hits = 35812 + +[[entry_point]] +addr = 0x021056C4 +mode = "arm" +kind = "runtime_observed" +# hits = 451 + +[[entry_point]] +addr = 0x021056E0 +mode = "arm" +kind = "runtime_observed" +# hits = 451 + +[[entry_point]] +addr = 0x02105790 +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x021057D0 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02105A64 +mode = "arm" +kind = "runtime_observed" +# hits = 431 + +[[entry_point]] +addr = 0x02105A9C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02105BFC +mode = "arm" +kind = "runtime_observed" +# hits = 35772 + +[[entry_point]] +addr = 0x02105CD4 +mode = "arm" +kind = "runtime_observed" +# hits = 430 + +[[entry_point]] +addr = 0x02105CF0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02105D68 +mode = "arm" +kind = "runtime_observed" +# hits = 431 + +[[entry_point]] +addr = 0x02105D7C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02105F2C +mode = "arm" +kind = "runtime_observed" +# hits = 431 + +[[entry_point]] +addr = 0x02105FB8 +mode = "arm" +kind = "runtime_observed" +# hits = 430 + +[[entry_point]] +addr = 0x02106028 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02106098 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02106108 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02106204 +mode = "arm" +kind = "runtime_observed" +# hits = 50 + +[[entry_point]] +addr = 0x02106248 +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x021062A8 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02106444 +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x02106460 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021064BC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021064DC +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x02106508 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02106538 +mode = "arm" +kind = "runtime_observed" +# hits = 34 + +[[entry_point]] +addr = 0x0210661C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210664C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021066A4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021066B0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02106788 +mode = "arm" +kind = "runtime_observed" +# hits = 45275 + +[[entry_point]] +addr = 0x02106790 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02106824 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210690C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02106A3C +mode = "arm" +kind = "runtime_observed" +# hits = 878 + +[[entry_point]] +addr = 0x02106AB8 +mode = "arm" +kind = "runtime_observed" +# hits = 58 + +[[entry_point]] +addr = 0x02106B5C +mode = "arm" +kind = "runtime_observed" +# hits = 3562 + +[[entry_point]] +addr = 0x02106BB4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02106C34 +mode = "arm" +kind = "runtime_observed" +# hits = 4584 + +[[entry_point]] +addr = 0x02106CE4 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02106D80 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x02106DAC +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x02106E8C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02106F04 +mode = "arm" +kind = "runtime_observed" +# hits = 72458 + +[[entry_point]] +addr = 0x02106F9C +mode = "arm" +kind = "runtime_observed" +# hits = 69566 + +[[entry_point]] +addr = 0x02106FE8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021071D0 +mode = "arm" +kind = "runtime_observed" +# hits = 23 + +[[entry_point]] +addr = 0x021071D4 +mode = "arm" +kind = "runtime_observed" +# hits = 23 + +[[entry_point]] +addr = 0x021072E0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021074A4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021075A0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021075D8 +mode = "arm" +kind = "runtime_observed" +# hits = 81 + +[[entry_point]] +addr = 0x021076E0 +mode = "arm" +kind = "runtime_observed" +# hits = 51230 + +[[entry_point]] +addr = 0x02107730 +mode = "arm" +kind = "runtime_observed" +# hits = 54674 + +[[entry_point]] +addr = 0x02107808 +mode = "arm" +kind = "runtime_observed" +# hits = 51586 + +[[entry_point]] +addr = 0x02107894 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02107B54 +mode = "arm" +kind = "runtime_observed" +# hits = 89 + +[[entry_point]] +addr = 0x02107D80 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02107F20 +mode = "arm" +kind = "runtime_observed" +# hits = 38 + +[[entry_point]] +addr = 0x0211204C +mode = "arm" +kind = "runtime_observed" +# hits = 685 + +[[entry_point]] +addr = 0x021120B4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021120D4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021121D4 +mode = "arm" +kind = "runtime_observed" +# hits = 350 + +[[entry_point]] +addr = 0x0211232C +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x02112518 +mode = "arm" +kind = "runtime_observed" +# hits = 636 + +[[entry_point]] +addr = 0x0211251C +mode = "arm" +kind = "runtime_observed" +# hits = 758 + +[[entry_point]] +addr = 0x02112520 +mode = "arm" +kind = "runtime_observed" +# hits = 70 + +[[entry_point]] +addr = 0x02112524 +mode = "arm" +kind = "runtime_observed" +# hits = 994 + +[[entry_point]] +addr = 0x02112528 +mode = "arm" +kind = "runtime_observed" +# hits = 137 + +[[entry_point]] +addr = 0x02112694 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126A8 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126AC +mode = "arm" +kind = "runtime_observed" +# hits = 2648 + +[[entry_point]] +addr = 0x021126B0 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126B4 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126B8 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126BC +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126C0 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126C4 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126C8 +mode = "arm" +kind = "runtime_observed" +# hits = 2597 + +[[entry_point]] +addr = 0x021126CC +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126D0 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126D4 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126D8 +mode = "arm" +kind = "runtime_observed" +# hits = 2597 + +[[entry_point]] +addr = 0x021126DC +mode = "arm" +kind = "runtime_observed" +# hits = 2597 + +[[entry_point]] +addr = 0x021126E0 +mode = "arm" +kind = "runtime_observed" +# hits = 2597 + +[[entry_point]] +addr = 0x021126E4 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126E8 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126EC +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126F0 +mode = "arm" +kind = "runtime_observed" +# hits = 2601 + +[[entry_point]] +addr = 0x021126F4 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021126FC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02112704 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211273C +mode = "arm" +kind = "runtime_observed" +# hits = 50 + +[[entry_point]] +addr = 0x02112888 +mode = "arm" +kind = "runtime_observed" +# hits = 15224 + +[[entry_point]] +addr = 0x02112AD0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02112BB0 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02112E80 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02112F18 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02112F9C +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02112FB4 +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02112FDC +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02113134 +mode = "arm" +kind = "runtime_observed" +# hits = 36 + +[[entry_point]] +addr = 0x02113174 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211320C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211324C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211326C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02113298 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x021132B8 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021134B8 +mode = "arm" +kind = "runtime_observed" +# hits = 5780 + +[[entry_point]] +addr = 0x02113568 +mode = "arm" +kind = "runtime_observed" +# hits = 5302 + +[[entry_point]] +addr = 0x02113684 +mode = "arm" +kind = "runtime_observed" +# hits = 1637 + +[[entry_point]] +addr = 0x02113700 +mode = "arm" +kind = "runtime_observed" +# hits = 7692 + +[[entry_point]] +addr = 0x02113744 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021137AC +mode = "arm" +kind = "runtime_observed" +# hits = 283 + +[[entry_point]] +addr = 0x02113848 +mode = "arm" +kind = "runtime_observed" +# hits = 816 + +[[entry_point]] +addr = 0x021138BC +mode = "arm" +kind = "runtime_observed" +# hits = 220 + +[[entry_point]] +addr = 0x021138F4 +mode = "arm" +kind = "runtime_observed" +# hits = 839 + +[[entry_point]] +addr = 0x02113984 +mode = "arm" +kind = "runtime_observed" +# hits = 9364 + +[[entry_point]] +addr = 0x02113B30 +mode = "arm" +kind = "runtime_observed" +# hits = 582 + +[[entry_point]] +addr = 0x02113BE8 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02113C20 +mode = "arm" +kind = "runtime_observed" +# hits = 4500 + +[[entry_point]] +addr = 0x02113C24 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02113C80 +mode = "arm" +kind = "runtime_observed" +# hits = 54528 + +[[entry_point]] +addr = 0x02113CD0 +mode = "arm" +kind = "runtime_observed" +# hits = 56533 + +[[entry_point]] +addr = 0x02113D58 +mode = "arm" +kind = "runtime_observed" +# hits = 10350 + +[[entry_point]] +addr = 0x02113DB8 +mode = "arm" +kind = "runtime_observed" +# hits = 8494 + +[[entry_point]] +addr = 0x02113DCC +mode = "arm" +kind = "runtime_observed" +# hits = 849 + +[[entry_point]] +addr = 0x02113DF4 +mode = "arm" +kind = "runtime_observed" +# hits = 9860 + +[[entry_point]] +addr = 0x02113E08 +mode = "arm" +kind = "runtime_observed" +# hits = 68469 + +[[entry_point]] +addr = 0x02113E3C +mode = "arm" +kind = "runtime_observed" +# hits = 263519 + +[[entry_point]] +addr = 0x02113F58 +mode = "arm" +kind = "runtime_observed" +# hits = 9266 + +[[entry_point]] +addr = 0x02113FA0 +mode = "arm" +kind = "runtime_observed" +# hits = 12545 + +[[entry_point]] +addr = 0x02114024 +mode = "arm" +kind = "runtime_observed" +# hits = 72391 + +[[entry_point]] +addr = 0x02114034 +mode = "arm" +kind = "runtime_observed" +# hits = 829 + +[[entry_point]] +addr = 0x02114044 +mode = "arm" +kind = "runtime_observed" +# hits = 266 + +[[entry_point]] +addr = 0x02114064 +mode = "arm" +kind = "runtime_observed" +# hits = 91531 + +[[entry_point]] +addr = 0x02114074 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x021140D4 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0211411C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02114228 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x021142E4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021142F4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021142F8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021142FC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211430C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02114310 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02114318 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02114320 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021144E8 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x0211452C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02114550 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02114648 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x021146B4 +mode = "arm" +kind = "runtime_observed" +# hits = 69692 + +[[entry_point]] +addr = 0x02114730 +mode = "arm" +kind = "runtime_observed" +# hits = 2526 + +[[entry_point]] +addr = 0x02114780 +mode = "arm" +kind = "runtime_observed" +# hits = 17834 + +[[entry_point]] +addr = 0x021147C4 +mode = "arm" +kind = "runtime_observed" +# hits = 47714 + +[[entry_point]] +addr = 0x02114814 +mode = "arm" +kind = "runtime_observed" +# hits = 910 + +[[entry_point]] +addr = 0x02114AB8 +mode = "arm" +kind = "runtime_observed" +# hits = 12777 + +[[entry_point]] +addr = 0x02114AF4 +mode = "arm" +kind = "runtime_observed" +# hits = 27 + +[[entry_point]] +addr = 0x02114B1C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02114B2C +mode = "arm" +kind = "runtime_observed" +# hits = 9178 + +[[entry_point]] +addr = 0x02114C34 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02114F2C +mode = "arm" +kind = "runtime_observed" +# hits = 16354 + +[[entry_point]] +addr = 0x02115000 +mode = "arm" +kind = "runtime_observed" +# hits = 16904 + +[[entry_point]] +addr = 0x02115014 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021150E4 +mode = "arm" +kind = "runtime_observed" +# hits = 2705 + +[[entry_point]] +addr = 0x0211511C +mode = "arm" +kind = "runtime_observed" +# hits = 17 + +[[entry_point]] +addr = 0x02115124 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211512C +mode = "arm" +kind = "runtime_observed" +# hits = 96 + +[[entry_point]] +addr = 0x02115168 +mode = "arm" +kind = "runtime_observed" +# hits = 2705 + +[[entry_point]] +addr = 0x0211516C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02115208 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02115260 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211527C +mode = "arm" +kind = "runtime_observed" +# hits = 32 + +[[entry_point]] +addr = 0x0211528C +mode = "arm" +kind = "runtime_observed" +# hits = 24 + +[[entry_point]] +addr = 0x02115308 +mode = "arm" +kind = "runtime_observed" +# hits = 94 + +[[entry_point]] +addr = 0x021153B4 +mode = "arm" +kind = "runtime_observed" +# hits = 760 + +[[entry_point]] +addr = 0x0211540C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02115490 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021154F8 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02115554 +mode = "arm" +kind = "runtime_observed" +# hits = 2764 + +[[entry_point]] +addr = 0x02115700 +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x021157CC +mode = "arm" +kind = "runtime_observed" +# hits = 95841 + +[[entry_point]] +addr = 0x021157D8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021158C4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021158EC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115A5C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02115A60 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02115A64 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02115A68 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02115A6C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02115A70 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02115A90 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02115A94 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02115A98 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AA0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AA4 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02115ABC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AC0 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02115AC4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AC8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115ACC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AE8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AF4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AFC +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02115B04 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02115B08 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02115B0C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02115B18 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02115DB0 +mode = "arm" +kind = "runtime_observed" +# hits = 16637 + +[[entry_point]] +addr = 0x02115F88 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115FB4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021161FC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02116404 +mode = "arm" +kind = "runtime_observed" +# hits = 910 + +[[entry_point]] +addr = 0x02116458 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021164F4 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02116514 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02116520 +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x021165D4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021166F4 +mode = "arm" +kind = "runtime_observed" +# hits = 77 + +[[entry_point]] +addr = 0x021167A8 +mode = "arm" +kind = "runtime_observed" +# hits = 771 + +[[entry_point]] +addr = 0x02116814 +mode = "arm" +kind = "runtime_observed" +# hits = 165 + +[[entry_point]] +addr = 0x0211685C +mode = "arm" +kind = "runtime_observed" +# hits = 5488 + +[[entry_point]] +addr = 0x021168A8 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x021168C4 +mode = "arm" +kind = "runtime_observed" +# hits = 21224 + +[[entry_point]] +addr = 0x02116980 +mode = "arm" +kind = "runtime_observed" +# hits = 20127 + +[[entry_point]] +addr = 0x02116A14 +mode = "arm" +kind = "runtime_observed" +# hits = 12918 + +[[entry_point]] +addr = 0x02116A44 +mode = "arm" +kind = "runtime_observed" +# hits = 2489 + +[[entry_point]] +addr = 0x02116AB0 +mode = "arm" +kind = "runtime_observed" +# hits = 25823 + +[[entry_point]] +addr = 0x02116ACC +mode = "arm" +kind = "runtime_observed" +# hits = 26423 + +[[entry_point]] +addr = 0x02116AE8 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x02116BFC +mode = "arm" +kind = "runtime_observed" +# hits = 5171 + +[[entry_point]] +addr = 0x02116C18 +mode = "arm" +kind = "runtime_observed" +# hits = 5459 + +[[entry_point]] +addr = 0x02116C34 +mode = "arm" +kind = "runtime_observed" +# hits = 853 + +[[entry_point]] +addr = 0x02116C84 +mode = "arm" +kind = "runtime_observed" +# hits = 1703 + +[[entry_point]] +addr = 0x02116CA0 +mode = "arm" +kind = "runtime_observed" +# hits = 1895 + +[[entry_point]] +addr = 0x02116CBC +mode = "arm" +kind = "runtime_observed" +# hits = 20164 + +[[entry_point]] +addr = 0x02116D38 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02116DD4 +mode = "arm" +kind = "runtime_observed" +# hits = 80220 + +[[entry_point]] +addr = 0x02116E10 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02116E50 +mode = "arm" +kind = "runtime_observed" +# hits = 111636 + +[[entry_point]] +addr = 0x0211B004 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0211B1F4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211B270 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211B28C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211B8E4 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0211B8F4 +mode = "arm" +kind = "runtime_observed" +# hits = 245 + +[[entry_point]] +addr = 0x0211B904 +mode = "arm" +kind = "runtime_observed" +# hits = 284 + +[[entry_point]] +addr = 0x0211BAC4 +mode = "arm" +kind = "runtime_observed" +# hits = 208 + +[[entry_point]] +addr = 0x0211BCC0 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211BCFC +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211BD84 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211BDB4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211BF60 +mode = "arm" +kind = "runtime_observed" +# hits = 2614 + +[[entry_point]] +addr = 0x0211BFE4 +mode = "arm" +kind = "runtime_observed" +# hits = 1432 + +[[entry_point]] +addr = 0x0211C070 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211C08C +mode = "arm" +kind = "runtime_observed" +# hits = 403 + +[[entry_point]] +addr = 0x0211C120 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C12C +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x0211C13C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C148 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0211C154 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C188 +mode = "arm" +kind = "runtime_observed" +# hits = 13 + +[[entry_point]] +addr = 0x0211C18C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211C1A0 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211C1B0 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211C1BC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211C1C8 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211C22C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C27C +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211C318 +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x0211C388 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C4DC +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211C518 +mode = "arm" +kind = "runtime_observed" +# hits = 77585 + +[[entry_point]] +addr = 0x0211C59C +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x0211C5B0 +mode = "arm" +kind = "runtime_observed" +# hits = 1432 + +[[entry_point]] +addr = 0x0211C6B4 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x0211C764 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211C7C4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211C830 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0211C8A4 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0211C8E0 +mode = "arm" +kind = "runtime_observed" +# hits = 1432 + +[[entry_point]] +addr = 0x0211CA18 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0211CA34 +mode = "arm" +kind = "runtime_observed" +# hits = 110 + +[[entry_point]] +addr = 0x0211CA50 +mode = "arm" +kind = "runtime_observed" +# hits = 30 + +[[entry_point]] +addr = 0x0211CA60 +mode = "arm" +kind = "runtime_observed" +# hits = 5728 + +[[entry_point]] +addr = 0x0211CAB4 +mode = "arm" +kind = "runtime_observed" +# hits = 5728 + +[[entry_point]] +addr = 0x0211CB80 +mode = "arm" +kind = "runtime_observed" +# hits = 5728 + +[[entry_point]] +addr = 0x0211CC04 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211CC6C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211CE64 +mode = "arm" +kind = "runtime_observed" +# hits = 19820 + +[[entry_point]] +addr = 0x0211D244 +mode = "arm" +kind = "runtime_observed" +# hits = 151254 + +[[entry_point]] +addr = 0x0211D4B4 +mode = "arm" +kind = "runtime_observed" +# hits = 16178 + +[[entry_point]] +addr = 0x0211D59C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211D5C4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211D690 +mode = "arm" +kind = "runtime_observed" +# hits = 109174 + +[[entry_point]] +addr = 0x0211D704 +mode = "arm" +kind = "runtime_observed" +# hits = 6837 + +[[entry_point]] +addr = 0x0211D774 +mode = "arm" +kind = "runtime_observed" +# hits = 5728 + +[[entry_point]] +addr = 0x0211DCD8 +mode = "arm" +kind = "runtime_observed" +# hits = 23116 + +[[entry_point]] +addr = 0x0211DD2C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211E41C +mode = "arm" +kind = "runtime_observed" +# hits = 2705 + +[[entry_point]] +addr = 0x0211E428 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211E438 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x0211E444 +mode = "arm" +kind = "runtime_observed" +# hits = 2753 + +[[entry_point]] +addr = 0x0211E4A8 +mode = "arm" +kind = "runtime_observed" +# hits = 2764 + +[[entry_point]] +addr = 0x0211E4C0 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211E548 +mode = "arm" +kind = "runtime_observed" +# hits = 11354 + +[[entry_point]] +addr = 0x0211E560 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211E568 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0211E56C +mode = "arm" +kind = "runtime_observed" +# hits = 39 + +[[entry_point]] +addr = 0x0211E588 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0211E598 +mode = "arm" +kind = "runtime_observed" +# hits = 10051 + +[[entry_point]] +addr = 0x0211E5BC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211E64C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211E764 +mode = "arm" +kind = "runtime_observed" +# hits = 10051 + +[[entry_point]] +addr = 0x0211E79C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211E7A8 +mode = "arm" +kind = "runtime_observed" +# hits = 30153 + +[[entry_point]] +addr = 0x0211E854 +mode = "arm" +kind = "runtime_observed" +# hits = 10051 + +[[entry_point]] +addr = 0x0211E8A4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211E8F8 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211E994 +mode = "arm" +kind = "runtime_observed" +# hits = 2295 + +[[entry_point]] +addr = 0x0211E9A0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211E9B0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211E9C0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211EA50 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211EC48 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211EE90 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0211EF0C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211EFE8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F128 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F1F8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F2A0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F2A8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211F3B8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F7B8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02120138 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021204D4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02120C00 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02120D14 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02120D18 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02120DD0 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02120E14 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02120EF0 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02121080 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02121160 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0212119C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02121778 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021217C8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212182C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021219A4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021219D8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021219F8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02121C40 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02121DAC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02121E0C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02121EC4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212213C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02122160 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02122170 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02122180 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021221D8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02122454 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0212258C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x021228F8 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02123058 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x021230C8 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x021231C8 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02123754 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02123824 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02123980 +mode = "arm" +kind = "runtime_observed" +# hits = 52288 + +[[entry_point]] +addr = 0x02123B2C +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02123BBC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02123C00 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02123C54 +mode = "arm" +kind = "runtime_observed" +# hits = 164 + +[[entry_point]] +addr = 0x02123C78 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02123E14 +mode = "arm" +kind = "runtime_observed" +# hits = 791 + +[[entry_point]] +addr = 0x02123F30 +mode = "arm" +kind = "runtime_observed" +# hits = 141 + +[[entry_point]] +addr = 0x02123F34 +mode = "arm" +kind = "runtime_observed" +# hits = 788 + +[[entry_point]] +addr = 0x02123F58 +mode = "arm" +kind = "runtime_observed" +# hits = 199 + +[[entry_point]] +addr = 0x02124004 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02124040 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02124280 +mode = "arm" +kind = "runtime_observed" +# hits = 61 + +[[entry_point]] +addr = 0x02124284 +mode = "arm" +kind = "runtime_observed" +# hits = 102 + +[[entry_point]] +addr = 0x021242B0 +mode = "arm" +kind = "runtime_observed" +# hits = 35 + +[[entry_point]] +addr = 0x02124304 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021243D0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021243E8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02124AF8 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02124B18 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02124DDC +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02124FE8 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02125018 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x0212511C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02125174 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02125294 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02125350 +mode = "arm" +kind = "runtime_observed" +# hits = 11696 + +[[entry_point]] +addr = 0x0212545C +mode = "arm" +kind = "runtime_observed" +# hits = 6049 + +[[entry_point]] +addr = 0x0212549C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021254DC +mode = "arm" +kind = "runtime_observed" +# hits = 6049 + +[[entry_point]] +addr = 0x021254E8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02125548 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02125554 +mode = "arm" +kind = "runtime_observed" +# hits = 6049 + +[[entry_point]] +addr = 0x021255AC +mode = "arm" +kind = "runtime_observed" +# hits = 12098 + +[[entry_point]] +addr = 0x0212574C +mode = "arm" +kind = "runtime_observed" +# hits = 8216 + +[[entry_point]] +addr = 0x02125798 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02125968 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02125A3C +mode = "arm" +kind = "runtime_observed" +# hits = 23512 + +[[entry_point]] +addr = 0x02125A5C +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02125AAC +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02125B08 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02125B98 +mode = "arm" +kind = "runtime_observed" +# hits = 189 + +[[entry_point]] +addr = 0x02125BDC +mode = "arm" +kind = "runtime_observed" +# hits = 3562 + +[[entry_point]] +addr = 0x02125C54 +mode = "arm" +kind = "runtime_observed" +# hits = 46200 + +[[entry_point]] +addr = 0x02125DF8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02125E50 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02125F30 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02125FF0 +mode = "arm" +kind = "runtime_observed" +# hits = 3562 + +[[entry_point]] +addr = 0x02126094 +mode = "arm" +kind = "runtime_observed" +# hits = 3562 + +[[entry_point]] +addr = 0x02126160 +mode = "arm" +kind = "runtime_observed" +# hits = 3562 + +[[entry_point]] +addr = 0x02126198 +mode = "arm" +kind = "runtime_observed" +# hits = 3562 + +[[entry_point]] +addr = 0x021261D8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02126318 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021264F4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02126604 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02126674 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021267B4 +mode = "arm" +kind = "runtime_observed" +# hits = 28496 + +[[entry_point]] +addr = 0x02126874 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0212694C +mode = "arm" +kind = "runtime_observed" +# hits = 12272 + +[[entry_point]] +addr = 0x02126A10 +mode = "arm" +kind = "runtime_observed" +# hits = 12272 + +[[entry_point]] +addr = 0x02126C3C +mode = "arm" +kind = "runtime_observed" +# hits = 12174 + +[[entry_point]] +addr = 0x02126D2C +mode = "arm" +kind = "runtime_observed" +# hits = 12174 + +[[entry_point]] +addr = 0x02126E1C +mode = "arm" +kind = "runtime_observed" +# hits = 12174 + +[[entry_point]] +addr = 0x02126EC4 +mode = "arm" +kind = "runtime_observed" +# hits = 12174 + +[[entry_point]] +addr = 0x02126F14 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02126F28 +mode = "arm" +kind = "runtime_observed" +# hits = 7665 + +[[entry_point]] +addr = 0x02126F48 +mode = "arm" +kind = "runtime_observed" +# hits = 7665 + +[[entry_point]] +addr = 0x02127134 +mode = "arm" +kind = "runtime_observed" +# hits = 12087 + +[[entry_point]] +addr = 0x021271F0 +mode = "arm" +kind = "runtime_observed" +# hits = 6134 + +[[entry_point]] +addr = 0x021272A0 +mode = "arm" +kind = "runtime_observed" +# hits = 6138 + +[[entry_point]] +addr = 0x02127350 +mode = "arm" +kind = "runtime_observed" +# hits = 23502 + +[[entry_point]] +addr = 0x02127370 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x021273AC +mode = "arm" +kind = "runtime_observed" +# hits = 72419 + +[[entry_point]] +addr = 0x0212753C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0212AC40 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x0212AC78 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212ACB4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212ACBC +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0212AEE4 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x0212AF20 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212AF58 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x0212AF5C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212AF60 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0212B1B0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212B3CC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212B4F0 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0212B544 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0212CD44 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0212DC54 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212DCE4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212DD70 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0212DF5C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E060 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0212E210 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E2BC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E3B4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E740 +mode = "arm" +kind = "runtime_observed" +# hits = 32339 + +[[entry_point]] +addr = 0x0212E744 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0212E970 +mode = "arm" +kind = "runtime_observed" +# hits = 32307 + +[[entry_point]] +addr = 0x0212EA18 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212EBAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212EBB0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212ECAC +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0212ED0C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212ED48 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212EE40 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0212F760 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212FCAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212FCE0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02131244 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02131258 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02131278 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02131288 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0213198C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02131998 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02131A70 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02131AD4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02131B74 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02131BD8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02131DE0 +mode = "arm" +kind = "runtime_observed" +# hits = 20 + +[[entry_point]] +addr = 0x021327C8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02132820 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02132878 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021328D8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021328DC +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02133060 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02133108 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021331CC +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0213326C +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x02133310 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x02133374 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x021336D0 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x021337D4 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x021337EC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02133820 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02133854 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02133888 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x021338B8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021338F4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021338FC +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02133900 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02133904 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02133984 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x021339D4 +mode = "arm" +kind = "runtime_observed" +# hits = 17106 + +[[entry_point]] +addr = 0x021339F4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02133A60 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x02133D2C +mode = "arm" +kind = "runtime_observed" +# hits = 1404 + +[[entry_point]] +addr = 0x02133D48 +mode = "arm" +kind = "runtime_observed" +# hits = 645 + +[[entry_point]] +addr = 0x02133D58 +mode = "arm" +kind = "runtime_observed" +# hits = 220 + +[[entry_point]] +addr = 0x0213413C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02134158 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021341C4 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02134324 +mode = "arm" +kind = "runtime_observed" +# hits = 93 + +[[entry_point]] +addr = 0x0213438C +mode = "arm" +kind = "runtime_observed" +# hits = 96819 + +[[entry_point]] +addr = 0x021343BC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021343F4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02134434 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02134494 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021344E0 +mode = "arm" +kind = "runtime_observed" +# hits = 74 + +[[entry_point]] +addr = 0x021345B4 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x0213468C +mode = "arm" +kind = "runtime_observed" +# hits = 64767 + +[[entry_point]] +addr = 0x0213469C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021346B0 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021346C8 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x021346E0 +mode = "arm" +kind = "runtime_observed" +# hits = 127921 + +[[entry_point]] +addr = 0x02134704 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02134718 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0213478C +mode = "arm" +kind = "runtime_observed" +# hits = 130504 + +[[entry_point]] +addr = 0x021348C0 +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x021348D8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02134934 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02134990 +mode = "arm" +kind = "runtime_observed" +# hits = 899 + +[[entry_point]] +addr = 0x02134A90 +mode = "arm" +kind = "runtime_observed" +# hits = 1428 + +[[entry_point]] +addr = 0x02134AB8 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02134B00 +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x02134B34 +mode = "arm" +kind = "runtime_observed" +# hits = 24778 + +[[entry_point]] +addr = 0x02134B44 +mode = "arm" +kind = "runtime_observed" +# hits = 54421 + +[[entry_point]] +addr = 0x02134B78 +mode = "arm" +kind = "runtime_observed" +# hits = 6524 + +[[entry_point]] +addr = 0x02134B7C +mode = "arm" +kind = "runtime_observed" +# hits = 627 + +[[entry_point]] +addr = 0x02134B80 +mode = "arm" +kind = "runtime_observed" +# hits = 6711 + +[[entry_point]] +addr = 0x02134B8C +mode = "arm" +kind = "runtime_observed" +# hits = 189 + +[[entry_point]] +addr = 0x02134BC0 +mode = "arm" +kind = "runtime_observed" +# hits = 272 + +[[entry_point]] +addr = 0x02134BD4 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02134BF8 +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x02134C50 +mode = "arm" +kind = "runtime_observed" +# hits = 10720 + +[[entry_point]] +addr = 0x02134C54 +mode = "arm" +kind = "runtime_observed" +# hits = 4527 + +[[entry_point]] +addr = 0x02134C5C +mode = "arm" +kind = "runtime_observed" +# hits = 135 + +[[entry_point]] +addr = 0x02134C64 +mode = "arm" +kind = "runtime_observed" +# hits = 1020 + +[[entry_point]] +addr = 0x02134C80 +mode = "arm" +kind = "runtime_observed" +# hits = 1649 + +[[entry_point]] +addr = 0x02134C84 +mode = "arm" +kind = "runtime_observed" +# hits = 829 + +[[entry_point]] +addr = 0x02134C9C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02134E68 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02135020 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02135108 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02135154 +mode = "arm" +kind = "runtime_observed" +# hits = 30 + +[[entry_point]] +addr = 0x021351B4 +mode = "arm" +kind = "runtime_observed" +# hits = 30 + +[[entry_point]] +addr = 0x021351CC +mode = "arm" +kind = "runtime_observed" +# hits = 60 + +[[entry_point]] +addr = 0x02135408 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213548C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021354E4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02135524 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02135588 +mode = "arm" +kind = "runtime_observed" +# hits = 27 + +[[entry_point]] +addr = 0x0213560C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02135898 +mode = "arm" +kind = "runtime_observed" +# hits = 19 + +[[entry_point]] +addr = 0x02135950 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x02135BCC +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02135C20 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02135C88 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02135DAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02135F20 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02136014 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02136034 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02136074 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0213613C +mode = "arm" +kind = "runtime_observed" +# hits = 756 + +[[entry_point]] +addr = 0x021361C8 +mode = "arm" +kind = "runtime_observed" +# hits = 92 + +[[entry_point]] +addr = 0x021361F4 +mode = "arm" +kind = "runtime_observed" +# hits = 51352 + +[[entry_point]] +addr = 0x02136254 +mode = "arm" +kind = "runtime_observed" +# hits = 70 + +[[entry_point]] +addr = 0x021362D8 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02136304 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02136358 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021363D4 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02136428 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213645C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021364A0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021364D4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213653C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213655C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213658C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213660C +mode = "arm" +kind = "runtime_observed" +# hits = 4302 + +[[entry_point]] +addr = 0x02136668 +mode = "arm" +kind = "runtime_observed" +# hits = 8160 + +[[entry_point]] +addr = 0x02136748 +mode = "arm" +kind = "runtime_observed" +# hits = 790 + +[[entry_point]] +addr = 0x021367AC +mode = "arm" +kind = "runtime_observed" +# hits = 1044 + +[[entry_point]] +addr = 0x0213688C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213693C +mode = "arm" +kind = "runtime_observed" +# hits = 10720 + +[[entry_point]] +addr = 0x0213696C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02136A34 +mode = "arm" +kind = "runtime_observed" +# hits = 2753 + +[[entry_point]] +addr = 0x02136A80 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x02136AC0 +mode = "arm" +kind = "runtime_observed" +# hits = 2753 + +[[entry_point]] +addr = 0x02136B10 +mode = "arm" +kind = "runtime_observed" +# hits = 84350 + +[[entry_point]] +addr = 0x02136B20 +mode = "arm" +kind = "runtime_observed" +# hits = 23792 + +[[entry_point]] +addr = 0x02136B24 +mode = "arm" +kind = "runtime_observed" +# hits = 7730 + +[[entry_point]] +addr = 0x02136B44 +mode = "arm" +kind = "runtime_observed" +# hits = 9064 + +[[entry_point]] +addr = 0x02136B50 +mode = "arm" +kind = "runtime_observed" +# hits = 1404 + +[[entry_point]] +addr = 0x02136B54 +mode = "arm" +kind = "runtime_observed" +# hits = 26214 + +[[entry_point]] +addr = 0x02136B58 +mode = "arm" +kind = "runtime_observed" +# hits = 359 + +[[entry_point]] +addr = 0x02136B5C +mode = "arm" +kind = "runtime_observed" +# hits = 9627 + +[[entry_point]] +addr = 0x02136B70 +mode = "arm" +kind = "runtime_observed" +# hits = 8913 + +[[entry_point]] +addr = 0x02136C1C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02136C3C +mode = "arm" +kind = "runtime_observed" +# hits = 135954 + +[[entry_point]] +addr = 0x02136C7C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02136CA0 +mode = "arm" +kind = "runtime_observed" +# hits = 18898 + +[[entry_point]] +addr = 0x02136EE4 +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x02136F74 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02136FE8 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02137084 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021371B4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02137254 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02137284 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021372AC +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x0213786C +mode = "arm" +kind = "runtime_observed" +# hits = 23598 + +[[entry_point]] +addr = 0x021378DC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213790C +mode = "arm" +kind = "runtime_observed" +# hits = 17106 + +[[entry_point]] +addr = 0x02137BE8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02137DE4 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x02137F6C +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x021380BC +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x02138168 +mode = "arm" +kind = "runtime_observed" +# hits = 604 + +[[entry_point]] +addr = 0x021383E8 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x021387FC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213881C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213883C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213885C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02138868 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02138874 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02138880 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021389BC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021389F0 +mode = "arm" +kind = "runtime_observed" +# hits = 5338 + +[[entry_point]] +addr = 0x02138AE0 +mode = "arm" +kind = "runtime_observed" +# hits = 272 + +[[entry_point]] +addr = 0x02138C8C +mode = "arm" +kind = "runtime_observed" +# hits = 5081 + +[[entry_point]] +addr = 0x02138E50 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02138E58 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02138E60 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02138F28 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02138F38 +mode = "arm" +kind = "runtime_observed" +# hits = 31749 + +[[entry_point]] +addr = 0x02139054 +mode = "arm" +kind = "runtime_observed" +# hits = 31749 + +[[entry_point]] +addr = 0x0213911C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02139274 +mode = "arm" +kind = "runtime_observed" +# hits = 620 + +[[entry_point]] +addr = 0x021394E4 +mode = "arm" +kind = "runtime_observed" +# hits = 272 + +[[entry_point]] +addr = 0x021395E8 +mode = "arm" +kind = "runtime_observed" +# hits = 862 + +[[entry_point]] +addr = 0x0213966C +mode = "arm" +kind = "runtime_observed" +# hits = 9366 + +[[entry_point]] +addr = 0x021398B0 +mode = "arm" +kind = "runtime_observed" +# hits = 9366 + +[[entry_point]] +addr = 0x021398DC +mode = "arm" +kind = "runtime_observed" +# hits = 53277 + +[[entry_point]] +addr = 0x0213998C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021399C8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02139A30 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02139A34 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02139A38 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02139A58 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02139A74 +mode = "arm" +kind = "runtime_observed" +# hits = 1524 + +[[entry_point]] +addr = 0x02139A78 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02139AA0 +mode = "arm" +kind = "runtime_observed" +# hits = 13204 + +[[entry_point]] +addr = 0x02139AD8 +mode = "arm" +kind = "runtime_observed" +# hits = 17105 + +[[entry_point]] +addr = 0x02139D40 +mode = "arm" +kind = "runtime_observed" +# hits = 17105 + +[[entry_point]] +addr = 0x02139D5C +mode = "arm" +kind = "runtime_observed" +# hits = 3684 + +[[entry_point]] +addr = 0x02139D8C +mode = "arm" +kind = "runtime_observed" +# hits = 4768 + +[[entry_point]] +addr = 0x0213A1E0 +mode = "arm" +kind = "runtime_observed" +# hits = 3200 + +[[entry_point]] +addr = 0x0213A204 +mode = "arm" +kind = "runtime_observed" +# hits = 4542 + +[[entry_point]] +addr = 0x0213A2E8 +mode = "arm" +kind = "runtime_observed" +# hits = 57 + +[[entry_point]] +addr = 0x0213A318 +mode = "arm" +kind = "runtime_observed" +# hits = 3012 + +[[entry_point]] +addr = 0x0213A348 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x0213A378 +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x0213A390 +mode = "arm" +kind = "runtime_observed" +# hits = 3206 + +[[entry_point]] +addr = 0x0213A3A8 +mode = "arm" +kind = "runtime_observed" +# hits = 26 + +[[entry_point]] +addr = 0x0213A480 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0213A4B0 +mode = "arm" +kind = "runtime_observed" +# hits = 3240 + +[[entry_point]] +addr = 0x0213A4C8 +mode = "arm" +kind = "runtime_observed" +# hits = 9682 + +[[entry_point]] +addr = 0x0213A4F8 +mode = "arm" +kind = "runtime_observed" +# hits = 56 + +[[entry_point]] +addr = 0x0213A510 +mode = "arm" +kind = "runtime_observed" +# hits = 3240 + +[[entry_point]] +addr = 0x0213A528 +mode = "arm" +kind = "runtime_observed" +# hits = 10047 + +[[entry_point]] +addr = 0x0213A540 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0213A558 +mode = "arm" +kind = "runtime_observed" +# hits = 46 + +[[entry_point]] +addr = 0x0213A570 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0213A588 +mode = "arm" +kind = "runtime_observed" +# hits = 46 + +[[entry_point]] +addr = 0x0213A5B8 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x0213A5E8 +mode = "arm" +kind = "runtime_observed" +# hits = 52 + +[[entry_point]] +addr = 0x0213A618 +mode = "arm" +kind = "runtime_observed" +# hits = 4376 + +[[entry_point]] +addr = 0x0213AE98 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213AFB4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213AFB8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213AFBC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213AFD0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213AFD4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213B064 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213B104 +mode = "arm" +kind = "runtime_observed" +# hits = 730 + +[[entry_point]] +addr = 0x0213B128 +mode = "arm" +kind = "runtime_observed" +# hits = 4896 + +[[entry_point]] +addr = 0x0213B318 +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x0213B340 +mode = "arm" +kind = "runtime_observed" +# hits = 134 + +[[entry_point]] +addr = 0x0213B344 +mode = "arm" +kind = "runtime_observed" +# hits = 271 + +[[entry_point]] +addr = 0x0213B354 +mode = "arm" +kind = "runtime_observed" +# hits = 42 + +[[entry_point]] +addr = 0x0213B43C +mode = "arm" +kind = "runtime_observed" +# hits = 10936 + +[[entry_point]] +addr = 0x0213B510 +mode = "arm" +kind = "runtime_observed" +# hits = 5162 + +[[entry_point]] +addr = 0x0213B538 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213B53C +mode = "arm" +kind = "runtime_observed" +# hits = 2038 + +[[entry_point]] +addr = 0x0213B54C +mode = "arm" +kind = "runtime_observed" +# hits = 3123 + +[[entry_point]] +addr = 0x0213B750 +mode = "arm" +kind = "runtime_observed" +# hits = 5176 + +[[entry_point]] +addr = 0x0213B774 +mode = "arm" +kind = "runtime_observed" +# hits = 5793 + +[[entry_point]] +addr = 0x0213B78C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0213B790 +mode = "arm" +kind = "runtime_observed" +# hits = 2361 + +[[entry_point]] +addr = 0x0213B7A0 +mode = "arm" +kind = "runtime_observed" +# hits = 3429 + +[[entry_point]] +addr = 0x0213B96C +mode = "arm" +kind = "runtime_observed" +# hits = 11251 + +[[entry_point]] +addr = 0x0213BCCC +mode = "arm" +kind = "runtime_observed" +# hits = 3418 + +[[entry_point]] +addr = 0x0213BE04 +mode = "arm" +kind = "runtime_observed" +# hits = 1398 + +[[entry_point]] +addr = 0x0213BE6C +mode = "arm" +kind = "runtime_observed" +# hits = 3425 + +[[entry_point]] +addr = 0x0213BEB0 +mode = "arm" +kind = "runtime_observed" +# hits = 11383 + +[[entry_point]] +addr = 0x0213BEC4 +mode = "arm" +kind = "runtime_observed" +# hits = 1327 + +[[entry_point]] +addr = 0x0213BEE8 +mode = "arm" +kind = "runtime_observed" +# hits = 4527 + +[[entry_point]] +addr = 0x0213BFF0 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x0213C024 +mode = "arm" +kind = "runtime_observed" +# hits = 10711 + +[[entry_point]] +addr = 0x0213C178 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0213C18C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213C198 +mode = "arm" +kind = "runtime_observed" +# hits = 3200 + +[[entry_point]] +addr = 0x0213C328 +mode = "arm" +kind = "runtime_observed" +# hits = 5828 + +[[entry_point]] +addr = 0x0213C34C +mode = "arm" +kind = "runtime_observed" +# hits = 5942 + +[[entry_point]] +addr = 0x0213C3D4 +mode = "arm" +kind = "runtime_observed" +# hits = 3404 + +[[entry_point]] +addr = 0x0213C3E4 +mode = "arm" +kind = "runtime_observed" +# hits = 397 + +[[entry_point]] +addr = 0x0213C400 +mode = "arm" +kind = "runtime_observed" +# hits = 4057 + +[[entry_point]] +addr = 0x0213C41C +mode = "arm" +kind = "runtime_observed" +# hits = 4057 + +[[entry_point]] +addr = 0x0213C468 +mode = "arm" +kind = "runtime_observed" +# hits = 22513 + +[[entry_point]] +addr = 0x0213C484 +mode = "arm" +kind = "runtime_observed" +# hits = 22704 + +[[entry_point]] +addr = 0x0213C504 +mode = "arm" +kind = "runtime_observed" +# hits = 2826 + +[[entry_point]] +addr = 0x0213C954 +mode = "arm" +kind = "runtime_observed" +# hits = 11569 + +[[entry_point]] +addr = 0x0213C960 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213C970 +mode = "arm" +kind = "runtime_observed" +# hits = 18213 + +[[entry_point]] +addr = 0x0213C980 +mode = "arm" +kind = "runtime_observed" +# hits = 8798 + +[[entry_point]] +addr = 0x0213C9A4 +mode = "arm" +kind = "runtime_observed" +# hits = 18960 + +[[entry_point]] +addr = 0x0213CA48 +mode = "arm" +kind = "runtime_observed" +# hits = 2556 + +[[entry_point]] +addr = 0x0213CA64 +mode = "arm" +kind = "runtime_observed" +# hits = 6400 + +[[entry_point]] +addr = 0x0213CAAC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213CC10 +mode = "arm" +kind = "runtime_observed" +# hits = 916 + +[[entry_point]] +addr = 0x0213CC7C +mode = "arm" +kind = "runtime_observed" +# hits = 4973 + +[[entry_point]] +addr = 0x0213CCBC +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0213CCC4 +mode = "arm" +kind = "runtime_observed" +# hits = 70382 + +[[entry_point]] +addr = 0x0213CCE4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0213D6B4 +mode = "arm" +kind = "runtime_observed" +# hits = 43 + +[[entry_point]] +addr = 0x0213DE84 +mode = "arm" +kind = "runtime_observed" +# hits = 53485 + +[[entry_point]] +addr = 0x0213DE88 +mode = "arm" +kind = "runtime_observed" +# hits = 16854 + +[[entry_point]] +addr = 0x0213DF58 +mode = "arm" +kind = "runtime_observed" +# hits = 18764 + +[[entry_point]] +addr = 0x0213DFB8 +mode = "arm" +kind = "runtime_observed" +# hits = 4624 + +[[entry_point]] +addr = 0x0213E014 +mode = "arm" +kind = "runtime_observed" +# hits = 13752 + +[[entry_point]] +addr = 0x0213E06C +mode = "arm" +kind = "runtime_observed" +# hits = 13752 + +[[entry_point]] +addr = 0x0213E114 +mode = "arm" +kind = "runtime_observed" +# hits = 268 + +[[entry_point]] +addr = 0x0213E1EC +mode = "arm" +kind = "runtime_observed" +# hits = 65460 + +[[entry_point]] +addr = 0x0213E230 +mode = "arm" +kind = "runtime_observed" +# hits = 306136 + +[[entry_point]] +addr = 0x0213E234 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213E24C +mode = "arm" +kind = "runtime_observed" +# hits = 15664 + +[[entry_point]] +addr = 0x0213E370 +mode = "arm" +kind = "runtime_observed" +# hits = 15664 + +[[entry_point]] +addr = 0x0213E52C +mode = "arm" +kind = "runtime_observed" +# hits = 15664 + +[[entry_point]] +addr = 0x0213E548 +mode = "arm" +kind = "runtime_observed" +# hits = 2167 + +[[entry_point]] +addr = 0x0213E58C +mode = "arm" +kind = "runtime_observed" +# hits = 18722 + +[[entry_point]] +addr = 0x0213E5A4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213E6FC +mode = "arm" +kind = "runtime_observed" +# hits = 24 + +[[entry_point]] +addr = 0x0213E768 +mode = "arm" +kind = "runtime_observed" +# hits = 7124 + +[[entry_point]] +addr = 0x0213E7D8 +mode = "arm" +kind = "runtime_observed" +# hits = 180 + +[[entry_point]] +addr = 0x0213E894 +mode = "arm" +kind = "runtime_observed" +# hits = 42701 + +[[entry_point]] +addr = 0x0213E8A4 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x0213E8DC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213E90C +mode = "arm" +kind = "runtime_observed" +# hits = 786 + +[[entry_point]] +addr = 0x0213E91C +mode = "arm" +kind = "runtime_observed" +# hits = 12215 + +[[entry_point]] +addr = 0x0213E960 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0213E984 +mode = "arm" +kind = "runtime_observed" +# hits = 31 + +[[entry_point]] +addr = 0x0213E998 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213EA8C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0213EAB0 +mode = "arm" +kind = "runtime_observed" +# hits = 93535 + +[[entry_point]] +addr = 0x0213EACC +mode = "arm" +kind = "runtime_observed" +# hits = 69 + +[[entry_point]] +addr = 0x0213ED80 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213ED98 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213EDB0 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213EE8C +mode = "arm" +kind = "runtime_observed" +# hits = 96819 + +[[entry_point]] +addr = 0x0213EEA4 +mode = "arm" +kind = "runtime_observed" +# hits = 377150 + +[[entry_point]] +addr = 0x0213EEE0 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213EF6C +mode = "arm" +kind = "runtime_observed" +# hits = 169 + +[[entry_point]] +addr = 0x0213F44C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0213F4D4 +mode = "arm" +kind = "runtime_observed" +# hits = 12076 + +[[entry_point]] +addr = 0x0213F4F0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213F7A4 +mode = "arm" +kind = "runtime_observed" +# hits = 11285 + +[[entry_point]] +addr = 0x0213F9C4 +mode = "arm" +kind = "runtime_observed" +# hits = 12389 + +[[entry_point]] +addr = 0x0213FE98 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213FF58 +mode = "arm" +kind = "runtime_observed" +# hits = 8841 + +[[entry_point]] +addr = 0x02140168 +mode = "arm" +kind = "runtime_observed" +# hits = 163 + +[[entry_point]] +addr = 0x02140240 +mode = "arm" +kind = "runtime_observed" +# hits = 12116 + +[[entry_point]] +addr = 0x0214029C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02140500 +mode = "arm" +kind = "runtime_observed" +# hits = 12117 + +[[entry_point]] +addr = 0x021406EC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02140704 +mode = "arm" +kind = "runtime_observed" +# hits = 6049 + +[[entry_point]] +addr = 0x021407D0 +mode = "arm" +kind = "runtime_observed" +# hits = 12124 + +[[entry_point]] +addr = 0x0214081C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02140834 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0214089C +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x021408AC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02140D0C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02140D18 +mode = "arm" +kind = "runtime_observed" +# hits = 5862 + +[[entry_point]] +addr = 0x02140D34 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02140D98 +mode = "arm" +kind = "runtime_observed" +# hits = 776 + +[[entry_point]] +addr = 0x02140E74 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02141050 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02141114 +mode = "arm" +kind = "runtime_observed" +# hits = 5597 + +[[entry_point]] +addr = 0x0214144C +mode = "arm" +kind = "runtime_observed" +# hits = 268 + +[[entry_point]] +addr = 0x021414C4 +mode = "arm" +kind = "runtime_observed" +# hits = 12117 + +[[entry_point]] +addr = 0x021414E4 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x021414FC +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02141548 +mode = "arm" +kind = "runtime_observed" +# hits = 14055 + +[[entry_point]] +addr = 0x0214180C +mode = "arm" +kind = "runtime_observed" +# hits = 120664 + +[[entry_point]] +addr = 0x021418A0 +mode = "arm" +kind = "runtime_observed" +# hits = 241286 + +[[entry_point]] +addr = 0x02141964 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02141984 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02141A30 +mode = "arm" +kind = "runtime_observed" +# hits = 270 + +[[entry_point]] +addr = 0x02141A58 +mode = "arm" +kind = "runtime_observed" +# hits = 120664 + +[[entry_point]] +addr = 0x02141BFC +mode = "arm" +kind = "runtime_observed" +# hits = 5118 + +[[entry_point]] +addr = 0x02141EC0 +mode = "arm" +kind = "runtime_observed" +# hits = 1320 + +[[entry_point]] +addr = 0x02141EFC +mode = "arm" +kind = "runtime_observed" +# hits = 217 + +[[entry_point]] +addr = 0x02141F28 +mode = "arm" +kind = "runtime_observed" +# hits = 8295 + +[[entry_point]] +addr = 0x02142258 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021423AC +mode = "arm" +kind = "runtime_observed" +# hits = 11385 + +[[entry_point]] +addr = 0x0214253C +mode = "arm" +kind = "runtime_observed" +# hits = 12117 + +[[entry_point]] +addr = 0x021425F4 +mode = "arm" +kind = "runtime_observed" +# hits = 43 + +[[entry_point]] +addr = 0x0214266C +mode = "arm" +kind = "runtime_observed" +# hits = 38259 + +[[entry_point]] +addr = 0x021427A8 +mode = "arm" +kind = "runtime_observed" +# hits = 38259 + +[[entry_point]] +addr = 0x02142AAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02142B18 +mode = "arm" +kind = "runtime_observed" +# hits = 9323 + +[[entry_point]] +addr = 0x02142B68 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02142BC4 +mode = "arm" +kind = "runtime_observed" +# hits = 34744 + +[[entry_point]] +addr = 0x02142BCC +mode = "arm" +kind = "runtime_observed" +# hits = 69488 + +[[entry_point]] +addr = 0x02142BE8 +mode = "arm" +kind = "runtime_observed" +# hits = 137474 + +[[entry_point]] +addr = 0x02142C4C +mode = "arm" +kind = "runtime_observed" +# hits = 3390 + +[[entry_point]] +addr = 0x02142C68 +mode = "arm" +kind = "runtime_observed" +# hits = 954 + +[[entry_point]] +addr = 0x02142C6C +mode = "arm" +kind = "runtime_observed" +# hits = 1436 + +[[entry_point]] +addr = 0x02142C70 +mode = "arm" +kind = "runtime_observed" +# hits = 184 + +[[entry_point]] +addr = 0x02142C80 +mode = "arm" +kind = "runtime_observed" +# hits = 816 + +[[entry_point]] +addr = 0x02142E80 +mode = "arm" +kind = "runtime_observed" +# hits = 5040 + +[[entry_point]] +addr = 0x02142ED4 +mode = "arm" +kind = "runtime_observed" +# hits = 1159 + +[[entry_point]] +addr = 0x02142ED8 +mode = "arm" +kind = "runtime_observed" +# hits = 1669 + +[[entry_point]] +addr = 0x02142EDC +mode = "arm" +kind = "runtime_observed" +# hits = 1080 + +[[entry_point]] +addr = 0x02142EEC +mode = "arm" +kind = "runtime_observed" +# hits = 1132 diff --git a/config/mph_arm9_ov001.toml b/config/mph_arm9_ov001.toml new file mode 100644 index 0000000..e0ee93f --- /dev/null +++ b/config/mph_arm9_ov001.toml @@ -0,0 +1,424 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 1" +id = "mph_amhe0_arm9_ov001" +load_address = 0x02102220 +size = 0x00003100 +entry_pc = 0x02103010 +authoritative_entry_points = false + +[identity] +sha1 = "2f00682eea725221318d8f5ddff6541f10e5cba4" + +[[entry_point]] +addr = 0x02103010 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02103088 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02103144 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103154 +mode = "arm" +kind = "runtime_observed" +# hits = 68 + +[[entry_point]] +addr = 0x02103158 +mode = "arm" +kind = "runtime_observed" +# hits = 5885 + +[[entry_point]] +addr = 0x02103184 +mode = "arm" +kind = "runtime_observed" +# hits = 16999 + +[[entry_point]] +addr = 0x02103208 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0210324C +mode = "arm" +kind = "runtime_observed" +# hits = 33267 + +[[entry_point]] +addr = 0x021033DC +mode = "arm" +kind = "runtime_observed" +# hits = 33267 + +[[entry_point]] +addr = 0x0210346C +mode = "arm" +kind = "runtime_observed" +# hits = 104 + +[[entry_point]] +addr = 0x02103494 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x021034CC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021034D0 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x021034E8 +mode = "arm" +kind = "runtime_observed" +# hits = 21 + +[[entry_point]] +addr = 0x021034F4 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x02103510 +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x02103550 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021035CC +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021035F8 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103604 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103640 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021036E8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210372C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103740 +mode = "arm" +kind = "runtime_observed" +# hits = 13 + +[[entry_point]] +addr = 0x021037AC +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02103834 +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02103838 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0210384C +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02103868 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02103870 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103890 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x021038D4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02103954 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02103974 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02103994 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021039E8 +mode = "arm" +kind = "runtime_observed" +# hits = 17 + +[[entry_point]] +addr = 0x02103AA0 +mode = "arm" +kind = "runtime_observed" +# hits = 17 + +[[entry_point]] +addr = 0x02103B58 +mode = "arm" +kind = "runtime_observed" +# hits = 15233 + +[[entry_point]] +addr = 0x02103C04 +mode = "arm" +kind = "runtime_observed" +# hits = 15258 + +[[entry_point]] +addr = 0x02103D2C +mode = "arm" +kind = "runtime_observed" +# hits = 615 + +[[entry_point]] +addr = 0x02103DD0 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02103DF4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103FFC +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104094 +mode = "arm" +kind = "runtime_observed" +# hits = 615 + +[[entry_point]] +addr = 0x021040DC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021040E0 +mode = "arm" +kind = "runtime_observed" +# hits = 33 + +[[entry_point]] +addr = 0x021040F0 +mode = "arm" +kind = "runtime_observed" +# hits = 60 + +[[entry_point]] +addr = 0x021040F8 +mode = "arm" +kind = "runtime_observed" +# hits = 64 + +[[entry_point]] +addr = 0x02104100 +mode = "arm" +kind = "runtime_observed" +# hits = 446 + +[[entry_point]] +addr = 0x02104354 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021043EC +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0210463C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104738 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104764 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021047CC +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021048A4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210491C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02104928 +mode = "arm" +kind = "runtime_observed" +# hits = 14749 + +[[entry_point]] +addr = 0x021049CC +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021049FC +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x02104AB4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104B3C +mode = "arm" +kind = "runtime_observed" +# hits = 44 + +[[entry_point]] +addr = 0x02104BB0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104BF8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104CAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02104CFC +mode = "arm" +kind = "runtime_observed" +# hits = 648 + +[[entry_point]] +addr = 0x02104FDC +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02104FE0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 diff --git a/config/mph_arm9_ov002.toml b/config/mph_arm9_ov002.toml new file mode 100644 index 0000000..f363a2a --- /dev/null +++ b/config/mph_arm9_ov002.toml @@ -0,0 +1,3532 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 2" +id = "mph_amhe0_arm9_ov002" +load_address = 0x02102220 +size = 0x00020C20 +entry_pc = 0x02103010 +authoritative_entry_points = false + +[identity] +sha1 = "4a9a988e66776b9491651ef50efd68ab3f65e240" + +[[entry_point]] +addr = 0x02103010 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02103088 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02103144 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103154 +mode = "arm" +kind = "runtime_observed" +# hits = 68 + +[[entry_point]] +addr = 0x02103158 +mode = "arm" +kind = "runtime_observed" +# hits = 5885 + +[[entry_point]] +addr = 0x02103184 +mode = "arm" +kind = "runtime_observed" +# hits = 16999 + +[[entry_point]] +addr = 0x02103208 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0210324C +mode = "arm" +kind = "runtime_observed" +# hits = 33267 + +[[entry_point]] +addr = 0x021033DC +mode = "arm" +kind = "runtime_observed" +# hits = 33267 + +[[entry_point]] +addr = 0x0210346C +mode = "arm" +kind = "runtime_observed" +# hits = 104 + +[[entry_point]] +addr = 0x02103494 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x021034CC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021034D0 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x021034E8 +mode = "arm" +kind = "runtime_observed" +# hits = 21 + +[[entry_point]] +addr = 0x021034F4 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x02103510 +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x02103550 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021035CC +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021035F8 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103604 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103640 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021036E8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210372C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103740 +mode = "arm" +kind = "runtime_observed" +# hits = 13 + +[[entry_point]] +addr = 0x021037AC +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02103834 +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02103838 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0210384C +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02103868 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02103870 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02103890 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x021038D4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02103954 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02103974 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02103994 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021039E8 +mode = "arm" +kind = "runtime_observed" +# hits = 17 + +[[entry_point]] +addr = 0x02103AA0 +mode = "arm" +kind = "runtime_observed" +# hits = 17 + +[[entry_point]] +addr = 0x02103B58 +mode = "arm" +kind = "runtime_observed" +# hits = 15233 + +[[entry_point]] +addr = 0x02103C04 +mode = "arm" +kind = "runtime_observed" +# hits = 15258 + +[[entry_point]] +addr = 0x02103D2C +mode = "arm" +kind = "runtime_observed" +# hits = 615 + +[[entry_point]] +addr = 0x02103DD0 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02103DF4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02103FFC +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104094 +mode = "arm" +kind = "runtime_observed" +# hits = 615 + +[[entry_point]] +addr = 0x021040DC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021040E0 +mode = "arm" +kind = "runtime_observed" +# hits = 33 + +[[entry_point]] +addr = 0x021040F0 +mode = "arm" +kind = "runtime_observed" +# hits = 60 + +[[entry_point]] +addr = 0x021040F8 +mode = "arm" +kind = "runtime_observed" +# hits = 64 + +[[entry_point]] +addr = 0x02104100 +mode = "arm" +kind = "runtime_observed" +# hits = 446 + +[[entry_point]] +addr = 0x02104354 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021043EC +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0210463C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104738 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104764 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021047CC +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021048A4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210491C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02104928 +mode = "arm" +kind = "runtime_observed" +# hits = 14749 + +[[entry_point]] +addr = 0x021049CC +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021049FC +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x02104AB4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02104B3C +mode = "arm" +kind = "runtime_observed" +# hits = 44 + +[[entry_point]] +addr = 0x02104BB0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104BF8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02104CAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02104CFC +mode = "arm" +kind = "runtime_observed" +# hits = 648 + +[[entry_point]] +addr = 0x02104FDC +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02104FE0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021050C8 +mode = "arm" +kind = "runtime_observed" +# hits = 648 + +[[entry_point]] +addr = 0x02105198 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02105420 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02105444 +mode = "arm" +kind = "runtime_observed" +# hits = 35876 + +[[entry_point]] +addr = 0x02105468 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x02105508 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021055E8 +mode = "arm" +kind = "runtime_observed" +# hits = 35812 + +[[entry_point]] +addr = 0x021056C4 +mode = "arm" +kind = "runtime_observed" +# hits = 451 + +[[entry_point]] +addr = 0x021056E0 +mode = "arm" +kind = "runtime_observed" +# hits = 451 + +[[entry_point]] +addr = 0x02105790 +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x021057D0 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02105A64 +mode = "arm" +kind = "runtime_observed" +# hits = 431 + +[[entry_point]] +addr = 0x02105A9C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02105BFC +mode = "arm" +kind = "runtime_observed" +# hits = 35772 + +[[entry_point]] +addr = 0x02105CD4 +mode = "arm" +kind = "runtime_observed" +# hits = 430 + +[[entry_point]] +addr = 0x02105CF0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02105D68 +mode = "arm" +kind = "runtime_observed" +# hits = 431 + +[[entry_point]] +addr = 0x02105D7C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02105F2C +mode = "arm" +kind = "runtime_observed" +# hits = 431 + +[[entry_point]] +addr = 0x02105FB8 +mode = "arm" +kind = "runtime_observed" +# hits = 430 + +[[entry_point]] +addr = 0x02106028 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02106098 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02106108 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02106204 +mode = "arm" +kind = "runtime_observed" +# hits = 50 + +[[entry_point]] +addr = 0x02106248 +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x021062A8 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02106444 +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x02106460 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021064BC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021064DC +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x02106508 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02106538 +mode = "arm" +kind = "runtime_observed" +# hits = 34 + +[[entry_point]] +addr = 0x0210661C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210664C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021066A4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021066B0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02106788 +mode = "arm" +kind = "runtime_observed" +# hits = 45275 + +[[entry_point]] +addr = 0x02106790 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02106824 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210690C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02106A3C +mode = "arm" +kind = "runtime_observed" +# hits = 878 + +[[entry_point]] +addr = 0x02106AB8 +mode = "arm" +kind = "runtime_observed" +# hits = 58 + +[[entry_point]] +addr = 0x02106B5C +mode = "arm" +kind = "runtime_observed" +# hits = 3562 + +[[entry_point]] +addr = 0x02106BB4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02106C34 +mode = "arm" +kind = "runtime_observed" +# hits = 4584 + +[[entry_point]] +addr = 0x02106CE4 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02106D80 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x02106DAC +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x02106E8C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02106F04 +mode = "arm" +kind = "runtime_observed" +# hits = 72458 + +[[entry_point]] +addr = 0x02106F9C +mode = "arm" +kind = "runtime_observed" +# hits = 69566 + +[[entry_point]] +addr = 0x02106FE8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021071D0 +mode = "arm" +kind = "runtime_observed" +# hits = 23 + +[[entry_point]] +addr = 0x021071D4 +mode = "arm" +kind = "runtime_observed" +# hits = 23 + +[[entry_point]] +addr = 0x021072E0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021074A4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021075A0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021075D8 +mode = "arm" +kind = "runtime_observed" +# hits = 81 + +[[entry_point]] +addr = 0x021076E0 +mode = "arm" +kind = "runtime_observed" +# hits = 51230 + +[[entry_point]] +addr = 0x02107730 +mode = "arm" +kind = "runtime_observed" +# hits = 54674 + +[[entry_point]] +addr = 0x02107808 +mode = "arm" +kind = "runtime_observed" +# hits = 51586 + +[[entry_point]] +addr = 0x02107894 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02107B54 +mode = "arm" +kind = "runtime_observed" +# hits = 89 + +[[entry_point]] +addr = 0x02107D80 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02107F20 +mode = "arm" +kind = "runtime_observed" +# hits = 38 + +[[entry_point]] +addr = 0x0210843C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021086C4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02108E10 +mode = "arm" +kind = "runtime_observed" +# hits = 906 + +[[entry_point]] +addr = 0x02108FD4 +mode = "arm" +kind = "runtime_observed" +# hits = 906 + +[[entry_point]] +addr = 0x0210A568 +mode = "arm" +kind = "runtime_observed" +# hits = 50 + +[[entry_point]] +addr = 0x0210A600 +mode = "arm" +kind = "runtime_observed" +# hits = 50 + +[[entry_point]] +addr = 0x0210A9CC +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0210AA84 +mode = "arm" +kind = "runtime_observed" +# hits = 82996 + +[[entry_point]] +addr = 0x0210ABE8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210AD58 +mode = "arm" +kind = "runtime_observed" +# hits = 3899 + +[[entry_point]] +addr = 0x0210AFB0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210B2C0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210B5EC +mode = "arm" +kind = "runtime_observed" +# hits = 6888 + +[[entry_point]] +addr = 0x0210B5F0 +mode = "arm" +kind = "runtime_observed" +# hits = 6824 + +[[entry_point]] +addr = 0x0210B87C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210B8C0 +mode = "arm" +kind = "runtime_observed" +# hits = 4004 + +[[entry_point]] +addr = 0x0210BA44 +mode = "arm" +kind = "runtime_observed" +# hits = 2820 + +[[entry_point]] +addr = 0x0210BAD8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210BC6C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0210BF98 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210C1D8 +mode = "arm" +kind = "runtime_observed" +# hits = 9718 + +[[entry_point]] +addr = 0x0210C24C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210C27C +mode = "arm" +kind = "runtime_observed" +# hits = 9426 + +[[entry_point]] +addr = 0x0210C418 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0210C494 +mode = "arm" +kind = "runtime_observed" +# hits = 33 + +[[entry_point]] +addr = 0x0210CA1C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0210CB34 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210CF2C +mode = "arm" +kind = "runtime_observed" +# hits = 12028 + +[[entry_point]] +addr = 0x0210D024 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210D0C0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210D434 +mode = "arm" +kind = "runtime_observed" +# hits = 6888 + +[[entry_point]] +addr = 0x0210D48C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0210D6A4 +mode = "arm" +kind = "runtime_observed" +# hits = 6824 + +[[entry_point]] +addr = 0x0210DC64 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0210DC68 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0210E234 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210E534 +mode = "arm" +kind = "runtime_observed" +# hits = 47202 + +[[entry_point]] +addr = 0x0210E6A8 +mode = "arm" +kind = "runtime_observed" +# hits = 31685 + +[[entry_point]] +addr = 0x0210E79C +mode = "arm" +kind = "runtime_observed" +# hits = 33267 + +[[entry_point]] +addr = 0x0210E7DC +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0210EEB8 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0210F104 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211006C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021100C4 +mode = "arm" +kind = "runtime_observed" +# hits = 188528 + +[[entry_point]] +addr = 0x02110128 +mode = "arm" +kind = "runtime_observed" +# hits = 101150 + +[[entry_point]] +addr = 0x0211014C +mode = "arm" +kind = "runtime_observed" +# hits = 254 + +[[entry_point]] +addr = 0x021101D4 +mode = "arm" +kind = "runtime_observed" +# hits = 107424 + +[[entry_point]] +addr = 0x02110308 +mode = "arm" +kind = "runtime_observed" +# hits = 227860 + +[[entry_point]] +addr = 0x02110494 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x021104E8 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02110528 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02110530 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02110568 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02110570 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021105A8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02110610 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x02110630 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211064C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02110690 +mode = "arm" +kind = "runtime_observed" +# hits = 98568 + +[[entry_point]] +addr = 0x0211070C +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x021107A4 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x02110834 +mode = "arm" +kind = "runtime_observed" +# hits = 77585 + +[[entry_point]] +addr = 0x02110844 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x02110860 +mode = "arm" +kind = "runtime_observed" +# hits = 77585 + +[[entry_point]] +addr = 0x021108B4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02110BD8 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x02110D58 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x02110DA0 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02110DC4 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02110E44 +mode = "arm" +kind = "runtime_observed" +# hits = 124 + +[[entry_point]] +addr = 0x02110E54 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02110EE0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02110F20 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02110F28 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021110F0 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02111190 +mode = "arm" +kind = "runtime_observed" +# hits = 1394 + +[[entry_point]] +addr = 0x02111214 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x02111298 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x02111320 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211133C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02111354 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02111388 +mode = "arm" +kind = "runtime_observed" +# hits = 20164 + +[[entry_point]] +addr = 0x02111418 +mode = "arm" +kind = "runtime_observed" +# hits = 54 + +[[entry_point]] +addr = 0x02111478 +mode = "arm" +kind = "runtime_observed" +# hits = 523 + +[[entry_point]] +addr = 0x021114BC +mode = "arm" +kind = "runtime_observed" +# hits = 785 + +[[entry_point]] +addr = 0x0211151C +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x02111558 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211155C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02111560 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0211156C +mode = "arm" +kind = "runtime_observed" +# hits = 24658 + +[[entry_point]] +addr = 0x02111614 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02111680 +mode = "arm" +kind = "runtime_observed" +# hits = 20164 + +[[entry_point]] +addr = 0x02111718 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021118B4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02111A78 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02111C8C +mode = "arm" +kind = "runtime_observed" +# hits = 20164 + +[[entry_point]] +addr = 0x02111CA4 +mode = "arm" +kind = "runtime_observed" +# hits = 25343 + +[[entry_point]] +addr = 0x02111CF4 +mode = "arm" +kind = "runtime_observed" +# hits = 4649 + +[[entry_point]] +addr = 0x02111D4C +mode = "arm" +kind = "runtime_observed" +# hits = 20164 + +[[entry_point]] +addr = 0x02111D80 +mode = "arm" +kind = "runtime_observed" +# hits = 169017 + +[[entry_point]] +addr = 0x02111DF8 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02111E10 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02111EBC +mode = "arm" +kind = "runtime_observed" +# hits = 89241 + +[[entry_point]] +addr = 0x02111EF4 +mode = "arm" +kind = "runtime_observed" +# hits = 65270 + +[[entry_point]] +addr = 0x02111F20 +mode = "arm" +kind = "runtime_observed" +# hits = 24658 + +[[entry_point]] +addr = 0x02111F48 +mode = "arm" +kind = "runtime_observed" +# hits = 20164 + +[[entry_point]] +addr = 0x02111FA0 +mode = "arm" +kind = "runtime_observed" +# hits = 834 + +[[entry_point]] +addr = 0x0211204C +mode = "arm" +kind = "runtime_observed" +# hits = 685 + +[[entry_point]] +addr = 0x021120B4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021120D4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021121D4 +mode = "arm" +kind = "runtime_observed" +# hits = 350 + +[[entry_point]] +addr = 0x0211232C +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x02112518 +mode = "arm" +kind = "runtime_observed" +# hits = 636 + +[[entry_point]] +addr = 0x0211251C +mode = "arm" +kind = "runtime_observed" +# hits = 758 + +[[entry_point]] +addr = 0x02112520 +mode = "arm" +kind = "runtime_observed" +# hits = 70 + +[[entry_point]] +addr = 0x02112524 +mode = "arm" +kind = "runtime_observed" +# hits = 994 + +[[entry_point]] +addr = 0x02112528 +mode = "arm" +kind = "runtime_observed" +# hits = 137 + +[[entry_point]] +addr = 0x02112694 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126A8 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126AC +mode = "arm" +kind = "runtime_observed" +# hits = 2648 + +[[entry_point]] +addr = 0x021126B0 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126B4 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126B8 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126BC +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126C0 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126C4 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126C8 +mode = "arm" +kind = "runtime_observed" +# hits = 2597 + +[[entry_point]] +addr = 0x021126CC +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126D0 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126D4 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126D8 +mode = "arm" +kind = "runtime_observed" +# hits = 2597 + +[[entry_point]] +addr = 0x021126DC +mode = "arm" +kind = "runtime_observed" +# hits = 2597 + +[[entry_point]] +addr = 0x021126E0 +mode = "arm" +kind = "runtime_observed" +# hits = 2597 + +[[entry_point]] +addr = 0x021126E4 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126E8 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126EC +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x021126F0 +mode = "arm" +kind = "runtime_observed" +# hits = 2601 + +[[entry_point]] +addr = 0x021126F4 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021126FC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02112704 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211273C +mode = "arm" +kind = "runtime_observed" +# hits = 50 + +[[entry_point]] +addr = 0x02112888 +mode = "arm" +kind = "runtime_observed" +# hits = 15224 + +[[entry_point]] +addr = 0x02112AD0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02112BB0 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02112E80 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02112F18 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02112F9C +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02112FB4 +mode = "arm" +kind = "runtime_observed" +# hits = 48 + +[[entry_point]] +addr = 0x02112FDC +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02113134 +mode = "arm" +kind = "runtime_observed" +# hits = 36 + +[[entry_point]] +addr = 0x02113174 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211320C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211324C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211326C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02113298 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x021132B8 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021134B8 +mode = "arm" +kind = "runtime_observed" +# hits = 5780 + +[[entry_point]] +addr = 0x02113568 +mode = "arm" +kind = "runtime_observed" +# hits = 5302 + +[[entry_point]] +addr = 0x02113684 +mode = "arm" +kind = "runtime_observed" +# hits = 1637 + +[[entry_point]] +addr = 0x02113700 +mode = "arm" +kind = "runtime_observed" +# hits = 7692 + +[[entry_point]] +addr = 0x02113744 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021137AC +mode = "arm" +kind = "runtime_observed" +# hits = 283 + +[[entry_point]] +addr = 0x02113848 +mode = "arm" +kind = "runtime_observed" +# hits = 816 + +[[entry_point]] +addr = 0x021138BC +mode = "arm" +kind = "runtime_observed" +# hits = 220 + +[[entry_point]] +addr = 0x021138F4 +mode = "arm" +kind = "runtime_observed" +# hits = 839 + +[[entry_point]] +addr = 0x02113984 +mode = "arm" +kind = "runtime_observed" +# hits = 9364 + +[[entry_point]] +addr = 0x02113B30 +mode = "arm" +kind = "runtime_observed" +# hits = 582 + +[[entry_point]] +addr = 0x02113BE8 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02113C20 +mode = "arm" +kind = "runtime_observed" +# hits = 4500 + +[[entry_point]] +addr = 0x02113C24 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02113C80 +mode = "arm" +kind = "runtime_observed" +# hits = 54528 + +[[entry_point]] +addr = 0x02113CD0 +mode = "arm" +kind = "runtime_observed" +# hits = 56533 + +[[entry_point]] +addr = 0x02113D58 +mode = "arm" +kind = "runtime_observed" +# hits = 10350 + +[[entry_point]] +addr = 0x02113DB8 +mode = "arm" +kind = "runtime_observed" +# hits = 8494 + +[[entry_point]] +addr = 0x02113DCC +mode = "arm" +kind = "runtime_observed" +# hits = 849 + +[[entry_point]] +addr = 0x02113DF4 +mode = "arm" +kind = "runtime_observed" +# hits = 9860 + +[[entry_point]] +addr = 0x02113E08 +mode = "arm" +kind = "runtime_observed" +# hits = 68469 + +[[entry_point]] +addr = 0x02113E3C +mode = "arm" +kind = "runtime_observed" +# hits = 263519 + +[[entry_point]] +addr = 0x02113F58 +mode = "arm" +kind = "runtime_observed" +# hits = 9266 + +[[entry_point]] +addr = 0x02113FA0 +mode = "arm" +kind = "runtime_observed" +# hits = 12545 + +[[entry_point]] +addr = 0x02114024 +mode = "arm" +kind = "runtime_observed" +# hits = 72391 + +[[entry_point]] +addr = 0x02114034 +mode = "arm" +kind = "runtime_observed" +# hits = 829 + +[[entry_point]] +addr = 0x02114044 +mode = "arm" +kind = "runtime_observed" +# hits = 266 + +[[entry_point]] +addr = 0x02114064 +mode = "arm" +kind = "runtime_observed" +# hits = 91531 + +[[entry_point]] +addr = 0x02114074 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x021140D4 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0211411C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02114228 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x021142E4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021142F4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021142F8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021142FC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211430C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02114310 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02114318 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02114320 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021144E8 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x0211452C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02114550 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02114648 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x021146B4 +mode = "arm" +kind = "runtime_observed" +# hits = 69692 + +[[entry_point]] +addr = 0x02114730 +mode = "arm" +kind = "runtime_observed" +# hits = 2526 + +[[entry_point]] +addr = 0x02114780 +mode = "arm" +kind = "runtime_observed" +# hits = 17834 + +[[entry_point]] +addr = 0x021147C4 +mode = "arm" +kind = "runtime_observed" +# hits = 47714 + +[[entry_point]] +addr = 0x02114814 +mode = "arm" +kind = "runtime_observed" +# hits = 910 + +[[entry_point]] +addr = 0x02114AB8 +mode = "arm" +kind = "runtime_observed" +# hits = 12777 + +[[entry_point]] +addr = 0x02114AF4 +mode = "arm" +kind = "runtime_observed" +# hits = 27 + +[[entry_point]] +addr = 0x02114B1C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02114B2C +mode = "arm" +kind = "runtime_observed" +# hits = 9178 + +[[entry_point]] +addr = 0x02114C34 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02114F2C +mode = "arm" +kind = "runtime_observed" +# hits = 16354 + +[[entry_point]] +addr = 0x02115000 +mode = "arm" +kind = "runtime_observed" +# hits = 16904 + +[[entry_point]] +addr = 0x02115014 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021150E4 +mode = "arm" +kind = "runtime_observed" +# hits = 2705 + +[[entry_point]] +addr = 0x0211511C +mode = "arm" +kind = "runtime_observed" +# hits = 17 + +[[entry_point]] +addr = 0x02115124 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211512C +mode = "arm" +kind = "runtime_observed" +# hits = 96 + +[[entry_point]] +addr = 0x02115168 +mode = "arm" +kind = "runtime_observed" +# hits = 2705 + +[[entry_point]] +addr = 0x0211516C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02115208 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02115260 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211527C +mode = "arm" +kind = "runtime_observed" +# hits = 32 + +[[entry_point]] +addr = 0x0211528C +mode = "arm" +kind = "runtime_observed" +# hits = 24 + +[[entry_point]] +addr = 0x02115308 +mode = "arm" +kind = "runtime_observed" +# hits = 94 + +[[entry_point]] +addr = 0x021153B4 +mode = "arm" +kind = "runtime_observed" +# hits = 760 + +[[entry_point]] +addr = 0x0211540C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02115490 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021154F8 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02115554 +mode = "arm" +kind = "runtime_observed" +# hits = 2764 + +[[entry_point]] +addr = 0x02115700 +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x021157CC +mode = "arm" +kind = "runtime_observed" +# hits = 95841 + +[[entry_point]] +addr = 0x021157D8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021158C4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021158EC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115A5C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02115A60 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02115A64 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02115A68 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02115A6C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02115A70 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02115A90 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02115A94 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02115A98 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AA0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AA4 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02115ABC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AC0 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02115AC4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AC8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115ACC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AE8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AF4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115AFC +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02115B04 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02115B08 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02115B0C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02115B18 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02115DB0 +mode = "arm" +kind = "runtime_observed" +# hits = 16637 + +[[entry_point]] +addr = 0x02115F88 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02115FB4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021161FC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02116404 +mode = "arm" +kind = "runtime_observed" +# hits = 910 + +[[entry_point]] +addr = 0x02116458 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021164F4 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02116514 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02116520 +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x021165D4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021166F4 +mode = "arm" +kind = "runtime_observed" +# hits = 77 + +[[entry_point]] +addr = 0x021167A8 +mode = "arm" +kind = "runtime_observed" +# hits = 771 + +[[entry_point]] +addr = 0x02116814 +mode = "arm" +kind = "runtime_observed" +# hits = 165 + +[[entry_point]] +addr = 0x0211685C +mode = "arm" +kind = "runtime_observed" +# hits = 5488 + +[[entry_point]] +addr = 0x021168A8 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x021168C4 +mode = "arm" +kind = "runtime_observed" +# hits = 21224 + +[[entry_point]] +addr = 0x02116980 +mode = "arm" +kind = "runtime_observed" +# hits = 20127 + +[[entry_point]] +addr = 0x02116A14 +mode = "arm" +kind = "runtime_observed" +# hits = 12918 + +[[entry_point]] +addr = 0x02116A44 +mode = "arm" +kind = "runtime_observed" +# hits = 2489 + +[[entry_point]] +addr = 0x02116AB0 +mode = "arm" +kind = "runtime_observed" +# hits = 25823 + +[[entry_point]] +addr = 0x02116ACC +mode = "arm" +kind = "runtime_observed" +# hits = 26423 + +[[entry_point]] +addr = 0x02116AE8 +mode = "arm" +kind = "runtime_observed" +# hits = 2595 + +[[entry_point]] +addr = 0x02116BFC +mode = "arm" +kind = "runtime_observed" +# hits = 5171 + +[[entry_point]] +addr = 0x02116C18 +mode = "arm" +kind = "runtime_observed" +# hits = 5459 + +[[entry_point]] +addr = 0x02116C34 +mode = "arm" +kind = "runtime_observed" +# hits = 853 + +[[entry_point]] +addr = 0x02116C84 +mode = "arm" +kind = "runtime_observed" +# hits = 1703 + +[[entry_point]] +addr = 0x02116CA0 +mode = "arm" +kind = "runtime_observed" +# hits = 1895 + +[[entry_point]] +addr = 0x02116CBC +mode = "arm" +kind = "runtime_observed" +# hits = 20164 + +[[entry_point]] +addr = 0x02116D38 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02116DD4 +mode = "arm" +kind = "runtime_observed" +# hits = 80220 + +[[entry_point]] +addr = 0x02116E10 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02116E50 +mode = "arm" +kind = "runtime_observed" +# hits = 111636 + +[[entry_point]] +addr = 0x02117360 +mode = "arm" +kind = "runtime_observed" +# hits = 23181 + +[[entry_point]] +addr = 0x021173B0 +mode = "arm" +kind = "runtime_observed" +# hits = 20983 + +[[entry_point]] +addr = 0x02117408 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021174D4 +mode = "arm" +kind = "runtime_observed" +# hits = 9797 + +[[entry_point]] +addr = 0x0211770C +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x02117748 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02117750 +mode = "arm" +kind = "runtime_observed" +# hits = 653 + +[[entry_point]] +addr = 0x02117790 +mode = "arm" +kind = "runtime_observed" +# hits = 795 + +[[entry_point]] +addr = 0x021177B0 +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x021177D4 +mode = "arm" +kind = "runtime_observed" +# hits = 15225 + +[[entry_point]] +addr = 0x02117810 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02117864 +mode = "arm" +kind = "runtime_observed" +# hits = 463 + +[[entry_point]] +addr = 0x0211790C +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x021179C8 +mode = "arm" +kind = "runtime_observed" +# hits = 15518 + +[[entry_point]] +addr = 0x021179F0 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021180F8 +mode = "arm" +kind = "runtime_observed" +# hits = 56050 + +[[entry_point]] +addr = 0x02118210 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021185FC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211862C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211864C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02118844 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021188EC +mode = "arm" +kind = "runtime_observed" +# hits = 63103 + +[[entry_point]] +addr = 0x02118960 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02118C50 +mode = "arm" +kind = "runtime_observed" +# hits = 129670 + +[[entry_point]] +addr = 0x02118D90 +mode = "arm" +kind = "runtime_observed" +# hits = 1904 + +[[entry_point]] +addr = 0x02118D94 +mode = "arm" +kind = "runtime_observed" +# hits = 790 + +[[entry_point]] +addr = 0x02118D98 +mode = "arm" +kind = "runtime_observed" +# hits = 20653 + +[[entry_point]] +addr = 0x02118D9C +mode = "arm" +kind = "runtime_observed" +# hits = 91235 + +[[entry_point]] +addr = 0x02118DA0 +mode = "arm" +kind = "runtime_observed" +# hits = 18974 + +[[entry_point]] +addr = 0x02118DA4 +mode = "arm" +kind = "runtime_observed" +# hits = 887 + +[[entry_point]] +addr = 0x02118DA8 +mode = "arm" +kind = "runtime_observed" +# hits = 2399 + +[[entry_point]] +addr = 0x02118F90 +mode = "arm" +kind = "runtime_observed" +# hits = 3168 + +[[entry_point]] +addr = 0x02118F94 +mode = "arm" +kind = "runtime_observed" +# hits = 2190 + +[[entry_point]] +addr = 0x02118F98 +mode = "arm" +kind = "runtime_observed" +# hits = 80604 + +[[entry_point]] +addr = 0x02118F9C +mode = "arm" +kind = "runtime_observed" +# hits = 82477 + +[[entry_point]] +addr = 0x02118FA0 +mode = "arm" +kind = "runtime_observed" +# hits = 10778 + +[[entry_point]] +addr = 0x02118FA4 +mode = "arm" +kind = "runtime_observed" +# hits = 1892 + +[[entry_point]] +addr = 0x02118FA8 +mode = "arm" +kind = "runtime_observed" +# hits = 26642 + +[[entry_point]] +addr = 0x021191A0 +mode = "arm" +kind = "runtime_observed" +# hits = 4681 + +[[entry_point]] +addr = 0x021191A4 +mode = "arm" +kind = "runtime_observed" +# hits = 527 + +[[entry_point]] +addr = 0x021191A8 +mode = "arm" +kind = "runtime_observed" +# hits = 16777 + +[[entry_point]] +addr = 0x021191AC +mode = "arm" +kind = "runtime_observed" +# hits = 95823 + +[[entry_point]] +addr = 0x021191B0 +mode = "arm" +kind = "runtime_observed" +# hits = 15636 + +[[entry_point]] +addr = 0x021191B4 +mode = "arm" +kind = "runtime_observed" +# hits = 400 + +[[entry_point]] +addr = 0x021191B8 +mode = "arm" +kind = "runtime_observed" +# hits = 5146 + +[[entry_point]] +addr = 0x02119274 +mode = "arm" +kind = "runtime_observed" +# hits = 49491 + +[[entry_point]] +addr = 0x02119370 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x021193B8 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021193E4 +mode = "arm" +kind = "runtime_observed" +# hits = 37887 + +[[entry_point]] +addr = 0x0211943C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211953C +mode = "arm" +kind = "runtime_observed" +# hits = 13772 + +[[entry_point]] +addr = 0x02119630 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02119784 +mode = "arm" +kind = "runtime_observed" +# hits = 55323 + +[[entry_point]] +addr = 0x02119A1C +mode = "arm" +kind = "runtime_observed" +# hits = 37997 + +[[entry_point]] +addr = 0x0211A56C +mode = "arm" +kind = "runtime_observed" +# hits = 75994 + +[[entry_point]] +addr = 0x0211A65C +mode = "arm" +kind = "runtime_observed" +# hits = 13772 + +[[entry_point]] +addr = 0x0211A6EC +mode = "arm" +kind = "runtime_observed" +# hits = 48270 + +[[entry_point]] +addr = 0x0211A720 +mode = "arm" +kind = "runtime_observed" +# hits = 84501 + +[[entry_point]] +addr = 0x0211A7E0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211A830 +mode = "arm" +kind = "runtime_observed" +# hits = 10719 + +[[entry_point]] +addr = 0x0211A868 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211A878 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211A884 +mode = "arm" +kind = "runtime_observed" +# hits = 13652 + +[[entry_point]] +addr = 0x0211A8B4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211A8D0 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211AA20 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0211AC00 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211ACF4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211AE68 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211AFD0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211B004 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0211B1F4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211B270 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211B28C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211B8E4 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0211B8F4 +mode = "arm" +kind = "runtime_observed" +# hits = 245 + +[[entry_point]] +addr = 0x0211B904 +mode = "arm" +kind = "runtime_observed" +# hits = 284 + +[[entry_point]] +addr = 0x0211BAC4 +mode = "arm" +kind = "runtime_observed" +# hits = 208 + +[[entry_point]] +addr = 0x0211BCC0 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211BCFC +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211BD84 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211BDB4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211BF60 +mode = "arm" +kind = "runtime_observed" +# hits = 2614 + +[[entry_point]] +addr = 0x0211BFE4 +mode = "arm" +kind = "runtime_observed" +# hits = 1432 + +[[entry_point]] +addr = 0x0211C070 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211C08C +mode = "arm" +kind = "runtime_observed" +# hits = 403 + +[[entry_point]] +addr = 0x0211C120 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C12C +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x0211C13C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C148 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0211C154 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C188 +mode = "arm" +kind = "runtime_observed" +# hits = 13 + +[[entry_point]] +addr = 0x0211C18C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211C1A0 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211C1B0 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211C1BC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211C1C8 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211C22C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C27C +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211C318 +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x0211C388 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211C4DC +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211C518 +mode = "arm" +kind = "runtime_observed" +# hits = 77585 + +[[entry_point]] +addr = 0x0211C59C +mode = "arm" +kind = "runtime_observed" +# hits = 15517 + +[[entry_point]] +addr = 0x0211C5B0 +mode = "arm" +kind = "runtime_observed" +# hits = 1432 + +[[entry_point]] +addr = 0x0211C6B4 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x0211C764 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211C7C4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211C830 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0211C8A4 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0211C8E0 +mode = "arm" +kind = "runtime_observed" +# hits = 1432 + +[[entry_point]] +addr = 0x0211CA18 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0211CA34 +mode = "arm" +kind = "runtime_observed" +# hits = 110 + +[[entry_point]] +addr = 0x0211CA50 +mode = "arm" +kind = "runtime_observed" +# hits = 30 + +[[entry_point]] +addr = 0x0211CA60 +mode = "arm" +kind = "runtime_observed" +# hits = 5728 + +[[entry_point]] +addr = 0x0211CAB4 +mode = "arm" +kind = "runtime_observed" +# hits = 5728 + +[[entry_point]] +addr = 0x0211CB80 +mode = "arm" +kind = "runtime_observed" +# hits = 5728 + +[[entry_point]] +addr = 0x0211CC04 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0211CC6C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211CE64 +mode = "arm" +kind = "runtime_observed" +# hits = 19820 + +[[entry_point]] +addr = 0x0211D244 +mode = "arm" +kind = "runtime_observed" +# hits = 151254 + +[[entry_point]] +addr = 0x0211D4B4 +mode = "arm" +kind = "runtime_observed" +# hits = 16178 + +[[entry_point]] +addr = 0x0211D59C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211D5C4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211D690 +mode = "arm" +kind = "runtime_observed" +# hits = 109174 + +[[entry_point]] +addr = 0x0211D704 +mode = "arm" +kind = "runtime_observed" +# hits = 6837 + +[[entry_point]] +addr = 0x0211D774 +mode = "arm" +kind = "runtime_observed" +# hits = 5728 + +[[entry_point]] +addr = 0x0211DCD8 +mode = "arm" +kind = "runtime_observed" +# hits = 23116 + +[[entry_point]] +addr = 0x0211DD2C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211E41C +mode = "arm" +kind = "runtime_observed" +# hits = 2705 + +[[entry_point]] +addr = 0x0211E428 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211E438 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x0211E444 +mode = "arm" +kind = "runtime_observed" +# hits = 2753 + +[[entry_point]] +addr = 0x0211E4A8 +mode = "arm" +kind = "runtime_observed" +# hits = 2764 + +[[entry_point]] +addr = 0x0211E4C0 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211E548 +mode = "arm" +kind = "runtime_observed" +# hits = 11354 + +[[entry_point]] +addr = 0x0211E560 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211E568 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0211E56C +mode = "arm" +kind = "runtime_observed" +# hits = 39 + +[[entry_point]] +addr = 0x0211E588 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0211E598 +mode = "arm" +kind = "runtime_observed" +# hits = 10051 + +[[entry_point]] +addr = 0x0211E5BC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211E64C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211E764 +mode = "arm" +kind = "runtime_observed" +# hits = 10051 + +[[entry_point]] +addr = 0x0211E79C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211E7A8 +mode = "arm" +kind = "runtime_observed" +# hits = 30153 + +[[entry_point]] +addr = 0x0211E854 +mode = "arm" +kind = "runtime_observed" +# hits = 10051 + +[[entry_point]] +addr = 0x0211E8A4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0211E8F8 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0211E994 +mode = "arm" +kind = "runtime_observed" +# hits = 2295 + +[[entry_point]] +addr = 0x0211E9A0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211E9B0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211E9C0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211EA50 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0211EC48 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211EE90 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0211EF0C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0211EFE8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F128 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F1F8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F2A0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F2A8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0211F3B8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0211F7B8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 diff --git a/config/mph_arm9_ov003.toml b/config/mph_arm9_ov003.toml new file mode 100644 index 0000000..c1e726d --- /dev/null +++ b/config/mph_arm9_ov003.toml @@ -0,0 +1,124 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 3" +id = "mph_amhe0_arm9_ov003" +load_address = 0x0212C600 +size = 0x000034C0 +entry_pc = 0x0212DC54 +authoritative_entry_points = false + +[identity] +sha1 = "747bab89f0972cedae5232c4ae543fa5d10b5558" + +[[entry_point]] +addr = 0x0212DC54 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212DCE4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212DD70 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0212DF5C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E060 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0212E210 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E2BC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E3B4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E740 +mode = "arm" +kind = "runtime_observed" +# hits = 32339 + +[[entry_point]] +addr = 0x0212E744 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0212E970 +mode = "arm" +kind = "runtime_observed" +# hits = 32307 + +[[entry_point]] +addr = 0x0212EA18 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212EBAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212EBB0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212ECAC +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0212ED0C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212ED48 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212EE40 +mode = "arm" +kind = "runtime_observed" +# hits = 5 diff --git a/config/mph_arm9_ov004.toml b/config/mph_arm9_ov004.toml new file mode 100644 index 0000000..e4640b1 --- /dev/null +++ b/config/mph_arm9_ov004.toml @@ -0,0 +1,556 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 4" +id = "mph_amhe0_arm9_ov004" +load_address = 0x0214C860 +size = 0x0004C460 +entry_pc = 0x021513E0 +authoritative_entry_points = false + +[identity] +sha1 = "9a5beb990abe48f91f13e91cdd6bf2098e213ea7" + +[[entry_point]] +addr = 0x021513E0 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02152608 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0215296C +mode = "arm" +kind = "runtime_observed" +# hits = 24 + +[[entry_point]] +addr = 0x0216B524 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216B528 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216BA8C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216BB30 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216BBC4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216BCBC +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216BD28 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216BD74 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216BDD4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216BDF0 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0216BE58 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216BE88 +mode = "arm" +kind = "runtime_observed" +# hits = 37 + +[[entry_point]] +addr = 0x0216BF6C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C000 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0216C004 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C008 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C00C +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C010 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C018 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C044 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216C0AC +mode = "arm" +kind = "runtime_observed" +# hits = 2976 + +[[entry_point]] +addr = 0x0216C218 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C250 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0216C254 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C258 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C25C +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C260 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C268 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C34C +mode = "arm" +kind = "runtime_observed" +# hits = 10332 + +[[entry_point]] +addr = 0x0216C3E8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C4B8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C4C0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C4D0 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C4E8 +mode = "arm" +kind = "runtime_observed" +# hits = 10236 + +[[entry_point]] +addr = 0x0216C524 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216C528 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216C5FC +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216C618 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C630 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216C75C +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x0216C804 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C810 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C8A4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C8D8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216C924 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0216CA24 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216CA58 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CB50 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216CB7C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216CC44 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CCFC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CD38 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CD4C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216CD50 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CD9C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216CEB4 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0216D028 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D20C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D234 +mode = "arm" +kind = "runtime_observed" +# hits = 10236 + +[[entry_point]] +addr = 0x0216D398 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D3F8 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D414 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D878 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216DA88 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0217AA14 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217AA38 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0217AC3C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0217ADB8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217AE00 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217AF00 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217AF3C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0217AF4C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0217AFE8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217B084 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217B110 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217B1A4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0217B3DC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0217B40C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0217B470 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0217B48C +mode = "arm" +kind = "runtime_observed" +# hits = 13 + +[[entry_point]] +addr = 0x0217B4B4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217B4BC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217B510 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217B518 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0217B538 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0217B564 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0217B580 +mode = "arm" +kind = "runtime_observed" +# hits = 3 diff --git a/config/mph_arm9_ov008.toml b/config/mph_arm9_ov008.toml new file mode 100644 index 0000000..969062a --- /dev/null +++ b/config/mph_arm9_ov008.toml @@ -0,0 +1,190 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 8" +id = "mph_amhe0_arm9_ov008" +load_address = 0x0212C600 +size = 0x000063C0 +entry_pc = 0x0212DC54 +authoritative_entry_points = false + +[identity] +sha1 = "a3abc6c9d468ca0a362e71f0d4a4a7c582395093" + +[[entry_point]] +addr = 0x0212DC54 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212DCE4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212DD70 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0212DF5C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E060 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0212E210 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E2BC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E3B4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212E740 +mode = "arm" +kind = "runtime_observed" +# hits = 32339 + +[[entry_point]] +addr = 0x0212E744 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0212E970 +mode = "arm" +kind = "runtime_observed" +# hits = 32307 + +[[entry_point]] +addr = 0x0212EA18 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212EBAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212EBB0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212ECAC +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0212ED0C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0212ED48 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0212EE40 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02131244 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02131258 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02131278 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02131288 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0213198C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02131998 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02131A70 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02131AD4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02131B74 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02131BD8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02131DE0 +mode = "arm" +kind = "runtime_observed" +# hits = 20 diff --git a/config/mph_arm9_ov009.toml b/config/mph_arm9_ov009.toml new file mode 100644 index 0000000..f0779a6 --- /dev/null +++ b/config/mph_arm9_ov009.toml @@ -0,0 +1,2698 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 9" +id = "mph_amhe0_arm9_ov009" +load_address = 0x02133060 +size = 0x00019860 +entry_pc = 0x0213413C +authoritative_entry_points = false + +[identity] +sha1 = "d094aad7e063aeb5a2856b695d8e7916609b5ded" + +[[entry_point]] +addr = 0x0213413C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02134158 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021341C4 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02134324 +mode = "arm" +kind = "runtime_observed" +# hits = 93 + +[[entry_point]] +addr = 0x0213438C +mode = "arm" +kind = "runtime_observed" +# hits = 96819 + +[[entry_point]] +addr = 0x021343BC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021343F4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02134434 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02134494 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021344E0 +mode = "arm" +kind = "runtime_observed" +# hits = 74 + +[[entry_point]] +addr = 0x021345B4 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x0213468C +mode = "arm" +kind = "runtime_observed" +# hits = 64767 + +[[entry_point]] +addr = 0x0213469C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021346B0 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x021346C8 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x021346E0 +mode = "arm" +kind = "runtime_observed" +# hits = 127921 + +[[entry_point]] +addr = 0x02134704 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02134718 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0213478C +mode = "arm" +kind = "runtime_observed" +# hits = 130504 + +[[entry_point]] +addr = 0x021348C0 +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x021348D8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02134934 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02134990 +mode = "arm" +kind = "runtime_observed" +# hits = 899 + +[[entry_point]] +addr = 0x02134A90 +mode = "arm" +kind = "runtime_observed" +# hits = 1428 + +[[entry_point]] +addr = 0x02134AB8 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02134B00 +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x02134B34 +mode = "arm" +kind = "runtime_observed" +# hits = 24778 + +[[entry_point]] +addr = 0x02134B44 +mode = "arm" +kind = "runtime_observed" +# hits = 54421 + +[[entry_point]] +addr = 0x02134B78 +mode = "arm" +kind = "runtime_observed" +# hits = 6524 + +[[entry_point]] +addr = 0x02134B7C +mode = "arm" +kind = "runtime_observed" +# hits = 627 + +[[entry_point]] +addr = 0x02134B80 +mode = "arm" +kind = "runtime_observed" +# hits = 6711 + +[[entry_point]] +addr = 0x02134B8C +mode = "arm" +kind = "runtime_observed" +# hits = 189 + +[[entry_point]] +addr = 0x02134BC0 +mode = "arm" +kind = "runtime_observed" +# hits = 272 + +[[entry_point]] +addr = 0x02134BD4 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02134BF8 +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x02134C50 +mode = "arm" +kind = "runtime_observed" +# hits = 10720 + +[[entry_point]] +addr = 0x02134C54 +mode = "arm" +kind = "runtime_observed" +# hits = 4527 + +[[entry_point]] +addr = 0x02134C5C +mode = "arm" +kind = "runtime_observed" +# hits = 135 + +[[entry_point]] +addr = 0x02134C64 +mode = "arm" +kind = "runtime_observed" +# hits = 1020 + +[[entry_point]] +addr = 0x02134C80 +mode = "arm" +kind = "runtime_observed" +# hits = 1649 + +[[entry_point]] +addr = 0x02134C84 +mode = "arm" +kind = "runtime_observed" +# hits = 829 + +[[entry_point]] +addr = 0x02134C9C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02134E68 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02135020 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02135108 +mode = "arm" +kind = "runtime_observed" +# hits = 28 + +[[entry_point]] +addr = 0x02135154 +mode = "arm" +kind = "runtime_observed" +# hits = 30 + +[[entry_point]] +addr = 0x021351B4 +mode = "arm" +kind = "runtime_observed" +# hits = 30 + +[[entry_point]] +addr = 0x021351CC +mode = "arm" +kind = "runtime_observed" +# hits = 60 + +[[entry_point]] +addr = 0x02135408 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213548C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021354E4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02135524 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02135588 +mode = "arm" +kind = "runtime_observed" +# hits = 27 + +[[entry_point]] +addr = 0x0213560C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02135898 +mode = "arm" +kind = "runtime_observed" +# hits = 19 + +[[entry_point]] +addr = 0x02135950 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x02135BCC +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02135C20 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02135C88 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02135DAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02135F20 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02136014 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02136034 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02136074 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0213613C +mode = "arm" +kind = "runtime_observed" +# hits = 756 + +[[entry_point]] +addr = 0x021361C8 +mode = "arm" +kind = "runtime_observed" +# hits = 92 + +[[entry_point]] +addr = 0x021361F4 +mode = "arm" +kind = "runtime_observed" +# hits = 51352 + +[[entry_point]] +addr = 0x02136254 +mode = "arm" +kind = "runtime_observed" +# hits = 70 + +[[entry_point]] +addr = 0x021362D8 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x02136304 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02136358 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021363D4 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02136428 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213645C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021364A0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021364D4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213653C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213655C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213658C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213660C +mode = "arm" +kind = "runtime_observed" +# hits = 4302 + +[[entry_point]] +addr = 0x02136668 +mode = "arm" +kind = "runtime_observed" +# hits = 8160 + +[[entry_point]] +addr = 0x02136748 +mode = "arm" +kind = "runtime_observed" +# hits = 790 + +[[entry_point]] +addr = 0x021367AC +mode = "arm" +kind = "runtime_observed" +# hits = 1044 + +[[entry_point]] +addr = 0x0213688C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213693C +mode = "arm" +kind = "runtime_observed" +# hits = 10720 + +[[entry_point]] +addr = 0x0213696C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02136A34 +mode = "arm" +kind = "runtime_observed" +# hits = 2753 + +[[entry_point]] +addr = 0x02136A80 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x02136AC0 +mode = "arm" +kind = "runtime_observed" +# hits = 2753 + +[[entry_point]] +addr = 0x02136B10 +mode = "arm" +kind = "runtime_observed" +# hits = 84350 + +[[entry_point]] +addr = 0x02136B20 +mode = "arm" +kind = "runtime_observed" +# hits = 23792 + +[[entry_point]] +addr = 0x02136B24 +mode = "arm" +kind = "runtime_observed" +# hits = 7730 + +[[entry_point]] +addr = 0x02136B44 +mode = "arm" +kind = "runtime_observed" +# hits = 9064 + +[[entry_point]] +addr = 0x02136B50 +mode = "arm" +kind = "runtime_observed" +# hits = 1404 + +[[entry_point]] +addr = 0x02136B54 +mode = "arm" +kind = "runtime_observed" +# hits = 26214 + +[[entry_point]] +addr = 0x02136B58 +mode = "arm" +kind = "runtime_observed" +# hits = 359 + +[[entry_point]] +addr = 0x02136B5C +mode = "arm" +kind = "runtime_observed" +# hits = 9627 + +[[entry_point]] +addr = 0x02136B70 +mode = "arm" +kind = "runtime_observed" +# hits = 8913 + +[[entry_point]] +addr = 0x02136C1C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02136C3C +mode = "arm" +kind = "runtime_observed" +# hits = 135954 + +[[entry_point]] +addr = 0x02136C7C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x02136CA0 +mode = "arm" +kind = "runtime_observed" +# hits = 18898 + +[[entry_point]] +addr = 0x02136EE4 +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x02136F74 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02136FE8 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02137084 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021371B4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02137254 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02137284 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021372AC +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x0213786C +mode = "arm" +kind = "runtime_observed" +# hits = 23598 + +[[entry_point]] +addr = 0x021378DC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213790C +mode = "arm" +kind = "runtime_observed" +# hits = 17106 + +[[entry_point]] +addr = 0x02137BE8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02137DE4 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x02137F6C +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x021380BC +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x02138168 +mode = "arm" +kind = "runtime_observed" +# hits = 604 + +[[entry_point]] +addr = 0x021383E8 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x021387FC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213881C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213883C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213885C +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02138868 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02138874 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02138880 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021389BC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021389F0 +mode = "arm" +kind = "runtime_observed" +# hits = 5338 + +[[entry_point]] +addr = 0x02138AE0 +mode = "arm" +kind = "runtime_observed" +# hits = 272 + +[[entry_point]] +addr = 0x02138C8C +mode = "arm" +kind = "runtime_observed" +# hits = 5081 + +[[entry_point]] +addr = 0x02138E50 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x02138E58 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02138E60 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02138F28 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02138F38 +mode = "arm" +kind = "runtime_observed" +# hits = 31749 + +[[entry_point]] +addr = 0x02139054 +mode = "arm" +kind = "runtime_observed" +# hits = 31749 + +[[entry_point]] +addr = 0x0213911C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02139274 +mode = "arm" +kind = "runtime_observed" +# hits = 620 + +[[entry_point]] +addr = 0x021394E4 +mode = "arm" +kind = "runtime_observed" +# hits = 272 + +[[entry_point]] +addr = 0x021395E8 +mode = "arm" +kind = "runtime_observed" +# hits = 862 + +[[entry_point]] +addr = 0x0213966C +mode = "arm" +kind = "runtime_observed" +# hits = 9366 + +[[entry_point]] +addr = 0x021398B0 +mode = "arm" +kind = "runtime_observed" +# hits = 9366 + +[[entry_point]] +addr = 0x021398DC +mode = "arm" +kind = "runtime_observed" +# hits = 53277 + +[[entry_point]] +addr = 0x0213998C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021399C8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02139A30 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x02139A34 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x02139A38 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02139A58 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02139A74 +mode = "arm" +kind = "runtime_observed" +# hits = 1524 + +[[entry_point]] +addr = 0x02139A78 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02139AA0 +mode = "arm" +kind = "runtime_observed" +# hits = 13204 + +[[entry_point]] +addr = 0x02139AD8 +mode = "arm" +kind = "runtime_observed" +# hits = 17105 + +[[entry_point]] +addr = 0x02139D40 +mode = "arm" +kind = "runtime_observed" +# hits = 17105 + +[[entry_point]] +addr = 0x02139D5C +mode = "arm" +kind = "runtime_observed" +# hits = 3684 + +[[entry_point]] +addr = 0x02139D8C +mode = "arm" +kind = "runtime_observed" +# hits = 4768 + +[[entry_point]] +addr = 0x0213A1E0 +mode = "arm" +kind = "runtime_observed" +# hits = 3200 + +[[entry_point]] +addr = 0x0213A204 +mode = "arm" +kind = "runtime_observed" +# hits = 4542 + +[[entry_point]] +addr = 0x0213A2E8 +mode = "arm" +kind = "runtime_observed" +# hits = 57 + +[[entry_point]] +addr = 0x0213A318 +mode = "arm" +kind = "runtime_observed" +# hits = 3012 + +[[entry_point]] +addr = 0x0213A348 +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x0213A378 +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x0213A390 +mode = "arm" +kind = "runtime_observed" +# hits = 3206 + +[[entry_point]] +addr = 0x0213A3A8 +mode = "arm" +kind = "runtime_observed" +# hits = 26 + +[[entry_point]] +addr = 0x0213A480 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0213A4B0 +mode = "arm" +kind = "runtime_observed" +# hits = 3240 + +[[entry_point]] +addr = 0x0213A4C8 +mode = "arm" +kind = "runtime_observed" +# hits = 9682 + +[[entry_point]] +addr = 0x0213A4F8 +mode = "arm" +kind = "runtime_observed" +# hits = 56 + +[[entry_point]] +addr = 0x0213A510 +mode = "arm" +kind = "runtime_observed" +# hits = 3240 + +[[entry_point]] +addr = 0x0213A528 +mode = "arm" +kind = "runtime_observed" +# hits = 10047 + +[[entry_point]] +addr = 0x0213A540 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0213A558 +mode = "arm" +kind = "runtime_observed" +# hits = 46 + +[[entry_point]] +addr = 0x0213A570 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0213A588 +mode = "arm" +kind = "runtime_observed" +# hits = 46 + +[[entry_point]] +addr = 0x0213A5B8 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x0213A5E8 +mode = "arm" +kind = "runtime_observed" +# hits = 52 + +[[entry_point]] +addr = 0x0213A618 +mode = "arm" +kind = "runtime_observed" +# hits = 4376 + +[[entry_point]] +addr = 0x0213AE98 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213AFB4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213AFB8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213AFBC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213AFD0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213AFD4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213B064 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213B104 +mode = "arm" +kind = "runtime_observed" +# hits = 730 + +[[entry_point]] +addr = 0x0213B128 +mode = "arm" +kind = "runtime_observed" +# hits = 4896 + +[[entry_point]] +addr = 0x0213B318 +mode = "arm" +kind = "runtime_observed" +# hits = 447 + +[[entry_point]] +addr = 0x0213B340 +mode = "arm" +kind = "runtime_observed" +# hits = 134 + +[[entry_point]] +addr = 0x0213B344 +mode = "arm" +kind = "runtime_observed" +# hits = 271 + +[[entry_point]] +addr = 0x0213B354 +mode = "arm" +kind = "runtime_observed" +# hits = 42 + +[[entry_point]] +addr = 0x0213B43C +mode = "arm" +kind = "runtime_observed" +# hits = 10936 + +[[entry_point]] +addr = 0x0213B510 +mode = "arm" +kind = "runtime_observed" +# hits = 5162 + +[[entry_point]] +addr = 0x0213B538 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213B53C +mode = "arm" +kind = "runtime_observed" +# hits = 2038 + +[[entry_point]] +addr = 0x0213B54C +mode = "arm" +kind = "runtime_observed" +# hits = 3123 + +[[entry_point]] +addr = 0x0213B750 +mode = "arm" +kind = "runtime_observed" +# hits = 5176 + +[[entry_point]] +addr = 0x0213B774 +mode = "arm" +kind = "runtime_observed" +# hits = 5793 + +[[entry_point]] +addr = 0x0213B78C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0213B790 +mode = "arm" +kind = "runtime_observed" +# hits = 2361 + +[[entry_point]] +addr = 0x0213B7A0 +mode = "arm" +kind = "runtime_observed" +# hits = 3429 + +[[entry_point]] +addr = 0x0213B96C +mode = "arm" +kind = "runtime_observed" +# hits = 11251 + +[[entry_point]] +addr = 0x0213BCCC +mode = "arm" +kind = "runtime_observed" +# hits = 3418 + +[[entry_point]] +addr = 0x0213BE04 +mode = "arm" +kind = "runtime_observed" +# hits = 1398 + +[[entry_point]] +addr = 0x0213BE6C +mode = "arm" +kind = "runtime_observed" +# hits = 3425 + +[[entry_point]] +addr = 0x0213BEB0 +mode = "arm" +kind = "runtime_observed" +# hits = 11383 + +[[entry_point]] +addr = 0x0213BEC4 +mode = "arm" +kind = "runtime_observed" +# hits = 1327 + +[[entry_point]] +addr = 0x0213BEE8 +mode = "arm" +kind = "runtime_observed" +# hits = 4527 + +[[entry_point]] +addr = 0x0213BFF0 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x0213C024 +mode = "arm" +kind = "runtime_observed" +# hits = 10711 + +[[entry_point]] +addr = 0x0213C178 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0213C18C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213C198 +mode = "arm" +kind = "runtime_observed" +# hits = 3200 + +[[entry_point]] +addr = 0x0213C328 +mode = "arm" +kind = "runtime_observed" +# hits = 5828 + +[[entry_point]] +addr = 0x0213C34C +mode = "arm" +kind = "runtime_observed" +# hits = 5942 + +[[entry_point]] +addr = 0x0213C3D4 +mode = "arm" +kind = "runtime_observed" +# hits = 3404 + +[[entry_point]] +addr = 0x0213C3E4 +mode = "arm" +kind = "runtime_observed" +# hits = 397 + +[[entry_point]] +addr = 0x0213C400 +mode = "arm" +kind = "runtime_observed" +# hits = 4057 + +[[entry_point]] +addr = 0x0213C41C +mode = "arm" +kind = "runtime_observed" +# hits = 4057 + +[[entry_point]] +addr = 0x0213C468 +mode = "arm" +kind = "runtime_observed" +# hits = 22513 + +[[entry_point]] +addr = 0x0213C484 +mode = "arm" +kind = "runtime_observed" +# hits = 22704 + +[[entry_point]] +addr = 0x0213C504 +mode = "arm" +kind = "runtime_observed" +# hits = 2826 + +[[entry_point]] +addr = 0x0213C954 +mode = "arm" +kind = "runtime_observed" +# hits = 11569 + +[[entry_point]] +addr = 0x0213C960 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213C970 +mode = "arm" +kind = "runtime_observed" +# hits = 18213 + +[[entry_point]] +addr = 0x0213C980 +mode = "arm" +kind = "runtime_observed" +# hits = 8798 + +[[entry_point]] +addr = 0x0213C9A4 +mode = "arm" +kind = "runtime_observed" +# hits = 18960 + +[[entry_point]] +addr = 0x0213CA48 +mode = "arm" +kind = "runtime_observed" +# hits = 2556 + +[[entry_point]] +addr = 0x0213CA64 +mode = "arm" +kind = "runtime_observed" +# hits = 6400 + +[[entry_point]] +addr = 0x0213CAAC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213CC10 +mode = "arm" +kind = "runtime_observed" +# hits = 916 + +[[entry_point]] +addr = 0x0213CC7C +mode = "arm" +kind = "runtime_observed" +# hits = 4973 + +[[entry_point]] +addr = 0x0213CCBC +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0213CCC4 +mode = "arm" +kind = "runtime_observed" +# hits = 70382 + +[[entry_point]] +addr = 0x0213CCE4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0213D6B4 +mode = "arm" +kind = "runtime_observed" +# hits = 43 + +[[entry_point]] +addr = 0x0213DE84 +mode = "arm" +kind = "runtime_observed" +# hits = 53485 + +[[entry_point]] +addr = 0x0213DE88 +mode = "arm" +kind = "runtime_observed" +# hits = 16854 + +[[entry_point]] +addr = 0x0213DF58 +mode = "arm" +kind = "runtime_observed" +# hits = 18764 + +[[entry_point]] +addr = 0x0213DFB8 +mode = "arm" +kind = "runtime_observed" +# hits = 4624 + +[[entry_point]] +addr = 0x0213E014 +mode = "arm" +kind = "runtime_observed" +# hits = 13752 + +[[entry_point]] +addr = 0x0213E06C +mode = "arm" +kind = "runtime_observed" +# hits = 13752 + +[[entry_point]] +addr = 0x0213E114 +mode = "arm" +kind = "runtime_observed" +# hits = 268 + +[[entry_point]] +addr = 0x0213E1EC +mode = "arm" +kind = "runtime_observed" +# hits = 65460 + +[[entry_point]] +addr = 0x0213E230 +mode = "arm" +kind = "runtime_observed" +# hits = 306136 + +[[entry_point]] +addr = 0x0213E234 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213E24C +mode = "arm" +kind = "runtime_observed" +# hits = 15664 + +[[entry_point]] +addr = 0x0213E370 +mode = "arm" +kind = "runtime_observed" +# hits = 15664 + +[[entry_point]] +addr = 0x0213E52C +mode = "arm" +kind = "runtime_observed" +# hits = 15664 + +[[entry_point]] +addr = 0x0213E548 +mode = "arm" +kind = "runtime_observed" +# hits = 2167 + +[[entry_point]] +addr = 0x0213E58C +mode = "arm" +kind = "runtime_observed" +# hits = 18722 + +[[entry_point]] +addr = 0x0213E5A4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213E6FC +mode = "arm" +kind = "runtime_observed" +# hits = 24 + +[[entry_point]] +addr = 0x0213E768 +mode = "arm" +kind = "runtime_observed" +# hits = 7124 + +[[entry_point]] +addr = 0x0213E7D8 +mode = "arm" +kind = "runtime_observed" +# hits = 180 + +[[entry_point]] +addr = 0x0213E894 +mode = "arm" +kind = "runtime_observed" +# hits = 42701 + +[[entry_point]] +addr = 0x0213E8A4 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x0213E8DC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0213E90C +mode = "arm" +kind = "runtime_observed" +# hits = 786 + +[[entry_point]] +addr = 0x0213E91C +mode = "arm" +kind = "runtime_observed" +# hits = 12215 + +[[entry_point]] +addr = 0x0213E960 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0213E984 +mode = "arm" +kind = "runtime_observed" +# hits = 31 + +[[entry_point]] +addr = 0x0213E998 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213EA8C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0213EAB0 +mode = "arm" +kind = "runtime_observed" +# hits = 93535 + +[[entry_point]] +addr = 0x0213EACC +mode = "arm" +kind = "runtime_observed" +# hits = 69 + +[[entry_point]] +addr = 0x0213ED80 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213ED98 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213EDB0 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213EE8C +mode = "arm" +kind = "runtime_observed" +# hits = 96819 + +[[entry_point]] +addr = 0x0213EEA4 +mode = "arm" +kind = "runtime_observed" +# hits = 377150 + +[[entry_point]] +addr = 0x0213EEE0 +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x0213EF6C +mode = "arm" +kind = "runtime_observed" +# hits = 169 + +[[entry_point]] +addr = 0x0213F44C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0213F4D4 +mode = "arm" +kind = "runtime_observed" +# hits = 12076 + +[[entry_point]] +addr = 0x0213F4F0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213F7A4 +mode = "arm" +kind = "runtime_observed" +# hits = 11285 + +[[entry_point]] +addr = 0x0213F9C4 +mode = "arm" +kind = "runtime_observed" +# hits = 12389 + +[[entry_point]] +addr = 0x0213FE98 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0213FF58 +mode = "arm" +kind = "runtime_observed" +# hits = 8841 + +[[entry_point]] +addr = 0x02140168 +mode = "arm" +kind = "runtime_observed" +# hits = 163 + +[[entry_point]] +addr = 0x02140240 +mode = "arm" +kind = "runtime_observed" +# hits = 12116 + +[[entry_point]] +addr = 0x0214029C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02140500 +mode = "arm" +kind = "runtime_observed" +# hits = 12117 + +[[entry_point]] +addr = 0x021406EC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02140704 +mode = "arm" +kind = "runtime_observed" +# hits = 6049 + +[[entry_point]] +addr = 0x021407D0 +mode = "arm" +kind = "runtime_observed" +# hits = 12124 + +[[entry_point]] +addr = 0x0214081C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02140834 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0214089C +mode = "arm" +kind = "runtime_observed" +# hits = 10 + +[[entry_point]] +addr = 0x021408AC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02140D0C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02140D18 +mode = "arm" +kind = "runtime_observed" +# hits = 5862 + +[[entry_point]] +addr = 0x02140D34 +mode = "arm" +kind = "runtime_observed" +# hits = 12102 + +[[entry_point]] +addr = 0x02140D98 +mode = "arm" +kind = "runtime_observed" +# hits = 776 + +[[entry_point]] +addr = 0x02140E74 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02141050 +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x02141114 +mode = "arm" +kind = "runtime_observed" +# hits = 5597 + +[[entry_point]] +addr = 0x0214144C +mode = "arm" +kind = "runtime_observed" +# hits = 268 + +[[entry_point]] +addr = 0x021414C4 +mode = "arm" +kind = "runtime_observed" +# hits = 12117 + +[[entry_point]] +addr = 0x021414E4 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x021414FC +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02141548 +mode = "arm" +kind = "runtime_observed" +# hits = 14055 + +[[entry_point]] +addr = 0x0214180C +mode = "arm" +kind = "runtime_observed" +# hits = 120664 + +[[entry_point]] +addr = 0x021418A0 +mode = "arm" +kind = "runtime_observed" +# hits = 241286 + +[[entry_point]] +addr = 0x02141964 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02141984 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02141A30 +mode = "arm" +kind = "runtime_observed" +# hits = 270 + +[[entry_point]] +addr = 0x02141A58 +mode = "arm" +kind = "runtime_observed" +# hits = 120664 + +[[entry_point]] +addr = 0x02141BFC +mode = "arm" +kind = "runtime_observed" +# hits = 5118 + +[[entry_point]] +addr = 0x02141EC0 +mode = "arm" +kind = "runtime_observed" +# hits = 1320 + +[[entry_point]] +addr = 0x02141EFC +mode = "arm" +kind = "runtime_observed" +# hits = 217 + +[[entry_point]] +addr = 0x02141F28 +mode = "arm" +kind = "runtime_observed" +# hits = 8295 + +[[entry_point]] +addr = 0x02142258 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x021423AC +mode = "arm" +kind = "runtime_observed" +# hits = 11385 + +[[entry_point]] +addr = 0x0214253C +mode = "arm" +kind = "runtime_observed" +# hits = 12117 + +[[entry_point]] +addr = 0x021425F4 +mode = "arm" +kind = "runtime_observed" +# hits = 43 + +[[entry_point]] +addr = 0x0214266C +mode = "arm" +kind = "runtime_observed" +# hits = 38259 + +[[entry_point]] +addr = 0x021427A8 +mode = "arm" +kind = "runtime_observed" +# hits = 38259 + +[[entry_point]] +addr = 0x02142AAC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02142B18 +mode = "arm" +kind = "runtime_observed" +# hits = 9323 + +[[entry_point]] +addr = 0x02142B68 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02142BC4 +mode = "arm" +kind = "runtime_observed" +# hits = 34744 + +[[entry_point]] +addr = 0x02142BCC +mode = "arm" +kind = "runtime_observed" +# hits = 69488 + +[[entry_point]] +addr = 0x02142BE8 +mode = "arm" +kind = "runtime_observed" +# hits = 137474 + +[[entry_point]] +addr = 0x02142C4C +mode = "arm" +kind = "runtime_observed" +# hits = 3390 + +[[entry_point]] +addr = 0x02142C68 +mode = "arm" +kind = "runtime_observed" +# hits = 954 + +[[entry_point]] +addr = 0x02142C6C +mode = "arm" +kind = "runtime_observed" +# hits = 1436 + +[[entry_point]] +addr = 0x02142C70 +mode = "arm" +kind = "runtime_observed" +# hits = 184 + +[[entry_point]] +addr = 0x02142C80 +mode = "arm" +kind = "runtime_observed" +# hits = 816 + +[[entry_point]] +addr = 0x02142E80 +mode = "arm" +kind = "runtime_observed" +# hits = 5040 + +[[entry_point]] +addr = 0x02142ED4 +mode = "arm" +kind = "runtime_observed" +# hits = 1159 + +[[entry_point]] +addr = 0x02142ED8 +mode = "arm" +kind = "runtime_observed" +# hits = 1669 + +[[entry_point]] +addr = 0x02142EDC +mode = "arm" +kind = "runtime_observed" +# hits = 1080 + +[[entry_point]] +addr = 0x02142EEC +mode = "arm" +kind = "runtime_observed" +# hits = 1132 + +[[entry_point]] +addr = 0x02143C28 +mode = "arm" +kind = "runtime_observed" +# hits = 37 + +[[entry_point]] +addr = 0x02143FC8 +mode = "arm" +kind = "runtime_observed" +# hits = 9323 + +[[entry_point]] +addr = 0x02144AB0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02144B78 +mode = "arm" +kind = "runtime_observed" +# hits = 9323 + +[[entry_point]] +addr = 0x02144C4C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02144FE0 +mode = "arm" +kind = "runtime_observed" +# hits = 1651 + +[[entry_point]] +addr = 0x02145054 +mode = "arm" +kind = "runtime_observed" +# hits = 1537 + +[[entry_point]] +addr = 0x021451C0 +mode = "arm" +kind = "runtime_observed" +# hits = 1523 + +[[entry_point]] +addr = 0x02145368 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02145718 +mode = "arm" +kind = "runtime_observed" +# hits = 732 + +[[entry_point]] +addr = 0x0214571C +mode = "arm" +kind = "runtime_observed" +# hits = 790 + +[[entry_point]] +addr = 0x0214659C +mode = "arm" +kind = "runtime_observed" +# hits = 790 + +[[entry_point]] +addr = 0x02146604 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02146608 +mode = "arm" +kind = "runtime_observed" +# hits = 57 + +[[entry_point]] +addr = 0x02146620 +mode = "arm" +kind = "runtime_observed" +# hits = 15 + +[[entry_point]] +addr = 0x02146630 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02146638 +mode = "arm" +kind = "runtime_observed" +# hits = 16 + +[[entry_point]] +addr = 0x0214663C +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02146658 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x0214665C +mode = "arm" +kind = "runtime_observed" +# hits = 46 + +[[entry_point]] +addr = 0x02146660 +mode = "arm" +kind = "runtime_observed" +# hits = 11 + +[[entry_point]] +addr = 0x02146664 +mode = "arm" +kind = "runtime_observed" +# hits = 42 + +[[entry_point]] +addr = 0x02146668 +mode = "arm" +kind = "runtime_observed" +# hits = 34 + +[[entry_point]] +addr = 0x02146670 +mode = "arm" +kind = "runtime_observed" +# hits = 30 + +[[entry_point]] +addr = 0x02146680 +mode = "arm" +kind = "runtime_observed" +# hits = 51 + +[[entry_point]] +addr = 0x02146684 +mode = "arm" +kind = "runtime_observed" +# hits = 40 + +[[entry_point]] +addr = 0x021466B0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021466BC +mode = "arm" +kind = "runtime_observed" +# hits = 7 + +[[entry_point]] +addr = 0x021466D0 +mode = "arm" +kind = "runtime_observed" +# hits = 101 + +[[entry_point]] +addr = 0x021466D4 +mode = "arm" +kind = "runtime_observed" +# hits = 92 + +[[entry_point]] +addr = 0x0214672C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x02146730 +mode = "arm" +kind = "runtime_observed" +# hits = 38 + +[[entry_point]] +addr = 0x02146768 +mode = "arm" +kind = "runtime_observed" +# hits = 49 + +[[entry_point]] +addr = 0x02146794 +mode = "arm" +kind = "runtime_observed" +# hits = 31 + +[[entry_point]] +addr = 0x02146798 +mode = "arm" +kind = "runtime_observed" +# hits = 62 + +[[entry_point]] +addr = 0x0214679C +mode = "arm" +kind = "runtime_observed" +# hits = 14 + +[[entry_point]] +addr = 0x021467A4 +mode = "arm" +kind = "runtime_observed" +# hits = 20 + +[[entry_point]] +addr = 0x021474C0 +mode = "arm" +kind = "runtime_observed" +# hits = 70382 + +[[entry_point]] +addr = 0x021474E8 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021474F4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0214754C +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x0214755C +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x021475B0 +mode = "arm" +kind = "runtime_observed" +# hits = 1523 + +[[entry_point]] +addr = 0x02147654 +mode = "arm" +kind = "runtime_observed" +# hits = 17105 + +[[entry_point]] +addr = 0x02147660 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x02147678 +mode = "arm" +kind = "runtime_observed" +# hits = 17105 + +[[entry_point]] +addr = 0x021477D4 +mode = "arm" +kind = "runtime_observed" +# hits = 35732 + +[[entry_point]] +addr = 0x021479BC +mode = "arm" +kind = "runtime_observed" +# hits = 84734 + +[[entry_point]] +addr = 0x02147A8C +mode = "arm" +kind = "runtime_observed" +# hits = 23212 + +[[entry_point]] +addr = 0x02147DF4 +mode = "arm" +kind = "runtime_observed" +# hits = 23212 + +[[entry_point]] +addr = 0x02147EF0 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x02147EFC +mode = "arm" +kind = "runtime_observed" +# hits = 17105 + +[[entry_point]] +addr = 0x02147F68 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0214807C +mode = "arm" +kind = "runtime_observed" +# hits = 71905 + +[[entry_point]] +addr = 0x021480BC +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02148624 +mode = "arm" +kind = "runtime_observed" +# hits = 57 + +[[entry_point]] +addr = 0x021486AC +mode = "arm" +kind = "runtime_observed" +# hits = 17127 + +[[entry_point]] +addr = 0x02148C30 +mode = "arm" +kind = "runtime_observed" +# hits = 1339 + +[[entry_point]] +addr = 0x02148C64 +mode = "arm" +kind = "runtime_observed" +# hits = 19 + +[[entry_point]] +addr = 0x02148C88 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x02148C98 +mode = "arm" +kind = "runtime_observed" +# hits = 18 + +[[entry_point]] +addr = 0x02148EA4 +mode = "arm" +kind = "runtime_observed" +# hits = 70 + +[[entry_point]] +addr = 0x02148F18 +mode = "arm" +kind = "runtime_observed" +# hits = 1571 + +[[entry_point]] +addr = 0x02149018 +mode = "arm" +kind = "runtime_observed" +# hits = 328 + +[[entry_point]] +addr = 0x02149030 +mode = "arm" +kind = "runtime_observed" +# hits = 100 + +[[entry_point]] +addr = 0x02149090 +mode = "arm" +kind = "runtime_observed" +# hits = 411 + +[[entry_point]] +addr = 0x021490A8 +mode = "arm" +kind = "runtime_observed" +# hits = 161 + +[[entry_point]] +addr = 0x021490D8 +mode = "arm" +kind = "runtime_observed" +# hits = 3572 + +[[entry_point]] +addr = 0x0214917C +mode = "arm" +kind = "runtime_observed" +# hits = 168 + +[[entry_point]] +addr = 0x021494D8 +mode = "arm" +kind = "runtime_observed" +# hits = 126 + +[[entry_point]] +addr = 0x0214957C +mode = "arm" +kind = "runtime_observed" +# hits = 303 + +[[entry_point]] +addr = 0x02149580 +mode = "arm" +kind = "runtime_observed" +# hits = 118 + +[[entry_point]] +addr = 0x02149590 +mode = "arm" +kind = "runtime_observed" +# hits = 26 + +[[entry_point]] +addr = 0x021495A0 +mode = "arm" +kind = "runtime_observed" +# hits = 103 + +[[entry_point]] +addr = 0x02149AD0 +mode = "arm" +kind = "runtime_observed" +# hits = 126 + +[[entry_point]] +addr = 0x02149AE0 +mode = "arm" +kind = "runtime_observed" +# hits = 47 + +[[entry_point]] +addr = 0x02149AE4 +mode = "arm" +kind = "runtime_observed" +# hits = 39 + +[[entry_point]] +addr = 0x02149AF4 +mode = "arm" +kind = "runtime_observed" +# hits = 40 + +[[entry_point]] +addr = 0x02149B50 +mode = "arm" +kind = "runtime_observed" +# hits = 23040 + +[[entry_point]] +addr = 0x02149B5C +mode = "arm" +kind = "runtime_observed" +# hits = 6404 + +[[entry_point]] +addr = 0x02149B60 +mode = "arm" +kind = "runtime_observed" +# hits = 5568 + +[[entry_point]] +addr = 0x02149B64 +mode = "arm" +kind = "runtime_observed" +# hits = 5199 + +[[entry_point]] +addr = 0x02149B68 +mode = "arm" +kind = "runtime_observed" +# hits = 168 + +[[entry_point]] +addr = 0x02149B6C +mode = "arm" +kind = "runtime_observed" +# hits = 168 + +[[entry_point]] +addr = 0x02149B70 +mode = "arm" +kind = "runtime_observed" +# hits = 168 + +[[entry_point]] +addr = 0x02149B74 +mode = "arm" +kind = "runtime_observed" +# hits = 5029 + +[[entry_point]] +addr = 0x02149B78 +mode = "arm" +kind = "runtime_observed" +# hits = 168 + +[[entry_point]] +addr = 0x02149B7C +mode = "arm" +kind = "runtime_observed" +# hits = 168 + +[[entry_point]] +addr = 0x02149BD0 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0214A390 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0214A400 +mode = "arm" +kind = "runtime_observed" +# hits = 144 + +[[entry_point]] +addr = 0x0214A548 +mode = "arm" +kind = "runtime_observed" +# hits = 84 + +[[entry_point]] +addr = 0x0214A5DC +mode = "arm" +kind = "runtime_observed" +# hits = 132 + +[[entry_point]] +addr = 0x0214A650 +mode = "arm" +kind = "runtime_observed" +# hits = 264 + +[[entry_point]] +addr = 0x0214A72C +mode = "arm" +kind = "runtime_observed" +# hits = 144 + +[[entry_point]] +addr = 0x0214A7E8 +mode = "arm" +kind = "runtime_observed" +# hits = 252 + +[[entry_point]] +addr = 0x0214A90C +mode = "arm" +kind = "runtime_observed" +# hits = 686 + +[[entry_point]] +addr = 0x0214A95C +mode = "arm" +kind = "runtime_observed" +# hits = 15225 + +[[entry_point]] +addr = 0x0214A978 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0214A9A4 +mode = "arm" +kind = "runtime_observed" +# hits = 15225 + +[[entry_point]] +addr = 0x0214AB94 +mode = "arm" +kind = "runtime_observed" +# hits = 2009 + +[[entry_point]] +addr = 0x0214AC50 +mode = "arm" +kind = "runtime_observed" +# hits = 604 + +[[entry_point]] +addr = 0x0214ACF0 +mode = "arm" +kind = "runtime_observed" +# hits = 15225 + +[[entry_point]] +addr = 0x0214AF38 +mode = "arm" +kind = "runtime_observed" +# hits = 40431 + +[[entry_point]] +addr = 0x0214AF54 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0214AF90 +mode = "arm" +kind = "runtime_observed" +# hits = 231 + +[[entry_point]] +addr = 0x0214B1BC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0214B3C4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0214B510 +mode = "arm" +kind = "runtime_observed" +# hits = 18825 + +[[entry_point]] +addr = 0x0214B620 +mode = "arm" +kind = "runtime_observed" +# hits = 17106 + +[[entry_point]] +addr = 0x0214B688 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0214B6A4 +mode = "arm" +kind = "runtime_observed" +# hits = 8 + +[[entry_point]] +addr = 0x0214B7A4 +mode = "arm" +kind = "runtime_observed" +# hits = 16 diff --git a/config/mph_arm9_ov010.toml b/config/mph_arm9_ov010.toml new file mode 100644 index 0000000..6c090cd --- /dev/null +++ b/config/mph_arm9_ov010.toml @@ -0,0 +1,142 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 10" +id = "mph_amhe0_arm9_ov010" +load_address = 0x0214C940 +size = 0x0001C1E0 +entry_pc = 0x0214E504 +authoritative_entry_points = false + +[identity] +sha1 = "d22d5c9a22f870c62f13b2122d7d62a485f4a553" + +[[entry_point]] +addr = 0x0214E504 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0214FC34 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02152608 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0215296C +mode = "arm" +kind = "runtime_observed" +# hits = 24 + +[[entry_point]] +addr = 0x021536F0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021537CC +mode = "arm" +kind = "runtime_observed" +# hits = 47506 + +[[entry_point]] +addr = 0x021549E4 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02154D30 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02155698 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02156CAC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02158334 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0215AE04 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0215D5AC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0215EEF8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021604DC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021620A0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02162B5C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021645A0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02164E1C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216577C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x02166198 +mode = "arm" +kind = "runtime_observed" +# hits = 2 diff --git a/config/mph_arm9_ov015.toml b/config/mph_arm9_ov015.toml new file mode 100644 index 0000000..1d5ae36 --- /dev/null +++ b/config/mph_arm9_ov015.toml @@ -0,0 +1,550 @@ +# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit. +# Entry points are Tier-3 observations whose containing 4 KiB page was +# byte-identical to this overlay's decompressed ROM image at the time it +# executed, so every seed below is provably from THIS overlay generation +# and not from one of the overlays sharing its address range. + +[program] +name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay 15" +id = "mph_amhe0_arm9_ov015" +load_address = 0x02168B20 +size = 0x00008FE0 +entry_pc = 0x0216933C +authoritative_entry_points = false + +[identity] +sha1 = "1c4f5ba3145dcba0a3fe2e02ff91e19f519d161e" + +[[entry_point]] +addr = 0x0216933C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x021695C0 +mode = "arm" +kind = "runtime_observed" +# hits = 3444 + +[[entry_point]] +addr = 0x021695E4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x021696B8 +mode = "arm" +kind = "runtime_observed" +# hits = 3412 + +[[entry_point]] +addr = 0x02169ED0 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216A0B4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216A210 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216A6D0 +mode = "arm" +kind = "runtime_observed" +# hits = 13 + +[[entry_point]] +addr = 0x0216A9E4 +mode = "arm" +kind = "runtime_observed" +# hits = 65787 + +[[entry_point]] +addr = 0x0216AAEC +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216ACE4 +mode = "arm" +kind = "runtime_observed" +# hits = 65659 + +[[entry_point]] +addr = 0x0216AFC4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216B524 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216B528 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216BA8C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216BB30 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216BBC4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216BCBC +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216BD28 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216BD74 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216BDD4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216BDF0 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0216BE58 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216BE88 +mode = "arm" +kind = "runtime_observed" +# hits = 37 + +[[entry_point]] +addr = 0x0216BF6C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C000 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0216C004 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C008 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C00C +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C010 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C018 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C044 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216C0AC +mode = "arm" +kind = "runtime_observed" +# hits = 2976 + +[[entry_point]] +addr = 0x0216C218 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C250 +mode = "arm" +kind = "runtime_observed" +# hits = 22 + +[[entry_point]] +addr = 0x0216C254 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C258 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C25C +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C260 +mode = "arm" +kind = "runtime_observed" +# hits = 12 + +[[entry_point]] +addr = 0x0216C268 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C34C +mode = "arm" +kind = "runtime_observed" +# hits = 10332 + +[[entry_point]] +addr = 0x0216C3E8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C4B8 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C4C0 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C4D0 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C4E8 +mode = "arm" +kind = "runtime_observed" +# hits = 10236 + +[[entry_point]] +addr = 0x0216C524 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216C528 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216C5FC +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216C618 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C630 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216C75C +mode = "arm" +kind = "runtime_observed" +# hits = 9 + +[[entry_point]] +addr = 0x0216C804 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216C810 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C8A4 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216C8D8 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216C924 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0216CA24 +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216CA58 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CB50 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216CB7C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216CC44 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CCFC +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CD38 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CD4C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216CD50 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216CD9C +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216CEB4 +mode = "arm" +kind = "runtime_observed" +# hits = 6 + +[[entry_point]] +addr = 0x0216D028 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D20C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D234 +mode = "arm" +kind = "runtime_observed" +# hits = 10236 + +[[entry_point]] +addr = 0x0216D398 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D3F8 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D414 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216D878 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216DA88 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216E52C +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216EDA8 +mode = "arm" +kind = "runtime_observed" +# hits = 2690 + +[[entry_point]] +addr = 0x0216F100 +mode = "arm" +kind = "runtime_observed" +# hits = 2 + +[[entry_point]] +addr = 0x0216F208 +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216F41C +mode = "arm" +kind = "runtime_observed" +# hits = 5 + +[[entry_point]] +addr = 0x0216F59C +mode = "arm" +kind = "runtime_observed" +# hits = 3 + +[[entry_point]] +addr = 0x0216F5F8 +mode = "arm" +kind = "runtime_observed" +# hits = 14230 + +[[entry_point]] +addr = 0x0216F6F4 +mode = "arm" +kind = "runtime_observed" +# hits = 4 + +[[entry_point]] +addr = 0x0216F914 +mode = "arm" +kind = "runtime_observed" +# hits = 10236 + +[[entry_point]] +addr = 0x0216F994 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216FA1C +mode = "arm" +kind = "runtime_observed" +# hits = 10236 + +[[entry_point]] +addr = 0x0216FAE4 +mode = "arm" +kind = "runtime_observed" +# hits = 1 + +[[entry_point]] +addr = 0x0216FC40 +mode = "arm" +kind = "runtime_observed" +# hits = 10236 diff --git a/config/mph_rom_profiles.json b/config/mph_rom_profiles.json index 838996a..169bc4e 100644 --- a/config/mph_rom_profiles.json +++ b/config/mph_rom_profiles.json @@ -146,7 +146,7 @@ "sha1": "bdcd1dea293e24c98d4c481430e90d21198985a5", "program_id": "mph_amhp1", "coverage": "coverage/eu11-bootstrap-entry-points.json", - "game_config": "config/game-eu11.toml", + "game_config": "game.toml", "fmv_runtime": false, "fmv_runtime_bank": "mph_amhp1_arm9_fmv_runtime", "launcher_default_rom": "Metroid Prime Hunters (Europe Rev 1).nds", diff --git a/docs/EU1_1_BRINGUP.md b/docs/EU1_1_BRINGUP.md index 0871764..fc36f3c 100644 --- a/docs/EU1_1_BRINGUP.md +++ b/docs/EU1_1_BRINGUP.md @@ -2,9 +2,9 @@ This document describes the current multi-ROM architecture in this branch. It supersedes the earlier whole-ROM-SHA-1-driven runtime-profile design and -includes the upstream Wi-Fi firmware-state persistence work integrated from -`mstan/MetroidPrimeHuntersRecomp` commit -`5abcfee6187d572e752985ede2364f165d62dd6a`. +tracks upstream `mstan/MetroidPrimeHuntersRecomp` through commit +`905ffab20ecd0d9c3c1017fb757aec73c435a1ad`. Upstream title-specific changes +are integrated without restoring its US1.0-only runtime identity assumptions. ## 1. Status @@ -25,14 +25,17 @@ Adaptive Widescreen is also statically address-mapped for all seven base revisions. It is no longer hidden for EU1.1. Actual guest code/data writes are still fail-closed and require an authoritative executable checksum. -Exact build/capture content profiles currently exist for: +The ROM-free generic runner can execute supported revisions through the +reference/Tier-3 path without a revision-specific native title bank. Exact +build/capture profiles are still useful for optimized AOT/JIT/cache provenance. +Current exact content profiles are: - `US1_0` clean retail ROM - `EU1_1` clean retail ROM -The other retail revisions and individual modified ROMs still require their own -exact-content build/capture profile, coverage and generated artifacts before -they can be called fully supported. +The other retail revisions and individual modified ROMs can run through the +runtime detector, but still need their own exact-content optimization coverage +before a content-specific native cache/bank can be reused safely. ## 2. Sources of truth @@ -108,6 +111,7 @@ Whole-ROM SHA-1 identifies the exact content used to generate or validate: - runtime coverage - checkpoints - FMV/runtime captures +- future persistent optimization caches This identity is not the runtime-address selector. @@ -217,12 +221,13 @@ Canonical clean profiles reserve the seven base keys. Example: "known_clean": true, "game_code": "AMHE", "revision": 0, - "sha1": "...exact clean whole-ROM SHA-1..." + "sha1": "...exact clean whole-ROM SHA-1...", + "game_config": "game.toml" } ``` A future exact mod profile must use a distinct key and reference the compatible -base layout: +base layout. Frontend policy remains the shared runtime-generic `game.toml`: ```json "US1_0_LAST_RAVEN": { @@ -233,7 +238,7 @@ base layout: "sha1": "...exact Last Raven whole-ROM SHA-1...", "program_id": "mph_amhe0_last_raven", "coverage": "coverage/last-raven-entry-points.json", - "game_config": "config/game-last-raven.toml", + "game_config": "game.toml", "fmv_runtime": false, "fmv_runtime_bank": "mph_amhe0_last_raven_arm9_fmv_runtime", "launcher_default_rom": "Metroid Prime Hunters - Last Raven.nds", @@ -256,6 +261,7 @@ Current clean EU1.1 profile: - revision: `1` - whole-ROM SHA-1: `bdcd1dea293e24c98d4c481430e90d21198985a5` - default launcher ROM: `Metroid Prime Hunters (Europe Rev 1).nds` +- shared frontend config: `game.toml` - Adaptive Widescreen: exposed and revision-aware - FMV runtime bank: disabled until an EU1.1-specific capture is validated @@ -267,12 +273,21 @@ Reserved EU1.1 runtime bank identity: No US1.0 FMV runtime capture is reused for EU1.1. -## 9. Upstream Wi-Fi firmware-state persistence +## 9. Latest upstream launcher / Wi-Fi integration -The branch integrates the upstream `5abcfee` Wi-Fi persistence behavior while -preserving the multi-ROM launcher generation and SHA policy. +The branch tracks upstream title changes through `905ffab` while preserving the +multi-ROM launcher generation and runtime detector. -The launcher now assigns mutable firmware state under: +Relevant upstream additions now carried here include: + +- persistent mutable firmware/WFC state from `5abcfee` +- local WFC peer routing support through ndsrecomp `302404ad...` +- friend-match QA continuation from `1932f6` +- persisted user-selected ROM path from `413c61` +- offline multiplayer/bot coverage tooling and overlay-generation utilities +- the `run_to_event` exhaustion fix in `905ffab` + +The launcher assigns mutable firmware state under: `%APPDATA%\MetroidPrimeHuntersRecomp` @@ -285,17 +300,19 @@ The selected state file is passed to the runner through `--firmware-state-path`. Wi-Fi settings, WFC updates and console/game-card pairing can therefore persist across normal launches and guest shutdowns. -The dashboard console-MAC display prefers the persisted mutable firmware state -after it exists, falling back to the generated installation identity on the -first generated-firmware launch. +The launcher also remembers the selected ROM path. A remembered ROM is offered +on the next launch only if it still exists. The multi-ROM launcher-generation +layer adds a further guard so a missing conventional ROM filename is never +presented to recomp-ui as an already-selected cartridge. -This required updating the pinned ndsrecomp revision to: +The pinned ndsrecomp revision is now: -`6c6a03bdcf99093f64555c4d05d16e522dc58634` +`302404ada0929528b680fa6808aad253b425c7a2` -The new upstream runner still contains old US1.0 SHA/address assumptions in its -baseline source, so the local multi-ROM patch stack remains authoritative and -replaces them during the build. +That revision adds per-instance slirp/local WFC peer routing. The upstream +runner still contains US1.0 assumptions in title-specific baseline code, so the +local multi-ROM patch stack remains authoritative and replaces those assumptions +during the build. ## 10. Preparing an exact content profile @@ -323,7 +340,7 @@ python tools/prepare_mph.py \ It then extracts ARM9, ARM7 and overlays and emits content-specific seed configs. -## 11. Coverage and capture safety +## 11. Coverage, overlays and capture safety Static and runtime promotion is profile/content aware. @@ -338,6 +355,14 @@ not reused from US1.0 constants. FMV/runtime capture promotion verifies exact content provenance. A capture from one content SHA must not be promoted into another content profile. +The latest upstream sync also carries validated US1.0 overlay seed configs for +overlays `0, 1, 2, 3, 4, 8, 9, 10, 15`, plus +`tools/seed_overlay_from_coverage.py`, `tools/overlay_coverage_report.py` and +`tools/mph_overlay_route.py`. These are **US1.0 exact-content optimization +assets**, not runtime profiles and not generic multi-ROM banks. They must never +be reused for another ROM content identity merely because that ROM shares the +same runtime layout. The ROM-free Nightly still does not link these title banks. + ## 12. CI and runtime safety tests CI downloads the current melonPrimeDS `develop_hud` detector/address table and @@ -360,36 +385,28 @@ produce the canonical melonPrimeDS executable checksums. It verifies: - patched `title_patches.cpp`, `frontend.cpp` and `main.cpp` compile against the pinned runner - US1.0/EU1.1 launcher generation and exact-content ROM checkers compile +- upstream launcher/tests and the imported overlay QA tools remain pinned to the + audited upstream title commit -At the time of this update, `MPH Multi-ROM Static Checks` run #72 passes every -main validation step. - -## 13. Remaining work for full multi-ROM support +`MPH Multi-ROM Static Checks` #123 passed after the upstream `905ffab` / ndsrecomp +`302404ad...` integration. -The detector/address architecture is prepared for all seven base revisions, but -full player-facing support still requires exact content work per ROM: +## 13. Remaining optimization work -1. add verified clean content profiles for US1.1, EU1.0, JP1.0, JP1.1 and KR1.0 -2. prepare/extract each exact ROM -3. capture deterministic coverage and promote it under that exact SHA -4. generate revision-specific ARM9/ARM7/overlay banks -5. validate boot, Adventure, pause, save/load and multiplayer-menu paths -6. validate Prime Controls, Direct Mouse Aim and Adaptive Widescreen semantics - on real execution -7. compare checkpoints against reference/native execution -8. capture revision-specific FMV runtime code only where interpreter fallback - needs optimization -9. regression-test US1.0 after each new profile +Runtime execution is available through the generic ROM-free runner, but +content-specific native optimization remains separate work per exact ROM. -For a modified ROM, additionally: +For another retail revision or modified ROM: -1. compute the exact whole-ROM SHA-1 +1. compute/record the exact whole-ROM SHA-1 for cache/provenance identity 2. compute the melonPrimeDS-compatible header+ARM9+ARM7 CRC32 3. determine and validate its runtime base layout 4. if code-modified, register the executable checksum only after Aim/Morph/ Widescreen address compatibility is established -5. add a distinct content profile with `base_profile` -6. generate/promote coverage and banks under that mod's exact content identity +5. add a distinct exact content profile when persistent optimization artifacts + are required +6. generate/promote coverage and banks/cache entries under that exact content + identity Do not guess an unknown mod as US1.0 simply because its filename, region or header resembles US1.0. diff --git a/game.toml b/game.toml index 1d99a24..ac25d18 100644 --- a/game.toml +++ b/game.toml @@ -1,17 +1,9 @@ [game] name = "Metroid Prime Hunters" -id = "AMHE" -region = "USA" -revision = 0 -status = "ROM-gated main banks enter Celestial Archives gameplay with interpreter fallback" -rom = "Metroid Prime Hunters.nds" -rom_size = 0x04000000 -sha1 = "90164d1ac127ee5f9815ea4ae7de798c7b5fc629" -sha256 = "7d0a98ff98e1b7c985d1f3d89b01730af1b2115061a4dfea847612d217a8b855" +status = "Generic multi-ROM runtime config; ROM version is selected by the executable-compatible runtime detector" [display] -# Prime Hunters uses both screens heavily. Keep them independently presentable -# from the beginning, matching the established SM64DS host layout. +# Prime Hunters uses both screens heavily. Keep them independently presentable. screen_layout = "separate" supersampling = 1 antialiasing = 0 @@ -19,53 +11,35 @@ antialiasing = 0 # The shared host-side adaptive renderer expands only the upper 3D viewport to # 21:9. The lower touchscreen remains native 256x192 and independently # clickable. Runtime executable compatibility, not whole-ROM SHA-1, gates the -# title-owned projection/culling patch. +# title-owned projection/culling patch for all supported revisions. adaptive_widescreen = "top" -adaptive_capability = "top" +# Do not declare display.adaptive_capability here. ndsrecomp intentionally +# requires an exact game.sha1 for TOML-declared title capabilities. This shared +# config has no exact content identity, so the MPH runtime patch grants TOP +# capability only after the executable-compatible detector selects a supported +# base profile. Unknown/header-only content remains fail-closed. adaptive_width = 448 -# SM64DS needs a cylindrical-sky repair heuristic. Prime Hunters does not opt -# into that title-specific treatment; uncovered geometry remains visible -# during the MPH projection/culling audit. adaptive_skybox_fill = false -# Gameplay enables three transparent text-tile planes for the visor and HUD. -# Anchor their authored left/center/right bands over the widened 3D world -# instead of falling back to a pillarboxed native composite. adaptive_hud_anchor = true -# MPH's centered location banner and energy assembly are wider than the -# framework's conservative 64-pixel default. Preserve source X=64..191 as one -# centered unit so text and bars never cross an anchor seam. adaptive_hud_center_width = 128 [system] -# Exercise the authentic BIOS/firmware/card path and automatically launch the -# inserted cartridge after the normal firmware sequence. +# The ROM-free launcher uses FreeBIOS/generated firmware with direct boot. +# Other callers may override the boot path through CLI options. startup_mode = "automatic" [cartridge] -# melonDS ROMList entry AMHE: SaveMemType 5 (256 KiB flash). +# Metroid Prime Hunters uses the same 256 KiB flash save geometry across the +# supported retail revisions. save_type = "flash" save_size = 262144 -[arm9] -rom_offset = 0x00004000 -entry_pc = 0x02004800 -load_address = 0x02004000 -compressed_size = 0x0007e6c4 -decompressed_size = 0x000dd9d8 -overlay_count = 18 - -[arm7] -rom_offset = 0x0013aa00 -entry_pc = 0x02380000 -load_address = 0x02380000 -size = 0x00028464 - [framework] path = "../ndsrecomp" -pin = "6c6a03bdcf99093f64555c4d05d16e522dc58634" +pin = "302404ada0929528b680fa6808aad253b425c7a2" branch = "main" [reference.mphread] url = "https://github.com/NoneGiven/MphRead.git" pin = "26cd8a6fe93dc5e525d1a1bb304fe96001111e55" -use = "AMHE0-aware gameplay, save, room/entity, model, animation, collision, audio, and file-format research" +use = "MPH gameplay, save, room/entity, model, animation, collision, audio, and file-format research" diff --git a/launcher/recomp-ui/launcher_main.cpp b/launcher/recomp-ui/launcher_main.cpp index 8258166..780e3b9 100644 --- a/launcher/recomp-ui/launcher_main.cpp +++ b/launcher/recomp-ui/launcher_main.cpp @@ -79,6 +79,12 @@ struct ModState { std::string pad_weapon6 = "None"; std::string pad_virtual_stylus = "None"; std::string pad_menu = "Pad Start"; + // Persisted ROM choice (beads-lqa.3). The shared launcher writes its own + // rom.cfg sidecars but never reads them back (beads-0fu.1), so the ROM the + // user picked was lost on every relaunch and the hardcoded bundled default + // was re-offered -- "ROM not found" for anyone whose dump lives elsewhere. + // Owning the path here keeps the fix independent of the recomp-ui build. + std::string rom_path; // Persisted BIOS choice, psxrecomp-style: any one of the three retail // dump files (its folder is used at launch). Empty = the built-in // FreeBIOS + generated firmware. @@ -399,6 +405,11 @@ void load_mod_state(ModState& state) { state.mouse_invert_y = value == "true"; } else if (key == "prime_controls") { state.prime_controls = value != "false"; + } else if (key == "rom_path") { + // Kept verbatim. Existence is checked at use, not here: a dump on + // removable media that is absent this launch should not erase the + // remembered pick. + state.rom_path = value; } else if (key == "bios_path") { state.bios_path = value; } else if (key == "player_name_override") { @@ -466,7 +477,7 @@ bool save_mod_state(ModState& state) { state.last_error = "Could not write launcher mod settings."; return false; } - file << "settings_version=2\n" + file << "settings_version=3\n" << "adaptive_widescreen=" << (state.adaptive_widescreen ? "true" : "false") << '\n' << "hd_rendering=" @@ -483,6 +494,7 @@ bool save_mod_state(ModState& state) { << "virtual_stylus_sensitivity=" << state.virtual_stylus_sensitivity << '\n' << "pad_aim_sensitivity=" << state.pad_aim_sensitivity << '\n' + << "rom_path=" << state.rom_path << '\n' << "bios_path=" << state.bios_path << '\n' << "player_name=" << state.player_name << '\n'; for (const BindingOption& option : kBindingOptions) @@ -994,9 +1006,14 @@ int nds_bios_verify(const char* bios_path, RecompLauncherCBiosVerify* out) { int nds_persist_setup(void* context, const char* rom_path, const char* bios_path) { - (void)rom_path; if (!context) return 1; auto* state = static_cast(context); + // beads-lqa.3: the ROM path used to be discarded here, which is why the + // pick never survived a relaunch. An empty callback value means "no ROM + // selected right now", not "forget the remembered one" -- the launcher + // fires this on BIOS browse too, and clearing on those would resurrect the + // original bug. + if (rom_path && rom_path[0]) state->rom_path = rom_path; state->bios_path = bios_path ? bios_path : ""; return save_mod_state(*state) ? 0 : 1; } @@ -1234,8 +1251,17 @@ int main(int argc, char** argv) { game.persist_setup = nds_persist_setup; game.persist_setup_ctx = &mod_state; - const std::filesystem::path default_rom = - exe / "Metroid Prime Hunters.nds"; + // beads-lqa.3: prefer the remembered pick, fall back to the bundled dump + // next to the exe. A remembered path whose file is gone falls back too, + // so a moved or deleted ROM presents the bundled default rather than a + // stale selection the user cannot launch. + std::filesystem::path default_rom = exe / "Metroid Prime Hunters.nds"; + if (!mod_state.rom_path.empty()) { + std::error_code rom_error; + const std::filesystem::path remembered(mod_state.rom_path); + if (std::filesystem::is_regular_file(remembered, rom_error)) + default_rom = remembered; + } char selected_rom[1024]{}; const int result = recomp_launcher_run_window( "Metroid Prime Hunters - Launcher", &settings, &game, @@ -1249,6 +1275,10 @@ int main(int argc, char** argv) { // The UI's final BIOS selection is authoritative for this launch even if // a persist callback was missed (persistence is best-effort UX). mod_state.bios_path = settings.bios_path; + // Same for the ROM (beads-lqa.3). PLAY can be pressed without the persist + // callback ever firing for the ROM, so treat what we are about to launch + // as the thing to remember. + if (selected_rom[0]) mod_state.rom_path = selected_rom; // Same for the ONLINE card's player name. An invalid entry is surfaced // and dropped rather than silently reshaped or allowed to block launch. { diff --git a/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp b/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp index 80e8a1b..fd209cb 100644 --- a/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp +++ b/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp @@ -394,5 +394,77 @@ int main() { std::filesystem::remove(hd_saved.settings_path); } + // beads-lqa.3: the chosen ROM must survive a relaunch. It used to be + // discarded in nds_persist_setup, so every launch fell back to the bundled + // default path and anyone whose dump lived elsewhere saw "ROM not found" + // forever. + { + const std::filesystem::path settings_path = + std::filesystem::temp_directory_path() / + "mph_mod_provider_rom_settings.ini"; + + ModState saved{}; + saved.settings_path = settings_path; + saved.rom_path = "D:\\Games\\NDS\\Metroid Prime Hunters.nds"; + saved.bios_path = "D:\\Games\\NDS\\bios\\biosnds9.rom"; + if (!require(save_mod_state(saved), "rom save")) return 73; + + ModState loaded{}; + loaded.settings_path = settings_path; + load_mod_state(loaded); + if (!require(loaded.rom_path == saved.rom_path, + "rom path round trip")) return 74; + + // The callback fires on BIOS browse too, with no ROM. An empty value + // means "nothing selected right now", never "forget the pick" -- + // clearing here would reintroduce the original bug. + if (!require(nds_persist_setup(&loaded, "", "E:\\dumps\\biosnds7.rom") + == 0, + "persist_setup with empty rom succeeds")) return 75; + if (!require(loaded.rom_path == saved.rom_path, + "empty persist_setup rom does not clear the pick")) + return 76; + if (!require(loaded.bios_path == "E:\\dumps\\biosnds7.rom", + "persist_setup still updates bios")) return 77; + + if (!require(nds_persist_setup(&loaded, "E:\\other\\MPH.nds", "") == 0, + "persist_setup with a rom succeeds")) return 78; + if (!require(loaded.rom_path == "E:\\other\\MPH.nds", + "persist_setup records a new rom pick")) return 79; + + // A path containing '=' must survive: load_mod_state splits on the + // FIRST '=', so everything after it is the value. + ModState equals_saved{}; + equals_saved.settings_path = settings_path; + equals_saved.rom_path = "D:\\ROMs\\a=b\\Metroid Prime Hunters.nds"; + if (!require(save_mod_state(equals_saved), "rom save with equals")) + return 80; + ModState equals_loaded{}; + equals_loaded.settings_path = settings_path; + load_mod_state(equals_loaded); + if (!require(equals_loaded.rom_path == equals_saved.rom_path, + "rom path with '=' round trip")) return 81; + + // A pre-existing version-2 file has no rom_path key. It must load + // cleanly with an empty pick and keep everything else. + { + std::ofstream file(settings_path, std::ios::trunc); + file << "settings_version=2\n" + "bios_path=F:\\keepme\\biosnds9.rom\n" + "player_name=Samus\n"; + } + ModState migrated{}; + migrated.settings_path = settings_path; + load_mod_state(migrated); + if (!require(migrated.rom_path.empty(), + "version 2 settings have no remembered rom")) return 82; + if (!require(migrated.bios_path == "F:\\keepme\\biosnds9.rom", + "version 2 migration keeps bios_path")) return 83; + if (!require(migrated.player_name == "Samus", + "version 2 migration keeps player_name")) return 84; + + std::filesystem::remove(settings_path); + } + return 0; } diff --git a/ndsrecomp.pin b/ndsrecomp.pin index cfba97c..a771dff 100644 --- a/ndsrecomp.pin +++ b/ndsrecomp.pin @@ -1 +1 @@ -6c6a03bdcf99093f64555c4d05d16e522dc58634 +302404ada0929528b680fa6808aad253b425c7a2 diff --git a/scenarios/mp_bots_start.json b/scenarios/mp_bots_start.json new file mode 100644 index 0000000..204cb1c --- /dev/null +++ b/scenarios/mp_bots_start.json @@ -0,0 +1,177 @@ +{ + "description": "Hypothesis test: a slot showing a green check is OPEN FOR A HUMAN PEER, not ready. Convert all three non-host slots to bots (star rating) so nothing waits on a peer, then START.", + "actions": [ + { + "kind": "touch", + "x": 160, + "y": 92 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 128, + "y": 80 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 50, + "y": 80 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 50, + "y": 62 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 27, + "y": 132 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 600 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 222, + "y": 133 + }, + { + "kind": "wait", + "frames": 180 + }, + { + "kind": "touch", + "x": 148, + "y": 60 + }, + { + "kind": "wait", + "frames": 180 + }, + { + "kind": "touch", + "x": 222, + "y": 60 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "key", + "key": "start" + }, + { + "kind": "wait", + "frames": 600 + }, + { + "kind": "wait", + "frames": 600 + }, + { + "kind": "wait", + "frames": 600 + } + ] +} \ No newline at end of file diff --git a/scenarios/mp_singlecard_probe.json b/scenarios/mp_singlecard_probe.json new file mode 100644 index 0000000..99a44bd --- /dev/null +++ b/scenarios/mp_singlecard_probe.json @@ -0,0 +1,59 @@ +{ + "description": "Probe: SINGLE-CARD PLAY branch, to test whether it is the offline-with-bots path rather than MULTI-CARD.", + "actions": [ + { + "kind": "touch", + "x": 160, + "y": 92 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 50, + "y": 80 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + } + ] +} \ No newline at end of file diff --git a/scenarios/mp_start_probe.json b/scenarios/mp_start_probe.json new file mode 100644 index 0000000..4828b26 --- /dev/null +++ b/scenarios/mp_start_probe.json @@ -0,0 +1,178 @@ +{ + "description": "Probe: at the 3-bot lobby, try each candidate start control in turn with a screenshot after each. Known DISPROVED already: START key, A key, touch (105,133) which is a bot-level star control.", + "actions": [ + { + "kind": "touch", + "x": 160, + "y": 92 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 128, + "y": 80 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 50, + "y": 80 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 50, + "y": 62 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 27, + "y": 132 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 600 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 222, + "y": 133 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 148, + "y": 60 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 222, + "y": 60 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 20, + "y": 16 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "start" + }, + { + "kind": "wait", + "frames": 400 + } + ] +} \ No newline at end of file diff --git a/scenarios/multiplayer_battle_bots.json b/scenarios/multiplayer_battle_bots.json new file mode 100644 index 0000000..2a101e1 --- /dev/null +++ b/scenarios/multiplayer_battle_bots.json @@ -0,0 +1,165 @@ +{ + "description": "Offline multiplayer BATTLE against bots -- no peer console required. This is the standard in-game measurement route: no navigation skill needed, and the arena is a menu-selected variable (Battle offers ARENA n/9), so swapping content is one pair of arrow taps. USE MULTI-CARD, NOT SINGLE-CARD: single-card play does not allow bots at all -- its slots read AVAILABLE and only accept peer consoles -- which is the most misleading thing about this flow. Coordinates, measured from captured frames: main-menu MULTIPLAYER (160,92) [ADVENTURE is (84,92)]; nickname dialog = two A presses; mode row y~80 (SINGLE-CARD x~50, MULTI-CARD x~128, WI-FI x~205); CREATE/JOIN row y~80 (CREATE x~50, JOIN x~128); game-mode grid top row y~58 (BATTLE x~50); arena arrows y~48 (left x~125, right x~232), confirm (222,173); hunter Samus (27,132) then A; waiting room ADD + at (222,173). START SEQUENCE -- what earlier attempts got wrong: after adding bots with ADD +, TAP THE GREEN CHECKBOX BESIDE EACH BOT to confirm it. Those checkboxes are per-slot CONFIRM controls, not a ready toggle and not a difficulty widget; confirming is what reveals a bot's star rating, which is why tapping one looked like a difficulty selector. Once every bot is confirmed a START BATTLE control becomes available -- TAP IT. The match starts by tapping an on-screen control, NOT via the START or A key; pressing those does nothing, which stalled every earlier automated attempt. The actions below stop after confirming the bots; the final START BATTLE tap coordinate still needs measuring from a captured frame.", + "actions": [ + { + "kind": "touch", + "x": 160, + "y": 92 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 128, + "y": 80 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 50, + "y": 80 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 50, + "y": 62 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 27, + "y": 132 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "key", + "key": "a" + }, + { + "kind": "wait", + "frames": 600 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 240 + }, + { + "kind": "touch", + "x": 222, + "y": 173 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "touch", + "x": 222, + "y": 133 + }, + { + "kind": "wait", + "frames": 180 + }, + { + "kind": "touch", + "x": 148, + "y": 60 + }, + { + "kind": "wait", + "frames": 180 + }, + { + "kind": "touch", + "x": 222, + "y": 60 + }, + { + "kind": "wait", + "frames": 300 + }, + { + "kind": "wait", + "frames": 300 + } + ] +} \ No newline at end of file diff --git a/scenarios/multiplayer_probe.json b/scenarios/multiplayer_probe.json new file mode 100644 index 0000000..d2711ab --- /dev/null +++ b/scenarios/multiplayer_probe.json @@ -0,0 +1,29 @@ +{ + "description": "Discovery trace: Multiplayer -> MULTI-CARD -> CREATE GAME -> BATTLE -> confirm arena -> select hunter -> start, to establish whether a local match can begin with no peer DS present. Verified coordinates: main-menu MULTIPLAYER touch (160,92); nickname dialog takes two A presses; mode row touch y~80 (SINGLE-CARD x~50, MULTI-CARD x~128, WI-FI x~205); CREATE/JOIN row touch y~80 (CREATE x~50, JOIN x~128); game-mode grid top row touch y~58 (BATTLE x~50); arena screen shows ARENA n/9 with arrows at touch y~48 (left x~125, right x~232) and a confirm check at touch (222,173).", + "actions": [ + { "kind": "touch", "x": 160, "y": 92 }, + { "kind": "wait", "frames": 240 }, + { "kind": "wait", "frames": 240 }, + { "kind": "key", "key": "a" }, + { "kind": "wait", "frames": 240 }, + { "kind": "key", "key": "a" }, + { "kind": "wait", "frames": 240 }, + { "kind": "touch", "x": 128, "y": 80 }, + { "kind": "wait", "frames": 300 }, + { "kind": "wait", "frames": 300 }, + { "kind": "touch", "x": 50, "y": 80 }, + { "kind": "wait", "frames": 300 }, + { "kind": "wait", "frames": 300 }, + { "kind": "touch", "x": 50, "y": 62 }, + { "kind": "wait", "frames": 300 }, + { "kind": "wait", "frames": 300 }, + { "kind": "touch", "x": 222, "y": 173 }, + { "kind": "wait", "frames": 300 }, + { "kind": "wait", "frames": 300 }, + { "kind": "touch", "x": 27, "y": 132 }, + { "kind": "wait", "frames": 300 }, + { "kind": "key", "key": "a" }, + { "kind": "wait", "frames": 600 }, + { "kind": "wait", "frames": 600 } + ] +} diff --git a/tools/check_mph_multirom_profiles.py b/tools/check_mph_multirom_profiles.py index eee8dc5..efaada2 100755 --- a/tools/check_mph_multirom_profiles.py +++ b/tools/check_mph_multirom_profiles.py @@ -2,9 +2,9 @@ """Validate the current multi-ROM schema, then run the legacy deep checks. The legacy checker predates the all-version Adaptive Widescreen address table -and intentionally asserted EU1_1=false plus three runtime fields. Preserve its -broad coverage on a compatibility view while validating the new scale fields -against melonPrimeDS on the real registry. +and the shared runtime-generic frontend config. Preserve its broad coverage on +a temporary compatibility view while validating the current scale fields and +generic config contract against the real registry. """ from __future__ import annotations @@ -66,15 +66,44 @@ def validate_scale_registry(repo: Path, table: Path | None) -> None: profiles = registry.get("profiles") if not isinstance(profiles, dict): die("content profiles missing") + + # Runtime frontend policy is shared by every exact-content profile. Exact + # ROM SHA/header identity belongs in this registry and generated bank/cache + # provenance, not in one region-specific game TOML. + shared_config = repo / "game.toml" + if not shared_config.is_file(): + die("shared runtime frontend config is missing: game.toml") + shared_text = shared_config.read_text(encoding="utf-8") + if 'adaptive_widescreen = "top"' not in shared_text: + die("shared game.toml does not request top-screen Adaptive Widescreen") + # ndsrecomp deliberately requires an exact [game].sha1 when a TOML grants + # display.adaptive_capability. The generic seven-version config has no exact + # SHA, so capability must be granted later by the executable-compatible + # runtime detector instead of being declared here. + if 'adaptive_capability = "top"' in shared_text: + die("shared game.toml must not declare SHA-gated adaptive_capability") + capability_patch = repo / "tools" / "patch_ndsrecomp_mph_adaptive_capability.py" + if not capability_patch.is_file(): + die("runtime adaptive capability patch is missing") + capability_text = capability_patch.read_text(encoding="utf-8") + for required in ( + "nds_title_patches_mph_host_writes_compatible()", + "frontend_options.adaptive_supported |= NDS_ADAPTIVE_TOP", + "MPH_MULTIROM_RUNTIME_ADAPTIVE_CAPABILITY", + ): + if required not in capability_text: + die(f"runtime adaptive capability patch lost required guard: {required}") + for forbidden in ("\nid =", "\nregion =", "\nrevision =", "\nrom =", "\nrom_size =", "\nsha1 ="): + if forbidden in shared_text: + die(f"shared game.toml still contains exact-content identity field: {forbidden.strip()}") + for key, profile in profiles.items(): if not isinstance(profile, dict): die(f"{key}: invalid content profile") if profile.get("adaptive_widescreen") is not True: die(f"{key}: Adaptive Widescreen must remain exposed for known content profiles") - config_path = repo / str(profile.get("game_config", "")) - text = config_path.read_text(encoding="utf-8") - if 'adaptive_widescreen = "top"' not in text or 'adaptive_capability = "top"' not in text: - die(f"{key}: game config does not expose top-screen Adaptive Widescreen") + if profile.get("game_config") != "game.toml": + die(f"{key}: content profiles must share the generic game.toml frontend config") if table: text = table.read_text(encoding="utf-8") @@ -97,6 +126,7 @@ def validate_scale_registry(repo: Path, table: Path | None) -> None: def legacy_compat_view(repo: Path, destination: Path) -> Path: + """Synthesize the old per-profile config shape only for the legacy checker.""" target = destination / "repo" shutil.copytree( repo, target, @@ -108,13 +138,32 @@ def legacy_compat_view(repo: Path, destination: Path) -> Path: runtime = item["runtime"] for field in SCALE_FIELDS: runtime.pop(field, None) - registry["profiles"]["EU1_1"]["adaptive_widescreen"] = False - registry_path.write_text(json.dumps(registry, indent=2) + "\n", encoding="utf-8") - eu_config = target / "config" / "game-eu11.toml" - lines = eu_config.read_text(encoding="utf-8").splitlines() - lines = [line for line in lines if not line.startswith("adaptive_widescreen =")] - eu_config.write_text("\n".join(lines) + "\n", encoding="utf-8") + # The old checker expects exact identity duplicated into each game config + # and also expects the historical EU1.1 widescreen-disable state. Generate + # those files only inside the temporary compatibility copy so production + # source keeps one generic game.toml. + for key, profile in registry["profiles"].items(): + legacy_rel = f"config/.legacy-{key}.toml" + profile["game_config"] = legacy_rel + adaptive = profile.get("adaptive_widescreen") is True + if key == "EU1_1": + adaptive = False + profile["adaptive_widescreen"] = False + lines = [ + "[game]", + f'id = "{profile["game_code"]}"', + f'revision = {profile["revision"]}', + f'rom_size = {profile["rom_size"]}', + f'sha1 = "{profile["sha1"]}"', + "", + "[display]", + ] + if adaptive: + lines.append('adaptive_widescreen = "top"') + (target / legacy_rel).write_text("\n".join(lines) + "\n", encoding="utf-8") + + registry_path.write_text(json.dumps(registry, indent=2) + "\n", encoding="utf-8") return target @@ -131,7 +180,7 @@ def main() -> None: with tempfile.TemporaryDirectory(prefix="mph-multirom-check-") as temp: compat = legacy_compat_view(repo, Path(temp)) legacy.validate_registry(compat, table) - print("OK: Adaptive Widescreen address/capability checks passed for all seven MPH revisions") + print("OK: seven-version runtime tables and shared generic game.toml are consistent") if __name__ == "__main__": diff --git a/tools/mph_overlay_route.py b/tools/mph_overlay_route.py new file mode 100644 index 0000000..05a7ce4 --- /dev/null +++ b/tools/mph_overlay_route.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python3 +"""Run a route and report which overlays it exercised. + +beads-yjp.31. The measurement loop: cold boot -> replay a scenario -> dump the +Tier-3 coverage manifest over TCP -> map it onto the overlay table. + +The manifest dump is a debug command rather than an exit-path write because +--serve never exits its accept loop, so a harness-killed session would +otherwise lose everything it recorded. Dumping on demand also means a route +can be sampled part-way through instead of only at the end. + +Screenshots are captured at every step so a route can be checked visually and +so new screen predicates can be measured from real frames. +""" + +from __future__ import annotations + +import argparse +import json +import socket +import subprocess +import sys +import time +from pathlib import Path + +KEY_BITS = { + "a": 0, "b": 1, "select": 2, "start": 3, "right": 4, "left": 5, + "up": 6, "down": 7, "r": 8, "l": 9, "x": 10, "y": 11, +} +# Active-low, and the server's own default of 0x3FF would leave X and Y held. +RELEASED = 0x0FFF + + +class DebugClient: + def __init__(self, port: int, timeout: float = 1800.0) -> None: + self.sock = socket.create_connection(("127.0.0.1", port), timeout=timeout) + self.buf = b"" + + def cmd(self, name: str, **args: object) -> dict: + args["cmd"] = name + self.sock.sendall((json.dumps(args) + "\n").encode()) + while b"\n" not in self.buf: + chunk = self.sock.recv(1 << 16) + if not chunk: + raise RuntimeError("debug server closed the connection") + self.buf += chunk + line, self.buf = self.buf.split(b"\n", 1) + reply = json.loads(line) + if isinstance(reply, dict) and "error" in reply: + raise RuntimeError(f"{name}: {reply['error']}") + return reply + + def vblank(self) -> int: + return int(self.cmd("event_counts")["vblank9"]) + + def advance_to(self, target: int) -> None: + """Advance to an absolute vblank, resuming when the round budget runs out. + + run_to_event caps at max_rounds and returns exhausted=True having gone + only part way -- reaching the title screen alone needs more than the + 50M default. Not resuming silently under-ran every route: the boot + stopped at vblank 6461 instead of 7800 and every subsequent tap landed + at the wrong moment, which looked exactly like a regression in the + build under test. It was not; all builds stop at the same vblank. + """ + for _ in range(200): + reply = self.cmd("run_to_event", event="vblank9", count=target, + max_rounds=50_000_000) + if reply.get("terminal"): + raise RuntimeError(f"runner halted: {reply.get('reason9')} / " + f"{reply.get('reason7')}") + if reply.get("stalled"): + raise RuntimeError(f"stalled before vblank9 {target}") + if self.vblank() >= target: + return + raise RuntimeError(f"could not reach vblank9 {target}") + + def advance(self, frames: int) -> None: + self.advance_to(self.vblank() + frames) + + def tap(self, x: int, y: int, hold: int) -> None: + self.cmd("touch", x=x, y=y, down=True) + self.advance(hold) + self.cmd("touch", x=0, y=0, down=False) + + def press(self, key: str, hold: int) -> None: + bit = KEY_BITS[key] + self.cmd("keys", mask=RELEASED & ~(1 << bit)) + self.advance(hold) + self.cmd("keys", mask=RELEASED) + + def screenshot(self, path: Path) -> None: + try: + from PIL import Image + except ImportError: + return + frames = [] + for engine in ("A", "B"): + fb = self.cmd("framebuffer", engine=engine) + raw = bytes.fromhex(fb["rgb"]) + frames.append(Image.frombytes("RGB", (fb["w"], fb["h"]), raw)) + combined = Image.new("RGB", (frames[0].width, + frames[0].height + frames[1].height)) + combined.paste(frames[0], (0, 0)) + combined.paste(frames[1], (0, frames[0].height)) + combined.save(path) + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--runner", type=Path, required=True) + parser.add_argument("--bios", type=Path, required=True) + parser.add_argument("--rom", type=Path, required=True) + parser.add_argument("--config", type=Path, required=True) + parser.add_argument("--actions", type=Path, required=True) + parser.add_argument("--out", type=Path, required=True) + parser.add_argument("--overlays", type=Path, + default=Path("generated/inputs/overlays.json")) + parser.add_argument("--port", type=int, default=19890) + parser.add_argument("--start-vblank", type=int, default=7800) + parser.add_argument("--hold-frames", type=int, default=3) + parser.add_argument("--settle-frames", type=int, default=45) + parser.add_argument("--play-frames", type=int, default=0, + help="hold forward this many frames after the route") + parser.add_argument("--no-shots", action="store_true") + args = parser.parse_args() + + args.out.mkdir(parents=True, exist_ok=True) + actions = json.loads(args.actions.read_text(encoding="utf-8")) + if isinstance(actions, dict): + actions = actions.get("actions", []) + + proc = subprocess.Popen( + [str(args.runner), str(args.bios), "--serve", "--port", str(args.port), + "--rom", str(args.rom.resolve()), "--config", str(args.config.resolve()), + "--no-save", "--startup-mode", "automatic"], + cwd=str(args.runner.parent), + stdout=(args.out / "runner.stdout.log").open("wb"), + stderr=(args.out / "runner.stderr.log").open("wb")) + print(f"runner pid={proc.pid} port={args.port}") + + try: + client = None + for _ in range(240): + if proc.poll() is not None: + raise SystemExit(f"runner exited early rc={proc.returncode}") + try: + client = DebugClient(args.port) + break + except OSError: + time.sleep(0.5) + if client is None: + raise SystemExit("debug server never came up") + + client.cmd("reset") + target = args.start_vblank + client.advance_to(target) + if not args.no_shots: + client.screenshot(args.out / f"0000-{target:05d}-title.png") + client.tap(128, 96, args.hold_frames) + client.advance(180) + + for index, action in enumerate(actions, 1): + kind = action["kind"] + if kind == "touch": + client.tap(int(action["x"]), int(action["y"]), args.hold_frames) + label = f"touch-{action['x']}-{action['y']}" + elif kind == "key": + client.press(str(action["key"]), args.hold_frames) + label = f"key-{action['key']}" + elif kind == "wait": + client.advance(int(action["frames"])) + label = f"wait-{action['frames']}" + else: + raise SystemExit(f"unknown action kind {kind!r}") + client.advance(args.settle_frames) + if not args.no_shots: + client.screenshot( + args.out / f"{index:04d}-{client.vblank():05d}-{label}.png") + print(f"[{index}/{len(actions)}] {label}") + + if args.play_frames: + # Hold forward. Press-and-hold is state plus time advance; there is + # no hold-for-N command. + client.cmd("keys", mask=RELEASED & ~(1 << KEY_BITS["up"])) + client.advance(args.play_frames) + client.cmd("keys", mask=RELEASED) + if not args.no_shots: + client.screenshot(args.out / "9998-after-walk.png") + print(f"held forward {args.play_frames} frames") + + print("static_coverage:", json.dumps(client.cmd("static_coverage"))) + manifest = (args.out / "coverage.json").resolve() + res = client.cmd("coverage_manifest", path=manifest.as_posix()) + print("coverage_manifest:", json.dumps(res)) + print(f"\nmanifest: {manifest}") + print("now run:") + print(f" py -3 tools/overlay_coverage_report.py {manifest} " + f"--overlays {args.overlays}") + finally: + proc.terminate() + try: + proc.wait(timeout=20) + except subprocess.TimeoutExpired: + proc.kill() + print(f"stopped pid={proc.pid}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/overlay_coverage_report.py b/tools/overlay_coverage_report.py new file mode 100644 index 0000000..3f86169 --- /dev/null +++ b/tools/overlay_coverage_report.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python3 +"""Report which ARM9 overlays a play route actually exercised. + +beads-yjp.31. Answers the question that decides what to recompile ahead of +time: for a given route through the game, which overlays did the guest +actually execute, and how hard? + +Takes any number of coverage sources and maps every Tier-3 address onto the +overlay table: + + * a coverage manifest written by the runner (--coverage-manifest, or the + `coverage_manifest` debug command), which has entry_points_arm9/arm7, or + * a fuzz/benchmark trace.json carrying a tier3_coverage block. + +Collisions are computed by SPAN, not by load address. Judging by load address +alone is wrong and flatters the picture: in MPH three overlays look unshared +by load address, but every one of the eighteen overlaps another by span (e.g. +overlay 4 loads at 0x0214C860 and overlay 10 loads at 0x0214C940, 0xE0 bytes +inside it). + +Addresses that fall outside every overlay are reported too, not dropped -- +ITCM, ARM7 WRAM and the immutable main image all show up there, and a silent +drop would make a route look better covered than it is. +""" + +from __future__ import annotations + +import argparse +import json +from pathlib import Path + + +def load_overlays(path: Path) -> list[dict]: + overlays = json.loads(path.read_text(encoding="utf-8")) + for entry in overlays: + entry["lo"] = int(entry["load_address"], 16) + # bss is zero-initialised at load and holds no code, so the executable + # span is size, not size + bss_size. + entry["hi"] = entry["lo"] + int(entry["size"]) + return overlays + + +def load_points(paths: list[Path]) -> tuple[list[tuple[int, int, str]], list[str]]: + """Return [(addr, hits, kind)] for ARM9, plus a note per source.""" + points: list[tuple[int, int, str]] = [] + notes: list[str] = [] + for path in paths: + data = json.loads(path.read_text(encoding="utf-8")) + if data.get("kind") == "ndsrecomp-tier3-coverage": + entries = data.get("entry_points_arm9", []) + points += [(int(e["addr"], 16), int(e.get("hits", 0)), + str(e.get("kind", "?"))) for e in entries] + notes.append(f"{path.name}: manifest, {len(entries)} ARM9 entries") + continue + block = data.get("tier3_coverage") or {} + entries = [e for e in block.get("entries", []) if int(e["cpu"]) == 9] + if entries: + kinds = {1: "root", 2: "call", 3: "indirect"} + points += [(int(e["pc"]), int(e.get("hits", 0)), + kinds.get(int(e.get("kind", 0)), "?")) for e in entries] + notes.append(f"{path.name}: trace, {len(entries)} ARM9 entries") + else: + notes.append(f"{path.name}: NO ARM9 Tier-3 coverage found") + return points, notes + + +def main() -> int: + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument("sources", nargs="+", type=Path, + help="coverage manifests and/or trace.json files") + parser.add_argument("--overlays", type=Path, + default=Path("generated/inputs/overlays.json")) + parser.add_argument("--json", type=Path, help="also write the report here") + args = parser.parse_args() + + overlays = load_overlays(args.overlays) + points, notes = load_points(args.sources) + for note in notes: + print(f" {note}") + if not points: + print("no ARM9 Tier-3 coverage in any source") + return 1 + print() + + rows = [] + for entry in sorted(overlays, key=lambda o: (o["lo"], o["id"])): + inside = [p for p in points if entry["lo"] <= p[0] < entry["hi"]] + shares = [str(o["id"]) for o in overlays + if o is not entry and o["lo"] < entry["hi"] + and entry["lo"] < o["hi"]] + rows.append({ + "id": entry["id"], + "lo": entry["lo"], + "hi": entry["hi"], + "kib": int(entry["size"]) // 1024, + "points": len(inside), + "hits": sum(p[1] for p in inside), + "shares_span_with": shares, + }) + + print(f"{'id':>3} {'span':<23} {'KiB':>5} {'points':>7} {'hits':>9} shares span with") + for row in rows: + shared = ",".join(row["shares_span_with"]) or "-" + print(f"{row['id']:>3} 0x{row['lo']:08X}-0x{row['hi']:08X} " + f"{row['kib']:>5} {row['points']:>7} {row['hits']:>9} {shared}") + + covered = {p[0] for row, entry in zip(rows, sorted(overlays, key=lambda o: (o["lo"], o["id"]))) + for p in points if entry["lo"] <= p[0] < entry["hi"]} + outside = [p for p in points if p[0] not in covered] + print() + print(f"addresses inside an overlay : {len(points) - len(outside)}") + print(f"addresses outside every one : {len(outside)}" + " (ITCM / ARM7 WRAM / immutable main image)") + if outside: + buckets: dict[int, int] = {} + for addr, _hits, _kind in outside: + buckets[addr >> 16 << 16] = buckets.get(addr >> 16 << 16, 0) + 1 + print(" by 64 KiB region:") + for base in sorted(buckets): + print(f" 0x{base:08X} {buckets[base]}") + + exercised = [r for r in rows if r["points"]] + print() + print(f"overlays exercised: {len(exercised)} of {len(rows)}") + if exercised: + best = max(exercised, key=lambda r: r["hits"]) + print(f"highest-value target: overlay {best['id']} " + f"({best['points']} points, {best['hits']} hits)") + + if args.json: + args.json.write_text(json.dumps({ + "sources": [str(p) for p in args.sources], + "overlays": rows, + "points_total": len(points), + "points_outside_overlays": len(outside), + }, indent=2), encoding="utf-8", newline="\n") + print(f"\nwrote {args.json}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/patch_ndsrecomp_mph_adaptive_capability.py b/tools/patch_ndsrecomp_mph_adaptive_capability.py new file mode 100644 index 0000000..9e811f0 --- /dev/null +++ b/tools/patch_ndsrecomp_mph_adaptive_capability.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +"""Grant MPH adaptive output capability after executable validation. + +The shared ROM-free game.toml intentionally has no exact [game].sha1 because +runtime base selection supports all seven MPH revisions and compatible mods. +ndsrecomp correctly rejects TOML-declared display.adaptive_capability without +an exact SHA, so the generic config must not declare that capability itself. + +Instead, this patch runs after the MPH runtime detector/widescreen patch and +marks TOP adaptive output as supported only when the detector has selected MPH +and the executable checksum is authoritative enough to permit host code/data +writes. Header-only fallback therefore remains fail-closed. +""" + +from __future__ import annotations + +import argparse +from pathlib import Path + + +MARKER = "MPH_MULTIROM_RUNTIME_ADAPTIVE_CAPABILITY" +INSERT_BEFORE = " // MPH_MULTIROM_WIDESCREEN_GATE: a header-only base-profile hint is\n" + + +def patch(framework_root: Path) -> None: + main_cpp = framework_root / "runner" / "src" / "main.cpp" + if not main_cpp.is_file(): + raise SystemExit(f"runner source missing: {main_cpp}") + + text = main_cpp.read_text(encoding="utf-8") + if MARKER in text: + print("MPH runtime adaptive capability patch already applied") + return + if INSERT_BEFORE not in text: + raise SystemExit( + "Refusing to patch main.cpp: MPH widescreen gate marker was not found; " + "apply patch_ndsrecomp_mph_widescreen.py first" + ) + + block = ( + " // MPH_MULTIROM_RUNTIME_ADAPTIVE_CAPABILITY: the shared game.toml has\n" + " // no exact SHA-1, so ndsrecomp cannot safely grant title capability\n" + " // during config parsing. Grant TOP only after the executable-compatible\n" + " // MPH detector has authorized host code/data access.\n" + " if (nds_title_patches_mph_detected() &&\n" + " nds_title_patches_mph_host_writes_compatible()) {\n" + " frontend_options.adaptive_supported |= NDS_ADAPTIVE_TOP;\n" + " frontend_options.adaptive_max_width[0] = 448;\n" + " }\n" + ) + main_cpp.write_text(text.replace(INSERT_BEFORE, block + INSERT_BEFORE, 1), + encoding="utf-8") + print("Patched MPH adaptive capability to follow runtime executable validation") + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--framework-root", type=Path, required=True) + # Kept for compatibility with the shared patch-stack argument list. + parser.add_argument("--profiles", type=Path, required=False) + args = parser.parse_args() + patch(args.framework_root.resolve()) + + +if __name__ == "__main__": + main() diff --git a/tools/patch_ndsrecomp_mph_runtime.py b/tools/patch_ndsrecomp_mph_runtime.py index 4034b1d..d858d33 100755 --- a/tools/patch_ndsrecomp_mph_runtime.py +++ b/tools/patch_ndsrecomp_mph_runtime.py @@ -3,7 +3,8 @@ The core detector is kept separately so upstream-facing additions can be layered without weakening its whole-ROM/content identity rules. The later stages add -the melonPrimeDS/mphCodex profile-aware 21:9 projection/culling patch, make +the melonPrimeDS/mphCodex profile-aware 21:9 projection/culling patch, grant +adaptive TOP capability only after authoritative MPH executable detection, make that patch re-eligible after an in-process guest reset, and finally add end-user startup diagnostics plus the ROM-free multi-ROM content-gate policy. """ @@ -21,6 +22,7 @@ def main() -> None: for script in ( here / "patch_ndsrecomp_mph_runtime_core.py", here / "patch_ndsrecomp_mph_widescreen.py", + here / "patch_ndsrecomp_mph_adaptive_capability.py", here / "patch_ndsrecomp_mph_widescreen_reset.py", here / "patch_ndsrecomp_mph_diagnostics.py", ): diff --git a/tools/run_mph_friend_match.py b/tools/run_mph_friend_match.py index 11bc52c..4946181 100644 --- a/tools/run_mph_friend_match.py +++ b/tools/run_mph_friend_match.py @@ -96,7 +96,9 @@ # ...and that lands on SELECT HUNTER, the third setup tab. Only the first three # portraits are selectable; the leftmost is Samus. HUNTER_SAMUS = (27, 132) +HOST_START_DISC = (240, 149) CONFIG_CAPTURE_FRAMES = (600, 1200, 2400) +POST_JOIN_CAPTURE_FRAMES = (240, 240, 240, 240, 240, 240, 240, 240) @dataclass @@ -140,10 +142,11 @@ def launch_instance(args: argparse.Namespace, index: int) -> Instance: "on", "--wfc-provider", args.wfc_provider, - # Prepared per-profile firmware carries the identity, so every instance - # keeps slot 0 and is differentiated by the injected image instead. + # Prepared per-profile firmware carries the console identity. The + # runner instance index is still useful for host-side networking: + # slirp uses it to place each emulated DS on a distinct virtual LAN. "--instance-index", - "0", + str(index), "--save-path", str(save_path), ] @@ -516,6 +519,52 @@ def join_phase(instance: Instance) -> None: for_each(instances, join_phase) + post_join_log: list[dict[str, Any]] = [] + + def post_join_action( + label: str, + actor: Instance, + action: tuple[Any, ...], + capture_frames: tuple[int, ...] = POST_JOIN_CAPTURE_FRAMES, + ) -> None: + def input_step(instance: Instance) -> None: + assert instance.client is not None + beat(instance, action if instance is actor else None, 0) + + for_each(instances, input_step) + + for index, frames in enumerate(capture_frames): + for_each( + instances, + lambda instance, frames=frames: input_lib.advance_frames( + instance.client, frames + ), + ) + for instance in instances: + role = "host" if instance is host else "guest" + save_checkpoint(instance, f"{role}-postjoin-{label}-{index}") + + if any(entry["joined"] for entry in join_log): + guest = next(instance for instance in instances if instance is not host) + post_join_action("guest-samus", guest, ("tap", *HUNTER_SAMUS)) + post_join_action("guest-confirm", guest, ("key", "a")) + post_join_action("host-disc", host, ("tap", *HOST_START_DISC)) + for instance in instances: + state = current_screen(instance) + post_join_log.append( + { + "instance": instance.index, + "screen": state, + "final_image": instance.report[-1]["image"], + "final_vblank9": instance.report[-1]["vblank9"], + } + ) + print( + f"[post-join] instance {instance.index}: {state} " + f"{instance.report[-1]['image']}", + flush=True, + ) + for target in args.targets: for_each( instances, @@ -579,6 +628,7 @@ def join_phase(instance: Instance) -> None: "wfc_provider": args.wfc_provider, "join_attempts": join_log, "joined": any(entry["joined"] for entry in join_log), + "post_join": post_join_log, "summaries": summaries, "backend_clean": all(s["backend_clean"] for s in summaries), } diff --git a/tools/seed_overlay_from_coverage.py b/tools/seed_overlay_from_coverage.py new file mode 100644 index 0000000..13d8eb5 --- /dev/null +++ b/tools/seed_overlay_from_coverage.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python3 +"""Seed one overlay's recompiler config with provably-that-overlay entry points. + +beads-yjp.31. tools/prepare_mph.py deliberately emits overlay configs with NO +entry points -- its own docstring says real entry points must come from Tier-3 +coverage recorded while that exact overlay body was resident. This produces +them. + +THE ATTRIBUTION PROBLEM. MPH reuses virtual addresses across overlays: all 18 +overlap at least one other by span, and overlay 0 alone shares its range with +eight. A Tier-3 coverage record is {pc, caller, cpu, thumb, kind, hits} and +carries no overlay identity, so on its own it cannot say whether a PC executed +while overlay 0 or overlay 9 was resident. docs/BRINGUP.md calls combining +entry points across overlay generations unsound, and it is right. + +THE SOLUTION, and why no runtime change is needed. The coverage manifest also +carries the 4 KiB code pages the guest actually executed, captured verbatim at +execution time. Comparing a captured page against each overlay's decompressed +ROM image at the corresponding offset identifies which overlay was resident +when that page ran. Measured on a real capture: of 65 captured ARM9 pages, 33 +fell inside some overlay and every one attributed to exactly ONE overlay -- +28 to overlay 0, 2 to overlay 1, 3 to overlay 4, with zero ambiguity. The +bytes are distinct enough that overlapping spans do not produce collisions. + +Only entry points sitting inside a page that byte-matched THIS overlay are +emitted. Everything else is excluded and counted, never guessed at. +""" + +from __future__ import annotations + +import argparse +import base64 +import json +from pathlib import Path + +PAGE = 4096 +# Roots are scheduler slice-resume points and usually land mid-function, which +# makes them poor discovery seeds. Calls and indirect targets are real entries. +GOOD_KINDS = {"call", "indirect"} + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument("--overlay-id", type=int, required=True) + parser.add_argument("--overlays-dir", type=Path, + default=Path("generated/inputs/overlays")) + parser.add_argument("--overlays-json", type=Path, + default=Path("generated/inputs/overlays.json")) + parser.add_argument("--manifest", type=Path, nargs="+", required=True) + parser.add_argument("--out", type=Path, required=True) + parser.add_argument("--include-roots", action="store_true", + help="also seed kind=root PCs (usually fragments code)") + args = parser.parse_args() + + meta = {int(o["id"]): o + for o in json.loads(args.overlays_json.read_text(encoding="utf-8"))} + if args.overlay_id not in meta: + raise SystemExit(f"no overlay {args.overlay_id} in {args.overlays_json}") + entry = meta[args.overlay_id] + base = int(entry["load_address"], 16) + image = (args.overlays_dir / entry["file"]).read_bytes() + if len(image) != int(entry["size"]): + raise SystemExit(f"{entry['file']} is {len(image)} bytes, " + f"overlays.json says {entry['size']}") + lo, hi = base, base + len(image) + print(f"overlay {args.overlay_id}: 0x{lo:08X}-0x{hi:08X} " + f"({len(image)} bytes) sha1 {entry['sha1']}") + + # Which captured pages prove this overlay was resident? + resident: set[int] = set() + foreign = 0 + points: list[dict] = [] + for path in args.manifest: + data = json.loads(path.read_text(encoding="utf-8")) + if data.get("kind") != "ndsrecomp-tier3-coverage": + raise SystemExit(f"{path} is not a coverage manifest") + for page in data.get("pages", {}).get("entries", []): + if int(page["cpu"]) != 9: + continue + addr = int(page["addr"], 16) + if not (lo <= addr < hi): + continue + raw = base64.b64decode(page["data"]) + off = addr - lo + if image[off:off + len(raw)] == raw: + resident.add(addr) + else: + foreign += 1 + points += data.get("entry_points_arm9", []) + + print(f"captured pages inside this overlay that MATCH its image: " + f"{len(resident)}") + print(f"captured pages inside its span from a DIFFERENT generation: " + f"{foreign} (excluded)") + if not resident: + raise SystemExit("no page proved this overlay resident; nothing to seed") + + kinds_ok = GOOD_KINDS | ({"root"} if args.include_roots else set()) + seeds: dict[tuple[int, str], int] = {} + dropped_kind = dropped_unproven = 0 + for point in points: + addr = int(point["addr"], 16) + if not (lo <= addr < hi): + continue + if (addr & ~(PAGE - 1)) not in resident: + dropped_unproven += 1 + continue + if point.get("kind") not in kinds_ok: + dropped_kind += 1 + continue + key = (addr, "thumb" if point.get("mode") == "thumb" else "arm") + seeds[key] = seeds.get(key, 0) + int(point.get("hits", 0)) + + print(f"entry points in span, dropped as unproven generation: " + f"{dropped_unproven}") + print(f"entry points dropped by kind filter : {dropped_kind}") + print(f"SEEDS EMITTED : {len(seeds)}") + if not seeds: + raise SystemExit("no seeds survived; capture a route that runs this overlay") + + ordered = sorted(seeds.items()) + lines = [ + "# AUTO-GENERATED by tools/seed_overlay_from_coverage.py; do not commit.", + "# Entry points are Tier-3 observations whose containing 4 KiB page was", + "# byte-identical to this overlay's decompressed ROM image at the time it", + "# executed, so every seed below is provably from THIS overlay generation", + "# and not from one of the overlays sharing its address range.", + "", + "[program]", + f'name = "Metroid Prime Hunters (USA rev 0) ARM9 overlay {args.overlay_id}"', + f'id = "mph_amhe0_arm9_ov{args.overlay_id:03d}"', + f"load_address = 0x{lo:08X}", + f"size = 0x{len(image):08X}", + f"entry_pc = 0x{ordered[0][0][0]:08X}", + "authoritative_entry_points = false", + "", + "[identity]", + f'sha1 = "{entry["sha1"]}"', + "", + ] + for (addr, mode), hits in ordered: + lines += [ + "[[entry_point]]", + f"addr = 0x{addr:08X}", + f'mode = "{mode}"', + 'kind = "runtime_observed"', + f"# hits = {hits}", + "", + ] + args.out.parent.mkdir(parents=True, exist_ok=True) + args.out.write_text("\n".join(lines), encoding="utf-8", newline="\n") + print(f"wrote {args.out}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())