diff --git a/README.md b/README.md index f48a12163c..d30acbbcfe 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
**English** · [简体中文](docs/readme/README_zh.md) · [繁體中文](docs/readme/README_zh-TW.md) · [日本語](docs/readme/README_ja.md) · [한국어](docs/readme/README_ko.md) · [Türkçe](docs/readme/README_tr.md) · [Русский](docs/readme/README_ru.md) · [Tiếng Việt](docs/readme/README_vi.md) · [ไทย](docs/readme/README_th.md) · [Deutsch](docs/readme/README_de.md) · [Español](docs/readme/README_es.md) · [Français](docs/readme/README_fr.md) · [Українська](docs/readme/README_uk.md) · [Polski](docs/readme/README_pl.md) · [Português (Brasil)](docs/readme/README_pt-BR.md) · [العربية](docs/readme/README_ar.md) · [فارسی](docs/readme/README_fa.md) · [Bahasa Indonesia](docs/readme/README_id.md) · [Italiano](docs/readme/README_it.md) -· [Ελληνικά](docs/readme/README_el.md) · [മലയാളം](docs/readme/README_ml.md) · [Roman Urdu](docs/readme/README_ur-Latn.md) · [Română](docs/readme/README_ro.md) +· [Ελληνικά](docs/readme/README_el.md) · [മലയാളം](docs/readme/README_ml.md) · [Roman Urdu](docs/readme/README_ur-Latn.md) · [Română](docs/readme/README_ro.md) · [Български](docs/readme/README_bg.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_ar.md b/docs/readme/README_ar.md index 4b9c093512..c9b19b9e40 100644 --- a/docs/readme/README_ar.md +++ b/docs/readme/README_ar.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · **العربية** · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: هندسة عكسية لأي شيء diff --git a/docs/readme/README_bg.md b/docs/readme/README_bg.md new file mode 100644 index 0000000000..93b7ff0336 --- /dev/null +++ b/docs/readme/README_bg.md @@ -0,0 +1,515 @@ +
+ +[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · **Български** + +# REA: Reverse Engineer Anything + +### Един MCP сървър за обратно инженерство на бинарни файлове, приложения и поведение по време на изпълнение. + +**Харесва ви функция в някое приложение? Разберете как работи, чак до ниво бинарен код.** + +[![Версия в npm](https://img.shields.io/npm/v/rea-agents?style=flat-square&color=cb3837)](https://www.npmjs.com/package/rea-agents) +[![Каталог с MCP инструменти](https://img.shields.io/badge/MCP-tool_catalog-5c4ee5?style=flat-square)](../reference/mcp-contracts.md#generated-catalog) +[![Изисквания за Node.js](https://img.shields.io/badge/Node.js-requirements-339933?style=flat-square&logo=nodedotjs&logoColor=white)](#current-status) +[![skills.sh](https://skills.sh/b/morluto/rea?style=flat-square)](https://skills.sh/morluto/rea/reverse-engineer-anything) +[![Лиценз MIT](https://img.shields.io/badge/license-MIT-f4c430?style=flat-square)](../../LICENSE) +[![Discord](https://img.shields.io/discord/1556595354999332884?logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/GkcryMnJDM) + +morluto%2Frea | Trendshift + +**[Уебсайт](https://rea.tools/) · [Ръководства](https://rea.tools/guides/) · [Примери](https://rea.tools/showcase/)** + +Присъединете се към общността на REA в Discord + +[Бърз старт](#бърз-старт) · [Как работи REA](#как-работи-rea) · [Какво можете да анализирате](#какво-можете-да-анализирате) · [Примери](#примери) · [Създаване на RL среди](#build-rl-environments) · [Често задавани въпроси](#често-задавани-въпроси) · [Документация](#документация) + +npx rea-agents setup + +
+ +> [!IMPORTANT] +> Изтегляйте REA от [morluto/rea](https://github.com/morluto/rea), +> [rea.tools](https://rea.tools/) или [npm пакета rea-agents](https://www.npmjs.com/package/rea-agents). +> Следвайте връзките за инсталиране и издания от тези официални източници. Подобно +> име на хранилище или копиран README не доказва, че дадено изтегляне е официално. + +
+ +
+ +REA стартира своя мост за анализ в Hopper, докато изследва нативен бинарен файл + +

+ + + + + +
+ + Discord
+ Присъединете се към общността за обратно инженерство +

+ Discord · Въпроси и отговори · Покажете какво сте направили +
+ +
+ +
+ +--- + +Видели сте функция в приложение и искате същата във вашия продукт? Помолете агента си да я проучи с REA. Той може да изследва приложението без изходния му код, да обясни как работи функцията, да покаже доказателствата и да изгради подобна версия за вашия проект. + +REA свързва агента ви с инструменти за изследване на нативни бинарни файлове, JavaScript и Electron приложения, .NET асемблита и уебсайтове. Същите инструменти можете да използвате и от терминала. Анализът се извършва локално, а резултатите включват доказателствата и ограниченията зад всеки извод. + +Настройката регистрира REA в агента ви и инсталира съответните инструкции за работния процес. Нативният анализ може да използва вече инсталиран Hopper, Ghidra, IDA или Kuna; по желание настройката може да инсталира Hopper след ваше одобрение. Статичният анализ на JavaScript не изисква двигател за нативен анализ. + +> **[Посетете уебсайта на REA](https://rea.tools/)** за инструкции за настройка, илюстрирани ръководства и реални казуси. + +## Бърз старт + +В Linux стартирането на Ghidra, JADX и инструментите за фърмуер, както и +статичният анализ на JavaScript/Electron, изискват съвместима с procps команда +`ps` в `PATH` на REA за проверките кой процес на кого принадлежи. Стъпките за +отстраняване на проблема са в `docs/getting-started/installation.md`, в раздела +„Linux owned-process prerequisite“. + +### Настройте агента си + +След като имате инсталирани Node.js и npm, изпълнете: + +```bash +npx rea-agents setup +``` + +Изберете агентите си, прегледайте предложените промени и ги одобрете. Настройката +добавя MCP сървъра на REA и съответните инструкции за работния процес, като прави +резервни копия на съществуващата конфигурация. След това рестартирайте агента. +Настройката записва директно избраната среда за изпълнение и входния скрипт на +REA. Ако сте получили REA чрез инструмент за изпълнение на пакети (package +runner), не изтривайте записа му в кеша. Изтегляйте пакета от доверена +директория извън целевия проект. Подробности за инсталирането и отстраняването на +проблеми има в ръководството за настройка по-долу. + +Настройката поддържа Claude Code, Codex, Cursor, Gemini CLI, Grok Build и +[други агенти](../getting-started/installation.md#supported-agents). Вижте +[инсталиране и настройка](../getting-started/installation.md) за конфигуриране на +доставчици на анализ, ръчна регистрация на MCP и инсталиране на плъгина за +Claude Code/Codex. + +По подразбиране MCP използва компактни входни схеми, за да заема по-малко от +контекста. Задайте `REA_MCP_INPUT_SCHEMA_PROFILE=full` в MCP регистрацията си, +когато са ви нужни пълните описания на полетата и подробностите за вложената +валидация. И двата профила запазват пълния набор от инструменти и каноничната +валидация на сървъра. Вижте „Compact input schema profile“ в ръководството за MCP +договорите. + +По подразбиране се обявяват пълните изходни схеми. Ако клиентът ви ограничава +размера на цялата рамка `tools/list`, задайте +`REA_MCP_OUTPUT_SCHEMA_PROFILE=compact`, за да ограничите всяка обявена изходна +схема, или `off`, за да пропуснете изходните схеми изцяло. И двете настройки +запазват каноничната валидация от страна на сървъра и пълните структурирани +резултати. Вижте „Output schemas“ в ръководството за MCP договорите. + +### Попитайте агента си + +```text +Разбери как работи търсенето в приложението Notes, покажи ми доказателствата и +изгради подобна функция за моя проект. +``` + +Заменете Notes с целевото си приложение и функцията, която искате да разберете. + +### Използвайте терминала + +Изследвайте директорията на разархивирано JavaScript/Electron приложение или ASAR +архив: + +```bash +npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json +``` + +Резултатът включва модули, импорти, границите на Electron и доказателствата за +тях. Заменете пътя с вашата цел, например `"D:/apps/example"` в Windows. + +За да инсталирате командата `rea` за редовна употреба: + +```bash +npm install --global rea-agents +rea --help +``` + +За нативен анализ първо конфигурирайте доставчик на анализ. Вижте +[ръководството за CLI и Evidence](../getting-started/cli.md) за нативните +команди, избора на доставчик, моментните снимки (snapshots) и скриптирането. + +### Обновяване на REA + +REA се променя бързо и новите издания често съдържат поправки на грешки. +Поддържайте инсталацията си актуална. + +За CLI, инсталиран с `npm install --global` или `bun add --global`: + +```bash +rea update +``` + +`rea --update` е псевдоним на същия проверен процес и приема същите глобални +флагове за изхода. Използвайте `rea update`, когато го комбинирате с други опции +на командата. + +Командите за обновяване запазват общо най-много 4 MiB от stdout и stderr. Твърде +големите отговори с метаданни се отхвърлят след приключване на командата; +подробните (verbose) инсталации продължават с ограничена диагностика. Изходът за +напредъка, предназначен за хора, се съобразява с обратното налягане +(backpressure) на терминала и изчаква изпратените записи да завършат. + +Глобалните обновявания чрез Bun изискват Bun 1.2.17 или по-нова версия. При +по-стара версия първо обновете Bun ръчно и след това изпълнете `rea update`. + +За да опресните регистрациите в агентите и умението (skill), изпълнете командата +за настройка, която обновяването отпечатва. + +Ако използвате `npx`, обновете настройката на агента си с: + +```bash +npx rea-agents@latest setup +``` + +Прегледайте промените от настройката и рестартирайте агента. За еднократни CLI +команди използвайте `npx rea-agents@latest`, последвано от командата. С Bun +използвайте `bunx rea-agents@latest` вместо `npx rea-agents@latest`. + +## Как работи REA + +Агентът ви извиква REA чрез MCP, за да изследва целта и да проследи съответния +код. REA връща констатации заедно с доказателствата за тях. Агентът ги използва, +за да задава допълнителни въпроси, да обяснява поведението или да напише и тества +реализация. CLI командите използват същите работни процеси. + +![Процес на изследване с REA: агентът ви пита за локална цел, REA я изследва и проследява с инструменти за анализ, а агентът използва върнатия код, препратките и неизвестните, за да обясни, реализира и тества.](../../website/public/assets/figures/rea-investigation-flow.svg) + +[Отворете фигурата в пълен размер](../../website/public/assets/figures/rea-investigation-flow.svg). + + + +## Какво можете да анализирате + +REA изисква Node.js 22.x (>=22.23.4), 24.x (>=24.22.1) или 26.12.1+, както и +npm. Допълнителните инструменти и поддържаните операционни системи зависят от +целта: + +| Цел | Какво връща REA | Изисквания и ръководство | +| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Инсталирани настолни приложения | Кандидати за среда за изпълнение, поддържащи файлове, маркери на компоненти и следващи проверки | Вградена ограничена проверка на директории и заглавни части; [настолни приложения](../desktop-applications.md) | +| Нативни бинарни файлове | Псевдокод, асемблер, низове, символи, извиквания и препратки | Hopper, Ghidra, IDA или Kuna; [нативен анализ](../guides/native/native-investigation.md) | +| Структура на ELF (офлайн) | Секции, сегменти, оригинални символи/релокации и кандидати за статични защитни механизми | Предоставен от вас pwntools на Linux x64; [диагностика на бинарни файлове](../guides/native/binary-diagnostics.md) | +| Go бинарни файлове | Вградена версия на компилатора, модули, замени и настройки на компилацията | Вградена статична проверка на ELF/PE/thin Mach-O; не изисква инсталиран Go | +| GPU кодови обекти | CUDA/HIP цели, избрани параметри и ресурси на ядрата, запазен PTX текст | Вградена статична проверка на ELF/PE/fatbin/CUBIN/PTX; [GPU кодови обекти](../gpu-code-objects.md) | +| Файлове на модели | Метаданни на GGUF / safetensors, декларации на тензори и изчислени общи стойности | Вградена проверка на заглавните части; по желание хеш на целия файл; [файлове на модели](../model-artifacts.md) | +| IL2CPP метаданни | Образи на асемблита от Unity global-metadata.dat, имена на типове и методи и диапазони на индекси | Вградено статично декодиране на версии 24, 27, 29, 31 и 39; не изисква Unity | +| Godot PCK | Опис и извличане на архива, оригинални данни от заглавната част и директорията и идентичност на избрано съдържание | Вградена статична поддръжка на формати 2, 3 и 4; не изисква Godot | +| Rust бинарни файлове | Вградени от cargo-auditable имена на crate-ове, версии, източници и връзки между зависимостите | Вградена статична проверка на ELF/PE/thin Mach-O; [Rust бинарни файлове](../rust-binaries.md) | +| PE сертификати | Записи Authenticode WIN_CERTIFICATE и полета за самоличност на подписващия от PKCS#7/X.509 | Вградена статична проверка на PE; [PE сертификати](../pe-certificates.md) | +| PE импорти | Имена на импортирани и отложено зареждани (delay-load) DLL библиотеки, ординали, IAT RVA адреси и pefile хеш на импортите | Вградена статична проверка на PE; [PE импорти](../pe-imports.md) | +| ELF бележки | Собственици и типове на PT_NOTE/SHT_NOTE, полета GNU build-id и ABI-tag | Вградена статична проверка на ELF; [ELF бележки](../elf-notes.md) | +| Защита на бинарни файлове | PIE, NX, RELRO, CFG и свързаните с тях флагове в заглавните части на ELF, PE и Mach-O | Вградена статична проверка на заглавните части; [защита на бинарни файлове](../binary-hardening.md) | +| Сривове на Apple (IPS) | Метаданни от .ips, нишки, образи, регистри и документирани класове сривове | Вградена статична проверка на JSON; [Apple IPS](../apple-ips.md) | +| Модули на ядрото на Linux | Ключове от .modinfo, CRC стойности от __versions, наличие на this_module и подпис в края на файла | Вградена статична проверка на ELF; [модули на ядрото](../kernel-modules.md) | +| Erlang BEAM | IFF блокове (chunks), атоми, експорти, импорти, ламбди и заглавната част Code | Вградена статична проверка на BEAM; [Erlang BEAM](../erlang-beam.md) | +| WASM артефакти | Валидация, секции, точни WAT форми на импортите/експортите и декодиран WAT | Предоставен от вас WABT 1.0.42; `inspect_wasm_artifact` | +| EVM байткод | Селектори на функции, отмествания в байтове, изведени аргументи и променливост (mutability) | Локален raw/hex носител на Linux x64; [ръководство за офлайн EVM](../guides/evm/evm-bytecode.md) | +| SQLite бази данни | Таблици, колони, индекси, изгледи, тригери и избрани редове от обикновени таблици | Локална моментна снимка на базата/WAL; Node.js 24.x >=24.15 или 26+ с нативни ограничения на SQLite | +| Записани сривове в Linux | Сурови бележки, регистри/сигнали на всяка записана нишка и по желание кандидати за съпоставяне с файлове в паметта | Предоставен от вас pwntools на Linux x64; по желание GDB/pwndbg; [записани сривове](../guides/native/recorded-crashes.md) | +| JavaScript / Electron | Модули, импорти, source maps, маршрути, IPC и връзки с нативни добавки | Node.js и npm; Linux: съвместима с procps команда `ps`; [анализ на приложения](../guides/javascript/javascript-application-workflows.md) | +| Уебсайтове | Структура на страниците, скриптове, мрежови наблюдения и заявени екранни снимки | Браузър от семейството на Chrome; [анализ в браузъра](../guides/web/browser-observation.md) | +| Запазени мрежови записи | Заявки, отговори, открити полезни данни (payloads) и местоположения в изходния код | HAR или Fiddler Everywhere SAZ; mitmdump на Linux за нативен mitmproxy; [ръководство за мрежови записи](../guides/web/web-network-captures.md) | +| .NET асемблита | Метаданни, CIL инструкции, декларирани нативни зависимости и сравнения между компилации | Няма (само статичен анализ); [ръководство за управляван код](../guides/managed/managed-code-analysis.md) | +| Android APK файлове | Декларации в манифеста, класове, декомпилирани методи и препратки | JADX без графичен интерфейс и пълен JDK на Linux/macOS/Windows x64; [ръководство за Android](../guides/android/android-analysis.md) | +| Подписи на APK | Подписващи v1/v2/v3/v3.1, отпечатъци на сертификати, ротация на ключове и вътрешна съгласуваност на хешовете | Няма (само статичен анализ); `inspect_apk_signature` | +| Android устройства | Устройства, пакети, процеси, логове, дъмпове, екранни снимки и прехвърляне на APK/файлове | Предоставен от вас adb (емулатор или физическо устройство); [ръководство за ADB](../guides/android/adb-device-analysis.md) | +| JEB проекти | Единици на проекта от двигателя на JEB, хешове на артефакти и псевдокод на типове/методи | Стартиран от вас JEB клиент, който обслужва MCP и е избран чрез REA_JEB_MCP_URL; [ръководство за JEB](../providers/jeb-analysis.md) | +| Android ресурси | Декодиран манифест, таблици с низове, локали и данни за версията | Предоставен от вас стартер за Apktool; [ръководство за ресурси](../guides/android/apktool-resource-analysis.md) | +| Flutter приложения | Хеш на Dart snapshot, хешове на библиотеките за всяко ABI и произход на компилацията на двигателя | Няма (статичен анализ на APK); [ръководство за Flutter](../guides/android/flutter-analysis.md) | +| Фърмуер | Региони, резултати от извличането и предаване към нативен анализ | Binwalk / Unblob на Linux; [ръководство за фърмуер](../guides/firmware/firmware-analysis.md) | +| Записани пакети | Избрани полета, повтарящи се стойности, филтри и правила decode-as | Linux: TShark 4.x + prlimit; [ръководство за записи](../guides/data/packet-captures.md) | +| Обобщения на пакети | Крайни точки, DNS, TLS SNI, разпределение по протоколи и HTTP заявки | Предоставени от вас tshark и capinfos (проверено на Linux); [ръководство за pcap](../guides/data/pcap-analysis.md) | +| Записани логически сигнали | Анотации от декодерите, диапазони от семпли и диагностика | Linux: sigrok-cli 0.7.2 + prlimit; [записи на сигнали](../guides/signals/signal-recordings.md) | +| Пакети и ресурси | Описи на файлове, хешове, plist файлове, устройство на Apple пакети (bundles) и извлечени ресурси | [Ръководство за артефакти и JavaScript](../guides/javascript/javascript-artifact-reconstruction.md), [Apple приложения](../guides/apple/apple-application-analysis.md) | +| Поведение на процеси | Изход в терминала, взаимодействия, наблюдения на изхода от процеса и на файловата система и сравнения между изпълнения | Linux/macOS с нативен PTY; [запис на процеси](../guides/runtime/process-capture.md) | +| PyInstaller изпълними файлове | Членове на CArchive, версия на Python, входни скриптове и извлечен байткод | Няма (само статичен анализ); [пакетирани Python приложения](../python-packaged-applications.md) | + +Статичната проверка на JavaScript и .NET чете предоставените файлове, без да +стартира приложението. Записът по време на изпълнение стартира избраната цел или +взаимодейства с нея с правата на вашия потребител; всяко ръководство за анализ по +време на изпълнение описва какво точно прави. + +За офлайн проверка на нативни бинарни файлове REA поддържа и предоставени от вас +GNU objdump и Rizin. Вижте +[ръководството за инструменти за обратно инженерство](../reverse-engineering-tools.md) +за настройка на доставчиците, CLI командите и ограниченията на Evidence. REA не +инсталира и не обновява нито един от двата доставчика. + + + +Поддържаните нативни формати и операционни системи зависят от доставчика. Вижте +[настройката на Hopper и Ghidra](../getting-started/installation.md#hopper), +[ръководството за IDA](../providers/ida-provider.md) (включително незадължителен +нативен MCP мост), [ръководството за декомпилатора Kuna](../kuna-provider.md) и +[експерименталната поддръжка на Ghidra за Windows](../providers/windows-ghidra-p0.md). +Ghidra поддържа и [анализ на 16-битов DOS код](../providers/ghidra-dos.md). За +големи бинарни файлове увеличете времето за стартиране на доставчика с +`REA_GHIDRA_STARTUP_TIMEOUT_MS` или `REA_HOPPER_STARTUP_TIMEOUT_MS`. За избора +на доставчик вижте [ръководството за CLI](../getting-started/cli.md#choose-a-provider). +Проверете [наличността в изданията](../getting-started/installation.md#released-package-and-main) +за функции, добавени след последното издание в npm. + +## Примери + + + + + Илюстрации на примерите DX-Ball (звукова панорама), Notion (мост за клипборда) и TH04 (пръстен от куршуми) + + + +### DX-Ball: реконструиране на изчислението на звуковата панорама + +Проследете извикване на звук до помощната функция, която превръща позицията в +панорама, изследвайте инструкциите и превърнете непълния псевдокод в C. +Реконструкцията минава 3 205 тестови случая спрямо оригиналния x86 код и +възпроизвежда всичките 63 байта на компилираната функция. + +[Прочетете казуса](https://rea.tools/showcase/dx-ball/) · +[Хранилище с реконструкцията](https://github.com/N0zoM1z0/dx-ball) + +### Notion: проследяване на моста за клипборда в Electron + +Открийте API-то за клипборда в renderer процеса, проследете го през preload +скрипта и IPC до главния процес и изследвайте формата за форматирано съдържание +в клипборда. + +[Прочетете казуса](https://rea.tools/showcase/notion/) + +### TH04: възстановяване на изчислението на пръстена от куршуми в DOS + +Изследвайте 16-битовите инструкции на оригиналната игра за PC-98, възстановете +изчисленията на фиксираните и насочените ъгли и сравнете реконструирания C++ код +с изхода на историческия компилатор. + +[Прочетете казуса](https://rea.tools/showcase/th04/) · +[Хранилище с реконструкцията](https://github.com/N0zoM1z0/th04) + +### Създавайте RL среди с REA + +Запишете сесия в уеб приложение, превърнете неговото API в инструменти и експортирайте среда, която AI агент може да използва. Стартирайте я с AgentEnv, след което добавете задачи и проверки за награда за RL обучение или оценка. + +[Прочетете ръководството](https://rea.tools/guides/rl-environments/) · +[Гледайте видеото](https://x.com/reatools/status/2112574822584918075?s=20) + +Ако сте използвали REA за нещо интересно, ще се радваме да го видим. Споделете +случая си в [issue](https://github.com/morluto/rea/issues) или +[pull request](https://github.com/morluto/rea/pulls), като включите целта, +въпроса си, как ви помогна REA и какво открихте. + + + +## Създаване на RL среди + +Дайте на AI агент локална среда, в която да упражнява задачи като намиране на issue или създаване на папка, без да стартира оригиналното приложение. Използвайте я за обучение с подсилване (reinforcement learning, RL) или за да проверите колко добре агентът изпълнява задачи. + +REA превръща записаните API заявки и отговори в инструменти, които агентът може да извиква. Средата използва записаните данни и поддържа промени само когато записът потвърждава ефекта им. + +След като REA е настроен в агента ви, заменете примерния URL адрес и задачите с папки по-долу със свои: + +```text +Използвай REA, за да изградиш RL среда от тестовото ми уеб приложение на +http://127.0.0.1:3000. +Обхвани извеждането на списък, създаването, преименуването и изтриването на +папки. Можеш да създаваш и премахваш тестови папки. Не променяй съществуващите +данни. +Запази я в папка с име my-env. Провери кои операции работят и ми кажи как да я +стартирам. +``` + +
+Използвайте командния ред вместо това + +Използвайте тези команди, ако вече имате файл със записаните от браузъра заявки и отговори на приложението. За да стартирате резултата, са нужни и AgentEnv, и Docker. + +```sh +rea environment-build ./session.har ./my-env --name my-env --json +agent-env run ./my-env +``` + +
+ +REA експортира готова за стартиране среда с базов тест, който проверява дали тя стартира и отговаря. Използвайте я с вашата RL рамка, за да зададете целите на задачите, да добавите проверки за награда и да стартирате обучението. + +[Изградете среда](https://rea.tools/guides/rl-environments/) · +[Справочник за средите](../agent-environments.md) · +[Гледайте демонстрацията в X](https://x.com/reatools/status/2112574822584918075?s=20) + +## Често задавани въпроси + +
+Кои агенти могат да използват REA? + +Всеки агент, който поддържа локални MCP сървъри. Настройката конфигурира +[поддържаните агенти](../getting-started/installation.md#supported-agents); +другите клиенти могат да използват +[ръчна MCP регистрация](../getting-started/installation.md#mcp-registry). + +
+ +
+Нужен ли ми е двигател за нативен анализ? + +Задълбоченият нативен анализ използва Hopper, Ghidra, IDA или Kuna в зависимост +от целта и операцията. Статичната проверка на JavaScript и .NET работи без +двигател за нативен анализ. Настройката може да инсталира Hopper след ваше +одобрение; Ghidra, IDA и Kuna се използват от вече съществуващите ви инсталации. +Вижте [настройката на доставчиците](../getting-started/installation.md#hopper) +за възможностите и поддържаните от тях цели. + +
+ +
+Трябва ли първо да стартирам Hopper? + +REA стартира Hopper, когато дадена операция се нуждае от него. В macOS при първо +стартиране може да се появи диалогов прозорец, който ви пита дали да изберете +демо режим, или да активирате лиценза си. Завършете този диалог в същата +потребителска сесия преди първата си CLI/MCP операция или задача, която ще се +изпълнява без надзор. При нужда отворете Hopper ръчно. Вижте +[стартиране и отстраняване на проблеми с Hopper](../getting-started/installation.md#launcher-paths-and-troubleshooting). + +
+ +
+Какво прави инсталирането на умението (skill) от skills.sh? + +Умението дава на агента ви инструкции как да провежда изследвания. Използвайте +`npx rea-agents setup`, за да регистрирате MCP сървъра на REA и да инсталирате +съответните инструкции, след което рестартирайте агента. Вижте +[инсталиране само на умението](../getting-started/installation.md#skill-only-installation). + +
+ +
+Какъв код връща REA? + +Нативният анализ връща псевдокод и асемблер. Анализът на JavaScript/Electron +възстановява модулите и връзките между тях. Агентът ви използва тези +констатации, за да напише и тества реализация; [примерите](#примери) показват +цялостни разработени случаи. + +
+ +
+Качва ли REA приложението ми някъде? + +REA анализира целите локално. Агентът ви получава резултатите от инструментите, +а доставчикът на модела, който агентът използва, има собствена политика за +данните. + +
+ +
+Какво да направя, ако попадна на грешка? + +Първо обновете; възможно е скорошно издание вече да я е поправило. + +За CLI, инсталиран с `npm install --global` или `bun add --global`: + +```bash +rea update +``` + +За настройка на агента чрез `npx`: + +```bash +npx rea-agents@latest setup +``` + +Ако използвате агент, извършете +[опресняването на настройката](#обновяване-на-rea) и го рестартирайте. Опитайте +отново същата задача. Ако проблемът продължава, +[отворете issue](https://github.com/morluto/rea/issues), като посочите версията +на REA, типа на целта, стъпките за възпроизвеждане и изхода с грешката. + +
+ +## Документация + +Започнете с [практическите ръководства](https://rea.tools/guides/) на уебсайта. +За точните опции, предварителните изисквания и договорите за резултатите: + +- [Инсталиране и настройка](../getting-started/installation.md): регистриране на агенти, конфигуриране на доставчици, обновяване и деинсталиране. +- [Готовност и отстраняване на проблеми](../getting-started/installation.md#check-readiness-for-your-task): диагностика на конкретен агент или двигател за анализ. +- [CLI и Evidence](../getting-started/cli.md): команди, избор на доставчик, моментни снимки, импорт/експорт и изходни статуси. +- [MCP договори](../reference/mcp-contracts.md) и [подсказки за агенти](../getting-started/mcp-prompts.md): резултати от инструментите, сесии и насочвани изследвания. +- [Каталог с инструменти](../reference/mcp-contracts.md#generated-catalog): генериран списък с инструменти, доставчици и CLI команди. +- [Пътна карта](../development/roadmap.md): планирана работа и проследяване на възможностите. + +Съобщавайте за уязвимости чрез [SECURITY.md](../../SECURITY.md). + +## История на звездите + +🎉 **400 000 звезди в GitHub — благодарим ви!** + +Благодарим на всички, които използват REA, съобщават за грешки, предлагат нови функции, тестват версии и допринасят с поправки. + + + + + + История на звездите на REA в GitHub + + + +## Отказ от отговорност + +Вижте [DISCLAIMER.md](../../DISCLAIMER.md) за насоки за отговорна употреба. + +Позицията на проекта относно незаконната или неразрешената употреба обхваща +всички версии, канали за разпространение и платформи на REA; всяко копие запазва +приложимите за него лицензи. + +REA е предназначен за законни изследвания, обучение, оперативна съвместимост, +съхраняване на софтуер и анализ на софтуер, който притежавате или имате +разрешение да изследвате. + +## Принос към проекта + +Ще се радваме на помощта ви с REA! [Отворете issue](https://github.com/morluto/rea/issues), +за да съобщите за грешка или да предложите функция, или +[изпратете pull request](https://github.com/morluto/rea/pulls), за да подобрите +кода или документацията. + +Вижте [CONTRIBUTING.md](../../CONTRIBUTING.md) за настройка на средата за +разработка и проверките, [тестване](../development/testing.md) за видовете +проверки и [картата на архитектурата](../architecture/architecture.mermaid) за +избрани слоеве и пътища на зависимостите. + +## Лиценз + +[MIT](../../LICENSE) + +Кодът, написан за проекта REA, е лицензиран под MIT. Материалите от трети страни +запазват собствените си лицензи и бележки за авторски права; вижте +[бележките за трети страни](../../THIRD_PARTY_NOTICES.md) за списъка със +зависимости, запазените текстове на лицензите и условията на външните +инструменти. + +**Трябва да сте придобили законно търговските инструменти и да имате право да ги +използвате**, включително IDA Pro / декомпилаторите на Hex-Rays, Hopper и JEB, +съгласно приложимите им лицензи. REA не предоставя лиценз, ключ или право на +активиране за нито един инструмент. Пробните и демо версиите остават обект на +условията на производителя, включително ограниченията за брой потребители, +функции, автоматизация и споделяне на резултатите. Кракнати копия, откраднати +ключове, неразрешено споделяне на ключове и заобикаляне на лицензионни +ограничения не са разрешени. Тези насоки не изменят лиценза MIT или лицензите на +трети страни. diff --git a/docs/readme/README_de.md b/docs/readme/README_de.md index e38876b1f1..5a901dbd64 100644 --- a/docs/readme/README_de.md +++ b/docs/readme/README_de.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · **Deutsch** · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Alles reverse-engineeren diff --git a/docs/readme/README_el.md b/docs/readme/README_el.md index b3d5b8cc1e..24e61f69c2 100644 --- a/docs/readme/README_el.md +++ b/docs/readme/README_el.md @@ -1,6 +1,6 @@
-[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) · **Ελληνικά** · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) · **Ελληνικά** · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_es.md b/docs/readme/README_es.md index e72fc3faf9..33ff18ebd9 100644 --- a/docs/readme/README_es.md +++ b/docs/readme/README_es.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · **Español** · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Ingeniería inversa de cualquier cosa diff --git a/docs/readme/README_fa.md b/docs/readme/README_fa.md index 411e48d965..95b869b72d 100644 --- a/docs/readme/README_fa.md +++ b/docs/readme/README_fa.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · **فارسی** · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: مهندسی معکوس هر چیزی diff --git a/docs/readme/README_fr.md b/docs/readme/README_fr.md index b3b9fa54b0..6ecd2208eb 100644 --- a/docs/readme/README_fr.md +++ b/docs/readme/README_fr.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · **Français** · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA : rétro-ingénierie de tout diff --git a/docs/readme/README_id.md b/docs/readme/README_id.md index ede582b2ba..9b020ee868 100644 --- a/docs/readme/README_id.md +++ b/docs/readme/README_id.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · **Bahasa Indonesia** · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Rekayasa Balik Apa Pun diff --git a/docs/readme/README_it.md b/docs/readme/README_it.md index c3eab454b1..14ba5a89ee 100644 --- a/docs/readme/README_it.md +++ b/docs/readme/README_it.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · **Italiano** -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_ja.md b/docs/readme/README_ja.md index d7a4ae731b..805419bacf 100644 --- a/docs/readme/README_ja.md +++ b/docs/readme/README_ja.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · **日本語** · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA:あらゆるものをリバースエンジニアリング diff --git a/docs/readme/README_ko.md b/docs/readme/README_ko.md index 6f31f67983..930a018341 100644 --- a/docs/readme/README_ko.md +++ b/docs/readme/README_ko.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · **한국어** · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: 무엇이든 리버스 엔지니어링 diff --git a/docs/readme/README_ml.md b/docs/readme/README_ml.md index 2353c605b3..ba4a60af67 100644 --- a/docs/readme/README_ml.md +++ b/docs/readme/README_ml.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · **മലയാളം** · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · **മലയാളം** · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: എന്തും Reverse Engineer ചെയ്യുക diff --git a/docs/readme/README_pl.md b/docs/readme/README_pl.md index eac0868ff8..0cf6f9a201 100644 --- a/docs/readme/README_pl.md +++ b/docs/readme/README_pl.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · **Polski** · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_pt-BR.md b/docs/readme/README_pt-BR.md index b79f4efa83..62aac5070f 100644 --- a/docs/readme/README_pt-BR.md +++ b/docs/readme/README_pt-BR.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · **Português (Brasil)** · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Faça engenharia reversa de qualquer coisa diff --git a/docs/readme/README_ro.md b/docs/readme/README_ro.md index 07d60b61c2..34bf493b73 100644 --- a/docs/readme/README_ro.md +++ b/docs/readme/README_ro.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · **Română** +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · **Română** · [Български](README_bg.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_ru.md b/docs/readme/README_ru.md index 7a637bcb04..ee129b6e26 100644 --- a/docs/readme/README_ru.md +++ b/docs/readme/README_ru.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · **Русский** · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Реверс-инжиниринг чего угодно diff --git a/docs/readme/README_th.md b/docs/readme/README_th.md index 396d51af5b..3104eda8b7 100644 --- a/docs/readme/README_th.md +++ b/docs/readme/README_th.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · **ไทย** · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_tr.md b/docs/readme/README_tr.md index 3a10d09f80..d61a25e50d 100644 --- a/docs/readme/README_tr.md +++ b/docs/readme/README_tr.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · **Türkçe** · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Her şeyi tersine mühendislikle inceleyin diff --git a/docs/readme/README_uk.md b/docs/readme/README_uk.md index 6927a984e5..4c5d606a14 100644 --- a/docs/readme/README_uk.md +++ b/docs/readme/README_uk.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · **Українська** · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Реверс-інжиніринг будь-чого diff --git a/docs/readme/README_ur-Latn.md b/docs/readme/README_ur-Latn.md index b132e95085..9e2f73d07b 100644 --- a/docs/readme/README_ur-Latn.md +++ b/docs/readme/README_ur-Latn.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · **Roman Urdu** · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · **Roman Urdu** · [Română](README_ro.md) · [Български](README_bg.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_vi.md b/docs/readme/README_vi.md index 66c947331a..2a37617583 100644 --- a/docs/readme/README_vi.md +++ b/docs/readme/README_vi.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · **Tiếng Việt** · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA: Kỹ thuật dịch ngược cho mọi thứ diff --git a/docs/readme/README_zh-TW.md b/docs/readme/README_zh-TW.md index c9d62836cf..182e8c85d1 100644 --- a/docs/readme/README_zh-TW.md +++ b/docs/readme/README_zh-TW.md @@ -1,7 +1,7 @@
[English](../../README.md) · [简体中文](README_zh.md) · **繁體中文** · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA:逆向一切 diff --git a/docs/readme/README_zh.md b/docs/readme/README_zh.md index 8801495516..414bee2ca4 100644 --- a/docs/readme/README_zh.md +++ b/docs/readme/README_zh.md @@ -1,7 +1,7 @@
[English](../../README.md) · **简体中文** · [繁體中文](README_zh-TW.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Türkçe](README_tr.md) · [Русский](README_ru.md) · [Tiếng Việt](README_vi.md) · [ไทย](README_th.md) · [Deutsch](README_de.md) · [Español](README_es.md) · [Français](README_fr.md) · [Українська](README_uk.md) · [Polski](README_pl.md) · [Português (Brasil)](README_pt-BR.md) · [العربية](README_ar.md) · [فارسی](README_fa.md) · [Bahasa Indonesia](README_id.md) · [Italiano](README_it.md) -· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) · [Български](README_bg.md) # REA:逆向一切 diff --git a/website/locales/README.md b/website/locales/README.md index 0779b50400..a402d8175c 100644 --- a/website/locales/README.md +++ b/website/locales/README.md @@ -139,6 +139,10 @@ Romanian (`ro`) has a complete translated README. Its website catalog is pending and uses the same labeled, nonindexable English fallback; the Romanian README does not establish website translation coverage. +Bulgarian (`bg`) has a complete translated README in Cyrillic script. Its +website catalog is pending and uses the same labeled, nonindexable English +fallback; the Bulgarian README does not establish website translation coverage. + The first catalogs started with machine-assisted drafts. They include editorial corrections to navigation, prompts and technical terminology. Traditional Chinese started from the Simplified Chinese draft and is maintained independently. diff --git a/website/locales/bg/messages.po b/website/locales/bg/messages.po new file mode 100644 index 0000000000..7e9bf3f484 --- /dev/null +++ b/website/locales/bg/messages.po @@ -0,0 +1,13932 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: website/public/blog/index.html:113 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "" + +#: website/public/blog/index.html:123 +#: website/public/blog/reverse-engineering-models/index.html:123 +#: website/public/blog/touhou-reconstruction/index.html:123 +#: website/public/contributors/index.html:124 +#: website/public/examples/dino-lab/index.html:124 +#: website/public/faq/index.html:123 +#: website/public/first-investigation/index.html:123 +#: website/public/get-started/index.html:123 +#: website/public/guides/browser/index.html:123 +#: website/public/guides/index.html:123 +#: website/public/guides/javascript/index.html:123 +#: website/public/guides/native/index.html:123 +#: website/public/guides/rl-environments/index.html:123 +#: website/public/index.html:125 website/public/showcase/aegis/index.html:124 +#: website/public/showcase/ctf/index.html:123 +#: website/public/showcase/dx-ball/index.html:123 +#: website/public/showcase/index.html:123 +#: website/public/showcase/notion/index.html:123 +#: website/public/showcase/th04/index.html:123 +msgctxt "shared" +msgid "Get started" +msgstr "" + +#: website/public/blog/index.html:124 +#: website/public/blog/reverse-engineering-models/index.html:124 +#: website/public/blog/touhou-reconstruction/index.html:124 +#: website/public/contributors/index.html:125 +#: website/public/examples/dino-lab/index.html:125 +#: website/public/faq/index.html:124 +#: website/public/first-investigation/index.html:124 +#: website/public/get-started/index.html:124 +#: website/public/guides/browser/index.html:124 +#: website/public/guides/index.html:124 +#: website/public/guides/javascript/index.html:124 +#: website/public/guides/native/index.html:124 +#: website/public/guides/rl-environments/index.html:124 +#: website/public/index.html:126 website/public/showcase/aegis/index.html:125 +#: website/public/showcase/ctf/index.html:124 +#: website/public/showcase/dx-ball/index.html:124 +#: website/public/showcase/index.html:124 +#: website/public/showcase/notion/index.html:124 +#: website/public/showcase/th04/index.html:124 +msgctxt "shared" +msgid "Showcases" +msgstr "" + +#: website/public/blog/index.html:125 +#: website/public/blog/reverse-engineering-models/index.html:125 +#: website/public/blog/touhou-reconstruction/index.html:125 +#: website/public/contributors/index.html:126 +#: website/public/examples/dino-lab/index.html:126 +#: website/public/faq/index.html:125 +#: website/public/first-investigation/index.html:125 +#: website/public/get-started/index.html:125 +#: website/public/guides/browser/index.html:125 +#: website/public/guides/index.html:125 +#: website/public/guides/javascript/index.html:125 +#: website/public/guides/native/index.html:125 +#: website/public/guides/rl-environments/index.html:125 +#: website/public/index.html:127 website/public/showcase/aegis/index.html:126 +#: website/public/showcase/ctf/index.html:125 +#: website/public/showcase/dx-ball/index.html:125 +#: website/public/showcase/index.html:125 +#: website/public/showcase/notion/index.html:125 +#: website/public/showcase/th04/index.html:125 +msgctxt "shared" +msgid "Blog" +msgstr "" + +#: website/public/blog/index.html:126 +#: website/public/blog/reverse-engineering-models/index.html:126 +#: website/public/blog/touhou-reconstruction/index.html:126 +#: website/public/contributors/index.html:127 +#: website/public/examples/dino-lab/index.html:127 +#: website/public/faq/index.html:126 +#: website/public/first-investigation/index.html:126 +#: website/public/get-started/index.html:126 +#: website/public/guides/browser/index.html:126 +#: website/public/guides/index.html:126 +#: website/public/guides/javascript/index.html:126 +#: website/public/guides/native/index.html:126 +#: website/public/guides/rl-environments/index.html:126 +#: website/public/index.html:128 website/public/showcase/aegis/index.html:127 +#: website/public/showcase/ctf/index.html:126 +#: website/public/showcase/dx-ball/index.html:126 +#: website/public/showcase/index.html:126 +#: website/public/showcase/notion/index.html:126 +#: website/public/showcase/th04/index.html:126 +msgctxt "shared" +msgid "Guides" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:203 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "" + +#: website/public/blog/index.html:204 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "" + +#: website/public/blog/index.html:205 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "" + +#. {ph0}:
+#: website/public/blog/index.html:209 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Model specialization{ph0}Essay" +msgstr "" + +#: website/public/blog/index.html:211 +msgctxt "page:blog/index.html" +msgid "Does reverse engineering need a bigger model?" +msgstr "" + +#: website/public/blog/index.html:212 +msgctxt "page:blog/index.html" +msgid "" +"What Touhou reconstruction suggests about general models, specialist models " +"and learning from compiler feedback." +msgstr "" + +#: website/public/blog/index.html:216 website/public/blog/index.html:231 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "" + +#: website/public/blog/index.html:219 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 13 October 2026" +msgstr "" + +#. {ph0}:
+#: website/public/blog/index.html:223 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "" + +#: website/public/blog/index.html:225 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "" + +#: website/public/blog/index.html:226 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" + +#: website/public/blog/index.html:234 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "" + +#: website/public/blog/index.html:246 +#: website/public/blog/reverse-engineering-models/index.html:885 +#: website/public/blog/touhou-reconstruction/index.html:1082 +#: website/public/contributors/index.html:1133 +#: website/public/examples/dino-lab/index.html:477 +#: website/public/faq/index.html:575 +#: website/public/first-investigation/index.html:536 +#: website/public/get-started/index.html:1853 +#: website/public/guides/browser/index.html:509 +#: website/public/guides/index.html:303 +#: website/public/guides/javascript/index.html:513 +#: website/public/guides/native/index.html:514 +#: website/public/guides/rl-environments/index.html:500 +#: website/public/index.html:1305 website/public/showcase/aegis/index.html:817 +#: website/public/showcase/ctf/index.html:779 +#: website/public/showcase/dx-ball/index.html:787 +#: website/public/showcase/index.html:339 +#: website/public/showcase/notion/index.html:633 +#: website/public/showcase/th04/index.html:802 +msgctxt "shared" +msgid "Contributors" +msgstr "" + +#: website/public/blog/index.html:247 +#: website/public/blog/reverse-engineering-models/index.html:886 +#: website/public/blog/touhou-reconstruction/index.html:1083 +#: website/public/contributors/index.html:1134 +#: website/public/examples/dino-lab/index.html:478 +#: website/public/faq/index.html:576 +#: website/public/first-investigation/index.html:537 +#: website/public/get-started/index.html:1854 +#: website/public/guides/browser/index.html:510 +#: website/public/guides/index.html:304 +#: website/public/guides/javascript/index.html:514 +#: website/public/guides/native/index.html:515 +#: website/public/guides/rl-environments/index.html:501 +#: website/public/index.html:1306 website/public/showcase/aegis/index.html:818 +#: website/public/showcase/ctf/index.html:780 +#: website/public/showcase/dx-ball/index.html:788 +#: website/public/showcase/index.html:340 +#: website/public/showcase/notion/index.html:634 +#: website/public/showcase/th04/index.html:803 +msgctxt "shared" +msgid "Source" +msgstr "" + +#: website/public/blog/index.html:248 +#: website/public/blog/reverse-engineering-models/index.html:887 +#: website/public/blog/touhou-reconstruction/index.html:1084 +#: website/public/contributors/index.html:1135 +#: website/public/examples/dino-lab/index.html:479 +#: website/public/faq/index.html:577 +#: website/public/first-investigation/index.html:538 +#: website/public/get-started/index.html:1855 +#: website/public/guides/browser/index.html:511 +#: website/public/guides/index.html:305 +#: website/public/guides/javascript/index.html:515 +#: website/public/guides/native/index.html:516 +#: website/public/guides/rl-environments/index.html:502 +#: website/public/index.html:1307 website/public/showcase/aegis/index.html:819 +#: website/public/showcase/ctf/index.html:781 +#: website/public/showcase/dx-ball/index.html:789 +#: website/public/showcase/index.html:341 +#: website/public/showcase/notion/index.html:635 +#: website/public/showcase/th04/index.html:804 +msgctxt "shared" +msgid "MIT license" +msgstr "" + +#: website/public/blog/index.html:249 +#: website/public/blog/reverse-engineering-models/index.html:888 +#: website/public/blog/touhou-reconstruction/index.html:1085 +#: website/public/contributors/index.html:1136 +#: website/public/examples/dino-lab/index.html:480 +#: website/public/faq/index.html:578 +#: website/public/first-investigation/index.html:539 +#: website/public/get-started/index.html:1856 +#: website/public/guides/browser/index.html:512 +#: website/public/guides/index.html:306 +#: website/public/guides/javascript/index.html:516 +#: website/public/guides/native/index.html:517 +#: website/public/guides/rl-environments/index.html:503 +#: website/public/index.html:1308 website/public/showcase/aegis/index.html:820 +#: website/public/showcase/ctf/index.html:782 +#: website/public/showcase/dx-ball/index.html:790 +#: website/public/showcase/index.html:342 +#: website/public/showcase/notion/index.html:636 +#: website/public/showcase/th04/index.html:805 +msgctxt "shared" +msgid "Join the community" +msgstr "" + +#: website/public/blog/index.html:250 +#: website/public/blog/reverse-engineering-models/index.html:889 +#: website/public/blog/touhou-reconstruction/index.html:1086 +#: website/public/contributors/index.html:1137 +#: website/public/examples/dino-lab/index.html:481 +#: website/public/faq/index.html:579 +#: website/public/first-investigation/index.html:540 +#: website/public/get-started/index.html:1857 +#: website/public/guides/browser/index.html:513 +#: website/public/guides/index.html:307 +#: website/public/guides/javascript/index.html:517 +#: website/public/guides/native/index.html:518 +#: website/public/guides/rl-environments/index.html:504 +#: website/public/index.html:1309 website/public/showcase/aegis/index.html:821 +#: website/public/showcase/ctf/index.html:783 +#: website/public/showcase/dx-ball/index.html:791 +#: website/public/showcase/index.html:343 +#: website/public/showcase/notion/index.html:637 +#: website/public/showcase/th04/index.html:806 +msgctxt "shared" +msgid "Follow us on X" +msgstr "" + +#. {ph0}: +#: website/public/blog/index.html:255 +#: website/public/blog/reverse-engineering-models/index.html:894 +#: website/public/blog/touhou-reconstruction/index.html:1091 +#: website/public/contributors/index.html:1142 +#: website/public/examples/dino-lab/index.html:486 +#: website/public/faq/index.html:584 +#: website/public/first-investigation/index.html:545 +#: website/public/get-started/index.html:1862 +#: website/public/guides/browser/index.html:518 +#: website/public/guides/index.html:312 +#: website/public/guides/javascript/index.html:522 +#: website/public/guides/native/index.html:523 +#: website/public/guides/rl-environments/index.html:509 +#: website/public/index.html:1314 website/public/showcase/aegis/index.html:826 +#: website/public/showcase/ctf/index.html:788 +#: website/public/showcase/dx-ball/index.html:796 +#: website/public/showcase/index.html:348 +#: website/public/showcase/notion/index.html:642 +#: website/public/showcase/th04/index.html:811 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" + +#: website/public/blog/index.html:85 website/public/blog/index.html:98 +#: website/public/blog/reverse-engineering-models/index.html:85 +#: website/public/blog/reverse-engineering-models/index.html:98 +#: website/public/blog/touhou-reconstruction/index.html:85 +#: website/public/blog/touhou-reconstruction/index.html:98 +#: website/public/contributors/index.html:85 +#: website/public/contributors/index.html:98 +#: website/public/examples/dino-lab/index.html:85 +#: website/public/examples/dino-lab/index.html:98 +#: website/public/faq/index.html:85 website/public/faq/index.html:98 +#: website/public/first-investigation/index.html:85 +#: website/public/first-investigation/index.html:98 +#: website/public/get-started/index.html:85 +#: website/public/get-started/index.html:98 +#: website/public/guides/browser/index.html:85 +#: website/public/guides/browser/index.html:98 +#: website/public/guides/index.html:85 website/public/guides/index.html:98 +#: website/public/guides/javascript/index.html:85 +#: website/public/guides/javascript/index.html:98 +#: website/public/guides/native/index.html:85 +#: website/public/guides/native/index.html:98 +#: website/public/guides/rl-environments/index.html:85 +#: website/public/guides/rl-environments/index.html:98 +#: website/public/index.html:85 website/public/index.html:98 +#: website/public/showcase/aegis/index.html:85 +#: website/public/showcase/aegis/index.html:98 +#: website/public/showcase/ctf/index.html:85 +#: website/public/showcase/ctf/index.html:98 +#: website/public/showcase/dx-ball/index.html:85 +#: website/public/showcase/dx-ball/index.html:98 +#: website/public/showcase/index.html:85 website/public/showcase/index.html:98 +#: website/public/showcase/notion/index.html:85 +#: website/public/showcase/notion/index.html:98 +#: website/public/showcase/th04/index.html:85 +#: website/public/showcase/th04/index.html:98 +msgctxt "shared" +msgid "" +"REA: Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" + +#: website/public/blog/index.html:118 +#: website/public/blog/reverse-engineering-models/index.html:118 +#: website/public/blog/touhou-reconstruction/index.html:118 +#: website/public/contributors/index.html:119 +#: website/public/examples/dino-lab/index.html:119 +#: website/public/faq/index.html:118 +#: website/public/first-investigation/index.html:118 +#: website/public/get-started/index.html:118 +#: website/public/guides/browser/index.html:118 +#: website/public/guides/index.html:118 +#: website/public/guides/javascript/index.html:118 +#: website/public/guides/native/index.html:118 +#: website/public/guides/rl-environments/index.html:118 +#: website/public/index.html:120 website/public/showcase/aegis/index.html:119 +#: website/public/showcase/ctf/index.html:118 +#: website/public/showcase/dx-ball/index.html:118 +#: website/public/showcase/index.html:118 +#: website/public/showcase/notion/index.html:118 +#: website/public/showcase/th04/index.html:118 +msgctxt "shared" +msgid "REA home" +msgstr "" + +#: website/public/blog/index.html:122 +#: website/public/blog/reverse-engineering-models/index.html:122 +#: website/public/blog/touhou-reconstruction/index.html:122 +#: website/public/contributors/index.html:123 +#: website/public/examples/dino-lab/index.html:123 +#: website/public/faq/index.html:122 +#: website/public/first-investigation/index.html:122 +#: website/public/get-started/index.html:122 +#: website/public/guides/browser/index.html:122 +#: website/public/guides/index.html:122 +#: website/public/guides/javascript/index.html:122 +#: website/public/guides/native/index.html:122 +#: website/public/guides/rl-environments/index.html:122 +#: website/public/index.html:124 website/public/showcase/aegis/index.html:123 +#: website/public/showcase/ctf/index.html:122 +#: website/public/showcase/dx-ball/index.html:122 +#: website/public/showcase/index.html:122 +#: website/public/showcase/notion/index.html:122 +#: website/public/showcase/th04/index.html:122 +msgctxt "shared" +msgid "Main navigation" +msgstr "" + +#: website/public/blog/index.html:139 +#: website/public/blog/reverse-engineering-models/index.html:139 +#: website/public/blog/touhou-reconstruction/index.html:139 +#: website/public/contributors/index.html:140 +#: website/public/examples/dino-lab/index.html:140 +#: website/public/faq/index.html:139 +#: website/public/first-investigation/index.html:139 +#: website/public/get-started/index.html:139 +#: website/public/guides/browser/index.html:139 +#: website/public/guides/index.html:139 +#: website/public/guides/javascript/index.html:139 +#: website/public/guides/native/index.html:139 +#: website/public/guides/rl-environments/index.html:139 +#: website/public/index.html:141 website/public/showcase/aegis/index.html:140 +#: website/public/showcase/ctf/index.html:139 +#: website/public/showcase/dx-ball/index.html:139 +#: website/public/showcase/index.html:139 +#: website/public/showcase/notion/index.html:139 +#: website/public/showcase/th04/index.html:139 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "" + +#: website/public/blog/index.html:159 +#: website/public/blog/reverse-engineering-models/index.html:159 +#: website/public/blog/touhou-reconstruction/index.html:159 +#: website/public/contributors/index.html:160 +#: website/public/examples/dino-lab/index.html:160 +#: website/public/faq/index.html:159 +#: website/public/first-investigation/index.html:159 +#: website/public/get-started/index.html:159 +#: website/public/guides/browser/index.html:159 +#: website/public/guides/index.html:159 +#: website/public/guides/javascript/index.html:159 +#: website/public/guides/native/index.html:159 +#: website/public/guides/rl-environments/index.html:159 +#: website/public/index.html:161 website/public/showcase/aegis/index.html:160 +#: website/public/showcase/ctf/index.html:159 +#: website/public/showcase/dx-ball/index.html:159 +#: website/public/showcase/index.html:159 +#: website/public/showcase/notion/index.html:159 +#: website/public/showcase/th04/index.html:159 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "" + +#: website/public/blog/index.html:178 +#: website/public/blog/reverse-engineering-models/index.html:178 +#: website/public/blog/touhou-reconstruction/index.html:178 +#: website/public/contributors/index.html:179 +#: website/public/examples/dino-lab/index.html:179 +#: website/public/faq/index.html:178 +#: website/public/first-investigation/index.html:178 +#: website/public/get-started/index.html:178 +#: website/public/guides/browser/index.html:178 +#: website/public/guides/index.html:178 +#: website/public/guides/javascript/index.html:178 +#: website/public/guides/native/index.html:178 +#: website/public/guides/rl-environments/index.html:178 +#: website/public/index.html:180 website/public/showcase/aegis/index.html:179 +#: website/public/showcase/ctf/index.html:178 +#: website/public/showcase/dx-ball/index.html:178 +#: website/public/showcase/index.html:178 +#: website/public/showcase/notion/index.html:178 +#: website/public/showcase/th04/index.html:178 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "" + +#: website/public/blog/index.html:255 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:113 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/reverse-engineering-models/index.html:203 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Models and RE" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:206 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Essay" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:207 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Does reverse engineering need a bigger model?" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:208 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "By N0zoM1z0 · 13 October 2026" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:210 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Takeaway" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:212 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Model capability changes the hypotheses an agent can find.{ph1} Later " +"sessions have solved problems that earlier work left unresolved." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:220 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}A familiar compiler gives specialization something concrete to " +"learn.{ph1} Some exact matches depend on narrow, reusable source patterns." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:227 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Give repository knowledge a fair comparison.{ph1} A smaller model with " +"good retrieval may already know enough to make progress." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:232 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Train the next useful experiment, and test its oracle.{ph1} The value " +"of feedback depends on what the checker actually verifies." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:239 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Measure accepted reconstruction against time and cost.{ph1} That is the" +" result I want from the whole agent." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:250 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "In this article" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:252 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}What better models changed{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:253 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}Why specialize?{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:254 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}Where experience lives{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:255 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}Learning the next experiment{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:256 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}RE and reinforcement learning{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:257 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}When the oracle is wrong{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:258 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}A comparison worth running{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:259 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "{ph0}What kind of agent?{ph1}" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:267 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "What better models changed" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:268 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Since August 2026, I have been exploring how much reverse engineering an " +"agent can carry out with access to a program and a way to check its work. " +"Most of my experience comes from reconstructing games, especially Touhou. As" +" I have changed models, the repositories have kept a record of what each " +"session managed to recover." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:276 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Much of that work aims at exact reconstruction: we compile the maintained " +"source under a pinned historical toolchain and check whether it reproduces " +"the target function. When a later model succeeds where earlier work stalled," +" the source changes show what made that progress possible." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:283 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "The temporary values had to stay alive together" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:284 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Much of a TH09 attack function's logic had already been reconstructed, but " +"the compiler still stored temporary results differently from the original. " +"The remaining problem was how long those results needed to stay alive and " +"when their storage could be reused." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/reverse-engineering-models/index.html:291 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"A {ph0}GPT-6-Sol checkpoint{ph1} recorded this mismatch after testing " +"several ordinary source arrangements. When {ph2}GPT-6.1-Sol returned to the " +"problem{ph3}, it found a useful hypothesis about how long those temporary " +"values needed to stay alive." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:305 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"The function produced temporary results and copied them into animation " +"positions. In C++, a temporary result stays alive until the expression using" +" it finishes. Grouping the real operations into one expression kept those " +"results alive together, so the compiler could no longer reuse the same " +"storage for all of them." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:312 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"One result still shared storage with a value used later for collision " +"checks. Giving that value its own lifetime resolved the remaining overlap. " +"After several targeted experiments, {ph0}a clean rebuild confirmed that the " +"full function matched{ph1}." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:321 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"What interests me is how the discovery and the tests worked together. The " +"lifetime hypothesis gave the agent a new direction; compiler feedback helped" +" it refine that hypothesis into a source arrangement that matched." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:327 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "A different control-flow graph" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:328 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"A second TH09 function shows why that new direction can matter. Here, the " +"obstacle was how several branches shared their final work. " +"{ph0}GPT-6.1-Sol's earlier work{ph1} got parts of the function to match, but" +" the branches still joined up differently from the original." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/reverse-engineering-models/index.html:339 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}GPT-6-Astra changed the surrounding control-flow graph{ph1}. The main " +"paths now led to a shared final update and return. In that source structure," +" the compiler combined the branches in the same way as the original. The " +"complete function matched, and a {ph2}separate rebuild check confirmed " +"it{ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:351 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Changing the representation opened a more productive search space.{ph1}" +" Both cases give me a reason to take general model capability seriously: an " +"agent can keep trying local variations for a long time before finding a " +"better way to express the surrounding work." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:360 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"At the same time, the later sessions started with earlier source and " +"recorded failures. That accumulated work was part of their advantage. The " +"history lets us inspect the discoveries and their checks; a controlled " +"comparison would help separate the effect of the model from the experience " +"it inherited." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:367 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"This is where the question becomes interesting to me. Some of the progress " +"came from finding a new representation, while much of the remaining work " +"involved testing source forms against a familiar compiler. How much needs " +"broad reasoning ability, and how much could a model learn through repeated " +"experience with that compiler and code?" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:377 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Why might a specialist do well?" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:378 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Touhou gives us a concrete reason to expect that experience to help. Much of" +" the game code comes from the same author, ZUN, so recurring habits are a " +"reasonable starting assumption. The repositories back that up with useful " +"examples: related loops and helper arrangements have supplied hypotheses " +"across games." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:385 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Those source patterns become more specific when we include the compiler. " +"Under a particular version and set of options, small changes in source can " +"produce repeatable differences in machine code. Some of those differences " +"are surprisingly obscure." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: Supervisor::LoadDat +#. {ph4}: +#: website/public/blog/reverse-engineering-models/index.html:391 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"In TH095, for example, {ph0}even the name used for a local variable could " +"change where VC7.1 stored it{ph1}. Moving the declaration alone did not " +"solve the layout, but an earlier background function had revealed a naming " +"pattern that affected the compiler's choice. That gave us a more promising " +"hypothesis for {ph2}the reconstruction of {ph3}{ph4}." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:405 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Reusing that pattern for the file-size variable produced the required layout" +" without adding storage. The full function then matched." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:410 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"This is the sort of narrow detail a general model may not know when it " +"arrives. A specialist trained on this compiler could encounter many such " +"cases and learn which source variations are worth testing first." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:416 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"The opportunity is especially clear in final matching problems where we " +"already understand the behavior. We are then asking which ordinary source " +"form this compiler turns into the observed instructions. Specialization " +"could help the model propose those forms more efficiently, while the target " +"still determines which hypotheses survive." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:424 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"The useful patterns would have to retain their context, though. TH08 uses an" +" earlier Visual C++ version than TH095 and TH09. TH04 uses a different DOS-" +"era compiler, and its {ph0}player reconstruction{ph1} needed different " +"hypotheses about source patterns and how the compiled code was combined into" +" an executable. Shared authorship gives us a prior, but each target tells us" +" whether it applies. Distinguishing those contexts is part of what a " +"specialist would need to learn." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:440 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Where should that experience live?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:441 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Before deciding to teach those patterns through model training, I would look" +" at the knowledge we already keep in the repository. In the {ph0}previous " +"essay{ph1}, I wrote about it becoming the project's working memory. That " +"memory includes compiler lessons, along with the source and failed " +"experiments that made them useful." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:450 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"By retrieving that record, an agent can start with a known result and " +"inspect how we reached it. It can also avoid alternatives that have already " +"failed in the same context. The starting point improves without changing the" +" model's weights." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:456 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"When reconstructing TH09's enemy-spawn function, a {ph0}GPT-6-Luna-max " +"session{ph1} drew a hypothesis from TH08's corresponding source family. That" +" earlier source suggested how to structure the loop and handle failures " +"within it. TH09's own evidence supplied the game-specific details, and clean" +" rebuilds confirmed the complete match." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:467 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}\"The model did not know that compiler quirk\" and \"the model could " +"not use it\" are different problems.{ph1} Retrieval may solve the first, but" +" turning that fact into a useful candidate still takes work. And if the " +"candidate fails, the model must decide what the result means for its next " +"attempt. Knowing the relevant pattern is only the beginning of that process." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:477 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"For that reason, I would include a smaller general model with good retrieval" +" in any comparison. Giving it the same library of experience would help us " +"identify what training adds: better candidate generation, better decisions " +"after feedback, or both." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:485 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Learning the next useful experiment" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:486 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Those decisions after feedback are what I would most like to study. In " +"agentic reconstruction, the model proposes an explanation and tests it " +"against the program. Even when the candidate fails, the result can narrow " +"the remaining possibilities and suggest a more useful next experiment." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:493 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Consider the temporary-results example again. Its final source shows the " +"arrangement that worked, but the route to that source contains more " +"information. Each of the following experiments helped identify what still " +"needed to change." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:506 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Experiment" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:507 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "What its result taught us" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:512 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Try a different way to copy the results" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:513 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "The copy code changes, but the function still differs." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:518 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Use the returned values directly" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:519 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Copying follows the original pattern, but temporary storage still differs." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:525 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Keep the temporary results alive together" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:526 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"They get separate storage, but one still overlaps a value used later for " +"collision checks." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:532 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Keep the collision-check value separate" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:533 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "A clean rebuild confirms the complete match." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:538 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Selected experiments from the attack-function reconstruction above, grouped " +"by what they taught us." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:542 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"A training record that keeps this sequence can teach more than the final " +"source alone. It connects each proposed change to an observed result and the" +" next decision. Keeping ineffective variations matters too: they tell a " +"later agent which hypotheses have already been tested in that context." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:549 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}I would want the model to learn how to use feedback.{ph1} A neutral " +"result is a reason to reconsider the variation; a changed mismatch may point" +" to another cause. When local edits stop being informative, the agent should" +" be able to revisit the source representation or inspect the evidence again." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:558 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Learning to make those choices requires autonomy. Sometimes the useful next " +"step is inspecting another caller rather than compiling another edit. A " +"rigid sequence of required rewrites would remove that choice, along with " +"part of the behavior we want the model to learn." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:567 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Why RE is interesting for reinforcement learning" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:568 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Bounded reconstruction gives us a practical environment for studying these " +"choices. Once the target and compiler are pinned, many source experiments " +"produce quick, repeatable feedback. The agent can compile a candidate, " +"inspect the mismatch and use that observation to choose its next step." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:575 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Reinforcement learning could train that decision-making process through the " +"feedback it receives. A candidate accepted by a defined check gives us a " +"concrete outcome, while the sequence of attempts lets us observe how much " +"work it took to reach it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/reverse-engineering-models/index.html:581 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"There is already research supporting this direction. {ph0}LLM4Decompile{ph1}" +" studies models specialized for decompilation. {ph2}AutoDecompiler{ph3} " +"trains multi-turn refinement using compiler and execution feedback. Their " +"studies focus on functional recovery. For this work, I would use them as a " +"starting point for the related task of finding source that matches a " +"historical compiler's output." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:593 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"To reach such a well-defined task, though, we may first need to establish " +"what a function owns or devise a new runtime measurement. In TH08, for " +"example, a {ph0}collision difference led back to how the original program " +"handled floating-point calculations{ph1}. Before the agent could test a " +"useful correction, it had to work out what to measure." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:604 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"This suggests another role for a broadly capable model: helping make the " +"problem checkable in the first place. Once that check exists, we can " +"investigate how far a learned search policy can get with it." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:612 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "When the oracle is wrong" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:613 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Once we train against that check, its coverage becomes part of what the " +"model learns. I call the reference or checker an oracle. Even if it gives a " +"repeatable answer, we still need to understand what that answer covers." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:619 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"TH08 showed how much can hide outside that coverage. Some reconstructed " +"functions passed their exact comparisons with wrong floating constants. The " +"comparator adjusted relocated addresses before checking instructions, but it" +" checked the values behind those addresses only when they had been " +"explicitly recorded for verification. Other literal references could pass " +"without their values being examined." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 1.0f +#. {ph3}: 32.0f +#: website/public/blog/reverse-engineering-models/index.html:628 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"To close that gap, a {ph0}wider audit{ph1} found incorrect constants in " +"functions that had already been accepted. In one calculation, the " +"reconstructed source added {ph2} where the original added {ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:638 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}A learner rewarded by the old check could learn to produce the wrong " +"reconstruction.{ph1} We had not trained an RL model against this oracle; the" +" observed failure was in the check itself. But using that check as a reward " +"would have made the same blind spot part of the learning environment." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:648 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"A functional test can have a similar blind spot. {ph0}Differential-fuzzing " +"research on LLM decompilers{ph1} has found behavior differences beyond the " +"supplied tests. Passing those tests therefore needs to be read in terms of " +"the cases they exercise, just as an instruction match needs to be read in " +"terms of the bytes and data it checks." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:658 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Before using either kind of check as a reward, I would test it with " +"deliberate failures. I would also keep final acceptance outside the " +"candidate's editable source, so the model has to satisfy the check through " +"its reconstruction. Otherwise, something like a byte array copied from the " +"target could satisfy a naive score without recovering useful source." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:666 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Improving the learner and improving its oracle belong to the same " +"research problem.{ph1} As the learner gets better at optimizing the feedback" +" we give it, understanding that feedback becomes more important too." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:676 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "A comparison worth running" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:677 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"With those checks in place, I would start the comparison on a fixed VC7.1 " +"task family. First, I would establish baselines for a strong general model " +"and a smaller one. Adding repository knowledge to the smaller model would " +"show what retrieval changes. From there, supervised specialization and an " +"RL-trained version would let us examine what training adds." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:685 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"To make those comparisons informative, each model would receive the same " +"target evidence and tools. For the training-specific comparisons, I would " +"keep the base model and available knowledge fixed as well. Repeated trials " +"would help distinguish a reliable search strategy from a lucky candidate." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:692 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"I would then separate two starting conditions: reconstructing a function " +"from its instructions, and closing the last few differences in maintained " +"source. A specialist might be excellent at the second task while a general " +"model does much of the work needed to reach it. Measuring them separately " +"would reveal that division of work." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:700 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Both tasks need genuinely held-out examples. Because related Touhou games " +"share engine code, holding out a game's name would still allow nearly " +"identical functions to appear in training. I would instead hold out source " +"families and keep their accepted answers out of both training and retrieval." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:707 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"On those examples, the outcome would be complete, independently validated " +"matches. Giving each model the same candidate or compile budget would help " +"compare search quality. Measuring elapsed time and total cost, including " +"compilation, would tell us whether that quality produces an efficient " +"workflow. Training costs would need their own accounting too." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:715 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Both views matter because a cheaper proposal can become an expensive " +"workflow if it causes more uninformative compiles. Conversely, a slower " +"model may pay for itself by finding a useful experiment sooner. The " +"comparison should capture those costs." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:721 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"Counting accepted results also keeps intermediate progress in perspective. " +"One TH09 {ph0}replay-save candidate{ph1} looked promising because the " +"compiled function had the expected size, but a full comparison still found " +"substantial differences. Changes in how the compiler arranges instructions " +"can also make a candidate look closer without resolving the underlying " +"problem. Such diagnostics can guide the next experiment, but I would " +"validate any reward for \"getting closer\" against the full acceptance " +"check." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:736 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"I would be interested in the pattern across these results. If a specialist " +"does well within a familiar compiler family, does that advantage survive a " +"toolchain change? And once both models have good retrieval, how much does " +"training still add? The answers would help us decide where each kind of " +"model is most useful." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:745 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "What kind of agent does this suggest?" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:746 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"If the models turn out to help at different stages, a useful arrangement " +"might be a broad agent with access to a specialist. Once a task becomes a " +"familiar compiler search, it could ask the specialist for candidates. If the" +" results stop making sense, the broader agent could return to the target " +"evidence or investigate the measurement itself." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:754 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"In that arrangement, specialization becomes a tool the agent can choose as " +"the investigation develops. The agent keeps the freedom to change direction " +"that made the earlier breakthroughs possible." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:759 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"This follows naturally from the industrial shift I described in the previous" +" essay. Being able to run many more experiments changes how we organize the " +"work. It also gives us a reason to ask which decisions need broad judgment " +"and which improve through repeated experience with a particular craft." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:766 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"For now, the strongest general model has earned its place in my workflow by " +"opening problems I had left unresolved. Those successes are what make me " +"want to examine the work more closely: how much depended on the model's " +"breadth, and how much could be handled by a model trained in this particular" +" kind of reconstruction?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:774 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}The repositories give us a way to test the question.{ph1} I would like " +"to use that record to build the comparison and see what we learn." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:784 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Evidence and model attribution" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/reverse-engineering-models/index.html:785 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Detailed evidence notes{ph1} include the recorded comparisons and " +"experiment context." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:792 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"The examples describe historical function-level comparisons recorded in the " +"linked commits. Whole-game runtime checks are separate milestones. Source " +"and matching records were reviewed on 13 October 2026." +msgstr "" + +#. {ph0}: gpt-dots +#. {ph1}: gpt-web +#: website/public/blog/reverse-engineering-models/index.html:798 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"The TH09 label {ph0} identifies GPT-6-Astra. {ph1} changed with the model " +"used at the time, so that label alone does not identify an individual run. " +"Explicit model names in the other cited commits establish their recorded " +"attribution; the histories do not contain uniform per-run cost or effort " +"measurements." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/reverse-engineering-models/index.html:807 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}TH09 temporary lifetimes:{ph1} the {ph2}earlier context review{ph3} and" +" {ph4}complete cold reconstruction{ph5}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/reverse-engineering-models/index.html:819 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}TH09 Front callback:{ph1} {ph2}non-exact diagnostic regions{ph3}, " +"{ph4}Astra's new graph{ph5} and its {ph6}accepted recompile replay{ph7}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/reverse-engineering-models/index.html:835 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Compiler knowledge:{ph1} {ph2}TH095 identifier-bucket reuse{ph3}, " +"{ph4}TH04 player source and linker order{ph5} and {ph6}Luna's TH09 enemy-" +"spawn closure{ph7}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/reverse-engineering-models/index.html:851 +#, python-brace-format +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"{ph0}Checks and diagnostics:{ph1} {ph2}TH08 floating-literal audit{ph3}, " +"{ph4}TH08 numerical investigation{ph5} and {ph6}TH09 replay-save " +"reconstruction{ph7}." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:868 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"The proposed specialist and RL comparisons are future experiments. The " +"project histories motivate them; no trained specialist was evaluated for " +"this essay." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:6 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Does reverse engineering need a bigger model? | REA" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:7 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "" +"What Touhou reconstruction taught me about general models, specialist models" +" and learning to propose better hypotheses from compiler feedback." +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:249 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "On this page" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:262 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Models and reverse engineering essay" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:500 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Selected reconstruction experiments" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:894 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:113 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:203 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:207 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:208 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:209 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:211 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:213 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:218 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:223 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:228 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:233 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:245 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:246 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:334 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:335 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:336 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:339 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:340 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:341 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:344 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:346 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:348 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:351 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:354 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:367 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:374 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:376 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:377 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:378 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:379 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:380 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:381 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:384 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:385 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:390 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:391 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:411 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:427 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:428 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:437 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:442 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:447 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:454 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:462 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:463 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:467 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:473 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:480 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:486 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:499 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:510 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:515 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:519 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:527 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:536 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:544 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:545 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:562 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:571 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:578 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:583 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:590 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:596 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:604 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:610 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:629 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:637 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:644 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:650 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:657 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:669 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:677 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:686 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:695 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:701 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:707 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:715 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:721 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:726 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:739 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:740 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:744 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:750 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:758 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:765 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:767 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:774 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:781 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:790 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:805 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:812 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:819 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:830 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:840 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:847 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:854 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:861 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:868 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:875 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:888 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:898 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:904 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:914 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:922 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:923 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:936 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:943 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:951 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:952 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:960 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:983 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1006 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:1015 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1029 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1041 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1050 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1065 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:359 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:373 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:388 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:1091 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/contributors/index.html:114 +msgctxt "page:contributors/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/contributors/index.html:204 +#, python-brace-format +msgctxt "page:contributors/index.html" +msgid "{ph0}Home{ph1} / Contributors" +msgstr "" + +#: website/public/contributors/index.html:205 +msgctxt "page:contributors/index.html" +msgid "Built together." +msgstr "" + +#: website/public/contributors/index.html:206 +msgctxt "page:contributors/index.html" +msgid "Thank you to everyone who helps make REA better." +msgstr "" + +#: website/public/contributors/index.html:207 +msgctxt "page:contributors/index.html" +msgid "" +"Code, documentation, tests, translations and ideas — there are many ways to " +"contribute." +msgstr "" + +#: website/public/contributors/index.html:212 +msgctxt "page:contributors/index.html" +msgid "How to contribute" +msgstr "" + +#: website/public/contributors/index.html:217 +msgctxt "page:contributors/index.html" +msgid "Join the conversation →" +msgstr "" + +#: website/public/contributors/index.html:227 +msgctxt "page:contributors/index.html" +msgid "Contributors" +msgstr "" + +#: website/public/contributors/index.html:229 +msgctxt "page:contributors/index.html" +msgid "Find a contributor" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/contributors/index.html:1116 +#, python-brace-format +msgctxt "page:contributors/index.html" +msgid "From {ph0}GitHub’s contributor list{ph1} · Updated {ph2}." +msgstr "" + +#: website/public/contributors/index.html:1121 +msgctxt "page:contributors/index.html" +msgid "No matching contributors. Try another username." +msgstr "" + +#: website/public/contributors/index.html:6 +msgctxt "page:contributors/index.html" +msgid "Contributors · REA" +msgstr "" + +#: website/public/contributors/index.html:7 +msgctxt "page:contributors/index.html" +msgid "" +"Meet the people who contribute code, documentation, tests and ideas to REA." +msgstr "" + +#: website/public/contributors/index.html:230 +msgctxt "page:contributors/index.html" +msgid "GitHub username" +msgstr "" + +#: website/public/contributors/index.html:1142 +msgctxt "page:contributors/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/examples/dino-lab/index.html:114 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:204 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "" + +#: website/public/examples/dino-lab/index.html:208 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:209 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" + +#: website/public/examples/dino-lab/index.html:218 +#: website/public/examples/dino-lab/index.html:217 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:220 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:221 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:222 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:223 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "" + +#: website/public/examples/dino-lab/index.html:228 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "" + +#: website/public/examples/dino-lab/index.html:229 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "" + +#: website/public/examples/dino-lab/index.html:267 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "" + +#: website/public/examples/dino-lab/index.html:270 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "" + +#: website/public/examples/dino-lab/index.html:271 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "" + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "" + +#: website/public/examples/dino-lab/index.html:284 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "" + +#: website/public/examples/dino-lab/index.html:288 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "" + +#: website/public/examples/dino-lab/index.html:291 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" + +#: website/public/examples/dino-lab/index.html:296 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:305 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" + +#: website/public/examples/dino-lab/index.html:315 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:321 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" + +#: website/public/examples/dino-lab/index.html:326 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "" + +#: website/public/examples/dino-lab/index.html:332 +#: website/public/examples/dino-lab/index.html:431 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "" + +#: website/public/examples/dino-lab/index.html:345 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:351 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "" + +#: website/public/examples/dino-lab/index.html:359 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "" + +#: website/public/examples/dino-lab/index.html:360 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" + +#: website/public/examples/dino-lab/index.html:369 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "" + +#: website/public/examples/dino-lab/index.html:370 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "" + +#: website/public/examples/dino-lab/index.html:371 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "" + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "" + +#: website/public/examples/dino-lab/index.html:401 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" + +#: website/public/examples/dino-lab/index.html:407 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:409 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:413 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" + +#: website/public/examples/dino-lab/index.html:420 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:440 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:449 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:456 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" + +#: website/public/examples/dino-lab/index.html:226 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "" + +#: website/public/examples/dino-lab/index.html:257 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" + +#: website/public/examples/dino-lab/index.html:332 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "" + +#: website/public/examples/dino-lab/index.html:431 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "" + +#: website/public/examples/dino-lab/index.html:486 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/faq/index.html:113 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:203 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "" + +#: website/public/faq/index.html:205 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "" + +#: website/public/faq/index.html:209 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:211 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:212 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:213 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:214 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "" + +#: website/public/faq/index.html:223 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "" + +#: website/public/faq/index.html:226 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "" + +#. {ph0}: Node.js +#: website/public/faq/index.html:227 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "" + +#: website/public/faq/index.html:235 website/public/faq/index.html:276 +#: website/public/faq/index.html:294 website/public/faq/index.html:378 +#: website/public/faq/index.html:425 website/public/faq/index.html:465 +#: website/public/faq/index.html:485 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:246 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" + +#: website/public/faq/index.html:255 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "" + +#: website/public/faq/index.html:256 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:263 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "" + +#: website/public/faq/index.html:268 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "" + +#: website/public/faq/index.html:269 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" + +#: website/public/faq/index.html:275 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "" + +#. {ph0}: npx +#: website/public/faq/index.html:287 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" + +#: website/public/faq/index.html:293 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "" + +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:305 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" + +#: website/public/faq/index.html:313 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" + +#: website/public/faq/index.html:327 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "" + +#: website/public/faq/index.html:330 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "" + +#: website/public/faq/index.html:331 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:333 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:338 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:343 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:348 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "" + +#: website/public/faq/index.html:357 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:362 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" + +#: website/public/faq/index.html:370 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "" + +#: website/public/faq/index.html:371 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" + +#: website/public/faq/index.html:377 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:390 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" + +#: website/public/faq/index.html:397 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "" + +#: website/public/faq/index.html:398 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:403 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" + +#: website/public/faq/index.html:414 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "" + +#: website/public/faq/index.html:415 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" + +#. {ph0}: +#: website/public/faq/index.html:421 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:434 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:444 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" + +#: website/public/faq/index.html:454 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "" + +#: website/public/faq/index.html:457 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "" + +#. {ph0}: doctor +#: website/public/faq/index.html:458 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" + +#: website/public/faq/index.html:464 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:476 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" + +#: website/public/faq/index.html:484 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:496 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" + +#: website/public/faq/index.html:504 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:505 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:515 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:519 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" + +#: website/public/faq/index.html:533 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "" + +#: website/public/faq/index.html:536 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "" + +#: website/public/faq/index.html:537 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" + +#: website/public/faq/index.html:544 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:545 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:557 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" + +#: website/public/faq/index.html:208 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "" + +#: website/public/faq/index.html:217 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "" + +#: website/public/faq/index.html:235 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "" + +#: website/public/faq/index.html:276 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "" + +#: website/public/faq/index.html:294 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "" + +#: website/public/faq/index.html:378 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "" + +#: website/public/faq/index.html:425 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "" + +#: website/public/faq/index.html:465 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "" + +#: website/public/faq/index.html:485 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "" + +#: website/public/faq/index.html:584 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/first-investigation/index.html:113 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:203 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "" + +#. {ph0}:
+#: website/public/first-investigation/index.html:206 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:211 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "" + +#: website/public/first-investigation/index.html:218 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:220 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:221 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:222 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:223 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:224 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "" + +#: website/public/first-investigation/index.html:229 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" + +#. {ph0}: +#: website/public/first-investigation/index.html:238 +#: website/public/first-investigation/index.html:288 +#: website/public/first-investigation/index.html:410 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:265 +#: website/public/first-investigation/index.html:293 +#: website/public/first-investigation/index.html:415 +#: website/public/first-investigation/index.html:456 +#: website/public/first-investigation/index.html:473 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:252 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/first-investigation/index.html:262 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "" + +#: website/public/first-investigation/index.html:274 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" + +#: website/public/first-investigation/index.html:280 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:281 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:302 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" + +#: website/public/first-investigation/index.html:316 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:320 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:328 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" + +#: website/public/first-investigation/index.html:335 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "" + +#: website/public/first-investigation/index.html:336 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:338 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" + +#: website/public/first-investigation/index.html:346 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "" + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:348 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:356 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:364 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" + +#: website/public/first-investigation/index.html:375 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:382 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "" + +#: website/public/first-investigation/index.html:383 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "" + +#: website/public/first-investigation/index.html:391 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:396 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" + +#: website/public/first-investigation/index.html:403 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "" + +#: website/public/first-investigation/index.html:404 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:424 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" + +#: website/public/first-investigation/index.html:437 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:442 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" + +#: website/public/first-investigation/index.html:448 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:449 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "" + +#: website/public/first-investigation/index.html:490 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "" + +#: website/public/first-investigation/index.html:491 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "" + +#: website/public/first-investigation/index.html:493 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" + +#: website/public/first-investigation/index.html:498 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:503 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:509 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:517 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" + +#: website/public/first-investigation/index.html:217 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "" + +#: website/public/first-investigation/index.html:227 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "" + +#: website/public/first-investigation/index.html:265 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "" + +#: website/public/first-investigation/index.html:293 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "" + +#: website/public/first-investigation/index.html:456 +#: website/public/first-investigation/index.html:473 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "" + +#: website/public/first-investigation/index.html:545 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/get-started/index.html:113 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:203 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "" + +#: website/public/get-started/index.html:204 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "" + +#: website/public/get-started/index.html:205 +msgctxt "page:get-started/index.html" +msgid "" +"Set up your computer and coding agent, connect REA, then investigate a small" +" app." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:209 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"New to this? Follow the four steps below. Already have an agent? Go straight" +" to {ph0}Connect REA{ph1}." +msgstr "" + +#: website/public/get-started/index.html:216 +#: website/public/get-started/index.html:215 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:218 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}1. Prepare your computer{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:219 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}2. Choose an agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:220 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}3. Connect REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:221 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}4. Try an investigation{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:222 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Other targets and providers{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:223 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:224 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "" + +#: website/public/get-started/index.html:229 +msgctxt "page:get-started/index.html" +msgid "1. Prepare your computer" +msgstr "" + +#: website/public/get-started/index.html:230 +msgctxt "page:get-started/index.html" +msgid "" +"Use the computer where your target files are stored. A local coding agent " +"can read those files and run tools for you." +msgstr "" + +#: website/public/get-started/index.html:235 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:237 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:241 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:245 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:250 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "" +"Commands go in the terminal. Prompts labeled “Your coding agent” go in the " +"agent's chat." +msgstr "" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:260 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.23.4+), 24 (24.22.1+) or 26+ (>=26.12.1). npm comes" +" with {ph1}." +msgstr "" + +#. {ph0}: Node.js +#: website/public/get-started/index.html:266 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "" + +#: website/public/get-started/index.html:269 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "" + +#: website/public/get-started/index.html:272 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "" + +#: website/public/get-started/index.html:273 +#: website/public/get-started/index.html:296 +#: website/public/get-started/index.html:326 +#: website/public/get-started/index.html:351 +#: website/public/get-started/index.html:374 +#: website/public/get-started/index.html:389 +#: website/public/get-started/index.html:423 +#: website/public/get-started/index.html:454 +#: website/public/get-started/index.html:468 +#: website/public/get-started/index.html:486 +#: website/public/get-started/index.html:538 +#: website/public/get-started/index.html:552 +#: website/public/get-started/index.html:584 +#: website/public/get-started/index.html:613 +#: website/public/get-started/index.html:779 +#: website/public/get-started/index.html:809 +#: website/public/get-started/index.html:834 +#: website/public/get-started/index.html:849 +#: website/public/get-started/index.html:897 +#: website/public/get-started/index.html:930 +#: website/public/get-started/index.html:1085 +#: website/public/get-started/index.html:1147 +#: website/public/get-started/index.html:1170 +#: website/public/get-started/index.html:1194 +#: website/public/get-started/index.html:1242 +#: website/public/get-started/index.html:1317 +#: website/public/get-started/index.html:1343 +#: website/public/get-started/index.html:1360 +#: website/public/get-started/index.html:1603 +#: website/public/get-started/index.html:1662 +#: website/public/get-started/index.html:1681 +#: website/public/get-started/index.html:1703 +#: website/public/get-started/index.html:1746 +#: website/public/get-started/index.html:1776 +#: website/public/get-started/index.html:1797 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:285 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.23.4+, v24.22.1+ or v26.12.1+, you're ready. If it " +"prints an older version or \"not recognized\" / \"command not found\", " +"install {ph1} 24 LTS:" +msgstr "" + +#. {ph0}: node -v +#: website/public/get-started/index.html:307 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:311 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Download the Node.js installer{ph1} if winget is unavailable." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#. {ph3}: npx.cmd +#. {ph4}: npm.cmd +#: website/public/get-started/index.html:317 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, use {ph3} instead. For npm, use {ph4}:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"For a first installation, download the {ph0}Node.js 24 LTS macOS installer " +"(.pkg){ph1}, open it and follow the installer. Then reopen Terminal." +msgstr "" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "Already use Homebrew?" +msgstr "" + +#. {ph0}: sudo apt install curl unzip +#: website/public/get-started/index.html:366 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Install curl and unzip first if they are missing. On Debian or Ubuntu, run " +"{ph0}; on other distributions, use your package manager." +msgstr "" + +#: website/public/get-started/index.html:385 +msgctxt "page:get-started/index.html" +msgid "Close the terminal, open it again, then:" +msgstr "" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:402 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.23.4, so check " +"{ph1} if you use it instead." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:408 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" + +#: website/public/get-started/index.html:415 +msgctxt "page:get-started/index.html" +msgid "Make a working folder for your agent" +msgstr "" + +#: website/public/get-started/index.html:416 +msgctxt "page:get-started/index.html" +msgid "In your terminal, make a folder for the exercise, then move into it:" +msgstr "" + +#: website/public/get-started/index.html:435 +msgctxt "page:get-started/index.html" +msgid "" +"Keep this terminal open for the next step. If you already have a working " +"folder, open it instead." +msgstr "" + +#: website/public/get-started/index.html:442 +msgctxt "page:get-started/index.html" +msgid "2. Choose a coding agent" +msgstr "" + +#: website/public/get-started/index.html:443 +msgctxt "page:get-started/index.html" +msgid "" +"Your agent is the AI you talk to. REA supplies the inspection tools it uses." +" Pick one client below; open its instructions if you haven't used it before." +msgstr "" + +#: website/public/get-started/index.html:449 +msgctxt "page:get-started/index.html" +msgid "Codex · use your ChatGPT account" +msgstr "" + +#: website/public/get-started/index.html:450 +msgctxt "page:get-started/index.html" +msgid "Install Codex using the command for your operating system:" +msgstr "" + +#: website/public/get-started/index.html:479 +msgctxt "page:get-started/index.html" +msgid "" +"After installation, reopen your terminal and return to the working folder. " +"Then start Codex:" +msgstr "" + +#: website/public/get-started/index.html:497 +msgctxt "page:get-started/index.html" +msgid "" +"Choose “Sign in with ChatGPT”, complete the browser sign-in, then return to " +"the terminal. When the message box appears, continue to step 3." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:502 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Codex installation and sign-in{ph1}" +msgstr "" + +#: website/public/get-started/index.html:509 +msgctxt "page:get-started/index.html" +msgid "Cursor, Windsurf or VS Code · use an editor" +msgstr "" + +#: website/public/get-started/index.html:511 +msgctxt "page:get-started/index.html" +msgid "Install the editor for your operating system and sign in." +msgstr "" + +#: website/public/get-started/index.html:514 +msgctxt "page:get-started/index.html" +msgid "Open the rea-work folder you made in step 1." +msgstr "" + +#: website/public/get-started/index.html:515 +msgctxt "page:get-started/index.html" +msgid "" +"Open its AI chat and choose Agent mode. In Windsurf or Devin Desktop, open " +"the agent chat; in VS Code, set up GitHub Copilot first." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:521 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Cursor setup{ph1} · {ph2}Windsurf / Devin Desktop setup{ph3} · {ph4}VS " +"Code and Copilot setup{ph5}" +msgstr "" + +#: website/public/get-started/index.html:533 +msgctxt "page:get-started/index.html" +msgid "Claude Code · use your Claude account" +msgstr "" + +#: website/public/get-started/index.html:534 +msgctxt "page:get-started/index.html" +msgid "Install using the command for your operating system:" +msgstr "" + +#. {ph0}: claude +#: website/public/get-started/index.html:563 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Reopen your terminal, return to your working folder and run {ph0}. Follow " +"the sign-in prompts. Access uses an eligible Claude subscription or a " +"configured API account." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:568 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Claude Code installation and account options{ph1}" +msgstr "" + +#: website/public/get-started/index.html:575 +msgctxt "page:get-started/index.html" +msgid "Claude Desktop · use a desktop chat" +msgstr "" + +#: website/public/get-started/index.html:576 +msgctxt "page:get-started/index.html" +msgid "" +"Install Claude Desktop on Windows or macOS and sign in. Quit it completely, " +"then run this command in a terminal you opened outside Claude:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:595 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Review and approve the plan, reopen Claude, then {ph0}check the connection " +"in step 3{ph1}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:599 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Download Claude Desktop{ph1} · {ph2}Claude Desktop connection " +"details{ph3}" +msgstr "" + +#: website/public/get-started/index.html:609 +msgctxt "page:get-started/index.html" +msgid "OpenCode · choose an AI model" +msgstr "" + +#. {ph0}: opencode +#. {ph1}: /connect +#: website/public/get-started/index.html:624 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Run {ph0} in your working folder. Use {ph1} in its chat to connect your " +"model account, then select a model." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:629 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}OpenCode installation and model setup{ph1}" +msgstr "" + +#: website/public/get-started/index.html:636 +msgctxt "page:get-started/index.html" +msgid "All supported clients and setup IDs" +msgstr "" + +#. {ph0}: --client +#: website/public/get-started/index.html:637 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Use the ID with {ph0} when choosing a client explicitly. These clients are " +"supported in npm 6.8.0 and later." +msgstr "" + +#: website/public/get-started/index.html:645 +msgctxt "page:get-started/index.html" +msgid "Client" +msgstr "" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "Setup ID" +msgstr "" + +#. {ph0}: droid +#. {ph1}: dsh +#. {ph2}: kimi +#. {ph3}: qoder +#. {ph4}: trae +#. {ph5}: workbuddy +#. {ph6}: zcode +#. {ph7}: freebuff +#: website/public/get-started/index.html:753 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}, {ph1}, {ph2}, {ph3}, {ph4}, {ph5} and {ph6} require npm 6.5.0 or " +"later. {ph7} requires npm 6.8.0 or later." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:759 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Client configuration and troubleshooting{ph1} · {ph2}Release " +"availability{ph3}" +msgstr "" + +#: website/public/get-started/index.html:771 +msgctxt "page:get-started/index.html" +msgid "Grok Bot · connect on its hosted computer" +msgstr "" + +#. {ph0}: rea +#: website/public/get-started/index.html:772 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"In Grok Bot's chat, ask it to add a custom MCP server named {ph0} using this" +" command on the Bot's computer:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:790 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Grok Bot connector instructions{ph1}" +msgstr "" + +#: website/public/get-started/index.html:800 +msgctxt "page:get-started/index.html" +msgid "3. Connect REA" +msgstr "" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Copy this into your coding agent:" +msgstr "" + +#. {ph0}: +#: website/public/get-started/index.html:804 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:818 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/get-started/index.html:830 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "" + +#: website/public/get-started/index.html:845 +msgctxt "page:get-started/index.html" +msgid "For one specific client, add its setup ID:" +msgstr "" + +#. {ph0}: y +#: website/public/get-started/index.html:860 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If npm asks to download the package, type {ph0} and press Enter. In REA's " +"client list, use the arrow keys to move, Space to select your client and " +"Enter to continue." +msgstr "" + +#: website/public/get-started/index.html:866 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" + +#: website/public/get-started/index.html:871 +msgctxt "page:get-started/index.html" +msgid "" +"MCP is the connection that lets your agent call REA. The skill gives it a " +"workflow for investigating software." +msgstr "" + +#: website/public/get-started/index.html:875 +msgctxt "page:get-started/index.html" +msgid "" +"For the first exercise, you can skip the optional Hopper installation. " +"Restart your client when setup finishes." +msgstr "" + +#: website/public/get-started/index.html:880 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:881 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:888 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" + +#. {ph0}: codex +#. {ph1}: "healthy": true +#: website/public/get-started/index.html:908 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace {ph0} with your client's setup ID. A successful check reports {ph1}." +" Then ask your agent:" +msgstr "" + +#: website/public/get-started/index.html:914 +msgctxt "page:get-started/index.html" +msgid "Check that REA is connected and show me which REA tools you can use." +msgstr "" + +#: website/public/get-started/index.html:921 +msgctxt "page:get-started/index.html" +msgid "4. Try your first investigation" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:922 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" + +#: website/public/get-started/index.html:929 +msgctxt "page:get-started/index.html" +msgid "Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/get-started/index.html:939 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" + +#: website/public/get-started/index.html:953 +msgctxt "page:get-started/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/get-started/index.html:955 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:962 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Check a prediction in the guided exercise →{ph1}" +msgstr "" + +#: website/public/get-started/index.html:968 +msgctxt "page:get-started/index.html" +msgid "Download the example yourself, or use your own app" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:971 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "" + +#. {ph0}: notes-example +#: website/public/get-started/index.html:979 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:985 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Use REA to inspect the app at {ph0}. Find how it exports data and show the " +"relevant files and lines." +msgstr "" + +#: website/public/get-started/index.html:992 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:994 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:999 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1003 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" + +#: website/public/get-started/index.html:1008 +#: website/public/get-started/index.html:1769 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" + +#: website/public/get-started/index.html:1015 +msgctxt "page:get-started/index.html" +msgid "Analyze another kind of software" +msgstr "" + +#: website/public/get-started/index.html:1016 +msgctxt "page:get-started/index.html" +msgid "" +"Choose the section for your target. A provider is the local analysis tool " +"REA uses for that kind of software." +msgstr "" + +#: website/public/get-started/index.html:1021 +msgctxt "page:get-started/index.html" +msgid "Native executables and libraries · Hopper, Ghidra or IDA" +msgstr "" + +#: website/public/get-started/index.html:1024 +msgctxt "page:get-started/index.html" +msgid "" +"Install one analysis tool on the computer running REA. The host is your " +"operating system; the target is the program you want to inspect." +msgstr "" + +#: website/public/get-started/index.html:1033 +msgctxt "page:get-started/index.html" +msgid "Provider" +msgstr "" + +#: website/public/get-started/index.html:1042 +msgctxt "page:get-started/index.html" +msgid "Unavailable" +msgstr "" + +#: website/public/get-started/index.html:1044 +msgctxt "page:get-started/index.html" +msgid "x86_64 installer on supported distributions" +msgstr "" + +#: website/public/get-started/index.html:1048 +msgctxt "page:get-started/index.html" +msgid "x64 · experimental" +msgstr "" + +#: website/public/get-started/index.html:1054 +msgctxt "page:get-started/index.html" +msgid "Verified profiles" +msgstr "" + +#: website/public/get-started/index.html:1055 +msgctxt "page:get-started/index.html" +msgid "Verified headless profile" +msgstr "" + +#: website/public/get-started/index.html:1056 +msgctxt "page:get-started/index.html" +msgid "See provider guide" +msgstr "" + +#: website/public/get-started/index.html:1062 +msgctxt "page:get-started/index.html" +msgid "Hopper · let setup install or connect it" +msgstr "" + +#: website/public/get-started/index.html:1063 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" + +#: website/public/get-started/index.html:1068 +msgctxt "page:get-started/index.html" +msgid "" +"Choose Hopper in setup and review its separate installation plan. On macOS, " +"choose demo mode or activate your license when Hopper first opens. On Linux," +" setup prepares the supported demo and its private display." +msgstr "" + +#: website/public/get-started/index.html:1074 +msgctxt "page:get-started/index.html" +msgid "" +"Automated Linux setup requires an x86_64 host running Ubuntu 24.04+, Fedora " +"41+, Nobara 44+, Arch Linux, CachyOS or Omarchy. An existing Hopper launcher" +" can also be configured on other supported Linux distributions. On Linux " +"arm64, use Ghidra. Hopper is commercial software; its demo has vendor-" +"defined limits." +msgstr "" + +#: website/public/get-started/index.html:1096 +msgctxt "page:get-started/index.html" +msgid "" +"If macOS asks for Automation permission, allow the app that starts REA in " +"System Settings → Privacy & Security → Automation, then retry." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1101 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Hopper setup and troubleshooting{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1109 +msgctxt "page:get-started/index.html" +msgid "Ghidra · install the free analysis tool and Java" +msgstr "" + +#: website/public/get-started/index.html:1113 +msgctxt "page:get-started/index.html" +msgid "" +"Install a 64-bit JDK 21 or newer, including the Java compiler. Choose the " +"package matching your computer's architecture." +msgstr "" + +#. {ph0}: ghidra_…_PUBLIC_….zip +#: website/public/get-started/index.html:1118 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Download Ghidra 12.1.4 from the release's Assets list and extract the {ph0} " +"archive. Choose the release archive, not “Source code”." +msgstr "" + +#. {ph0}: ghidraRun +#. {ph1}: ghidraRun.bat +#. {ph2}: GHIDRA_INSTALL_DIR +#: website/public/get-started/index.html:1123 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Find the extracted folder containing {ph0} or {ph1}. Use that folder for " +"{ph2}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:1129 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Download a JDK{ph1} · {ph2}Download Ghidra 12.1.4{ph3}" +msgstr "" + +#. {ph0}: java.home +#. {ph1}: JAVA_HOME +#: website/public/get-started/index.html:1139 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Check Java. The first command prints {ph0}; use that folder for {ph1}. The " +"second confirms the compiler is installed:" +msgstr "" + +#: website/public/get-started/index.html:1160 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "" + +#: website/public/get-started/index.html:1161 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" + +#: website/public/get-started/index.html:1184 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" + +#: website/public/get-started/index.html:1190 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "" + +#: website/public/get-started/index.html:1206 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. For a fresh macOS or " +"Linux arm64 installation, build the native decompiler for your computer " +"before continuing." +msgstr "" + +#: website/public/get-started/index.html:1212 +msgctxt "page:get-started/index.html" +msgid "Build Ghidra's native decompiler" +msgstr "" + +#: website/public/get-started/index.html:1213 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, the build needs Xcode Command Line Tools, make and bison. Use the " +"guide for your computer:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1218 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}macOS · Intel{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1224 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}macOS · Apple Silicon{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1230 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux arm64 · native build instructions{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1238 +msgctxt "page:get-started/index.html" +msgid "Then check Ghidra and save its paths for your client:" +msgstr "" + +#: website/public/get-started/index.html:1255 +msgctxt "page:get-started/index.html" +msgid "" +"Keep these commands in the same terminal session. Rerun setup after setting " +"the paths, approve the updated client configuration, then restart your " +"agent." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:1260 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Ghidra setup and architecture requirements{ph1} · {ph2}Windows Ghidra " +"guide{ph3}" +msgstr "" + +#: website/public/get-started/index.html:1273 +msgctxt "page:get-started/index.html" +msgid "IDA · connect an existing installation" +msgstr "" + +#: website/public/get-started/index.html:1274 +msgctxt "page:get-started/index.html" +msgid "" +"Use the IDA provider guide to prepare an upstream MCP registration. Choose " +"an attached GUI with the original binary open, or a headless supervisor that" +" opens a private database." +msgstr "" + +#: website/public/get-started/index.html:1279 +msgctxt "page:get-started/index.html" +msgid "" +"Verified profiles include the Windows legacy GUI and headless supervisor, " +"plus a macOS arm64 headless supervisor with IDA Professional 9.1. The " +"optional native GUI bridge has its own version and platform requirements." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 6.4.0 +#: website/public/get-started/index.html:1285 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The macOS headless profile and native GUI bridge require a {ph0}REA source " +"build{ph1} or a release containing those changes. npm {ph2} does not include" +" them." +msgstr "" + +#. {ph0}: node scripts/rea.mjs doctor --provider ida --json +#. {ph1}: node scripts/rea.mjs setup +#. {ph2}: npx +#: website/public/get-started/index.html:1294 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"From the built checkout, run {ph0} and {ph1} instead of the {ph2} commands " +"below." +msgstr "" + +#: website/public/get-started/index.html:1301 +msgctxt "page:get-started/index.html" +msgid "Prepare the IDA registration file" +msgstr "" + +#. {ph0}: ida-mcp.json +#. {ph1}: .txt +#: website/public/get-started/index.html:1302 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Install and configure the upstream server using the IDA guide below. Then " +"save its working registration as {ph0} in a text editor. On Windows, choose " +"“All files” when saving in Notepad so it doesn't add {ph1}." +msgstr "" + +#. {ph0}: idb_open +#. {ph1}: idb_list +#. {ph2}: idb_close +#: website/public/get-started/index.html:1309 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"For a headless supervisor providing {ph0}, {ph1} and {ph2}, the file can " +"look like this:" +msgstr "" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#: website/public/get-started/index.html:1332 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"For an attached legacy 1.4.0 GUI server, copy its working {ph0}, {ph1} and " +"optional {ph2} into the file. Open the original binary in IDA and start its " +"upstream plugin before asking REA to inspect it." +msgstr "" + +#: website/public/get-started/index.html:1374 +msgctxt "page:get-started/index.html" +msgid "" +"Use the JSON registration file you prepared with the provider guide, then " +"rerun setup and restart your agent." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}IDA profiles, registration examples and verified platforms{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1386 +msgctxt "page:get-started/index.html" +msgid "" +"Once connected, give your agent the original executable's full path and name" +" your provider:" +msgstr "" + +#. {ph0}: /absolute/path/to/program +#: website/public/get-started/index.html:1391 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Use REA with my configured provider to inspect {ph0}. List its functions and" +" strings, then explain the part that handles user input with references to " +"the code." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1398 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Follow a native analysis example{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1403 +msgctxt "page:get-started/index.html" +msgid "Websites, Android, .NET, firmware and other targets" +msgstr "" + +#: website/public/get-started/index.html:1406 +msgctxt "page:get-started/index.html" +msgid "" +"Open the guide for the target you have. Each guide gives the additional " +"tools, supported hosts and first command." +msgstr "" + +#: website/public/get-started/index.html:1414 +msgctxt "page:get-started/index.html" +msgid "Target" +msgstr "" + +#: website/public/get-started/index.html:1415 +msgctxt "page:get-started/index.html" +msgid "Tools to prepare" +msgstr "" + +#: website/public/get-started/index.html:1416 +msgctxt "page:get-started/index.html" +msgid "Guide" +msgstr "" + +#: website/public/get-started/index.html:1421 +msgctxt "page:get-started/index.html" +msgid "JavaScript / Electron" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1423 +#: website/public/get-started/index.html:1428 +#: website/public/get-started/index.html:1433 +#: website/public/get-started/index.html:1443 +#: website/public/get-started/index.html:1453 +#: website/public/get-started/index.html:1463 +#: website/public/get-started/index.html:1473 +#: website/public/get-started/index.html:1483 +#: website/public/get-started/index.html:1493 +#: website/public/get-started/index.html:1503 +#: website/public/get-started/index.html:1513 +#: website/public/get-started/index.html:1523 +#: website/public/get-started/index.html:1533 +#: website/public/get-started/index.html:1543 +#: website/public/get-started/index.html:1553 +#: website/public/get-started/index.html:1563 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Open guide{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1426 +msgctxt "page:get-started/index.html" +msgid "Website" +msgstr "" + +#: website/public/get-started/index.html:1431 +msgctxt "page:get-started/index.html" +msgid ".NET / Flutter / packages" +msgstr "" + +#: website/public/get-started/index.html:1441 +msgctxt "page:get-started/index.html" +msgid "Android APK" +msgstr "" + +#: website/public/get-started/index.html:1451 +msgctxt "page:get-started/index.html" +msgid "Android device" +msgstr "" + +#: website/public/get-started/index.html:1461 +msgctxt "page:get-started/index.html" +msgid "Android resources" +msgstr "" + +#: website/public/get-started/index.html:1471 +msgctxt "page:get-started/index.html" +msgid "JEB project" +msgstr "" + +#: website/public/get-started/index.html:1481 +msgctxt "page:get-started/index.html" +msgid "Firmware" +msgstr "" + +#: website/public/get-started/index.html:1491 +msgctxt "page:get-started/index.html" +msgid "WASM" +msgstr "" + +#: website/public/get-started/index.html:1501 +msgctxt "page:get-started/index.html" +msgid "SQLite database" +msgstr "" + +#: website/public/get-started/index.html:1511 +msgctxt "page:get-started/index.html" +msgid "EVM bytecode" +msgstr "" + +#: website/public/get-started/index.html:1521 +msgctxt "page:get-started/index.html" +msgid "ELF / Linux crash" +msgstr "" + +#: website/public/get-started/index.html:1531 +msgctxt "page:get-started/index.html" +msgid "HAR / SAZ / mitmproxy" +msgstr "" + +#: website/public/get-started/index.html:1541 +msgctxt "page:get-started/index.html" +msgid "PCAP / PCAPNG" +msgstr "" + +#: website/public/get-started/index.html:1551 +msgctxt "page:get-started/index.html" +msgid "Logic signals" +msgstr "" + +#: website/public/get-started/index.html:1561 +msgctxt "page:get-started/index.html" +msgid "Process behavior" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/get-started/index.html:1573 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Flutter guide{ph1} · {ph2}Packages and resources{ph3} · {ph4}EVM " +"bytecode{ph5} · {ph6}All investigation guides{ph7}" +msgstr "" + +#: website/public/get-started/index.html:1593 +msgctxt "page:get-started/index.html" +msgid "Use REA from a terminal" +msgstr "" + +#: website/public/get-started/index.html:1595 +msgctxt "page:get-started/index.html" +msgid "CLI commands, global installation and curl" +msgstr "" + +#: website/public/get-started/index.html:1596 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" + +#: website/public/get-started/index.html:1602 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:1614 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" + +#: website/public/get-started/index.html:1620 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "" + +#. {ph0}: resources +#: website/public/get-started/index.html:1621 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:1626 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:1632 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:1640 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:1645 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" + +#: website/public/get-started/index.html:1650 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" + +#. {ph0}: rea +#: website/public/get-started/index.html:1655 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "" + +#: website/public/get-started/index.html:1661 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1673 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "" + +#. {ph0}: main +#: website/public/get-started/index.html:1692 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace {ph0} with a function name or address from the target's function " +"list. Ghidra must be configured first." +msgstr "" + +#: website/public/get-started/index.html:1696 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS or Linux, you can also use the curl installer after preparing " +"Node.js:" +msgstr "" + +#. {ph0}: rea setup +#: website/public/get-started/index.html:1714 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Follow the setup prompts to connect your agent. If they don't appear, run " +"{ph0}." +msgstr "" + +#. {ph0}: rea +#. {ph1}: "$HOME/.local/bin/rea" setup +#: website/public/get-started/index.html:1718 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If your shell can't find {ph0}, use the executable path printed by the " +"installer. On Linux, the default setup command is {ph1}." +msgstr "" + +#: website/public/get-started/index.html:1727 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "" + +#: website/public/get-started/index.html:1729 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "" + +#. {ph0}: doctor +#: website/public/get-started/index.html:1730 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" + +#: website/public/get-started/index.html:1734 +msgctxt "page:get-started/index.html" +msgid "" +"Use the client check in step 3 with your setup ID. In editor clients, enable" +" REA in MCP settings and allow its tools in the agent chat." +msgstr "" + +#: website/public/get-started/index.html:1741 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "" + +#: website/public/get-started/index.html:1742 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "" + +#: website/public/get-started/index.html:1745 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "" + +#: website/public/get-started/index.html:1757 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" + +#: website/public/get-started/index.html:1762 +msgctxt "page:get-started/index.html" +msgid "Windows, WSL and paths with spaces" +msgstr "" + +#: website/public/get-started/index.html:1763 +msgctxt "page:get-started/index.html" +msgid "" +"Use Windows PowerShell for Windows clients and analysis tools. If your agent" +" runs inside WSL, install Node.js and REA inside that Linux environment and " +"use Linux paths there. Headless providers run on the same host as REA." +msgstr "" + +#: website/public/get-started/index.html:1772 +msgctxt "page:get-started/index.html" +msgid "Windows setup command:" +msgstr "" + +#: website/public/get-started/index.html:1789 +msgctxt "page:get-started/index.html" +msgid "Update or remove REA" +msgstr "" + +#: website/public/get-started/index.html:1790 +msgctxt "page:get-started/index.html" +msgid "" +"To refresh your agent connection, run the latest setup command again, review" +" its plan and restart your client." +msgstr "" + +#. {ph0}: rea update +#. {ph1}: npx rea-agents@latest uninstall +#: website/public/get-started/index.html:1808 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If you installed the global CLI, update it with {ph0}. Use {ph1} to remove " +"REA's client configuration and skill." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1814 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Update and uninstall details{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:1822 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:1826 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:1833 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:1837 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" + +#: website/public/get-started/index.html:227 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "" + +#: website/public/get-started/index.html:273 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "" + +#: website/public/get-started/index.html:296 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "" + +#: website/public/get-started/index.html:326 +msgctxt "page:get-started/index.html" +msgid "Copy Windows REA setup command" +msgstr "" + +#: website/public/get-started/index.html:351 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "" + +#: website/public/get-started/index.html:374 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "" + +#: website/public/get-started/index.html:389 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "" + +#: website/public/get-started/index.html:423 +#: website/public/get-started/index.html:454 +#: website/public/get-started/index.html:468 +#: website/public/get-started/index.html:486 +#: website/public/get-started/index.html:538 +#: website/public/get-started/index.html:552 +#: website/public/get-started/index.html:584 +#: website/public/get-started/index.html:613 +#: website/public/get-started/index.html:779 +#: website/public/get-started/index.html:834 +#: website/public/get-started/index.html:849 +#: website/public/get-started/index.html:897 +#: website/public/get-started/index.html:1085 +#: website/public/get-started/index.html:1147 +#: website/public/get-started/index.html:1170 +#: website/public/get-started/index.html:1194 +#: website/public/get-started/index.html:1242 +#: website/public/get-started/index.html:1317 +#: website/public/get-started/index.html:1343 +#: website/public/get-started/index.html:1360 +#: website/public/get-started/index.html:1681 +#: website/public/get-started/index.html:1703 +#: website/public/get-started/index.html:1776 +#: website/public/get-started/index.html:1797 +msgctxt "page:get-started/index.html" +msgid "Copy command" +msgstr "" + +#: website/public/get-started/index.html:809 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "" + +#: website/public/get-started/index.html:930 +msgctxt "page:get-started/index.html" +msgid "Copy Notes investigation prompt" +msgstr "" + +#: website/public/get-started/index.html:1603 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "" + +#: website/public/get-started/index.html:1662 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "" + +#: website/public/get-started/index.html:1746 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "" + +#: website/public/get-started/index.html:1862 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/browser/index.html:113 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:203 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "" + +#. {ph0}:
+#: website/public/guides/browser/index.html:207 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "" + +#: website/public/guides/browser/index.html:208 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" + +#: website/public/guides/browser/index.html:215 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:217 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:218 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:219 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:220 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:221 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "" + +#: website/public/guides/browser/index.html:226 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:227 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" + +#: website/public/guides/browser/index.html:235 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:237 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:245 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:253 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" + +#: website/public/guides/browser/index.html:266 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "" + +#: website/public/guides/browser/index.html:273 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" + +#: website/public/guides/browser/index.html:279 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "" + +#: website/public/guides/browser/index.html:280 +#: website/public/guides/browser/index.html:312 +#: website/public/guides/browser/index.html:346 +#: website/public/guides/browser/index.html:365 +#: website/public/guides/browser/index.html:430 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "" + +#: website/public/guides/browser/index.html:294 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" + +#: website/public/guides/browser/index.html:299 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" + +#: website/public/guides/browser/index.html:305 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "" + +#. {ph0}: +#: website/public/guides/browser/index.html:308 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:321 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:329 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" + +#: website/public/guides/browser/index.html:334 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" + +#: website/public/guides/browser/index.html:341 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "" + +#: website/public/guides/browser/index.html:345 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" + +#: website/public/guides/browser/index.html:364 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:380 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" + +#: website/public/guides/browser/index.html:385 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "" + +#: website/public/guides/browser/index.html:395 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "" + +#: website/public/guides/browser/index.html:400 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "" + +#: website/public/guides/browser/index.html:401 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "" + +#: website/public/guides/browser/index.html:406 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "" + +#: website/public/guides/browser/index.html:410 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "" + +#: website/public/guides/browser/index.html:414 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:415 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "" + +#: website/public/guides/browser/index.html:418 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:419 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "" + +#: website/public/guides/browser/index.html:429 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:443 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:450 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:463 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:468 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:479 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:484 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:489 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For HTTP request and response bodies, use {ph0}Fiddler Everywhere: SAZ " +"captures, MCP and public skills{ph1}. Export SAZ or HAR 1.2 for offline REA " +"capture Evidence, or connect Everywhere's MCP server to inspect captured " +"traffic with your agent." +msgstr "" + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" + +#: website/public/guides/browser/index.html:214 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "" + +#: website/public/guides/browser/index.html:224 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "" + +#: website/public/guides/browser/index.html:280 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "" + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/guides/browser/index.html:346 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "" + +#: website/public/guides/browser/index.html:365 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "" + +#: website/public/guides/browser/index.html:430 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "" + +#: website/public/guides/browser/index.html:518 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/index.html:113 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:203 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "" + +#: website/public/guides/index.html:204 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "" + +#: website/public/guides/index.html:205 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" + +#: website/public/guides/index.html:212 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "" + +#: website/public/guides/index.html:214 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "" + +#: website/public/guides/index.html:216 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "" + +#: website/public/guides/index.html:220 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "" + +#: website/public/guides/index.html:222 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "" + +#: website/public/guides/index.html:223 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "" + +#: website/public/guides/index.html:229 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "" + +#: website/public/guides/index.html:230 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "" + +#: website/public/guides/index.html:231 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "" + +#: website/public/guides/index.html:233 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "" + +#: website/public/guides/index.html:237 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "" + +#: website/public/guides/index.html:239 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "" + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:253 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" + +#: website/public/guides/index.html:260 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "" + +#: website/public/guides/index.html:262 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "" + +#: website/public/guides/index.html:263 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" + +#: website/public/guides/index.html:268 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "" + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "" + +#: website/public/guides/index.html:270 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "" + +#: website/public/guides/index.html:272 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "" + +#: website/public/guides/index.html:276 +msgctxt "page:guides/index.html" +msgid "RL environments" +msgstr "" + +#: website/public/guides/index.html:278 +msgctxt "page:guides/index.html" +msgid "Build an environment for agents" +msgstr "" + +#: website/public/guides/index.html:279 +msgctxt "page:guides/index.html" +msgid "" +"Record a web app session, turn it into tools and local data, then add tasks " +"and reward checks." +msgstr "" + +#: website/public/guides/index.html:284 +msgctxt "page:guides/index.html" +msgid "Record" +msgstr "" + +#: website/public/guides/index.html:284 +msgctxt "page:guides/index.html" +msgid "Build" +msgstr "" + +#: website/public/guides/index.html:285 +msgctxt "page:guides/index.html" +msgid "Run" +msgstr "" + +#: website/public/guides/index.html:287 +msgctxt "page:guides/index.html" +msgid "Evaluate" +msgstr "" + +#: website/public/guides/index.html:289 +msgctxt "page:guides/index.html" +msgid "Build an RL environment" +msgstr "" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" + +#: website/public/guides/index.html:312 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/javascript/index.html:113 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:203 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:207 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "" + +#: website/public/guides/javascript/index.html:208 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" + +#: website/public/guides/javascript/index.html:215 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:217 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:218 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:219 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:220 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:221 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "" + +#: website/public/guides/javascript/index.html:226 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:227 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" + +#: website/public/guides/javascript/index.html:234 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:238 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:246 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:263 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "" + +#: website/public/guides/javascript/index.html:267 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" + +#: website/public/guides/javascript/index.html:275 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:276 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" + +#. {ph0}: +#: website/public/guides/javascript/index.html:282 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/guides/javascript/index.html:286 +#: website/public/guides/javascript/index.html:443 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:295 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:303 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "" + +#: website/public/guides/javascript/index.html:307 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" + +#: website/public/guides/javascript/index.html:314 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "" + +#: website/public/guides/javascript/index.html:315 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:318 +#: website/public/guides/javascript/index.html:341 +#: website/public/guides/javascript/index.html:356 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "" + +#: website/public/guides/javascript/index.html:335 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:349 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:366 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" + +#: website/public/guides/javascript/index.html:373 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "" + +#: website/public/guides/javascript/index.html:383 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on an earlier version of the example below. The " +"renderer has since changed; the recorded source locations accompany the API," +" channel and handler findings." +msgstr "" + +#: website/public/guides/javascript/index.html:390 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:391 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:397 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "" + +#: website/public/guides/javascript/index.html:406 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "" + +#: website/public/guides/javascript/index.html:442 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:455 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" + +#: website/public/guides/javascript/index.html:461 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" + +#: website/public/guides/javascript/index.html:468 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:470 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" + +#: website/public/guides/javascript/index.html:476 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:482 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:488 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:494 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" + +#: website/public/guides/javascript/index.html:214 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "" + +#: website/public/guides/javascript/index.html:224 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "" + +#: website/public/guides/javascript/index.html:286 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/guides/javascript/index.html:443 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "" + +#: website/public/guides/javascript/index.html:522 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/native/index.html:113 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:203 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" + +#. {ph0}:
+#: website/public/guides/native/index.html:206 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "" + +#: website/public/guides/native/index.html:207 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" + +#: website/public/guides/native/index.html:214 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:216 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:218 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:219 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:220 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "" + +#: website/public/guides/native/index.html:225 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "" + +#: website/public/guides/native/index.html:226 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:230 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" + +#: website/public/guides/native/index.html:237 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:239 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:244 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:249 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:253 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:257 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" + +#: website/public/guides/native/index.html:264 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:268 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:276 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:284 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" + +#: website/public/guides/native/index.html:296 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" + +#: website/public/guides/native/index.html:303 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:304 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" + +#: website/public/guides/native/index.html:315 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "" + +#: website/public/guides/native/index.html:316 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:318 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis. Automated Linux setup requires x86_64; " +"use Ghidra on Linux arm64." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:325 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:330 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows; macOS arm64 headless): use an existing IDA setup " +"with an MCP registration. The macOS headless profile requires a source build" +" or a release that includes it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:337 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" + +#. {ph0}: +#: website/public/guides/native/index.html:345 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/guides/native/index.html:349 +#: website/public/guides/native/index.html:480 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:358 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/guides/native/index.html:366 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" + +#: website/public/guides/native/index.html:373 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:375 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:380 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:384 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" + +#: website/public/guides/native/index.html:392 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "" + +#: website/public/guides/native/index.html:393 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "" + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "" + +#: website/public/guides/native/index.html:402 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "" + +#: website/public/guides/native/index.html:410 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:416 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" + +#: website/public/guides/native/index.html:421 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "" + +#: website/public/guides/native/index.html:424 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "" + +#: website/public/guides/native/index.html:432 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" + +#: website/public/guides/native/index.html:439 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "" + +#: website/public/guides/native/index.html:441 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" + +#: website/public/guides/native/index.html:453 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:458 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "" + +#: website/public/guides/native/index.html:465 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:466 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" + +#: website/public/guides/native/index.html:479 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "" + +#. {ph0}: main +#: website/public/guides/native/index.html:492 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" + +#: website/public/guides/native/index.html:498 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" + +#: website/public/guides/native/index.html:213 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "" + +#: website/public/guides/native/index.html:223 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "" + +#: website/public/guides/native/index.html:349 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/guides/native/index.html:480 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "" + +#: website/public/guides/native/index.html:523 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/rl-environments/index.html:113 +msgctxt "page:guides/rl-environments/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/rl-environments/index.html:203 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / RL environments" +msgstr "" + +#: website/public/guides/rl-environments/index.html:206 +msgctxt "page:guides/rl-environments/index.html" +msgid "Build RL environments." +msgstr "" + +#: website/public/guides/rl-environments/index.html:207 +#: website/public/guides/rl-environments/index.html:7 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Turn a recorded web app session into a runnable environment for training and" +" testing AI agents." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:211 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}Watch the announcement video on X{ph1}" +msgstr "" + +#: website/public/guides/rl-environments/index.html:219 +#: website/public/guides/rl-environments/index.html:218 +msgctxt "page:guides/rl-environments/index.html" +msgid "On this page" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:221 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}What REA builds{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:222 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}Before you start{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:223 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}Record with your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:224 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}Use a saved recording{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:225 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}Run the environment{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:226 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}Add tasks and rewards{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:227 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}Check what works{ph1}" +msgstr "" + +#: website/public/guides/rl-environments/index.html:232 +msgctxt "page:guides/rl-environments/index.html" +msgid "What REA builds" +msgstr "" + +#: website/public/guides/rl-environments/index.html:233 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"An agent can practice finding an issue, creating a folder, or editing a " +"record without running the original app. REA builds the tools the agent " +"calls, the local data those tools use, and a basic test that checks the " +"environment starts and responds." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/rl-environments/index.html:241 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"{ph0}01 · Record{ph1}{ph2}Use a test app{ph3}{ph4}Capture requests, " +"responses, and the results of changes.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/rl-environments/index.html:249 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"{ph0}02 · Build with REA{ph1}{ph2}Create tools and local " +"state{ph3}{ph4}Export a runnable AgentEnv folder with the recording and a " +"test.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/rl-environments/index.html:257 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"{ph0}03 · Run with AgentEnv{ph1}{ph2}Give the environment to an " +"agent{ph3}{ph4}Add task goals and reward checks for evaluation or RL " +"training.{ph5}" +msgstr "" + +#: website/public/guides/rl-environments/index.html:267 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"The recording determines which operations the environment can support. " +"Changes are supported when the recording confirms their effects." +msgstr "" + +#: website/public/guides/rl-environments/index.html:275 +msgctxt "page:guides/rl-environments/index.html" +msgid "Before you start" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:276 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"{ph0}Set up REA with your coding agent{ph1}. To record an app, have a " +"Chrome-family browser and a running test instance where the agent may " +"create, edit, and delete data. REA records the app you provide; you start it" +" and prepare its test data." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0.9.1334 +#: website/public/guides/rl-environments/index.html:283 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"To run the exported environment, install the {ph0}AgentEnv framework{ph1} " +"and start Docker. REA's compatibility check uses AgentEnv version {ph2} with" +" Python 3.12." +msgstr "" + +#: website/public/guides/rl-environments/index.html:293 +msgctxt "page:guides/rl-environments/index.html" +msgid "Record and build with your agent" +msgstr "" + +#: website/public/guides/rl-environments/index.html:294 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Tell your agent which app and operations to cover. For an app with folders, " +"adapt this example:" +msgstr "" + +#. {ph0}: +#: website/public/guides/rl-environments/index.html:300 +#: website/public/guides/rl-environments/index.html:417 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/guides/rl-environments/index.html:304 +#: website/public/guides/rl-environments/index.html:349 +#: website/public/guides/rl-environments/index.html:384 +#: website/public/guides/rl-environments/index.html:421 +msgctxt "page:guides/rl-environments/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: http://127.0.0.1:3000 +#. {ph4}: APP_PASSWORD +#. {ph5}: /absolute/path/to/chromium +#. {ph6}: /absolute/path/to/my-env +#. {ph7}: +#. {ph8}: +#: website/public/guides/rl-environments/index.html:313 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to build an AgentEnv environment from my test web " +"app at {ph3}. Cover listing, creating, renaming, and deleting folders. You " +"may create and remove test folders; leave existing data unchanged. Sign in " +"as admin using the password in {ph4}. Use the browser at {ph5} and export to" +" {ph6}, which does not exist yet. Check which operations are supported and " +"report any gaps.{ph7}{ph8}{ph9}" +msgstr "" + +#. {ph0}: APP_PASSWORD +#: website/public/guides/rl-environments/index.html:328 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Example prompt. Replace the URL, operations, account, and paths. Set {ph0} " +"in the environment that starts REA's MCP server so the password stays out of" +" the prompt." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:333 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Your agent inspects the app, records a session, checks the supported " +"operations, and exports the environment. After export, continue with " +"{ph0}running the environment{ph1}." +msgstr "" + +#: website/public/guides/rl-environments/index.html:340 +msgctxt "page:guides/rl-environments/index.html" +msgid "Or use a saved recording" +msgstr "" + +#: website/public/guides/rl-environments/index.html:341 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"A HAR file records a browser's network requests and responses. Export one " +"with API response bodies from the browser's network panel, then build into a" +" new or empty folder:" +msgstr "" + +#: website/public/guides/rl-environments/index.html:348 +msgctxt "page:guides/rl-environments/index.html" +msgid "Build the environment" +msgstr "" + +#. {ph0}: capture-browser-scenario +#. {ph1}: --dry-run +#: website/public/guides/rl-environments/index.html:360 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"You can also pass capture Evidence JSON saved by REA's {ph0} or HAR " +"inspection. Evidence is the saved recording with its source information. The" +" build reads local data and writes the folder without contacting the app. " +"Add {ph1} to review the report without writing files." +msgstr "" + +#: website/public/guides/rl-environments/index.html:368 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"The report lists read operations, supported changes, and operations withheld" +" because the recording did not establish their effects. Each withheld " +"operation has a reason and a hint about what to record next." +msgstr "" + +#: website/public/guides/rl-environments/index.html:376 +msgctxt "page:guides/rl-environments/index.html" +msgid "Run the environment" +msgstr "" + +#: website/public/guides/rl-environments/index.html:377 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Whether your agent exported the folder or you built it from a recording, run" +" it with AgentEnv:" +msgstr "" + +#: website/public/guides/rl-environments/index.html:383 +msgctxt "page:guides/rl-environments/index.html" +msgid "Run the environment test" +msgstr "" + +#: website/public/guides/rl-environments/index.html:395 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Use the path your agent reported if it differs. The first run builds the " +"container image and needs access to its image and package sources." +msgstr "" + +#: website/public/guides/rl-environments/index.html:400 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"The included smoke task is a basic test. It checks the tool count and, when " +"a suitable read tool exists, calls it and checks its response status. " +"Passing it shows the environment starts and responds in that setup." +msgstr "" + +#: website/public/guides/rl-environments/index.html:408 +msgctxt "page:guides/rl-environments/index.html" +msgid "Add tasks and reward checks" +msgstr "" + +#: website/public/guides/rl-environments/index.html:409 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Use the environment with your RL framework to define goals, score results, " +"and run training. Your coding agent can help write the tasks and checks. " +"Start with one operation the environment supports:" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/rl-environments/index.html:430 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use this exported environment to add an AgentEnv task that " +"asks an agent to create a folder named Practice. Check the environment state" +" to confirm the folder exists with that name, and use that check to score " +"the result. Reset the environment before each run. Use the AgentEnv task and" +" verifier formats.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/guides/rl-environments/index.html:442 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Example prompt for an environment that supports folder creation. A task that" +" changes data should check the resulting state; a retrieval task can check " +"an answer against a recorded value." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/rl-environments/index.html:447 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"The export includes the runnable environment and its basic test. Task-" +"specific grading is added in the evaluation workflow. See the {ph0}AgentEnv " +"documentation{ph1} for tasks, verifiers, and agent connections." +msgstr "" + +#: website/public/guides/rl-environments/index.html:457 +msgctxt "page:guides/rl-environments/index.html" +msgid "Check what works" +msgstr "" + +#: website/public/guides/rl-environments/index.html:458 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"For changes to be supported, record the results as well as the action: read " +"an item, change it, then read the item and its list again before the next " +"change. Repeat with different values. For deletes, record the missing-item " +"response and the updated list." +msgstr "" + +#. {ph0}: environment-compare +#: website/public/guides/rl-environments/index.html:464 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"A passing startup test, an agent completing a task, and matching the " +"original app are separate checks. For the last one, use {ph0} with a " +"separate recording of calls made against the app from the same starting " +"data." +msgstr "" + +#: website/public/guides/rl-environments/index.html:470 +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Before sharing the folder, review its retained response bodies and local " +"paths. Custom headers, query values, and body tokens can remain. Credential-" +"name warnings identify places to review; they do not remove those values." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/rl-environments/index.html:476 +#, python-brace-format +msgctxt "page:guides/rl-environments/index.html" +msgid "" +"Follow the {ph0}full recording and validation guide{ph1} for coverage " +"reports and comparison commands. The {ph2}environment reference{ph3} covers " +"direct MCP serving, state controls, and limits." +msgstr "" + +#: website/public/guides/rl-environments/index.html:6 +msgctxt "page:guides/rl-environments/index.html" +msgid "Build RL environments with REA" +msgstr "" + +#: website/public/guides/rl-environments/index.html:304 +msgctxt "page:guides/rl-environments/index.html" +msgid "Copy environment prompt" +msgstr "" + +#: website/public/guides/rl-environments/index.html:349 +msgctxt "page:guides/rl-environments/index.html" +msgid "Copy environment build command" +msgstr "" + +#: website/public/guides/rl-environments/index.html:384 +msgctxt "page:guides/rl-environments/index.html" +msgid "Copy environment run command" +msgstr "" + +#: website/public/guides/rl-environments/index.html:421 +msgctxt "page:guides/rl-environments/index.html" +msgid "Copy task prompt" +msgstr "" + +#: website/public/guides/rl-environments/index.html:509 +msgctxt "page:guides/rl-environments/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/index.html:115 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "" + +#: website/public/index.html:207 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "" + +#. {ph0}:
+#: website/public/index.html:208 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "" + +#: website/public/index.html:209 +msgctxt "page:index.html" +msgid "" +"Ask your coding agent about an app, a game or a website. REA gives it the " +"tools to inspect the code behind the answer." +msgstr "" + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "Get started" +msgstr "" + +#: website/public/index.html:215 +msgctxt "page:index.html" +msgid "See an example ↓" +msgstr "" + +#: website/public/index.html:220 website/public/index.html:315 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "" + +#. {ph0}: +#: website/public/index.html:224 website/public/index.html:1129 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/index.html:229 website/public/index.html:253 +#: website/public/index.html:541 website/public/index.html:622 +#: website/public/index.html:846 website/public/index.html:1133 +#: website/public/index.html:1220 website/public/index.html:1248 +msgctxt "page:index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:238 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/index.html:250 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "" + +#: website/public/index.html:262 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "" + +#: website/public/index.html:267 website/public/index.html:268 +msgctxt "page:index.html" +msgid "Setup options" +msgstr "" + +#: website/public/index.html:269 +msgctxt "page:index.html" +msgid "Setup for your platform:" +msgstr "" + +#. {ph0}: +#. {ph1}: curl +#. {ph2}: +#: website/public/index.html:280 +#, python-brace-format +msgctxt "page:index.html" +msgid "Other install options: {ph0}{ph1} →{ph2}" +msgstr "" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:287 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" + +#: website/public/index.html:296 +msgctxt "page:index.html" +msgid "Build RL environments →" +msgstr "" + +#: website/public/index.html:299 +msgctxt "page:index.html" +msgid "Record a web app for training and testing agents." +msgstr "" + +#: website/public/index.html:302 website/public/index.html:1056 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "" + +#: website/public/index.html:303 +msgctxt "page:index.html" +msgid "Investigations and interactive demos." +msgstr "" + +#: website/public/index.html:306 +msgctxt "page:index.html" +msgid "Blog →" +msgstr "" + +#: website/public/index.html:307 +msgctxt "page:index.html" +msgid "Methods and reconstruction notes." +msgstr "" + +#: website/public/index.html:314 website/public/index.html:327 +#: website/public/index.html:325 +msgctxt "page:index.html" +msgid "On this page" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:330 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How it works{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:331 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:332 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:333 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Showcases{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:334 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}RL environments{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:335 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:336 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "" + +#: website/public/index.html:345 +msgctxt "page:index.html" +msgid "How it works" +msgstr "" + +#: website/public/index.html:347 +msgctxt "page:index.html" +msgid "" +"Reverse engineering means learning how software works by inspecting the " +"program itself. With REA, your agent can follow the code, explain a feature " +"and help you rebuild it." +msgstr "" + +#: website/public/index.html:354 +msgctxt "page:index.html" +msgid "Ask about one feature" +msgstr "" + +#: website/public/index.html:355 +msgctxt "page:index.html" +msgid "Give your agent a program or page and a question." +msgstr "" + +#: website/public/index.html:358 +msgctxt "page:index.html" +msgid "Inspect the program" +msgstr "" + +#: website/public/index.html:359 +msgctxt "page:index.html" +msgid "" +"REA helps your agent read the code and see what the program does while it " +"runs." +msgstr "" + +#: website/public/index.html:365 +msgctxt "page:index.html" +msgid "Explain it, then try a change" +msgstr "" + +#: website/public/index.html:366 +msgctxt "page:index.html" +msgid "Your agent uses the findings to explain or rebuild the feature." +msgstr "" + +#: website/public/index.html:372 +msgctxt "page:index.html" +msgid "See the full Calculator investigation" +msgstr "" + +#. {ph0}: 200 + 10% +#: website/public/index.html:373 +#, python-brace-format +msgctxt "page:index.html" +msgid "Why does Calculator give 220 for {ph0}?" +msgstr "" + +#: website/public/index.html:382 +msgctxt "page:index.html" +msgid "Follow the instructions step by step" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:390 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:398 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:406 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:417 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "" + +#: website/public/index.html:459 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:460 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" + +#: website/public/index.html:464 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "" + +#: website/public/index.html:470 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "" + +#: website/public/index.html:474 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:480 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" + +#: website/public/index.html:486 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Divide" +msgstr "" + +#: website/public/index.html:501 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:502 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" + +#: website/public/index.html:506 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "" + +#: website/public/index.html:522 website/public/index.html:449 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" + +#: website/public/index.html:533 +msgctxt "page:index.html" +msgid "Ask your agent the same question" +msgstr "" + +#. {ph0}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:550 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/index.html:558 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:561 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "" + +#: website/public/index.html:574 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "" + +#: website/public/index.html:575 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "" + +#: website/public/index.html:580 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "" + +#: website/public/index.html:581 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:588 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "" +"Let’s try two examples: change a game’s speed, then rebuild Calculator’s % " +"button." +msgstr "" + +#: website/public/index.html:605 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "" + +#: website/public/index.html:606 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "" + +#: website/public/index.html:608 +msgctxt "page:index.html" +msgid "" +"The game gets faster as you run. To rebuild it with a speed control, we " +"first need to find out how the speed changes." +msgstr "" + +#: website/public/index.html:614 +msgctxt "page:index.html" +msgid "1. Ask about the speed" +msgstr "" + +#. {ph0}: +#: website/public/index.html:617 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Dinosaur game" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:631 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/index.html:640 +msgctxt "page:index.html" +msgid "2. Find the speed rule" +msgstr "" + +#: website/public/index.html:641 +msgctxt "page:index.html" +msgid "" +"REA lets the agent read the game’s running code. The speed starts at 6 and " +"increases a little each update while it is below 13." +msgstr "" + +#: website/public/index.html:648 +msgctxt "page:index.html" +msgid "3. Play the result" +msgstr "" + +#: website/public/index.html:649 +msgctxt "page:index.html" +msgid "" +"We rebuilt that rule in the mini-game below and added a speed slider. Press " +"Play, then choose your own speed." +msgstr "" + +#: website/public/index.html:685 +msgctxt "page:index.html" +msgid "Play" +msgstr "" + +#: website/public/index.html:688 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "" + +#: website/public/index.html:689 +msgctxt "page:index.html" +msgid "Restart" +msgstr "" + +#: website/public/index.html:692 +msgctxt "page:index.html" +msgid "Speed" +msgstr "" + +#: website/public/index.html:702 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "" + +#: website/public/index.html:706 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "" + +#: website/public/index.html:709 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" + +#: website/public/index.html:714 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play. You can still read the rule and open the source " +"code below." +msgstr "" + +#: website/public/index.html:720 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "" + +#: website/public/index.html:726 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:729 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" + +#. {ph0}: index.js +#: website/public/index.html:737 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "" + +#: website/public/index.html:746 +msgctxt "page:index.html" +msgid "" +"Start at 6. Add 0.001 each update without a collision, while speed is below " +"13." +msgstr "" + +#: website/public/index.html:751 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:753 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:760 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:768 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" + +#. {ph0}: index.js +#: website/public/index.html:778 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" + +#: website/public/index.html:785 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "" + +#: website/public/index.html:791 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:797 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:803 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:812 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" + +#: website/public/index.html:829 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "" + +#: website/public/index.html:830 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "" + +#: website/public/index.html:832 +msgctxt "page:index.html" +msgid "" +"The % button does different things after + and ×. Let’s find both rules and " +"try them in a small calculator." +msgstr "" + +#: website/public/index.html:838 +msgctxt "page:index.html" +msgid "1. Ask about the % button" +msgstr "" + +#. {ph0}: +#: website/public/index.html:841 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Calculator" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:855 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/index.html:864 +msgctxt "page:index.html" +msgid "2. Find both rules" +msgstr "" + +#: website/public/index.html:865 +msgctxt "page:index.html" +msgid "" +"REA helps the agent read the code behind the % button. It applies two " +"different rules:" +msgstr "" + +#: website/public/index.html:871 +msgctxt "page:index.html" +msgid "With +" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "" + +#: website/public/index.html:878 +msgctxt "page:index.html" +msgid "With ×" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:879 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "" + +#: website/public/index.html:886 +msgctxt "page:index.html" +msgid "3. Try the % button" +msgstr "" + +#: website/public/index.html:887 +msgctxt "page:index.html" +msgid "We recreated both rules below. Choose + or ×, press %, then press =." +msgstr "" + +#: website/public/index.html:935 +msgctxt "page:index.html" +msgid "Reset" +msgstr "" + +#: website/public/index.html:943 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "" + +#: website/public/index.html:946 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "" + +#: website/public/index.html:953 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "" + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:954 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "" + +#: website/public/index.html:960 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "" + +#: website/public/index.html:969 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "" + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:973 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:982 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:990 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" + +#: website/public/index.html:1004 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "" + +#: website/public/index.html:1015 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "" + +#: website/public/index.html:1025 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1030 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" + +#: website/public/index.html:1050 +msgctxt "page:index.html" +msgid "REA case studies." +msgstr "" + +#: website/public/index.html:1051 +msgctxt "page:index.html" +msgid "" +"Explore a feature in a released app or game, with code and checked results." +msgstr "" + +#: website/public/index.html:1060 +msgctxt "page:index.html" +msgid "Android · APK analysis" +msgstr "" + +#: website/public/index.html:1061 +msgctxt "page:index.html" +msgid "How an authenticator generates a login code" +msgstr "" + +#: website/public/index.html:1062 +msgctxt "page:index.html" +msgid "" +"Trace Aegis's six-digit login code through its released APK, then move a " +"demo clock to see why it changes every 30 seconds." +msgstr "" + +#: website/public/index.html:1066 +msgctxt "page:index.html" +msgid "Read the Android case study" +msgstr "" + +#: website/public/index.html:1071 +msgctxt "page:index.html" +msgid "Electron · Feature tracing" +msgstr "" + +#: website/public/index.html:1072 +msgctxt "page:index.html" +msgid "How Notion copies text and HTML" +msgstr "" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "" +"Follow Notion's packaged JavaScript to the system clipboard and see how a " +"copy preserves rich block data." +msgstr "" + +#: website/public/index.html:1077 +msgctxt "page:index.html" +msgid "Read the Notion case study" +msgstr "" + +#: website/public/index.html:1082 +msgctxt "page:index.html" +msgid "Native · Reconstruction" +msgstr "" + +#: website/public/index.html:1083 +msgctxt "page:index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "" + +#: website/public/index.html:1084 +msgctxt "page:index.html" +msgid "" +"Recover how a ball's position becomes left/right sound in a 1996 Windows " +"game." +msgstr "" + +#: website/public/index.html:1088 +msgctxt "page:index.html" +msgid "Read the DX-Ball case study" +msgstr "" + +#: website/public/index.html:1100 +msgctxt "page:index.html" +msgid "Build RL environments." +msgstr "" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "" +"Turn a recorded web app session into a runnable environment for training and" +" testing AI agents." +msgstr "" + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "" +"Your agent records the browser's requests and the app's responses. REA uses " +"them to build a local environment where agents can practice tasks without " +"running the original app." +msgstr "" + +#: website/public/index.html:1111 +msgctxt "page:index.html" +msgid "" +"To support folder deletion, the recording must show the folder before " +"deletion and confirm it is gone afterward." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1115 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Build an RL environment{ph1} · {ph2}Watch the demo on X{ph3}" +msgstr "" + +#: website/public/index.html:1126 +msgctxt "page:index.html" +msgid "With REA set up in your agent, give it a task like this:" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: http://127.0.0.1:3000 +#. {ph4}: my-env +#. {ph5}: +#. {ph6}: +#: website/public/index.html:1142 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to build an RL environment from my test web app at " +"{ph3}. Cover listing, creating, renaming, and deleting folders. You may " +"create and remove test folders. Leave existing data unchanged. Save it in a " +"folder named {ph4}. Check which operations work and tell me how to run " +"it.{ph5}{ph6}{ph7}" +msgstr "" + +#: website/public/index.html:1154 +msgctxt "page:index.html" +msgid "Example prompt. Replace the URL and folder tasks with your own." +msgstr "" + +#: website/public/index.html:1164 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "" + +#: website/public/index.html:1165 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "" + +#: website/public/index.html:1166 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" + +#: website/public/index.html:1171 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "" + +#: website/public/index.html:1180 +msgctxt "page:index.html" +msgid "Choose your target." +msgstr "" + +#: website/public/index.html:1181 +msgctxt "page:index.html" +msgid "" +"These guides cover setup and a first investigation for each kind of " +"software." +msgstr "" + +#: website/public/index.html:1188 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "" + +#: website/public/index.html:1189 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" + +#: website/public/index.html:1193 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "" + +#: website/public/index.html:1196 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "" + +#: website/public/index.html:1197 +msgctxt "page:index.html" +msgid "Follow the code inside a JavaScript desktop app." +msgstr "" + +#: website/public/index.html:1198 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "" + +#: website/public/index.html:1201 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "" + +#: website/public/index.html:1202 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" + +#: website/public/index.html:1206 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "" + +#: website/public/index.html:1210 +msgctxt "page:index.html" +msgid "Try a larger project" +msgstr "" + +#. {ph0}: +#: website/public/index.html:1215 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1229 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/index.html:1238 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "" + +#. {ph0}: +#: website/public/index.html:1243 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1257 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1266 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "" + +#: website/public/index.html:1277 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1279 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Read the FAQ{ph1} for setup help and common questions." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1283 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Join Discord{ph1} to get help and discuss your investigations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1287 +#, python-brace-format +msgctxt "page:index.html" +msgid "Report a bug or request a feature in {ph0}GitHub issues{ph1}." +msgstr "" + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA: Reverse Engineering for Your Coding Agent" +msgstr "" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" + +#: website/public/index.html:229 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "" + +#: website/public/index.html:253 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "" + +#: website/public/index.html:385 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "" + +#: website/public/index.html:541 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "" + +#: website/public/index.html:622 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "" + +#: website/public/index.html:675 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "" + +#: website/public/index.html:892 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "" + +#: website/public/index.html:1133 +msgctxt "page:index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/index.html:1220 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "" + +#: website/public/index.html:1248 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "" + +#: website/public/index.html:1314 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/aegis/index.html:114 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:204 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "" + +#: website/public/showcase/aegis/index.html:207 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:208 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "" + +#: website/public/showcase/aegis/index.html:209 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" + +#: website/public/showcase/aegis/index.html:214 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "" + +#: website/public/showcase/aegis/index.html:217 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "" + +#: website/public/showcase/aegis/index.html:223 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:225 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:234 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:242 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" + +#: website/public/showcase/aegis/index.html:255 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:257 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:258 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:259 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:260 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:261 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:262 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "" + +#: website/public/showcase/aegis/index.html:267 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:268 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" + +#. {ph0}: +#: website/public/showcase/aegis/index.html:274 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/aegis/index.html:278 +#: website/public/showcase/aegis/index.html:748 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: aegis-v3.4.3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:287 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Find how it generates the six-" +"digit login code, explain why it changes every 30 seconds, and rebuild a " +"small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:298 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" + +#: website/public/showcase/aegis/index.html:306 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:307 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" + +#: website/public/showcase/aegis/index.html:314 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:317 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "" + +#: website/public/showcase/aegis/index.html:319 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "" + +#: website/public/showcase/aegis/index.html:323 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "" + +#: website/public/showcase/aegis/index.html:325 +#: website/public/showcase/aegis/index.html:652 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:326 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "" + +#: website/public/showcase/aegis/index.html:334 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "" + +#: website/public/showcase/aegis/index.html:342 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "" + +#: website/public/showcase/aegis/index.html:348 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:363 +#: website/public/showcase/aegis/index.html:663 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:370 +#: website/public/showcase/aegis/index.html:668 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:379 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:386 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" + +#: website/public/showcase/aegis/index.html:393 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" + +#: website/public/showcase/aegis/index.html:402 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "" + +#: website/public/showcase/aegis/index.html:405 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "" + +#: website/public/showcase/aegis/index.html:408 +#: website/public/showcase/aegis/index.html:440 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "" + +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:430 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" + +#: website/public/showcase/aegis/index.html:437 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "" + +#: website/public/showcase/aegis/index.html:454 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:465 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:473 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" + +#: website/public/showcase/aegis/index.html:480 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:481 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:496 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:504 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:512 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "" + +#: website/public/showcase/aegis/index.html:524 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "" + +#: website/public/showcase/aegis/index.html:554 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:571 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:577 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:584 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:591 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" + +#: website/public/showcase/aegis/index.html:600 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:601 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" + +#: website/public/showcase/aegis/index.html:609 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "" + +#: website/public/showcase/aegis/index.html:623 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:630 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "" + +#: website/public/showcase/aegis/index.html:640 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:641 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "" + +#: website/public/showcase/aegis/index.html:653 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "" + +#: website/public/showcase/aegis/index.html:658 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:680 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" + +#: website/public/showcase/aegis/index.html:688 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "" + +#: website/public/showcase/aegis/index.html:695 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "" + +#: website/public/showcase/aegis/index.html:699 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" + +#: website/public/showcase/aegis/index.html:708 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:716 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1}, then download these two files into the same folder. On" +" Windows x64, use a package with matching Windows native controls and owned " +"protocol stdin support; see the {ph2}Android provider guide{ph3} for " +"prerequisites and PowerShell setup. A Linux environment such as WSL is " +"another option." +msgstr "" + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:728 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" + +#: website/public/showcase/aegis/index.html:734 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "" + +#: website/public/showcase/aegis/index.html:738 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "" + +#: website/public/showcase/aegis/index.html:744 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:761 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:766 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" + +#: website/public/showcase/aegis/index.html:776 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:778 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:794 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" + +#: website/public/showcase/aegis/index.html:801 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" + +#: website/public/showcase/aegis/index.html:254 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/aegis/index.html:265 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "" + +#: website/public/showcase/aegis/index.html:278 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "" + +#: website/public/showcase/aegis/index.html:491 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "" + +#: website/public/showcase/aegis/index.html:748 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "" + +#: website/public/showcase/aegis/index.html:826 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/ctf/index.html:113 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:203 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "" + +#: website/public/showcase/ctf/index.html:206 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:207 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "" + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:208 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" + +#: website/public/showcase/ctf/index.html:213 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "" + +#: website/public/showcase/ctf/index.html:216 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "" + +#: website/public/showcase/ctf/index.html:224 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:226 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:234 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" + +#: website/public/showcase/ctf/index.html:251 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" + +#: website/public/showcase/ctf/index.html:259 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:261 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:262 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:263 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:264 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:265 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:266 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "" + +#: website/public/showcase/ctf/index.html:271 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:272 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" + +#. {ph0}: +#: website/public/showcase/ctf/index.html:279 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/ctf/index.html:284 +#: website/public/showcase/ctf/index.html:503 +#: website/public/showcase/ctf/index.html:527 +#: website/public/showcase/ctf/index.html:597 +#: website/public/showcase/ctf/index.html:744 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:293 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/showcase/ctf/index.html:302 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" + +#: website/public/showcase/ctf/index.html:308 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "" + +#: website/public/showcase/ctf/index.html:311 +#: website/public/showcase/ctf/index.html:347 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "" + +#: website/public/showcase/ctf/index.html:327 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" + +#: website/public/showcase/ctf/index.html:344 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "" + +#: website/public/showcase/ctf/index.html:359 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:372 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" + +#: website/public/showcase/ctf/index.html:380 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" + +#: website/public/showcase/ctf/index.html:388 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "" + +#: website/public/showcase/ctf/index.html:389 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:409 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" + +#: website/public/showcase/ctf/index.html:416 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "" + +#: website/public/showcase/ctf/index.html:422 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "" + +#: website/public/showcase/ctf/index.html:429 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:438 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" + +#: website/public/showcase/ctf/index.html:447 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "" + +#: website/public/showcase/ctf/index.html:448 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:458 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:466 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:474 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:482 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:490 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "" + +#: website/public/showcase/ctf/index.html:502 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "" + +#: website/public/showcase/ctf/index.html:526 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:555 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:559 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:563 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:567 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:572 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" + +#: website/public/showcase/ctf/index.html:579 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" + +#: website/public/showcase/ctf/index.html:587 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "" + +#: website/public/showcase/ctf/index.html:588 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" + +#: website/public/showcase/ctf/index.html:596 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:624 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" + +#: website/public/showcase/ctf/index.html:630 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "" + +#: website/public/showcase/ctf/index.html:636 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:637 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" + +#: website/public/showcase/ctf/index.html:647 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "" + +#: website/public/showcase/ctf/index.html:654 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "" + +#: website/public/showcase/ctf/index.html:659 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "" + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "" + +#: website/public/showcase/ctf/index.html:670 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "" + +#: website/public/showcase/ctf/index.html:671 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "" + +#: website/public/showcase/ctf/index.html:683 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" + +#: website/public/showcase/ctf/index.html:689 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "" + +#: website/public/showcase/ctf/index.html:690 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" + +#: website/public/showcase/ctf/index.html:697 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "" + +#: website/public/showcase/ctf/index.html:701 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:706 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" + +#: website/public/showcase/ctf/index.html:726 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "" + +#: website/public/showcase/ctf/index.html:727 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" + +#: website/public/showcase/ctf/index.html:733 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "" + +#: website/public/showcase/ctf/index.html:737 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "" + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:760 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" + +#: website/public/showcase/ctf/index.html:765 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" + +#: website/public/showcase/ctf/index.html:258 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/ctf/index.html:269 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "" + +#: website/public/showcase/ctf/index.html:284 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "" + +#: website/public/showcase/ctf/index.html:395 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "" + +#: website/public/showcase/ctf/index.html:401 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" + +#: website/public/showcase/ctf/index.html:453 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "" + +#: website/public/showcase/ctf/index.html:503 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "" + +#: website/public/showcase/ctf/index.html:527 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "" + +#: website/public/showcase/ctf/index.html:597 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "" + +#: website/public/showcase/ctf/index.html:671 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "" + +#: website/public/showcase/ctf/index.html:744 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "" + +#: website/public/showcase/ctf/index.html:788 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:113 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:203 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:206 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:208 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:212 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:229 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:240 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:243 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:244 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:245 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:253 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:257 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:261 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:264 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:276 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:287 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:288 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:295 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:299 +#: website/public/showcase/dx-ball/index.html:490 +#: website/public/showcase/dx-ball/index.html:511 +#: website/public/showcase/dx-ball/index.html:582 +#: website/public/showcase/dx-ball/index.html:736 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:308 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:321 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:327 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:338 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:348 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:354 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:357 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:361 +#: website/public/showcase/dx-ball/index.html:385 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:367 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:374 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:381 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:391 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:398 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:405 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:409 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:419 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:426 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:434 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:435 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:445 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:453 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:461 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:469 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:477 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:510 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:537 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:544 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:550 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:556 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:563 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:572 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:578 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:581 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:615 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:616 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:633 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:638 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:639 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:647 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:652 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:656 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:657 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:662 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:667 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:681 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:682 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:688 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:689 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:697 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:698 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:712 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:721 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:722 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:728 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:735 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:749 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:754 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:761 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:215 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:221 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:248 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:440 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:490 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:511 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:582 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:736 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:796 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/index.html:113 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:203 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "" + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "" + +#: website/public/showcase/index.html:205 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" + +#: website/public/showcase/index.html:212 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "" + +#: website/public/showcase/index.html:214 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "" + +#: website/public/showcase/index.html:215 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" + +#: website/public/showcase/index.html:221 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "" + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "" + +#: website/public/showcase/index.html:223 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "" + +#: website/public/showcase/index.html:224 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "" + +#: website/public/showcase/index.html:230 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "" + +#: website/public/showcase/index.html:232 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "" + +#: website/public/showcase/index.html:233 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "" + +#: website/public/showcase/index.html:240 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "" + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "" + +#: website/public/showcase/index.html:242 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "" + +#: website/public/showcase/index.html:244 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "" + +#: website/public/showcase/index.html:250 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "" + +#: website/public/showcase/index.html:251 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" + +#: website/public/showcase/index.html:258 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "" + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "" + +#: website/public/showcase/index.html:260 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "" + +#: website/public/showcase/index.html:261 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "" + +#: website/public/showcase/index.html:267 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "" + +#: website/public/showcase/index.html:269 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "" + +#: website/public/showcase/index.html:270 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" + +#: website/public/showcase/index.html:276 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "" + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "" + +#: website/public/showcase/index.html:278 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "" + +#: website/public/showcase/index.html:279 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "" + +#: website/public/showcase/index.html:281 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "" + +#: website/public/showcase/index.html:285 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "" + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "" + +#: website/public/showcase/index.html:288 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" + +#: website/public/showcase/index.html:294 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "" + +#: website/public/showcase/index.html:295 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "" + +#: website/public/showcase/index.html:296 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "" + +#: website/public/showcase/index.html:297 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "" + +#: website/public/showcase/index.html:299 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "" + +#: website/public/showcase/index.html:303 +msgctxt "page:showcase/index.html" +msgid "RL environments" +msgstr "" + +#: website/public/showcase/index.html:305 +msgctxt "page:showcase/index.html" +msgid "Build RL environments with REA" +msgstr "" + +#: website/public/showcase/index.html:306 +msgctxt "page:showcase/index.html" +msgid "" +"Record a web app session, turn its API into tools, and export an environment" +" an AI agent can use. Run it with AgentEnv, then add tasks and reward checks" +" for RL training or evaluation." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/index.html:311 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Read the guide{ph1} · {ph2}Watch the video{ph3}" +msgstr "" + +#: website/public/showcase/index.html:324 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "" + +#: website/public/showcase/index.html:325 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" + +#: website/public/showcase/index.html:329 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" + +#: website/public/showcase/index.html:348 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/notion/index.html:113 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "" + +#: website/public/showcase/notion/index.html:206 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:207 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "" + +#: website/public/showcase/notion/index.html:208 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" + +#: website/public/showcase/notion/index.html:212 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "" + +#: website/public/showcase/notion/index.html:216 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:218 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:232 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:239 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:247 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "" + +#: website/public/showcase/notion/index.html:251 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" + +#: website/public/showcase/notion/index.html:260 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:262 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:263 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:264 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "" + +#: website/public/showcase/notion/index.html:269 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:270 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" + +#. {ph0}: +#: website/public/showcase/notion/index.html:277 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/notion/index.html:281 +#: website/public/showcase/notion/index.html:354 +#: website/public/showcase/notion/index.html:383 +#: website/public/showcase/notion/index.html:414 +#: website/public/showcase/notion/index.html:442 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:290 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/showcase/notion/index.html:298 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" + +#: website/public/showcase/notion/index.html:303 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "" + +#: website/public/showcase/notion/index.html:304 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" + +#: website/public/showcase/notion/index.html:310 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "" + +#: website/public/showcase/notion/index.html:313 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "" + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:325 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:332 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" + +#: website/public/showcase/notion/index.html:341 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "" + +#: website/public/showcase/notion/index.html:342 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" + +#: website/public/showcase/notion/index.html:348 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:351 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:370 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" + +#: website/public/showcase/notion/index.html:377 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:380 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:400 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" + +#: website/public/showcase/notion/index.html:408 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:411 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:429 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" + +#: website/public/showcase/notion/index.html:436 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:439 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" + +#: website/public/showcase/notion/index.html:470 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:471 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" + +#: website/public/showcase/notion/index.html:477 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "" + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "" + +#: website/public/showcase/notion/index.html:503 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "" + +#: website/public/showcase/notion/index.html:505 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" + +#: website/public/showcase/notion/index.html:511 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" + +#: website/public/showcase/notion/index.html:515 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" + +#: website/public/showcase/notion/index.html:521 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "" + +#: website/public/showcase/notion/index.html:523 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "" + +#: website/public/showcase/notion/index.html:524 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" + +#: website/public/showcase/notion/index.html:529 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "" + +#: website/public/showcase/notion/index.html:534 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "" + +#: website/public/showcase/notion/index.html:541 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:550 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" + +#: website/public/showcase/notion/index.html:557 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" + +#: website/public/showcase/notion/index.html:564 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" + +#: website/public/showcase/notion/index.html:571 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:572 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:580 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" + +#: website/public/showcase/notion/index.html:588 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:595 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:603 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:610 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/notion/index.html:267 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "" + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "" + +#: website/public/showcase/notion/index.html:354 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:383 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:442 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:497 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "" + +#: website/public/showcase/notion/index.html:642 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/th04/index.html:113 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:203 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "" + +#: website/public/showcase/th04/index.html:206 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "" + +#: website/public/showcase/th04/index.html:208 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" + +#: website/public/showcase/th04/index.html:213 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "" + +#: website/public/showcase/th04/index.html:214 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "" + +#: website/public/showcase/th04/index.html:220 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:229 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:237 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" + +#: website/public/showcase/th04/index.html:253 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" + +#: website/public/showcase/th04/index.html:261 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:263 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:264 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:265 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:266 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:267 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "" + +#: website/public/showcase/th04/index.html:272 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "" + +#: website/public/showcase/th04/index.html:273 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" + +#. {ph0}: +#: website/public/showcase/th04/index.html:280 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/th04/index.html:285 +#: website/public/showcase/th04/index.html:341 +#: website/public/showcase/th04/index.html:518 +#: website/public/showcase/th04/index.html:552 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:294 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/showcase/th04/index.html:303 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:307 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:327 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" + +#: website/public/showcase/th04/index.html:335 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "" + +#: website/public/showcase/th04/index.html:340 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:355 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" + +#: website/public/showcase/th04/index.html:366 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:367 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" + +#: website/public/showcase/th04/index.html:375 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "" + +#: website/public/showcase/th04/index.html:378 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "" + +#: website/public/showcase/th04/index.html:387 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "" + +#: website/public/showcase/th04/index.html:396 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" + +#: website/public/showcase/th04/index.html:402 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:406 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "" + +#: website/public/showcase/th04/index.html:412 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:420 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" + +#: website/public/showcase/th04/index.html:429 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "" + +#: website/public/showcase/th04/index.html:433 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "" + +#: website/public/showcase/th04/index.html:442 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "" + +#: website/public/showcase/th04/index.html:450 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" + +#: website/public/showcase/th04/index.html:461 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "" + +#: website/public/showcase/th04/index.html:462 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:473 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:481 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:489 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:497 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:505 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "" + +#: website/public/showcase/th04/index.html:517 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "" + +#: website/public/showcase/th04/index.html:551 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:580 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:585 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:592 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:598 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:604 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" + +#: website/public/showcase/th04/index.html:613 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" + +#: website/public/showcase/th04/index.html:619 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "" + +#: website/public/showcase/th04/index.html:622 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "" + +#: website/public/showcase/th04/index.html:632 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:648 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" + +#: website/public/showcase/th04/index.html:668 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "" + +#: website/public/showcase/th04/index.html:669 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "" + +#: website/public/showcase/th04/index.html:677 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" + +#: website/public/showcase/th04/index.html:683 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "" + +#: website/public/showcase/th04/index.html:684 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" + +#: website/public/showcase/th04/index.html:698 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "" + +#: website/public/showcase/th04/index.html:703 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:704 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "" + +#: website/public/showcase/th04/index.html:707 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:708 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "" + +#: website/public/showcase/th04/index.html:711 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:712 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "" + +#: website/public/showcase/th04/index.html:718 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "" + +#: website/public/showcase/th04/index.html:719 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "" + +#: website/public/showcase/th04/index.html:724 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:729 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:736 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" + +#: website/public/showcase/th04/index.html:744 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" + +#: website/public/showcase/th04/index.html:753 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "" + +#: website/public/showcase/th04/index.html:754 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:760 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:766 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:775 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:784 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" + +#: website/public/showcase/th04/index.html:260 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/th04/index.html:270 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "" + +#: website/public/showcase/th04/index.html:285 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" + +#: website/public/showcase/th04/index.html:341 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "" + +#: website/public/showcase/th04/index.html:468 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "" + +#: website/public/showcase/th04/index.html:518 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "" + +#: website/public/showcase/th04/index.html:552 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "" + +#: website/public/showcase/th04/index.html:811 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "" + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "Преводът се обновява. Засега прочетете тази страница на английски." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "" + +#: website/public/assets/contributors.js:21 +#, python-brace-format +msgctxt "runtime" +msgid "Contributors: {count}" +msgstr "" + +#: website/public/assets/dino-demo.js:77 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "" + +#: website/public/assets/dino-demo.js:87 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "" + +#: website/public/assets/dino-demo.js:87 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "" + +#: website/public/assets/dino-demo.js:97 +msgctxt "runtime" +msgid "Play again" +msgstr "" + +#: website/public/assets/dino-demo.js:97 +#: website/public/assets/dino-demo.js:111 +msgctxt "runtime" +msgid "Play" +msgstr "" + +#: website/public/assets/dino-demo.js:112 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "" + +#: website/public/assets/dino-demo.js:147 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" + +#: website/public/assets/dino-demo.js:171 +msgctxt "runtime" +msgid "Pause" +msgstr "" + +#: website/public/assets/dino-demo.js:172 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "" + +#: website/public/assets/dino-demo.js:183 +#: website/public/assets/dino-demo.js:219 +#: website/public/assets/dino-demo.js:224 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "" + +#: website/public/assets/dino-demo.js:203 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "" + +#: website/public/assets/dino-demo.js:206 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "" + +#: website/public/assets/dino-demo.js:215 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "" + +#: website/public/assets/dino-demo.js:216 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "" + +#: website/public/assets/dino-demo.js:249 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" + +#: website/public/assets/dino-demo.js:252 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "" + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "" + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "" + +#: website/public/assets/main.js:21 +msgctxt "runtime" +msgid "Copied" +msgstr "" + +#: website/public/assets/main.js:23 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "" + +#: website/public/assets/main.js:32 +msgctxt "runtime" +msgid "Selected" +msgstr "" + +#: website/public/assets/main.js:34 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "" + +#: website/public/assets/main.js:158 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "" + +#: website/public/assets/theme.js:52 +msgctxt "runtime" +msgid "Switch to light mode" +msgstr "" + +#: website/public/assets/theme.js:53 +msgctxt "runtime" +msgid "Switch to dark mode" +msgstr "" + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:24 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:25 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:27 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:28 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:32 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:35 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:37 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:38 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:39 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:20 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:45 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:46 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:47 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:48 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:49 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:50 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:51 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:54 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:52 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:53 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:55 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:34 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:36 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:37 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:38 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:39 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:40 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:41 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:42 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:43 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:44 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:45 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:24 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:25 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:26 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:27 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:64 +#: website/public/assets/figures/th04-bullet-ring.svg:102 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:105 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:110 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "" diff --git a/website/locales/languages.json b/website/locales/languages.json index 2b396ce398..42cf5066f9 100644 --- a/website/locales/languages.json +++ b/website/locales/languages.json @@ -136,5 +136,11 @@ "name": "Română", "readme": "docs/readme/README_ro.md", "dir": "ltr" + }, + { + "code": "bg", + "name": "Български", + "readme": "docs/readme/README_bg.md", + "dir": "ltr" } ] diff --git a/website/locales/messages.pot b/website/locales/messages.pot index 9bd3f19ce5..04d088f3b9 100644 --- a/website/locales/messages.pot +++ b/website/locales/messages.pot @@ -6,51 +6,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: website/public/blog/index.html:111 +#: website/public/blog/index.html:113 msgctxt "page:blog/index.html" msgid "Skip to content" msgstr "" -#: website/public/blog/index.html:121 -#: website/public/blog/reverse-engineering-models/index.html:121 -#: website/public/blog/touhou-reconstruction/index.html:121 -#: website/public/contributors/index.html:122 -#: website/public/examples/dino-lab/index.html:122 website/public/faq/index.html:121 -#: website/public/first-investigation/index.html:121 -#: website/public/get-started/index.html:121 -#: website/public/guides/browser/index.html:121 website/public/guides/index.html:121 -#: website/public/guides/javascript/index.html:121 -#: website/public/guides/native/index.html:121 -#: website/public/guides/rl-environments/index.html:121 website/public/index.html:123 -#: website/public/showcase/aegis/index.html:122 -#: website/public/showcase/ctf/index.html:121 -#: website/public/showcase/dx-ball/index.html:121 website/public/showcase/index.html:121 -#: website/public/showcase/notion/index.html:121 -#: website/public/showcase/th04/index.html:121 -msgctxt "shared" -msgid "Get started" -msgstr "" - -#: website/public/blog/index.html:122 -#: website/public/blog/reverse-engineering-models/index.html:122 -#: website/public/blog/touhou-reconstruction/index.html:122 -#: website/public/contributors/index.html:123 -#: website/public/examples/dino-lab/index.html:123 website/public/faq/index.html:122 -#: website/public/first-investigation/index.html:122 -#: website/public/get-started/index.html:122 -#: website/public/guides/browser/index.html:122 website/public/guides/index.html:122 -#: website/public/guides/javascript/index.html:122 -#: website/public/guides/native/index.html:122 -#: website/public/guides/rl-environments/index.html:122 website/public/index.html:124 -#: website/public/showcase/aegis/index.html:123 -#: website/public/showcase/ctf/index.html:122 -#: website/public/showcase/dx-ball/index.html:122 website/public/showcase/index.html:122 -#: website/public/showcase/notion/index.html:122 -#: website/public/showcase/th04/index.html:122 -msgctxt "shared" -msgid "Showcases" -msgstr "" - #: website/public/blog/index.html:123 #: website/public/blog/reverse-engineering-models/index.html:123 #: website/public/blog/touhou-reconstruction/index.html:123 @@ -68,7 +28,7 @@ msgstr "" #: website/public/showcase/notion/index.html:123 #: website/public/showcase/th04/index.html:123 msgctxt "shared" -msgid "Blog" +msgid "Get started" msgstr "" #: website/public/blog/index.html:124 @@ -88,120 +48,120 @@ msgstr "" #: website/public/showcase/notion/index.html:124 #: website/public/showcase/th04/index.html:124 msgctxt "shared" +msgid "Showcases" +msgstr "" + +#: website/public/blog/index.html:125 +#: website/public/blog/reverse-engineering-models/index.html:125 +#: website/public/blog/touhou-reconstruction/index.html:125 +#: website/public/contributors/index.html:126 +#: website/public/examples/dino-lab/index.html:126 website/public/faq/index.html:125 +#: website/public/first-investigation/index.html:125 +#: website/public/get-started/index.html:125 +#: website/public/guides/browser/index.html:125 website/public/guides/index.html:125 +#: website/public/guides/javascript/index.html:125 +#: website/public/guides/native/index.html:125 +#: website/public/guides/rl-environments/index.html:125 website/public/index.html:127 +#: website/public/showcase/aegis/index.html:126 +#: website/public/showcase/ctf/index.html:125 +#: website/public/showcase/dx-ball/index.html:125 website/public/showcase/index.html:125 +#: website/public/showcase/notion/index.html:125 +#: website/public/showcase/th04/index.html:125 +msgctxt "shared" +msgid "Blog" +msgstr "" + +#: website/public/blog/index.html:126 +#: website/public/blog/reverse-engineering-models/index.html:126 +#: website/public/blog/touhou-reconstruction/index.html:126 +#: website/public/contributors/index.html:127 +#: website/public/examples/dino-lab/index.html:127 website/public/faq/index.html:126 +#: website/public/first-investigation/index.html:126 +#: website/public/get-started/index.html:126 +#: website/public/guides/browser/index.html:126 website/public/guides/index.html:126 +#: website/public/guides/javascript/index.html:126 +#: website/public/guides/native/index.html:126 +#: website/public/guides/rl-environments/index.html:126 website/public/index.html:128 +#: website/public/showcase/aegis/index.html:127 +#: website/public/showcase/ctf/index.html:126 +#: website/public/showcase/dx-ball/index.html:126 website/public/showcase/index.html:126 +#: website/public/showcase/notion/index.html:126 +#: website/public/showcase/th04/index.html:126 +msgctxt "shared" msgid "Guides" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/index.html:201 +#: website/public/blog/index.html:203 #, python-brace-format msgctxt "page:blog/index.html" msgid "{ph0}Home{ph1} / Blog" msgstr "" -#: website/public/blog/index.html:202 +#: website/public/blog/index.html:204 msgctxt "page:blog/index.html" msgid "Blog." msgstr "" -#: website/public/blog/index.html:203 +#: website/public/blog/index.html:205 msgctxt "page:blog/index.html" msgid "Thoughts on reverse engineering." msgstr "" #. {ph0}:
-#: website/public/blog/index.html:207 +#: website/public/blog/index.html:209 #, python-brace-format msgctxt "page:blog/index.html" msgid "Model specialization{ph0}Essay" msgstr "" -#: website/public/blog/index.html:209 +#: website/public/blog/index.html:211 msgctxt "page:blog/index.html" msgid "Does reverse engineering need a bigger model?" msgstr "" -#: website/public/blog/index.html:210 +#: website/public/blog/index.html:212 msgctxt "page:blog/index.html" msgid "" "What Touhou reconstruction suggests about general models, specialist models and " "learning from compiler feedback." msgstr "" -#: website/public/blog/index.html:214 website/public/blog/index.html:229 +#: website/public/blog/index.html:216 website/public/blog/index.html:231 msgctxt "page:blog/index.html" msgid "Read the article" msgstr "" -#: website/public/blog/index.html:217 +#: website/public/blog/index.html:219 msgctxt "page:blog/index.html" msgid "By N0zoM1z0 · 13 October 2026" msgstr "" #. {ph0}:
-#: website/public/blog/index.html:221 +#: website/public/blog/index.html:223 #, python-brace-format msgctxt "page:blog/index.html" msgid "Game reconstruction{ph0}Essay" msgstr "" -#: website/public/blog/index.html:223 +#: website/public/blog/index.html:225 msgctxt "page:blog/index.html" msgid "The industrial revolution in reverse engineering" msgstr "" -#: website/public/blog/index.html:224 +#: website/public/blog/index.html:226 msgctxt "page:blog/index.html" msgid "" "What manual RE and reconstructing TH08, TH095 and TH04 taught me about agents, " "verification and knowledge that compounds across projects." msgstr "" -#: website/public/blog/index.html:232 +#: website/public/blog/index.html:234 msgctxt "page:blog/index.html" msgid "By N0zoM1z0 · 10 October 2026" msgstr "" -#: website/public/blog/index.html:244 -#: website/public/blog/reverse-engineering-models/index.html:883 -#: website/public/blog/touhou-reconstruction/index.html:1080 -#: website/public/contributors/index.html:1131 -#: website/public/examples/dino-lab/index.html:475 website/public/faq/index.html:573 -#: website/public/first-investigation/index.html:534 -#: website/public/get-started/index.html:1851 -#: website/public/guides/browser/index.html:507 website/public/guides/index.html:301 -#: website/public/guides/javascript/index.html:511 -#: website/public/guides/native/index.html:512 -#: website/public/guides/rl-environments/index.html:498 website/public/index.html:1303 -#: website/public/showcase/aegis/index.html:815 -#: website/public/showcase/ctf/index.html:777 -#: website/public/showcase/dx-ball/index.html:785 website/public/showcase/index.html:337 -#: website/public/showcase/notion/index.html:631 -#: website/public/showcase/th04/index.html:800 -msgctxt "shared" -msgid "Contributors" -msgstr "" - -#: website/public/blog/index.html:245 -#: website/public/blog/reverse-engineering-models/index.html:884 -#: website/public/blog/touhou-reconstruction/index.html:1081 -#: website/public/contributors/index.html:1132 -#: website/public/examples/dino-lab/index.html:476 website/public/faq/index.html:574 -#: website/public/first-investigation/index.html:535 -#: website/public/get-started/index.html:1852 -#: website/public/guides/browser/index.html:508 website/public/guides/index.html:302 -#: website/public/guides/javascript/index.html:512 -#: website/public/guides/native/index.html:513 -#: website/public/guides/rl-environments/index.html:499 website/public/index.html:1304 -#: website/public/showcase/aegis/index.html:816 -#: website/public/showcase/ctf/index.html:778 -#: website/public/showcase/dx-ball/index.html:786 website/public/showcase/index.html:338 -#: website/public/showcase/notion/index.html:632 -#: website/public/showcase/th04/index.html:801 -msgctxt "shared" -msgid "Source" -msgstr "" - #: website/public/blog/index.html:246 #: website/public/blog/reverse-engineering-models/index.html:885 #: website/public/blog/touhou-reconstruction/index.html:1082 @@ -219,7 +179,7 @@ msgstr "" #: website/public/showcase/notion/index.html:633 #: website/public/showcase/th04/index.html:802 msgctxt "shared" -msgid "MIT license" +msgid "Contributors" msgstr "" #: website/public/blog/index.html:247 @@ -239,7 +199,7 @@ msgstr "" #: website/public/showcase/notion/index.html:634 #: website/public/showcase/th04/index.html:803 msgctxt "shared" -msgid "Join the community" +msgid "Source" msgstr "" #: website/public/blog/index.html:248 @@ -259,27 +219,67 @@ msgstr "" #: website/public/showcase/notion/index.html:635 #: website/public/showcase/th04/index.html:804 msgctxt "shared" +msgid "MIT license" +msgstr "" + +#: website/public/blog/index.html:249 +#: website/public/blog/reverse-engineering-models/index.html:888 +#: website/public/blog/touhou-reconstruction/index.html:1085 +#: website/public/contributors/index.html:1136 +#: website/public/examples/dino-lab/index.html:480 website/public/faq/index.html:578 +#: website/public/first-investigation/index.html:539 +#: website/public/get-started/index.html:1856 +#: website/public/guides/browser/index.html:512 website/public/guides/index.html:306 +#: website/public/guides/javascript/index.html:516 +#: website/public/guides/native/index.html:517 +#: website/public/guides/rl-environments/index.html:503 website/public/index.html:1308 +#: website/public/showcase/aegis/index.html:820 +#: website/public/showcase/ctf/index.html:782 +#: website/public/showcase/dx-ball/index.html:790 website/public/showcase/index.html:342 +#: website/public/showcase/notion/index.html:636 +#: website/public/showcase/th04/index.html:805 +msgctxt "shared" +msgid "Join the community" +msgstr "" + +#: website/public/blog/index.html:250 +#: website/public/blog/reverse-engineering-models/index.html:889 +#: website/public/blog/touhou-reconstruction/index.html:1086 +#: website/public/contributors/index.html:1137 +#: website/public/examples/dino-lab/index.html:481 website/public/faq/index.html:579 +#: website/public/first-investigation/index.html:540 +#: website/public/get-started/index.html:1857 +#: website/public/guides/browser/index.html:513 website/public/guides/index.html:307 +#: website/public/guides/javascript/index.html:517 +#: website/public/guides/native/index.html:518 +#: website/public/guides/rl-environments/index.html:504 website/public/index.html:1309 +#: website/public/showcase/aegis/index.html:821 +#: website/public/showcase/ctf/index.html:783 +#: website/public/showcase/dx-ball/index.html:791 website/public/showcase/index.html:343 +#: website/public/showcase/notion/index.html:637 +#: website/public/showcase/th04/index.html:806 +msgctxt "shared" msgid "Follow us on X" msgstr "" #. {ph0}: -#: website/public/blog/index.html:253 -#: website/public/blog/reverse-engineering-models/index.html:892 -#: website/public/blog/touhou-reconstruction/index.html:1089 -#: website/public/contributors/index.html:1140 -#: website/public/examples/dino-lab/index.html:484 website/public/faq/index.html:582 -#: website/public/first-investigation/index.html:543 -#: website/public/get-started/index.html:1860 -#: website/public/guides/browser/index.html:516 website/public/guides/index.html:310 -#: website/public/guides/javascript/index.html:520 -#: website/public/guides/native/index.html:521 -#: website/public/guides/rl-environments/index.html:507 website/public/index.html:1312 -#: website/public/showcase/aegis/index.html:824 -#: website/public/showcase/ctf/index.html:786 -#: website/public/showcase/dx-ball/index.html:794 website/public/showcase/index.html:346 -#: website/public/showcase/notion/index.html:640 -#: website/public/showcase/th04/index.html:809 +#: website/public/blog/index.html:255 +#: website/public/blog/reverse-engineering-models/index.html:894 +#: website/public/blog/touhou-reconstruction/index.html:1091 +#: website/public/contributors/index.html:1142 +#: website/public/examples/dino-lab/index.html:486 website/public/faq/index.html:584 +#: website/public/first-investigation/index.html:545 +#: website/public/get-started/index.html:1862 +#: website/public/guides/browser/index.html:518 website/public/guides/index.html:312 +#: website/public/guides/javascript/index.html:522 +#: website/public/guides/native/index.html:523 +#: website/public/guides/rl-environments/index.html:509 website/public/index.html:1314 +#: website/public/showcase/aegis/index.html:826 +#: website/public/showcase/ctf/index.html:788 +#: website/public/showcase/dx-ball/index.html:796 website/public/showcase/index.html:348 +#: website/public/showcase/notion/index.html:642 +#: website/public/showcase/th04/index.html:811 #, python-brace-format msgctxt "shared" msgid "{ph0}↑{ph1} Top" @@ -297,142 +297,142 @@ msgid "" "agents." msgstr "" -#: website/public/blog/index.html:83 website/public/blog/index.html:96 -#: website/public/blog/reverse-engineering-models/index.html:83 -#: website/public/blog/reverse-engineering-models/index.html:96 -#: website/public/blog/touhou-reconstruction/index.html:83 -#: website/public/blog/touhou-reconstruction/index.html:96 -#: website/public/contributors/index.html:83 website/public/contributors/index.html:96 -#: website/public/examples/dino-lab/index.html:83 -#: website/public/examples/dino-lab/index.html:96 website/public/faq/index.html:83 -#: website/public/faq/index.html:96 website/public/first-investigation/index.html:83 -#: website/public/first-investigation/index.html:96 -#: website/public/get-started/index.html:83 website/public/get-started/index.html:96 -#: website/public/guides/browser/index.html:83 -#: website/public/guides/browser/index.html:96 website/public/guides/index.html:83 -#: website/public/guides/index.html:96 website/public/guides/javascript/index.html:83 -#: website/public/guides/javascript/index.html:96 -#: website/public/guides/native/index.html:83 website/public/guides/native/index.html:96 -#: website/public/guides/rl-environments/index.html:83 -#: website/public/guides/rl-environments/index.html:96 website/public/index.html:83 -#: website/public/index.html:96 website/public/showcase/aegis/index.html:83 -#: website/public/showcase/aegis/index.html:96 website/public/showcase/ctf/index.html:83 -#: website/public/showcase/ctf/index.html:96 -#: website/public/showcase/dx-ball/index.html:83 -#: website/public/showcase/dx-ball/index.html:96 website/public/showcase/index.html:83 -#: website/public/showcase/index.html:96 website/public/showcase/notion/index.html:83 -#: website/public/showcase/notion/index.html:96 -#: website/public/showcase/th04/index.html:83 website/public/showcase/th04/index.html:96 +#: website/public/blog/index.html:85 website/public/blog/index.html:98 +#: website/public/blog/reverse-engineering-models/index.html:85 +#: website/public/blog/reverse-engineering-models/index.html:98 +#: website/public/blog/touhou-reconstruction/index.html:85 +#: website/public/blog/touhou-reconstruction/index.html:98 +#: website/public/contributors/index.html:85 website/public/contributors/index.html:98 +#: website/public/examples/dino-lab/index.html:85 +#: website/public/examples/dino-lab/index.html:98 website/public/faq/index.html:85 +#: website/public/faq/index.html:98 website/public/first-investigation/index.html:85 +#: website/public/first-investigation/index.html:98 +#: website/public/get-started/index.html:85 website/public/get-started/index.html:98 +#: website/public/guides/browser/index.html:85 +#: website/public/guides/browser/index.html:98 website/public/guides/index.html:85 +#: website/public/guides/index.html:98 website/public/guides/javascript/index.html:85 +#: website/public/guides/javascript/index.html:98 +#: website/public/guides/native/index.html:85 website/public/guides/native/index.html:98 +#: website/public/guides/rl-environments/index.html:85 +#: website/public/guides/rl-environments/index.html:98 website/public/index.html:85 +#: website/public/index.html:98 website/public/showcase/aegis/index.html:85 +#: website/public/showcase/aegis/index.html:98 website/public/showcase/ctf/index.html:85 +#: website/public/showcase/ctf/index.html:98 +#: website/public/showcase/dx-ball/index.html:85 +#: website/public/showcase/dx-ball/index.html:98 website/public/showcase/index.html:85 +#: website/public/showcase/index.html:98 website/public/showcase/notion/index.html:85 +#: website/public/showcase/notion/index.html:98 +#: website/public/showcase/th04/index.html:85 website/public/showcase/th04/index.html:98 msgctxt "shared" msgid "REA: Find out how software works. Reverse engineering with your coding agent." msgstr "" -#: website/public/blog/index.html:116 -#: website/public/blog/reverse-engineering-models/index.html:116 -#: website/public/blog/touhou-reconstruction/index.html:116 -#: website/public/contributors/index.html:117 -#: website/public/examples/dino-lab/index.html:117 website/public/faq/index.html:116 -#: website/public/first-investigation/index.html:116 -#: website/public/get-started/index.html:116 -#: website/public/guides/browser/index.html:116 website/public/guides/index.html:116 -#: website/public/guides/javascript/index.html:116 -#: website/public/guides/native/index.html:116 -#: website/public/guides/rl-environments/index.html:116 website/public/index.html:118 -#: website/public/showcase/aegis/index.html:117 -#: website/public/showcase/ctf/index.html:116 -#: website/public/showcase/dx-ball/index.html:116 website/public/showcase/index.html:116 -#: website/public/showcase/notion/index.html:116 -#: website/public/showcase/th04/index.html:116 +#: website/public/blog/index.html:118 +#: website/public/blog/reverse-engineering-models/index.html:118 +#: website/public/blog/touhou-reconstruction/index.html:118 +#: website/public/contributors/index.html:119 +#: website/public/examples/dino-lab/index.html:119 website/public/faq/index.html:118 +#: website/public/first-investigation/index.html:118 +#: website/public/get-started/index.html:118 +#: website/public/guides/browser/index.html:118 website/public/guides/index.html:118 +#: website/public/guides/javascript/index.html:118 +#: website/public/guides/native/index.html:118 +#: website/public/guides/rl-environments/index.html:118 website/public/index.html:120 +#: website/public/showcase/aegis/index.html:119 +#: website/public/showcase/ctf/index.html:118 +#: website/public/showcase/dx-ball/index.html:118 website/public/showcase/index.html:118 +#: website/public/showcase/notion/index.html:118 +#: website/public/showcase/th04/index.html:118 msgctxt "shared" msgid "REA home" msgstr "" -#: website/public/blog/index.html:120 -#: website/public/blog/reverse-engineering-models/index.html:120 -#: website/public/blog/touhou-reconstruction/index.html:120 -#: website/public/contributors/index.html:121 -#: website/public/examples/dino-lab/index.html:121 website/public/faq/index.html:120 -#: website/public/first-investigation/index.html:120 -#: website/public/get-started/index.html:120 -#: website/public/guides/browser/index.html:120 website/public/guides/index.html:120 -#: website/public/guides/javascript/index.html:120 -#: website/public/guides/native/index.html:120 -#: website/public/guides/rl-environments/index.html:120 website/public/index.html:122 -#: website/public/showcase/aegis/index.html:121 -#: website/public/showcase/ctf/index.html:120 -#: website/public/showcase/dx-ball/index.html:120 website/public/showcase/index.html:120 -#: website/public/showcase/notion/index.html:120 -#: website/public/showcase/th04/index.html:120 +#: website/public/blog/index.html:122 +#: website/public/blog/reverse-engineering-models/index.html:122 +#: website/public/blog/touhou-reconstruction/index.html:122 +#: website/public/contributors/index.html:123 +#: website/public/examples/dino-lab/index.html:123 website/public/faq/index.html:122 +#: website/public/first-investigation/index.html:122 +#: website/public/get-started/index.html:122 +#: website/public/guides/browser/index.html:122 website/public/guides/index.html:122 +#: website/public/guides/javascript/index.html:122 +#: website/public/guides/native/index.html:122 +#: website/public/guides/rl-environments/index.html:122 website/public/index.html:124 +#: website/public/showcase/aegis/index.html:123 +#: website/public/showcase/ctf/index.html:122 +#: website/public/showcase/dx-ball/index.html:122 website/public/showcase/index.html:122 +#: website/public/showcase/notion/index.html:122 +#: website/public/showcase/th04/index.html:122 msgctxt "shared" msgid "Main navigation" msgstr "" -#: website/public/blog/index.html:137 -#: website/public/blog/reverse-engineering-models/index.html:137 -#: website/public/blog/touhou-reconstruction/index.html:137 -#: website/public/contributors/index.html:138 -#: website/public/examples/dino-lab/index.html:138 website/public/faq/index.html:137 -#: website/public/first-investigation/index.html:137 -#: website/public/get-started/index.html:137 -#: website/public/guides/browser/index.html:137 website/public/guides/index.html:137 -#: website/public/guides/javascript/index.html:137 -#: website/public/guides/native/index.html:137 -#: website/public/guides/rl-environments/index.html:137 website/public/index.html:139 -#: website/public/showcase/aegis/index.html:138 -#: website/public/showcase/ctf/index.html:137 -#: website/public/showcase/dx-ball/index.html:137 website/public/showcase/index.html:137 -#: website/public/showcase/notion/index.html:137 -#: website/public/showcase/th04/index.html:137 +#: website/public/blog/index.html:139 +#: website/public/blog/reverse-engineering-models/index.html:139 +#: website/public/blog/touhou-reconstruction/index.html:139 +#: website/public/contributors/index.html:140 +#: website/public/examples/dino-lab/index.html:140 website/public/faq/index.html:139 +#: website/public/first-investigation/index.html:139 +#: website/public/get-started/index.html:139 +#: website/public/guides/browser/index.html:139 website/public/guides/index.html:139 +#: website/public/guides/javascript/index.html:139 +#: website/public/guides/native/index.html:139 +#: website/public/guides/rl-environments/index.html:139 website/public/index.html:141 +#: website/public/showcase/aegis/index.html:140 +#: website/public/showcase/ctf/index.html:139 +#: website/public/showcase/dx-ball/index.html:139 website/public/showcase/index.html:139 +#: website/public/showcase/notion/index.html:139 +#: website/public/showcase/th04/index.html:139 msgctxt "shared" msgid "REA on GitHub" msgstr "" -#: website/public/blog/index.html:157 -#: website/public/blog/reverse-engineering-models/index.html:157 -#: website/public/blog/touhou-reconstruction/index.html:157 -#: website/public/contributors/index.html:158 -#: website/public/examples/dino-lab/index.html:158 website/public/faq/index.html:157 -#: website/public/first-investigation/index.html:157 -#: website/public/get-started/index.html:157 -#: website/public/guides/browser/index.html:157 website/public/guides/index.html:157 -#: website/public/guides/javascript/index.html:157 -#: website/public/guides/native/index.html:157 -#: website/public/guides/rl-environments/index.html:157 website/public/index.html:159 -#: website/public/showcase/aegis/index.html:158 -#: website/public/showcase/ctf/index.html:157 -#: website/public/showcase/dx-ball/index.html:157 website/public/showcase/index.html:157 -#: website/public/showcase/notion/index.html:157 -#: website/public/showcase/th04/index.html:157 +#: website/public/blog/index.html:159 +#: website/public/blog/reverse-engineering-models/index.html:159 +#: website/public/blog/touhou-reconstruction/index.html:159 +#: website/public/contributors/index.html:160 +#: website/public/examples/dino-lab/index.html:160 website/public/faq/index.html:159 +#: website/public/first-investigation/index.html:159 +#: website/public/get-started/index.html:159 +#: website/public/guides/browser/index.html:159 website/public/guides/index.html:159 +#: website/public/guides/javascript/index.html:159 +#: website/public/guides/native/index.html:159 +#: website/public/guides/rl-environments/index.html:159 website/public/index.html:161 +#: website/public/showcase/aegis/index.html:160 +#: website/public/showcase/ctf/index.html:159 +#: website/public/showcase/dx-ball/index.html:159 website/public/showcase/index.html:159 +#: website/public/showcase/notion/index.html:159 +#: website/public/showcase/th04/index.html:159 msgctxt "shared" msgid "Join REA on Discord" msgstr "" -#: website/public/blog/index.html:176 -#: website/public/blog/reverse-engineering-models/index.html:176 -#: website/public/blog/touhou-reconstruction/index.html:176 -#: website/public/contributors/index.html:177 -#: website/public/examples/dino-lab/index.html:177 website/public/faq/index.html:176 -#: website/public/first-investigation/index.html:176 -#: website/public/get-started/index.html:176 -#: website/public/guides/browser/index.html:176 website/public/guides/index.html:176 -#: website/public/guides/javascript/index.html:176 -#: website/public/guides/native/index.html:176 -#: website/public/guides/rl-environments/index.html:176 website/public/index.html:178 -#: website/public/showcase/aegis/index.html:177 -#: website/public/showcase/ctf/index.html:176 -#: website/public/showcase/dx-ball/index.html:176 website/public/showcase/index.html:176 -#: website/public/showcase/notion/index.html:176 -#: website/public/showcase/th04/index.html:176 +#: website/public/blog/index.html:178 +#: website/public/blog/reverse-engineering-models/index.html:178 +#: website/public/blog/touhou-reconstruction/index.html:178 +#: website/public/contributors/index.html:179 +#: website/public/examples/dino-lab/index.html:179 website/public/faq/index.html:178 +#: website/public/first-investigation/index.html:178 +#: website/public/get-started/index.html:178 +#: website/public/guides/browser/index.html:178 website/public/guides/index.html:178 +#: website/public/guides/javascript/index.html:178 +#: website/public/guides/native/index.html:178 +#: website/public/guides/rl-environments/index.html:178 website/public/index.html:180 +#: website/public/showcase/aegis/index.html:179 +#: website/public/showcase/ctf/index.html:178 +#: website/public/showcase/dx-ball/index.html:178 website/public/showcase/index.html:178 +#: website/public/showcase/notion/index.html:178 +#: website/public/showcase/th04/index.html:178 msgctxt "shared" msgid "Follow REA on X" msgstr "" -#: website/public/blog/index.html:253 +#: website/public/blog/index.html:255 msgctxt "page:blog/index.html" msgid "Back to top" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:111 +#: website/public/blog/reverse-engineering-models/index.html:113 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Skip to content" msgstr "" @@ -441,35 +441,35 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/blog/reverse-engineering-models/index.html:201 +#: website/public/blog/reverse-engineering-models/index.html:203 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Models and RE" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:204 +#: website/public/blog/reverse-engineering-models/index.html:206 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Essay" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:205 +#: website/public/blog/reverse-engineering-models/index.html:207 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Does reverse engineering need a bigger model?" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:206 +#: website/public/blog/reverse-engineering-models/index.html:208 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "By N0zoM1z0 · 13 October 2026" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:208 +#: website/public/blog/reverse-engineering-models/index.html:210 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Takeaway" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:210 +#: website/public/blog/reverse-engineering-models/index.html:212 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -479,7 +479,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:218 +#: website/public/blog/reverse-engineering-models/index.html:220 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -489,7 +489,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:225 +#: website/public/blog/reverse-engineering-models/index.html:227 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -499,7 +499,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:230 +#: website/public/blog/reverse-engineering-models/index.html:232 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -509,7 +509,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:237 +#: website/public/blog/reverse-engineering-models/index.html:239 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -517,14 +517,14 @@ msgid "" "want from the whole agent." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:248 +#: website/public/blog/reverse-engineering-models/index.html:250 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "In this article" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:250 +#: website/public/blog/reverse-engineering-models/index.html:252 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}What better models changed{ph1}" @@ -532,7 +532,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:251 +#: website/public/blog/reverse-engineering-models/index.html:253 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}Why specialize?{ph1}" @@ -540,7 +540,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:252 +#: website/public/blog/reverse-engineering-models/index.html:254 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}Where experience lives{ph1}" @@ -548,7 +548,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:253 +#: website/public/blog/reverse-engineering-models/index.html:255 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}Learning the next experiment{ph1}" @@ -556,7 +556,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:254 +#: website/public/blog/reverse-engineering-models/index.html:256 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}RE and reinforcement learning{ph1}" @@ -564,7 +564,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:255 +#: website/public/blog/reverse-engineering-models/index.html:257 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}When the oracle is wrong{ph1}" @@ -572,7 +572,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:256 +#: website/public/blog/reverse-engineering-models/index.html:258 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}A comparison worth running{ph1}" @@ -580,18 +580,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:257 +#: website/public/blog/reverse-engineering-models/index.html:259 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "{ph0}What kind of agent?{ph1}" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:265 +#: website/public/blog/reverse-engineering-models/index.html:267 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "What better models changed" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:266 +#: website/public/blog/reverse-engineering-models/index.html:268 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Since August 2026, I have been exploring how much reverse engineering an agent can " @@ -600,7 +600,7 @@ msgid "" "repositories have kept a record of what each session managed to recover." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:274 +#: website/public/blog/reverse-engineering-models/index.html:276 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Much of that work aims at exact reconstruction: we compile the maintained source under" @@ -609,12 +609,12 @@ msgid "" "made that progress possible." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:281 +#: website/public/blog/reverse-engineering-models/index.html:283 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "The temporary values had to stay alive together" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:282 +#: website/public/blog/reverse-engineering-models/index.html:284 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Much of a TH09 attack function's logic had already been reconstructed, but the " @@ -631,7 +631,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616" #. > #. {ph3}: -#: website/public/blog/reverse-engineering-models/index.html:289 +#: website/public/blog/reverse-engineering-models/index.html:291 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -640,7 +640,7 @@ msgid "" "useful hypothesis about how long those temporary values needed to stay alive." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:303 +#: website/public/blog/reverse-engineering-models/index.html:305 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "The function produced temporary results and copied them into animation positions. In " @@ -651,7 +651,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:310 +#: website/public/blog/reverse-engineering-models/index.html:312 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -660,7 +660,7 @@ msgid "" "experiments, {ph0}a clean rebuild confirmed that the full function matched{ph1}." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:319 +#: website/public/blog/reverse-engineering-models/index.html:321 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "What interests me is how the discovery and the tests worked together. The lifetime " @@ -668,7 +668,7 @@ msgid "" "hypothesis into a source arrangement that matched." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:325 +#: website/public/blog/reverse-engineering-models/index.html:327 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "A different control-flow graph" msgstr "" @@ -677,7 +677,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/f8d12d72aaf02212ee1b585a8f3f86d7ed000269" #. > #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:326 +#: website/public/blog/reverse-engineering-models/index.html:328 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -695,7 +695,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0" #. > #. {ph3}: -#: website/public/blog/reverse-engineering-models/index.html:337 +#: website/public/blog/reverse-engineering-models/index.html:339 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -707,7 +707,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:349 +#: website/public/blog/reverse-engineering-models/index.html:351 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -717,7 +717,7 @@ msgid "" "surrounding work." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:358 +#: website/public/blog/reverse-engineering-models/index.html:360 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "At the same time, the later sessions started with earlier source and recorded " @@ -726,7 +726,7 @@ msgid "" "the effect of the model from the experience it inherited." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:365 +#: website/public/blog/reverse-engineering-models/index.html:367 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "This is where the question becomes interesting to me. Some of the progress came from " @@ -735,12 +735,12 @@ msgid "" "much could a model learn through repeated experience with that compiler and code?" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:375 +#: website/public/blog/reverse-engineering-models/index.html:377 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Why might a specialist do well?" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:376 +#: website/public/blog/reverse-engineering-models/index.html:378 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Touhou gives us a concrete reason to expect that experience to help. Much of the game " @@ -749,7 +749,7 @@ msgid "" "helper arrangements have supplied hypotheses across games." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:383 +#: website/public/blog/reverse-engineering-models/index.html:385 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Those source patterns become more specific when we include the compiler. Under a " @@ -764,7 +764,7 @@ msgstr "" #. > #. {ph3}: Supervisor::LoadDat #. {ph4}: -#: website/public/blog/reverse-engineering-models/index.html:389 +#: website/public/blog/reverse-engineering-models/index.html:391 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -775,14 +775,14 @@ msgid "" "{ph3}{ph4}." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:403 +#: website/public/blog/reverse-engineering-models/index.html:405 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Reusing that pattern for the file-size variable produced the required layout without " "adding storage. The full function then matched." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:408 +#: website/public/blog/reverse-engineering-models/index.html:410 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "This is the sort of narrow detail a general model may not know when it arrives. A " @@ -790,7 +790,7 @@ msgid "" "source variations are worth testing first." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:414 +#: website/public/blog/reverse-engineering-models/index.html:416 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "The opportunity is especially clear in final matching problems where we already " @@ -804,7 +804,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th04/commit/6dce0a79d5b931f0e2a08475b90e0c33d2321b98" #. > #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:422 +#: website/public/blog/reverse-engineering-models/index.html:424 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -816,14 +816,14 @@ msgid "" " part of what a specialist would need to learn." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:438 +#: website/public/blog/reverse-engineering-models/index.html:440 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Where should that experience live?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:439 +#: website/public/blog/reverse-engineering-models/index.html:441 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -833,7 +833,7 @@ msgid "" " along with the source and failed experiments that made them useful." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:448 +#: website/public/blog/reverse-engineering-models/index.html:450 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "By retrieving that record, an agent can start with a known result and inspect how we " @@ -845,7 +845,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e" #. > #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:454 +#: website/public/blog/reverse-engineering-models/index.html:456 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -857,7 +857,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:465 +#: website/public/blog/reverse-engineering-models/index.html:467 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -868,7 +868,7 @@ msgid "" "only the beginning of that process." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:475 +#: website/public/blog/reverse-engineering-models/index.html:477 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "For that reason, I would include a smaller general model with good retrieval in any " @@ -876,12 +876,12 @@ msgid "" "training adds: better candidate generation, better decisions after feedback, or both." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:483 +#: website/public/blog/reverse-engineering-models/index.html:485 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Learning the next useful experiment" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:484 +#: website/public/blog/reverse-engineering-models/index.html:486 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Those decisions after feedback are what I would most like to study. In agentic " @@ -890,7 +890,7 @@ msgid "" "suggest a more useful next experiment." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:491 +#: website/public/blog/reverse-engineering-models/index.html:493 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Consider the temporary-results example again. Its final source shows the arrangement " @@ -898,66 +898,66 @@ msgid "" "following experiments helped identify what still needed to change." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:504 +#: website/public/blog/reverse-engineering-models/index.html:506 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Experiment" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:505 +#: website/public/blog/reverse-engineering-models/index.html:507 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "What its result taught us" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:510 +#: website/public/blog/reverse-engineering-models/index.html:512 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Try a different way to copy the results" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:511 +#: website/public/blog/reverse-engineering-models/index.html:513 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "The copy code changes, but the function still differs." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:516 +#: website/public/blog/reverse-engineering-models/index.html:518 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Use the returned values directly" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:517 +#: website/public/blog/reverse-engineering-models/index.html:519 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Copying follows the original pattern, but temporary storage still differs." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:523 +#: website/public/blog/reverse-engineering-models/index.html:525 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Keep the temporary results alive together" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:524 +#: website/public/blog/reverse-engineering-models/index.html:526 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "They get separate storage, but one still overlaps a value used later for collision " "checks." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:530 +#: website/public/blog/reverse-engineering-models/index.html:532 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Keep the collision-check value separate" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:531 +#: website/public/blog/reverse-engineering-models/index.html:533 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "A clean rebuild confirms the complete match." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:536 +#: website/public/blog/reverse-engineering-models/index.html:538 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Selected experiments from the attack-function reconstruction above, grouped by what " "they taught us." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:540 +#: website/public/blog/reverse-engineering-models/index.html:542 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "A training record that keeps this sequence can teach more than the final source alone." @@ -968,7 +968,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:547 +#: website/public/blog/reverse-engineering-models/index.html:549 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -978,7 +978,7 @@ msgid "" "source representation or inspect the evidence again." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:556 +#: website/public/blog/reverse-engineering-models/index.html:558 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Learning to make those choices requires autonomy. Sometimes the useful next step is " @@ -987,12 +987,12 @@ msgid "" "the model to learn." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:565 +#: website/public/blog/reverse-engineering-models/index.html:567 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Why RE is interesting for reinforcement learning" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:566 +#: website/public/blog/reverse-engineering-models/index.html:568 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Bounded reconstruction gives us a practical environment for studying these choices. " @@ -1001,7 +1001,7 @@ msgid "" "that observation to choose its next step." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:573 +#: website/public/blog/reverse-engineering-models/index.html:575 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Reinforcement learning could train that decision-making process through the feedback " @@ -1013,7 +1013,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/blog/reverse-engineering-models/index.html:579 +#: website/public/blog/reverse-engineering-models/index.html:581 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1028,7 +1028,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th08/commit/af9cb1d3e839b15a78b47ac1701506083cc82847" #. > #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:591 +#: website/public/blog/reverse-engineering-models/index.html:593 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1039,7 +1039,7 @@ msgid "" " what to measure." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:602 +#: website/public/blog/reverse-engineering-models/index.html:604 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "This suggests another role for a broadly capable model: helping make the problem " @@ -1047,12 +1047,12 @@ msgid "" "learned search policy can get with it." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:610 +#: website/public/blog/reverse-engineering-models/index.html:612 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "When the oracle is wrong" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:611 +#: website/public/blog/reverse-engineering-models/index.html:613 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Once we train against that check, its coverage becomes part of what the model learns. " @@ -1060,7 +1060,7 @@ msgid "" "still need to understand what that answer covers." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:617 +#: website/public/blog/reverse-engineering-models/index.html:619 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "TH08 showed how much can hide outside that coverage. Some reconstructed functions " @@ -1076,7 +1076,7 @@ msgstr "" #. {ph1}: #. {ph2}: 1.0f #. {ph3}: 32.0f -#: website/public/blog/reverse-engineering-models/index.html:626 +#: website/public/blog/reverse-engineering-models/index.html:628 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1087,7 +1087,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:636 +#: website/public/blog/reverse-engineering-models/index.html:638 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1099,7 +1099,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:646 +#: website/public/blog/reverse-engineering-models/index.html:648 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1110,7 +1110,7 @@ msgid "" "checks." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:656 +#: website/public/blog/reverse-engineering-models/index.html:658 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Before using either kind of check as a reward, I would test it with deliberate " @@ -1122,7 +1122,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:664 +#: website/public/blog/reverse-engineering-models/index.html:666 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1131,12 +1131,12 @@ msgid "" "understanding that feedback becomes more important too." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:674 +#: website/public/blog/reverse-engineering-models/index.html:676 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "A comparison worth running" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:675 +#: website/public/blog/reverse-engineering-models/index.html:677 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "With those checks in place, I would start the comparison on a fixed VC7.1 task family." @@ -1146,7 +1146,7 @@ msgid "" "what training adds." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:683 +#: website/public/blog/reverse-engineering-models/index.html:685 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "To make those comparisons informative, each model would receive the same target " @@ -1155,7 +1155,7 @@ msgid "" "reliable search strategy from a lucky candidate." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:690 +#: website/public/blog/reverse-engineering-models/index.html:692 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "I would then separate two starting conditions: reconstructing a function from its " @@ -1164,7 +1164,7 @@ msgid "" "needed to reach it. Measuring them separately would reveal that division of work." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:698 +#: website/public/blog/reverse-engineering-models/index.html:700 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Both tasks need genuinely held-out examples. Because related Touhou games share engine" @@ -1173,7 +1173,7 @@ msgid "" "answers out of both training and retrieval." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:705 +#: website/public/blog/reverse-engineering-models/index.html:707 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "On those examples, the outcome would be complete, independently validated matches. " @@ -1183,7 +1183,7 @@ msgid "" "own accounting too." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:713 +#: website/public/blog/reverse-engineering-models/index.html:715 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "Both views matter because a cheaper proposal can become an expensive workflow if it " @@ -1195,7 +1195,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016" #. > #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:719 +#: website/public/blog/reverse-engineering-models/index.html:721 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1207,7 +1207,7 @@ msgid "" "I would validate any reward for \"getting closer\" against the full acceptance check." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:734 +#: website/public/blog/reverse-engineering-models/index.html:736 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "I would be interested in the pattern across these results. If a specialist does well " @@ -1216,12 +1216,12 @@ msgid "" "would help us decide where each kind of model is most useful." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:743 +#: website/public/blog/reverse-engineering-models/index.html:745 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "What kind of agent does this suggest?" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:744 +#: website/public/blog/reverse-engineering-models/index.html:746 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "If the models turn out to help at different stages, a useful arrangement might be a " @@ -1231,7 +1231,7 @@ msgid "" "itself." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:752 +#: website/public/blog/reverse-engineering-models/index.html:754 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "In that arrangement, specialization becomes a tool the agent can choose as the " @@ -1239,7 +1239,7 @@ msgid "" "earlier breakthroughs possible." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:757 +#: website/public/blog/reverse-engineering-models/index.html:759 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "This follows naturally from the industrial shift I described in the previous essay. " @@ -1248,7 +1248,7 @@ msgid "" " repeated experience with a particular craft." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:764 +#: website/public/blog/reverse-engineering-models/index.html:766 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "For now, the strongest general model has earned its place in my workflow by opening " @@ -1259,7 +1259,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:772 +#: website/public/blog/reverse-engineering-models/index.html:774 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1267,7 +1267,7 @@ msgid "" "that record to build the comparison and see what we learn." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:782 +#: website/public/blog/reverse-engineering-models/index.html:784 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Evidence and model attribution" msgstr "" @@ -1275,7 +1275,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/reverse-engineering-models/index.html:783 +#: website/public/blog/reverse-engineering-models/index.html:785 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1283,7 +1283,7 @@ msgid "" "context." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:790 +#: website/public/blog/reverse-engineering-models/index.html:792 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "The examples describe historical function-level comparisons recorded in the linked " @@ -1293,7 +1293,7 @@ msgstr "" #. {ph0}: gpt-dots #. {ph1}: gpt-web -#: website/public/blog/reverse-engineering-models/index.html:796 +#: website/public/blog/reverse-engineering-models/index.html:798 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1313,7 +1313,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616" #. > #. {ph5}: -#: website/public/blog/reverse-engineering-models/index.html:805 +#: website/public/blog/reverse-engineering-models/index.html:807 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1335,7 +1335,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0" #. > #. {ph7}: -#: website/public/blog/reverse-engineering-models/index.html:817 +#: website/public/blog/reverse-engineering-models/index.html:819 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1357,7 +1357,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e" #. > #. {ph7}: -#: website/public/blog/reverse-engineering-models/index.html:833 +#: website/public/blog/reverse-engineering-models/index.html:835 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1379,7 +1379,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016" #. > #. {ph7}: -#: website/public/blog/reverse-engineering-models/index.html:849 +#: website/public/blog/reverse-engineering-models/index.html:851 #, python-brace-format msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" @@ -1387,7 +1387,7 @@ msgid "" "numerical investigation{ph5} and {ph6}TH09 replay-save reconstruction{ph7}." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:866 +#: website/public/blog/reverse-engineering-models/index.html:868 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "" "The proposed specialist and RL comparisons are future experiments. The project " @@ -1406,27 +1406,27 @@ msgid "" "learning to propose better hypotheses from compiler feedback." msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:247 +#: website/public/blog/reverse-engineering-models/index.html:249 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "On this page" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:260 +#: website/public/blog/reverse-engineering-models/index.html:262 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Models and reverse engineering essay" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:498 +#: website/public/blog/reverse-engineering-models/index.html:500 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Selected reconstruction experiments" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:892 +#: website/public/blog/reverse-engineering-models/index.html:894 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Back to top" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:113 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Skip to content" msgstr "" @@ -1435,35 +1435,35 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/blog/touhou-reconstruction/index.html:201 +#: website/public/blog/touhou-reconstruction/index.html:203 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:205 +#: website/public/blog/touhou-reconstruction/index.html:207 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Essay · Touhou reconstruction" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:206 +#: website/public/blog/touhou-reconstruction/index.html:208 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "The industrial revolution in reverse engineering." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:207 +#: website/public/blog/touhou-reconstruction/index.html:209 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "By N0zoM1z0 · 10 October 2026" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:211 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Takeaway" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:213 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1473,7 +1473,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:216 +#: website/public/blog/touhou-reconstruction/index.html:218 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1483,7 +1483,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:221 +#: website/public/blog/touhou-reconstruction/index.html:223 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1493,7 +1493,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:226 +#: website/public/blog/touhou-reconstruction/index.html:228 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1503,7 +1503,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:231 +#: website/public/blog/touhou-reconstruction/index.html:233 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1511,65 +1511,65 @@ msgid "" "still taking shape. There is plenty left to explore." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:243 +#: website/public/blog/touhou-reconstruction/index.html:245 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "How experience compounds" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:244 +#: website/public/blog/touhou-reconstruction/index.html:246 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:332 +#: website/public/blog/touhou-reconstruction/index.html:334 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Autonomy" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:333 +#: website/public/blog/touhou-reconstruction/index.html:335 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Agent" msgstr "" #. {ph0}:
-#: website/public/blog/touhou-reconstruction/index.html:334 +#: website/public/blog/touhou-reconstruction/index.html:336 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Choose an experiment.{ph0}Propose a hypothesis." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:337 +#: website/public/blog/touhou-reconstruction/index.html:339 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Verification" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:338 +#: website/public/blog/touhou-reconstruction/index.html:340 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Oracle" msgstr "" #. {ph0}:
-#: website/public/blog/touhou-reconstruction/index.html:339 +#: website/public/blog/touhou-reconstruction/index.html:341 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Test against a{ph0}concrete reference." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:342 +#: website/public/blog/touhou-reconstruction/index.html:344 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Repository" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:343 +#: website/public/blog/touhou-reconstruction/index.html:345 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Working memory" msgstr "" #. {ph0}:
-#: website/public/blog/touhou-reconstruction/index.html:344 +#: website/public/blog/touhou-reconstruction/index.html:346 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Code, evidence,{ph0}checks and lessons." @@ -1578,7 +1578,7 @@ msgstr "" #. {ph0}:
#. {ph1}: #. {ph2}: -#: website/public/blog/touhou-reconstruction/index.html:346 +#: website/public/blog/touhou-reconstruction/index.html:348 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" @@ -1587,40 +1587,40 @@ msgstr "" #. {ph0}:
#. {ph1}: #. {ph2}: -#: website/public/blog/touhou-reconstruction/index.html:349 +#: website/public/blog/touhou-reconstruction/index.html:351 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "A better{ph0}{ph1}starting point{ph2}" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:352 +#: website/public/blog/touhou-reconstruction/index.html:354 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Reuse" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:353 +#: website/public/blog/touhou-reconstruction/index.html:355 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}Pass{ph1} · Keep the result and its evidence" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:365 +#: website/public/blog/touhou-reconstruction/index.html:367 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "Each project leaves the next with a better starting point. That includes fixing the " "checks when we discover a gap." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:372 +#: website/public/blog/touhou-reconstruction/index.html:374 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "In this article" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:374 +#: website/public/blog/touhou-reconstruction/index.html:376 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}August 2026{ph1}" @@ -1628,7 +1628,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:375 +#: website/public/blog/touhou-reconstruction/index.html:377 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}TH08: the continuation{ph1}" @@ -1636,7 +1636,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:376 +#: website/public/blog/touhou-reconstruction/index.html:378 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}Two approaches{ph1}" @@ -1644,7 +1644,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:377 +#: website/public/blog/touhou-reconstruction/index.html:379 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}TH095: compounding{ph1}" @@ -1652,7 +1652,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:378 +#: website/public/blog/touhou-reconstruction/index.html:380 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}TH04: across architectures{ph1}" @@ -1660,7 +1660,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:379 +#: website/public/blog/touhou-reconstruction/index.html:381 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}From exact to readable{ph1}" @@ -1668,7 +1668,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:382 +#: website/public/blog/touhou-reconstruction/index.html:384 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}The industrial shift{ph1}" @@ -1676,18 +1676,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:383 +#: website/public/blog/touhou-reconstruction/index.html:385 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}What becomes possible{ph1}" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:388 +#: website/public/blog/touhou-reconstruction/index.html:390 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "What changed in August 2026" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:389 +#: website/public/blog/touhou-reconstruction/index.html:391 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "Before this work, I had done a lot of manual reverse engineering. I would inspect a " @@ -1696,7 +1696,7 @@ msgid "" " keeping an increasingly large picture in my head." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:396 +#: website/public/blog/touhou-reconstruction/index.html:398 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "Most of my RE work is on games. I reconstruct them so their behavior can be understood" @@ -1705,7 +1705,7 @@ msgid "" " can check against a reliable reference." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:403 +#: website/public/blog/touhou-reconstruction/index.html:405 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "In August 2026, I started exploring agent-driven RE seriously. I wanted to see how far" @@ -1713,7 +1713,7 @@ msgid "" "reconstruction gave me a substantial project in which to find out." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:409 +#: website/public/blog/touhou-reconstruction/index.html:411 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The early progress was startling. An investigation could keep moving without me " @@ -1723,14 +1723,14 @@ msgid "" "project's direction and on whether its checks were trustworthy." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:418 +#: website/public/blog/touhou-reconstruction/index.html:420 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The pace got my attention first. Then I began wondering what would survive beyond the " "current project. Would the next game benefit from everything we had just learned?" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:425 +#: website/public/blog/touhou-reconstruction/index.html:427 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "TH08: building on human work" msgstr "" @@ -1739,7 +1739,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/blog/touhou-reconstruction/index.html:426 +#: website/public/blog/touhou-reconstruction/index.html:428 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1749,7 +1749,7 @@ msgid "" "continuation." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:435 +#: website/public/blog/touhou-reconstruction/index.html:437 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The imported history ends at the public 10 August checkpoint. My independent " @@ -1757,7 +1757,7 @@ msgid "" "1,107 identified game functions." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:440 +#: website/public/blog/touhou-reconstruction/index.html:442 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "A playable Linux reconstruction port was committed on 24 August, roughly eleven days " @@ -1765,7 +1765,7 @@ msgid "" "arrived on 30 August." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:445 +#: website/public/blog/touhou-reconstruction/index.html:447 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "What struck me was that the work had reached a program people could run. Getting there" @@ -1776,7 +1776,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:452 +#: website/public/blog/touhou-reconstruction/index.html:454 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1787,12 +1787,12 @@ msgid "" "something specific to investigate." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:460 +#: website/public/blog/touhou-reconstruction/index.html:462 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "An exact match with the wrong constant" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:461 +#: website/public/blog/touhou-reconstruction/index.html:463 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "An oracle is software someone wrote. TH08 gave me a clear reminder of how much can " @@ -1801,7 +1801,7 @@ msgstr "" #. {ph0}: 0.0 #. {ph1}: 128.0 -#: website/public/blog/touhou-reconstruction/index.html:465 +#: website/public/blog/touhou-reconstruction/index.html:467 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1810,7 +1810,7 @@ msgid "" "used {ph1}, the maximum-power threshold." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:471 +#: website/public/blog/touhou-reconstruction/index.html:473 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "Normal power is non-negative, so the reconstructed power check was effectively always " @@ -1821,13 +1821,13 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:478 +#: website/public/blog/touhou-reconstruction/index.html:480 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:484 +#: website/public/blog/touhou-reconstruction/index.html:486 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "A rebuild can put a constant at a different address. The comparison tool accounted for" @@ -1838,7 +1838,7 @@ msgstr "" #. {ph0}: 128.0 #. {ph1}: 0.0 -#: website/public/blog/touhou-reconstruction/index.html:491 +#: website/public/blog/touhou-reconstruction/index.html:493 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1851,7 +1851,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/blog/touhou-reconstruction/index.html:497 +#: website/public/blog/touhou-reconstruction/index.html:499 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1861,7 +1861,7 @@ msgid "" "accepted functions." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:508 +#: website/public/blog/touhou-reconstruction/index.html:510 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The comparison now checks every such floating literal. Its tests include deliberately " @@ -1871,7 +1871,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:513 +#: website/public/blog/touhou-reconstruction/index.html:515 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1879,7 +1879,7 @@ msgid "" " game." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:517 +#: website/public/blog/touhou-reconstruction/index.html:519 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "That matters when the team is mostly one person working with agents. I cannot " @@ -1891,7 +1891,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:525 +#: website/public/blog/touhou-reconstruction/index.html:527 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1902,7 +1902,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:534 +#: website/public/blog/touhou-reconstruction/index.html:536 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1910,7 +1910,7 @@ msgid "" "next batch.{ph1}" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:542 +#: website/public/blog/touhou-reconstruction/index.html:544 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Two different ideas of reconstruction" msgstr "" @@ -1919,7 +1919,7 @@ msgstr "" #. href="https://web.archive.org/web/20260909051514/https://github.com/GensokyoClub/th08#important- #. notice" > #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:543 +#: website/public/blog/touhou-reconstruction/index.html:545 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -1928,14 +1928,14 @@ msgid "" "completion. One passage reads:" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:554 +#: website/public/blog/touhou-reconstruction/index.html:556 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The rise of grifters (AI decompilations and ports) in this space taking from our work " "paints a bad image for future decompilation efforts…" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:560 +#: website/public/blog/touhou-reconstruction/index.html:562 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The notice also describes the psychological toll on the maintainers. Their " @@ -1945,7 +1945,7 @@ msgid "" "how reconstruction should proceed and how a contribution should be judged." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:569 +#: website/public/blog/touhou-reconstruction/index.html:571 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "In the manual workflow I knew, developing an understanding of a function and " @@ -1954,7 +1954,7 @@ msgid "" " happened while they worked." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:576 +#: website/public/blog/touhou-reconstruction/index.html:578 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "Existing projects already preserve knowledge in their source and build tools. What " @@ -1962,7 +1962,7 @@ msgid "" "investigation on its own." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:581 +#: website/public/blog/touhou-reconstruction/index.html:583 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "In my continuation, I decide the objective and the standard for accepting a result. " @@ -1971,7 +1971,7 @@ msgid "" "an implementation, even if an agent did most of the work." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:588 +#: website/public/blog/touhou-reconstruction/index.html:590 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "This can be a difficult transition. Years of careful work may become the foundation " @@ -1979,7 +1979,7 @@ msgid "" " also changes what maintainers need to know before accepting a contribution." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:594 +#: website/public/blog/touhou-reconstruction/index.html:596 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The industrial analogy helps me think about this. In a craft, much of the process " @@ -1988,7 +1988,7 @@ msgid "" "wrong. Different communities can choose how much of that change they want to take on." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:602 +#: website/public/blog/touhou-reconstruction/index.html:604 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "My choice is to continue openly, with the inherited work credited and its history " @@ -2008,7 +2008,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th08/blob/d2a00f4acb4a13916e07a00bd13f714961714628/README.md#credits- #. and-provenance" > #. {ph5}: -#: website/public/blog/touhou-reconstruction/index.html:608 +#: website/public/blog/touhou-reconstruction/index.html:610 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2017,14 +2017,14 @@ msgid "" "{ph4}credits and provenance{ph5} record the continuation boundary." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:626 +#: website/public/blog/touhou-reconstruction/index.html:628 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "TH095: experience starts compounding" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:627 +#: website/public/blog/touhou-reconstruction/index.html:629 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2034,7 +2034,7 @@ msgid "" "begin a reconstruction and how to keep it moving." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:635 +#: website/public/blog/touhou-reconstruction/index.html:637 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "By 7 September, all 697 identified game functions had source. By 8 September, 696 had " @@ -2043,7 +2043,7 @@ msgid "" "after initialization." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:642 +#: website/public/blog/touhou-reconstruction/index.html:644 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "I found this more exciting than the first project's speed. A fresh target could " @@ -2051,7 +2051,7 @@ msgid "" "tools and in the way the project was organized." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:648 +#: website/public/blog/touhou-reconstruction/index.html:650 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "For example, TH08 had taught us to pay attention to the assembled program early. If " @@ -2060,7 +2060,7 @@ msgid "" "shape how we approached TH095's whole-program build." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:655 +#: website/public/blog/touhou-reconstruction/index.html:657 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "A lesson that stays in my head is useful while I am there. Once it becomes a check " @@ -2068,7 +2068,7 @@ msgid "" "agent can use the result without repeating the investigation that led to it." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:661 +#: website/public/blog/touhou-reconstruction/index.html:663 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The floating-literal bug belongs in that memory too. It explains why checking a " @@ -2078,7 +2078,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:667 +#: website/public/blog/touhou-reconstruction/index.html:669 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2086,7 +2086,7 @@ msgid "" "spend more of the next project's effort on what is actually new about its target." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:675 +#: website/public/blog/touhou-reconstruction/index.html:677 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The same benefit is available to people joining later. They can inspect a decision and" @@ -2094,7 +2094,7 @@ msgid "" "entire project's history to find out why the source looks the way it does." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:683 +#: website/public/blog/touhou-reconstruction/index.html:685 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "TH04: the workflow survives a different architecture" msgstr "" @@ -2103,7 +2103,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/blog/touhou-reconstruction/index.html:684 +#: website/public/blog/touhou-reconstruction/index.html:686 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2113,7 +2113,7 @@ msgid "" "{ph2}ReC98 work{ph3} gave us valuable knowledge and source material here too." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:693 +#: website/public/blog/touhou-reconstruction/index.html:695 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The DOS reconstruction is now working. In my manual testing, I played complete Normal " @@ -2121,7 +2121,7 @@ msgid "" "port. Establishing a working DOS version first gives that port a reference." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:699 +#: website/public/blog/touhou-reconstruction/index.html:701 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The architecture changed what we needed to investigate. It also changed the compiler " @@ -2129,7 +2129,7 @@ msgid "" "question through to a result and let that result guide the next experiment." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:705 +#: website/public/blog/touhou-reconstruction/index.html:707 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "Consider the transition from gameplay to an ending. We need to know what state carries" @@ -2138,7 +2138,7 @@ msgid "" "an agent can work through the question much as it did on a Windows title." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:713 +#: website/public/blog/touhou-reconstruction/index.html:715 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "This is why TH04 matters to the argument. A substantial platform change did not force " @@ -2146,7 +2146,7 @@ msgid "" "workflow still gave us a way to solve it." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:719 +#: website/public/blog/touhou-reconstruction/index.html:721 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "For the 64-bit port, we can now examine the new implementation against behavior " @@ -2160,7 +2160,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/blog/touhou-reconstruction/index.html:724 +#: website/public/blog/touhou-reconstruction/index.html:726 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2168,17 +2168,17 @@ msgid "" " {ph2}64-bit port{ph3}. The port remains in development." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:737 +#: website/public/blog/touhou-reconstruction/index.html:739 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "From exact code to readable code" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:738 +#: website/public/blog/touhou-reconstruction/index.html:740 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Once a reconstruction works, I want someone else to be able to understand it." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:742 +#: website/public/blog/touhou-reconstruction/index.html:744 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "To me, assembly and raw offsets can feel like old friends. I realise this is a " @@ -2188,7 +2188,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:748 +#: website/public/blog/touhou-reconstruction/index.html:750 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2199,7 +2199,7 @@ msgid "" "interpretation came from." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:756 +#: website/public/blog/touhou-reconstruction/index.html:758 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "This becomes especially important for a port. An absolute address tells me where " @@ -2208,14 +2208,14 @@ msgid "" "recover the relationship behind the old memory access." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:763 +#: website/public/blog/touhou-reconstruction/index.html:765 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "The order I now use is:" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:765 +#: website/public/blog/touhou-reconstruction/index.html:767 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2226,7 +2226,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:772 +#: website/public/blog/touhou-reconstruction/index.html:774 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2238,7 +2238,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:779 +#: website/public/blog/touhou-reconstruction/index.html:781 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2250,7 +2250,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:788 +#: website/public/blog/touhou-reconstruction/index.html:790 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2261,7 +2261,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:795 +#: website/public/blog/touhou-reconstruction/index.html:797 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2271,7 +2271,7 @@ msgid "" "still builds and behaves correctly along the paths we exercise." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:803 +#: website/public/blog/touhou-reconstruction/index.html:805 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "They catch different mistakes. A type change can alter the generated instructions. An " @@ -2280,7 +2280,7 @@ msgid "" " carrying a refactor further." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:810 +#: website/public/blog/touhou-reconstruction/index.html:812 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "A name needs evidence of its own. An exact comparison cannot tell us whether a field " @@ -2293,7 +2293,7 @@ msgstr "" #. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic- #. reconstruction.md" > #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:817 +#: website/public/blog/touhou-reconstruction/index.html:819 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2305,7 +2305,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:828 +#: website/public/blog/touhou-reconstruction/index.html:830 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2313,12 +2313,12 @@ msgid "" "recovered knowledge usable.{ph1} A port can then build on both." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:837 +#: website/public/blog/touhou-reconstruction/index.html:839 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "What makes this an industrial shift" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:838 +#: website/public/blog/touhou-reconstruction/index.html:840 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "These projects changed where I spent my attention. Once agents could carry much of an " @@ -2327,7 +2327,7 @@ msgid "" "needed it." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:845 +#: website/public/blog/touhou-reconstruction/index.html:847 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "Autonomy matters here. The useful next step often becomes clear only after a failed " @@ -2336,7 +2336,7 @@ msgid "" "attention." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:852 +#: website/public/blog/touhou-reconstruction/index.html:854 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "I expect the agent to make wrong hypotheses. What matters is whether we can test them " @@ -2345,7 +2345,7 @@ msgid "" "a project milestone." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:859 +#: website/public/blog/touhou-reconstruction/index.html:861 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "REA gives the agent access to analysis tools. A question about a function's caller can" @@ -2354,7 +2354,7 @@ msgid "" "proposes and see where its explanation holds up." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:866 +#: website/public/blog/touhou-reconstruction/index.html:868 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The TH08 bug shows why those checks deserve engineering attention of their own. When " @@ -2366,7 +2366,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:873 +#: website/public/blog/touhou-reconstruction/index.html:875 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2379,7 +2379,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:886 +#: website/public/blog/touhou-reconstruction/index.html:888 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2390,7 +2390,7 @@ msgid "" "project can then inherit a stronger tool." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:896 +#: website/public/blog/touhou-reconstruction/index.html:898 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "There is also a practical limit to any one conversation. It will end before a large " @@ -2400,7 +2400,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:902 +#: website/public/blog/touhou-reconstruction/index.html:904 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2409,7 +2409,7 @@ msgid "" "the starting conditions for another." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:912 +#: website/public/blog/touhou-reconstruction/index.html:914 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "That is what makes the industrial analogy meaningful to me. Experience starts becoming" @@ -2417,12 +2417,12 @@ msgid "" "person—or the next agent—can get done." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:920 +#: website/public/blog/touhou-reconstruction/index.html:922 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "The projects we can now consider" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:921 +#: website/public/blog/touhou-reconstruction/index.html:923 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The pace matters because it changes the decision to begin. A game could be fascinating" @@ -2430,7 +2430,7 @@ msgid "" "realistically give it. Many projects would stay ideas." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:927 +#: website/public/blog/touhou-reconstruction/index.html:929 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "Now I can see a way to keep such a project moving through repeated investigations. " @@ -2441,7 +2441,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/blog/touhou-reconstruction/index.html:934 +#: website/public/blog/touhou-reconstruction/index.html:936 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2449,7 +2449,7 @@ msgid "" "accumulated knowledge would let an agent work on this reliably?{ph1}" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:941 +#: website/public/blog/touhou-reconstruction/index.html:943 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "That question makes me consider projects I would previously have left alone. Each one " @@ -2457,12 +2457,12 @@ msgid "" "take us." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:949 +#: website/public/blog/touhou-reconstruction/index.html:951 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Project milestones and sources" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:950 +#: website/public/blog/touhou-reconstruction/index.html:952 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" "The dates describe recorded project checkpoints, checked against public GitHub history" @@ -2490,7 +2490,7 @@ msgstr "" #. {ph9}: #. {ph10}: #. {ph11}: -#: website/public/blog/touhou-reconstruction/index.html:958 +#: website/public/blog/touhou-reconstruction/index.html:960 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2521,7 +2521,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th095/blob/3442dcf29d9e0b5bef384a49bd0c9ad32a711826/docs/WHOLE_BUILD_TODO.md" #. > #. {ph11}: -#: website/public/blog/touhou-reconstruction/index.html:981 +#: website/public/blog/touhou-reconstruction/index.html:983 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2536,7 +2536,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th04/blob/bb9faca54e2eb3c0d6c757c75d59ac29d2cd5e93/docs/RE_HANDOFF.md" #. > #. {ph3}: -#: website/public/blog/touhou-reconstruction/index.html:1004 +#: website/public/blog/touhou-reconstruction/index.html:1006 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2556,7 +2556,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78" #. > #. {ph7}: -#: website/public/blog/touhou-reconstruction/index.html:1013 +#: website/public/blog/touhou-reconstruction/index.html:1015 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2574,7 +2574,7 @@ msgstr "" #. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic- #. reconstruction.md" > #. {ph5}: -#: website/public/blog/touhou-reconstruction/index.html:1027 +#: website/public/blog/touhou-reconstruction/index.html:1029 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2587,7 +2587,7 @@ msgstr "" #. {ph2}: #. {ph3}: -#: website/public/blog/touhou-reconstruction/index.html:1039 +#: website/public/blog/touhou-reconstruction/index.html:1041 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2603,7 +2603,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/blog/touhou-reconstruction/index.html:1048 +#: website/public/blog/touhou-reconstruction/index.html:1050 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "" @@ -2615,7 +2615,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/blog/touhou-reconstruction/index.html:1063 +#: website/public/blog/touhou-reconstruction/index.html:1065 #, python-brace-format msgctxt "page:blog/touhou-reconstruction/index.html" msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" @@ -2633,72 +2633,72 @@ msgid "" " and how knowledge compounds across TH08, TH095 and PC-98 TH04." msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:357 +#: website/public/blog/touhou-reconstruction/index.html:359 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Experience carried between projects" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:371 +#: website/public/blog/touhou-reconstruction/index.html:373 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "On this page" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:386 +#: website/public/blog/touhou-reconstruction/index.html:388 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Touhou reconstruction essay" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:1089 +#: website/public/blog/touhou-reconstruction/index.html:1091 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Back to top" msgstr "" -#: website/public/contributors/index.html:112 +#: website/public/contributors/index.html:114 msgctxt "page:contributors/index.html" msgid "Skip to content" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/contributors/index.html:202 +#: website/public/contributors/index.html:204 #, python-brace-format msgctxt "page:contributors/index.html" msgid "{ph0}Home{ph1} / Contributors" msgstr "" -#: website/public/contributors/index.html:203 +#: website/public/contributors/index.html:205 msgctxt "page:contributors/index.html" msgid "Built together." msgstr "" -#: website/public/contributors/index.html:204 +#: website/public/contributors/index.html:206 msgctxt "page:contributors/index.html" msgid "Thank you to everyone who helps make REA better." msgstr "" -#: website/public/contributors/index.html:205 +#: website/public/contributors/index.html:207 msgctxt "page:contributors/index.html" msgid "" "Code, documentation, tests, translations and ideas — there are many ways to " "contribute." msgstr "" -#: website/public/contributors/index.html:210 +#: website/public/contributors/index.html:212 msgctxt "page:contributors/index.html" msgid "How to contribute" msgstr "" -#: website/public/contributors/index.html:215 +#: website/public/contributors/index.html:217 msgctxt "page:contributors/index.html" msgid "Join the conversation →" msgstr "" -#: website/public/contributors/index.html:225 +#: website/public/contributors/index.html:227 msgctxt "page:contributors/index.html" msgid "Contributors" msgstr "" -#: website/public/contributors/index.html:227 +#: website/public/contributors/index.html:229 msgctxt "page:contributors/index.html" msgid "Find a contributor" msgstr "" @@ -2706,13 +2706,13 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: -#: website/public/contributors/index.html:1114 +#: website/public/contributors/index.html:1116 #, python-brace-format msgctxt "page:contributors/index.html" msgid "From {ph0}GitHub’s contributor list{ph1} · Updated {ph2}." msgstr "" -#: website/public/contributors/index.html:1119 +#: website/public/contributors/index.html:1121 msgctxt "page:contributors/index.html" msgid "No matching contributors. Try another username." msgstr "" @@ -2727,17 +2727,17 @@ msgctxt "page:contributors/index.html" msgid "Meet the people who contribute code, documentation, tests and ideas to REA." msgstr "" -#: website/public/contributors/index.html:228 +#: website/public/contributors/index.html:230 msgctxt "page:contributors/index.html" msgid "GitHub username" msgstr "" -#: website/public/contributors/index.html:1140 +#: website/public/contributors/index.html:1142 msgctxt "page:contributors/index.html" msgid "Back to top" msgstr "" -#: website/public/examples/dino-lab/index.html:112 +#: website/public/examples/dino-lab/index.html:114 msgctxt "page:examples/dino-lab/index.html" msgid "Skip to content" msgstr "" @@ -2746,18 +2746,18 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/examples/dino-lab/index.html:202 +#: website/public/examples/dino-lab/index.html:204 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" msgstr "" -#: website/public/examples/dino-lab/index.html:205 +#: website/public/examples/dino-lab/index.html:207 msgctxt "page:examples/dino-lab/index.html" msgid "Inspect → rebuild → change" msgstr "" -#: website/public/examples/dino-lab/index.html:206 +#: website/public/examples/dino-lab/index.html:208 msgctxt "page:examples/dino-lab/index.html" msgid "Rebuild the dinosaur’s speed rule." msgstr "" @@ -2766,7 +2766,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/examples/dino-lab/index.html:207 +#: website/public/examples/dino-lab/index.html:209 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "" @@ -2775,15 +2775,15 @@ msgid "" "with {ph2}adjustable speed.{ph3}" msgstr "" -#: website/public/examples/dino-lab/index.html:216 -#: website/public/examples/dino-lab/index.html:215 +#: website/public/examples/dino-lab/index.html:218 +#: website/public/examples/dino-lab/index.html:217 msgctxt "page:examples/dino-lab/index.html" msgid "On this page" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/examples/dino-lab/index.html:218 +#: website/public/examples/dino-lab/index.html:220 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "{ph0}Play and change the speed{ph1}" @@ -2791,7 +2791,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/examples/dino-lab/index.html:219 +#: website/public/examples/dino-lab/index.html:221 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "{ph0}Read the recovered rule{ph1}" @@ -2799,7 +2799,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/examples/dino-lab/index.html:220 +#: website/public/examples/dino-lab/index.html:222 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "{ph0}Check the reconstruction{ph1}" @@ -2807,18 +2807,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/examples/dino-lab/index.html:221 +#: website/public/examples/dino-lab/index.html:223 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "{ph0}Try the analysis{ph1}" msgstr "" -#: website/public/examples/dino-lab/index.html:226 +#: website/public/examples/dino-lab/index.html:228 msgctxt "page:examples/dino-lab/index.html" msgid "Play and change the speed" msgstr "" -#: website/public/examples/dino-lab/index.html:227 +#: website/public/examples/dino-lab/index.html:229 msgctxt "page:examples/dino-lab/index.html" msgid "" "Press Play, then jump over the cactus. Move the speed slider to try a slower or faster" @@ -2826,54 +2826,54 @@ msgid "" "gradually accelerate again." msgstr "" -#: website/public/examples/dino-lab/index.html:233 +#: website/public/examples/dino-lab/index.html:235 msgctxt "page:examples/dino-lab/index.html" msgid "Play the reconstruction" msgstr "" -#: website/public/examples/dino-lab/index.html:265 +#: website/public/examples/dino-lab/index.html:267 msgctxt "page:examples/dino-lab/index.html" msgid "Play" msgstr "" -#: website/public/examples/dino-lab/index.html:268 +#: website/public/examples/dino-lab/index.html:270 msgctxt "page:examples/dino-lab/index.html" msgid "Jump ↑" msgstr "" -#: website/public/examples/dino-lab/index.html:269 +#: website/public/examples/dino-lab/index.html:271 msgctxt "page:examples/dino-lab/index.html" msgid "Restart" msgstr "" -#: website/public/examples/dino-lab/index.html:272 +#: website/public/examples/dino-lab/index.html:274 msgctxt "page:examples/dino-lab/index.html" msgid "Speed" msgstr "" -#: website/public/examples/dino-lab/index.html:282 +#: website/public/examples/dino-lab/index.html:284 msgctxt "page:examples/dino-lab/index.html" msgid "Use the recovered acceleration rule" msgstr "" -#: website/public/examples/dino-lab/index.html:286 +#: website/public/examples/dino-lab/index.html:288 msgctxt "page:examples/dino-lab/index.html" msgid "Original rule: start at 6, then increase toward 13." msgstr "" -#: website/public/examples/dino-lab/index.html:289 +#: website/public/examples/dino-lab/index.html:291 msgctxt "page:examples/dino-lab/index.html" msgid "Move the slider to set your own speed. Space or Jump clears a cactus." msgstr "" -#: website/public/examples/dino-lab/index.html:294 +#: website/public/examples/dino-lab/index.html:296 msgctxt "page:examples/dino-lab/index.html" msgid "" "Enable JavaScript to play the reconstruction. The code and explanation above remain " "readable." msgstr "" -#: website/public/examples/dino-lab/index.html:302 +#: website/public/examples/dino-lab/index.html:304 msgctxt "page:examples/dino-lab/index.html" msgid "Read the script REA returned" msgstr "" @@ -2881,7 +2881,7 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: index.js -#: website/public/examples/dino-lab/index.html:303 +#: website/public/examples/dino-lab/index.html:305 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "" @@ -2889,7 +2889,7 @@ msgid "" "the loaded {ph2}, including this branch in the game’s update function:" msgstr "" -#: website/public/examples/dino-lab/index.html:313 +#: website/public/examples/dino-lab/index.html:315 msgctxt "page:examples/dino-lab/index.html" msgid "REA · selected script source" msgstr "" @@ -2897,7 +2897,7 @@ msgstr "" #. {ph0}: SPEED: 6 #. {ph1}: ACCELERATION: 0.001 #. {ph2}: MAX_SPEED: 13 -#: website/public/examples/dino-lab/index.html:319 +#: website/public/examples/dino-lab/index.html:321 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "" @@ -2905,25 +2905,25 @@ msgid "" "without a collision." msgstr "" -#: website/public/examples/dino-lab/index.html:324 +#: website/public/examples/dino-lab/index.html:326 msgctxt "page:examples/dino-lab/index.html" msgid "Use the same rule in the new game" msgstr "" #. {ph0}: dino-speed.js -#: website/public/examples/dino-lab/index.html:327 +#: website/public/examples/dino-lab/index.html:329 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "Reconstruction · {ph0}" msgstr "" -#: website/public/examples/dino-lab/index.html:330 -#: website/public/examples/dino-lab/index.html:429 +#: website/public/examples/dino-lab/index.html:332 +#: website/public/examples/dino-lab/index.html:431 msgctxt "page:examples/dino-lab/index.html" msgid "Copy" msgstr "" -#: website/public/examples/dino-lab/index.html:343 +#: website/public/examples/dino-lab/index.html:345 msgctxt "page:examples/dino-lab/index.html" msgid "" "The mini-game uses this function for automatic acceleration. Moving the slider " @@ -2935,59 +2935,59 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/examples/dino-lab/index.html:349 +#: website/public/examples/dino-lab/index.html:351 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" msgstr "" -#: website/public/examples/dino-lab/index.html:357 +#: website/public/examples/dino-lab/index.html:359 msgctxt "page:examples/dino-lab/index.html" msgid "Check the reconstruction" msgstr "" -#: website/public/examples/dino-lab/index.html:358 +#: website/public/examples/dino-lab/index.html:360 msgctxt "page:examples/dino-lab/index.html" msgid "" "We called the original game’s update function with obstacles and automatic scheduling " "disabled. Compare those recorded speeds with a replay of the recovered rule." msgstr "" -#: website/public/examples/dino-lab/index.html:367 +#: website/public/examples/dino-lab/index.html:369 msgctxt "page:examples/dino-lab/index.html" msgid "Updates" msgstr "" -#: website/public/examples/dino-lab/index.html:368 +#: website/public/examples/dino-lab/index.html:370 msgctxt "page:examples/dino-lab/index.html" msgid "Original game" msgstr "" -#: website/public/examples/dino-lab/index.html:369 +#: website/public/examples/dino-lab/index.html:371 msgctxt "page:examples/dino-lab/index.html" msgid "Reconstructed rule" msgstr "" -#: website/public/examples/dino-lab/index.html:396 +#: website/public/examples/dino-lab/index.html:398 msgctxt "page:examples/dino-lab/index.html" msgid "Run the speed check" msgstr "" -#: website/public/examples/dino-lab/index.html:399 +#: website/public/examples/dino-lab/index.html:401 msgctxt "page:examples/dino-lab/index.html" msgid "" "Values rounded to three decimals. The branch checks before adding, so the final " "increment can take speed just above 13." msgstr "" -#: website/public/examples/dino-lab/index.html:405 +#: website/public/examples/dino-lab/index.html:407 msgctxt "page:examples/dino-lab/index.html" msgid "Try the analysis yourself" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/examples/dino-lab/index.html:407 +#: website/public/examples/dino-lab/index.html:409 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "{ph0}Set up REA{ph1} with your coding agent." @@ -2996,13 +2996,13 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: https://wayou.github.io/t-rex-runner/ -#: website/public/examples/dino-lab/index.html:411 +#: website/public/examples/dino-lab/index.html:413 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." msgstr "" -#: website/public/examples/dino-lab/index.html:418 +#: website/public/examples/dino-lab/index.html:420 msgctxt "page:examples/dino-lab/index.html" msgid "" "Give your agent the page URL and local debugging endpoint, then copy this prompt." @@ -3016,7 +3016,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/examples/dino-lab/index.html:425 +#: website/public/examples/dino-lab/index.html:427 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" @@ -3028,7 +3028,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/examples/dino-lab/index.html:438 +#: website/public/examples/dino-lab/index.html:440 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "" @@ -3038,7 +3038,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/examples/dino-lab/index.html:447 +#: website/public/examples/dino-lab/index.html:449 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "" @@ -3051,7 +3051,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/examples/dino-lab/index.html:454 +#: website/public/examples/dino-lab/index.html:456 #, python-brace-format msgctxt "page:examples/dino-lab/index.html" msgid "" @@ -3071,63 +3071,63 @@ msgid "" "play." msgstr "" -#: website/public/examples/dino-lab/index.html:224 +#: website/public/examples/dino-lab/index.html:226 msgctxt "page:examples/dino-lab/index.html" msgid "Dinosaur speed reconstruction" msgstr "" -#: website/public/examples/dino-lab/index.html:255 +#: website/public/examples/dino-lab/index.html:257 msgctxt "page:examples/dino-lab/index.html" msgid "" "Dinosaur mini-game. Use the Jump button or press Space while the game is focused." msgstr "" -#: website/public/examples/dino-lab/index.html:330 +#: website/public/examples/dino-lab/index.html:332 msgctxt "page:examples/dino-lab/index.html" msgid "Copy reconstructed speed rule" msgstr "" -#: website/public/examples/dino-lab/index.html:429 +#: website/public/examples/dino-lab/index.html:431 msgctxt "page:examples/dino-lab/index.html" msgid "Copy dinosaur analysis prompt" msgstr "" -#: website/public/examples/dino-lab/index.html:484 +#: website/public/examples/dino-lab/index.html:486 msgctxt "page:examples/dino-lab/index.html" msgid "Back to top" msgstr "" -#: website/public/faq/index.html:111 +#: website/public/faq/index.html:113 msgctxt "page:faq/index.html" msgid "Skip to content" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:201 +#: website/public/faq/index.html:203 #, python-brace-format msgctxt "page:faq/index.html" msgid "{ph0}Home{ph1} / FAQ" msgstr "" -#: website/public/faq/index.html:202 +#: website/public/faq/index.html:204 msgctxt "page:faq/index.html" msgid "REA FAQ." msgstr "" -#: website/public/faq/index.html:203 +#: website/public/faq/index.html:205 msgctxt "page:faq/index.html" msgid "Setup, updates, analysis and troubleshooting." msgstr "" -#: website/public/faq/index.html:207 +#: website/public/faq/index.html:209 msgctxt "page:faq/index.html" msgid "Topics" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:209 +#: website/public/faq/index.html:211 #, python-brace-format msgctxt "page:faq/index.html" msgid "{ph0}Setup and updates{ph1}" @@ -3135,7 +3135,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:210 +#: website/public/faq/index.html:212 #, python-brace-format msgctxt "page:faq/index.html" msgid "{ph0}Analysis{ph1}" @@ -3143,7 +3143,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:211 +#: website/public/faq/index.html:213 #, python-brace-format msgctxt "page:faq/index.html" msgid "{ph0}Troubleshooting{ph1}" @@ -3151,24 +3151,24 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:212 +#: website/public/faq/index.html:214 #, python-brace-format msgctxt "page:faq/index.html" msgid "{ph0}Data and sharing{ph1}" msgstr "" -#: website/public/faq/index.html:221 +#: website/public/faq/index.html:223 msgctxt "page:faq/index.html" msgid "Setup and updates" msgstr "" -#: website/public/faq/index.html:224 +#: website/public/faq/index.html:226 msgctxt "page:faq/index.html" msgid "How do I install REA?" msgstr "" #. {ph0}: Node.js -#: website/public/faq/index.html:225 +#: website/public/faq/index.html:227 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3176,22 +3176,22 @@ msgid "" "proposed changes." msgstr "" -#: website/public/faq/index.html:232 +#: website/public/faq/index.html:234 msgctxt "page:faq/index.html" msgid "Terminal · agent setup" msgstr "" -#: website/public/faq/index.html:233 website/public/faq/index.html:274 -#: website/public/faq/index.html:292 website/public/faq/index.html:376 -#: website/public/faq/index.html:423 website/public/faq/index.html:463 -#: website/public/faq/index.html:483 +#: website/public/faq/index.html:235 website/public/faq/index.html:276 +#: website/public/faq/index.html:294 website/public/faq/index.html:378 +#: website/public/faq/index.html:425 website/public/faq/index.html:465 +#: website/public/faq/index.html:485 msgctxt "page:faq/index.html" msgid "Copy" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:244 +#: website/public/faq/index.html:246 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3200,12 +3200,12 @@ msgid "" "{ph0}Follow the setup guide{ph1} for prerequisites and your first analysis." msgstr "" -#: website/public/faq/index.html:253 +#: website/public/faq/index.html:255 msgctxt "page:faq/index.html" msgid "Which coding agents can use REA?" msgstr "" -#: website/public/faq/index.html:254 +#: website/public/faq/index.html:256 msgctxt "page:faq/index.html" msgid "" "Any agent that supports local MCP servers. Setup includes Claude Code, Claude Desktop," @@ -3216,29 +3216,29 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:261 +#: website/public/faq/index.html:263 #, python-brace-format msgctxt "page:faq/index.html" msgid "{ph0}Connect your coding agent{ph1}." msgstr "" -#: website/public/faq/index.html:266 +#: website/public/faq/index.html:268 msgctxt "page:faq/index.html" msgid "How do I update REA?" msgstr "" -#: website/public/faq/index.html:267 +#: website/public/faq/index.html:269 msgctxt "page:faq/index.html" msgid "REA releases frequently, including bug fixes. If you installed the CLI with npm:" msgstr "" -#: website/public/faq/index.html:273 +#: website/public/faq/index.html:275 msgctxt "page:faq/index.html" msgid "Terminal · installed CLI" msgstr "" #. {ph0}: npx -#: website/public/faq/index.html:285 +#: website/public/faq/index.html:287 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3246,13 +3246,13 @@ msgid "" "through {ph0}, run:" msgstr "" -#: website/public/faq/index.html:291 +#: website/public/faq/index.html:293 msgctxt "page:faq/index.html" msgid "Terminal · refresh agent setup" msgstr "" #. {ph0}: npx -y rea-agents@latest -#: website/public/faq/index.html:303 +#: website/public/faq/index.html:305 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3261,14 +3261,14 @@ msgid "" "followed by the command." msgstr "" -#: website/public/faq/index.html:311 +#: website/public/faq/index.html:313 msgctxt "page:faq/index.html" msgid "Is installing the skill from skills.sh enough?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:314 +#: website/public/faq/index.html:316 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3277,24 +3277,24 @@ msgid "" "can call the tools." msgstr "" -#: website/public/faq/index.html:325 +#: website/public/faq/index.html:327 msgctxt "page:faq/index.html" msgid "Analysis" msgstr "" -#: website/public/faq/index.html:328 +#: website/public/faq/index.html:330 msgctxt "page:faq/index.html" msgid "What can I analyze with REA?" msgstr "" -#: website/public/faq/index.html:329 +#: website/public/faq/index.html:331 msgctxt "page:faq/index.html" msgid "Start with the kind of software you have:" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:331 +#: website/public/faq/index.html:333 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3304,7 +3304,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:336 +#: website/public/faq/index.html:338 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3313,7 +3313,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:341 +#: website/public/faq/index.html:343 #, python-brace-format msgctxt "page:faq/index.html" msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." @@ -3321,7 +3321,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:346 +#: website/public/faq/index.html:348 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3329,12 +3329,12 @@ msgid "" "resources. {ph0}See the case studies{ph1} for worked investigations." msgstr "" -#: website/public/faq/index.html:354 +#: website/public/faq/index.html:356 msgctxt "page:faq/index.html" msgid "Do I need Hopper, Ghidra or IDA?" msgstr "" -#: website/public/faq/index.html:355 +#: website/public/faq/index.html:357 msgctxt "page:faq/index.html" msgid "" "Deep native analysis uses one of them. Static JavaScript and .NET inspection work with" @@ -3343,7 +3343,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:360 +#: website/public/faq/index.html:362 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3352,25 +3352,25 @@ msgid "" "{ph0}Set up native analysis{ph1}." msgstr "" -#: website/public/faq/index.html:368 +#: website/public/faq/index.html:370 msgctxt "page:faq/index.html" msgid "Can I use REA without a coding agent?" msgstr "" -#: website/public/faq/index.html:369 +#: website/public/faq/index.html:371 msgctxt "page:faq/index.html" msgid "" "Yes. The CLI uses the same analysis workflows. For a local JavaScript or Electron app:" msgstr "" -#: website/public/faq/index.html:375 +#: website/public/faq/index.html:377 msgctxt "page:faq/index.html" msgid "Terminal · static application analysis" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:388 +#: website/public/faq/index.html:390 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3378,12 +3378,12 @@ msgid "" "CLI{ph1} for installation options." msgstr "" -#: website/public/faq/index.html:395 +#: website/public/faq/index.html:397 msgctxt "page:faq/index.html" msgid "What code does REA return?" msgstr "" -#: website/public/faq/index.html:396 +#: website/public/faq/index.html:398 msgctxt "page:faq/index.html" msgid "" "Native analysis returns assembly and pseudocode, with calls, references and relevant " @@ -3395,7 +3395,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/faq/index.html:401 +#: website/public/faq/index.html:403 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3404,12 +3404,12 @@ msgid "" "how that process works." msgstr "" -#: website/public/faq/index.html:412 +#: website/public/faq/index.html:414 msgctxt "page:faq/index.html" msgid "What should I ask my agent?" msgstr "" -#: website/public/faq/index.html:413 +#: website/public/faq/index.html:415 msgctxt "page:faq/index.html" msgid "" "Give it a local target and one behavior to investigate. For a JavaScript or Electron " @@ -3424,7 +3424,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/faq/index.html:419 +#: website/public/faq/index.html:421 #, python-brace-format msgctxt "page:faq/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" @@ -3437,7 +3437,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/faq/index.html:432 +#: website/public/faq/index.html:434 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3447,7 +3447,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:442 +#: website/public/faq/index.html:444 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3455,18 +3455,18 @@ msgid "" "Electron and browser examples." msgstr "" -#: website/public/faq/index.html:452 +#: website/public/faq/index.html:454 msgctxt "page:faq/index.html" msgid "Troubleshooting" msgstr "" -#: website/public/faq/index.html:455 +#: website/public/faq/index.html:457 msgctxt "page:faq/index.html" msgid "Why can't my agent see the REA tools?" msgstr "" #. {ph0}: doctor -#: website/public/faq/index.html:456 +#: website/public/faq/index.html:458 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3474,7 +3474,7 @@ msgid "" "for Codex:" msgstr "" -#: website/public/faq/index.html:462 +#: website/public/faq/index.html:464 msgctxt "page:faq/index.html" msgid "Terminal · check one client" msgstr "" @@ -3482,7 +3482,7 @@ msgstr "" #. {ph0}: codex #. {ph1}: claude_code #. {ph2}: cursor -#: website/public/faq/index.html:474 +#: website/public/faq/index.html:476 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3490,14 +3490,14 @@ msgid "" "missing or stale registration, run setup for that client:" msgstr "" -#: website/public/faq/index.html:482 +#: website/public/faq/index.html:484 msgctxt "page:faq/index.html" msgid "Terminal · repair one client's setup" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:494 +#: website/public/faq/index.html:496 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3505,14 +3505,14 @@ msgid "" "absent, check the client's MCP connection error. {ph0}More setup diagnostics{ph1}." msgstr "" -#: website/public/faq/index.html:502 +#: website/public/faq/index.html:504 msgctxt "page:faq/index.html" msgid "Do I need to start Hopper first?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:503 +#: website/public/faq/index.html:505 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3521,14 +3521,14 @@ msgid "" "provider setup{ph1}." msgstr "" -#: website/public/faq/index.html:512 +#: website/public/faq/index.html:514 msgctxt "page:faq/index.html" msgid "What should I do if I hit a bug?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:513 +#: website/public/faq/index.html:515 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3538,7 +3538,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:517 +#: website/public/faq/index.html:519 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3547,24 +3547,24 @@ msgid "" "problem involves native analysis." msgstr "" -#: website/public/faq/index.html:531 +#: website/public/faq/index.html:533 msgctxt "page:faq/index.html" msgid "Data and sharing" msgstr "" -#: website/public/faq/index.html:534 +#: website/public/faq/index.html:536 msgctxt "page:faq/index.html" msgid "Does REA upload my app?" msgstr "" -#: website/public/faq/index.html:535 +#: website/public/faq/index.html:537 msgctxt "page:faq/index.html" msgid "" "REA analyzes targets on your machine. Your agent receives the results, and its model " "provider's data policy applies to those results." msgstr "" -#: website/public/faq/index.html:542 +#: website/public/faq/index.html:544 msgctxt "page:faq/index.html" msgid "How can I share an example or contribute?" msgstr "" @@ -3573,7 +3573,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/faq/index.html:543 +#: website/public/faq/index.html:545 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3584,7 +3584,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/faq/index.html:555 +#: website/public/faq/index.html:557 #, python-brace-format msgctxt "page:faq/index.html" msgid "" @@ -3604,77 +3604,77 @@ msgid "" " troubleshooting and sharing examples." msgstr "" -#: website/public/faq/index.html:206 +#: website/public/faq/index.html:208 msgctxt "page:faq/index.html" msgid "On this page" msgstr "" -#: website/public/faq/index.html:215 +#: website/public/faq/index.html:217 msgctxt "page:faq/index.html" msgid "Frequently asked questions about REA" msgstr "" -#: website/public/faq/index.html:233 +#: website/public/faq/index.html:235 msgctxt "page:faq/index.html" msgid "Copy REA setup command" msgstr "" -#: website/public/faq/index.html:274 +#: website/public/faq/index.html:276 msgctxt "page:faq/index.html" msgid "Copy REA update command" msgstr "" -#: website/public/faq/index.html:292 +#: website/public/faq/index.html:294 msgctxt "page:faq/index.html" msgid "Copy agent setup refresh command" msgstr "" -#: website/public/faq/index.html:376 +#: website/public/faq/index.html:378 msgctxt "page:faq/index.html" msgid "Copy REA CLI analysis command" msgstr "" -#: website/public/faq/index.html:423 +#: website/public/faq/index.html:425 msgctxt "page:faq/index.html" msgid "Copy example analysis prompt" msgstr "" -#: website/public/faq/index.html:463 +#: website/public/faq/index.html:465 msgctxt "page:faq/index.html" msgid "Copy client diagnosis command" msgstr "" -#: website/public/faq/index.html:483 +#: website/public/faq/index.html:485 msgctxt "page:faq/index.html" msgid "Copy scoped setup command" msgstr "" -#: website/public/faq/index.html:582 +#: website/public/faq/index.html:584 msgctxt "page:faq/index.html" msgid "Back to top" msgstr "" -#: website/public/first-investigation/index.html:111 +#: website/public/first-investigation/index.html:113 msgctxt "page:first-investigation/index.html" msgid "Skip to content" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:201 +#: website/public/first-investigation/index.html:203 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}Home{ph1} / Your first investigation" msgstr "" #. {ph0}:
-#: website/public/first-investigation/index.html:204 +#: website/public/first-investigation/index.html:206 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "Find out where{ph0}exported notes go." msgstr "" -#: website/public/first-investigation/index.html:205 +#: website/public/first-investigation/index.html:207 msgctxt "page:first-investigation/index.html" msgid "" "Use REA to inspect a small app, follow its Export notes button and check one detail " @@ -3682,20 +3682,20 @@ msgid "" msgstr "" #. {ph0}: Node.js -#: website/public/first-investigation/index.html:209 +#: website/public/first-investigation/index.html:211 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "A supplied example · {ph0} and npm · Your coding agent" msgstr "" -#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:218 msgctxt "page:first-investigation/index.html" msgid "In this exercise" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:218 +#: website/public/first-investigation/index.html:220 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}1. Set up{ph1}" @@ -3703,7 +3703,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:219 +#: website/public/first-investigation/index.html:221 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}2. Ask about export{ph1}" @@ -3711,7 +3711,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:220 +#: website/public/first-investigation/index.html:222 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}3. Follow the answer{ph1}" @@ -3719,7 +3719,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:223 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}4. Check a prediction{ph1}" @@ -3727,13 +3727,13 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:222 +#: website/public/first-investigation/index.html:224 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}5. Ask another question{ph1}" msgstr "" -#: website/public/first-investigation/index.html:227 +#: website/public/first-investigation/index.html:229 msgctxt "page:first-investigation/index.html" msgid "1. Connect your agent to REA" msgstr "" @@ -3741,7 +3741,7 @@ msgstr "" #. {ph0}: Node.js #. {ph1}: #. {ph2}: -#: website/public/first-investigation/index.html:228 +#: website/public/first-investigation/index.html:230 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3757,20 +3757,20 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/first-investigation/index.html:236 -#: website/public/first-investigation/index.html:286 -#: website/public/first-investigation/index.html:408 +#: website/public/first-investigation/index.html:238 +#: website/public/first-investigation/index.html:288 +#: website/public/first-investigation/index.html:410 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/first-investigation/index.html:241 -#: website/public/first-investigation/index.html:263 -#: website/public/first-investigation/index.html:291 -#: website/public/first-investigation/index.html:413 -#: website/public/first-investigation/index.html:454 -#: website/public/first-investigation/index.html:471 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:265 +#: website/public/first-investigation/index.html:293 +#: website/public/first-investigation/index.html:415 +#: website/public/first-investigation/index.html:456 +#: website/public/first-investigation/index.html:473 msgctxt "page:first-investigation/index.html" msgid "Copy" msgstr "" @@ -3782,7 +3782,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/first-investigation/index.html:250 +#: website/public/first-investigation/index.html:252 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3790,26 +3790,26 @@ msgid "" "the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}" msgstr "" -#: website/public/first-investigation/index.html:260 +#: website/public/first-investigation/index.html:262 msgctxt "page:first-investigation/index.html" msgid "Or run this command in your terminal:" msgstr "" -#: website/public/first-investigation/index.html:272 +#: website/public/first-investigation/index.html:274 msgctxt "page:first-investigation/index.html" msgid "" "Review the plan, approve the setup, then restart your agent. Already connected? " "Continue below." msgstr "" -#: website/public/first-investigation/index.html:278 +#: website/public/first-investigation/index.html:280 msgctxt "page:first-investigation/index.html" msgid "2. Ask where the CSV is written" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:279 +#: website/public/first-investigation/index.html:281 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3825,7 +3825,7 @@ msgstr "" #. {ph5}: #. {ph6}: -#: website/public/first-investigation/index.html:300 +#: website/public/first-investigation/index.html:302 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3834,7 +3834,7 @@ msgid "" " it contains, and the relevant files and lines.{ph5}{ph6}{ph7}" msgstr "" -#: website/public/first-investigation/index.html:314 +#: website/public/first-investigation/index.html:316 msgctxt "page:first-investigation/index.html" msgid "" "Your agent downloads the files and gives the unpacked folder to REA for inspection." @@ -3843,14 +3843,14 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:318 +#: website/public/first-investigation/index.html:320 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}Download example ZIP{ph1}" msgstr "" #. {ph0}: notes-example -#: website/public/first-investigation/index.html:326 +#: website/public/first-investigation/index.html:328 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3858,12 +3858,12 @@ msgid "" "the {ph0} folder and the same export question." msgstr "" -#: website/public/first-investigation/index.html:333 +#: website/public/first-investigation/index.html:335 msgctxt "page:first-investigation/index.html" msgid "3. Follow the answer back to the code" msgstr "" -#: website/public/first-investigation/index.html:334 +#: website/public/first-investigation/index.html:336 msgctxt "page:first-investigation/index.html" msgid "Look for a short explanation with file and line references:" msgstr "" @@ -3872,7 +3872,7 @@ msgstr "" #. {ph1}: notes.csv #. {ph2}: id #. {ph3}: title -#: website/public/first-investigation/index.html:336 +#: website/public/first-investigation/index.html:338 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3880,7 +3880,7 @@ msgid "" " {ph1} in the user’s Downloads folder. The columns are {ph2} and {ph3}." msgstr "" -#: website/public/first-investigation/index.html:344 +#: website/public/first-investigation/index.html:346 msgctxt "page:first-investigation/index.html" msgid "From the button to the file writer" msgstr "" @@ -3893,7 +3893,7 @@ msgstr "" #. {ph5}: #. {ph6}: notes.exportCsv() #. {ph7}: -#: website/public/first-investigation/index.html:346 +#: website/public/first-investigation/index.html:348 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" @@ -3907,7 +3907,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/first-investigation/index.html:354 +#: website/public/first-investigation/index.html:356 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3924,7 +3924,7 @@ msgstr "" #. {ph6}: #. {ph7}: csv.js #. {ph8}: -#: website/public/first-investigation/index.html:362 +#: website/public/first-investigation/index.html:364 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3932,7 +3932,7 @@ msgid "" "writes the file.{ph8}" msgstr "" -#: website/public/first-investigation/index.html:373 +#: website/public/first-investigation/index.html:375 msgctxt "page:first-investigation/index.html" msgid "" "REA’s static analysis pairs the message with its handler. The destination is read from" @@ -3940,18 +3940,18 @@ msgid "" msgstr "" #. {ph0}: main.js -#: website/public/first-investigation/index.html:380 +#: website/public/first-investigation/index.html:382 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0} · lines 8–12" msgstr "" -#: website/public/first-investigation/index.html:381 +#: website/public/first-investigation/index.html:383 msgctxt "page:first-investigation/index.html" msgid "Source" msgstr "" -#: website/public/first-investigation/index.html:389 +#: website/public/first-investigation/index.html:391 msgctxt "page:first-investigation/index.html" msgid "" "The file path, formatter and write call are together in this handler. Ask your agent " @@ -3960,18 +3960,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/first-investigation/index.html:394 +#: website/public/first-investigation/index.html:396 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "{ph0}See the full code trace and recorded REA result{ph1}." msgstr "" -#: website/public/first-investigation/index.html:401 +#: website/public/first-investigation/index.html:403 msgctxt "page:first-investigation/index.html" msgid "4. Check a prediction" msgstr "" -#: website/public/first-investigation/index.html:402 +#: website/public/first-investigation/index.html:404 msgctxt "page:first-investigation/index.html" msgid "" "A comma separates CSV columns. What happens when a note title itself contains a comma " @@ -3987,7 +3987,7 @@ msgstr "" #. {ph6}: #. {ph7}: -#: website/public/first-investigation/index.html:422 +#: website/public/first-investigation/index.html:424 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -3996,13 +3996,13 @@ msgid "" "output.{ph6}{ph7}{ph8}" msgstr "" -#: website/public/first-investigation/index.html:435 +#: website/public/first-investigation/index.html:437 msgctxt "page:first-investigation/index.html" msgid "Expected formatter output" msgstr "" #. {ph0}: Node.js -#: website/public/first-investigation/index.html:440 +#: website/public/first-investigation/index.html:442 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -4010,34 +4010,34 @@ msgid "" "formatter directly with {ph0}." msgstr "" -#: website/public/first-investigation/index.html:446 +#: website/public/first-investigation/index.html:448 msgctxt "page:first-investigation/index.html" msgid "Run the check yourself" msgstr "" #. {ph0}: notes-example -#: website/public/first-investigation/index.html:447 +#: website/public/first-investigation/index.html:449 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "Open a terminal in the unpacked {ph0} folder:" msgstr "" -#: website/public/first-investigation/index.html:488 +#: website/public/first-investigation/index.html:490 msgctxt "page:first-investigation/index.html" msgid "5. Ask another question" msgstr "" -#: website/public/first-investigation/index.html:489 +#: website/public/first-investigation/index.html:491 msgctxt "page:first-investigation/index.html" msgid "Try a follow-up in the same conversation:" msgstr "" -#: website/public/first-investigation/index.html:491 +#: website/public/first-investigation/index.html:493 msgctxt "page:first-investigation/index.html" msgid "What happens if the file can’t be written? Follow the error back to the page." msgstr "" -#: website/public/first-investigation/index.html:496 +#: website/public/first-investigation/index.html:498 msgctxt "page:first-investigation/index.html" msgid "" "Or give your agent an app of your own and ask about one button, file or behavior." @@ -4047,7 +4047,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/first-investigation/index.html:501 +#: website/public/first-investigation/index.html:503 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -4059,7 +4059,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/first-investigation/index.html:507 +#: website/public/first-investigation/index.html:509 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -4071,7 +4071,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/first-investigation/index.html:515 +#: website/public/first-investigation/index.html:517 #, python-brace-format msgctxt "page:first-investigation/index.html" msgid "" @@ -4091,66 +4091,66 @@ msgid "" "check the CSV formatter with a sample title." msgstr "" -#: website/public/first-investigation/index.html:215 +#: website/public/first-investigation/index.html:217 msgctxt "page:first-investigation/index.html" msgid "On this page" msgstr "" -#: website/public/first-investigation/index.html:225 +#: website/public/first-investigation/index.html:227 msgctxt "page:first-investigation/index.html" msgid "Your first REA investigation" msgstr "" -#: website/public/first-investigation/index.html:241 +#: website/public/first-investigation/index.html:243 msgctxt "page:first-investigation/index.html" msgid "Copy REA installation prompt" msgstr "" -#: website/public/first-investigation/index.html:263 +#: website/public/first-investigation/index.html:265 msgctxt "page:first-investigation/index.html" msgid "Copy setup command" msgstr "" -#: website/public/first-investigation/index.html:291 +#: website/public/first-investigation/index.html:293 msgctxt "page:first-investigation/index.html" msgid "Copy Notes investigation prompt" msgstr "" -#: website/public/first-investigation/index.html:413 +#: website/public/first-investigation/index.html:415 msgctxt "page:first-investigation/index.html" msgid "Copy CSV check prompt" msgstr "" -#: website/public/first-investigation/index.html:454 -#: website/public/first-investigation/index.html:471 +#: website/public/first-investigation/index.html:456 +#: website/public/first-investigation/index.html:473 msgctxt "page:first-investigation/index.html" msgid "Copy formatter check command" msgstr "" -#: website/public/first-investigation/index.html:543 +#: website/public/first-investigation/index.html:545 msgctxt "page:first-investigation/index.html" msgid "Back to top" msgstr "" -#: website/public/get-started/index.html:111 +#: website/public/get-started/index.html:113 msgctxt "page:get-started/index.html" msgid "Skip to content" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:201 +#: website/public/get-started/index.html:203 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Home{ph1} / Get started" msgstr "" -#: website/public/get-started/index.html:202 +#: website/public/get-started/index.html:204 msgctxt "page:get-started/index.html" msgid "Set up REA." msgstr "" -#: website/public/get-started/index.html:203 +#: website/public/get-started/index.html:205 msgctxt "page:get-started/index.html" msgid "" "Set up your computer and coding agent, connect REA, then investigate a small app." @@ -4158,7 +4158,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:207 +#: website/public/get-started/index.html:209 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4166,14 +4166,14 @@ msgid "" "{ph0}Connect REA{ph1}." msgstr "" -#: website/public/get-started/index.html:214 website/public/get-started/index.html:213 +#: website/public/get-started/index.html:216 website/public/get-started/index.html:215 msgctxt "page:get-started/index.html" msgid "On this page" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:216 +#: website/public/get-started/index.html:218 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}1. Prepare your computer{ph1}" @@ -4181,7 +4181,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:217 +#: website/public/get-started/index.html:219 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}2. Choose an agent{ph1}" @@ -4189,7 +4189,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:218 +#: website/public/get-started/index.html:220 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}3. Connect REA{ph1}" @@ -4197,7 +4197,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:221 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}4. Try an investigation{ph1}" @@ -4205,7 +4205,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:222 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Other targets and providers{ph1}" @@ -4213,7 +4213,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:221 +#: website/public/get-started/index.html:223 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Use the CLI{ph1}" @@ -4221,25 +4221,25 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:222 +#: website/public/get-started/index.html:224 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Getting help{ph1}" msgstr "" -#: website/public/get-started/index.html:227 +#: website/public/get-started/index.html:229 msgctxt "page:get-started/index.html" msgid "1. Prepare your computer" msgstr "" -#: website/public/get-started/index.html:228 +#: website/public/get-started/index.html:230 msgctxt "page:get-started/index.html" msgid "" "Use the computer where your target files are stored. A local coding agent can read " "those files and run tools for you." msgstr "" -#: website/public/get-started/index.html:233 +#: website/public/get-started/index.html:235 msgctxt "page:get-started/index.html" msgid "How do I open a terminal?" msgstr "" @@ -4248,7 +4248,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:235 +#: website/public/get-started/index.html:237 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4261,7 +4261,7 @@ msgstr "" #. {ph3}: Space #. {ph4}: #. {ph5}: -#: website/public/get-started/index.html:239 +#: website/public/get-started/index.html:241 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." @@ -4272,7 +4272,7 @@ msgstr "" #. {ph2}: Ctrl #. {ph3}: Alt #. {ph4}: T -#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:245 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." @@ -4285,7 +4285,7 @@ msgstr "" #. {ph4}: Ctrl #. {ph5}: Shift #. {ph6}: V -#: website/public/get-started/index.html:248 +#: website/public/get-started/index.html:250 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4293,7 +4293,7 @@ msgid "" "{ph6}), then press Enter." msgstr "" -#: website/public/get-started/index.html:253 +#: website/public/get-started/index.html:255 msgctxt "page:get-started/index.html" msgid "" "Commands go in the terminal. Prompts labeled “Your coding agent” go in the agent's " @@ -4302,7 +4302,7 @@ msgstr "" #. {ph0}: Node.js #. {ph1}: Node.js -#: website/public/get-started/index.html:258 +#: website/public/get-started/index.html:260 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4311,47 +4311,47 @@ msgid "" msgstr "" #. {ph0}: Node.js -#: website/public/get-started/index.html:264 +#: website/public/get-started/index.html:266 #, python-brace-format msgctxt "page:get-started/index.html" msgid "Don't have {ph0}, or not sure?" msgstr "" -#: website/public/get-started/index.html:267 +#: website/public/get-started/index.html:269 msgctxt "page:get-started/index.html" msgid "Open a terminal and check:" msgstr "" -#: website/public/get-started/index.html:270 +#: website/public/get-started/index.html:272 msgctxt "page:get-started/index.html" msgid "Terminal" msgstr "" -#: website/public/get-started/index.html:271 website/public/get-started/index.html:294 -#: website/public/get-started/index.html:324 website/public/get-started/index.html:349 -#: website/public/get-started/index.html:372 website/public/get-started/index.html:387 -#: website/public/get-started/index.html:421 website/public/get-started/index.html:452 -#: website/public/get-started/index.html:466 website/public/get-started/index.html:484 -#: website/public/get-started/index.html:536 website/public/get-started/index.html:550 -#: website/public/get-started/index.html:582 website/public/get-started/index.html:611 -#: website/public/get-started/index.html:777 website/public/get-started/index.html:807 -#: website/public/get-started/index.html:832 website/public/get-started/index.html:847 -#: website/public/get-started/index.html:895 website/public/get-started/index.html:928 -#: website/public/get-started/index.html:1083 website/public/get-started/index.html:1145 -#: website/public/get-started/index.html:1168 website/public/get-started/index.html:1192 -#: website/public/get-started/index.html:1240 website/public/get-started/index.html:1315 -#: website/public/get-started/index.html:1341 website/public/get-started/index.html:1358 -#: website/public/get-started/index.html:1601 website/public/get-started/index.html:1660 -#: website/public/get-started/index.html:1679 website/public/get-started/index.html:1701 -#: website/public/get-started/index.html:1744 website/public/get-started/index.html:1774 -#: website/public/get-started/index.html:1795 +#: website/public/get-started/index.html:273 website/public/get-started/index.html:296 +#: website/public/get-started/index.html:326 website/public/get-started/index.html:351 +#: website/public/get-started/index.html:374 website/public/get-started/index.html:389 +#: website/public/get-started/index.html:423 website/public/get-started/index.html:454 +#: website/public/get-started/index.html:468 website/public/get-started/index.html:486 +#: website/public/get-started/index.html:538 website/public/get-started/index.html:552 +#: website/public/get-started/index.html:584 website/public/get-started/index.html:613 +#: website/public/get-started/index.html:779 website/public/get-started/index.html:809 +#: website/public/get-started/index.html:834 website/public/get-started/index.html:849 +#: website/public/get-started/index.html:897 website/public/get-started/index.html:930 +#: website/public/get-started/index.html:1085 website/public/get-started/index.html:1147 +#: website/public/get-started/index.html:1170 website/public/get-started/index.html:1194 +#: website/public/get-started/index.html:1242 website/public/get-started/index.html:1317 +#: website/public/get-started/index.html:1343 website/public/get-started/index.html:1360 +#: website/public/get-started/index.html:1603 website/public/get-started/index.html:1662 +#: website/public/get-started/index.html:1681 website/public/get-started/index.html:1703 +#: website/public/get-started/index.html:1746 website/public/get-started/index.html:1776 +#: website/public/get-started/index.html:1797 msgctxt "page:get-started/index.html" msgid "Copy" msgstr "" #. {ph0}: node -v #. {ph1}: Node.js -#: website/public/get-started/index.html:283 +#: website/public/get-started/index.html:285 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4360,7 +4360,7 @@ msgid "" msgstr "" #. {ph0}: node -v -#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:307 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4369,7 +4369,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:309 +#: website/public/get-started/index.html:311 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Download the Node.js installer{ph1} if winget is unavailable." @@ -4380,7 +4380,7 @@ msgstr "" #. {ph2}: npx #. {ph3}: npx.cmd #. {ph4}: npm.cmd -#: website/public/get-started/index.html:315 +#: website/public/get-started/index.html:317 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4390,7 +4390,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:338 +#: website/public/get-started/index.html:340 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4398,13 +4398,13 @@ msgid "" "(.pkg){ph1}, open it and follow the installer. Then reopen Terminal." msgstr "" -#: website/public/get-started/index.html:345 +#: website/public/get-started/index.html:347 msgctxt "page:get-started/index.html" msgid "Already use Homebrew?" msgstr "" #. {ph0}: sudo apt install curl unzip -#: website/public/get-started/index.html:364 +#: website/public/get-started/index.html:366 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4412,14 +4412,14 @@ msgid "" "other distributions, use your package manager." msgstr "" -#: website/public/get-started/index.html:383 +#: website/public/get-started/index.html:385 msgctxt "page:get-started/index.html" msgid "Close the terminal, open it again, then:" msgstr "" #. {ph0}: nodejs #. {ph1}: node -v -#: website/public/get-started/index.html:400 +#: website/public/get-started/index.html:402 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4429,59 +4429,59 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:406 +#: website/public/get-started/index.html:408 #, python-brace-format msgctxt "page:get-started/index.html" msgid "Prefer a regular installer? Download the LTS version from {ph0}nodejs.org{ph1}." msgstr "" -#: website/public/get-started/index.html:413 +#: website/public/get-started/index.html:415 msgctxt "page:get-started/index.html" msgid "Make a working folder for your agent" msgstr "" -#: website/public/get-started/index.html:414 +#: website/public/get-started/index.html:416 msgctxt "page:get-started/index.html" msgid "In your terminal, make a folder for the exercise, then move into it:" msgstr "" -#: website/public/get-started/index.html:433 +#: website/public/get-started/index.html:435 msgctxt "page:get-started/index.html" msgid "" "Keep this terminal open for the next step. If you already have a working folder, open " "it instead." msgstr "" -#: website/public/get-started/index.html:440 +#: website/public/get-started/index.html:442 msgctxt "page:get-started/index.html" msgid "2. Choose a coding agent" msgstr "" -#: website/public/get-started/index.html:441 +#: website/public/get-started/index.html:443 msgctxt "page:get-started/index.html" msgid "" "Your agent is the AI you talk to. REA supplies the inspection tools it uses. Pick one " "client below; open its instructions if you haven't used it before." msgstr "" -#: website/public/get-started/index.html:447 +#: website/public/get-started/index.html:449 msgctxt "page:get-started/index.html" msgid "Codex · use your ChatGPT account" msgstr "" -#: website/public/get-started/index.html:448 +#: website/public/get-started/index.html:450 msgctxt "page:get-started/index.html" msgid "Install Codex using the command for your operating system:" msgstr "" -#: website/public/get-started/index.html:477 +#: website/public/get-started/index.html:479 msgctxt "page:get-started/index.html" msgid "" "After installation, reopen your terminal and return to the working folder. Then start " "Codex:" msgstr "" -#: website/public/get-started/index.html:495 +#: website/public/get-started/index.html:497 msgctxt "page:get-started/index.html" msgid "" "Choose “Sign in with ChatGPT”, complete the browser sign-in, then return to the " @@ -4490,28 +4490,28 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:500 +#: website/public/get-started/index.html:502 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Codex installation and sign-in{ph1}" msgstr "" -#: website/public/get-started/index.html:507 +#: website/public/get-started/index.html:509 msgctxt "page:get-started/index.html" msgid "Cursor, Windsurf or VS Code · use an editor" msgstr "" -#: website/public/get-started/index.html:509 +#: website/public/get-started/index.html:511 msgctxt "page:get-started/index.html" msgid "Install the editor for your operating system and sign in." msgstr "" -#: website/public/get-started/index.html:512 +#: website/public/get-started/index.html:514 msgctxt "page:get-started/index.html" msgid "Open the rea-work folder you made in step 1." msgstr "" -#: website/public/get-started/index.html:513 +#: website/public/get-started/index.html:515 msgctxt "page:get-started/index.html" msgid "" "Open its AI chat and choose Agent mode. In Windsurf or Devin Desktop, open the agent " @@ -4524,7 +4524,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/get-started/index.html:519 +#: website/public/get-started/index.html:521 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4532,18 +4532,18 @@ msgid "" "Copilot setup{ph5}" msgstr "" -#: website/public/get-started/index.html:531 +#: website/public/get-started/index.html:533 msgctxt "page:get-started/index.html" msgid "Claude Code · use your Claude account" msgstr "" -#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:534 msgctxt "page:get-started/index.html" msgid "Install using the command for your operating system:" msgstr "" #. {ph0}: claude -#: website/public/get-started/index.html:561 +#: website/public/get-started/index.html:563 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4553,18 +4553,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:566 +#: website/public/get-started/index.html:568 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Claude Code installation and account options{ph1}" msgstr "" -#: website/public/get-started/index.html:573 +#: website/public/get-started/index.html:575 msgctxt "page:get-started/index.html" msgid "Claude Desktop · use a desktop chat" msgstr "" -#: website/public/get-started/index.html:574 +#: website/public/get-started/index.html:576 msgctxt "page:get-started/index.html" msgid "" "Install Claude Desktop on Windows or macOS and sign in. Quit it completely, then run " @@ -4573,7 +4573,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:593 +#: website/public/get-started/index.html:595 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4586,20 +4586,20 @@ msgstr "" #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:597 +#: website/public/get-started/index.html:599 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Download Claude Desktop{ph1} · {ph2}Claude Desktop connection details{ph3}" msgstr "" -#: website/public/get-started/index.html:607 +#: website/public/get-started/index.html:609 msgctxt "page:get-started/index.html" msgid "OpenCode · choose an AI model" msgstr "" #. {ph0}: opencode #. {ph1}: /connect -#: website/public/get-started/index.html:622 +#: website/public/get-started/index.html:624 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4609,19 +4609,19 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:627 +#: website/public/get-started/index.html:629 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}OpenCode installation and model setup{ph1}" msgstr "" -#: website/public/get-started/index.html:634 +#: website/public/get-started/index.html:636 msgctxt "page:get-started/index.html" msgid "All supported clients and setup IDs" msgstr "" #. {ph0}: --client -#: website/public/get-started/index.html:635 +#: website/public/get-started/index.html:637 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4629,12 +4629,12 @@ msgid "" "in npm 6.8.0 and later." msgstr "" -#: website/public/get-started/index.html:643 +#: website/public/get-started/index.html:645 msgctxt "page:get-started/index.html" msgid "Client" msgstr "" -#: website/public/get-started/index.html:644 +#: website/public/get-started/index.html:646 msgctxt "page:get-started/index.html" msgid "Setup ID" msgstr "" @@ -4647,7 +4647,7 @@ msgstr "" #. {ph5}: workbuddy #. {ph6}: zcode #. {ph7}: freebuff -#: website/public/get-started/index.html:751 +#: website/public/get-started/index.html:753 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4661,20 +4661,20 @@ msgstr "" #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:757 +#: website/public/get-started/index.html:759 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" "{ph0}Client configuration and troubleshooting{ph1} · {ph2}Release availability{ph3}" msgstr "" -#: website/public/get-started/index.html:769 +#: website/public/get-started/index.html:771 msgctxt "page:get-started/index.html" msgid "Grok Bot · connect on its hosted computer" msgstr "" #. {ph0}: rea -#: website/public/get-started/index.html:770 +#: website/public/get-started/index.html:772 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4685,18 +4685,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:788 +#: website/public/get-started/index.html:790 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Grok Bot connector instructions{ph1}" msgstr "" -#: website/public/get-started/index.html:798 +#: website/public/get-started/index.html:800 msgctxt "page:get-started/index.html" msgid "3. Connect REA" msgstr "" -#: website/public/get-started/index.html:799 +#: website/public/get-started/index.html:801 msgctxt "page:get-started/index.html" msgid "Copy this into your coding agent:" msgstr "" @@ -4709,7 +4709,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:804 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" @@ -4722,7 +4722,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/get-started/index.html:816 +#: website/public/get-started/index.html:818 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4730,18 +4730,18 @@ msgid "" "the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}" msgstr "" -#: website/public/get-started/index.html:828 +#: website/public/get-started/index.html:830 msgctxt "page:get-started/index.html" msgid "Or run setup yourself" msgstr "" -#: website/public/get-started/index.html:843 +#: website/public/get-started/index.html:845 msgctxt "page:get-started/index.html" msgid "For one specific client, add its setup ID:" msgstr "" #. {ph0}: y -#: website/public/get-started/index.html:858 +#: website/public/get-started/index.html:860 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4749,7 +4749,7 @@ msgid "" " use the arrow keys to move, Space to select your client and Enter to continue." msgstr "" -#: website/public/get-started/index.html:864 +#: website/public/get-started/index.html:866 msgctxt "page:get-started/index.html" msgid "" "Choose your client and review the setup plan. REA adds its MCP connection and the " @@ -4757,21 +4757,21 @@ msgid "" "before applying the changes." msgstr "" -#: website/public/get-started/index.html:869 +#: website/public/get-started/index.html:871 msgctxt "page:get-started/index.html" msgid "" "MCP is the connection that lets your agent call REA. The skill gives it a workflow for" " investigating software." msgstr "" -#: website/public/get-started/index.html:873 +#: website/public/get-started/index.html:875 msgctxt "page:get-started/index.html" msgid "" "For the first exercise, you can skip the optional Hopper installation. Restart your " "client when setup finishes." msgstr "" -#: website/public/get-started/index.html:878 +#: website/public/get-started/index.html:880 msgctxt "page:get-started/index.html" msgid "How do I restart my client?" msgstr "" @@ -4780,7 +4780,7 @@ msgstr "" #. {ph1}: #. {ph2}: ⌘ #. {ph3}: Q -#: website/public/get-started/index.html:879 +#: website/public/get-started/index.html:881 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4791,7 +4791,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:886 +#: website/public/get-started/index.html:888 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4801,7 +4801,7 @@ msgstr "" #. {ph0}: codex #. {ph1}: "healthy": true -#: website/public/get-started/index.html:906 +#: website/public/get-started/index.html:908 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4809,19 +4809,19 @@ msgid "" "your agent:" msgstr "" -#: website/public/get-started/index.html:912 +#: website/public/get-started/index.html:914 msgctxt "page:get-started/index.html" msgid "Check that REA is connected and show me which REA tools you can use." msgstr "" -#: website/public/get-started/index.html:919 +#: website/public/get-started/index.html:921 msgctxt "page:get-started/index.html" msgid "4. Try your first investigation" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:920 +#: website/public/get-started/index.html:922 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4829,7 +4829,7 @@ msgid "" "agent can inspect its code without installing or launching Electron." msgstr "" -#: website/public/get-started/index.html:927 +#: website/public/get-started/index.html:929 msgctxt "page:get-started/index.html" msgid "Your coding agent" msgstr "" @@ -4842,7 +4842,7 @@ msgstr "" #. {ph5}: #. {ph6}: -#: website/public/get-started/index.html:937 +#: website/public/get-started/index.html:939 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4851,7 +4851,7 @@ msgid "" " it contains, and the relevant files and lines.{ph5}{ph6}{ph7}" msgstr "" -#: website/public/get-started/index.html:951 +#: website/public/get-started/index.html:953 msgctxt "page:get-started/index.html" msgid "Look for a short explanation with file and line references:" msgstr "" @@ -4860,7 +4860,7 @@ msgstr "" #. {ph1}: notes.csv #. {ph2}: id #. {ph3}: title -#: website/public/get-started/index.html:953 +#: website/public/get-started/index.html:955 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4870,13 +4870,13 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:960 +#: website/public/get-started/index.html:962 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Check a prediction in the guided exercise →{ph1}" msgstr "" -#: website/public/get-started/index.html:966 +#: website/public/get-started/index.html:968 msgctxt "page:get-started/index.html" msgid "Download the example yourself, or use your own app" msgstr "" @@ -4884,14 +4884,14 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:969 +#: website/public/get-started/index.html:971 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Download example ZIP{ph1}" msgstr "" #. {ph0}: notes-example -#: website/public/get-started/index.html:977 +#: website/public/get-started/index.html:979 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4900,7 +4900,7 @@ msgid "" msgstr "" #. {ph0}: /absolute/path/to/app -#: website/public/get-started/index.html:983 +#: website/public/get-started/index.html:985 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4908,7 +4908,7 @@ msgid "" "files and lines." msgstr "" -#: website/public/get-started/index.html:990 +#: website/public/get-started/index.html:992 msgctxt "page:get-started/index.html" msgid "How do I get a folder's full path?" msgstr "" @@ -4917,7 +4917,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:992 +#: website/public/get-started/index.html:994 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4929,7 +4929,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:997 +#: website/public/get-started/index.html:999 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4939,90 +4939,90 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1001 +#: website/public/get-started/index.html:1003 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" "{ph0}Any system:{ph1} drag the folder into a terminal window and its path appears." msgstr "" -#: website/public/get-started/index.html:1006 website/public/get-started/index.html:1767 +#: website/public/get-started/index.html:1008 website/public/get-started/index.html:1769 msgctxt "page:get-started/index.html" msgid "In a terminal, put quotes around a path that contains spaces." msgstr "" -#: website/public/get-started/index.html:1013 +#: website/public/get-started/index.html:1015 msgctxt "page:get-started/index.html" msgid "Analyze another kind of software" msgstr "" -#: website/public/get-started/index.html:1014 +#: website/public/get-started/index.html:1016 msgctxt "page:get-started/index.html" msgid "" "Choose the section for your target. A provider is the local analysis tool REA uses for" " that kind of software." msgstr "" -#: website/public/get-started/index.html:1019 +#: website/public/get-started/index.html:1021 msgctxt "page:get-started/index.html" msgid "Native executables and libraries · Hopper, Ghidra or IDA" msgstr "" -#: website/public/get-started/index.html:1022 +#: website/public/get-started/index.html:1024 msgctxt "page:get-started/index.html" msgid "" "Install one analysis tool on the computer running REA. The host is your operating " "system; the target is the program you want to inspect." msgstr "" -#: website/public/get-started/index.html:1031 +#: website/public/get-started/index.html:1033 msgctxt "page:get-started/index.html" msgid "Provider" msgstr "" -#: website/public/get-started/index.html:1040 +#: website/public/get-started/index.html:1042 msgctxt "page:get-started/index.html" msgid "Unavailable" msgstr "" -#: website/public/get-started/index.html:1042 +#: website/public/get-started/index.html:1044 msgctxt "page:get-started/index.html" msgid "x86_64 installer on supported distributions" msgstr "" -#: website/public/get-started/index.html:1046 +#: website/public/get-started/index.html:1048 msgctxt "page:get-started/index.html" msgid "x64 · experimental" msgstr "" -#: website/public/get-started/index.html:1052 +#: website/public/get-started/index.html:1054 msgctxt "page:get-started/index.html" msgid "Verified profiles" msgstr "" -#: website/public/get-started/index.html:1053 +#: website/public/get-started/index.html:1055 msgctxt "page:get-started/index.html" msgid "Verified headless profile" msgstr "" -#: website/public/get-started/index.html:1054 +#: website/public/get-started/index.html:1056 msgctxt "page:get-started/index.html" msgid "See provider guide" msgstr "" -#: website/public/get-started/index.html:1060 +#: website/public/get-started/index.html:1062 msgctxt "page:get-started/index.html" msgid "Hopper · let setup install or connect it" msgstr "" -#: website/public/get-started/index.html:1061 +#: website/public/get-started/index.html:1063 msgctxt "page:get-started/index.html" msgid "" "Connect Hopper on macOS or Linux. Run the setup command above; it detects an existing " "installation or offers an installation plan for your approval." msgstr "" -#: website/public/get-started/index.html:1066 +#: website/public/get-started/index.html:1068 msgctxt "page:get-started/index.html" msgid "" "Choose Hopper in setup and review its separate installation plan. On macOS, choose " @@ -5030,7 +5030,7 @@ msgid "" "the supported demo and its private display." msgstr "" -#: website/public/get-started/index.html:1072 +#: website/public/get-started/index.html:1074 msgctxt "page:get-started/index.html" msgid "" "Automated Linux setup requires an x86_64 host running Ubuntu 24.04+, Fedora 41+, " @@ -5039,7 +5039,7 @@ msgid "" "is commercial software; its demo has vendor-defined limits." msgstr "" -#: website/public/get-started/index.html:1094 +#: website/public/get-started/index.html:1096 msgctxt "page:get-started/index.html" msgid "" "If macOS asks for Automation permission, allow the app that starts REA in System " @@ -5049,18 +5049,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1099 +#: website/public/get-started/index.html:1101 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Hopper setup and troubleshooting{ph1}" msgstr "" -#: website/public/get-started/index.html:1107 +#: website/public/get-started/index.html:1109 msgctxt "page:get-started/index.html" msgid "Ghidra · install the free analysis tool and Java" msgstr "" -#: website/public/get-started/index.html:1111 +#: website/public/get-started/index.html:1113 msgctxt "page:get-started/index.html" msgid "" "Install a 64-bit JDK 21 or newer, including the Java compiler. Choose the package " @@ -5068,7 +5068,7 @@ msgid "" msgstr "" #. {ph0}: ghidra_…_PUBLIC_….zip -#: website/public/get-started/index.html:1116 +#: website/public/get-started/index.html:1118 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5079,7 +5079,7 @@ msgstr "" #. {ph0}: ghidraRun #. {ph1}: ghidraRun.bat #. {ph2}: GHIDRA_INSTALL_DIR -#: website/public/get-started/index.html:1121 +#: website/public/get-started/index.html:1123 #, python-brace-format msgctxt "page:get-started/index.html" msgid "Find the extracted folder containing {ph0} or {ph1}. Use that folder for {ph2}." @@ -5091,7 +5091,7 @@ msgstr "" #. href="https://github.com/NationalSecurityAgency/ghidra/releases/tag/Ghidra_12.1.4_build" #. > #. {ph3}: -#: website/public/get-started/index.html:1127 +#: website/public/get-started/index.html:1129 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Download a JDK{ph1} · {ph2}Download Ghidra 12.1.4{ph3}" @@ -5099,7 +5099,7 @@ msgstr "" #. {ph0}: java.home #. {ph1}: JAVA_HOME -#: website/public/get-started/index.html:1137 +#: website/public/get-started/index.html:1139 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5107,12 +5107,12 @@ msgid "" "confirms the compiler is installed:" msgstr "" -#: website/public/get-started/index.html:1158 +#: website/public/get-started/index.html:1160 msgctxt "page:get-started/index.html" msgid "Connect Ghidra on Windows" msgstr "" -#: website/public/get-started/index.html:1159 +#: website/public/get-started/index.html:1161 msgctxt "page:get-started/index.html" msgid "" "Windows x64 has experimental, read-only support for native x86 and x64 PE applications" @@ -5120,29 +5120,29 @@ msgid "" " 64-bit JDK 21 or newer:" msgstr "" -#: website/public/get-started/index.html:1182 +#: website/public/get-started/index.html:1184 msgctxt "page:get-started/index.html" msgid "Replace the two paths with your installations, then review setup's plan." msgstr "" -#: website/public/get-started/index.html:1188 +#: website/public/get-started/index.html:1190 msgctxt "page:get-started/index.html" msgid "Connect your Ghidra installation" msgstr "" -#: website/public/get-started/index.html:1204 +#: website/public/get-started/index.html:1206 msgctxt "page:get-started/index.html" msgid "" "Replace both paths with your existing installations. For a fresh macOS or Linux arm64 " "installation, build the native decompiler for your computer before continuing." msgstr "" -#: website/public/get-started/index.html:1210 +#: website/public/get-started/index.html:1212 msgctxt "page:get-started/index.html" msgid "Build Ghidra's native decompiler" msgstr "" -#: website/public/get-started/index.html:1211 +#: website/public/get-started/index.html:1213 msgctxt "page:get-started/index.html" msgid "" "On macOS, the build needs Xcode Command Line Tools, make and bison. Use the guide for " @@ -5152,7 +5152,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1216 +#: website/public/get-started/index.html:1218 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}macOS · Intel{ph1}" @@ -5161,7 +5161,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1222 +#: website/public/get-started/index.html:1224 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}macOS · Apple Silicon{ph1}" @@ -5171,18 +5171,18 @@ msgstr "" #. href="https://github.com/NationalSecurityAgency/ghidra/blob/Ghidra_12.1.4_build/GhidraDocs/GettingStarted.md#building- #. native-components" > #. {ph1}: -#: website/public/get-started/index.html:1228 +#: website/public/get-started/index.html:1230 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Linux arm64 · native build instructions{ph1}" msgstr "" -#: website/public/get-started/index.html:1236 +#: website/public/get-started/index.html:1238 msgctxt "page:get-started/index.html" msgid "Then check Ghidra and save its paths for your client:" msgstr "" -#: website/public/get-started/index.html:1253 +#: website/public/get-started/index.html:1255 msgctxt "page:get-started/index.html" msgid "" "Keep these commands in the same terminal session. Rerun setup after setting the paths," @@ -5195,19 +5195,19 @@ msgstr "" #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1258 +#: website/public/get-started/index.html:1260 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" "{ph0}Ghidra setup and architecture requirements{ph1} · {ph2}Windows Ghidra guide{ph3}" msgstr "" -#: website/public/get-started/index.html:1271 +#: website/public/get-started/index.html:1273 msgctxt "page:get-started/index.html" msgid "IDA · connect an existing installation" msgstr "" -#: website/public/get-started/index.html:1272 +#: website/public/get-started/index.html:1274 msgctxt "page:get-started/index.html" msgid "" "Use the IDA provider guide to prepare an upstream MCP registration. Choose an attached" @@ -5215,7 +5215,7 @@ msgid "" "database." msgstr "" -#: website/public/get-started/index.html:1277 +#: website/public/get-started/index.html:1279 msgctxt "page:get-started/index.html" msgid "" "Verified profiles include the Windows legacy GUI and headless supervisor, plus a macOS" @@ -5227,7 +5227,7 @@ msgstr "" #. setup" > #. {ph1}: #. {ph2}: 6.4.0 -#: website/public/get-started/index.html:1283 +#: website/public/get-started/index.html:1285 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5238,21 +5238,21 @@ msgstr "" #. {ph0}: node scripts/rea.mjs doctor --provider ida --json #. {ph1}: node scripts/rea.mjs setup #. {ph2}: npx -#: website/public/get-started/index.html:1292 +#: website/public/get-started/index.html:1294 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" "From the built checkout, run {ph0} and {ph1} instead of the {ph2} commands below." msgstr "" -#: website/public/get-started/index.html:1299 +#: website/public/get-started/index.html:1301 msgctxt "page:get-started/index.html" msgid "Prepare the IDA registration file" msgstr "" #. {ph0}: ida-mcp.json #. {ph1}: .txt -#: website/public/get-started/index.html:1300 +#: website/public/get-started/index.html:1302 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5264,7 +5264,7 @@ msgstr "" #. {ph0}: idb_open #. {ph1}: idb_list #. {ph2}: idb_close -#: website/public/get-started/index.html:1307 +#: website/public/get-started/index.html:1309 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5275,7 +5275,7 @@ msgstr "" #. {ph0}: command #. {ph1}: args #. {ph2}: env -#: website/public/get-started/index.html:1330 +#: website/public/get-started/index.html:1332 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5284,7 +5284,7 @@ msgid "" "before asking REA to inspect it." msgstr "" -#: website/public/get-started/index.html:1372 +#: website/public/get-started/index.html:1374 msgctxt "page:get-started/index.html" msgid "" "Use the JSON registration file you prepared with the provider guide, then rerun setup " @@ -5294,13 +5294,13 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1376 +#: website/public/get-started/index.html:1378 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}IDA profiles, registration examples and verified platforms{ph1}" msgstr "" -#: website/public/get-started/index.html:1384 +#: website/public/get-started/index.html:1386 msgctxt "page:get-started/index.html" msgid "" "Once connected, give your agent the original executable's full path and name your " @@ -5308,7 +5308,7 @@ msgid "" msgstr "" #. {ph0}: /absolute/path/to/program -#: website/public/get-started/index.html:1389 +#: website/public/get-started/index.html:1391 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5318,130 +5318,130 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1396 +#: website/public/get-started/index.html:1398 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Follow a native analysis example{ph1}" msgstr "" -#: website/public/get-started/index.html:1401 +#: website/public/get-started/index.html:1403 msgctxt "page:get-started/index.html" msgid "Websites, Android, .NET, firmware and other targets" msgstr "" -#: website/public/get-started/index.html:1404 +#: website/public/get-started/index.html:1406 msgctxt "page:get-started/index.html" msgid "" "Open the guide for the target you have. Each guide gives the additional tools, " "supported hosts and first command." msgstr "" -#: website/public/get-started/index.html:1412 +#: website/public/get-started/index.html:1414 msgctxt "page:get-started/index.html" msgid "Target" msgstr "" -#: website/public/get-started/index.html:1413 +#: website/public/get-started/index.html:1415 msgctxt "page:get-started/index.html" msgid "Tools to prepare" msgstr "" -#: website/public/get-started/index.html:1414 +#: website/public/get-started/index.html:1416 msgctxt "page:get-started/index.html" msgid "Guide" msgstr "" -#: website/public/get-started/index.html:1419 +#: website/public/get-started/index.html:1421 msgctxt "page:get-started/index.html" msgid "JavaScript / Electron" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1421 website/public/get-started/index.html:1426 -#: website/public/get-started/index.html:1431 website/public/get-started/index.html:1441 -#: website/public/get-started/index.html:1451 website/public/get-started/index.html:1461 -#: website/public/get-started/index.html:1471 website/public/get-started/index.html:1481 -#: website/public/get-started/index.html:1491 website/public/get-started/index.html:1501 -#: website/public/get-started/index.html:1511 website/public/get-started/index.html:1521 -#: website/public/get-started/index.html:1531 website/public/get-started/index.html:1541 -#: website/public/get-started/index.html:1551 website/public/get-started/index.html:1561 +#: website/public/get-started/index.html:1423 website/public/get-started/index.html:1428 +#: website/public/get-started/index.html:1433 website/public/get-started/index.html:1443 +#: website/public/get-started/index.html:1453 website/public/get-started/index.html:1463 +#: website/public/get-started/index.html:1473 website/public/get-started/index.html:1483 +#: website/public/get-started/index.html:1493 website/public/get-started/index.html:1503 +#: website/public/get-started/index.html:1513 website/public/get-started/index.html:1523 +#: website/public/get-started/index.html:1533 website/public/get-started/index.html:1543 +#: website/public/get-started/index.html:1553 website/public/get-started/index.html:1563 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Open guide{ph1}" msgstr "" -#: website/public/get-started/index.html:1424 +#: website/public/get-started/index.html:1426 msgctxt "page:get-started/index.html" msgid "Website" msgstr "" -#: website/public/get-started/index.html:1429 +#: website/public/get-started/index.html:1431 msgctxt "page:get-started/index.html" msgid ".NET / Flutter / packages" msgstr "" -#: website/public/get-started/index.html:1439 +#: website/public/get-started/index.html:1441 msgctxt "page:get-started/index.html" msgid "Android APK" msgstr "" -#: website/public/get-started/index.html:1449 +#: website/public/get-started/index.html:1451 msgctxt "page:get-started/index.html" msgid "Android device" msgstr "" -#: website/public/get-started/index.html:1459 +#: website/public/get-started/index.html:1461 msgctxt "page:get-started/index.html" msgid "Android resources" msgstr "" -#: website/public/get-started/index.html:1469 +#: website/public/get-started/index.html:1471 msgctxt "page:get-started/index.html" msgid "JEB project" msgstr "" -#: website/public/get-started/index.html:1479 +#: website/public/get-started/index.html:1481 msgctxt "page:get-started/index.html" msgid "Firmware" msgstr "" -#: website/public/get-started/index.html:1489 +#: website/public/get-started/index.html:1491 msgctxt "page:get-started/index.html" msgid "WASM" msgstr "" -#: website/public/get-started/index.html:1499 +#: website/public/get-started/index.html:1501 msgctxt "page:get-started/index.html" msgid "SQLite database" msgstr "" -#: website/public/get-started/index.html:1509 +#: website/public/get-started/index.html:1511 msgctxt "page:get-started/index.html" msgid "EVM bytecode" msgstr "" -#: website/public/get-started/index.html:1519 +#: website/public/get-started/index.html:1521 msgctxt "page:get-started/index.html" msgid "ELF / Linux crash" msgstr "" -#: website/public/get-started/index.html:1529 +#: website/public/get-started/index.html:1531 msgctxt "page:get-started/index.html" msgid "HAR / SAZ / mitmproxy" msgstr "" -#: website/public/get-started/index.html:1539 +#: website/public/get-started/index.html:1541 msgctxt "page:get-started/index.html" msgid "PCAP / PCAPNG" msgstr "" -#: website/public/get-started/index.html:1549 +#: website/public/get-started/index.html:1551 msgctxt "page:get-started/index.html" msgid "Logic signals" msgstr "" -#: website/public/get-started/index.html:1559 +#: website/public/get-started/index.html:1561 msgctxt "page:get-started/index.html" msgid "Process behavior" msgstr "" @@ -5458,7 +5458,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/get-started/index.html:1571 +#: website/public/get-started/index.html:1573 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5466,31 +5466,31 @@ msgid "" "{ph6}All investigation guides{ph7}" msgstr "" -#: website/public/get-started/index.html:1591 +#: website/public/get-started/index.html:1593 msgctxt "page:get-started/index.html" msgid "Use REA from a terminal" msgstr "" -#: website/public/get-started/index.html:1593 +#: website/public/get-started/index.html:1595 msgctxt "page:get-started/index.html" msgid "CLI commands, global installation and curl" msgstr "" -#: website/public/get-started/index.html:1594 +#: website/public/get-started/index.html:1596 msgctxt "page:get-started/index.html" msgid "" "Analyze a JavaScript or Electron application folder or ASAR archive without running " "the app:" msgstr "" -#: website/public/get-started/index.html:1600 +#: website/public/get-started/index.html:1602 msgctxt "page:get-started/index.html" msgid "Static application analysis" msgstr "" #. {ph0}: .asar #. {ph1}: "D:/apps/example" -#: website/public/get-started/index.html:1612 +#: website/public/get-started/index.html:1614 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5498,13 +5498,13 @@ msgid "" "such as {ph1} works here." msgstr "" -#: website/public/get-started/index.html:1618 +#: website/public/get-started/index.html:1620 msgctxt "page:get-started/index.html" msgid "Where do I find an app's .asar file?" msgstr "" #. {ph0}: resources -#: website/public/get-started/index.html:1619 +#: website/public/get-started/index.html:1621 #, python-brace-format msgctxt "page:get-started/index.html" msgid "Electron apps usually keep it in a {ph0} folder:" @@ -5514,7 +5514,7 @@ msgstr "" #. {ph1}: #. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar -#: website/public/get-started/index.html:1624 +#: website/public/get-started/index.html:1626 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Windows:{ph1} {ph2}" @@ -5525,7 +5525,7 @@ msgstr "" #. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar #. {ph3}: #. {ph4}: -#: website/public/get-started/index.html:1630 +#: website/public/get-started/index.html:1632 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5536,20 +5536,20 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: /opt/<App>/resources/app.asar -#: website/public/get-started/index.html:1638 +#: website/public/get-started/index.html:1640 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Linux:{ph1} often {ph2}" msgstr "" #. {ph0}: app.asar -#: website/public/get-started/index.html:1643 +#: website/public/get-started/index.html:1645 #, python-brace-format msgctxt "page:get-started/index.html" msgid "Some apps install elsewhere. Search the app's folder for {ph0}." msgstr "" -#: website/public/get-started/index.html:1648 +#: website/public/get-started/index.html:1650 msgctxt "page:get-started/index.html" msgid "" "The result identifies the app, shows connections between modules and gives their " @@ -5557,27 +5557,27 @@ msgid "" msgstr "" #. {ph0}: rea -#: website/public/get-started/index.html:1653 +#: website/public/get-started/index.html:1655 #, python-brace-format msgctxt "page:get-started/index.html" msgid "If you'd like a permanent {ph0} command in your shell:" msgstr "" -#: website/public/get-started/index.html:1659 +#: website/public/get-started/index.html:1661 msgctxt "page:get-started/index.html" msgid "Install the CLI" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1671 +#: website/public/get-started/index.html:1673 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Continue with the JavaScript application guide{ph1}" msgstr "" #. {ph0}: main -#: website/public/get-started/index.html:1690 +#: website/public/get-started/index.html:1692 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5585,13 +5585,13 @@ msgid "" "must be configured first." msgstr "" -#: website/public/get-started/index.html:1694 +#: website/public/get-started/index.html:1696 msgctxt "page:get-started/index.html" msgid "On macOS or Linux, you can also use the curl installer after preparing Node.js:" msgstr "" #. {ph0}: rea setup -#: website/public/get-started/index.html:1712 +#: website/public/get-started/index.html:1714 #, python-brace-format msgctxt "page:get-started/index.html" msgid "Follow the setup prompts to connect your agent. If they don't appear, run {ph0}." @@ -5599,7 +5599,7 @@ msgstr "" #. {ph0}: rea #. {ph1}: "$HOME/.local/bin/rea" setup -#: website/public/get-started/index.html:1716 +#: website/public/get-started/index.html:1718 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5607,18 +5607,18 @@ msgid "" "Linux, the default setup command is {ph1}." msgstr "" -#: website/public/get-started/index.html:1725 +#: website/public/get-started/index.html:1727 msgctxt "page:get-started/index.html" msgid "Getting help" msgstr "" -#: website/public/get-started/index.html:1727 +#: website/public/get-started/index.html:1729 msgctxt "page:get-started/index.html" msgid "If your agent doesn't see REA" msgstr "" #. {ph0}: doctor -#: website/public/get-started/index.html:1728 +#: website/public/get-started/index.html:1730 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5626,39 +5626,39 @@ msgid "" "Codex:" msgstr "" -#: website/public/get-started/index.html:1732 +#: website/public/get-started/index.html:1734 msgctxt "page:get-started/index.html" msgid "" "Use the client check in step 3 with your setup ID. In editor clients, enable REA in " "MCP settings and allow its tools in the agent chat." msgstr "" -#: website/public/get-started/index.html:1739 +#: website/public/get-started/index.html:1741 msgctxt "page:get-started/index.html" msgid "If a provider needs attention" msgstr "" -#: website/public/get-started/index.html:1740 +#: website/public/get-started/index.html:1742 msgctxt "page:get-started/index.html" msgid "Check the provider you're using. For Ghidra:" msgstr "" -#: website/public/get-started/index.html:1743 +#: website/public/get-started/index.html:1745 msgctxt "page:get-started/index.html" msgid "Check one provider" msgstr "" -#: website/public/get-started/index.html:1755 +#: website/public/get-started/index.html:1757 msgctxt "page:get-started/index.html" msgid "The report gives the failed check and a suggested next step." msgstr "" -#: website/public/get-started/index.html:1760 +#: website/public/get-started/index.html:1762 msgctxt "page:get-started/index.html" msgid "Windows, WSL and paths with spaces" msgstr "" -#: website/public/get-started/index.html:1761 +#: website/public/get-started/index.html:1763 msgctxt "page:get-started/index.html" msgid "" "Use Windows PowerShell for Windows clients and analysis tools. If your agent runs " @@ -5666,17 +5666,17 @@ msgid "" "there. Headless providers run on the same host as REA." msgstr "" -#: website/public/get-started/index.html:1770 +#: website/public/get-started/index.html:1772 msgctxt "page:get-started/index.html" msgid "Windows setup command:" msgstr "" -#: website/public/get-started/index.html:1787 +#: website/public/get-started/index.html:1789 msgctxt "page:get-started/index.html" msgid "Update or remove REA" msgstr "" -#: website/public/get-started/index.html:1788 +#: website/public/get-started/index.html:1790 msgctxt "page:get-started/index.html" msgid "" "To refresh your agent connection, run the latest setup command again, review its plan " @@ -5685,7 +5685,7 @@ msgstr "" #. {ph0}: rea update #. {ph1}: npx rea-agents@latest uninstall -#: website/public/get-started/index.html:1806 +#: website/public/get-started/index.html:1808 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5696,7 +5696,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1812 +#: website/public/get-started/index.html:1814 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Update and uninstall details{ph1}" @@ -5706,7 +5706,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1820 +#: website/public/get-started/index.html:1822 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" @@ -5716,7 +5716,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1824 +#: website/public/get-started/index.html:1826 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5728,7 +5728,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1831 +#: website/public/get-started/index.html:1833 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5739,7 +5739,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1835 +#: website/public/get-started/index.html:1837 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}REA community{ph1}{ph2}Questions, investigations and work in progress.{ph3}" @@ -5757,88 +5757,88 @@ msgid "" "the terminal. Setup, first questions and native provider guides." msgstr "" -#: website/public/get-started/index.html:225 +#: website/public/get-started/index.html:227 msgctxt "page:get-started/index.html" msgid "REA getting started guide" msgstr "" -#: website/public/get-started/index.html:271 +#: website/public/get-started/index.html:273 msgctxt "page:get-started/index.html" msgid "Copy Node.js version check" msgstr "" -#: website/public/get-started/index.html:294 +#: website/public/get-started/index.html:296 msgctxt "page:get-started/index.html" msgid "Copy Node.js installation command for Windows" msgstr "" -#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:326 msgctxt "page:get-started/index.html" msgid "Copy Windows REA setup command" msgstr "" -#: website/public/get-started/index.html:349 +#: website/public/get-started/index.html:351 msgctxt "page:get-started/index.html" msgid "Copy Homebrew Node.js installation command" msgstr "" -#: website/public/get-started/index.html:372 +#: website/public/get-started/index.html:374 msgctxt "page:get-started/index.html" msgid "Copy fnm installation command for Linux" msgstr "" -#: website/public/get-started/index.html:387 +#: website/public/get-started/index.html:389 msgctxt "page:get-started/index.html" msgid "Copy Node.js 24 commands for Linux" msgstr "" -#: website/public/get-started/index.html:421 website/public/get-started/index.html:452 -#: website/public/get-started/index.html:466 website/public/get-started/index.html:484 -#: website/public/get-started/index.html:536 website/public/get-started/index.html:550 -#: website/public/get-started/index.html:582 website/public/get-started/index.html:611 -#: website/public/get-started/index.html:777 website/public/get-started/index.html:832 -#: website/public/get-started/index.html:847 website/public/get-started/index.html:895 -#: website/public/get-started/index.html:1083 website/public/get-started/index.html:1145 -#: website/public/get-started/index.html:1168 website/public/get-started/index.html:1192 -#: website/public/get-started/index.html:1240 website/public/get-started/index.html:1315 -#: website/public/get-started/index.html:1341 website/public/get-started/index.html:1358 -#: website/public/get-started/index.html:1679 website/public/get-started/index.html:1701 -#: website/public/get-started/index.html:1774 website/public/get-started/index.html:1795 +#: website/public/get-started/index.html:423 website/public/get-started/index.html:454 +#: website/public/get-started/index.html:468 website/public/get-started/index.html:486 +#: website/public/get-started/index.html:538 website/public/get-started/index.html:552 +#: website/public/get-started/index.html:584 website/public/get-started/index.html:613 +#: website/public/get-started/index.html:779 website/public/get-started/index.html:834 +#: website/public/get-started/index.html:849 website/public/get-started/index.html:897 +#: website/public/get-started/index.html:1085 website/public/get-started/index.html:1147 +#: website/public/get-started/index.html:1170 website/public/get-started/index.html:1194 +#: website/public/get-started/index.html:1242 website/public/get-started/index.html:1317 +#: website/public/get-started/index.html:1343 website/public/get-started/index.html:1360 +#: website/public/get-started/index.html:1681 website/public/get-started/index.html:1703 +#: website/public/get-started/index.html:1776 website/public/get-started/index.html:1797 msgctxt "page:get-started/index.html" msgid "Copy command" msgstr "" -#: website/public/get-started/index.html:807 +#: website/public/get-started/index.html:809 msgctxt "page:get-started/index.html" msgid "Copy REA installation prompt" msgstr "" -#: website/public/get-started/index.html:928 +#: website/public/get-started/index.html:930 msgctxt "page:get-started/index.html" msgid "Copy Notes investigation prompt" msgstr "" -#: website/public/get-started/index.html:1601 +#: website/public/get-started/index.html:1603 msgctxt "page:get-started/index.html" msgid "Copy JavaScript analysis command" msgstr "" -#: website/public/get-started/index.html:1660 +#: website/public/get-started/index.html:1662 msgctxt "page:get-started/index.html" msgid "Copy CLI installation command" msgstr "" -#: website/public/get-started/index.html:1744 +#: website/public/get-started/index.html:1746 msgctxt "page:get-started/index.html" msgid "Copy provider diagnosis command" msgstr "" -#: website/public/get-started/index.html:1860 +#: website/public/get-started/index.html:1862 msgctxt "page:get-started/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/browser/index.html:111 +#: website/public/guides/browser/index.html:113 msgctxt "page:guides/browser/index.html" msgid "Skip to content" msgstr "" @@ -5847,34 +5847,34 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/browser/index.html:201 +#: website/public/guides/browser/index.html:203 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" msgstr "" #. {ph0}:
-#: website/public/guides/browser/index.html:205 +#: website/public/guides/browser/index.html:207 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "See what happens{ph0}when you click." msgstr "" -#: website/public/guides/browser/index.html:206 +#: website/public/guides/browser/index.html:208 msgctxt "page:guides/browser/index.html" msgid "" "Use a small browser app to connect an action, its network request and the JavaScript " "that builds a download." msgstr "" -#: website/public/guides/browser/index.html:213 +#: website/public/guides/browser/index.html:215 msgctxt "page:guides/browser/index.html" msgid "In this guide" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/browser/index.html:215 +#: website/public/guides/browser/index.html:217 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0}The example{ph1}" @@ -5882,7 +5882,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/browser/index.html:216 +#: website/public/guides/browser/index.html:218 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0}Open the browser{ph1}" @@ -5890,7 +5890,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/browser/index.html:217 +#: website/public/guides/browser/index.html:219 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0}Ask your agent{ph1}" @@ -5898,7 +5898,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/browser/index.html:218 +#: website/public/guides/browser/index.html:220 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0}Capture from CLI{ph1}" @@ -5906,13 +5906,13 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/browser/index.html:219 +#: website/public/guides/browser/index.html:221 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0}Read the request and script{ph1}" msgstr "" -#: website/public/guides/browser/index.html:224 +#: website/public/guides/browser/index.html:226 msgctxt "page:guides/browser/index.html" msgid "What happens when you click Export?" msgstr "" @@ -5922,7 +5922,7 @@ msgstr "" #. {ph2}: #. {ph3}: #. {ph4}: notes.json -#: website/public/guides/browser/index.html:225 +#: website/public/guides/browser/index.html:227 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -5930,7 +5930,7 @@ msgid "" "loads {ph4}, formats the two notes as CSV, and starts a download." msgstr "" -#: website/public/guides/browser/index.html:233 +#: website/public/guides/browser/index.html:235 msgctxt "page:guides/browser/index.html" msgid "From the click to the CSV download" msgstr "" @@ -5941,7 +5941,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/guides/browser/index.html:235 +#: website/public/guides/browser/index.html:237 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -5955,7 +5955,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/guides/browser/index.html:243 +#: website/public/guides/browser/index.html:245 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -5971,7 +5971,7 @@ msgstr "" #. {ph5}: fetch("./notes.json") #. {ph6}: export.js #. {ph7}: -#: website/public/guides/browser/index.html:251 +#: website/public/guides/browser/index.html:253 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -5979,52 +5979,52 @@ msgid "" "request to {ph5} in {ph6}.{ph7}" msgstr "" -#: website/public/guides/browser/index.html:264 +#: website/public/guides/browser/index.html:266 msgctxt "page:guides/browser/index.html" msgid "Start the capture before clicking Export notes." msgstr "" -#: website/public/guides/browser/index.html:270 +#: website/public/guides/browser/index.html:272 msgctxt "page:guides/browser/index.html" msgid "Open Chrome with remote debugging" msgstr "" -#: website/public/guides/browser/index.html:271 +#: website/public/guides/browser/index.html:273 msgctxt "page:guides/browser/index.html" msgid "" "Open the hosted Notes example with a separate browser profile and a local debugging " "port. On Linux:" msgstr "" -#: website/public/guides/browser/index.html:277 +#: website/public/guides/browser/index.html:279 msgctxt "page:guides/browser/index.html" msgid "Start the example browser" msgstr "" -#: website/public/guides/browser/index.html:278 -#: website/public/guides/browser/index.html:310 -#: website/public/guides/browser/index.html:344 -#: website/public/guides/browser/index.html:363 -#: website/public/guides/browser/index.html:428 +#: website/public/guides/browser/index.html:280 +#: website/public/guides/browser/index.html:312 +#: website/public/guides/browser/index.html:346 +#: website/public/guides/browser/index.html:365 +#: website/public/guides/browser/index.html:430 msgctxt "page:guides/browser/index.html" msgid "Copy" msgstr "" -#: website/public/guides/browser/index.html:292 +#: website/public/guides/browser/index.html:294 msgctxt "page:guides/browser/index.html" msgid "" "Use your installed browser's executable path on macOS or Windows. You can replace the " "page URL with another page you want to inspect." msgstr "" -#: website/public/guides/browser/index.html:297 +#: website/public/guides/browser/index.html:299 msgctxt "page:guides/browser/index.html" msgid "" "REA connects to this existing browser. You keep control of the page, perform the " "action, and close the browser when finished." msgstr "" -#: website/public/guides/browser/index.html:303 +#: website/public/guides/browser/index.html:305 msgctxt "page:guides/browser/index.html" msgid "Ask your agent to watch one action" msgstr "" @@ -6037,7 +6037,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/guides/browser/index.html:306 +#: website/public/guides/browser/index.html:308 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" @@ -6049,7 +6049,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/guides/browser/index.html:319 +#: website/public/guides/browser/index.html:321 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6058,7 +6058,7 @@ msgid "" msgstr "" #. {ph0}: http://127.0.0.1:9222 -#: website/public/guides/browser/index.html:327 +#: website/public/guides/browser/index.html:329 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6066,30 +6066,30 @@ msgid "" "it start the capture before you click." msgstr "" -#: website/public/guides/browser/index.html:332 +#: website/public/guides/browser/index.html:334 msgctxt "page:guides/browser/index.html" msgid "" "Your agent discovers the page target, starts an observation window, and reads the " "resulting evidence. It can then inspect the script behind the export." msgstr "" -#: website/public/guides/browser/index.html:339 +#: website/public/guides/browser/index.html:341 msgctxt "page:guides/browser/index.html" msgid "Or capture from the terminal" msgstr "" -#: website/public/guides/browser/index.html:340 +#: website/public/guides/browser/index.html:342 msgctxt "page:guides/browser/index.html" msgid "Find the page's target ID:" msgstr "" -#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:345 msgctxt "page:guides/browser/index.html" msgid "Find the page" msgstr "" #. {ph0}: TARGET_ID -#: website/public/guides/browser/index.html:356 +#: website/public/guides/browser/index.html:358 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6097,14 +6097,14 @@ msgid "" "run:" msgstr "" -#: website/public/guides/browser/index.html:362 +#: website/public/guides/browser/index.html:364 msgctxt "page:guides/browser/index.html" msgid "Capture the next ten seconds" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/browser/index.html:378 +#: website/public/guides/browser/index.html:380 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6112,56 +6112,56 @@ msgid "" "browser. The result arrives after the observation window ends." msgstr "" -#: website/public/guides/browser/index.html:383 +#: website/public/guides/browser/index.html:385 msgctxt "page:guides/browser/index.html" msgid "" "The captured result includes the selected page, network activity during that window, " "and the shape of the JSON response. Earlier requests are outside this capture." msgstr "" -#: website/public/guides/browser/index.html:390 +#: website/public/guides/browser/index.html:392 msgctxt "page:guides/browser/index.html" msgid "Read the request and export script" msgstr "" -#: website/public/guides/browser/index.html:393 +#: website/public/guides/browser/index.html:395 msgctxt "page:guides/browser/index.html" msgid "Recorded with REA 4.1.0 on the local Notes example" msgstr "" -#: website/public/guides/browser/index.html:398 +#: website/public/guides/browser/index.html:400 msgctxt "page:guides/browser/index.html" msgid "Captured fact" msgstr "" -#: website/public/guides/browser/index.html:399 +#: website/public/guides/browser/index.html:401 msgctxt "page:guides/browser/index.html" msgid "Value" msgstr "" -#: website/public/guides/browser/index.html:404 +#: website/public/guides/browser/index.html:406 msgctxt "page:guides/browser/index.html" msgid "Request" msgstr "" -#: website/public/guides/browser/index.html:408 +#: website/public/guides/browser/index.html:410 msgctxt "page:guides/browser/index.html" msgid "Response" msgstr "" -#: website/public/guides/browser/index.html:412 +#: website/public/guides/browser/index.html:414 msgctxt "page:guides/browser/index.html" msgid "Request initiator" msgstr "" #. {ph0}: export.js -#: website/public/guides/browser/index.html:413 +#: website/public/guides/browser/index.html:415 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0} · script" msgstr "" -#: website/public/guides/browser/index.html:416 +#: website/public/guides/browser/index.html:418 msgctxt "page:guides/browser/index.html" msgid "Response structure" msgstr "" @@ -6169,19 +6169,19 @@ msgstr "" #. {ph0}: notes[] #. {ph1}: id #. {ph2}: title -#: website/public/guides/browser/index.html:417 +#: website/public/guides/browser/index.html:419 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0} with {ph1} and {ph2} fields" msgstr "" -#: website/public/guides/browser/index.html:427 +#: website/public/guides/browser/index.html:429 msgctxt "page:guides/browser/index.html" msgid "Read the loaded scripts" msgstr "" #. {ph0}: export.js -#: website/public/guides/browser/index.html:441 +#: website/public/guides/browser/index.html:443 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6190,14 +6190,14 @@ msgid "" msgstr "" #. {ph0}: export.js -#: website/public/guides/browser/index.html:448 +#: website/public/guides/browser/index.html:450 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0} · example source excerpt" msgstr "" #. {ph0}: notes.json -#: website/public/guides/browser/index.html:461 +#: website/public/guides/browser/index.html:463 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6214,14 +6214,14 @@ msgstr "" #. {ph5}: #. {ph6}: notes.json #. {ph7}: -#: website/public/guides/browser/index.html:466 +#: website/public/guides/browser/index.html:468 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download {ph6}{ph7}" msgstr "" #. {ph0}: notes.json -#: website/public/guides/browser/index.html:477 +#: website/public/guides/browser/index.html:479 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6231,7 +6231,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/browser/index.html:482 +#: website/public/guides/browser/index.html:484 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6242,7 +6242,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/browser/index.html:487 +#: website/public/guides/browser/index.html:489 #, python-brace-format msgctxt "page:guides/browser/index.html" msgid "" @@ -6263,258 +6263,258 @@ msgid "" "request and follow the export script." msgstr "" -#: website/public/guides/browser/index.html:212 +#: website/public/guides/browser/index.html:214 msgctxt "page:guides/browser/index.html" msgid "On this page" msgstr "" -#: website/public/guides/browser/index.html:222 +#: website/public/guides/browser/index.html:224 msgctxt "page:guides/browser/index.html" msgid "Browser observation" msgstr "" -#: website/public/guides/browser/index.html:278 +#: website/public/guides/browser/index.html:280 msgctxt "page:guides/browser/index.html" msgid "Copy start the example browser" msgstr "" -#: website/public/guides/browser/index.html:310 +#: website/public/guides/browser/index.html:312 msgctxt "page:guides/browser/index.html" msgid "Copy example prompt" msgstr "" -#: website/public/guides/browser/index.html:344 +#: website/public/guides/browser/index.html:346 msgctxt "page:guides/browser/index.html" msgid "Copy find the page" msgstr "" -#: website/public/guides/browser/index.html:363 +#: website/public/guides/browser/index.html:365 msgctxt "page:guides/browser/index.html" msgid "Copy capture the next ten seconds" msgstr "" -#: website/public/guides/browser/index.html:428 +#: website/public/guides/browser/index.html:430 msgctxt "page:guides/browser/index.html" msgid "Copy read the loaded scripts" msgstr "" -#: website/public/guides/browser/index.html:516 +#: website/public/guides/browser/index.html:518 msgctxt "page:guides/browser/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/index.html:111 +#: website/public/guides/index.html:113 msgctxt "page:guides/index.html" msgid "Skip to content" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/index.html:201 +#: website/public/guides/index.html:203 #, python-brace-format msgctxt "page:guides/index.html" msgid "{ph0}Home{ph1} / Guides" msgstr "" -#: website/public/guides/index.html:202 +#: website/public/guides/index.html:204 msgctxt "page:guides/index.html" msgid "REA guides." msgstr "" -#: website/public/guides/index.html:203 +#: website/public/guides/index.html:205 msgctxt "page:guides/index.html" msgid "" "Analyze a native function, an Electron export or a browser request. Each guide " "includes a prompt, code and results." msgstr "" -#: website/public/guides/index.html:210 +#: website/public/guides/index.html:212 msgctxt "page:guides/index.html" msgid "First investigation" msgstr "" -#: website/public/guides/index.html:212 +#: website/public/guides/index.html:214 msgctxt "page:guides/index.html" msgid "Set up REA" msgstr "" -#: website/public/guides/index.html:213 +#: website/public/guides/index.html:215 msgctxt "page:guides/index.html" msgid "Connect your coding agent or use REA from the terminal." msgstr "" -#: website/public/guides/index.html:214 +#: website/public/guides/index.html:216 msgctxt "page:guides/index.html" msgid "Get started with REA" msgstr "" -#: website/public/guides/index.html:218 +#: website/public/guides/index.html:220 msgctxt "page:guides/index.html" msgid "Native binaries" msgstr "" -#: website/public/guides/index.html:220 +#: website/public/guides/index.html:222 msgctxt "page:guides/index.html" msgid "Recover a sound-pan calculation" msgstr "" -#: website/public/guides/index.html:221 +#: website/public/guides/index.html:223 msgctxt "page:guides/index.html" msgid "" "Start with a Windows game executable. Inspect instructions, follow a caller, read " "numeric constants and check the recovered C." msgstr "" -#: website/public/guides/index.html:226 +#: website/public/guides/index.html:228 msgctxt "page:guides/index.html" msgid "Instructions" msgstr "" -#: website/public/guides/index.html:227 +#: website/public/guides/index.html:229 msgctxt "page:guides/index.html" msgid "Caller" msgstr "" -#: website/public/guides/index.html:228 +#: website/public/guides/index.html:230 msgctxt "page:guides/index.html" msgid "Constants" msgstr "" -#: website/public/guides/index.html:229 +#: website/public/guides/index.html:231 msgctxt "page:guides/index.html" msgid "C function" msgstr "" -#: website/public/guides/index.html:231 +#: website/public/guides/index.html:233 msgctxt "page:guides/index.html" msgid "Native analysis guide" msgstr "" -#: website/public/guides/index.html:235 +#: website/public/guides/index.html:237 msgctxt "page:guides/index.html" msgid "JavaScript & Electron" msgstr "" -#: website/public/guides/index.html:237 +#: website/public/guides/index.html:239 msgctxt "page:guides/index.html" msgid "Follow a CSV export" msgstr "" -#: website/public/guides/index.html:238 +#: website/public/guides/index.html:240 msgctxt "page:guides/index.html" msgid "" "A small Notes app spreads one feature across the renderer, preload and main process. " "Use REA to connect the API, IPC channel and file writer." msgstr "" -#: website/public/guides/index.html:244 +#: website/public/guides/index.html:246 msgctxt "page:guides/index.html" msgid "Button" msgstr "" -#: website/public/guides/index.html:245 +#: website/public/guides/index.html:247 msgctxt "page:guides/index.html" msgid "Preload API" msgstr "" -#: website/public/guides/index.html:246 +#: website/public/guides/index.html:248 msgctxt "page:guides/index.html" msgid "IPC" msgstr "" -#: website/public/guides/index.html:246 +#: website/public/guides/index.html:248 msgctxt "page:guides/index.html" msgid "CSV file" msgstr "" -#: website/public/guides/index.html:248 +#: website/public/guides/index.html:250 msgctxt "page:guides/index.html" msgid "JavaScript & Electron guide" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/index.html:251 +#: website/public/guides/index.html:253 #, python-brace-format msgctxt "page:guides/index.html" msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." msgstr "" -#: website/public/guides/index.html:258 +#: website/public/guides/index.html:260 msgctxt "page:guides/index.html" msgid "Browser behavior" msgstr "" -#: website/public/guides/index.html:260 +#: website/public/guides/index.html:262 msgctxt "page:guides/index.html" msgid "Observe a click" msgstr "" -#: website/public/guides/index.html:261 +#: website/public/guides/index.html:263 msgctxt "page:guides/index.html" msgid "" "Open a working Notes example, capture an export request and find the code that turns " "its response into a download." msgstr "" -#: website/public/guides/index.html:266 +#: website/public/guides/index.html:268 msgctxt "page:guides/index.html" msgid "Your click" msgstr "" -#: website/public/guides/index.html:267 +#: website/public/guides/index.html:269 msgctxt "page:guides/index.html" msgid "Captured request" msgstr "" -#: website/public/guides/index.html:268 +#: website/public/guides/index.html:270 msgctxt "page:guides/index.html" msgid "Export script" msgstr "" -#: website/public/guides/index.html:270 +#: website/public/guides/index.html:272 msgctxt "page:guides/index.html" msgid "Browser observation guide" msgstr "" -#: website/public/guides/index.html:274 +#: website/public/guides/index.html:276 msgctxt "page:guides/index.html" msgid "RL environments" msgstr "" -#: website/public/guides/index.html:276 +#: website/public/guides/index.html:278 msgctxt "page:guides/index.html" msgid "Build an environment for agents" msgstr "" -#: website/public/guides/index.html:277 +#: website/public/guides/index.html:279 msgctxt "page:guides/index.html" msgid "" "Record a web app session, turn it into tools and local data, then add tasks and reward" " checks." msgstr "" -#: website/public/guides/index.html:282 +#: website/public/guides/index.html:284 msgctxt "page:guides/index.html" msgid "Record" msgstr "" -#: website/public/guides/index.html:282 +#: website/public/guides/index.html:284 msgctxt "page:guides/index.html" msgid "Build" msgstr "" -#: website/public/guides/index.html:283 +#: website/public/guides/index.html:285 msgctxt "page:guides/index.html" msgid "Run" msgstr "" -#: website/public/guides/index.html:285 +#: website/public/guides/index.html:287 msgctxt "page:guides/index.html" msgid "Evaluate" msgstr "" -#: website/public/guides/index.html:287 +#: website/public/guides/index.html:289 msgctxt "page:guides/index.html" msgid "Build an RL environment" msgstr "" @@ -6531,12 +6531,12 @@ msgid "" "and a browser request." msgstr "" -#: website/public/guides/index.html:310 +#: website/public/guides/index.html:312 msgctxt "page:guides/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/javascript/index.html:111 +#: website/public/guides/javascript/index.html:113 msgctxt "page:guides/javascript/index.html" msgid "Skip to content" msgstr "" @@ -6545,33 +6545,33 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/javascript/index.html:201 +#: website/public/guides/javascript/index.html:203 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" msgstr "" #. {ph0}:
-#: website/public/guides/javascript/index.html:205 +#: website/public/guides/javascript/index.html:207 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "Trace an Electron{ph0}CSV export." msgstr "" -#: website/public/guides/javascript/index.html:206 +#: website/public/guides/javascript/index.html:208 msgctxt "page:guides/javascript/index.html" msgid "" "Follow a button click from the page API, through Electron IPC, to the CSV file writer." msgstr "" -#: website/public/guides/javascript/index.html:213 +#: website/public/guides/javascript/index.html:215 msgctxt "page:guides/javascript/index.html" msgid "In this guide" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:215 +#: website/public/guides/javascript/index.html:217 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}The example{ph1}" @@ -6579,7 +6579,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:216 +#: website/public/guides/javascript/index.html:218 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}Ask your agent{ph1}" @@ -6587,7 +6587,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:217 +#: website/public/guides/javascript/index.html:219 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}Trace the export code{ph1}" @@ -6595,7 +6595,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:218 +#: website/public/guides/javascript/index.html:220 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}Try the example{ph1}" @@ -6603,20 +6603,20 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:219 +#: website/public/guides/javascript/index.html:221 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}Inspect the CSV writer{ph1}" msgstr "" -#: website/public/guides/javascript/index.html:224 +#: website/public/guides/javascript/index.html:226 msgctxt "page:guides/javascript/index.html" msgid "Where does “Export notes” go?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:225 +#: website/public/guides/javascript/index.html:227 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6625,7 +6625,7 @@ msgid "" "across several files." msgstr "" -#: website/public/guides/javascript/index.html:232 +#: website/public/guides/javascript/index.html:234 msgctxt "page:guides/javascript/index.html" msgid "The CSV export across Electron processes" msgstr "" @@ -6639,7 +6639,7 @@ msgstr "" #. {ph6}: renderer.js #. {ph7}: preload.js #. {ph8}: -#: website/public/guides/javascript/index.html:236 +#: website/public/guides/javascript/index.html:238 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6654,7 +6654,7 @@ msgstr "" #. {ph4}: #. {ph5}: #. {ph6}: -#: website/public/guides/javascript/index.html:244 +#: website/public/guides/javascript/index.html:246 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6669,7 +6669,7 @@ msgstr "" #. {ph4}: #. {ph5}: main.js #. {ph6}: -#: website/public/guides/javascript/index.html:252 +#: website/public/guides/javascript/index.html:254 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6680,27 +6680,27 @@ msgstr "" #. {ph0}: csv.js #. {ph1}: main.js #. {ph2}: downloads/notes.csv -#: website/public/guides/javascript/index.html:261 +#: website/public/guides/javascript/index.html:263 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0} formats the notes → {ph1} writes {ph2}." msgstr "" -#: website/public/guides/javascript/index.html:265 +#: website/public/guides/javascript/index.html:267 msgctxt "page:guides/javascript/index.html" msgid "" "REA matches the literal IPC call to its handler and identifies the exposed API. The " "path is inferred from code; a runtime capture can check what executes." msgstr "" -#: website/public/guides/javascript/index.html:273 +#: website/public/guides/javascript/index.html:275 msgctxt "page:guides/javascript/index.html" msgid "Ask about the CSV export" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:274 +#: website/public/guides/javascript/index.html:276 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR file:" @@ -6714,14 +6714,14 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/guides/javascript/index.html:280 +#: website/public/guides/javascript/index.html:282 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/guides/javascript/index.html:284 -#: website/public/guides/javascript/index.html:441 +#: website/public/guides/javascript/index.html:286 +#: website/public/guides/javascript/index.html:443 msgctxt "page:guides/javascript/index.html" msgid "Copy" msgstr "" @@ -6732,7 +6732,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/guides/javascript/index.html:293 +#: website/public/guides/javascript/index.html:295 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6741,13 +6741,13 @@ msgid "" msgstr "" #. {ph0}: app.asar -#: website/public/guides/javascript/index.html:301 +#: website/public/guides/javascript/index.html:303 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "Example prompt. Include the absolute path to the application folder or {ph0}." msgstr "" -#: website/public/guides/javascript/index.html:305 +#: website/public/guides/javascript/index.html:307 msgctxt "page:guides/javascript/index.html" msgid "" "REA reads the application files and builds a map of entrypoints, modules and process " @@ -6755,26 +6755,26 @@ msgid "" "feature." msgstr "" -#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:314 msgctxt "page:guides/javascript/index.html" msgid "Trace the export code" msgstr "" -#: website/public/guides/javascript/index.html:313 +#: website/public/guides/javascript/index.html:315 msgctxt "page:guides/javascript/index.html" msgid "The page calls a small API" msgstr "" #. {ph0}: renderer.js -#: website/public/guides/javascript/index.html:316 -#: website/public/guides/javascript/index.html:339 -#: website/public/guides/javascript/index.html:354 +#: website/public/guides/javascript/index.html:318 +#: website/public/guides/javascript/index.html:341 +#: website/public/guides/javascript/index.html:356 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0} · example source" msgstr "" -#: website/public/guides/javascript/index.html:333 +#: website/public/guides/javascript/index.html:335 msgctxt "page:guides/javascript/index.html" msgid "" "The page knows the method name. The implementation lives in the preload, which exposes" @@ -6783,7 +6783,7 @@ msgstr "" #. {ph0}: notes.exportCsv #. {ph1}: notes:export -#: website/public/guides/javascript/index.html:347 +#: website/public/guides/javascript/index.html:349 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6793,7 +6793,7 @@ msgstr "" #. {ph0}: csv.js #. {ph1}: notes.csv -#: website/public/guides/javascript/index.html:364 +#: website/public/guides/javascript/index.html:366 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6801,12 +6801,12 @@ msgid "" "main process writes {ph1} into the user's Downloads folder." msgstr "" -#: website/public/guides/javascript/index.html:371 +#: website/public/guides/javascript/index.html:373 msgctxt "page:guides/javascript/index.html" msgid "REA result · summary.ipc excerpt" msgstr "" -#: website/public/guides/javascript/index.html:381 +#: website/public/guides/javascript/index.html:383 msgctxt "page:guides/javascript/index.html" msgid "" "Recorded by REA 4.1.0 on an earlier version of the example below. The renderer has " @@ -6814,14 +6814,14 @@ msgid "" "findings." msgstr "" -#: website/public/guides/javascript/index.html:388 +#: website/public/guides/javascript/index.html:390 msgctxt "page:guides/javascript/index.html" msgid "Analyze the example yourself" msgstr "" #. {ph0}: notes-example #. {ph1}: Node.js -#: website/public/guides/javascript/index.html:389 +#: website/public/guides/javascript/index.html:391 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6832,25 +6832,25 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:395 +#: website/public/guides/javascript/index.html:397 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}Download example ZIP{ph1}" msgstr "" -#: website/public/guides/javascript/index.html:404 +#: website/public/guides/javascript/index.html:406 msgctxt "page:guides/javascript/index.html" msgid "Browse the six source files" msgstr "" -#: website/public/guides/javascript/index.html:440 +#: website/public/guides/javascript/index.html:442 msgctxt "page:guides/javascript/index.html" msgid "Static application analysis" msgstr "" #. {ph0}: normalized_result.summary.ipc #. {ph1}: normalized_result.graph -#: website/public/guides/javascript/index.html:453 +#: website/public/guides/javascript/index.html:455 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6858,20 +6858,20 @@ msgid "" " matching handler in {ph0}. Source locations are in {ph1}." msgstr "" -#: website/public/guides/javascript/index.html:459 +#: website/public/guides/javascript/index.html:461 msgctxt "page:guides/javascript/index.html" msgid "" "For your own app, use the same command with its directory or ASAR path. An agent can " "follow a literal string, API name or IPC channel with REA's feature tracing tools." msgstr "" -#: website/public/guides/javascript/index.html:466 +#: website/public/guides/javascript/index.html:468 msgctxt "page:guides/javascript/index.html" msgid "Inspect the CSV writer" msgstr "" #. {ph0}: notes:export -#: website/public/guides/javascript/index.html:468 +#: website/public/guides/javascript/index.html:470 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6879,7 +6879,7 @@ msgid "" "writing the file fails?" msgstr "" -#: website/public/guides/javascript/index.html:474 +#: website/public/guides/javascript/index.html:476 msgctxt "page:guides/javascript/index.html" msgid "" "Use the source locations to inspect those details. Computed channel names and " @@ -6891,7 +6891,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/javascript/index.html:480 +#: website/public/guides/javascript/index.html:482 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6903,7 +6903,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/javascript/index.html:486 +#: website/public/guides/javascript/index.html:488 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6915,7 +6915,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/javascript/index.html:492 +#: website/public/guides/javascript/index.html:494 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6935,32 +6935,32 @@ msgid "" "Includes downloadable example files and a verified analysis result." msgstr "" -#: website/public/guides/javascript/index.html:212 +#: website/public/guides/javascript/index.html:214 msgctxt "page:guides/javascript/index.html" msgid "On this page" msgstr "" -#: website/public/guides/javascript/index.html:222 +#: website/public/guides/javascript/index.html:224 msgctxt "page:guides/javascript/index.html" msgid "JavaScript & Electron" msgstr "" -#: website/public/guides/javascript/index.html:284 +#: website/public/guides/javascript/index.html:286 msgctxt "page:guides/javascript/index.html" msgid "Copy example prompt" msgstr "" -#: website/public/guides/javascript/index.html:441 +#: website/public/guides/javascript/index.html:443 msgctxt "page:guides/javascript/index.html" msgid "Copy static application analysis" msgstr "" -#: website/public/guides/javascript/index.html:520 +#: website/public/guides/javascript/index.html:522 msgctxt "page:guides/javascript/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/native/index.html:111 +#: website/public/guides/native/index.html:113 msgctxt "page:guides/native/index.html" msgid "Skip to content" msgstr "" @@ -6969,34 +6969,34 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/native/index.html:201 +#: website/public/guides/native/index.html:203 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" msgstr "" #. {ph0}:
-#: website/public/guides/native/index.html:204 +#: website/public/guides/native/index.html:206 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "Recover DX-Ball's{ph0}sound-pan calculation." msgstr "" -#: website/public/guides/native/index.html:205 +#: website/public/guides/native/index.html:207 msgctxt "page:guides/native/index.html" msgid "" "Inspect the original instructions, identify the input and constants, then check the " "recovered C." msgstr "" -#: website/public/guides/native/index.html:212 +#: website/public/guides/native/index.html:214 msgctxt "page:guides/native/index.html" msgid "In this guide" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:214 +#: website/public/guides/native/index.html:216 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}The example{ph1}" @@ -7004,7 +7004,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:215 +#: website/public/guides/native/index.html:217 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}Ask your agent{ph1}" @@ -7012,7 +7012,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:216 +#: website/public/guides/native/index.html:218 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}Read the REA results{ph1}" @@ -7020,7 +7020,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:217 +#: website/public/guides/native/index.html:219 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}Recover and check{ph1}" @@ -7028,18 +7028,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:218 +#: website/public/guides/native/index.html:220 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}Use your own binary{ph1}" msgstr "" -#: website/public/guides/native/index.html:223 +#: website/public/guides/native/index.html:225 msgctxt "page:guides/native/index.html" msgid "Calculate left/right sound panning" msgstr "" -#: website/public/guides/native/index.html:224 +#: website/public/guides/native/index.html:226 msgctxt "page:guides/native/index.html" msgid "" "In DX-Ball, a brick hit supplies a horizontal screen position. The sound code turns it" @@ -7048,7 +7048,7 @@ msgstr "" #. {ph0}: 0x00406400 #. {ph1}: __ftol() -#: website/public/guides/native/index.html:228 +#: website/public/guides/native/index.html:230 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7057,7 +7057,7 @@ msgid "" "missing arithmetic." msgstr "" -#: website/public/guides/native/index.html:235 +#: website/public/guides/native/index.html:237 msgctxt "page:guides/native/index.html" msgid "New to these terms?" msgstr "" @@ -7066,7 +7066,7 @@ msgstr "" #. {ph1}: #. {ph2}: MOV #. {ph3}: ADD -#: website/public/guides/native/index.html:237 +#: website/public/guides/native/index.html:239 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7076,7 +7076,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:242 +#: website/public/guides/native/index.html:244 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7086,7 +7086,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:247 +#: website/public/guides/native/index.html:249 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7096,7 +7096,7 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: 0x00406400 -#: website/public/guides/native/index.html:251 +#: website/public/guides/native/index.html:253 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7105,7 +7105,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:255 +#: website/public/guides/native/index.html:257 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7113,7 +7113,7 @@ msgid "" "decoded." msgstr "" -#: website/public/guides/native/index.html:262 +#: website/public/guides/native/index.html:264 msgctxt "page:guides/native/index.html" msgid "Three pieces of evidence, one calculation" msgstr "" @@ -7124,7 +7124,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/guides/native/index.html:266 +#: website/public/guides/native/index.html:268 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7139,7 +7139,7 @@ msgstr "" #. {ph4}: #. {ph5}: 20 + 30 × tile_x #. {ph6}: -#: website/public/guides/native/index.html:274 +#: website/public/guides/native/index.html:276 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7155,7 +7155,7 @@ msgstr "" #. {ph5}: 1.5625 #. {ph6}: 500.0 #. {ph7}: -#: website/public/guides/native/index.html:282 +#: website/public/guides/native/index.html:284 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7163,14 +7163,14 @@ msgid "" "to {ph5}, {ph6} and a scale value.{ph7}" msgstr "" -#: website/public/guides/native/index.html:294 +#: website/public/guides/native/index.html:296 msgctxt "page:guides/native/index.html" msgid "" "REA supplies the instructions, call relationship and bytes. The agent interprets them " "together." msgstr "" -#: website/public/guides/native/index.html:301 +#: website/public/guides/native/index.html:303 msgctxt "page:guides/native/index.html" msgid "Ask about the behavior" msgstr "" @@ -7179,7 +7179,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/native/index.html:302 +#: website/public/guides/native/index.html:304 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7187,19 +7187,19 @@ msgid "" "tool{ph3}, provide the local executable and a question:" msgstr "" -#: website/public/guides/native/index.html:313 +#: website/public/guides/native/index.html:315 msgctxt "page:guides/native/index.html" msgid "Which analysis tool should I use?" msgstr "" -#: website/public/guides/native/index.html:314 +#: website/public/guides/native/index.html:316 msgctxt "page:guides/native/index.html" msgid "REA needs one of these to read native programs:" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:316 +#: website/public/guides/native/index.html:318 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7210,7 +7210,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:323 +#: website/public/guides/native/index.html:325 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7220,7 +7220,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:328 +#: website/public/guides/native/index.html:330 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7231,7 +7231,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:335 +#: website/public/guides/native/index.html:337 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "See {ph0}Set up native analysis{ph1} for the steps." @@ -7245,14 +7245,14 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/guides/native/index.html:343 +#: website/public/guides/native/index.html:345 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/guides/native/index.html:347 -#: website/public/guides/native/index.html:478 +#: website/public/guides/native/index.html:349 +#: website/public/guides/native/index.html:480 msgctxt "page:guides/native/index.html" msgid "Copy" msgstr "" @@ -7263,7 +7263,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/guides/native/index.html:356 +#: website/public/guides/native/index.html:358 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7271,7 +7271,7 @@ msgid "" "calculation and show the code.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/guides/native/index.html:364 +#: website/public/guides/native/index.html:366 msgctxt "page:guides/native/index.html" msgid "" "Example prompt. Give your agent the path to your local DX-Ball 1.07 executable. REA " @@ -7279,7 +7279,7 @@ msgid "" "another small Windows program you have." msgstr "" -#: website/public/guides/native/index.html:371 +#: website/public/guides/native/index.html:373 msgctxt "page:guides/native/index.html" msgid "How do I get a file's full path?" msgstr "" @@ -7288,7 +7288,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/native/index.html:373 +#: website/public/guides/native/index.html:375 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7300,7 +7300,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/native/index.html:378 +#: website/public/guides/native/index.html:380 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7310,46 +7310,46 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:382 +#: website/public/guides/native/index.html:384 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}Any system:{ph1} drag the file into a terminal window and its path appears." msgstr "" -#: website/public/guides/native/index.html:390 +#: website/public/guides/native/index.html:392 msgctxt "page:guides/native/index.html" msgid "Read the REA results" msgstr "" -#: website/public/guides/native/index.html:391 +#: website/public/guides/native/index.html:393 msgctxt "page:guides/native/index.html" msgid "Read the input" msgstr "" -#: website/public/guides/native/index.html:394 +#: website/public/guides/native/index.html:396 msgctxt "page:guides/native/index.html" msgid "REA instruction excerpt · 0x406409" msgstr "" -#: website/public/guides/native/index.html:400 +#: website/public/guides/native/index.html:402 msgctxt "page:guides/native/index.html" msgid "" "The instructions load an integer argument and convert it for floating-point " "arithmetic. This is the input absent from the first pseudocode view." msgstr "" -#: website/public/guides/native/index.html:405 +#: website/public/guides/native/index.html:407 msgctxt "page:guides/native/index.html" msgid "Follow the caller" msgstr "" -#: website/public/guides/native/index.html:408 +#: website/public/guides/native/index.html:410 msgctxt "page:guides/native/index.html" msgid "REA caller excerpt · 0x411f5b" msgstr "" #. {ph0}: 0x14 -#: website/public/guides/native/index.html:414 +#: website/public/guides/native/index.html:416 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7357,34 +7357,34 @@ msgid "" "coordinate by 30; adding {ph0} (20) gives the brick's screen position." msgstr "" -#: website/public/guides/native/index.html:419 +#: website/public/guides/native/index.html:421 msgctxt "page:guides/native/index.html" msgid "Read the referenced constants" msgstr "" -#: website/public/guides/native/index.html:422 +#: website/public/guides/native/index.html:424 msgctxt "page:guides/native/index.html" msgid "REA byte results · interpreted as little-endian doubles" msgstr "" -#: website/public/guides/native/index.html:430 +#: website/public/guides/native/index.html:432 msgctxt "page:guides/native/index.html" msgid "" "The arithmetic references these addresses. Reading the bytes supplies the actual " "values; the instruction order tells the agent how they are used." msgstr "" -#: website/public/guides/native/index.html:437 +#: website/public/guides/native/index.html:439 msgctxt "page:guides/native/index.html" msgid "Write and check the recovered function" msgstr "" -#: website/public/guides/native/index.html:439 +#: website/public/guides/native/index.html:441 msgctxt "page:guides/native/index.html" msgid "Recovered C · excerpt" msgstr "" -#: website/public/guides/native/index.html:446 +#: website/public/guides/native/index.html:448 msgctxt "page:guides/native/index.html" msgid "" "With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 before " @@ -7392,7 +7392,7 @@ msgid "" " stereo field." msgstr "" -#: website/public/guides/native/index.html:451 +#: website/public/guides/native/index.html:453 msgctxt "page:guides/native/index.html" msgid "" "The agent used REA's findings to write the C. Separate checks compared 3,205 inputs " @@ -7402,20 +7402,20 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:456 +#: website/public/guides/native/index.html:458 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" msgstr "" -#: website/public/guides/native/index.html:463 +#: website/public/guides/native/index.html:465 msgctxt "page:guides/native/index.html" msgid "Try it with your own binary" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:464 +#: website/public/guides/native/index.html:466 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7424,20 +7424,20 @@ msgid "" "this file parsed?” or “Which function handles this menu action?”" msgstr "" -#: website/public/guides/native/index.html:471 +#: website/public/guides/native/index.html:473 msgctxt "page:guides/native/index.html" msgid "" "If you already know a function name or address, you can query it from the terminal. " "For a configured Ghidra installation:" msgstr "" -#: website/public/guides/native/index.html:477 +#: website/public/guides/native/index.html:479 msgctxt "page:guides/native/index.html" msgid "Function analysis" msgstr "" #. {ph0}: main -#: website/public/guides/native/index.html:490 +#: website/public/guides/native/index.html:492 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7446,7 +7446,7 @@ msgid "" "queries reuse the imported binary while that session is open." msgstr "" -#: website/public/guides/native/index.html:496 +#: website/public/guides/native/index.html:498 msgctxt "page:guides/native/index.html" msgid "" "Read the pseudocode alongside instructions and references. When a result leaves a call" @@ -7465,32 +7465,32 @@ msgid "" "constants and check reconstructed C." msgstr "" -#: website/public/guides/native/index.html:211 +#: website/public/guides/native/index.html:213 msgctxt "page:guides/native/index.html" msgid "On this page" msgstr "" -#: website/public/guides/native/index.html:221 +#: website/public/guides/native/index.html:223 msgctxt "page:guides/native/index.html" msgid "Native analysis" msgstr "" -#: website/public/guides/native/index.html:347 +#: website/public/guides/native/index.html:349 msgctxt "page:guides/native/index.html" msgid "Copy example prompt" msgstr "" -#: website/public/guides/native/index.html:478 +#: website/public/guides/native/index.html:480 msgctxt "page:guides/native/index.html" msgid "Copy function analysis" msgstr "" -#: website/public/guides/native/index.html:521 +#: website/public/guides/native/index.html:523 msgctxt "page:guides/native/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/rl-environments/index.html:111 +#: website/public/guides/rl-environments/index.html:113 msgctxt "page:guides/rl-environments/index.html" msgid "Skip to content" msgstr "" @@ -7499,18 +7499,18 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/rl-environments/index.html:201 +#: website/public/guides/rl-environments/index.html:203 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / RL environments" msgstr "" -#: website/public/guides/rl-environments/index.html:204 +#: website/public/guides/rl-environments/index.html:206 msgctxt "page:guides/rl-environments/index.html" msgid "Build RL environments." msgstr "" -#: website/public/guides/rl-environments/index.html:205 +#: website/public/guides/rl-environments/index.html:207 #: website/public/guides/rl-environments/index.html:7 msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7520,21 +7520,21 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:209 +#: website/public/guides/rl-environments/index.html:211 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}Watch the announcement video on X{ph1}" msgstr "" -#: website/public/guides/rl-environments/index.html:217 -#: website/public/guides/rl-environments/index.html:216 +#: website/public/guides/rl-environments/index.html:219 +#: website/public/guides/rl-environments/index.html:218 msgctxt "page:guides/rl-environments/index.html" msgid "On this page" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:219 +#: website/public/guides/rl-environments/index.html:221 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}What REA builds{ph1}" @@ -7542,7 +7542,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:220 +#: website/public/guides/rl-environments/index.html:222 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}Before you start{ph1}" @@ -7550,7 +7550,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:221 +#: website/public/guides/rl-environments/index.html:223 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}Record with your agent{ph1}" @@ -7558,7 +7558,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:222 +#: website/public/guides/rl-environments/index.html:224 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}Use a saved recording{ph1}" @@ -7566,7 +7566,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:223 +#: website/public/guides/rl-environments/index.html:225 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}Run the environment{ph1}" @@ -7574,7 +7574,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:224 +#: website/public/guides/rl-environments/index.html:226 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}Add tasks and rewards{ph1}" @@ -7582,18 +7582,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:225 +#: website/public/guides/rl-environments/index.html:227 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}Check what works{ph1}" msgstr "" -#: website/public/guides/rl-environments/index.html:230 +#: website/public/guides/rl-environments/index.html:232 msgctxt "page:guides/rl-environments/index.html" msgid "What REA builds" msgstr "" -#: website/public/guides/rl-environments/index.html:231 +#: website/public/guides/rl-environments/index.html:233 msgctxt "page:guides/rl-environments/index.html" msgid "" "An agent can practice finding an issue, creating a folder, or editing a record without" @@ -7607,7 +7607,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/guides/rl-environments/index.html:239 +#: website/public/guides/rl-environments/index.html:241 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7621,7 +7621,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/guides/rl-environments/index.html:247 +#: website/public/guides/rl-environments/index.html:249 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7635,7 +7635,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/guides/rl-environments/index.html:255 +#: website/public/guides/rl-environments/index.html:257 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7643,21 +7643,21 @@ msgid "" "task goals and reward checks for evaluation or RL training.{ph5}" msgstr "" -#: website/public/guides/rl-environments/index.html:265 +#: website/public/guides/rl-environments/index.html:267 msgctxt "page:guides/rl-environments/index.html" msgid "" "The recording determines which operations the environment can support. Changes are " "supported when the recording confirms their effects." msgstr "" -#: website/public/guides/rl-environments/index.html:273 +#: website/public/guides/rl-environments/index.html:275 msgctxt "page:guides/rl-environments/index.html" msgid "Before you start" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:274 +#: website/public/guides/rl-environments/index.html:276 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7669,7 +7669,7 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: 0.9.1334 -#: website/public/guides/rl-environments/index.html:281 +#: website/public/guides/rl-environments/index.html:283 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7677,12 +7677,12 @@ msgid "" "Docker. REA's compatibility check uses AgentEnv version {ph2} with Python 3.12." msgstr "" -#: website/public/guides/rl-environments/index.html:291 +#: website/public/guides/rl-environments/index.html:293 msgctxt "page:guides/rl-environments/index.html" msgid "Record and build with your agent" msgstr "" -#: website/public/guides/rl-environments/index.html:292 +#: website/public/guides/rl-environments/index.html:294 msgctxt "page:guides/rl-environments/index.html" msgid "" "Tell your agent which app and operations to cover. For an app with folders, adapt this" @@ -7697,17 +7697,17 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/guides/rl-environments/index.html:298 -#: website/public/guides/rl-environments/index.html:415 +#: website/public/guides/rl-environments/index.html:300 +#: website/public/guides/rl-environments/index.html:417 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/guides/rl-environments/index.html:302 -#: website/public/guides/rl-environments/index.html:347 -#: website/public/guides/rl-environments/index.html:382 -#: website/public/guides/rl-environments/index.html:419 +#: website/public/guides/rl-environments/index.html:304 +#: website/public/guides/rl-environments/index.html:349 +#: website/public/guides/rl-environments/index.html:384 +#: website/public/guides/rl-environments/index.html:421 msgctxt "page:guides/rl-environments/index.html" msgid "Copy" msgstr "" @@ -7722,7 +7722,7 @@ msgstr "" #. {ph7}: #. {ph8}: -#: website/public/guides/rl-environments/index.html:311 +#: website/public/guides/rl-environments/index.html:313 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7734,7 +7734,7 @@ msgid "" msgstr "" #. {ph0}: APP_PASSWORD -#: website/public/guides/rl-environments/index.html:326 +#: website/public/guides/rl-environments/index.html:328 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7744,7 +7744,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:331 +#: website/public/guides/rl-environments/index.html:333 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7753,12 +7753,12 @@ msgid "" "environment{ph1}." msgstr "" -#: website/public/guides/rl-environments/index.html:338 +#: website/public/guides/rl-environments/index.html:340 msgctxt "page:guides/rl-environments/index.html" msgid "Or use a saved recording" msgstr "" -#: website/public/guides/rl-environments/index.html:339 +#: website/public/guides/rl-environments/index.html:341 msgctxt "page:guides/rl-environments/index.html" msgid "" "A HAR file records a browser's network requests and responses. Export one with API " @@ -7766,14 +7766,14 @@ msgid "" "folder:" msgstr "" -#: website/public/guides/rl-environments/index.html:346 +#: website/public/guides/rl-environments/index.html:348 msgctxt "page:guides/rl-environments/index.html" msgid "Build the environment" msgstr "" #. {ph0}: capture-browser-scenario #. {ph1}: --dry-run -#: website/public/guides/rl-environments/index.html:358 +#: website/public/guides/rl-environments/index.html:360 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7783,7 +7783,7 @@ msgid "" "without writing files." msgstr "" -#: website/public/guides/rl-environments/index.html:366 +#: website/public/guides/rl-environments/index.html:368 msgctxt "page:guides/rl-environments/index.html" msgid "" "The report lists read operations, supported changes, and operations withheld because " @@ -7791,31 +7791,31 @@ msgid "" "and a hint about what to record next." msgstr "" -#: website/public/guides/rl-environments/index.html:374 +#: website/public/guides/rl-environments/index.html:376 msgctxt "page:guides/rl-environments/index.html" msgid "Run the environment" msgstr "" -#: website/public/guides/rl-environments/index.html:375 +#: website/public/guides/rl-environments/index.html:377 msgctxt "page:guides/rl-environments/index.html" msgid "" "Whether your agent exported the folder or you built it from a recording, run it with " "AgentEnv:" msgstr "" -#: website/public/guides/rl-environments/index.html:381 +#: website/public/guides/rl-environments/index.html:383 msgctxt "page:guides/rl-environments/index.html" msgid "Run the environment test" msgstr "" -#: website/public/guides/rl-environments/index.html:393 +#: website/public/guides/rl-environments/index.html:395 msgctxt "page:guides/rl-environments/index.html" msgid "" "Use the path your agent reported if it differs. The first run builds the container " "image and needs access to its image and package sources." msgstr "" -#: website/public/guides/rl-environments/index.html:398 +#: website/public/guides/rl-environments/index.html:400 msgctxt "page:guides/rl-environments/index.html" msgid "" "The included smoke task is a basic test. It checks the tool count and, when a suitable" @@ -7823,12 +7823,12 @@ msgid "" "environment starts and responds in that setup." msgstr "" -#: website/public/guides/rl-environments/index.html:406 +#: website/public/guides/rl-environments/index.html:408 msgctxt "page:guides/rl-environments/index.html" msgid "Add tasks and reward checks" msgstr "" -#: website/public/guides/rl-environments/index.html:407 +#: website/public/guides/rl-environments/index.html:409 msgctxt "page:guides/rl-environments/index.html" msgid "" "Use the environment with your RL framework to define goals, score results, and run " @@ -7842,7 +7842,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/guides/rl-environments/index.html:428 +#: website/public/guides/rl-environments/index.html:430 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7853,7 +7853,7 @@ msgid "" "formats.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/guides/rl-environments/index.html:440 +#: website/public/guides/rl-environments/index.html:442 msgctxt "page:guides/rl-environments/index.html" msgid "" "Example prompt for an environment that supports folder creation. A task that changes " @@ -7863,7 +7863,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/rl-environments/index.html:445 +#: website/public/guides/rl-environments/index.html:447 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7872,12 +7872,12 @@ msgid "" "tasks, verifiers, and agent connections." msgstr "" -#: website/public/guides/rl-environments/index.html:455 +#: website/public/guides/rl-environments/index.html:457 msgctxt "page:guides/rl-environments/index.html" msgid "Check what works" msgstr "" -#: website/public/guides/rl-environments/index.html:456 +#: website/public/guides/rl-environments/index.html:458 msgctxt "page:guides/rl-environments/index.html" msgid "" "For changes to be supported, record the results as well as the action: read an item, " @@ -7886,7 +7886,7 @@ msgid "" msgstr "" #. {ph0}: environment-compare -#: website/public/guides/rl-environments/index.html:462 +#: website/public/guides/rl-environments/index.html:464 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7895,7 +7895,7 @@ msgid "" "against the app from the same starting data." msgstr "" -#: website/public/guides/rl-environments/index.html:468 +#: website/public/guides/rl-environments/index.html:470 msgctxt "page:guides/rl-environments/index.html" msgid "" "Before sharing the folder, review its retained response bodies and local paths. Custom" @@ -7909,7 +7909,7 @@ msgstr "" #. {ph2}: #. {ph3}: -#: website/public/guides/rl-environments/index.html:474 +#: website/public/guides/rl-environments/index.html:476 #, python-brace-format msgctxt "page:guides/rl-environments/index.html" msgid "" @@ -7923,71 +7923,71 @@ msgctxt "page:guides/rl-environments/index.html" msgid "Build RL environments with REA" msgstr "" -#: website/public/guides/rl-environments/index.html:302 +#: website/public/guides/rl-environments/index.html:304 msgctxt "page:guides/rl-environments/index.html" msgid "Copy environment prompt" msgstr "" -#: website/public/guides/rl-environments/index.html:347 +#: website/public/guides/rl-environments/index.html:349 msgctxt "page:guides/rl-environments/index.html" msgid "Copy environment build command" msgstr "" -#: website/public/guides/rl-environments/index.html:382 +#: website/public/guides/rl-environments/index.html:384 msgctxt "page:guides/rl-environments/index.html" msgid "Copy environment run command" msgstr "" -#: website/public/guides/rl-environments/index.html:419 +#: website/public/guides/rl-environments/index.html:421 msgctxt "page:guides/rl-environments/index.html" msgid "Copy task prompt" msgstr "" -#: website/public/guides/rl-environments/index.html:507 +#: website/public/guides/rl-environments/index.html:509 msgctxt "page:guides/rl-environments/index.html" msgid "Back to top" msgstr "" -#: website/public/index.html:113 +#: website/public/index.html:115 msgctxt "page:index.html" msgid "Skip to content" msgstr "" -#: website/public/index.html:205 +#: website/public/index.html:207 msgctxt "page:index.html" msgid "Reverse engineering, with your coding agent" msgstr "" #. {ph0}:
-#: website/public/index.html:206 +#: website/public/index.html:208 #, python-brace-format msgctxt "page:index.html" msgid "Find out how{ph0}software works." msgstr "" -#: website/public/index.html:207 +#: website/public/index.html:209 msgctxt "page:index.html" msgid "" "Ask your coding agent about an app, a game or a website. REA gives it the tools to " "inspect the code behind the answer." msgstr "" -#: website/public/index.html:212 +#: website/public/index.html:214 msgctxt "page:index.html" msgid "Get started" msgstr "" -#: website/public/index.html:213 +#: website/public/index.html:215 msgctxt "page:index.html" msgid "See an example ↓" msgstr "" -#: website/public/index.html:218 website/public/index.html:313 +#: website/public/index.html:220 website/public/index.html:315 msgctxt "page:index.html" msgid "Set up REA" msgstr "" -#: website/public/index.html:219 +#: website/public/index.html:221 msgctxt "page:index.html" msgid "Copy this into your coding agent:" msgstr "" @@ -8000,16 +8000,16 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:222 website/public/index.html:1127 +#: website/public/index.html:224 website/public/index.html:1129 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/index.html:227 website/public/index.html:251 -#: website/public/index.html:539 website/public/index.html:620 -#: website/public/index.html:844 website/public/index.html:1131 -#: website/public/index.html:1218 website/public/index.html:1246 +#: website/public/index.html:229 website/public/index.html:253 +#: website/public/index.html:541 website/public/index.html:622 +#: website/public/index.html:846 website/public/index.html:1133 +#: website/public/index.html:1220 website/public/index.html:1248 msgctxt "page:index.html" msgid "Copy" msgstr "" @@ -8021,7 +8021,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/index.html:236 +#: website/public/index.html:238 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8029,22 +8029,22 @@ msgid "" "the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}" msgstr "" -#: website/public/index.html:248 +#: website/public/index.html:250 msgctxt "page:index.html" msgid "Or run this in your terminal:" msgstr "" -#: website/public/index.html:260 +#: website/public/index.html:262 msgctxt "page:index.html" msgid "Approve the setup plan, then restart your agent." msgstr "" -#: website/public/index.html:265 website/public/index.html:266 +#: website/public/index.html:267 website/public/index.html:268 msgctxt "page:index.html" msgid "Setup options" msgstr "" -#: website/public/index.html:267 +#: website/public/index.html:269 msgctxt "page:index.html" msgid "Setup for your platform:" msgstr "" @@ -8052,7 +8052,7 @@ msgstr "" #. {ph0}: #. {ph1}: curl #. {ph2}: -#: website/public/index.html:278 +#: website/public/index.html:280 #, python-brace-format msgctxt "page:index.html" msgid "Other install options: {ph0}{ph1} →{ph2}" @@ -8061,7 +8061,7 @@ msgstr "" #. {ph0}: Node.js #. {ph1}: #. {ph2}: -#: website/public/index.html:285 +#: website/public/index.html:287 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8069,45 +8069,45 @@ msgid "" "guide →{ph2}" msgstr "" -#: website/public/index.html:294 +#: website/public/index.html:296 msgctxt "page:index.html" msgid "Build RL environments →" msgstr "" -#: website/public/index.html:297 +#: website/public/index.html:299 msgctxt "page:index.html" msgid "Record a web app for training and testing agents." msgstr "" -#: website/public/index.html:300 website/public/index.html:1054 +#: website/public/index.html:302 website/public/index.html:1056 msgctxt "page:index.html" msgid "Showcases →" msgstr "" -#: website/public/index.html:301 +#: website/public/index.html:303 msgctxt "page:index.html" msgid "Investigations and interactive demos." msgstr "" -#: website/public/index.html:304 +#: website/public/index.html:306 msgctxt "page:index.html" msgid "Blog →" msgstr "" -#: website/public/index.html:305 +#: website/public/index.html:307 msgctxt "page:index.html" msgid "Methods and reconstruction notes." msgstr "" -#: website/public/index.html:312 website/public/index.html:325 -#: website/public/index.html:323 +#: website/public/index.html:314 website/public/index.html:327 +#: website/public/index.html:325 msgctxt "page:index.html" msgid "On this page" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:327 +#: website/public/index.html:329 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Set up REA{ph1}" @@ -8115,7 +8115,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:328 +#: website/public/index.html:330 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}How it works{ph1}" @@ -8123,7 +8123,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:329 +#: website/public/index.html:331 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Dinosaur game{ph1}" @@ -8131,7 +8131,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:330 +#: website/public/index.html:332 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Calculator{ph1}" @@ -8139,7 +8139,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:331 +#: website/public/index.html:333 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Showcases{ph1}" @@ -8147,7 +8147,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:332 +#: website/public/index.html:334 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}RL environments{ph1}" @@ -8155,7 +8155,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:333 +#: website/public/index.html:335 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Try REA{ph1}" @@ -8163,18 +8163,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:334 +#: website/public/index.html:336 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Go deeper{ph1}" msgstr "" -#: website/public/index.html:343 +#: website/public/index.html:345 msgctxt "page:index.html" msgid "How it works" msgstr "" -#: website/public/index.html:345 +#: website/public/index.html:347 msgctxt "page:index.html" msgid "" "Reverse engineering means learning how software works by inspecting the program " @@ -8182,56 +8182,56 @@ msgid "" "rebuild it." msgstr "" -#: website/public/index.html:352 +#: website/public/index.html:354 msgctxt "page:index.html" msgid "Ask about one feature" msgstr "" -#: website/public/index.html:353 +#: website/public/index.html:355 msgctxt "page:index.html" msgid "Give your agent a program or page and a question." msgstr "" -#: website/public/index.html:356 +#: website/public/index.html:358 msgctxt "page:index.html" msgid "Inspect the program" msgstr "" -#: website/public/index.html:357 +#: website/public/index.html:359 msgctxt "page:index.html" msgid "REA helps your agent read the code and see what the program does while it runs." msgstr "" -#: website/public/index.html:363 +#: website/public/index.html:365 msgctxt "page:index.html" msgid "Explain it, then try a change" msgstr "" -#: website/public/index.html:364 +#: website/public/index.html:366 msgctxt "page:index.html" msgid "Your agent uses the findings to explain or rebuild the feature." msgstr "" -#: website/public/index.html:370 +#: website/public/index.html:372 msgctxt "page:index.html" msgid "See the full Calculator investigation" msgstr "" #. {ph0}: 200 + 10% -#: website/public/index.html:371 +#: website/public/index.html:373 #, python-brace-format msgctxt "page:index.html" msgid "Why does Calculator give 220 for {ph0}?" msgstr "" -#: website/public/index.html:380 +#: website/public/index.html:382 msgctxt "page:index.html" msgid "Follow the instructions step by step" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:388 +#: website/public/index.html:390 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}01{ph1} Decode branches" @@ -8239,7 +8239,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:396 +#: website/public/index.html:398 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}02{ph1} Trace calls" @@ -8247,7 +8247,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:404 +#: website/public/index.html:406 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}03{ph1} Recover the rule" @@ -8257,48 +8257,48 @@ msgstr "" #. {ph1}: #. {ph2}: -#: website/public/index.html:415 +#: website/public/index.html:417 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" msgstr "" -#: website/public/index.html:457 +#: website/public/index.html:459 msgctxt "page:index.html" msgid "01 · Which branch?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:458 +#: website/public/index.html:460 #, python-brace-format msgctxt "page:index.html" msgid "“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are these?”" msgstr "" -#: website/public/index.html:462 +#: website/public/index.html:464 msgctxt "page:index.html" msgid "Look up the command IDs, then label the branch." msgstr "" -#: website/public/index.html:468 +#: website/public/index.html:470 msgctxt "page:index.html" msgid "Divide ÷" msgstr "" -#: website/public/index.html:472 +#: website/public/index.html:474 msgctxt "page:index.html" msgid "Multiply ×" msgstr "" -#: website/public/index.html:477 +#: website/public/index.html:479 msgctxt "page:index.html" msgid "02 · What do the calls do?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:478 +#: website/public/index.html:480 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8306,43 +8306,43 @@ msgid "" "in?{ph1}”" msgstr "" -#: website/public/index.html:484 +#: website/public/index.html:486 msgctxt "page:index.html" msgid "Inspect the helpers and trace the stored values." msgstr "" -#: website/public/index.html:494 +#: website/public/index.html:496 msgctxt "page:index.html" msgid "Divide" msgstr "" -#: website/public/index.html:499 +#: website/public/index.html:501 msgctxt "page:index.html" msgid "03 · What is the rule?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:500 +#: website/public/index.html:502 #, python-brace-format msgctxt "page:index.html" msgid "" "“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} after +.”" msgstr "" -#: website/public/index.html:504 +#: website/public/index.html:506 msgctxt "page:index.html" msgid "Name the operands and check both operator paths." msgstr "" -#: website/public/index.html:520 website/public/index.html:447 +#: website/public/index.html:522 website/public/index.html:449 msgctxt "page:index.html" msgid "Illustrative expert reasoning" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:523 +#: website/public/index.html:525 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8350,7 +8350,7 @@ msgid "" "calculation.{ph1}" msgstr "" -#: website/public/index.html:531 +#: website/public/index.html:533 msgctxt "page:index.html" msgid "Ask your agent the same question" msgstr "" @@ -8363,7 +8363,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:534 +#: website/public/index.html:536 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" @@ -8376,7 +8376,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/index.html:548 +#: website/public/index.html:550 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8384,42 +8384,42 @@ msgid "" "220?{ph4}{ph5}{ph6}" msgstr "" -#: website/public/index.html:556 +#: website/public/index.html:558 msgctxt "page:index.html" msgid "Example answer · based on the findings" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:559 +#: website/public/index.html:561 #, python-brace-format msgctxt "page:index.html" msgid "After +, the % button takes {ph0}a percentage of the first number.{ph1}" msgstr "" -#: website/public/index.html:572 +#: website/public/index.html:574 msgctxt "page:index.html" msgid "REA supplies" msgstr "" -#: website/public/index.html:573 +#: website/public/index.html:575 msgctxt "page:index.html" msgid "The handler’s instructions, decompiled code and calls." msgstr "" -#: website/public/index.html:578 +#: website/public/index.html:580 msgctxt "page:index.html" msgid "Your agent explains" msgstr "" -#: website/public/index.html:579 +#: website/public/index.html:581 msgctxt "page:index.html" msgid "Which branch applies, what it calculates and how to rebuild it." msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:586 +#: website/public/index.html:588 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8427,30 +8427,30 @@ msgid "" " the findings. {ph0}Continue with the Calculator example ↓{ph1}" msgstr "" -#: website/public/index.html:598 +#: website/public/index.html:600 msgctxt "page:index.html" msgid "" "Let’s try two examples: change a game’s speed, then rebuild Calculator’s % button." msgstr "" -#: website/public/index.html:603 +#: website/public/index.html:605 msgctxt "page:index.html" msgid "Example 01 · Chrome’s dinosaur game" msgstr "" -#: website/public/index.html:604 +#: website/public/index.html:606 msgctxt "page:index.html" msgid "Why does the dinosaur get faster?" msgstr "" -#: website/public/index.html:606 +#: website/public/index.html:608 msgctxt "page:index.html" msgid "" "The game gets faster as you run. To rebuild it with a speed control, we first need to " "find out how the speed changes." msgstr "" -#: website/public/index.html:612 +#: website/public/index.html:614 msgctxt "page:index.html" msgid "1. Ask about the speed" msgstr "" @@ -8463,7 +8463,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:615 +#: website/public/index.html:617 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Dinosaur game" @@ -8475,7 +8475,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/index.html:629 +#: website/public/index.html:631 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8483,102 +8483,102 @@ msgid "" "the speed rule, then build a small version with an adjustable speed.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/index.html:638 +#: website/public/index.html:640 msgctxt "page:index.html" msgid "2. Find the speed rule" msgstr "" -#: website/public/index.html:639 +#: website/public/index.html:641 msgctxt "page:index.html" msgid "" "REA lets the agent read the game’s running code. The speed starts at 6 and increases a" " little each update while it is below 13." msgstr "" -#: website/public/index.html:646 +#: website/public/index.html:648 msgctxt "page:index.html" msgid "3. Play the result" msgstr "" -#: website/public/index.html:647 +#: website/public/index.html:649 msgctxt "page:index.html" msgid "" "We rebuilt that rule in the mini-game below and added a speed slider. Press Play, then" " choose your own speed." msgstr "" -#: website/public/index.html:683 +#: website/public/index.html:685 msgctxt "page:index.html" msgid "Play" msgstr "" -#: website/public/index.html:686 +#: website/public/index.html:688 msgctxt "page:index.html" msgid "Jump ↑" msgstr "" -#: website/public/index.html:687 +#: website/public/index.html:689 msgctxt "page:index.html" msgid "Restart" msgstr "" -#: website/public/index.html:690 +#: website/public/index.html:692 msgctxt "page:index.html" msgid "Speed" msgstr "" -#: website/public/index.html:700 +#: website/public/index.html:702 msgctxt "page:index.html" msgid "Use the recovered acceleration rule" msgstr "" -#: website/public/index.html:704 +#: website/public/index.html:706 msgctxt "page:index.html" msgid "Original rule: start at 6, then increase toward 13." msgstr "" -#: website/public/index.html:707 +#: website/public/index.html:709 msgctxt "page:index.html" msgid "Move the slider to set your own speed. Space or Jump clears a cactus." msgstr "" -#: website/public/index.html:712 +#: website/public/index.html:714 msgctxt "page:index.html" msgid "" "Enable JavaScript to play. You can still read the rule and open the source code below." msgstr "" -#: website/public/index.html:718 +#: website/public/index.html:720 msgctxt "page:index.html" msgid "Open the speed lab →" msgstr "" -#: website/public/index.html:724 +#: website/public/index.html:726 msgctxt "page:index.html" msgid "See the script, checks and how to try the analysis" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:727 +#: website/public/index.html:729 #, python-brace-format msgctxt "page:index.html" msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." msgstr "" #. {ph0}: index.js -#: website/public/index.html:735 +#: website/public/index.html:737 #, python-brace-format msgctxt "page:index.html" msgid "REA · loaded {ph0} · selected lines" msgstr "" -#: website/public/index.html:744 +#: website/public/index.html:746 msgctxt "page:index.html" msgid "Start at 6. Add 0.001 each update without a collision, while speed is below 13." msgstr "" -#: website/public/index.html:749 +#: website/public/index.html:751 msgctxt "page:index.html" msgid "What each part does" msgstr "" @@ -8589,7 +8589,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:751 +#: website/public/index.html:753 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8603,7 +8603,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:758 +#: website/public/index.html:760 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8617,7 +8617,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:766 +#: website/public/index.html:768 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8626,7 +8626,7 @@ msgid "" msgstr "" #. {ph0}: index.js -#: website/public/index.html:776 +#: website/public/index.html:778 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8634,12 +8634,12 @@ msgid "" "returned the loaded {ph0}, including its source and digest." msgstr "" -#: website/public/index.html:783 +#: website/public/index.html:785 msgctxt "page:index.html" msgid "Selected settings from the inspected script" msgstr "" -#: website/public/index.html:789 +#: website/public/index.html:791 msgctxt "page:index.html" msgid "" "We called the original game’s update function in a controlled browser check, with " @@ -8649,7 +8649,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:795 +#: website/public/index.html:797 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8662,7 +8662,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/index.html:801 +#: website/public/index.html:803 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8676,30 +8676,30 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/index.html:810 +#: website/public/index.html:812 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" msgstr "" -#: website/public/index.html:827 +#: website/public/index.html:829 msgctxt "page:index.html" msgid "Example 02 · Windows Calculator" msgstr "" -#: website/public/index.html:828 +#: website/public/index.html:830 msgctxt "page:index.html" msgid "Rebuild Calculator’s % button." msgstr "" -#: website/public/index.html:830 +#: website/public/index.html:832 msgctxt "page:index.html" msgid "" "The % button does different things after + and ×. Let’s find both rules and try them " "in a small calculator." msgstr "" -#: website/public/index.html:836 +#: website/public/index.html:838 msgctxt "page:index.html" msgid "1. Ask about the % button" msgstr "" @@ -8712,7 +8712,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:839 +#: website/public/index.html:841 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Calculator" @@ -8724,7 +8724,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/index.html:853 +#: website/public/index.html:855 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8732,18 +8732,18 @@ msgid "" "after + and ×, then build a small calculator that uses both.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/index.html:862 +#: website/public/index.html:864 msgctxt "page:index.html" msgid "2. Find both rules" msgstr "" -#: website/public/index.html:863 +#: website/public/index.html:865 msgctxt "page:index.html" msgid "" "REA helps the agent read the code behind the % button. It applies two different rules:" msgstr "" -#: website/public/index.html:869 +#: website/public/index.html:871 msgctxt "page:index.html" msgid "With +" msgstr "" @@ -8751,13 +8751,13 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 -#: website/public/index.html:870 +#: website/public/index.html:872 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" msgstr "" -#: website/public/index.html:876 +#: website/public/index.html:878 msgctxt "page:index.html" msgid "With ×" msgstr "" @@ -8765,56 +8765,56 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: 200 × 0.1 = 20 -#: website/public/index.html:877 +#: website/public/index.html:879 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" msgstr "" -#: website/public/index.html:884 +#: website/public/index.html:886 msgctxt "page:index.html" msgid "3. Try the % button" msgstr "" -#: website/public/index.html:885 +#: website/public/index.html:887 msgctxt "page:index.html" msgid "We recreated both rules below. Choose + or ×, press %, then press =." msgstr "" -#: website/public/index.html:933 +#: website/public/index.html:935 msgctxt "page:index.html" msgid "Reset" msgstr "" -#: website/public/index.html:941 +#: website/public/index.html:943 msgctxt "page:index.html" msgid "10% of 200 = 20. Then 200 + 20 = 220." msgstr "" -#: website/public/index.html:944 +#: website/public/index.html:946 msgctxt "page:index.html" msgid "Interactive illustration of the inspected percentage rule." msgstr "" -#: website/public/index.html:951 +#: website/public/index.html:953 msgctxt "page:index.html" msgid "See the real code and how the answer was checked" msgstr "" #. {ph0}: previous = 200 #. {ph1}: current = 10 -#: website/public/index.html:952 +#: website/public/index.html:954 #, python-brace-format msgctxt "page:index.html" msgid "For this example, {ph0} and {ph1}." msgstr "" -#: website/public/index.html:958 +#: website/public/index.html:960 msgctxt "page:index.html" msgid "Readable summary of the % handler" msgstr "" -#: website/public/index.html:967 +#: website/public/index.html:969 msgctxt "page:index.html" msgid "From the installed app to a working % button" msgstr "" @@ -8827,7 +8827,7 @@ msgstr "" #. {ph5}: #. {ph6}: ms-calculator: #. {ph7}: -#: website/public/index.html:971 +#: website/public/index.html:973 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8842,7 +8842,7 @@ msgstr "" #. {ph4}: #. {ph5}: 100 #. {ph6}: -#: website/public/index.html:980 +#: website/public/index.html:982 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8856,7 +8856,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:988 +#: website/public/index.html:990 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8865,17 +8865,17 @@ msgid "" "above.{ph5}" msgstr "" -#: website/public/index.html:1002 +#: website/public/index.html:1004 msgctxt "page:index.html" msgid "REA · selected original instructions" msgstr "" -#: website/public/index.html:1013 +#: website/public/index.html:1015 msgctxt "page:index.html" msgid "Operator IDs · Microsoft’s source" msgstr "" -#: website/public/index.html:1023 +#: website/public/index.html:1025 msgctxt "page:index.html" msgid "" "Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable summary " @@ -8892,7 +8892,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:1028 +#: website/public/index.html:1030 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8900,93 +8900,93 @@ msgid "" "setup guide{ph5}" msgstr "" -#: website/public/index.html:1048 +#: website/public/index.html:1050 msgctxt "page:index.html" msgid "REA case studies." msgstr "" -#: website/public/index.html:1049 +#: website/public/index.html:1051 msgctxt "page:index.html" msgid "Explore a feature in a released app or game, with code and checked results." msgstr "" -#: website/public/index.html:1058 +#: website/public/index.html:1060 msgctxt "page:index.html" msgid "Android · APK analysis" msgstr "" -#: website/public/index.html:1059 +#: website/public/index.html:1061 msgctxt "page:index.html" msgid "How an authenticator generates a login code" msgstr "" -#: website/public/index.html:1060 +#: website/public/index.html:1062 msgctxt "page:index.html" msgid "" "Trace Aegis's six-digit login code through its released APK, then move a demo clock to" " see why it changes every 30 seconds." msgstr "" -#: website/public/index.html:1064 +#: website/public/index.html:1066 msgctxt "page:index.html" msgid "Read the Android case study" msgstr "" -#: website/public/index.html:1069 +#: website/public/index.html:1071 msgctxt "page:index.html" msgid "Electron · Feature tracing" msgstr "" -#: website/public/index.html:1070 +#: website/public/index.html:1072 msgctxt "page:index.html" msgid "How Notion copies text and HTML" msgstr "" -#: website/public/index.html:1071 +#: website/public/index.html:1073 msgctxt "page:index.html" msgid "" "Follow Notion's packaged JavaScript to the system clipboard and see how a copy " "preserves rich block data." msgstr "" -#: website/public/index.html:1075 +#: website/public/index.html:1077 msgctxt "page:index.html" msgid "Read the Notion case study" msgstr "" -#: website/public/index.html:1080 +#: website/public/index.html:1082 msgctxt "page:index.html" msgid "Native · Reconstruction" msgstr "" -#: website/public/index.html:1081 +#: website/public/index.html:1083 msgctxt "page:index.html" msgid "DX-Ball's sound-pan calculation" msgstr "" -#: website/public/index.html:1082 +#: website/public/index.html:1084 msgctxt "page:index.html" msgid "Recover how a ball's position becomes left/right sound in a 1996 Windows game." msgstr "" -#: website/public/index.html:1086 +#: website/public/index.html:1088 msgctxt "page:index.html" msgid "Read the DX-Ball case study" msgstr "" -#: website/public/index.html:1098 +#: website/public/index.html:1100 msgctxt "page:index.html" msgid "Build RL environments." msgstr "" -#: website/public/index.html:1099 +#: website/public/index.html:1101 msgctxt "page:index.html" msgid "" "Turn a recorded web app session into a runnable environment for training and testing " "AI agents." msgstr "" -#: website/public/index.html:1104 +#: website/public/index.html:1106 msgctxt "page:index.html" msgid "" "Your agent records the browser's requests and the app's responses. REA uses them to " @@ -8994,7 +8994,7 @@ msgid "" " app." msgstr "" -#: website/public/index.html:1109 +#: website/public/index.html:1111 msgctxt "page:index.html" msgid "" "To support folder deletion, the recording must show the folder before deletion and " @@ -9005,13 +9005,13 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/index.html:1113 +#: website/public/index.html:1115 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Build an RL environment{ph1} · {ph2}Watch the demo on X{ph3}" msgstr "" -#: website/public/index.html:1124 +#: website/public/index.html:1126 msgctxt "page:index.html" msgid "With REA set up in your agent, give it a task like this:" msgstr "" @@ -9024,7 +9024,7 @@ msgstr "" #. {ph5}: #. {ph6}: -#: website/public/index.html:1140 +#: website/public/index.html:1142 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -9034,90 +9034,90 @@ msgid "" "which operations work and tell me how to run it.{ph5}{ph6}{ph7}" msgstr "" -#: website/public/index.html:1152 +#: website/public/index.html:1154 msgctxt "page:index.html" msgid "Example prompt. Replace the URL and folder tasks with your own." msgstr "" -#: website/public/index.html:1162 +#: website/public/index.html:1164 msgctxt "page:index.html" msgid "Your first investigation" msgstr "" -#: website/public/index.html:1163 +#: website/public/index.html:1165 msgctxt "page:index.html" msgid "Try REA on a small app." msgstr "" -#: website/public/index.html:1164 +#: website/public/index.html:1166 msgctxt "page:index.html" msgid "Download our Notes example, trace its CSV export, and check one changed input." msgstr "" -#: website/public/index.html:1169 +#: website/public/index.html:1171 msgctxt "page:index.html" msgid "Try the guided example" msgstr "" -#: website/public/index.html:1178 +#: website/public/index.html:1180 msgctxt "page:index.html" msgid "Choose your target." msgstr "" -#: website/public/index.html:1179 +#: website/public/index.html:1181 msgctxt "page:index.html" msgid "These guides cover setup and a first investigation for each kind of software." msgstr "" -#: website/public/index.html:1186 +#: website/public/index.html:1188 msgctxt "page:index.html" msgid "Native binaries" msgstr "" -#: website/public/index.html:1187 +#: website/public/index.html:1189 msgctxt "page:index.html" msgid "" "Inspect functions, strings, references and call relationships in executables and " "libraries." msgstr "" -#: website/public/index.html:1191 +#: website/public/index.html:1193 msgctxt "page:index.html" msgid "Native analysis guide" msgstr "" -#: website/public/index.html:1194 +#: website/public/index.html:1196 msgctxt "page:index.html" msgid "JavaScript & Electron" msgstr "" -#: website/public/index.html:1195 +#: website/public/index.html:1197 msgctxt "page:index.html" msgid "Follow the code inside a JavaScript desktop app." msgstr "" -#: website/public/index.html:1196 +#: website/public/index.html:1198 msgctxt "page:index.html" msgid "Application workflows" msgstr "" -#: website/public/index.html:1199 +#: website/public/index.html:1201 msgctxt "page:index.html" msgid "Browser & runtime activity" msgstr "" -#: website/public/index.html:1200 +#: website/public/index.html:1202 msgctxt "page:index.html" msgid "" "Capture selected browser or process activity, then compare the results across runs." msgstr "" -#: website/public/index.html:1204 +#: website/public/index.html:1206 msgctxt "page:index.html" msgid "Browser observation guide" msgstr "" -#: website/public/index.html:1208 +#: website/public/index.html:1210 msgctxt "page:index.html" msgid "Try a larger project" msgstr "" @@ -9130,7 +9130,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:1213 +#: website/public/index.html:1215 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" @@ -9143,14 +9143,14 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/index.html:1227 +#: website/public/index.html:1229 #, python-brace-format msgctxt "page:index.html" msgid "" "{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for me.{ph4}{ph5}{ph6}" msgstr "" -#: website/public/index.html:1236 +#: website/public/index.html:1238 msgctxt "page:index.html" msgid "Yes, this one." msgstr "" @@ -9163,7 +9163,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:1241 +#: website/public/index.html:1243 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" @@ -9175,7 +9175,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/index.html:1255 +#: website/public/index.html:1257 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -9185,20 +9185,20 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:1264 +#: website/public/index.html:1266 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}See the DX-Ball case study →{ph1}" msgstr "" -#: website/public/index.html:1275 +#: website/public/index.html:1277 msgctxt "page:index.html" msgid "Any questions?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:1277 +#: website/public/index.html:1279 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Read the FAQ{ph1} for setup help and common questions." @@ -9206,7 +9206,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:1281 +#: website/public/index.html:1283 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Join Discord{ph1} to get help and discuss your investigations." @@ -9214,7 +9214,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:1285 +#: website/public/index.html:1287 #, python-brace-format msgctxt "page:index.html" msgid "Report a bug or request a feature in {ph0}GitHub issues{ph1}." @@ -9232,68 +9232,68 @@ msgid "" "clear guides and try interactive examples with REA." msgstr "" -#: website/public/index.html:227 +#: website/public/index.html:229 msgctxt "page:index.html" msgid "Copy REA installation prompt" msgstr "" -#: website/public/index.html:251 +#: website/public/index.html:253 msgctxt "page:index.html" msgid "Copy setup command" msgstr "" -#: website/public/index.html:383 +#: website/public/index.html:385 msgctxt "page:index.html" msgid "Follow the manual Calculator analysis" msgstr "" -#: website/public/index.html:539 +#: website/public/index.html:541 msgctxt "page:index.html" msgid "Copy Calculator percentage question" msgstr "" -#: website/public/index.html:620 +#: website/public/index.html:622 msgctxt "page:index.html" msgid "Copy dinosaur analysis prompt" msgstr "" -#: website/public/index.html:673 +#: website/public/index.html:675 msgctxt "page:index.html" msgid "" "Dinosaur mini-game. Use the Jump button or press Space while the game is focused." msgstr "" -#: website/public/index.html:844 +#: website/public/index.html:846 msgctxt "page:index.html" msgid "Copy Calculator analysis prompt" msgstr "" -#: website/public/index.html:890 +#: website/public/index.html:892 msgctxt "page:index.html" msgid "Choose the calculation" msgstr "" -#: website/public/index.html:1131 +#: website/public/index.html:1133 msgctxt "page:index.html" msgid "Copy example prompt" msgstr "" -#: website/public/index.html:1218 +#: website/public/index.html:1220 msgctxt "page:index.html" msgid "Copy website project prompt" msgstr "" -#: website/public/index.html:1246 +#: website/public/index.html:1248 msgctxt "page:index.html" msgid "Copy game reconstruction prompt" msgstr "" -#: website/public/index.html:1312 +#: website/public/index.html:1314 msgctxt "page:index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/aegis/index.html:114 msgctxt "page:showcase/aegis/index.html" msgid "Skip to content" msgstr "" @@ -9302,42 +9302,42 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/aegis/index.html:202 +#: website/public/showcase/aegis/index.html:204 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" msgstr "" -#: website/public/showcase/aegis/index.html:205 +#: website/public/showcase/aegis/index.html:207 msgctxt "page:showcase/aegis/index.html" msgid "Case study · Aegis Authenticator" msgstr "" #. {ph0}:
-#: website/public/showcase/aegis/index.html:206 +#: website/public/showcase/aegis/index.html:208 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "How does an authenticator{ph0}generate a login code?" msgstr "" -#: website/public/showcase/aegis/index.html:207 +#: website/public/showcase/aegis/index.html:209 msgctxt "page:showcase/aegis/index.html" msgid "" "A six-digit code changes every 30 seconds. Use REA to find the calculation in an " "Android APK, then rebuild it with a clock you can control." msgstr "" -#: website/public/showcase/aegis/index.html:212 +#: website/public/showcase/aegis/index.html:214 msgctxt "page:showcase/aegis/index.html" msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" msgstr "" -#: website/public/showcase/aegis/index.html:215 +#: website/public/showcase/aegis/index.html:217 msgctxt "page:showcase/aegis/index.html" msgid "View Aegis on GitHub" msgstr "" -#: website/public/showcase/aegis/index.html:221 +#: website/public/showcase/aegis/index.html:223 msgctxt "page:showcase/aegis/index.html" msgid "From an APK to a code you can reproduce" msgstr "" @@ -9348,7 +9348,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/aegis/index.html:223 +#: website/public/showcase/aegis/index.html:225 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9362,7 +9362,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/aegis/index.html:232 +#: website/public/showcase/aegis/index.html:234 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9376,7 +9376,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/aegis/index.html:240 +#: website/public/showcase/aegis/index.html:242 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9384,14 +9384,14 @@ msgid "" "browser demo reproduces the rule and checks it against public reference cases.{ph5}" msgstr "" -#: website/public/showcase/aegis/index.html:253 +#: website/public/showcase/aegis/index.html:255 msgctxt "page:showcase/aegis/index.html" msgid "In this case study" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:255 +#: website/public/showcase/aegis/index.html:257 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}Ask your agent{ph1}" @@ -9399,7 +9399,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:258 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}Try the code generator{ph1}" @@ -9407,7 +9407,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:257 +#: website/public/showcase/aegis/index.html:259 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}Find the code with REA{ph1}" @@ -9415,7 +9415,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:258 +#: website/public/showcase/aegis/index.html:260 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}Read the calculation{ph1}" @@ -9423,7 +9423,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:259 +#: website/public/showcase/aegis/index.html:261 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}Check the reconstruction{ph1}" @@ -9431,20 +9431,20 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:260 +#: website/public/showcase/aegis/index.html:262 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}Inspect the APK yourself{ph1}" msgstr "" -#: website/public/showcase/aegis/index.html:265 +#: website/public/showcase/aegis/index.html:267 msgctxt "page:showcase/aegis/index.html" msgid "Ask your agent" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:266 +#: website/public/showcase/aegis/index.html:268 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9460,14 +9460,14 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/showcase/aegis/index.html:272 +#: website/public/showcase/aegis/index.html:274 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/showcase/aegis/index.html:276 -#: website/public/showcase/aegis/index.html:746 +#: website/public/showcase/aegis/index.html:278 +#: website/public/showcase/aegis/index.html:748 msgctxt "page:showcase/aegis/index.html" msgid "Copy" msgstr "" @@ -9479,7 +9479,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/showcase/aegis/index.html:285 +#: website/public/showcase/aegis/index.html:287 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9490,7 +9490,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:296 +#: website/public/showcase/aegis/index.html:298 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9498,14 +9498,14 @@ msgid "" "{ph0}Get the APK and analysis setup ↓{ph1}" msgstr "" -#: website/public/showcase/aegis/index.html:304 +#: website/public/showcase/aegis/index.html:306 msgctxt "page:showcase/aegis/index.html" msgid "Try the code generator" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:305 +#: website/public/showcase/aegis/index.html:307 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9513,33 +9513,33 @@ msgid "" " the account key to generate a code. The same key and block produce the same code." msgstr "" -#: website/public/showcase/aegis/index.html:312 +#: website/public/showcase/aegis/index.html:314 msgctxt "page:showcase/aegis/index.html" msgid "Move the clock across 60 seconds" msgstr "" -#: website/public/showcase/aegis/index.html:315 +#: website/public/showcase/aegis/index.html:317 msgctxt "page:showcase/aegis/index.html" msgid "Time" msgstr "" -#: website/public/showcase/aegis/index.html:317 +#: website/public/showcase/aegis/index.html:319 msgctxt "page:showcase/aegis/index.html" msgid "seconds" msgstr "" -#: website/public/showcase/aegis/index.html:318 +#: website/public/showcase/aegis/index.html:320 msgctxt "page:showcase/aegis/index.html" msgid "Our adjustable example clock" msgstr "" -#: website/public/showcase/aegis/index.html:321 +#: website/public/showcase/aegis/index.html:323 msgctxt "page:showcase/aegis/index.html" msgid "30-second block" msgstr "" -#: website/public/showcase/aegis/index.html:323 -#: website/public/showcase/aegis/index.html:650 +#: website/public/showcase/aegis/index.html:325 +#: website/public/showcase/aegis/index.html:652 msgctxt "page:showcase/aegis/index.html" msgid "Block" msgstr "" @@ -9548,35 +9548,35 @@ msgstr "" #. {ph1}:
#. {ph2}: #. {ph3}: -#: website/public/showcase/aegis/index.html:324 +#: website/public/showcase/aegis/index.html:326 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" msgstr "" -#: website/public/showcase/aegis/index.html:332 +#: website/public/showcase/aegis/index.html:334 msgctxt "page:showcase/aegis/index.html" msgid "Generated code" msgstr "" -#: website/public/showcase/aegis/index.html:340 +#: website/public/showcase/aegis/index.html:342 msgctxt "page:showcase/aegis/index.html" msgid "Account key + block → six digits" msgstr "" -#: website/public/showcase/aegis/index.html:346 +#: website/public/showcase/aegis/index.html:348 msgctxt "page:showcase/aegis/index.html" msgid "Example time, in seconds" msgstr "" -#: website/public/showcase/aegis/index.html:361 -#: website/public/showcase/aegis/index.html:661 +#: website/public/showcase/aegis/index.html:363 +#: website/public/showcase/aegis/index.html:663 msgctxt "page:showcase/aegis/index.html" msgid "59 seconds" msgstr "" -#: website/public/showcase/aegis/index.html:368 -#: website/public/showcase/aegis/index.html:666 +#: website/public/showcase/aegis/index.html:370 +#: website/public/showcase/aegis/index.html:668 msgctxt "page:showcase/aegis/index.html" msgid "60 seconds" msgstr "" @@ -9585,7 +9585,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/aegis/index.html:377 +#: website/public/showcase/aegis/index.html:379 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9595,7 +9595,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:384 +#: website/public/showcase/aegis/index.html:386 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9603,35 +9603,35 @@ msgid "" "calculation recovered from the APK." msgstr "" -#: website/public/showcase/aegis/index.html:391 +#: website/public/showcase/aegis/index.html:393 msgctxt "page:showcase/aegis/index.html" msgid "" "The diagram shows the result at 59 seconds. Enable JavaScript to change the clock." msgstr "" -#: website/public/showcase/aegis/index.html:400 +#: website/public/showcase/aegis/index.html:402 msgctxt "page:showcase/aegis/index.html" msgid "Find the code with REA" msgstr "" -#: website/public/showcase/aegis/index.html:403 +#: website/public/showcase/aegis/index.html:405 msgctxt "page:showcase/aegis/index.html" msgid "Narrow the APK to three classes" msgstr "" -#: website/public/showcase/aegis/index.html:406 -#: website/public/showcase/aegis/index.html:438 +#: website/public/showcase/aegis/index.html:408 +#: website/public/showcase/aegis/index.html:440 msgctxt "page:showcase/aegis/index.html" msgid "Agent → REA" msgstr "" -#: website/public/showcase/aegis/index.html:416 +#: website/public/showcase/aegis/index.html:418 msgctxt "page:showcase/aegis/index.html" msgid "REA → agent · selected results" msgstr "" #. {ph0}: TotpInfo -#: website/public/showcase/aegis/index.html:428 +#: website/public/showcase/aegis/index.html:430 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9639,19 +9639,19 @@ msgid "" "imported accounts. TOTP means a time-based one-time password." msgstr "" -#: website/public/showcase/aegis/index.html:435 +#: website/public/showcase/aegis/index.html:437 msgctxt "page:showcase/aegis/index.html" msgid "Connect the generator to the app's display" msgstr "" -#: website/public/showcase/aegis/index.html:452 +#: website/public/showcase/aegis/index.html:454 msgctxt "page:showcase/aegis/index.html" msgid "REA → agent · methods and callers" msgstr "" #. {ph0}: EntryHolder.getOtp #. {ph1}: TotpInfo.getOtp(timestamp) -#: website/public/showcase/aegis/index.html:463 +#: website/public/showcase/aegis/index.html:465 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9660,21 +9660,21 @@ msgid "" msgstr "" #. {ph0}: com.beemdevelopment.aegis -#: website/public/showcase/aegis/index.html:471 +#: website/public/showcase/aegis/index.html:473 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" "Requests show a shortened input path. Result class names omit the common {ph0} prefix." msgstr "" -#: website/public/showcase/aegis/index.html:478 +#: website/public/showcase/aegis/index.html:480 msgctxt "page:showcase/aegis/index.html" msgid "Read the calculation" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:479 +#: website/public/showcase/aegis/index.html:481 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9685,7 +9685,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:494 +#: website/public/showcase/aegis/index.html:496 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}01{ph1} Time block" @@ -9693,7 +9693,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:502 +#: website/public/showcase/aegis/index.html:504 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}02{ph1} Key + block" @@ -9701,25 +9701,25 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:510 +#: website/public/showcase/aegis/index.html:512 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}03{ph1} Six digits" msgstr "" -#: website/public/showcase/aegis/index.html:522 +#: website/public/showcase/aegis/index.html:524 msgctxt "page:showcase/aegis/index.html" msgid "REA · selected decompiled Java" msgstr "" -#: website/public/showcase/aegis/index.html:552 +#: website/public/showcase/aegis/index.html:554 msgctxt "page:showcase/aegis/index.html" msgid "Readable summary · agent's interpretation" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:569 +#: website/public/showcase/aegis/index.html:571 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9729,7 +9729,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:575 +#: website/public/showcase/aegis/index.html:577 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9739,7 +9739,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:582 +#: website/public/showcase/aegis/index.html:584 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9751,7 +9751,7 @@ msgstr "" #. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE" #. > #. {ph1}: -#: website/public/showcase/aegis/index.html:589 +#: website/public/showcase/aegis/index.html:591 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9759,7 +9759,7 @@ msgid "" "panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" msgstr "" -#: website/public/showcase/aegis/index.html:598 +#: website/public/showcase/aegis/index.html:600 msgctxt "page:showcase/aegis/index.html" msgid "Inside the generator" msgstr "" @@ -9768,7 +9768,7 @@ msgstr "" #. {ph1}: kotlin.ExceptionsKt #. {ph2}: TotpInfo #. {ph3}: HOTP -#: website/public/showcase/aegis/index.html:599 +#: website/public/showcase/aegis/index.html:601 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9776,12 +9776,12 @@ msgid "" " body; the original source calls the helper {ph3}." msgstr "" -#: website/public/showcase/aegis/index.html:607 +#: website/public/showcase/aegis/index.html:609 msgctxt "page:showcase/aegis/index.html" msgid "REA · generateOTP, complete body" msgstr "" -#: website/public/showcase/aegis/index.html:621 +#: website/public/showcase/aegis/index.html:623 msgctxt "page:showcase/aegis/index.html" msgid "" "The last hash byte selects a position. Four bytes at that position provide a positive " @@ -9794,20 +9794,20 @@ msgstr "" #. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/app/src/main/java/com/beemdevelopment/aegis/crypto/otp/HOTP.java" #. > #. {ph1}: -#: website/public/showcase/aegis/index.html:628 +#: website/public/showcase/aegis/index.html:630 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}Compare with the matching release source{ph1}." msgstr "" -#: website/public/showcase/aegis/index.html:638 +#: website/public/showcase/aegis/index.html:640 msgctxt "page:showcase/aegis/index.html" msgid "Check the reconstruction" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:639 +#: website/public/showcase/aegis/index.html:641 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9816,29 +9816,29 @@ msgid "" "time-block boundaries and codes beginning with zero." msgstr "" -#: website/public/showcase/aegis/index.html:649 +#: website/public/showcase/aegis/index.html:651 msgctxt "page:showcase/aegis/index.html" msgid "Example time" msgstr "" -#: website/public/showcase/aegis/index.html:651 +#: website/public/showcase/aegis/index.html:653 msgctxt "page:showcase/aegis/index.html" msgid "Six-digit code" msgstr "" -#: website/public/showcase/aegis/index.html:656 +#: website/public/showcase/aegis/index.html:658 msgctxt "page:showcase/aegis/index.html" msgid "30 seconds" msgstr "" -#: website/public/showcase/aegis/index.html:671 +#: website/public/showcase/aegis/index.html:673 msgctxt "page:showcase/aegis/index.html" msgid "1,111,111,109 seconds" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:678 +#: website/public/showcase/aegis/index.html:680 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9846,30 +9846,30 @@ msgid "" "6238{ph1}. Check the browser implementation against them:" msgstr "" -#: website/public/showcase/aegis/index.html:686 +#: website/public/showcase/aegis/index.html:688 msgctxt "page:showcase/aegis/index.html" msgid "Run reference checks" msgstr "" -#: website/public/showcase/aegis/index.html:693 +#: website/public/showcase/aegis/index.html:695 msgctxt "page:showcase/aegis/index.html" msgid "Read the demo's calculation" msgstr "" -#: website/public/showcase/aegis/index.html:697 +#: website/public/showcase/aegis/index.html:699 msgctxt "page:showcase/aegis/index.html" msgid "" "The reference cases use eight digits. The check also verifies their six-digit results." msgstr "" -#: website/public/showcase/aegis/index.html:706 +#: website/public/showcase/aegis/index.html:708 msgctxt "page:showcase/aegis/index.html" msgid "" "Verification runs extracted Java methods and the new demo. The Android APK was " "inspected statically." msgstr "" -#: website/public/showcase/aegis/index.html:713 +#: website/public/showcase/aegis/index.html:715 msgctxt "page:showcase/aegis/index.html" msgid "Inspect the APK yourself" msgstr "" @@ -9879,7 +9879,7 @@ msgstr "" #. {ph2}: #. {ph3}: -#: website/public/showcase/aegis/index.html:714 +#: website/public/showcase/aegis/index.html:716 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9891,7 +9891,7 @@ msgstr "" #. {ph0}: JAVA_HOME #. {ph1}: PATH -#: website/public/showcase/aegis/index.html:726 +#: website/public/showcase/aegis/index.html:728 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9899,28 +9899,28 @@ msgid "" "case used JDK 21." msgstr "" -#: website/public/showcase/aegis/index.html:732 +#: website/public/showcase/aegis/index.html:734 msgctxt "page:showcase/aegis/index.html" msgid "Download Aegis APK" msgstr "" -#: website/public/showcase/aegis/index.html:736 +#: website/public/showcase/aegis/index.html:738 msgctxt "page:showcase/aegis/index.html" msgid "Download Android analysis provider" msgstr "" -#: website/public/showcase/aegis/index.html:742 +#: website/public/showcase/aegis/index.html:744 msgctxt "page:showcase/aegis/index.html" msgid "Point REA at the provider file and inspect the APK:" msgstr "" -#: website/public/showcase/aegis/index.html:745 +#: website/public/showcase/aegis/index.html:747 msgctxt "page:showcase/aegis/index.html" msgid "macOS / Linux" msgstr "" #. {ph0}: REA_JADX_MCP_JAR -#: website/public/showcase/aegis/index.html:759 +#: website/public/showcase/aegis/index.html:761 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9930,7 +9930,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:764 +#: website/public/showcase/aegis/index.html:766 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9938,7 +9938,7 @@ msgid "" "time interval?{ph1}" msgstr "" -#: website/public/showcase/aegis/index.html:774 +#: website/public/showcase/aegis/index.html:776 msgctxt "page:showcase/aegis/index.html" msgid "Sources" msgstr "" @@ -9953,7 +9953,7 @@ msgstr "" #. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE" #. > #. {ph5}: -#: website/public/showcase/aegis/index.html:776 +#: website/public/showcase/aegis/index.html:778 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9965,13 +9965,13 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/aegis/index.html:792 +#: website/public/showcase/aegis/index.html:794 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" msgstr "" -#: website/public/showcase/aegis/index.html:799 +#: website/public/showcase/aegis/index.html:801 msgctxt "page:showcase/aegis/index.html" msgid "" "Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited to Aegis;" @@ -9990,37 +9990,37 @@ msgid "" "and try a reconstruction with an adjustable clock." msgstr "" -#: website/public/showcase/aegis/index.html:252 +#: website/public/showcase/aegis/index.html:254 msgctxt "page:showcase/aegis/index.html" msgid "On this page" msgstr "" -#: website/public/showcase/aegis/index.html:263 +#: website/public/showcase/aegis/index.html:265 msgctxt "page:showcase/aegis/index.html" msgid "Aegis APK case study" msgstr "" -#: website/public/showcase/aegis/index.html:276 +#: website/public/showcase/aegis/index.html:278 msgctxt "page:showcase/aegis/index.html" msgid "Copy Aegis example prompt" msgstr "" -#: website/public/showcase/aegis/index.html:489 +#: website/public/showcase/aegis/index.html:491 msgctxt "page:showcase/aegis/index.html" msgid "Follow the login-code calculation" msgstr "" -#: website/public/showcase/aegis/index.html:746 +#: website/public/showcase/aegis/index.html:748 msgctxt "page:showcase/aegis/index.html" msgid "Copy APK inspection command" msgstr "" -#: website/public/showcase/aegis/index.html:824 +#: website/public/showcase/aegis/index.html:826 msgctxt "page:showcase/aegis/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/ctf/index.html:113 msgctxt "page:showcase/ctf/index.html" msgid "Skip to content" msgstr "" @@ -10029,26 +10029,26 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/ctf/index.html:201 +#: website/public/showcase/ctf/index.html:203 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" msgstr "" -#: website/public/showcase/ctf/index.html:204 +#: website/public/showcase/ctf/index.html:206 msgctxt "page:showcase/ctf/index.html" msgid "Case study · DownUnderCTF 2023" msgstr "" #. {ph0}:
-#: website/public/showcase/ctf/index.html:205 +#: website/public/showcase/ctf/index.html:207 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "Find the flag in{ph0}a CTF binary." msgstr "" #. {ph0}: Correct! -#: website/public/showcase/ctf/index.html:206 +#: website/public/showcase/ctf/index.html:208 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10056,17 +10056,17 @@ msgid "" "input that makes the original program print {ph0}." msgstr "" -#: website/public/showcase/ctf/index.html:211 +#: website/public/showcase/ctf/index.html:213 msgctxt "page:showcase/ctf/index.html" msgid "masked squares flag checker · Easy · Linux x86-64" msgstr "" -#: website/public/showcase/ctf/index.html:214 +#: website/public/showcase/ctf/index.html:216 msgctxt "page:showcase/ctf/index.html" msgid "View the original challenge" msgstr "" -#: website/public/showcase/ctf/index.html:222 +#: website/public/showcase/ctf/index.html:224 msgctxt "page:showcase/ctf/index.html" msgid "From a binary to a checked answer" msgstr "" @@ -10077,7 +10077,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/ctf/index.html:224 +#: website/public/showcase/ctf/index.html:226 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10091,7 +10091,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/ctf/index.html:232 +#: website/public/showcase/ctf/index.html:234 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10105,7 +10105,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/ctf/index.html:240 +#: website/public/showcase/ctf/index.html:242 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10113,19 +10113,19 @@ msgid "" "solves the equations. REA captures the original program accepting the result.{ph5}" msgstr "" -#: website/public/showcase/ctf/index.html:249 +#: website/public/showcase/ctf/index.html:251 msgctxt "page:showcase/ctf/index.html" msgid "The challenge is by joseph, published in DownUnderCTF's official repository." msgstr "" -#: website/public/showcase/ctf/index.html:257 +#: website/public/showcase/ctf/index.html:259 msgctxt "page:showcase/ctf/index.html" msgid "In this case study" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:259 +#: website/public/showcase/ctf/index.html:261 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}Find the checking code{ph1}" @@ -10133,7 +10133,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:260 +#: website/public/showcase/ctf/index.html:262 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}Read one mask{ph1}" @@ -10141,7 +10141,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:261 +#: website/public/showcase/ctf/index.html:263 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}Assembly to readable code{ph1}" @@ -10149,7 +10149,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:264 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}Solve the equations{ph1}" @@ -10157,7 +10157,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:263 +#: website/public/showcase/ctf/index.html:265 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}Check the answer{ph1}" @@ -10165,20 +10165,20 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:264 +#: website/public/showcase/ctf/index.html:266 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}Try it yourself{ph1}" msgstr "" -#: website/public/showcase/ctf/index.html:269 +#: website/public/showcase/ctf/index.html:271 msgctxt "page:showcase/ctf/index.html" msgid "Find the checking code" msgstr "" #. {ph0}: Correct! #. {ph1}: Incorrect! -#: website/public/showcase/ctf/index.html:270 +#: website/public/showcase/ctf/index.html:272 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10194,15 +10194,15 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/showcase/ctf/index.html:277 +#: website/public/showcase/ctf/index.html:279 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/showcase/ctf/index.html:282 website/public/showcase/ctf/index.html:501 -#: website/public/showcase/ctf/index.html:525 website/public/showcase/ctf/index.html:595 -#: website/public/showcase/ctf/index.html:742 +#: website/public/showcase/ctf/index.html:284 website/public/showcase/ctf/index.html:503 +#: website/public/showcase/ctf/index.html:527 website/public/showcase/ctf/index.html:597 +#: website/public/showcase/ctf/index.html:744 msgctxt "page:showcase/ctf/index.html" msgid "Copy" msgstr "" @@ -10213,7 +10213,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/showcase/ctf/index.html:291 +#: website/public/showcase/ctf/index.html:293 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10221,48 +10221,48 @@ msgid "" "checks work, then verify the answer with the original program.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/showcase/ctf/index.html:300 +#: website/public/showcase/ctf/index.html:302 msgctxt "page:showcase/ctf/index.html" msgid "" "An example prompt, with the downloaded challenge available locally and a native " "analysis provider connected." msgstr "" -#: website/public/showcase/ctf/index.html:306 +#: website/public/showcase/ctf/index.html:308 msgctxt "page:showcase/ctf/index.html" msgid "Follow the input prompt to its function" msgstr "" -#: website/public/showcase/ctf/index.html:309 website/public/showcase/ctf/index.html:345 +#: website/public/showcase/ctf/index.html:311 website/public/showcase/ctf/index.html:347 msgctxt "page:showcase/ctf/index.html" msgid "Agent → REA" msgstr "" -#: website/public/showcase/ctf/index.html:325 +#: website/public/showcase/ctf/index.html:327 msgctxt "page:showcase/ctf/index.html" msgid "REA → agent · selected results" msgstr "" -#: website/public/showcase/ctf/index.html:335 +#: website/public/showcase/ctf/index.html:337 msgctxt "page:showcase/ctf/index.html" msgid "" "The reference gives the agent a place to investigate, even though the executable's " "original function names have been removed." msgstr "" -#: website/public/showcase/ctf/index.html:342 +#: website/public/showcase/ctf/index.html:344 msgctxt "page:showcase/ctf/index.html" msgid "Read the checker and its two helpers" msgstr "" -#: website/public/showcase/ctf/index.html:357 +#: website/public/showcase/ctf/index.html:359 msgctxt "page:showcase/ctf/index.html" msgid "REA → agent · selected instructions" msgstr "" #. {ph0}: 0x18 #. {ph1}: 0x270 -#: website/public/showcase/ctf/index.html:370 +#: website/public/showcase/ctf/index.html:372 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10271,19 +10271,19 @@ msgid "" "across {ph1} bytes give 26 masks." msgstr "" -#: website/public/showcase/ctf/index.html:378 +#: website/public/showcase/ctf/index.html:380 msgctxt "page:showcase/ctf/index.html" msgid "" "These are selected results from a fresh REA analysis. The local target path is " "shortened for display; addresses refer to REA's imported image." msgstr "" -#: website/public/showcase/ctf/index.html:386 +#: website/public/showcase/ctf/index.html:388 msgctxt "page:showcase/ctf/index.html" msgid "One check reveals one character" msgstr "" -#: website/public/showcase/ctf/index.html:387 +#: website/public/showcase/ctf/index.html:389 msgctxt "page:showcase/ctf/index.html" msgid "" "The checker arranges the input in a 6×6 grid. A mask chooses which cells contribute to" @@ -10293,23 +10293,23 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:407 +#: website/public/showcase/ctf/index.html:409 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." msgstr "" -#: website/public/showcase/ctf/index.html:414 +#: website/public/showcase/ctf/index.html:416 msgctxt "page:showcase/ctf/index.html" msgid "Read the mask and its target from the binary" msgstr "" -#: website/public/showcase/ctf/index.html:420 +#: website/public/showcase/ctf/index.html:422 msgctxt "page:showcase/ctf/index.html" msgid "Agent → REA · read_bytes" msgstr "" -#: website/public/showcase/ctf/index.html:427 +#: website/public/showcase/ctf/index.html:429 msgctxt "page:showcase/ctf/index.html" msgid "REA → agent · seventh entries" msgstr "" @@ -10318,7 +10318,7 @@ msgstr "" #. {ph1}: eb #. {ph2}: code[21] = 55 #. {ph3}: 7 -#: website/public/showcase/ctf/index.html:436 +#: website/public/showcase/ctf/index.html:438 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10327,12 +10327,12 @@ msgid "" "{ph2}, so that character is {ph3}." msgstr "" -#: website/public/showcase/ctf/index.html:445 +#: website/public/showcase/ctf/index.html:447 msgctxt "page:showcase/ctf/index.html" msgid "From instructions to a readable check" msgstr "" -#: website/public/showcase/ctf/index.html:446 +#: website/public/showcase/ctf/index.html:448 msgctxt "page:showcase/ctf/index.html" msgid "" "Select a step to connect the summing helper and its caller to the same rule in C." @@ -10340,7 +10340,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:456 +#: website/public/showcase/ctf/index.html:458 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}01{ph1} Start" @@ -10348,7 +10348,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:464 +#: website/public/showcase/ctf/index.html:466 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}02{ph1} Select" @@ -10356,7 +10356,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:472 +#: website/public/showcase/ctf/index.html:474 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}03{ph1} Add" @@ -10364,7 +10364,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:480 +#: website/public/showcase/ctf/index.html:482 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}04{ph1} Advance" @@ -10372,18 +10372,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:488 +#: website/public/showcase/ctf/index.html:490 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}05{ph1} Compare" msgstr "" -#: website/public/showcase/ctf/index.html:500 +#: website/public/showcase/ctf/index.html:502 msgctxt "page:showcase/ctf/index.html" msgid "REA · selected original instructions" msgstr "" -#: website/public/showcase/ctf/index.html:524 +#: website/public/showcase/ctf/index.html:526 msgctxt "page:showcase/ctf/index.html" msgid "Readable C · one-check summary" msgstr "" @@ -10391,7 +10391,7 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: ECX -#: website/public/showcase/ctf/index.html:553 +#: website/public/showcase/ctf/index.html:555 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." @@ -10399,7 +10399,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:557 +#: website/public/showcase/ctf/index.html:559 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10409,7 +10409,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:561 +#: website/public/showcase/ctf/index.html:563 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10419,7 +10419,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/ctf/index.html:565 +#: website/public/showcase/ctf/index.html:567 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10431,7 +10431,7 @@ msgstr "" #. {ph1}: #. {ph2}: EAX #. {ph3}: Incorrect! -#: website/public/showcase/ctf/index.html:570 +#: website/public/showcase/ctf/index.html:572 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10439,19 +10439,19 @@ msgid "" " mismatch jumps to {ph3}." msgstr "" -#: website/public/showcase/ctf/index.html:577 +#: website/public/showcase/ctf/index.html:579 msgctxt "page:showcase/ctf/index.html" msgid "" "The instructions come from the summing helper and its caller. The C is an explanatory " "summary with descriptive names and a flattened 36-cell loop." msgstr "" -#: website/public/showcase/ctf/index.html:585 +#: website/public/showcase/ctf/index.html:587 msgctxt "page:showcase/ctf/index.html" msgid "Solve the 26 equations" msgstr "" -#: website/public/showcase/ctf/index.html:586 +#: website/public/showcase/ctf/index.html:588 msgctxt "page:showcase/ctf/index.html" msgid "" "Most masks select several cells. For example, the first check adds 16 character codes " @@ -10459,13 +10459,13 @@ msgid "" "Python script can solve together." msgstr "" -#: website/public/showcase/ctf/index.html:594 +#: website/public/showcase/ctf/index.html:596 msgctxt "page:showcase/ctf/index.html" msgid "Python · solver excerpt" msgstr "" #. {ph0}: DUCTF{…} -#: website/public/showcase/ctf/index.html:622 +#: website/public/showcase/ctf/index.html:624 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10474,19 +10474,19 @@ msgid "" "braces. The complete download includes all 26 masks and targets." msgstr "" -#: website/public/showcase/ctf/index.html:628 +#: website/public/showcase/ctf/index.html:630 msgctxt "page:showcase/ctf/index.html" msgid "Download the complete solver" msgstr "" -#: website/public/showcase/ctf/index.html:634 +#: website/public/showcase/ctf/index.html:636 msgctxt "page:showcase/ctf/index.html" msgid "Check the answer with the original program" msgstr "" #. {ph0}: z #. {ph1}: y -#: website/public/showcase/ctf/index.html:635 +#: website/public/showcase/ctf/index.html:637 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10495,71 +10495,71 @@ msgid "" "of 1441, and the program rejects it." msgstr "" -#: website/public/showcase/ctf/index.html:645 +#: website/public/showcase/ctf/index.html:647 msgctxt "page:showcase/ctf/index.html" msgid "Input" msgstr "" -#: website/public/showcase/ctf/index.html:646 +#: website/public/showcase/ctf/index.html:648 msgctxt "page:showcase/ctf/index.html" msgid "Observed output" msgstr "" -#: website/public/showcase/ctf/index.html:647 +#: website/public/showcase/ctf/index.html:649 msgctxt "page:showcase/ctf/index.html" msgid "Exit code" msgstr "" -#: website/public/showcase/ctf/index.html:652 +#: website/public/showcase/ctf/index.html:654 msgctxt "page:showcase/ctf/index.html" msgid "Solver's flag" msgstr "" -#: website/public/showcase/ctf/index.html:657 +#: website/public/showcase/ctf/index.html:659 msgctxt "page:showcase/ctf/index.html" msgid "One character changed" msgstr "" -#: website/public/showcase/ctf/index.html:665 +#: website/public/showcase/ctf/index.html:667 msgctxt "page:showcase/ctf/index.html" msgid "Show the recovered flag and captured output" msgstr "" -#: website/public/showcase/ctf/index.html:668 +#: website/public/showcase/ctf/index.html:670 msgctxt "page:showcase/ctf/index.html" msgid "REA · original program output" msgstr "" -#: website/public/showcase/ctf/index.html:669 +#: website/public/showcase/ctf/index.html:671 msgctxt "page:showcase/ctf/index.html" msgid "Copy flag" msgstr "" -#: website/public/showcase/ctf/index.html:681 +#: website/public/showcase/ctf/index.html:683 msgctxt "page:showcase/ctf/index.html" msgid "" "The recovered value also matches the flag in the organizers' published challenge " "metadata, checked after solving the binary." msgstr "" -#: website/public/showcase/ctf/index.html:687 +#: website/public/showcase/ctf/index.html:689 msgctxt "page:showcase/ctf/index.html" msgid "Source, target identity and analysis details" msgstr "" -#: website/public/showcase/ctf/index.html:688 +#: website/public/showcase/ctf/index.html:690 msgctxt "page:showcase/ctf/index.html" msgid "" "Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 with Ghidra" " 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248 bytes." msgstr "" -#: website/public/showcase/ctf/index.html:695 +#: website/public/showcase/ctf/index.html:697 msgctxt "page:showcase/ctf/index.html" msgid "Original executable · SHA-256" msgstr "" -#: website/public/showcase/ctf/index.html:699 +#: website/public/showcase/ctf/index.html:701 msgctxt "page:showcase/ctf/index.html" msgid "" "The string references, functions and constants were inspected before reading the " @@ -10578,7 +10578,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/showcase/ctf/index.html:704 +#: website/public/showcase/ctf/index.html:706 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10586,35 +10586,35 @@ msgid "" "· {ph4}REA evidence notes{ph5}" msgstr "" -#: website/public/showcase/ctf/index.html:724 +#: website/public/showcase/ctf/index.html:726 msgctxt "page:showcase/ctf/index.html" msgid "Try it yourself" msgstr "" -#: website/public/showcase/ctf/index.html:725 +#: website/public/showcase/ctf/index.html:727 msgctxt "page:showcase/ctf/index.html" msgid "" "Download the original challenge and the solver into one folder. Use the prompt above " "to investigate with your agent, or run the included script." msgstr "" -#: website/public/showcase/ctf/index.html:731 +#: website/public/showcase/ctf/index.html:733 msgctxt "page:showcase/ctf/index.html" msgid "Download the original challenge" msgstr "" -#: website/public/showcase/ctf/index.html:735 +#: website/public/showcase/ctf/index.html:737 msgctxt "page:showcase/ctf/index.html" msgid "Download solver" msgstr "" -#: website/public/showcase/ctf/index.html:741 +#: website/public/showcase/ctf/index.html:743 msgctxt "page:showcase/ctf/index.html" msgid "Terminal · solve and run" msgstr "" #. {ph0}: z3-solver -#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/ctf/index.html:760 #, python-brace-format msgctxt "page:showcase/ctf/index.html" msgid "" @@ -10622,7 +10622,7 @@ msgid "" "Python and {ph0}. Running the original executable needs Linux x86-64." msgstr "" -#: website/public/showcase/ctf/index.html:763 +#: website/public/showcase/ctf/index.html:765 msgctxt "page:showcase/ctf/index.html" msgid "Set up REA with your coding agent" msgstr "" @@ -10639,27 +10639,27 @@ msgid "" "functions, extract the masks and compare a recovered flag with the original program." msgstr "" -#: website/public/showcase/ctf/index.html:256 +#: website/public/showcase/ctf/index.html:258 msgctxt "page:showcase/ctf/index.html" msgid "On this page" msgstr "" -#: website/public/showcase/ctf/index.html:267 +#: website/public/showcase/ctf/index.html:269 msgctxt "page:showcase/ctf/index.html" msgid "CTF flag-checker case study" msgstr "" -#: website/public/showcase/ctf/index.html:282 +#: website/public/showcase/ctf/index.html:284 msgctxt "page:showcase/ctf/index.html" msgid "Copy CTF example prompt" msgstr "" -#: website/public/showcase/ctf/index.html:393 +#: website/public/showcase/ctf/index.html:395 msgctxt "page:showcase/ctf/index.html" msgid "CTF mask equation; scroll horizontally on smaller screens" msgstr "" -#: website/public/showcase/ctf/index.html:399 +#: website/public/showcase/ctf/index.html:401 msgctxt "page:showcase/ctf/index.html" msgid "" "The seventh mask skips 21 cells, selects position 21, then skips 14. Only that cell " @@ -10667,42 +10667,42 @@ msgid "" "is 7." msgstr "" -#: website/public/showcase/ctf/index.html:451 +#: website/public/showcase/ctf/index.html:453 msgctxt "page:showcase/ctf/index.html" msgid "Follow the CTF check" msgstr "" -#: website/public/showcase/ctf/index.html:501 +#: website/public/showcase/ctf/index.html:503 msgctxt "page:showcase/ctf/index.html" msgid "Copy CTF assembly" msgstr "" -#: website/public/showcase/ctf/index.html:525 +#: website/public/showcase/ctf/index.html:527 msgctxt "page:showcase/ctf/index.html" msgid "Copy readable CTF check" msgstr "" -#: website/public/showcase/ctf/index.html:595 +#: website/public/showcase/ctf/index.html:597 msgctxt "page:showcase/ctf/index.html" msgid "Copy CTF solver excerpt" msgstr "" -#: website/public/showcase/ctf/index.html:669 +#: website/public/showcase/ctf/index.html:671 msgctxt "page:showcase/ctf/index.html" msgid "Copy recovered flag" msgstr "" -#: website/public/showcase/ctf/index.html:742 +#: website/public/showcase/ctf/index.html:744 msgctxt "page:showcase/ctf/index.html" msgid "Copy CTF solver commands" msgstr "" -#: website/public/showcase/ctf/index.html:786 +#: website/public/showcase/ctf/index.html:788 msgctxt "page:showcase/ctf/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/dx-ball/index.html:113 msgctxt "page:showcase/dx-ball/index.html" msgid "Skip to content" msgstr "" @@ -10711,39 +10711,39 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/dx-ball/index.html:201 +#: website/public/showcase/dx-ball/index.html:203 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" msgstr "" -#: website/public/showcase/dx-ball/index.html:204 +#: website/public/showcase/dx-ball/index.html:206 msgctxt "page:showcase/dx-ball/index.html" msgid "Case study · DX-Ball 1.07" msgstr "" #. {ph0}:
-#: website/public/showcase/dx-ball/index.html:205 +#: website/public/showcase/dx-ball/index.html:207 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "Rebuilding DX-Ball{ph0}from its executable." msgstr "" -#: website/public/showcase/dx-ball/index.html:206 +#: website/public/showcase/dx-ball/index.html:208 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The goal is a maintainable C version of the 1996 Windows game. REA helps the agent " "inspect the original, one function at a time." msgstr "" -#: website/public/showcase/dx-ball/index.html:210 +#: website/public/showcase/dx-ball/index.html:212 msgctxt "page:showcase/dx-ball/index.html" msgid "Windows i386 · C · REA" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:227 +#: website/public/showcase/dx-ball/index.html:229 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -10752,14 +10752,14 @@ msgid "" "figure{ph1}" msgstr "" -#: website/public/showcase/dx-ball/index.html:238 +#: website/public/showcase/dx-ball/index.html:240 msgctxt "page:showcase/dx-ball/index.html" msgid "In this case study" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:240 +#: website/public/showcase/dx-ball/index.html:242 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}The project{ph1}" @@ -10767,7 +10767,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:241 +#: website/public/showcase/dx-ball/index.html:243 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}Sound pan{ph1}" @@ -10775,7 +10775,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:242 +#: website/public/showcase/dx-ball/index.html:244 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}Checking the result{ph1}" @@ -10783,23 +10783,23 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:243 +#: website/public/showcase/dx-ball/index.html:245 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}Continue the work{ph1}" msgstr "" -#: website/public/showcase/dx-ball/index.html:251 +#: website/public/showcase/dx-ball/index.html:253 msgctxt "page:showcase/dx-ball/index.html" msgid "maintained C functions" msgstr "" -#: website/public/showcase/dx-ball/index.html:255 +#: website/public/showcase/dx-ball/index.html:257 msgctxt "page:showcase/dx-ball/index.html" msgid "comparisons with original code" msgstr "" -#: website/public/showcase/dx-ball/index.html:259 +#: website/public/showcase/dx-ball/index.html:261 msgctxt "page:showcase/dx-ball/index.html" msgid "functions with matching compiled bytes" msgstr "" @@ -10810,7 +10810,7 @@ msgstr "" #. {ph2}: #. {ph3}: -#: website/public/showcase/dx-ball/index.html:262 +#: website/public/showcase/dx-ball/index.html:264 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -10818,12 +10818,12 @@ msgid "" "coverage{ph3}" msgstr "" -#: website/public/showcase/dx-ball/index.html:274 +#: website/public/showcase/dx-ball/index.html:276 msgctxt "page:showcase/dx-ball/index.html" msgid "The project so far" msgstr "" -#: website/public/showcase/dx-ball/index.html:275 +#: website/public/showcase/dx-ball/index.html:277 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The recovered code covers board and resource handling, brick hits, animations, " @@ -10832,12 +10832,12 @@ msgid "" "power-up handling and Windows integration." msgstr "" -#: website/public/showcase/dx-ball/index.html:285 +#: website/public/showcase/dx-ball/index.html:287 msgctxt "page:showcase/dx-ball/index.html" msgid "Finding the sound-pan calculation" msgstr "" -#: website/public/showcase/dx-ball/index.html:286 +#: website/public/showcase/dx-ball/index.html:288 msgctxt "page:showcase/dx-ball/index.html" msgid "" "When a brick is hit, its horizontal position is passed to the sound code. The " @@ -10853,17 +10853,17 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/showcase/dx-ball/index.html:293 +#: website/public/showcase/dx-ball/index.html:295 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/showcase/dx-ball/index.html:297 -#: website/public/showcase/dx-ball/index.html:488 -#: website/public/showcase/dx-ball/index.html:509 -#: website/public/showcase/dx-ball/index.html:580 -#: website/public/showcase/dx-ball/index.html:734 +#: website/public/showcase/dx-ball/index.html:299 +#: website/public/showcase/dx-ball/index.html:490 +#: website/public/showcase/dx-ball/index.html:511 +#: website/public/showcase/dx-ball/index.html:582 +#: website/public/showcase/dx-ball/index.html:736 msgctxt "page:showcase/dx-ball/index.html" msgid "Copy" msgstr "" @@ -10874,7 +10874,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/showcase/dx-ball/index.html:306 +#: website/public/showcase/dx-ball/index.html:308 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -10882,14 +10882,14 @@ msgid "" "calculation and show the code.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/showcase/dx-ball/index.html:314 +#: website/public/showcase/dx-ball/index.html:316 msgctxt "page:showcase/dx-ball/index.html" msgid "" "An example prompt for your coding agent, with the local executable available. The " "investigation below shows the REA queries and evidence behind the answer." msgstr "" -#: website/public/showcase/dx-ball/index.html:319 +#: website/public/showcase/dx-ball/index.html:321 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The agent used REA to inspect the function, follow its brick-hit caller and read the " @@ -10900,7 +10900,7 @@ msgstr "" #. {ph0}: 0x406400 #. {ph1}: FUN_00406400(void) #. {ph2}: __ftol() -#: website/public/showcase/dx-ball/index.html:325 +#: website/public/showcase/dx-ball/index.html:327 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -10909,48 +10909,48 @@ msgid "" "discrepancy gave the agent a concrete reason to keep investigating." msgstr "" -#: website/public/showcase/dx-ball/index.html:333 +#: website/public/showcase/dx-ball/index.html:335 msgctxt "page:showcase/dx-ball/index.html" msgid "The first decompiler view" msgstr "" -#: website/public/showcase/dx-ball/index.html:336 +#: website/public/showcase/dx-ball/index.html:338 msgctxt "page:showcase/dx-ball/index.html" msgid "REA result · pseudocode excerpt" msgstr "" -#: website/public/showcase/dx-ball/index.html:346 +#: website/public/showcase/dx-ball/index.html:348 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The output shows a conversion call. Reading the instructions below reveals the input " "and the calculation feeding that call." msgstr "" -#: website/public/showcase/dx-ball/index.html:352 +#: website/public/showcase/dx-ball/index.html:354 msgctxt "page:showcase/dx-ball/index.html" msgid "Three questions answered through REA" msgstr "" -#: website/public/showcase/dx-ball/index.html:355 +#: website/public/showcase/dx-ball/index.html:357 msgctxt "page:showcase/dx-ball/index.html" msgid "Recover the missing input" msgstr "" #. {ph0}: analyze_function -#: website/public/showcase/dx-ball/index.html:359 -#: website/public/showcase/dx-ball/index.html:383 +#: website/public/showcase/dx-ball/index.html:361 +#: website/public/showcase/dx-ball/index.html:385 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "Agent → REA · {ph0}" msgstr "" -#: website/public/showcase/dx-ball/index.html:365 +#: website/public/showcase/dx-ball/index.html:367 msgctxt "page:showcase/dx-ball/index.html" msgid "REA → agent · instruction excerpt" msgstr "" #. {ph0}: [EBP+8] -#: website/public/showcase/dx-ball/index.html:372 +#: website/public/showcase/dx-ball/index.html:374 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -10958,19 +10958,19 @@ msgid "" "{ph0} exposes the integer input missing from the decompiler view." msgstr "" -#: website/public/showcase/dx-ball/index.html:379 +#: website/public/showcase/dx-ball/index.html:381 msgctxt "page:showcase/dx-ball/index.html" msgid "Follow the caller to understand the input" msgstr "" -#: website/public/showcase/dx-ball/index.html:389 +#: website/public/showcase/dx-ball/index.html:391 msgctxt "page:showcase/dx-ball/index.html" msgid "REA → agent · caller excerpt" msgstr "" #. {ph0}: tile_x #. {ph1}: 20 + 30 × tile_x -#: website/public/showcase/dx-ball/index.html:396 +#: website/public/showcase/dx-ball/index.html:398 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -10978,36 +10978,36 @@ msgid "" " by 30; adding 20 gives the brick's screen coordinate, {ph1}." msgstr "" -#: website/public/showcase/dx-ball/index.html:403 +#: website/public/showcase/dx-ball/index.html:405 msgctxt "page:showcase/dx-ball/index.html" msgid "Read the values behind the memory addresses" msgstr "" #. {ph0}: read_bytes -#: website/public/showcase/dx-ball/index.html:407 +#: website/public/showcase/dx-ball/index.html:409 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "Agent → REA · two {ph0} requests" msgstr "" -#: website/public/showcase/dx-ball/index.html:417 +#: website/public/showcase/dx-ball/index.html:419 msgctxt "page:showcase/dx-ball/index.html" msgid "REA byte results · decoded as doubles" msgstr "" -#: website/public/showcase/dx-ball/index.html:424 +#: website/public/showcase/dx-ball/index.html:426 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The returned bytes establish the two arithmetic constants and initial pan scale. The " "agent now has the values needed for the C expression." msgstr "" -#: website/public/showcase/dx-ball/index.html:432 +#: website/public/showcase/dx-ball/index.html:434 msgctxt "page:showcase/dx-ball/index.html" msgid "From REA's findings to C" msgstr "" -#: website/public/showcase/dx-ball/index.html:433 +#: website/public/showcase/dx-ball/index.html:435 msgctxt "page:showcase/dx-ball/index.html" msgid "" "Follow the five steps below. Each selection highlights the original instructions and " @@ -11016,7 +11016,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:443 +#: website/public/showcase/dx-ball/index.html:445 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}01{ph1} Input" @@ -11024,7 +11024,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:451 +#: website/public/showcase/dx-ball/index.html:453 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}02{ph1} Multiply" @@ -11032,7 +11032,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:459 +#: website/public/showcase/dx-ball/index.html:461 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}03{ph1} Subtract" @@ -11040,7 +11040,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:467 +#: website/public/showcase/dx-ball/index.html:469 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}04{ph1} Scale" @@ -11048,18 +11048,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:475 +#: website/public/showcase/dx-ball/index.html:477 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}05{ph1} Return" msgstr "" -#: website/public/showcase/dx-ball/index.html:487 +#: website/public/showcase/dx-ball/index.html:489 msgctxt "page:showcase/dx-ball/index.html" msgid "Original x86 · excerpt" msgstr "" -#: website/public/showcase/dx-ball/index.html:508 +#: website/public/showcase/dx-ball/index.html:510 msgctxt "page:showcase/dx-ball/index.html" msgid "Reconstructed C" msgstr "" @@ -11069,7 +11069,7 @@ msgstr "" #. {ph2}: [EBP+8] #. {ph3}: FILD #. {ph4}: x -#: website/public/showcase/dx-ball/index.html:535 +#: website/public/showcase/dx-ball/index.html:537 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -11084,7 +11084,7 @@ msgstr "" #. {ph3}: 0x420068 #. {ph4}: read_bytes #. {ph5}: 1.5625 -#: website/public/showcase/dx-ball/index.html:542 +#: website/public/showcase/dx-ball/index.html:544 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -11098,7 +11098,7 @@ msgstr "" #. {ph3}: 0x420070 #. {ph4}: 500.0 #. {ph5}: 320 -#: website/public/showcase/dx-ball/index.html:548 +#: website/public/showcase/dx-ball/index.html:550 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -11112,7 +11112,7 @@ msgstr "" #. {ph3}: 0x4210a0 #. {ph4}: dxball_pan_scale #. {ph5}: 1.0 -#: website/public/showcase/dx-ball/index.html:554 +#: website/public/showcase/dx-ball/index.html:556 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -11126,7 +11126,7 @@ msgstr "" #. {ph2}: 0x406430 #. {ph3}: __ftol #. {ph4}: DxBallInt -#: website/public/showcase/dx-ball/index.html:561 +#: website/public/showcase/dx-ball/index.html:563 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -11135,30 +11135,30 @@ msgid "" "returned value." msgstr "" -#: website/public/showcase/dx-ball/index.html:570 +#: website/public/showcase/dx-ball/index.html:572 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The assembly excerpt selects the input, arithmetic and return instructions. The full " "listing below also includes the intervening stores and function setup and cleanup." msgstr "" -#: website/public/showcase/dx-ball/index.html:576 +#: website/public/showcase/dx-ball/index.html:578 msgctxt "page:showcase/dx-ball/index.html" msgid "Full assembly and supporting evidence" msgstr "" -#: website/public/showcase/dx-ball/index.html:579 +#: website/public/showcase/dx-ball/index.html:581 msgctxt "page:showcase/dx-ball/index.html" msgid "REA result · 0x406400–0x40643e" msgstr "" -#: website/public/showcase/dx-ball/index.html:613 +#: website/public/showcase/dx-ball/index.html:615 msgctxt "page:showcase/dx-ball/index.html" msgid "What the caller supplies" msgstr "" #. {ph0}: 0x411f40 -#: website/public/showcase/dx-ball/index.html:614 +#: website/public/showcase/dx-ball/index.html:616 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -11166,54 +11166,54 @@ msgid "" " it before the call:" msgstr "" -#: website/public/showcase/dx-ball/index.html:628 +#: website/public/showcase/dx-ball/index.html:630 msgctxt "page:showcase/dx-ball/index.html" msgid "What the data reads establish" msgstr "" -#: website/public/showcase/dx-ball/index.html:631 +#: website/public/showcase/dx-ball/index.html:633 msgctxt "page:showcase/dx-ball/index.html" msgid "REA byte reads, decoded as little-endian doubles" msgstr "" -#: website/public/showcase/dx-ball/index.html:636 +#: website/public/showcase/dx-ball/index.html:638 msgctxt "page:showcase/dx-ball/index.html" msgid "Address" msgstr "" -#: website/public/showcase/dx-ball/index.html:637 +#: website/public/showcase/dx-ball/index.html:639 msgctxt "page:showcase/dx-ball/index.html" msgid "Value" msgstr "" -#: website/public/showcase/dx-ball/index.html:638 +#: website/public/showcase/dx-ball/index.html:640 msgctxt "page:showcase/dx-ball/index.html" msgid "Used for" msgstr "" -#: website/public/showcase/dx-ball/index.html:645 +#: website/public/showcase/dx-ball/index.html:647 msgctxt "page:showcase/dx-ball/index.html" msgid "First multiplication" msgstr "" -#: website/public/showcase/dx-ball/index.html:650 +#: website/public/showcase/dx-ball/index.html:652 msgctxt "page:showcase/dx-ball/index.html" msgid "Subtraction" msgstr "" #. {ph0}: 1.0 -#: website/public/showcase/dx-ball/index.html:654 +#: website/public/showcase/dx-ball/index.html:656 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0} initially" msgstr "" -#: website/public/showcase/dx-ball/index.html:655 +#: website/public/showcase/dx-ball/index.html:657 msgctxt "page:showcase/dx-ball/index.html" msgid "Stored pan scale" msgstr "" -#: website/public/showcase/dx-ball/index.html:660 +#: website/public/showcase/dx-ball/index.html:662 msgctxt "page:showcase/dx-ball/index.html" msgid "" "Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " @@ -11226,31 +11226,31 @@ msgstr "" #. {ph2}: #. {ph3}: -#: website/public/showcase/dx-ball/index.html:665 +#: website/public/showcase/dx-ball/index.html:667 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" "{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence references{ph3}" msgstr "" -#: website/public/showcase/dx-ball/index.html:679 +#: website/public/showcase/dx-ball/index.html:681 msgctxt "page:showcase/dx-ball/index.html" msgid "Checking the recovered function" msgstr "" -#: website/public/showcase/dx-ball/index.html:680 +#: website/public/showcase/dx-ball/index.html:682 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The recovered function passes two checks: its return values match the original, and " "its compiled bytes match the executable." msgstr "" -#: website/public/showcase/dx-ball/index.html:686 +#: website/public/showcase/dx-ball/index.html:688 msgctxt "page:showcase/dx-ball/index.html" msgid "3,205 behavior cases" msgstr "" -#: website/public/showcase/dx-ball/index.html:687 +#: website/public/showcase/dx-ball/index.html:689 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The tests execute the original x86 function and compare its return value with the " @@ -11258,12 +11258,12 @@ msgid "" "0.5, 1, 20 and −1." msgstr "" -#: website/public/showcase/dx-ball/index.html:695 +#: website/public/showcase/dx-ball/index.html:697 msgctxt "page:showcase/dx-ball/index.html" msgid "63 matching bytes" msgstr "" -#: website/public/showcase/dx-ball/index.html:696 +#: website/public/showcase/dx-ball/index.html:698 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The C function is compiled with the pinned VC4.0 toolchain. Compiler replay matches " @@ -11271,7 +11271,7 @@ msgid "" "referenced constants." msgstr "" -#: website/public/showcase/dx-ball/index.html:704 +#: website/public/showcase/dx-ball/index.html:706 msgctxt "page:showcase/dx-ball/index.html" msgid "" "At a scale of 1, the recovered calculation returns −500 at the left edge, 0 at the " @@ -11282,18 +11282,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/dx-ball/index.html:710 +#: website/public/showcase/dx-ball/index.html:712 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}Read the compiler replay details{ph1}" msgstr "" -#: website/public/showcase/dx-ball/index.html:719 +#: website/public/showcase/dx-ball/index.html:721 msgctxt "page:showcase/dx-ball/index.html" msgid "Continue the investigation" msgstr "" -#: website/public/showcase/dx-ball/index.html:720 +#: website/public/showcase/dx-ball/index.html:722 msgctxt "page:showcase/dx-ball/index.html" msgid "" "The same approach is being used for particle updates, explosion queues and bonus " @@ -11301,14 +11301,14 @@ msgid "" " compare the implementation with the original." msgstr "" -#: website/public/showcase/dx-ball/index.html:726 +#: website/public/showcase/dx-ball/index.html:728 msgctxt "page:showcase/dx-ball/index.html" msgid "" "To inspect the sound-pan function yourself, follow the DX-Ball project's setup " "instructions and supply its matching original target. Then run:" msgstr "" -#: website/public/showcase/dx-ball/index.html:733 +#: website/public/showcase/dx-ball/index.html:735 msgctxt "page:showcase/dx-ball/index.html" msgid "In the DX-Ball checkout" msgstr "" @@ -11317,7 +11317,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/dx-ball/index.html:747 +#: website/public/showcase/dx-ball/index.html:749 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local setup.{ph3}" @@ -11327,7 +11327,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/dx-ball/index.html:752 +#: website/public/showcase/dx-ball/index.html:754 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -11340,7 +11340,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/dx-ball/index.html:759 +#: website/public/showcase/dx-ball/index.html:761 #, python-brace-format msgctxt "page:showcase/dx-ball/index.html" msgid "" @@ -11348,7 +11348,7 @@ msgid "" " and pixel writes.{ph3}" msgstr "" -#: website/public/showcase/dx-ball/index.html:770 +#: website/public/showcase/dx-ball/index.html:772 msgctxt "page:showcase/dx-ball/index.html" msgid "Start with your own target" msgstr "" @@ -11365,12 +11365,12 @@ msgid "" "original-x86 tests and matching compiled function bytes." msgstr "" -#: website/public/showcase/dx-ball/index.html:213 +#: website/public/showcase/dx-ball/index.html:215 msgctxt "page:showcase/dx-ball/index.html" msgid "DX-Ball sound-pan investigation; scroll horizontally on smaller screens" msgstr "" -#: website/public/showcase/dx-ball/index.html:219 +#: website/public/showcase/dx-ball/index.html:221 msgctxt "page:showcase/dx-ball/index.html" msgid "" "DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller supplies 20 " @@ -11379,170 +11379,170 @@ msgid "" " original x86 in 3,205 cases and by VC4.0 compiler replay matching 63 bytes." msgstr "" -#: website/public/showcase/dx-ball/index.html:237 +#: website/public/showcase/dx-ball/index.html:239 msgctxt "page:showcase/dx-ball/index.html" msgid "On this page" msgstr "" -#: website/public/showcase/dx-ball/index.html:246 +#: website/public/showcase/dx-ball/index.html:248 msgctxt "page:showcase/dx-ball/index.html" msgid "DX-Ball reconstruction case study" msgstr "" -#: website/public/showcase/dx-ball/index.html:297 +#: website/public/showcase/dx-ball/index.html:299 msgctxt "page:showcase/dx-ball/index.html" msgid "Copy example prompt" msgstr "" -#: website/public/showcase/dx-ball/index.html:438 +#: website/public/showcase/dx-ball/index.html:440 msgctxt "page:showcase/dx-ball/index.html" msgid "Follow the sound-pan calculation" msgstr "" -#: website/public/showcase/dx-ball/index.html:488 +#: website/public/showcase/dx-ball/index.html:490 msgctxt "page:showcase/dx-ball/index.html" msgid "Copy original assembly excerpt" msgstr "" -#: website/public/showcase/dx-ball/index.html:509 +#: website/public/showcase/dx-ball/index.html:511 msgctxt "page:showcase/dx-ball/index.html" msgid "Copy sound-pan function" msgstr "" -#: website/public/showcase/dx-ball/index.html:580 +#: website/public/showcase/dx-ball/index.html:582 msgctxt "page:showcase/dx-ball/index.html" msgid "Copy complete sound-pan assembly" msgstr "" -#: website/public/showcase/dx-ball/index.html:734 +#: website/public/showcase/dx-ball/index.html:736 msgctxt "page:showcase/dx-ball/index.html" msgid "Copy DX-Ball analysis command" msgstr "" -#: website/public/showcase/dx-ball/index.html:794 +#: website/public/showcase/dx-ball/index.html:796 msgctxt "page:showcase/dx-ball/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/index.html:111 +#: website/public/showcase/index.html:113 msgctxt "page:showcase/index.html" msgid "Skip to content" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/index.html:201 +#: website/public/showcase/index.html:203 #, python-brace-format msgctxt "page:showcase/index.html" msgid "{ph0}Home{ph1} / Showcases" msgstr "" -#: website/public/showcase/index.html:202 +#: website/public/showcase/index.html:204 msgctxt "page:showcase/index.html" msgid "REA case studies." msgstr "" -#: website/public/showcase/index.html:203 +#: website/public/showcase/index.html:205 msgctxt "page:showcase/index.html" msgid "" "Android, games, Electron and a CTF challenge, with code, figures and checked results." msgstr "" -#: website/public/showcase/index.html:210 +#: website/public/showcase/index.html:212 msgctxt "page:showcase/index.html" msgid "Android · APK analysis" msgstr "" -#: website/public/showcase/index.html:212 +#: website/public/showcase/index.html:214 msgctxt "page:showcase/index.html" msgid "How an authenticator generates a login code" msgstr "" -#: website/public/showcase/index.html:213 +#: website/public/showcase/index.html:215 msgctxt "page:showcase/index.html" msgid "" "Find Aegis's six-digit code calculation in its released APK. Trace the generating " "methods with REA, then move a demo clock to see why the code changes every 30 seconds." msgstr "" -#: website/public/showcase/index.html:219 +#: website/public/showcase/index.html:221 msgctxt "page:showcase/index.html" msgid "APK" msgstr "" -#: website/public/showcase/index.html:220 +#: website/public/showcase/index.html:222 msgctxt "page:showcase/index.html" msgid "Generating code" msgstr "" -#: website/public/showcase/index.html:221 +#: website/public/showcase/index.html:223 msgctxt "page:showcase/index.html" msgid "Recovered rule" msgstr "" -#: website/public/showcase/index.html:222 +#: website/public/showcase/index.html:224 msgctxt "page:showcase/index.html" msgid "Adjustable clock" msgstr "" -#: website/public/showcase/index.html:224 +#: website/public/showcase/index.html:226 msgctxt "page:showcase/index.html" msgid "Read the Android case study" msgstr "" -#: website/public/showcase/index.html:228 +#: website/public/showcase/index.html:230 msgctxt "page:showcase/index.html" msgid "CTF · Native analysis" msgstr "" -#: website/public/showcase/index.html:230 +#: website/public/showcase/index.html:232 msgctxt "page:showcase/index.html" msgid "Solve a CTF flag checker" msgstr "" -#: website/public/showcase/index.html:231 +#: website/public/showcase/index.html:233 msgctxt "page:showcase/index.html" msgid "" "Inspect an easy DownUnderCTF challenge with REA. Find its checking functions, turn " "masks and sums into equations, then verify the solved flag with the original program." msgstr "" -#: website/public/showcase/index.html:237 +#: website/public/showcase/index.html:239 msgctxt "page:showcase/index.html" msgid "Binary" msgstr "" -#: website/public/showcase/index.html:238 +#: website/public/showcase/index.html:240 msgctxt "page:showcase/index.html" msgid "Checking code" msgstr "" -#: website/public/showcase/index.html:239 +#: website/public/showcase/index.html:241 msgctxt "page:showcase/index.html" msgid "Equations" msgstr "" -#: website/public/showcase/index.html:240 +#: website/public/showcase/index.html:242 msgctxt "page:showcase/index.html" msgid "Correct!" msgstr "" -#: website/public/showcase/index.html:242 +#: website/public/showcase/index.html:244 msgctxt "page:showcase/index.html" msgid "Read the CTF case study" msgstr "" -#: website/public/showcase/index.html:246 +#: website/public/showcase/index.html:248 msgctxt "page:showcase/index.html" msgid "Native · Reconstruction" msgstr "" -#: website/public/showcase/index.html:248 +#: website/public/showcase/index.html:250 msgctxt "page:showcase/index.html" msgid "DX-Ball's sound-pan calculation" msgstr "" -#: website/public/showcase/index.html:249 +#: website/public/showcase/index.html:251 msgctxt "page:showcase/index.html" msgid "" "Recover a sound-pan calculation from a 1996 Windows game. REA's instructions, caller " @@ -11550,42 +11550,42 @@ msgid "" "original behavior and all 63 compiled bytes." msgstr "" -#: website/public/showcase/index.html:256 +#: website/public/showcase/index.html:258 msgctxt "page:showcase/index.html" msgid "Executable" msgstr "" -#: website/public/showcase/index.html:257 +#: website/public/showcase/index.html:259 msgctxt "page:showcase/index.html" msgid "REA findings" msgstr "" -#: website/public/showcase/index.html:258 +#: website/public/showcase/index.html:260 msgctxt "page:showcase/index.html" msgid "Recovered C" msgstr "" -#: website/public/showcase/index.html:259 +#: website/public/showcase/index.html:261 msgctxt "page:showcase/index.html" msgid "Validation" msgstr "" -#: website/public/showcase/index.html:261 +#: website/public/showcase/index.html:263 msgctxt "page:showcase/index.html" msgid "Read the DX-Ball case study" msgstr "" -#: website/public/showcase/index.html:265 +#: website/public/showcase/index.html:267 msgctxt "page:showcase/index.html" msgid "Electron · Feature tracing" msgstr "" -#: website/public/showcase/index.html:267 +#: website/public/showcase/index.html:269 msgctxt "page:showcase/index.html" msgid "How Notion copies text and HTML" msgstr "" -#: website/public/showcase/index.html:268 +#: website/public/showcase/index.html:270 msgctxt "page:showcase/index.html" msgid "" "Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC wrappers " @@ -11593,42 +11593,42 @@ msgid "" "connected to a copy." msgstr "" -#: website/public/showcase/index.html:274 +#: website/public/showcase/index.html:276 msgctxt "page:showcase/index.html" msgid "Packaged app" msgstr "" -#: website/public/showcase/index.html:275 +#: website/public/showcase/index.html:277 msgctxt "page:showcase/index.html" msgid "Exposed API" msgstr "" -#: website/public/showcase/index.html:276 +#: website/public/showcase/index.html:278 msgctxt "page:showcase/index.html" msgid "IPC wrappers" msgstr "" -#: website/public/showcase/index.html:277 +#: website/public/showcase/index.html:279 msgctxt "page:showcase/index.html" msgid "Clipboard" msgstr "" -#: website/public/showcase/index.html:279 +#: website/public/showcase/index.html:281 msgctxt "page:showcase/index.html" msgid "Read the Notion case study" msgstr "" -#: website/public/showcase/index.html:283 +#: website/public/showcase/index.html:285 msgctxt "page:showcase/index.html" msgid "PC-98 DOS · Reconstruction" msgstr "" -#: website/public/showcase/index.html:285 +#: website/public/showcase/index.html:287 msgctxt "page:showcase/index.html" msgid "How TH04 aims a ring of bullets" msgstr "" -#: website/public/showcase/index.html:286 +#: website/public/showcase/index.html:288 msgctxt "page:showcase/index.html" msgid "" "Inspect the original 16-bit angle helper with REA. Match its multiply, divide and " @@ -11636,42 +11636,42 @@ msgid "" "player." msgstr "" -#: website/public/showcase/index.html:292 +#: website/public/showcase/index.html:294 msgctxt "page:showcase/index.html" msgid "Original DOS code" msgstr "" -#: website/public/showcase/index.html:293 +#: website/public/showcase/index.html:295 msgctxt "page:showcase/index.html" msgid "REA instructions" msgstr "" -#: website/public/showcase/index.html:294 +#: website/public/showcase/index.html:296 msgctxt "page:showcase/index.html" msgid "Angle calculation" msgstr "" -#: website/public/showcase/index.html:295 +#: website/public/showcase/index.html:297 msgctxt "page:showcase/index.html" msgid "Bullet ring" msgstr "" -#: website/public/showcase/index.html:297 +#: website/public/showcase/index.html:299 msgctxt "page:showcase/index.html" msgid "Read the TH04 case study" msgstr "" -#: website/public/showcase/index.html:301 +#: website/public/showcase/index.html:303 msgctxt "page:showcase/index.html" msgid "RL environments" msgstr "" -#: website/public/showcase/index.html:303 +#: website/public/showcase/index.html:305 msgctxt "page:showcase/index.html" msgid "Build RL environments with REA" msgstr "" -#: website/public/showcase/index.html:304 +#: website/public/showcase/index.html:306 msgctxt "page:showcase/index.html" msgid "" "Record a web app session, turn its API into tools, and export an environment an AI " @@ -11683,25 +11683,25 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/index.html:309 +#: website/public/showcase/index.html:311 #, python-brace-format msgctxt "page:showcase/index.html" msgid "{ph0}Read the guide{ph1} · {ph2}Watch the video{ph3}" msgstr "" -#: website/public/showcase/index.html:322 +#: website/public/showcase/index.html:324 msgctxt "page:showcase/index.html" msgid "Step-by-step guides" msgstr "" -#: website/public/showcase/index.html:323 +#: website/public/showcase/index.html:325 msgctxt "page:showcase/index.html" msgid "" "The guides walk through a native calculation, an Electron export and a browser " "request. Each starts with a prompt and a concrete target." msgstr "" -#: website/public/showcase/index.html:327 +#: website/public/showcase/index.html:329 msgctxt "page:showcase/index.html" msgid "Read the guides" msgstr "" @@ -11718,12 +11718,12 @@ msgid "" "DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." msgstr "" -#: website/public/showcase/index.html:346 +#: website/public/showcase/index.html:348 msgctxt "page:showcase/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/notion/index.html:113 msgctxt "page:showcase/notion/index.html" msgid "Skip to content" msgstr "" @@ -11732,37 +11732,37 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/notion/index.html:201 +#: website/public/showcase/notion/index.html:203 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" msgstr "" -#: website/public/showcase/notion/index.html:204 +#: website/public/showcase/notion/index.html:206 msgctxt "page:showcase/notion/index.html" msgid "Case study · Electron" msgstr "" #. {ph0}:
-#: website/public/showcase/notion/index.html:205 +#: website/public/showcase/notion/index.html:207 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "How Notion copies{ph0}text and HTML." msgstr "" -#: website/public/showcase/notion/index.html:206 +#: website/public/showcase/notion/index.html:208 msgctxt "page:showcase/notion/index.html" msgid "" "Trace a clipboard call from Notion's page API, through the preload and main process, " "to Electron's clipboard writer." msgstr "" -#: website/public/showcase/notion/index.html:210 +#: website/public/showcase/notion/index.html:212 msgctxt "page:showcase/notion/index.html" msgid "Notion Desktop 7.6.1 · JavaScript · REA" msgstr "" -#: website/public/showcase/notion/index.html:214 +#: website/public/showcase/notion/index.html:216 msgctxt "page:showcase/notion/index.html" msgid "The bridge inside Notion's desktop package" msgstr "" @@ -11774,7 +11774,7 @@ msgstr "" #. {ph4}: #. {ph5}: #. {ph6}: -#: website/public/showcase/notion/index.html:216 +#: website/public/showcase/notion/index.html:218 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -11789,7 +11789,7 @@ msgstr "" #. {ph4}: #. {ph5}: #. {ph6}: -#: website/public/showcase/notion/index.html:223 +#: website/public/showcase/notion/index.html:225 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -11804,7 +11804,7 @@ msgstr "" #. {ph4}: #. {ph5}: #. {ph6}: -#: website/public/showcase/notion/index.html:230 +#: website/public/showcase/notion/index.html:232 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -11819,7 +11819,7 @@ msgstr "" #. {ph4}: #. {ph5}: #. {ph6}: -#: website/public/showcase/notion/index.html:237 +#: website/public/showcase/notion/index.html:239 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -11828,27 +11828,27 @@ msgid "" msgstr "" #. {ph0}: notion:clipboard:write -#: website/public/showcase/notion/index.html:245 +#: website/public/showcase/notion/index.html:247 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "One channel joins the two sides: {ph0}" msgstr "" -#: website/public/showcase/notion/index.html:249 +#: website/public/showcase/notion/index.html:251 msgctxt "page:showcase/notion/index.html" msgid "" "The packaged code uses the same channel in the preload and main process. Resolving the" " wrappers reveals the Electron calls behind those names." msgstr "" -#: website/public/showcase/notion/index.html:258 +#: website/public/showcase/notion/index.html:260 msgctxt "page:showcase/notion/index.html" msgid "In this case study" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/notion/index.html:260 +#: website/public/showcase/notion/index.html:262 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "{ph0}Follow the clipboard bridge{ph1}" @@ -11856,7 +11856,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/notion/index.html:261 +#: website/public/showcase/notion/index.html:263 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "{ph0}Keeping a block's structure{ph1}" @@ -11864,19 +11864,19 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/notion/index.html:262 +#: website/public/showcase/notion/index.html:264 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "{ph0}More examples and sources{ph1}" msgstr "" -#: website/public/showcase/notion/index.html:267 +#: website/public/showcase/notion/index.html:269 msgctxt "page:showcase/notion/index.html" msgid "Where does the copy operation go?" msgstr "" #. {ph0}: clipboard.write -#: website/public/showcase/notion/index.html:268 +#: website/public/showcase/notion/index.html:270 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -11892,17 +11892,17 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/showcase/notion/index.html:275 +#: website/public/showcase/notion/index.html:277 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/showcase/notion/index.html:279 -#: website/public/showcase/notion/index.html:352 -#: website/public/showcase/notion/index.html:381 -#: website/public/showcase/notion/index.html:412 -#: website/public/showcase/notion/index.html:440 +#: website/public/showcase/notion/index.html:281 +#: website/public/showcase/notion/index.html:354 +#: website/public/showcase/notion/index.html:383 +#: website/public/showcase/notion/index.html:414 +#: website/public/showcase/notion/index.html:442 msgctxt "page:showcase/notion/index.html" msgid "Copy" msgstr "" @@ -11913,7 +11913,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/showcase/notion/index.html:288 +#: website/public/showcase/notion/index.html:290 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -11921,19 +11921,19 @@ msgid "" "clipboard. Show the code at each step.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/showcase/notion/index.html:296 +#: website/public/showcase/notion/index.html:298 msgctxt "page:showcase/notion/index.html" msgid "" "An example prompt with Notion's local application package available to your coding " "agent." msgstr "" -#: website/public/showcase/notion/index.html:301 +#: website/public/showcase/notion/index.html:303 msgctxt "page:showcase/notion/index.html" msgid "REA finds where to start reading" msgstr "" -#: website/public/showcase/notion/index.html:302 +#: website/public/showcase/notion/index.html:304 msgctxt "page:showcase/notion/index.html" msgid "" "Analyzing the tab preload with REA locates the API exposed to the page and the call " @@ -11941,23 +11941,23 @@ msgid "" "bundle:" msgstr "" -#: website/public/showcase/notion/index.html:308 +#: website/public/showcase/notion/index.html:310 msgctxt "page:showcase/notion/index.html" msgid "REA findings → two places to open" msgstr "" -#: website/public/showcase/notion/index.html:311 +#: website/public/showcase/notion/index.html:313 msgctxt "page:showcase/notion/index.html" msgid "Exposed page API" msgstr "" -#: website/public/showcase/notion/index.html:317 +#: website/public/showcase/notion/index.html:319 msgctxt "page:showcase/notion/index.html" msgid "Renderer IPC call" msgstr "" #. {ph0}: analyze_javascript_application -#: website/public/showcase/notion/index.html:323 +#: website/public/showcase/notion/index.html:325 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -11967,7 +11967,7 @@ msgstr "" #. {ph0}: invokerInMain #. {ph1}: notion:clipboard:write -#: website/public/showcase/notion/index.html:330 +#: website/public/showcase/notion/index.html:332 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -11976,32 +11976,32 @@ msgid "" " to look for in the main bundle. The four excerpts below show the route it connects." msgstr "" -#: website/public/showcase/notion/index.html:339 +#: website/public/showcase/notion/index.html:341 msgctxt "page:showcase/notion/index.html" msgid "Four short pieces of code" msgstr "" -#: website/public/showcase/notion/index.html:340 +#: website/public/showcase/notion/index.html:342 msgctxt "page:showcase/notion/index.html" msgid "" "Simplified from the packaged JavaScript, with readable variable names. Unrelated " "members are omitted." msgstr "" -#: website/public/showcase/notion/index.html:346 +#: website/public/showcase/notion/index.html:348 msgctxt "page:showcase/notion/index.html" msgid "Start at the API exposed to the page" msgstr "" #. {ph0}: preload.js -#: website/public/showcase/notion/index.html:349 +#: website/public/showcase/notion/index.html:351 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "tab_browser_view/{ph0} · API member" msgstr "" #. {ph0}: invokerInMain -#: website/public/showcase/notion/index.html:368 +#: website/public/showcase/notion/index.html:370 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12009,20 +12009,20 @@ msgid "" "request leaves the page's process." msgstr "" -#: website/public/showcase/notion/index.html:375 +#: website/public/showcase/notion/index.html:377 msgctxt "page:showcase/notion/index.html" msgid "Resolve the preload's wrapper" msgstr "" #. {ph0}: preload.js -#: website/public/showcase/notion/index.html:378 +#: website/public/showcase/notion/index.html:380 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "tab_browser_view/{ph0} · IPC helper" msgstr "" #. {ph0}: notion:clipboard:write -#: website/public/showcase/notion/index.html:398 +#: website/public/showcase/notion/index.html:400 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12030,13 +12030,13 @@ msgid "" "IPC. We can now look for {ph0} on the main-process side." msgstr "" -#: website/public/showcase/notion/index.html:406 +#: website/public/showcase/notion/index.html:408 msgctxt "page:showcase/notion/index.html" msgid "Check how the receiver is registered" msgstr "" #. {ph0}: index.js -#: website/public/showcase/notion/index.html:409 +#: website/public/showcase/notion/index.html:411 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "main/{ph0} · handler helper" @@ -12044,7 +12044,7 @@ msgstr "" #. {ph0}: addListener #. {ph1}: ipcMain.handle -#: website/public/showcase/notion/index.html:427 +#: website/public/showcase/notion/index.html:429 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12052,19 +12052,19 @@ msgid "" "for that channel." msgstr "" -#: website/public/showcase/notion/index.html:434 +#: website/public/showcase/notion/index.html:436 msgctxt "page:showcase/notion/index.html" msgid "Find the write and its sender check" msgstr "" #. {ph0}: index.js -#: website/public/showcase/notion/index.html:437 +#: website/public/showcase/notion/index.html:439 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "main/{ph0} · clipboard receiver" msgstr "" -#: website/public/showcase/notion/index.html:457 +#: website/public/showcase/notion/index.html:459 msgctxt "page:showcase/notion/index.html" msgid "" "This is the destination. After checking the sender, the handler passes the supplied " @@ -12072,13 +12072,13 @@ msgid "" "the exposed method to this call." msgstr "" -#: website/public/showcase/notion/index.html:468 +#: website/public/showcase/notion/index.html:470 msgctxt "page:showcase/notion/index.html" msgid "How does a copied block keep its structure?" msgstr "" #. {ph0}: electronApi.clipboard.write -#: website/public/showcase/notion/index.html:469 +#: website/public/showcase/notion/index.html:471 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12086,100 +12086,100 @@ msgid "" " and puts an ID in the copied HTML to connect them." msgstr "" -#: website/public/showcase/notion/index.html:475 +#: website/public/showcase/notion/index.html:477 msgctxt "page:showcase/notion/index.html" msgid "HTML links to saved block data" msgstr "" -#: website/public/showcase/notion/index.html:479 +#: website/public/showcase/notion/index.html:481 msgctxt "page:showcase/notion/index.html" msgid "Sent to the system clipboard" msgstr "" -#: website/public/showcase/notion/index.html:487 +#: website/public/showcase/notion/index.html:489 msgctxt "page:showcase/notion/index.html" msgid "Saved locally by Notion" msgstr "" -#: website/public/showcase/notion/index.html:499 +#: website/public/showcase/notion/index.html:501 msgctxt "page:showcase/notion/index.html" msgid "Read the HTML ID" msgstr "" -#: website/public/showcase/notion/index.html:500 +#: website/public/showcase/notion/index.html:502 msgctxt "page:showcase/notion/index.html" msgid "Find the same local ID" msgstr "" -#: website/public/showcase/notion/index.html:501 +#: website/public/showcase/notion/index.html:503 msgctxt "page:showcase/notion/index.html" msgid "Restore Notion block data" msgstr "" -#: website/public/showcase/notion/index.html:503 +#: website/public/showcase/notion/index.html:505 msgctxt "page:showcase/notion/index.html" msgid "" "Illustrative text and ID. The recorded module test restores the block data when IDs " "match; a stale entry returns only text and HTML." msgstr "" -#: website/public/showcase/notion/index.html:509 +#: website/public/showcase/notion/index.html:511 msgctxt "page:showcase/notion/index.html" msgid "" "On paste, Notion looks for the HTML ID and checks it against the saved copy. Matching " "IDs restore the block data." msgstr "" -#: website/public/showcase/notion/index.html:513 +#: website/public/showcase/notion/index.html:515 msgctxt "page:showcase/notion/index.html" msgid "Clipboard format recorded from web assets cached on July 13, 2026." msgstr "" -#: website/public/showcase/notion/index.html:519 +#: website/public/showcase/notion/index.html:521 msgctxt "page:showcase/notion/index.html" msgid "More examples and sources" msgstr "" -#: website/public/showcase/notion/index.html:521 +#: website/public/showcase/notion/index.html:523 msgctxt "page:showcase/notion/index.html" msgid "Another example: Markdown tables" msgstr "" -#: website/public/showcase/notion/index.html:522 +#: website/public/showcase/notion/index.html:524 msgctxt "page:showcase/notion/index.html" msgid "" "Notion parses Markdown into block data. This example shows how a table becomes header " "and data rows." msgstr "" -#: website/public/showcase/notion/index.html:527 +#: website/public/showcase/notion/index.html:529 msgctxt "page:showcase/notion/index.html" msgid "A table through Notion's Markdown parser" msgstr "" -#: website/public/showcase/notion/index.html:532 +#: website/public/showcase/notion/index.html:534 msgctxt "page:showcase/notion/index.html" msgid "Markdown input" msgstr "" -#: website/public/showcase/notion/index.html:539 +#: website/public/showcase/notion/index.html:541 msgctxt "page:showcase/notion/index.html" msgid "Structured parser output · excerpt" msgstr "" -#: website/public/showcase/notion/index.html:548 +#: website/public/showcase/notion/index.html:550 msgctxt "page:showcase/notion/index.html" msgid "" "Recorded output from an extracted Markdown parser. The table becomes rows and cells." msgstr "" -#: website/public/showcase/notion/index.html:555 +#: website/public/showcase/notion/index.html:557 msgctxt "page:showcase/notion/index.html" msgid "Another path: the offline SQLite connection" msgstr "" #. {ph0}: getSqliteMeta -#: website/public/showcase/notion/index.html:556 +#: website/public/showcase/notion/index.html:558 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12188,14 +12188,14 @@ msgid "" "Subsequent statement batches and results travel over that port." msgstr "" -#: website/public/showcase/notion/index.html:562 +#: website/public/showcase/notion/index.html:564 msgctxt "page:showcase/notion/index.html" msgid "" "Following this handoff explains where the database work runs, and why tracing only the" " initial IPC request misses the later conversation." msgstr "" -#: website/public/showcase/notion/index.html:569 +#: website/public/showcase/notion/index.html:571 msgctxt "page:showcase/notion/index.html" msgid "Sources and how to read the excerpts" msgstr "" @@ -12203,7 +12203,7 @@ msgstr "" #. {ph0}: app.asar #. {ph1}: main/index.js #. {ph2}: isNotionWebContents -#: website/public/showcase/notion/index.html:570 +#: website/public/showcase/notion/index.html:572 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12216,7 +12216,7 @@ msgstr "" #. {ph1}: 58169 #. {ph2}: 736810 #. {ph3}: 422457 -#: website/public/showcase/notion/index.html:578 +#: website/public/showcase/notion/index.html:580 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12226,7 +12226,7 @@ msgid "" "describe those probes rather than a captured desktop UI session." msgstr "" -#: website/public/showcase/notion/index.html:586 +#: website/public/showcase/notion/index.html:588 msgctxt "page:showcase/notion/index.html" msgid "" "The REA result shown here is a focused analysis of the saved tab preload, recorded " @@ -12236,7 +12236,7 @@ msgid "" msgstr "" #. {ph0}: 422457 -#: website/public/showcase/notion/index.html:593 +#: website/public/showcase/notion/index.html:595 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12249,7 +12249,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/notion/index.html:601 +#: website/public/showcase/notion/index.html:603 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12261,7 +12261,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/notion/index.html:608 +#: website/public/showcase/notion/index.html:610 #, python-brace-format msgctxt "page:showcase/notion/index.html" msgid "" @@ -12269,7 +12269,7 @@ msgid "" "function.{ph3}" msgstr "" -#: website/public/showcase/notion/index.html:616 +#: website/public/showcase/notion/index.html:618 msgctxt "page:showcase/notion/index.html" msgid "Analyze your own app" msgstr "" @@ -12286,52 +12286,52 @@ msgid "" "process, with short code excerpts and a look at its rich clipboard format." msgstr "" -#: website/public/showcase/notion/index.html:257 +#: website/public/showcase/notion/index.html:259 msgctxt "page:showcase/notion/index.html" msgid "On this page" msgstr "" -#: website/public/showcase/notion/index.html:265 +#: website/public/showcase/notion/index.html:267 msgctxt "page:showcase/notion/index.html" msgid "Notion Electron case study" msgstr "" -#: website/public/showcase/notion/index.html:279 +#: website/public/showcase/notion/index.html:281 msgctxt "page:showcase/notion/index.html" msgid "Copy Notion analysis prompt" msgstr "" -#: website/public/showcase/notion/index.html:352 +#: website/public/showcase/notion/index.html:354 msgctxt "page:showcase/notion/index.html" msgid "Copy Notion preload excerpt" msgstr "" -#: website/public/showcase/notion/index.html:381 +#: website/public/showcase/notion/index.html:383 msgctxt "page:showcase/notion/index.html" msgid "Copy Notion invoke wrapper excerpt" msgstr "" -#: website/public/showcase/notion/index.html:412 +#: website/public/showcase/notion/index.html:414 msgctxt "page:showcase/notion/index.html" msgid "Copy Notion handler wrapper excerpt" msgstr "" -#: website/public/showcase/notion/index.html:440 +#: website/public/showcase/notion/index.html:442 msgctxt "page:showcase/notion/index.html" msgid "Copy Notion clipboard receiver excerpt" msgstr "" -#: website/public/showcase/notion/index.html:495 +#: website/public/showcase/notion/index.html:497 msgctxt "page:showcase/notion/index.html" msgid "Restoring rich clipboard data on paste" msgstr "" -#: website/public/showcase/notion/index.html:640 +#: website/public/showcase/notion/index.html:642 msgctxt "page:showcase/notion/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/th04/index.html:111 +#: website/public/showcase/th04/index.html:113 msgctxt "page:showcase/th04/index.html" msgid "Skip to content" msgstr "" @@ -12340,42 +12340,42 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/th04/index.html:201 +#: website/public/showcase/th04/index.html:203 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" msgstr "" -#: website/public/showcase/th04/index.html:204 +#: website/public/showcase/th04/index.html:206 msgctxt "page:showcase/th04/index.html" msgid "Case study · Touhou 4: Lotus Land Story" msgstr "" #. {ph0}:
-#: website/public/showcase/th04/index.html:205 +#: website/public/showcase/th04/index.html:207 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "Reconstructing TH04's{ph0}bullet patterns." msgstr "" -#: website/public/showcase/th04/index.html:206 +#: website/public/showcase/th04/index.html:208 msgctxt "page:showcase/th04/index.html" msgid "" "A ring of bullets starts with a short angle calculation. Use REA to inspect the " "original DOS function, then follow its instructions into readable C++." msgstr "" -#: website/public/showcase/th04/index.html:211 +#: website/public/showcase/th04/index.html:213 msgctxt "page:showcase/th04/index.html" msgid "PC-98 · 16-bit DOS · C++ and assembly" msgstr "" -#: website/public/showcase/th04/index.html:212 +#: website/public/showcase/th04/index.html:214 msgctxt "page:showcase/th04/index.html" msgid "View the TH04 reconstruction" msgstr "" -#: website/public/showcase/th04/index.html:218 +#: website/public/showcase/th04/index.html:220 msgctxt "page:showcase/th04/index.html" msgid "From original instructions to checked source" msgstr "" @@ -12386,7 +12386,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/th04/index.html:220 +#: website/public/showcase/th04/index.html:222 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12400,7 +12400,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/th04/index.html:227 +#: website/public/showcase/th04/index.html:229 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12414,7 +12414,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/th04/index.html:235 +#: website/public/showcase/th04/index.html:237 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12428,7 +12428,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/showcase/th04/index.html:242 +#: website/public/showcase/th04/index.html:244 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12436,21 +12436,21 @@ msgid "" "checks cover the bullet-generation code that contains this helper.{ph5}" msgstr "" -#: website/public/showcase/th04/index.html:251 +#: website/public/showcase/th04/index.html:253 msgctxt "page:showcase/th04/index.html" msgid "" "REA returns the original code and its analysis evidence. The TH04 project supplies the" " maintained source and compiler checks." msgstr "" -#: website/public/showcase/th04/index.html:259 +#: website/public/showcase/th04/index.html:261 msgctxt "page:showcase/th04/index.html" msgid "In this case study" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:261 +#: website/public/showcase/th04/index.html:263 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}The bullet ring{ph1}" @@ -12458,7 +12458,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:262 +#: website/public/showcase/th04/index.html:264 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}What REA returns{ph1}" @@ -12466,7 +12466,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:265 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}Assembly to C++{ph1}" @@ -12474,7 +12474,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:264 +#: website/public/showcase/th04/index.html:266 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}Checking the source{ph1}" @@ -12482,18 +12482,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:265 +#: website/public/showcase/th04/index.html:267 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}The full project{ph1}" msgstr "" -#: website/public/showcase/th04/index.html:270 +#: website/public/showcase/th04/index.html:272 msgctxt "page:showcase/th04/index.html" msgid "How a ring aims at the player" msgstr "" -#: website/public/showcase/th04/index.html:271 +#: website/public/showcase/th04/index.html:273 msgctxt "page:showcase/th04/index.html" msgid "" "Elly's attack requests an aimed ring with an initial count of 16. One helper " @@ -12509,16 +12509,16 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/showcase/th04/index.html:278 +#: website/public/showcase/th04/index.html:280 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/showcase/th04/index.html:283 -#: website/public/showcase/th04/index.html:339 -#: website/public/showcase/th04/index.html:516 -#: website/public/showcase/th04/index.html:550 +#: website/public/showcase/th04/index.html:285 +#: website/public/showcase/th04/index.html:341 +#: website/public/showcase/th04/index.html:518 +#: website/public/showcase/th04/index.html:552 msgctxt "page:showcase/th04/index.html" msgid "Copy" msgstr "" @@ -12529,7 +12529,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/showcase/th04/index.html:292 +#: website/public/showcase/th04/index.html:294 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12537,7 +12537,7 @@ msgid "" "player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/showcase/th04/index.html:301 +#: website/public/showcase/th04/index.html:303 msgctxt "page:showcase/th04/index.html" msgid "" "An example prompt, with the original executable and reconstruction checkout available " @@ -12545,7 +12545,7 @@ msgid "" msgstr "" #. {ph0}: 0, 16, 32, …, 240 -#: website/public/showcase/th04/index.html:305 +#: website/public/showcase/th04/index.html:307 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12555,7 +12555,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:325 +#: website/public/showcase/th04/index.html:327 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12563,12 +12563,12 @@ msgid "" "template rotation 0. {ph0}Open figure{ph1}" msgstr "" -#: website/public/showcase/th04/index.html:333 +#: website/public/showcase/th04/index.html:335 msgctxt "page:showcase/th04/index.html" msgid "The firing template in the recovered source" msgstr "" -#: website/public/showcase/th04/index.html:338 +#: website/public/showcase/th04/index.html:340 msgctxt "page:showcase/th04/index.html" msgid "Elly's ring attack · source excerpt" msgstr "" @@ -12577,7 +12577,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/boss/elly_phase_ring16.cpp#L26" #. > #. {ph1}: -#: website/public/showcase/th04/index.html:353 +#: website/public/showcase/th04/index.html:355 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12585,13 +12585,13 @@ msgid "" " attack's source{ph1}." msgstr "" -#: website/public/showcase/th04/index.html:364 +#: website/public/showcase/th04/index.html:366 msgctxt "page:showcase/th04/index.html" msgid "What REA returns" msgstr "" #. {ph0}: bullet_velocity_and_angle_set() -#: website/public/showcase/th04/index.html:365 +#: website/public/showcase/th04/index.html:367 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12600,41 +12600,41 @@ msgid "" "pattern." msgstr "" -#: website/public/showcase/th04/index.html:373 +#: website/public/showcase/th04/index.html:375 msgctxt "page:showcase/th04/index.html" msgid "Check the DOS image before reading its code" msgstr "" -#: website/public/showcase/th04/index.html:376 +#: website/public/showcase/th04/index.html:378 msgctxt "page:showcase/th04/index.html" msgid "Agent → REA" msgstr "" -#: website/public/showcase/th04/index.html:385 +#: website/public/showcase/th04/index.html:387 msgctxt "page:showcase/th04/index.html" msgid "REA → agent · selected fields" msgstr "" -#: website/public/showcase/th04/index.html:394 +#: website/public/showcase/th04/index.html:396 msgctxt "page:showcase/th04/index.html" msgid "" "The check ties the loaded code and relocation records to the supplied executable. The " "path above is shortened for display." msgstr "" -#: website/public/showcase/th04/index.html:400 +#: website/public/showcase/th04/index.html:402 msgctxt "page:showcase/th04/index.html" msgid "Read the ring's multiply and divide" msgstr "" #. {ph0}: analyze_function -#: website/public/showcase/th04/index.html:404 +#: website/public/showcase/th04/index.html:406 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "Agent → REA · {ph0}" msgstr "" -#: website/public/showcase/th04/index.html:410 +#: website/public/showcase/th04/index.html:412 msgctxt "page:showcase/th04/index.html" msgid "REA → agent · instruction excerpt" msgstr "" @@ -12642,7 +12642,7 @@ msgstr "" #. {ph0}: SI #. {ph1}: DS:53AF #. {ph2}: bullet_template.count -#: website/public/showcase/th04/index.html:418 +#: website/public/showcase/th04/index.html:420 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12651,22 +12651,22 @@ msgid "" "sequence appears below." msgstr "" -#: website/public/showcase/th04/index.html:427 +#: website/public/showcase/th04/index.html:429 msgctxt "page:showcase/th04/index.html" msgid "Find where the pattern turns toward the player" msgstr "" -#: website/public/showcase/th04/index.html:431 +#: website/public/showcase/th04/index.html:433 msgctxt "page:showcase/th04/index.html" msgid "Same function result · aim excerpt" msgstr "" -#: website/public/showcase/th04/index.html:440 +#: website/public/showcase/th04/index.html:442 msgctxt "page:showcase/th04/index.html" msgid "Corresponding maintained C++" msgstr "" -#: website/public/showcase/th04/index.html:448 +#: website/public/showcase/th04/index.html:450 msgctxt "page:showcase/th04/index.html" msgid "" "The instruction operands expose two coordinate differences and a direction helper. Its" @@ -12674,12 +12674,12 @@ msgid "" "readable; REA lets the agent check the original operations behind them." msgstr "" -#: website/public/showcase/th04/index.html:459 +#: website/public/showcase/th04/index.html:461 msgctxt "page:showcase/th04/index.html" msgid "From assembly to readable C++" msgstr "" -#: website/public/showcase/th04/index.html:460 +#: website/public/showcase/th04/index.html:462 msgctxt "page:showcase/th04/index.html" msgid "" "Select a step to match the original instructions with the angle calculation. This " @@ -12689,7 +12689,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:471 +#: website/public/showcase/th04/index.html:473 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}01{ph1} Index" @@ -12697,7 +12697,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:479 +#: website/public/showcase/th04/index.html:481 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}02{ph1} Space" @@ -12705,7 +12705,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:487 +#: website/public/showcase/th04/index.html:489 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}03{ph1} Aim" @@ -12713,7 +12713,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:495 +#: website/public/showcase/th04/index.html:497 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}04{ph1} Rotate" @@ -12721,18 +12721,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:503 +#: website/public/showcase/th04/index.html:505 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}05{ph1} Store" msgstr "" -#: website/public/showcase/th04/index.html:515 +#: website/public/showcase/th04/index.html:517 msgctxt "page:showcase/th04/index.html" msgid "REA · original 16-bit instructions" msgstr "" -#: website/public/showcase/th04/index.html:549 +#: website/public/showcase/th04/index.html:551 msgctxt "page:showcase/th04/index.html" msgid "Readable C++ · aimed-ring summary" msgstr "" @@ -12740,7 +12740,7 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: SI -#: website/public/showcase/th04/index.html:578 +#: website/public/showcase/th04/index.html:580 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12752,7 +12752,7 @@ msgstr "" #. {ph1}: #. {ph2}: SHL AX,8 #. {ph3}: IDIV -#: website/public/showcase/th04/index.html:583 +#: website/public/showcase/th04/index.html:585 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12764,7 +12764,7 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: AX -#: website/public/showcase/th04/index.html:590 +#: website/public/showcase/th04/index.html:592 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12776,7 +12776,7 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: ADD AL,[0x53ad] -#: website/public/showcase/th04/index.html:596 +#: website/public/showcase/th04/index.html:598 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12788,7 +12788,7 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: AL -#: website/public/showcase/th04/index.html:602 +#: website/public/showcase/th04/index.html:604 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12797,7 +12797,7 @@ msgid "" "surrounding source also converts this angle and speed into velocity." msgstr "" -#: website/public/showcase/th04/index.html:611 +#: website/public/showcase/th04/index.html:613 msgctxt "page:showcase/th04/index.html" msgid "" "The assembly selects the aimed-ring branch, aim calculation and final store. The C++ " @@ -12805,17 +12805,17 @@ msgid "" "the linked project." msgstr "" -#: website/public/showcase/th04/index.html:617 +#: website/public/showcase/th04/index.html:619 msgctxt "page:showcase/th04/index.html" msgid "Read the maintained ring and aim source" msgstr "" -#: website/public/showcase/th04/index.html:620 +#: website/public/showcase/th04/index.html:622 msgctxt "page:showcase/th04/index.html" msgid "Ring macro · TH04 branch, excerpt" msgstr "" -#: website/public/showcase/th04/index.html:630 +#: website/public/showcase/th04/index.html:632 msgctxt "page:showcase/th04/index.html" msgid "Angle and velocity · source excerpt" msgstr "" @@ -12832,7 +12832,7 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/types.hpp#L6" #. > #. {ph5}: -#: website/public/showcase/th04/index.html:646 +#: website/public/showcase/th04/index.html:648 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12840,36 +12840,36 @@ msgid "" "representation{ph5}" msgstr "" -#: website/public/showcase/th04/index.html:666 +#: website/public/showcase/th04/index.html:668 msgctxt "page:showcase/th04/index.html" msgid "Checking the maintained source" msgstr "" -#: website/public/showcase/th04/index.html:667 +#: website/public/showcase/th04/index.html:669 msgctxt "page:showcase/th04/index.html" msgid "" "The TH04 project's recorded checks compile the bullet-generation code, including this " "helper, with its pinned Turbo C++ 4.0J toolchain." msgstr "" -#: website/public/showcase/th04/index.html:674 +#: website/public/showcase/th04/index.html:676 msgctxt "page:showcase/th04/index.html" msgid "2,139 matching bytes" msgstr "" -#: website/public/showcase/th04/index.html:675 +#: website/public/showcase/th04/index.html:677 msgctxt "page:showcase/th04/index.html" msgid "" "The compiled bullet-generation code matches a 2,139-byte section of the original " "executable." msgstr "" -#: website/public/showcase/th04/index.html:681 +#: website/public/showcase/th04/index.html:683 msgctxt "page:showcase/th04/index.html" msgid "Two clean builds" msgstr "" -#: website/public/showcase/th04/index.html:682 +#: website/public/showcase/th04/index.html:684 msgctxt "page:showcase/th04/index.html" msgid "" "Two separate builds produce the same matching bytes. The recorded input hashes match " @@ -12880,65 +12880,65 @@ msgstr "" #. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/reconstruction/product/TH04_SEMANTIC_BULLET_GENERATION_V1236.md#validation" #. > #. {ph1}: -#: website/public/showcase/th04/index.html:688 +#: website/public/showcase/th04/index.html:690 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." msgstr "" -#: website/public/showcase/th04/index.html:696 +#: website/public/showcase/th04/index.html:698 msgctxt "page:showcase/th04/index.html" msgid "Target identity and analysis scope" msgstr "" -#: website/public/showcase/th04/index.html:701 +#: website/public/showcase/th04/index.html:703 msgctxt "page:showcase/th04/index.html" msgid "Original target" msgstr "" #. {ph0}: MAIN.EXE -#: website/public/showcase/th04/index.html:702 +#: website/public/showcase/th04/index.html:704 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}, 156,258 bytes, DOS MZ" msgstr "" -#: website/public/showcase/th04/index.html:705 +#: website/public/showcase/th04/index.html:707 msgctxt "page:showcase/th04/index.html" msgid "Helper entry" msgstr "" #. {ph0}: 0x2cfc8 -#: website/public/showcase/th04/index.html:706 +#: website/public/showcase/th04/index.html:708 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0} in REA's loaded image" msgstr "" -#: website/public/showcase/th04/index.html:709 +#: website/public/showcase/th04/index.html:711 msgctxt "page:showcase/th04/index.html" msgid "Original file offset" msgstr "" #. {ph0}: 0x1e7c8 #. {ph1}: address_to_file_offset -#: website/public/showcase/th04/index.html:710 +#: website/public/showcase/th04/index.html:712 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}, returned by {ph1}" msgstr "" -#: website/public/showcase/th04/index.html:716 +#: website/public/showcase/th04/index.html:718 msgctxt "page:showcase/th04/index.html" msgid "Recorded code inspection" msgstr "" -#: website/public/showcase/th04/index.html:717 +#: website/public/showcase/th04/index.html:719 msgctxt "page:showcase/th04/index.html" msgid "REA 4.1.0 · 7 October 2026" msgstr "" -#: website/public/showcase/th04/index.html:722 +#: website/public/showcase/th04/index.html:724 msgctxt "page:showcase/th04/index.html" msgid "" "Compiler checks cover the complete bullet-add code section, including this helper. " @@ -12946,7 +12946,7 @@ msgid "" msgstr "" #. {ph0}: 0x1000 -#: website/public/showcase/th04/index.html:727 +#: website/public/showcase/th04/index.html:729 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12956,7 +12956,7 @@ msgid "" msgstr "" #. {ph0}: 0d72e980 -#: website/public/showcase/th04/index.html:734 +#: website/public/showcase/th04/index.html:736 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -12967,19 +12967,19 @@ msgid "" "open." msgstr "" -#: website/public/showcase/th04/index.html:742 +#: website/public/showcase/th04/index.html:744 msgctxt "page:showcase/th04/index.html" msgid "" "The figure illustrates the angle calculation. Full-game controls, timing and PC-98 " "hardware behavior have separate runtime checks in the reconstruction project." msgstr "" -#: website/public/showcase/th04/index.html:751 +#: website/public/showcase/th04/index.html:753 msgctxt "page:showcase/th04/index.html" msgid "The full TH04 reconstruction" msgstr "" -#: website/public/showcase/th04/index.html:752 +#: website/public/showcase/th04/index.html:754 msgctxt "page:showcase/th04/index.html" msgid "" "The project builds the game's four DOS products from maintained C++ and assembly. " @@ -12989,7 +12989,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/th04/index.html:758 +#: website/public/showcase/th04/index.html:760 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "{ph0}Explore the TH04 repository{ph1}" @@ -13001,7 +13001,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/th04/index.html:764 +#: website/public/showcase/th04/index.html:766 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -13015,7 +13015,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/th04/index.html:773 +#: website/public/showcase/th04/index.html:775 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -13029,7 +13029,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/th04/index.html:782 +#: website/public/showcase/th04/index.html:784 #, python-brace-format msgctxt "page:showcase/th04/index.html" msgid "" @@ -13049,27 +13049,27 @@ msgid "" "C++ to see how a ring of bullets is spaced and aimed at the player." msgstr "" -#: website/public/showcase/th04/index.html:258 +#: website/public/showcase/th04/index.html:260 msgctxt "page:showcase/th04/index.html" msgid "On this page" msgstr "" -#: website/public/showcase/th04/index.html:268 +#: website/public/showcase/th04/index.html:270 msgctxt "page:showcase/th04/index.html" msgid "TH04 bullet-pattern case study" msgstr "" -#: website/public/showcase/th04/index.html:283 +#: website/public/showcase/th04/index.html:285 msgctxt "page:showcase/th04/index.html" msgid "Copy TH04 example prompt" msgstr "" -#: website/public/showcase/th04/index.html:311 +#: website/public/showcase/th04/index.html:313 msgctxt "page:showcase/th04/index.html" msgid "TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" msgstr "" -#: website/public/showcase/th04/index.html:317 +#: website/public/showcase/th04/index.html:319 msgctxt "page:showcase/th04/index.html" msgid "" "Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. Adding a player" @@ -13078,27 +13078,27 @@ msgid "" "degrees." msgstr "" -#: website/public/showcase/th04/index.html:339 +#: website/public/showcase/th04/index.html:341 msgctxt "page:showcase/th04/index.html" msgid "Copy TH04 firing template" msgstr "" -#: website/public/showcase/th04/index.html:466 +#: website/public/showcase/th04/index.html:468 msgctxt "page:showcase/th04/index.html" msgid "Follow the TH04 aimed-ring calculation" msgstr "" -#: website/public/showcase/th04/index.html:516 +#: website/public/showcase/th04/index.html:518 msgctxt "page:showcase/th04/index.html" msgid "Copy TH04 assembly excerpt" msgstr "" -#: website/public/showcase/th04/index.html:550 +#: website/public/showcase/th04/index.html:552 msgctxt "page:showcase/th04/index.html" msgid "Copy readable aimed-ring calculation" msgstr "" -#: website/public/showcase/th04/index.html:809 +#: website/public/showcase/th04/index.html:811 msgctxt "page:showcase/th04/index.html" msgid "Back to top" msgstr "" diff --git a/website/public/blog/index.html b/website/public/blog/index.html index ca8dc00fd8..ba5c58b758 100644 --- a/website/public/blog/index.html +++ b/website/public/blog/index.html @@ -59,6 +59,8 @@ + + @@ -124,7 +126,7 @@ Guides
-
English
+
English