From 403fef0d401c1014a41fddce375085eb6e4a3823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stoian=20Andrei-=C8=98erban?= Date: Sat, 24 Oct 2026 20:54:08 +0300 Subject: [PATCH] docs(i18n): add complete Romanian README (#7026) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Stoian Andrei-Șerban <11259126+An3treiu@users.noreply.github.com> --- README.md | 2 +- docs/readme/README_ar.md | 2 +- docs/readme/README_de.md | 2 +- docs/readme/README_el.md | 2 +- docs/readme/README_es.md | 2 +- docs/readme/README_fa.md | 2 +- docs/readme/README_fr.md | 2 +- docs/readme/README_id.md | 2 +- docs/readme/README_it.md | 2 +- docs/readme/README_ja.md | 2 +- docs/readme/README_ko.md | 2 +- docs/readme/README_ml.md | 2 +- docs/readme/README_pl.md | 2 +- docs/readme/README_pt-BR.md | 2 +- docs/readme/README_ro.md | 442 + docs/readme/README_ru.md | 2 +- docs/readme/README_th.md | 2 +- docs/readme/README_tr.md | 2 +- docs/readme/README_uk.md | 2 +- docs/readme/README_ur-Latn.md | 2 +- docs/readme/README_vi.md | 2 +- docs/readme/README_zh-TW.md | 2 +- docs/readme/README_zh.md | 2 +- website/locales/README.md | 4 + website/locales/languages.json | 6 + website/locales/messages.pot | 3776 ++--- website/locales/ro/messages.po | 12933 ++++++++++++++++ website/public/blog/index.html | 4 +- .../reverse-engineering-models/index.html | 4 +- .../blog/touhou-reconstruction/index.html | 4 +- website/public/contributors/index.html | 4 +- website/public/examples/dino-lab/index.html | 4 +- website/public/faq/index.html | 4 +- website/public/first-investigation/index.html | 4 +- website/public/get-started/index.html | 4 +- website/public/guides/browser/index.html | 4 +- website/public/guides/index.html | 4 +- website/public/guides/javascript/index.html | 4 +- website/public/guides/native/index.html | 4 +- website/public/index.html | 4 +- website/public/showcase/aegis/index.html | 4 +- website/public/showcase/ctf/index.html | 4 +- website/public/showcase/dx-ball/index.html | 4 +- website/public/showcase/index.html | 4 +- website/public/showcase/notion/index.html | 4 +- website/public/showcase/th04/index.html | 4 +- 46 files changed, 15352 insertions(+), 1929 deletions(-) create mode 100644 docs/readme/README_ro.md create mode 100644 website/locales/ro/messages.po diff --git a/README.md b/README.md index 04980180aa..28ce8b2448 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) +· [Ελληνικά](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) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_ar.md b/docs/readme/README_ar.md index ef132102bf..2b42cd9688 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: هندسة عكسية لأي شيء diff --git a/docs/readme/README_de.md b/docs/readme/README_de.md index 673bcabd8f..5e5b41603b 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Alles reverse-engineeren diff --git a/docs/readme/README_el.md b/docs/readme/README_el.md index 28b67dc542..47cff58bce 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) +[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) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_es.md b/docs/readme/README_es.md index 57235bf4b7..5593d98033 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Ingeniería inversa de cualquier cosa diff --git a/docs/readme/README_fa.md b/docs/readme/README_fa.md index ea40226fd2..3f031d1f75 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: مهندسی معکوس هر چیزی diff --git a/docs/readme/README_fr.md b/docs/readme/README_fr.md index d102b12877..b3e2716d7e 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA : rétro-ingénierie de tout diff --git a/docs/readme/README_id.md b/docs/readme/README_id.md index 14c9ed8738..47ff89c8b3 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Rekayasa Balik Apa Pun diff --git a/docs/readme/README_it.md b/docs/readme/README_it.md index 3cc2870453..3dd6706912 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_ja.md b/docs/readme/README_ja.md index 7bfd634e3f..fd5be9db90 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA:あらゆるものをリバースエンジニアリング diff --git a/docs/readme/README_ko.md b/docs/readme/README_ko.md index d1427a0020..4f1dccb8ef 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: 무엇이든 리버스 엔지니어링 diff --git a/docs/readme/README_ml.md b/docs/readme/README_ml.md index 4e973857c9..c53d3aa710 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) +· [Ελληνικά](README_el.md) · **മലയാളം** · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: എന്തും Reverse Engineer ചെയ്യുക diff --git a/docs/readme/README_pl.md b/docs/readme/README_pl.md index f9fd29d2a2..008eb92bb3 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_pt-BR.md b/docs/readme/README_pt-BR.md index 22aa620b1d..ceffa13455 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Faça engenharia reversa de qualquer coisa diff --git a/docs/readme/README_ro.md b/docs/readme/README_ro.md new file mode 100644 index 0000000000..c6f3aef98b --- /dev/null +++ b/docs/readme/README_ro.md @@ -0,0 +1,442 @@ +
+ +[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ă** + +# REA: Reverse Engineer Anything + +### Un singur server MCP pentru inginerie inversă: fișiere binare, aplicații și comportament în timpul execuției. + +**Ai găsit o funcționalitate care îți place? Înțelege cum funcționează, până la nivel de cod binar.** + +[![Versiunea npm](https://img.shields.io/npm/v/rea-agents?style=flat-square&color=cb3837)](https://www.npmjs.com/package/rea-agents) +[![Catalogul uneltelor MCP](https://img.shields.io/badge/MCP-tool_catalog-5c4ee5?style=flat-square)](../mcp-contracts.md#generated-catalog) +[![Cerințe Node.js](https://img.shields.io/badge/Node.js-requirements-339933?style=flat-square&logo=nodedotjs&logoColor=white)](#ce-poți-analiza) +[![skills.sh](https://skills.sh/b/morluto/rea?style=flat-square)](https://skills.sh/morluto/rea/reverse-engineer-anything) +[![Licența 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 + +**[Site web](https://rea.tools/) · [Ghiduri](https://rea.tools/guides/) · [Studii de caz](https://rea.tools/showcase/)** + +[Pornire rapidă](#pornire-rapidă) · [Cum funcționează REA](#cum-funcționează-rea) · [Ce poți analiza](#ce-poți-analiza) · [Studii de caz](#studii-de-caz) · [Întrebări frecvente](#întrebări-frecvente) · [Documentație](#documentație) + +npx rea-agents setup + +
+ +> [!IMPORTANT] +> Descarcă REA din [morluto/rea](https://github.com/morluto/rea), +> de pe [rea.tools](https://rea.tools/) sau prin [pachetul npm rea-agents](https://www.npmjs.com/package/rea-agents). +> Urmează linkurile de instalare și către versiunile publicate oferite de aceste surse oficiale. +> Un nume de repository asemănător sau un README copiat nu dovedește că descărcarea provine dintr-o sursă oficială. + +
+ +
+ +REA pornește componenta de legătură pentru analiză în Hopper în timp ce inspectează un fișier binar nativ + +

+ + + + + +
+ + Discord
+ Alătură-te comunității de inginerie inversă +

+ Discord · Întrebări și răspunsuri · Prezentări și demonstrații +
+ +
+ +
+ +--- + +Ai văzut într-o aplicație o funcționalitate pe care ai vrea să o incluzi în propriul produs? Cere-i agentului tău să o investigheze cu REA. Poate inspecta aplicația fără codul ei sursă, poate explica modul în care funcționează acea funcționalitate, poate prezenta dovezile și poate construi o variantă pentru proiectul tău. + +REA conectează agentul tău la unelte pentru inspectarea fișierelor binare native, a aplicațiilor JavaScript și Electron, a ansamblurilor .NET și a site-urilor web. Poți folosi aceleași unelte și din terminal. Analiza rulează local, iar rezultatele includ dovezile și limitările care stau la baza fiecărei concluzii. + +Programul de configurare înregistrează REA în agentul tău și instalează instrucțiunile corespunzătoare pentru fluxul de lucru. Analiza nativă poate folosi o instalare existentă de Hopper, Ghidra sau IDA; programul de configurare poate instala opțional Hopper, cu aprobarea ta. Analiza statică JavaScript nu necesită un motor de analiză nativă. + +> **[Vizitează site-ul REA](https://rea.tools/)** pentru instrucțiuni de configurare, ghiduri ilustrate și studii de caz reale. + +## Pornire rapidă + +Pe Linux, pornirea Ghidra, JADX și a uneltelor pentru firmware, precum și analiza +statică JavaScript/Electron necesită un `ps` compatibil cu procps în `PATH`-ul REA, +pentru a verifica dacă procesele îi aparțin. Pașii de remediere sunt în +`docs/installation.md`, la secțiunea „Linux owned-process prerequisite”. + +### Configurează agentul + +Cu Node.js și npm instalate, rulează: + +```bash +npx rea-agents setup +``` + +Alege agenții, verifică modificările propuse și aprobă-le. Configurarea adaugă +serverul MCP REA și instrucțiunile corespunzătoare pentru fluxul de lucru, +creând copii de siguranță ale configurației existente. Repornește apoi agentul. + +Programul de configurare acceptă Claude Code, Codex, Cursor, Gemini CLI, Grok Build și +[alți agenți](../installation.md#supported-agents). Consultă +[instalarea și configurarea](../installation.md) pentru configurarea motoarelor +de analiză și înregistrarea manuală a serverului MCP. + +MCP folosește implicit scheme de intrare compacte, pentru a reduce spațiul ocupat +în context. Setează `REA_MCP_INPUT_SCHEMA_PROFILE=full` în înregistrarea MCP când +ai nevoie de îndrumările complete pentru câmpurile expuse și de detaliile +validării structurilor imbricate. Ambele profiluri păstrează toate uneltele și +validarea canonică a serverului. Consultă secțiunea „Compact input schema profile” +din ghidul contractelor MCP. + +### Cere-i agentului + +```text +Înțelege cum funcționează căutarea în aplicația Notes, arată-mi dovezile și +construiește o funcționalitate similară pentru proiectul meu. +``` + +Înlocuiește Notes cu aplicația vizată și precizează funcționalitatea pe care vrei să o înțelegi. + +### Folosește terminalul + +Inspectează directorul extras al unei aplicații JavaScript/Electron sau o arhivă ASAR: + +```bash +npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json +``` + +Rezultatul include modulele, importurile, delimitările dintre componentele Electron +și dovezile aferente. Înlocuiește calea cu cea a aplicației vizate, de exemplu +`"D:/apps/example"` pe Windows. + +Pentru a instala comanda `rea` și a o folosi în mod curent: + +```bash +npm install --global rea-agents +rea --help +``` + +Pentru analiza nativă, configurează mai întâi un motor de analiză. Consultă +[ghidul CLI și Evidence](../cli.md) pentru comenzile de analiză nativă, +selectarea motorului, instantanee și utilizarea în scripturi. + +### Actualizează REA + +REA evoluează rapid, iar versiunile noi includ frecvent corecții de erori. +Menține instalarea la zi. + +Pentru o interfață CLI instalată cu `npm install --global` sau `bun add --global`: + +```bash +rea update +``` + +`rea --update` este un alias pentru acest flux de actualizare verificat și acceptă +aceleași opțiuni globale de ieșire. Folosește `rea update` când îl combini cu alte +opțiuni de control al comenzii. + +Comenzile de actualizare păstrează cel mult 4 MiB în total din stdout și stderr. +Răspunsurile cu metadate prea mari sunt respinse după încheierea comenzii; +instalările cu ieșire detaliată continuă cu un volum limitat de date de diagnostic. +Afișarea progresului în terminal ține cont de ritmul în care acesta poate primi +date și așteaptă finalizarea operațiilor de scriere deja trimise. + +Actualizările instalărilor globale cu Bun necesită Bun 1.2.17 sau o versiune mai nouă. +Dacă ai o versiune mai veche, actualizează Bun manual înainte de a rula `rea update`. + +Pentru a actualiza înregistrările agenților și skill-ul, rulează comanda de +configurare afișată de programul de actualizare. + +Dacă folosești `npx`, actualizează configurarea agentului cu: + +```bash +npx rea-agents@latest setup +``` + +Verifică modificările de configurare și repornește agentul. Pentru comenzi CLI +ocazionale, folosește `npx rea-agents@latest` urmat de comandă. Cu Bun, folosește +`bunx rea-agents@latest` în loc de `npx rea-agents@latest`. + +## Cum funcționează REA + +Agentul tău apelează REA prin MCP pentru a inspecta ținta și a urmări codul relevant. +REA returnează constatările împreună cu dovezile aferente. Agentul le folosește +pentru a pune întrebări suplimentare, a explica comportamentul sau a scrie și +testa o implementare. Comenzile CLI folosesc aceleași fluxuri de lucru. + +![Fluxul unei investigații REA: agentul întreabă despre o țintă locală, REA o inspectează și îi urmărește comportamentul cu ajutorul uneltelor de analiză, iar agentul folosește codul, referințele și necunoscutele returnate pentru a explica, implementa și testa.](../../website/public/assets/figures/rea-investigation-flow.svg) + +[Deschide figura la dimensiunea originală](../../website/public/assets/figures/rea-investigation-flow.svg). + + + +## Ce poți analiza + +REA necesită Node.js 22.x (>=22.23.4), 24.x (>=24.22.1) sau 26.12.1+, plus npm. +Uneltele suplimentare și platformele acceptate depind de ținta analizată: + +| Țintă | Ce returnează REA | Cerințe și ghid | +| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| Aplicații desktop instalate | Componente de execuție candidate, fișiere auxiliare, indicii despre componente și următoarele verificări | Inspectare integrată a directoarelor și antetelor, cu limite de resurse; [aplicații desktop](../desktop-applications.md) | +| Fișiere binare native | Pseudocod, cod de asamblare, șiruri de caractere, simboluri, apeluri și referințe | Hopper, Ghidra sau IDA; [analiză nativă](../native-investigation.md) | +| Structura ELF, offline | Secțiuni, segmente, simboluri și relocări originale, precum și indicii statice despre mecanismele de protecție | pwntools furnizat de utilizator, pe Linux x64; [diagnosticarea binarelor](../binary-diagnostics.md) | +| Fișiere binare Go | Versiunea compilatorului încorporată în fișier, modulele, înlocuirile și setările de compilare | Inspectare statică integrată a fișierelor ELF/PE/Mach-O cu o singură arhitectură; nu necesită instalarea Go | +| Obiecte de cod GPU | Ținte CUDA/HIP, parametri și resurse selectate ale kernelurilor GPU, textul PTX păstrat | Inspectare statică integrată a fișierelor ELF/PE/fatbin/CUBIN/PTX; [obiecte de cod GPU](../gpu-code-objects.md) | +| Fișiere de model | Metadate GGUF / safetensors, declarații de tensori și totaluri calculate din acestea | Inspectare integrată a antetelor; opțional, hash al întregului fișier; [fișiere de model](../model-artifacts.md) | +| Metadate IL2CPP | Imagini de ansambluri din global-metadata.dat al Unity, nume de tipuri și metode și intervale de indici | Decodare statică integrată a versiunilor 24, 27, 29, 31 și 39; nu necesită Unity | +| Godot PCK | Inventarul și extragerea arhivei, informații originale din antet și director și identificatori ai conținutului selectat | Suport static integrat pentru formatele 2, 3 și 4; nu necesită Godot | +| Fișiere binare Rust | Nume, versiuni, surse și relații de dependență ale pachetelor crate încorporate prin cargo-auditable | Inspectare statică integrată a fișierelor ELF/PE/Mach-O cu o singură arhitectură; [binare Rust](../rust-binaries.md) | +| Certificate PE | Intrări Authenticode WIN_CERTIFICATE și câmpuri de identitate ale semnatarilor PKCS#7 și certificatelor X.509 | Inspectare statică integrată a fișierelor PE; [certificate PE](../pe-certificates.md) | +| Importuri PE | Numele DLL-urilor importate și încărcate întârziat, ordinale, RVA-uri ale IAT și hash-ul importurilor calculat de pefile | Inspectare statică integrată a fișierelor PE; [importuri PE](../pe-imports.md) | +| Note ELF | Proprietari și tipuri PT_NOTE/SHT_NOTE, câmpuri GNU build-id și ABI-tag | Inspectare statică integrată a fișierelor ELF; [note ELF](../elf-notes.md) | +| Rapoarte Apple IPS de eroare fatală | Metadate .ips, fire de execuție, imagini binare, registre și clase documentate de erori fatale | Inspectare statică integrată a datelor JSON; [Apple IPS](../apple-ips.md) | +| Module de kernel Linux | Chei .modinfo, CRC-uri din __versions, prezența this_module și structura semnăturii de la sfârșitul fișierului | Inspectare statică integrată a fișierelor ELF; [module de kernel](../kernel-modules.md) | +| Erlang BEAM | Blocuri IFF, atomi, exporturi, importuri, funcții lambda și antetul Code | Inspectare statică integrată a fișierelor BEAM; [Erlang BEAM](../erlang-beam.md) | +| Fișiere WASM | Validare, secțiuni, forme WAT exacte ale importurilor și exporturilor și cod WAT decodat | WABT 1.0.42 furnizat de utilizator; `inspect_wasm_artifact` | +| Bytecode EVM | Selectori de apel, poziții în octeți, argumente și mutabilitate deduse | Fișier local în format brut sau hexazecimal, pe Linux x64; [ghid EVM offline](../evm-bytecode.md) | +| Baze de date SQLite | Tabele, coloane, indecși, vizualizări, declanșatoare și rânduri selectate din tabele obișnuite | Instantaneu local al bazei de date/WAL; Node.js 24.x >=24.15 sau 26+, cu limite SQLite native | +| Erori fatale Linux înregistrate | Note brute, registrele și semnalele fiecărui fir înregistrat și, opțional, corespondențe candidate pentru mapările de memorie | pwntools furnizat de utilizator, pe Linux x64; opțional GDB/pwndbg; [erori fatale înregistrate](../recorded-crashes.md) | +| JavaScript / Electron | Module, importuri, hărți de cod sursă, rute, IPC și relații cu extensiile native | Node.js și npm; pe Linux: `ps` compatibil cu procps; [analiza aplicațiilor](../javascript-application-workflows.md) | +| Site-uri web | Structura paginilor, scripturi, observații de rețea și capturi de ecran solicitate | Un browser din familia Chrome; [analiză în browser](../browser-observation.md) | +| Capturi de rețea salvate | Cereri, răspunsuri, conținuturi expuse ale mesajelor și pozițiile lor în sursă | HAR sau SAZ din Fiddler Everywhere; mitmdump pe Linux pentru formatul nativ mitmproxy; [ghidul capturilor](../web-network-captures.md) | +| Ansambluri .NET | Metadate, instrucțiuni CIL, dependențe native declarate și comparații între compilări | Fără cerințe suplimentare (doar analiză statică); [ghidul codului gestionat](../managed-code-analysis.md) | +| APK-uri Android | Declarații din manifest, clase, metode decompilate și referințe | JADX fără interfață grafică și un JDK complet, pe Linux/macOS/Windows x64; [ghidul Android](../android-analysis.md) | +| Semnături APK | Semnatari v1/v2/v3/v3.1, amprente ale certificatelor, rotația cheilor și consistența internă a hash-urilor | Fără cerințe suplimentare (doar analiză statică); `inspect_apk_signature` | +| Dispozitive Android | Dispozitive, pachete, procese, jurnale, dumpuri, capturi de ecran și transferuri de APK-uri și fișiere | adb furnizat de utilizator (emulator sau dispozitiv fizic); [ghidul ADB](../adb-device-analysis.md) | +| Proiecte JEB | Unități de proiect analizate prin motor, hash-uri ale artefactelor și pseudocod pentru tipuri și metode | Un client JEB pornit de utilizator, care oferă un server MCP și este selectat prin REA_JEB_MCP_URL; [ghidul JEB](../jeb-analysis.md) | +| Resurse Android | Manifest decodat, tabele de șiruri de caractere, localizări și informații despre versiune | Program de lansare Apktool furnizat de utilizator; [ghidul resurselor](../apktool-resource-analysis.md) | +| Aplicații Flutter | Hash-ul instantaneului Dart, hash-uri ale bibliotecilor pentru fiecare ABI și proveniența compilării motorului | Fără cerințe suplimentare (parsare statică a APK-ului); [ghidul Flutter](../flutter-analysis.md) | +| Firmware | Regiuni, rezultate ale extragerii și transferul către analiza nativă | Binwalk / Unblob pe Linux; [ghidul firmware](../firmware-analysis.md) | +| Pachete de rețea înregistrate | Câmpuri selectate, valori repetate, filtre și reguli decode-as | Linux: TShark 4.x + prlimit; [ghidul capturilor](../packet-captures.md) | +| Rezumate ale traficului de rețea | Puncte terminale, DNS, TLS SNI, distribuția protocoalelor și cereri HTTP | tshark și capinfos furnizate de utilizator (verificate pe Linux); [ghidul pcap](../pcap-analysis.md) | +| Semnale logice înregistrate | Adnotări ale decodorului, intervale de eșantioane și date de diagnostic | Linux: sigrok-cli 0.7.2 + prlimit; [înregistrări de semnale](../signal-recordings.md) | +| Pachete și resurse | Inventare de fișiere, hash-uri, fișiere plist, structura pachetelor de aplicație Apple și resurse extrase | [Ghidul artefactelor și JavaScript](../javascript-artifact-reconstruction.md), [aplicații Apple](../apple-application-analysis.md) | +| Comportamentul proceselor | Ieșirea în terminal, interacțiuni, observații despre terminarea proceselor și sistemul de fișiere și comparații între rulări | Linux/macOS cu un PTY nativ; [capturarea proceselor](../process-capture.md) | +| Executabile PyInstaller | Membri CArchive, versiunea Python, scripturi de intrare și bytecode extras | Fără cerințe suplimentare (doar analiză statică); [aplicații Python împachetate](../python-packaged-applications.md) | + +Inspectarea statică JavaScript și .NET citește fișierele furnizate fără a rula +aplicația. Capturarea în timpul execuției rulează ținta selectată sau interacționează +cu aceasta folosind permisiunile contului tău; fiecare ghid de capturare descrie +efectele acestor operații. + +Pentru inspectarea offline a binarelor native, REA acceptă și GNU objdump și Rizin, +furnizate de utilizator. Consultă [ghidul uneltelor de inginerie inversă](../reverse-engineering-tools.md) +pentru configurare, comenzi CLI și limitările obiectelor Evidence. REA nu +instalează și nu actualizează niciunul dintre aceste două instrumente. + + + +Formatele native și platformele acceptate diferă în funcție de motorul de analiză. +Consultă [configurarea Hopper și Ghidra](../installation.md#hopper), +[ghidul IDA](../ida-provider.md) (inclusiv o componentă opțională de legătură MCP nativă), +[ghidul decompilatorului Kuna](../kuna-provider.md) și +[suportul experimental Ghidra pe Windows](../windows-ghidra-p0.md). +Ghidra acceptă și [analiza DOS pe 16 biți](../ghidra-dos.md). +Pentru binare mari, mărește timpul maxim de pornire al motorului cu +`REA_GHIDRA_STARTUP_TIMEOUT_MS` sau `REA_HOPPER_STARTUP_TIMEOUT_MS`. +Pentru selectarea motorului, consultă [ghidul CLI](../cli.md#choose-a-provider). +Verifică [disponibilitatea în versiunile publicate](../installation.md#released-package-and-main) +pentru funcționalitățile adăugate după cea mai recentă versiune npm. + +## Studii de caz + + + + + Ilustrații pentru studiile de caz despre panoramarea sunetului în DX-Ball, legătura cu clipboardul în Notion și inelele de proiectile din TH04 + + + +### DX-Ball: reconstruiește calculul panoramării sunetului + +Urmărește un apel audio până la funcția auxiliară care transformă poziția în +panoramare stereo, inspectează instrucțiunile și transformă pseudocodul incomplet +în C. Reconstrucția trece 3.205 cazuri de test comparate cu originalul x86 și +reproduce toți cei 63 de octeți ai funcției compilate. + +[Citește studiul de caz](https://rea.tools/showcase/dx-ball/) · +[Repository-ul reconstrucției](https://github.com/N0zoM1z0/dx-ball) + +### Notion: urmărește legătura Electron cu clipboardul + +Găsește API-ul pentru clipboard din procesul de randare, urmărește-l prin preload +și IPC până în procesul principal și inspectează formatul datelor cu formatare din clipboard. + +[Citește studiul de caz](https://rea.tools/showcase/notion/) + +### TH04: recuperează calculul unui inel de proiectile DOS + +Inspectează instrucțiunile pe 16 biți ale jocului original pentru PC-98, +recuperează calculele unghiurilor fixe și ale celor orientate spre țintă și +compară codul C++ reconstruit cu rezultatul compilatorului folosit la acea vreme. + +[Citește studiul de caz](https://rea.tools/showcase/th04/) · +[Repository-ul reconstrucției](https://github.com/N0zoM1z0/th04) + +Dacă ai folosit REA pentru ceva interesant, ne-ar plăcea să vedem rezultatul. +Prezintă cazul într-un [issue](https://github.com/morluto/rea/issues) sau într-un +[pull request](https://github.com/morluto/rea/pulls), menționând ținta analizată, +întrebarea ta, cum te-a ajutat REA și ce ai descoperit. + +## Întrebări frecvente + +
+Ce agenți pot folosi REA? + +Orice agent care acceptă servere MCP locale. Programul de configurare pregătește +[agenții acceptați](../installation.md#supported-agents); pentru ceilalți clienți +poți folosi [înregistrarea manuală MCP](../installation.md#mcp-registry). + +
+ +
+Am nevoie de Hopper, Ghidra sau IDA? + +Analiza nativă aprofundată folosește unul dintre aceste instrumente. Inspectarea +statică JavaScript și .NET funcționează fără un motor de analiză nativă. +Programul de configurare poate instala Hopper după aprobare; pentru Ghidra și IDA +folosește instalările existente. Consultă [configurarea motoarelor de analiză](../installation.md#hopper). + +
+ +
+Trebuie să pornesc mai întâi Hopper? + +REA pornește Hopper când o operație are nevoie de el. Pe macOS, un dialog afișat +la prima pornire îți poate cere să alegi modul demonstrativ sau să activezi licența. +Finalizează acel pas în aceeași sesiune de utilizator înainte de prima operație +CLI/MCP sau de prima sarcină nesupravegheată. Deschide Hopper manual dacă este nevoie. +Consultă [pornirea Hopper și depanarea](../installation.md#launcher-paths-and-troubleshooting). + +
+ +
+Ce face instalarea skill-ului de pe skills.sh? + +Skill-ul oferă agentului instrucțiuni de investigare. Folosește `npx rea-agents setup` +pentru a înregistra serverul MCP REA și a instala instrucțiunile corespunzătoare, +apoi repornește agentul. Consultă [instalarea doar a skill-ului](../installation.md#skill-only-installation). + +
+ +
+Ce cod returnează REA? + +Analiza nativă returnează pseudocod și cod de asamblare. Analiza JavaScript/Electron +recuperează modulele și relațiile dintre ele. Agentul tău folosește aceste +constatări pentru a scrie și testa o implementare; +[studiile de caz](#studii-de-caz) oferă exemple detaliate. + +
+ +
+REA îmi încarcă aplicația pe un server? + +REA analizează țintele local. Agentul tău primește rezultatele uneltelor, iar +furnizorul modelului său are propria politică privind datele. + +
+ +
+Ce fac dacă întâlnesc o eroare? + +Actualizează mai întâi; o versiune recentă ar putea să o fi remediat deja. + +Pentru o interfață CLI instalată cu `npm install --global` sau `bun add --global`: + +```bash +rea update +``` + +Pentru configurarea agentului prin `npx`: + +```bash +npx rea-agents@latest setup +``` + +Dacă folosești un agent, finalizează [actualizarea configurării](#actualizează-rea) +și repornește-l. Reîncearcă aceeași sarcină. Dacă problema persistă, +[deschide un issue](https://github.com/morluto/rea/issues) și include versiunea REA, +tipul țintei analizate, pașii de reproducere și mesajele de eroare. + +
+ +## Documentație + +Începe cu [ghidurile practice](https://rea.tools/guides/) de pe site. +Pentru opțiunile exacte, cerințele preliminare și contractele rezultatelor: + +- [Instalare și configurare](../installation.md): înregistrarea agenților, configurarea motoarelor de analiză, actualizări și dezinstalare. +- [Verificarea pregătirii și depanare](../installation.md#check-readiness-for-your-task): diagnosticarea unui agent sau motor de analiză. +- [CLI și Evidence](../cli.md): comenzi, selectarea motorului, instantanee, import/export și coduri de ieșire. +- [Contracte MCP](../mcp-contracts.md) și [prompturi pentru agenți](../mcp-prompts.md): rezultatele uneltelor, sesiuni și investigații ghidate. +- [Catalogul uneltelor](../mcp-contracts.md#generated-catalog): inventarul generat al uneltelor, motoarelor de analiză și comenzilor CLI. +- [Plan de dezvoltare](../roadmap.md): lucrări planificate și urmărirea progresului funcționalităților. + +Raportează vulnerabilitățile conform [SECURITY.md](../../SECURITY.md). + +## Istoricul stelelor + +🎉 **300.000 de stele pe GitHub — vă mulțumim!** + +Mulțumim tuturor celor care folosesc REA, raportează erori, propun funcționalități, +testează versiuni și contribuie cu remedieri. + + + + + + Istoricul stelelor REA pe GitHub + + + +## Precizări privind utilizarea + +Consultă [DISCLAIMER.md](../../DISCLAIMER.md) pentru îndrumări privind utilizarea responsabilă. + +Poziția proiectului față de utilizarea ilegală sau neautorizată se aplică tuturor +versiunilor REA, canalelor de distribuție și platformelor; fiecare copie își +păstrează licențele aplicabile. + +REA este destinat cercetării legale, educației, interoperabilității, conservării +software-ului și analizei programelor pe care le deții sau pe care ai autorizarea +să le examinezi. + +## Contribuții + +Ne-ar bucura să contribui la REA! [Deschide un issue](https://github.com/morluto/rea/issues) +pentru a raporta o eroare sau a propune o funcționalitate ori +[trimite un pull request](https://github.com/morluto/rea/pulls) pentru a îmbunătăți +codul sau documentația. + +Consultă [CONTRIBUTING.md](../../CONTRIBUTING.md) pentru pregătirea mediului de dezvoltare +și verificări, [ghidul de testare](../testing.md) pentru categoriile de verificări +și [diagrama arhitecturii](../architecture.mermaid) pentru anumite straturi și +relații de dependență. + +## Licență + +[MIT](../../LICENSE) + +Codul scris în cadrul REA este licențiat sub MIT. Materialele terților își păstrează +propriile licențe și mențiuni privind drepturile de autor; consultă +[mențiunile privind terții](../../THIRD_PARTY_NOTICES.md) pentru inventarul +dependențelor, textele licențelor păstrate și condițiile aplicabile uneltelor externe. + +**Trebuie să obții legal uneltele comerciale și să ai dreptul să le folosești**, +inclusiv decompilatoarele IDA Pro / Hex-Rays, Hopper și JEB, în condițiile +licențelor aplicabile. REA nu îți acordă nicio licență, cheie sau drept de activare +pentru aceste unelte. Versiunile de evaluare și demonstrative rămân supuse +condițiilor furnizorilor, inclusiv restricțiilor privind utilizatorii, +funcționalitățile, automatizarea și partajarea rezultatelor. Nu sunt autorizate +copiile piratate, cheile furate, partajarea neautorizată a cheilor sau ocolirea +restricțiilor de licențiere. Aceste îndrumări nu modifică licența MIT sau licențele terților. diff --git a/docs/readme/README_ru.md b/docs/readme/README_ru.md index 8a6b39fcbb..698aa2b873 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Реверс-инжиниринг чего угодно diff --git a/docs/readme/README_th.md b/docs/readme/README_th.md index 2107f9b623..cb675ae3b3 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_tr.md b/docs/readme/README_tr.md index 71e2b7911c..c1e426e53f 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Her şeyi tersine mühendislikle inceleyin diff --git a/docs/readme/README_uk.md b/docs/readme/README_uk.md index a979a7ebe7..9276177686 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA: Реверс-інжиніринг будь-чого diff --git a/docs/readme/README_ur-Latn.md b/docs/readme/README_ur-Latn.md index 52511d377a..3308b2f5bc 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** +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · **Roman Urdu** · [Română](README_ro.md) # REA: Reverse Engineer Anything diff --git a/docs/readme/README_vi.md b/docs/readme/README_vi.md index 3a4b81a42d..c454100b09 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.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 49c78ebbc4..6e6f07ca4d 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA:逆向一切 diff --git a/docs/readme/README_zh.md b/docs/readme/README_zh.md index 8f2dc58712..dc8713cba4 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) +· [Ελληνικά](README_el.md) · [മലയാളം](README_ml.md) · [Roman Urdu](README_ur-Latn.md) · [Română](README_ro.md) # REA:逆向一切 diff --git a/website/locales/README.md b/website/locales/README.md index 048920e79d..0779b50400 100644 --- a/website/locales/README.md +++ b/website/locales/README.md @@ -135,6 +135,10 @@ English technical terms retained. Its text direction is left to right. The website catalog is pending and uses the same labeled, nonindexable English fallback; the README does not establish a translated website. +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. + 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/languages.json b/website/locales/languages.json index 739221c543..2b396ce398 100644 --- a/website/locales/languages.json +++ b/website/locales/languages.json @@ -130,5 +130,11 @@ "name": "Roman Urdu", "readme": "docs/readme/README_ur-Latn.md", "dir": "ltr" + }, + { + "code": "ro", + "name": "Română", + "readme": "docs/readme/README_ro.md", + "dir": "ltr" } ] diff --git a/website/locales/messages.pot b/website/locales/messages.pot index 8bc6f31b7b..e2f66a7b5c 100644 --- a/website/locales/messages.pot +++ b/website/locales/messages.pot @@ -6,49 +6,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: website/public/blog/index.html:109 +#: website/public/blog/index.html:111 msgctxt "page:blog/index.html" msgid "Skip to content" msgstr "" -#: website/public/blog/index.html:119 -#: website/public/blog/reverse-engineering-models/index.html:119 -#: website/public/blog/touhou-reconstruction/index.html:119 -#: website/public/contributors/index.html:120 -#: website/public/examples/dino-lab/index.html:120 website/public/faq/index.html:119 -#: website/public/first-investigation/index.html:119 -#: website/public/get-started/index.html:119 -#: website/public/guides/browser/index.html:119 website/public/guides/index.html:119 -#: website/public/guides/javascript/index.html:119 -#: website/public/guides/native/index.html:119 website/public/index.html:121 -#: website/public/showcase/aegis/index.html:120 -#: website/public/showcase/ctf/index.html:119 -#: website/public/showcase/dx-ball/index.html:119 website/public/showcase/index.html:119 -#: website/public/showcase/notion/index.html:119 -#: website/public/showcase/th04/index.html:119 -msgctxt "shared" -msgid "Get started" -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/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 -msgctxt "shared" -msgid "Showcases" -msgstr "" - #: website/public/blog/index.html:121 #: website/public/blog/reverse-engineering-models/index.html:121 #: website/public/blog/touhou-reconstruction/index.html:121 @@ -65,7 +27,7 @@ msgstr "" #: website/public/showcase/notion/index.html:121 #: website/public/showcase/th04/index.html:121 msgctxt "shared" -msgid "Blog" +msgid "Get started" msgstr "" #: website/public/blog/index.html:122 @@ -84,149 +46,149 @@ msgstr "" #: 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 +#: 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/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 "Blog" +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/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 "Guides" msgstr "" -#: website/public/blog/index.html:124 website/public/blog/index.html:243 -#: website/public/blog/reverse-engineering-models/index.html:124 -#: website/public/blog/reverse-engineering-models/index.html:882 -#: website/public/blog/touhou-reconstruction/index.html:124 -#: website/public/blog/touhou-reconstruction/index.html:1079 -#: website/public/contributors/index.html:125 -#: website/public/contributors/index.html:1130 -#: website/public/examples/dino-lab/index.html:125 -#: website/public/examples/dino-lab/index.html:474 website/public/faq/index.html:124 -#: website/public/faq/index.html:572 website/public/first-investigation/index.html:124 -#: website/public/first-investigation/index.html:533 -#: website/public/get-started/index.html:124 website/public/get-started/index.html:1816 -#: website/public/guides/browser/index.html:124 -#: website/public/guides/browser/index.html:506 website/public/guides/index.html:124 -#: website/public/guides/index.html:281 website/public/guides/javascript/index.html:124 -#: website/public/guides/javascript/index.html:502 -#: website/public/guides/native/index.html:124 -#: website/public/guides/native/index.html:508 website/public/index.html:126 -#: website/public/index.html:1221 website/public/showcase/aegis/index.html:125 -#: website/public/showcase/aegis/index.html:807 -#: website/public/showcase/ctf/index.html:124 website/public/showcase/ctf/index.html:776 -#: website/public/showcase/dx-ball/index.html:124 -#: website/public/showcase/dx-ball/index.html:784 website/public/showcase/index.html:124 -#: website/public/showcase/index.html:316 website/public/showcase/notion/index.html:124 -#: website/public/showcase/notion/index.html:630 -#: website/public/showcase/th04/index.html:124 -#: website/public/showcase/th04/index.html:799 +#: website/public/blog/index.html:126 website/public/blog/index.html:245 +#: website/public/blog/reverse-engineering-models/index.html:126 +#: website/public/blog/reverse-engineering-models/index.html:884 +#: website/public/blog/touhou-reconstruction/index.html:126 +#: website/public/blog/touhou-reconstruction/index.html:1081 +#: website/public/contributors/index.html:127 +#: website/public/contributors/index.html:1132 +#: website/public/examples/dino-lab/index.html:127 +#: website/public/examples/dino-lab/index.html:476 website/public/faq/index.html:126 +#: website/public/faq/index.html:574 website/public/first-investigation/index.html:126 +#: website/public/first-investigation/index.html:535 +#: website/public/get-started/index.html:126 website/public/get-started/index.html:1818 +#: website/public/guides/browser/index.html:126 +#: website/public/guides/browser/index.html:508 website/public/guides/index.html:126 +#: website/public/guides/index.html:283 website/public/guides/javascript/index.html:126 +#: website/public/guides/javascript/index.html:504 +#: website/public/guides/native/index.html:126 +#: website/public/guides/native/index.html:510 website/public/index.html:128 +#: website/public/index.html:1223 website/public/showcase/aegis/index.html:127 +#: website/public/showcase/aegis/index.html:809 +#: website/public/showcase/ctf/index.html:126 website/public/showcase/ctf/index.html:778 +#: website/public/showcase/dx-ball/index.html:126 +#: website/public/showcase/dx-ball/index.html:786 website/public/showcase/index.html:126 +#: website/public/showcase/index.html:318 website/public/showcase/notion/index.html:126 +#: website/public/showcase/notion/index.html:632 +#: website/public/showcase/th04/index.html:126 +#: website/public/showcase/th04/index.html:801 msgctxt "shared" msgid "Contributors" 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:1817 -#: website/public/guides/browser/index.html:507 website/public/guides/index.html:282 -#: website/public/guides/javascript/index.html:503 -#: website/public/guides/native/index.html:509 website/public/index.html:1222 -#: website/public/showcase/aegis/index.html:808 -#: website/public/showcase/ctf/index.html:777 -#: website/public/showcase/dx-ball/index.html:785 website/public/showcase/index.html:317 -#: website/public/showcase/notion/index.html:631 -#: website/public/showcase/th04/index.html:800 -msgctxt "shared" -msgid "Source" -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:1818 -#: website/public/guides/browser/index.html:508 website/public/guides/index.html:283 -#: website/public/guides/javascript/index.html:504 -#: website/public/guides/native/index.html:510 website/public/index.html:1223 -#: website/public/showcase/aegis/index.html:809 -#: website/public/showcase/ctf/index.html:778 -#: website/public/showcase/dx-ball/index.html:786 website/public/showcase/index.html:318 -#: website/public/showcase/notion/index.html:632 -#: website/public/showcase/th04/index.html:801 -msgctxt "shared" -msgid "MIT license" -msgstr "" - #: website/public/blog/index.html:246 #: website/public/blog/reverse-engineering-models/index.html:885 #: website/public/blog/touhou-reconstruction/index.html:1082 @@ -243,7 +205,7 @@ msgstr "" #: website/public/showcase/notion/index.html:633 #: website/public/showcase/th04/index.html:802 msgctxt "shared" -msgid "Join the community" +msgid "Source" msgstr "" #: website/public/blog/index.html:247 @@ -262,26 +224,64 @@ msgstr "" #: website/public/showcase/notion/index.html:634 #: website/public/showcase/th04/index.html:803 msgctxt "shared" +msgid "MIT license" +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:1821 +#: website/public/guides/browser/index.html:511 website/public/guides/index.html:286 +#: website/public/guides/javascript/index.html:507 +#: website/public/guides/native/index.html:513 website/public/index.html:1226 +#: website/public/showcase/aegis/index.html:812 +#: website/public/showcase/ctf/index.html:781 +#: website/public/showcase/dx-ball/index.html:789 website/public/showcase/index.html:321 +#: website/public/showcase/notion/index.html:635 +#: website/public/showcase/th04/index.html:804 +msgctxt "shared" +msgid "Join the community" +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:1822 +#: website/public/guides/browser/index.html:512 website/public/guides/index.html:287 +#: website/public/guides/javascript/index.html:508 +#: website/public/guides/native/index.html:514 website/public/index.html:1227 +#: website/public/showcase/aegis/index.html:813 +#: website/public/showcase/ctf/index.html:782 +#: website/public/showcase/dx-ball/index.html:790 website/public/showcase/index.html:322 +#: website/public/showcase/notion/index.html:636 +#: website/public/showcase/th04/index.html:805 +msgctxt "shared" msgid "Follow us on X" msgstr "" #. {ph0}: -#: website/public/blog/index.html:252 -#: website/public/blog/reverse-engineering-models/index.html:891 -#: website/public/blog/touhou-reconstruction/index.html:1088 -#: website/public/contributors/index.html:1139 -#: website/public/examples/dino-lab/index.html:483 website/public/faq/index.html:581 -#: website/public/first-investigation/index.html:542 -#: website/public/get-started/index.html:1825 -#: website/public/guides/browser/index.html:515 website/public/guides/index.html:290 -#: website/public/guides/javascript/index.html:511 -#: website/public/guides/native/index.html:517 website/public/index.html:1230 -#: website/public/showcase/aegis/index.html:816 -#: website/public/showcase/ctf/index.html:785 -#: website/public/showcase/dx-ball/index.html:793 website/public/showcase/index.html:325 -#: website/public/showcase/notion/index.html:639 -#: website/public/showcase/th04/index.html:808 +#: website/public/blog/index.html:254 +#: website/public/blog/reverse-engineering-models/index.html:893 +#: website/public/blog/touhou-reconstruction/index.html:1090 +#: website/public/contributors/index.html:1141 +#: website/public/examples/dino-lab/index.html:485 website/public/faq/index.html:583 +#: website/public/first-investigation/index.html:544 +#: website/public/get-started/index.html:1827 +#: website/public/guides/browser/index.html:517 website/public/guides/index.html:292 +#: website/public/guides/javascript/index.html:513 +#: website/public/guides/native/index.html:519 website/public/index.html:1232 +#: website/public/showcase/aegis/index.html:818 +#: website/public/showcase/ctf/index.html:787 +#: website/public/showcase/dx-ball/index.html:795 website/public/showcase/index.html:327 +#: website/public/showcase/notion/index.html:641 +#: website/public/showcase/th04/index.html:810 #, python-brace-format msgctxt "shared" msgid "{ph0}↑{ph1} Top" @@ -299,136 +299,136 @@ msgid "" "agents." msgstr "" -#: website/public/blog/index.html:81 website/public/blog/index.html:94 -#: website/public/blog/reverse-engineering-models/index.html:81 -#: website/public/blog/reverse-engineering-models/index.html:94 -#: website/public/blog/touhou-reconstruction/index.html:81 -#: website/public/blog/touhou-reconstruction/index.html:94 -#: website/public/contributors/index.html:81 website/public/contributors/index.html:94 -#: website/public/examples/dino-lab/index.html:81 -#: website/public/examples/dino-lab/index.html:94 website/public/faq/index.html:81 -#: website/public/faq/index.html:94 website/public/first-investigation/index.html:81 -#: website/public/first-investigation/index.html:94 -#: website/public/get-started/index.html:81 website/public/get-started/index.html:94 -#: website/public/guides/browser/index.html:81 -#: website/public/guides/browser/index.html:94 website/public/guides/index.html:81 -#: website/public/guides/index.html:94 website/public/guides/javascript/index.html:81 -#: website/public/guides/javascript/index.html:94 -#: website/public/guides/native/index.html:81 website/public/guides/native/index.html:94 -#: website/public/index.html:81 website/public/index.html:94 -#: website/public/showcase/aegis/index.html:81 -#: website/public/showcase/aegis/index.html:94 website/public/showcase/ctf/index.html:81 -#: website/public/showcase/ctf/index.html:94 -#: website/public/showcase/dx-ball/index.html:81 -#: website/public/showcase/dx-ball/index.html:94 website/public/showcase/index.html:81 -#: website/public/showcase/index.html:94 website/public/showcase/notion/index.html:81 -#: website/public/showcase/notion/index.html:94 -#: website/public/showcase/th04/index.html:81 website/public/showcase/th04/index.html:94 +#: 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/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 msgctxt "shared" msgid "REA — Find out how software works. Reverse engineering with your coding agent." msgstr "" -#: website/public/blog/index.html:114 -#: website/public/blog/reverse-engineering-models/index.html:114 -#: website/public/blog/touhou-reconstruction/index.html:114 -#: website/public/contributors/index.html:115 -#: website/public/examples/dino-lab/index.html:115 website/public/faq/index.html:114 -#: website/public/first-investigation/index.html:114 -#: website/public/get-started/index.html:114 -#: website/public/guides/browser/index.html:114 website/public/guides/index.html:114 -#: website/public/guides/javascript/index.html:114 -#: website/public/guides/native/index.html:114 website/public/index.html:116 -#: website/public/showcase/aegis/index.html:115 -#: website/public/showcase/ctf/index.html:114 -#: website/public/showcase/dx-ball/index.html:114 website/public/showcase/index.html:114 -#: website/public/showcase/notion/index.html:114 -#: website/public/showcase/th04/index.html:114 +#: 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/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 msgctxt "shared" msgid "REA home" 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/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 +#: 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/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 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/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/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/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/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/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/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:252 +#: website/public/blog/index.html:254 msgctxt "page:blog/index.html" msgid "Back to top" msgstr "" -#: website/public/blog/reverse-engineering-models/index.html:109 +#: website/public/blog/reverse-engineering-models/index.html:111 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Skip to content" msgstr "" @@ -437,35 +437,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 "" @@ -475,7 +475,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 "" @@ -485,7 +485,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 "" @@ -495,7 +495,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 "" @@ -505,7 +505,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 "" @@ -513,14 +513,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}" @@ -528,7 +528,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}" @@ -536,7 +536,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}" @@ -544,7 +544,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}" @@ -552,7 +552,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}" @@ -560,7 +560,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}" @@ -568,7 +568,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}" @@ -576,18 +576,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 " @@ -596,7 +596,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" @@ -605,12 +605,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 " @@ -627,7 +627,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 "" @@ -636,7 +636,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 " @@ -647,7 +647,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 "" @@ -656,7 +656,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 " @@ -664,7 +664,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 "" @@ -673,7 +673,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 "" @@ -691,7 +691,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 "" @@ -703,7 +703,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 "" @@ -713,7 +713,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 " @@ -722,7 +722,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 " @@ -731,12 +731,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 " @@ -745,7 +745,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 " @@ -760,7 +760,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 "" @@ -771,14 +771,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 " @@ -786,7 +786,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 " @@ -800,7 +800,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 "" @@ -812,14 +812,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 "" @@ -829,7 +829,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 " @@ -841,7 +841,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 "" @@ -853,7 +853,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 "" @@ -864,7 +864,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 " @@ -872,12 +872,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 " @@ -886,7 +886,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 " @@ -894,66 +894,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." @@ -964,7 +964,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 "" @@ -974,7 +974,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 " @@ -983,12 +983,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. " @@ -997,7 +997,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 " @@ -1009,7 +1009,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 "" @@ -1024,7 +1024,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 "" @@ -1035,7 +1035,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 " @@ -1043,12 +1043,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. " @@ -1056,7 +1056,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 " @@ -1072,7 +1072,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 "" @@ -1083,7 +1083,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 "" @@ -1095,7 +1095,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 "" @@ -1106,7 +1106,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 " @@ -1118,7 +1118,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 "" @@ -1127,12 +1127,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." @@ -1142,7 +1142,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 " @@ -1151,7 +1151,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 " @@ -1160,7 +1160,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" @@ -1169,7 +1169,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. " @@ -1179,7 +1179,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 " @@ -1191,7 +1191,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 "" @@ -1203,7 +1203,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 " @@ -1212,12 +1212,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 " @@ -1227,7 +1227,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 " @@ -1235,7 +1235,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. " @@ -1244,7 +1244,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 " @@ -1255,7 +1255,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 "" @@ -1263,7 +1263,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 "" @@ -1271,7 +1271,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 "" @@ -1279,7 +1279,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 " @@ -1289,7 +1289,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 "" @@ -1309,7 +1309,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 "" @@ -1331,7 +1331,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 "" @@ -1353,7 +1353,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 "" @@ -1375,7 +1375,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 "" @@ -1383,7 +1383,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 " @@ -1402,27 +1402,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:891 +#: website/public/blog/reverse-engineering-models/index.html:893 msgctxt "page:blog/reverse-engineering-models/index.html" msgid "Back to top" msgstr "" -#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:111 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Skip to content" msgstr "" @@ -1431,35 +1431,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 "" @@ -1469,7 +1469,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 "" @@ -1479,7 +1479,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 "" @@ -1489,7 +1489,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 "" @@ -1499,7 +1499,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 "" @@ -1507,65 +1507,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." @@ -1574,7 +1574,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}" @@ -1583,40 +1583,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}" @@ -1624,7 +1624,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}" @@ -1632,7 +1632,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}" @@ -1640,7 +1640,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}" @@ -1648,7 +1648,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}" @@ -1656,7 +1656,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}" @@ -1664,7 +1664,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}" @@ -1672,18 +1672,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 " @@ -1692,7 +1692,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" @@ -1701,7 +1701,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" @@ -1709,7 +1709,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 " @@ -1719,14 +1719,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 "" @@ -1735,7 +1735,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 "" @@ -1745,7 +1745,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 " @@ -1753,7 +1753,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 " @@ -1761,7 +1761,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" @@ -1772,7 +1772,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 "" @@ -1783,12 +1783,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 " @@ -1797,7 +1797,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 "" @@ -1806,7 +1806,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 " @@ -1817,13 +1817,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" @@ -1834,7 +1834,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 "" @@ -1847,7 +1847,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 "" @@ -1857,7 +1857,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 " @@ -1867,7 +1867,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 "" @@ -1875,7 +1875,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 " @@ -1887,7 +1887,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 "" @@ -1898,7 +1898,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 "" @@ -1906,7 +1906,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 "" @@ -1915,7 +1915,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 "" @@ -1924,14 +1924,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 " @@ -1941,7 +1941,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 " @@ -1950,7 +1950,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 " @@ -1958,7 +1958,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. " @@ -1967,7 +1967,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 " @@ -1975,7 +1975,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 " @@ -1984,7 +1984,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 " @@ -2004,7 +2004,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 "" @@ -2013,14 +2013,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 "" @@ -2030,7 +2030,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 " @@ -2039,7 +2039,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 " @@ -2047,7 +2047,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 " @@ -2056,7 +2056,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 " @@ -2064,7 +2064,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 " @@ -2074,7 +2074,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 "" @@ -2082,7 +2082,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" @@ -2090,7 +2090,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 "" @@ -2099,7 +2099,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 "" @@ -2109,7 +2109,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 " @@ -2117,7 +2117,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 " @@ -2125,7 +2125,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" @@ -2134,7 +2134,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 " @@ -2142,7 +2142,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 " @@ -2156,7 +2156,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 "" @@ -2164,17 +2164,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 " @@ -2184,7 +2184,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 "" @@ -2195,7 +2195,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 " @@ -2204,14 +2204,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 "" @@ -2222,7 +2222,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 "" @@ -2234,7 +2234,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 "" @@ -2246,7 +2246,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 "" @@ -2257,7 +2257,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 "" @@ -2267,7 +2267,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 " @@ -2276,7 +2276,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 " @@ -2289,7 +2289,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 "" @@ -2301,7 +2301,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 "" @@ -2309,12 +2309,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 " @@ -2323,7 +2323,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 " @@ -2332,7 +2332,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 " @@ -2341,7 +2341,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" @@ -2350,7 +2350,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 " @@ -2362,7 +2362,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 "" @@ -2375,7 +2375,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 "" @@ -2386,7 +2386,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 " @@ -2396,7 +2396,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 "" @@ -2405,7 +2405,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" @@ -2413,12 +2413,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" @@ -2426,7 +2426,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. " @@ -2437,7 +2437,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 "" @@ -2445,7 +2445,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 " @@ -2453,12 +2453,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" @@ -2486,7 +2486,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 "" @@ -2517,7 +2517,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 "" @@ -2532,7 +2532,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 "" @@ -2552,7 +2552,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 "" @@ -2570,7 +2570,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 "" @@ -2583,7 +2583,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 "" @@ -2599,7 +2599,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 "" @@ -2611,7 +2611,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}" @@ -2629,72 +2629,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:1088 +#: website/public/blog/touhou-reconstruction/index.html:1090 msgctxt "page:blog/touhou-reconstruction/index.html" msgid "Back to top" msgstr "" -#: website/public/contributors/index.html:110 +#: website/public/contributors/index.html:112 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 "" @@ -2702,13 +2702,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 "" @@ -2723,17 +2723,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:1139 +#: website/public/contributors/index.html:1141 msgctxt "page:contributors/index.html" msgid "Back to top" msgstr "" -#: website/public/examples/dino-lab/index.html:110 +#: website/public/examples/dino-lab/index.html:112 msgctxt "page:examples/dino-lab/index.html" msgid "Skip to content" msgstr "" @@ -2742,18 +2742,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 "" @@ -2762,7 +2762,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 "" @@ -2771,15 +2771,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}" @@ -2787,7 +2787,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}" @@ -2795,7 +2795,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}" @@ -2803,18 +2803,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" @@ -2822,54 +2822,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 "" @@ -2877,7 +2877,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 "" @@ -2885,7 +2885,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 "" @@ -2893,7 +2893,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 "" @@ -2901,25 +2901,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 " @@ -2931,59 +2931,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." @@ -2992,13 +2992,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." @@ -3012,7 +3012,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" @@ -3024,7 +3024,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 "" @@ -3034,7 +3034,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 "" @@ -3047,7 +3047,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 "" @@ -3067,63 +3067,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:483 +#: website/public/examples/dino-lab/index.html:485 msgctxt "page:examples/dino-lab/index.html" msgid "Back to top" msgstr "" -#: website/public/faq/index.html:109 +#: website/public/faq/index.html:111 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}" @@ -3131,7 +3131,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}" @@ -3139,7 +3139,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}" @@ -3147,24 +3147,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 "" @@ -3172,22 +3172,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 "" @@ -3196,12 +3196,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," @@ -3212,29 +3212,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 "" @@ -3242,13 +3242,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 "" @@ -3257,14 +3257,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 "" @@ -3273,24 +3273,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 "" @@ -3300,7 +3300,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 "" @@ -3309,7 +3309,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." @@ -3317,7 +3317,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 "" @@ -3325,12 +3325,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" @@ -3339,7 +3339,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 "" @@ -3348,25 +3348,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 "" @@ -3374,12 +3374,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 " @@ -3391,7 +3391,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 "" @@ -3400,12 +3400,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 " @@ -3420,7 +3420,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" @@ -3433,7 +3433,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 "" @@ -3443,7 +3443,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 "" @@ -3451,18 +3451,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 "" @@ -3470,7 +3470,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 "" @@ -3478,7 +3478,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 "" @@ -3486,14 +3486,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 "" @@ -3501,14 +3501,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 "" @@ -3517,14 +3517,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 "" @@ -3534,7 +3534,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 "" @@ -3543,24 +3543,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 "" @@ -3569,7 +3569,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 "" @@ -3580,7 +3580,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 "" @@ -3600,77 +3600,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:581 +#: website/public/faq/index.html:583 msgctxt "page:faq/index.html" msgid "Back to top" msgstr "" -#: website/public/first-investigation/index.html:109 +#: website/public/first-investigation/index.html:111 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 " @@ -3678,20 +3678,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}" @@ -3699,7 +3699,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}" @@ -3707,7 +3707,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}" @@ -3715,7 +3715,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}" @@ -3723,13 +3723,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 "" @@ -3737,7 +3737,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 "" @@ -3753,20 +3753,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 "" @@ -3778,7 +3778,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 "" @@ -3786,26 +3786,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 "" @@ -3821,7 +3821,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 "" @@ -3830,7 +3830,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." @@ -3839,14 +3839,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 "" @@ -3854,12 +3854,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 "" @@ -3868,7 +3868,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 "" @@ -3876,7 +3876,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 "" @@ -3889,7 +3889,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}" @@ -3903,7 +3903,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 "" @@ -3920,7 +3920,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 "" @@ -3928,7 +3928,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" @@ -3936,18 +3936,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 " @@ -3956,18 +3956,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 " @@ -3983,7 +3983,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 "" @@ -3992,13 +3992,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 "" @@ -4006,34 +4006,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." @@ -4043,7 +4043,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 "" @@ -4055,7 +4055,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 "" @@ -4067,7 +4067,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 "" @@ -4087,66 +4087,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:542 +#: website/public/first-investigation/index.html:544 msgctxt "page:first-investigation/index.html" msgid "Back to top" msgstr "" -#: website/public/get-started/index.html:109 +#: website/public/get-started/index.html:111 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." @@ -4154,7 +4154,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 "" @@ -4162,14 +4162,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}" @@ -4177,7 +4177,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}" @@ -4185,7 +4185,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}" @@ -4193,7 +4193,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}" @@ -4201,7 +4201,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}" @@ -4209,7 +4209,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}" @@ -4217,25 +4217,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 "" @@ -4244,7 +4244,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 "" @@ -4257,7 +4257,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." @@ -4268,7 +4268,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." @@ -4281,7 +4281,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 "" @@ -4289,7 +4289,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 " @@ -4298,7 +4298,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 "" @@ -4307,47 +4307,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:746 website/public/get-started/index.html:776 -#: website/public/get-started/index.html:801 website/public/get-started/index.html:816 -#: website/public/get-started/index.html:864 website/public/get-started/index.html:897 -#: website/public/get-started/index.html:1049 website/public/get-started/index.html:1111 -#: website/public/get-started/index.html:1134 website/public/get-started/index.html:1158 -#: website/public/get-started/index.html:1206 website/public/get-started/index.html:1281 -#: website/public/get-started/index.html:1307 website/public/get-started/index.html:1324 -#: website/public/get-started/index.html:1567 website/public/get-started/index.html:1626 -#: website/public/get-started/index.html:1645 website/public/get-started/index.html:1667 -#: website/public/get-started/index.html:1710 website/public/get-started/index.html:1740 -#: website/public/get-started/index.html:1761 +#: 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:748 website/public/get-started/index.html:778 +#: website/public/get-started/index.html:803 website/public/get-started/index.html:818 +#: website/public/get-started/index.html:866 website/public/get-started/index.html:899 +#: website/public/get-started/index.html:1051 website/public/get-started/index.html:1113 +#: website/public/get-started/index.html:1136 website/public/get-started/index.html:1160 +#: website/public/get-started/index.html:1208 website/public/get-started/index.html:1283 +#: website/public/get-started/index.html:1309 website/public/get-started/index.html:1326 +#: website/public/get-started/index.html:1569 website/public/get-started/index.html:1628 +#: website/public/get-started/index.html:1647 website/public/get-started/index.html:1669 +#: website/public/get-started/index.html:1712 website/public/get-started/index.html:1742 +#: website/public/get-started/index.html:1763 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 "" @@ -4356,7 +4356,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 "" @@ -4365,7 +4365,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." @@ -4376,7 +4376,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 "" @@ -4386,7 +4386,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 "" @@ -4394,13 +4394,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 "" @@ -4408,14 +4408,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 "" @@ -4425,59 +4425,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 " @@ -4486,28 +4486,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 " @@ -4520,7 +4520,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 "" @@ -4528,18 +4528,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 "" @@ -4549,18 +4549,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 " @@ -4569,7 +4569,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 "" @@ -4582,20 +4582,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 "" @@ -4605,19 +4605,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 "" @@ -4625,12 +4625,12 @@ msgid "" "a client explicitly." 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 "" @@ -4640,7 +4640,7 @@ msgstr "" #. {ph2}: trae #. {ph3}: zcode #. {ph4}: dsh -#: website/public/get-started/index.html:719 +#: website/public/get-started/index.html:721 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4656,20 +4656,20 @@ msgstr "" #. href="https://github.com/morluto/rea/blob/main/docs/installation.md#released-package- #. and-main" > #. {ph3}: -#: website/public/get-started/index.html:726 +#: website/public/get-started/index.html:728 #, 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:738 +#: website/public/get-started/index.html:740 msgctxt "page:get-started/index.html" msgid "Grok Bot · connect on its hosted computer" msgstr "" #. {ph0}: rea -#: website/public/get-started/index.html:739 +#: website/public/get-started/index.html:741 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4680,18 +4680,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: 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}Grok Bot connector instructions{ph1}" msgstr "" -#: website/public/get-started/index.html:767 +#: website/public/get-started/index.html:769 msgctxt "page:get-started/index.html" msgid "3. Connect REA" msgstr "" -#: website/public/get-started/index.html:768 +#: website/public/get-started/index.html:770 msgctxt "page:get-started/index.html" msgid "Copy this into your coding agent:" msgstr "" @@ -4704,7 +4704,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/get-started/index.html:771 +#: website/public/get-started/index.html:773 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" @@ -4717,7 +4717,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/get-started/index.html:785 +#: website/public/get-started/index.html:787 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4725,18 +4725,18 @@ msgid "" "the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}" msgstr "" -#: website/public/get-started/index.html:797 +#: website/public/get-started/index.html:799 msgctxt "page:get-started/index.html" msgid "Or run setup yourself" msgstr "" -#: website/public/get-started/index.html:812 +#: website/public/get-started/index.html:814 msgctxt "page:get-started/index.html" msgid "For one specific client, add its setup ID:" msgstr "" #. {ph0}: y -#: website/public/get-started/index.html:827 +#: website/public/get-started/index.html:829 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4744,7 +4744,7 @@ msgid "" " use the arrow keys to move, Space to select your client and Enter to continue." msgstr "" -#: website/public/get-started/index.html:833 +#: website/public/get-started/index.html:835 msgctxt "page:get-started/index.html" msgid "" "Choose your client and review the setup plan. REA adds its MCP connection and the " @@ -4752,21 +4752,21 @@ msgid "" "before applying the changes." msgstr "" -#: website/public/get-started/index.html:838 +#: website/public/get-started/index.html:840 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:842 +#: website/public/get-started/index.html:844 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:847 +#: website/public/get-started/index.html:849 msgctxt "page:get-started/index.html" msgid "How do I restart my client?" msgstr "" @@ -4775,7 +4775,7 @@ msgstr "" #. {ph1}: #. {ph2}: ⌘ #. {ph3}: Q -#: website/public/get-started/index.html:848 +#: website/public/get-started/index.html:850 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4786,7 +4786,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:855 +#: website/public/get-started/index.html:857 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4796,7 +4796,7 @@ msgstr "" #. {ph0}: codex #. {ph1}: "healthy": true -#: website/public/get-started/index.html:875 +#: website/public/get-started/index.html:877 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4804,19 +4804,19 @@ msgid "" "your agent:" msgstr "" -#: website/public/get-started/index.html:881 +#: website/public/get-started/index.html:883 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:888 +#: website/public/get-started/index.html:890 msgctxt "page:get-started/index.html" msgid "4. Try your first investigation" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:889 +#: website/public/get-started/index.html:891 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4824,7 +4824,7 @@ msgid "" "agent can inspect its code without installing or launching Electron." msgstr "" -#: website/public/get-started/index.html:896 +#: website/public/get-started/index.html:898 msgctxt "page:get-started/index.html" msgid "Your coding agent" msgstr "" @@ -4837,7 +4837,7 @@ msgstr "" #. {ph5}: #. {ph6}: -#: website/public/get-started/index.html:906 +#: website/public/get-started/index.html:908 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4846,7 +4846,7 @@ msgid "" " it contains, and the relevant files and lines.{ph5}{ph6}{ph7}" msgstr "" -#: website/public/get-started/index.html:920 +#: website/public/get-started/index.html:922 msgctxt "page:get-started/index.html" msgid "Look for a short explanation with file and line references:" msgstr "" @@ -4855,7 +4855,7 @@ msgstr "" #. {ph1}: notes.csv #. {ph2}: id #. {ph3}: title -#: website/public/get-started/index.html:922 +#: website/public/get-started/index.html:924 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4865,13 +4865,13 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:929 +#: website/public/get-started/index.html:931 #, 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:935 +#: website/public/get-started/index.html:937 msgctxt "page:get-started/index.html" msgid "Download the example yourself, or use your own app" msgstr "" @@ -4879,14 +4879,14 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:938 +#: website/public/get-started/index.html:940 #, 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:946 +#: website/public/get-started/index.html:948 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4895,7 +4895,7 @@ msgid "" msgstr "" #. {ph0}: /absolute/path/to/app -#: website/public/get-started/index.html:952 +#: website/public/get-started/index.html:954 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4903,7 +4903,7 @@ msgid "" "files and lines." msgstr "" -#: website/public/get-started/index.html:959 +#: website/public/get-started/index.html:961 msgctxt "page:get-started/index.html" msgid "How do I get a folder's full path?" msgstr "" @@ -4912,7 +4912,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:961 +#: website/public/get-started/index.html:963 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4924,7 +4924,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:966 +#: website/public/get-started/index.html:968 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -4934,90 +4934,90 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:970 +#: website/public/get-started/index.html:972 #, 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:975 website/public/get-started/index.html:1733 +#: website/public/get-started/index.html:977 website/public/get-started/index.html:1735 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:982 +#: website/public/get-started/index.html:984 msgctxt "page:get-started/index.html" msgid "Analyze another kind of software" msgstr "" -#: website/public/get-started/index.html:983 +#: website/public/get-started/index.html:985 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:988 +#: website/public/get-started/index.html:990 msgctxt "page:get-started/index.html" msgid "Native executables and libraries · Hopper, Ghidra or IDA" msgstr "" -#: website/public/get-started/index.html:991 +#: website/public/get-started/index.html:993 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:1000 +#: website/public/get-started/index.html:1002 msgctxt "page:get-started/index.html" msgid "Provider" msgstr "" -#: website/public/get-started/index.html:1009 +#: website/public/get-started/index.html:1011 msgctxt "page:get-started/index.html" msgid "Unavailable" msgstr "" -#: website/public/get-started/index.html:1011 +#: website/public/get-started/index.html:1013 msgctxt "page:get-started/index.html" msgid "Supported distributions" msgstr "" -#: website/public/get-started/index.html:1015 +#: website/public/get-started/index.html:1017 msgctxt "page:get-started/index.html" msgid "x64 · experimental" msgstr "" -#: website/public/get-started/index.html:1021 +#: website/public/get-started/index.html:1023 msgctxt "page:get-started/index.html" msgid "Verified profiles" msgstr "" -#: website/public/get-started/index.html:1022 +#: website/public/get-started/index.html:1024 msgctxt "page:get-started/index.html" msgid "Verified headless profile" msgstr "" -#: website/public/get-started/index.html:1023 +#: website/public/get-started/index.html:1025 msgctxt "page:get-started/index.html" msgid "See provider guide" msgstr "" -#: website/public/get-started/index.html:1029 +#: website/public/get-started/index.html:1031 msgctxt "page:get-started/index.html" msgid "Hopper · let setup install or connect it" msgstr "" -#: website/public/get-started/index.html:1030 +#: website/public/get-started/index.html:1032 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:1035 +#: website/public/get-started/index.html:1037 msgctxt "page:get-started/index.html" msgid "" "Choose Hopper in setup and review its separate installation plan. On macOS, choose " @@ -5025,14 +5025,14 @@ msgid "" "the supported demo and its private display." msgstr "" -#: website/public/get-started/index.html:1041 +#: website/public/get-started/index.html:1043 msgctxt "page:get-started/index.html" msgid "" "Linux hosts: Ubuntu 24.04+, Fedora 41+, Nobara 44+, Arch Linux, CachyOS or Omarchy. " "Hopper is commercial software; its demo has vendor-defined limits." msgstr "" -#: website/public/get-started/index.html:1060 +#: website/public/get-started/index.html:1062 msgctxt "page:get-started/index.html" msgid "" "If macOS asks for Automation permission, allow the app that starts REA in System " @@ -5042,18 +5042,18 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1065 +#: website/public/get-started/index.html:1067 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Hopper setup and troubleshooting{ph1}" msgstr "" -#: website/public/get-started/index.html:1073 +#: website/public/get-started/index.html:1075 msgctxt "page:get-started/index.html" msgid "Ghidra · install the free analysis tool and Java" msgstr "" -#: website/public/get-started/index.html:1077 +#: website/public/get-started/index.html:1079 msgctxt "page:get-started/index.html" msgid "" "Install a 64-bit JDK 21 or newer, including the Java compiler. Choose the package " @@ -5061,7 +5061,7 @@ msgid "" msgstr "" #. {ph0}: ghidra_…_PUBLIC_….zip -#: website/public/get-started/index.html:1082 +#: website/public/get-started/index.html:1084 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5072,7 +5072,7 @@ msgstr "" #. {ph0}: ghidraRun #. {ph1}: ghidraRun.bat #. {ph2}: GHIDRA_INSTALL_DIR -#: website/public/get-started/index.html:1087 +#: website/public/get-started/index.html:1089 #, python-brace-format msgctxt "page:get-started/index.html" msgid "Find the extracted folder containing {ph0} or {ph1}. Use that folder for {ph2}." @@ -5084,7 +5084,7 @@ msgstr "" #. href="https://github.com/NationalSecurityAgency/ghidra/releases/tag/Ghidra_12.1.4_build" #. > #. {ph3}: -#: website/public/get-started/index.html:1093 +#: website/public/get-started/index.html:1095 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Download a JDK{ph1} · {ph2}Download Ghidra 12.1.4{ph3}" @@ -5092,7 +5092,7 @@ msgstr "" #. {ph0}: java.home #. {ph1}: JAVA_HOME -#: website/public/get-started/index.html:1103 +#: website/public/get-started/index.html:1105 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5100,12 +5100,12 @@ msgid "" "confirms the compiler is installed:" msgstr "" -#: website/public/get-started/index.html:1124 +#: website/public/get-started/index.html:1126 msgctxt "page:get-started/index.html" msgid "Connect Ghidra on Windows" msgstr "" -#: website/public/get-started/index.html:1125 +#: website/public/get-started/index.html:1127 msgctxt "page:get-started/index.html" msgid "" "Windows x64 has experimental, read-only support for native x86 and x64 PE applications" @@ -5113,29 +5113,29 @@ msgid "" " 64-bit JDK 21 or newer:" msgstr "" -#: website/public/get-started/index.html:1148 +#: website/public/get-started/index.html:1150 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:1154 +#: website/public/get-started/index.html:1156 msgctxt "page:get-started/index.html" msgid "Connect your Ghidra installation" msgstr "" -#: website/public/get-started/index.html:1170 +#: website/public/get-started/index.html:1172 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:1176 +#: website/public/get-started/index.html:1178 msgctxt "page:get-started/index.html" msgid "Build Ghidra's native decompiler" msgstr "" -#: website/public/get-started/index.html:1177 +#: website/public/get-started/index.html:1179 msgctxt "page:get-started/index.html" msgid "" "On macOS, the build needs Xcode Command Line Tools, make and bison. Use the guide for " @@ -5146,7 +5146,7 @@ msgstr "" #. href="https://github.com/morluto/rea/blob/main/docs/installation.md#missing-macos- #. native-decompiler" > #. {ph1}: -#: website/public/get-started/index.html:1182 +#: website/public/get-started/index.html:1184 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}macOS · Intel{ph1}" @@ -5155,7 +5155,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1188 +#: website/public/get-started/index.html:1190 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}macOS · Apple Silicon{ph1}" @@ -5165,18 +5165,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:1194 +#: website/public/get-started/index.html:1196 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Linux arm64 · native build instructions{ph1}" msgstr "" -#: website/public/get-started/index.html:1202 +#: website/public/get-started/index.html:1204 msgctxt "page:get-started/index.html" msgid "Then check Ghidra and save its paths for your client:" msgstr "" -#: website/public/get-started/index.html:1219 +#: website/public/get-started/index.html:1221 msgctxt "page:get-started/index.html" msgid "" "Keep these commands in the same terminal session. Rerun setup after setting the paths," @@ -5188,19 +5188,19 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1224 +#: website/public/get-started/index.html:1226 #, 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:1237 +#: website/public/get-started/index.html:1239 msgctxt "page:get-started/index.html" msgid "IDA · connect an existing installation" msgstr "" -#: website/public/get-started/index.html:1238 +#: website/public/get-started/index.html:1240 msgctxt "page:get-started/index.html" msgid "" "Use the IDA provider guide to prepare an upstream MCP registration. Choose an attached" @@ -5208,7 +5208,7 @@ msgid "" "database." msgstr "" -#: website/public/get-started/index.html:1243 +#: website/public/get-started/index.html:1245 msgctxt "page:get-started/index.html" msgid "" "Verified profiles include the Windows legacy GUI and headless supervisor, plus a macOS" @@ -5220,7 +5220,7 @@ msgstr "" #. setup" > #. {ph1}: #. {ph2}: 6.4.0 -#: website/public/get-started/index.html:1249 +#: website/public/get-started/index.html:1251 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5231,21 +5231,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:1258 +#: website/public/get-started/index.html:1260 #, 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:1265 +#: website/public/get-started/index.html:1267 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:1266 +#: website/public/get-started/index.html:1268 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5257,7 +5257,7 @@ msgstr "" #. {ph0}: idb_open #. {ph1}: idb_list #. {ph2}: idb_close -#: website/public/get-started/index.html:1273 +#: website/public/get-started/index.html:1275 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5268,7 +5268,7 @@ msgstr "" #. {ph0}: command #. {ph1}: args #. {ph2}: env -#: website/public/get-started/index.html:1296 +#: website/public/get-started/index.html:1298 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5277,7 +5277,7 @@ msgid "" "before asking REA to inspect it." msgstr "" -#: website/public/get-started/index.html:1338 +#: website/public/get-started/index.html:1340 msgctxt "page:get-started/index.html" msgid "" "Use the JSON registration file you prepared with the provider guide, then rerun setup " @@ -5286,13 +5286,13 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1342 +#: website/public/get-started/index.html:1344 #, 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:1350 +#: website/public/get-started/index.html:1352 msgctxt "page:get-started/index.html" msgid "" "Once connected, give your agent the original executable's full path and name your " @@ -5300,7 +5300,7 @@ msgid "" msgstr "" #. {ph0}: /absolute/path/to/program -#: website/public/get-started/index.html:1355 +#: website/public/get-started/index.html:1357 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5310,130 +5310,130 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1362 +#: website/public/get-started/index.html:1364 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Follow a native analysis example{ph1}" msgstr "" -#: website/public/get-started/index.html:1367 +#: website/public/get-started/index.html:1369 msgctxt "page:get-started/index.html" msgid "Websites, Android, .NET, firmware and other targets" msgstr "" -#: website/public/get-started/index.html:1370 +#: website/public/get-started/index.html:1372 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:1378 +#: website/public/get-started/index.html:1380 msgctxt "page:get-started/index.html" msgid "Target" msgstr "" -#: website/public/get-started/index.html:1379 +#: website/public/get-started/index.html:1381 msgctxt "page:get-started/index.html" msgid "Tools to prepare" msgstr "" -#: website/public/get-started/index.html:1380 +#: website/public/get-started/index.html:1382 msgctxt "page:get-started/index.html" msgid "Guide" msgstr "" -#: website/public/get-started/index.html:1385 +#: website/public/get-started/index.html:1387 msgctxt "page:get-started/index.html" msgid "JavaScript / Electron" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1387 website/public/get-started/index.html:1392 -#: website/public/get-started/index.html:1397 website/public/get-started/index.html:1407 -#: website/public/get-started/index.html:1417 website/public/get-started/index.html:1427 -#: website/public/get-started/index.html:1437 website/public/get-started/index.html:1447 -#: website/public/get-started/index.html:1457 website/public/get-started/index.html:1467 -#: website/public/get-started/index.html:1477 website/public/get-started/index.html:1487 -#: website/public/get-started/index.html:1497 website/public/get-started/index.html:1507 -#: website/public/get-started/index.html:1517 website/public/get-started/index.html:1527 +#: website/public/get-started/index.html:1389 website/public/get-started/index.html:1394 +#: website/public/get-started/index.html:1399 website/public/get-started/index.html:1409 +#: website/public/get-started/index.html:1419 website/public/get-started/index.html:1429 +#: website/public/get-started/index.html:1439 website/public/get-started/index.html:1449 +#: website/public/get-started/index.html:1459 website/public/get-started/index.html:1469 +#: website/public/get-started/index.html:1479 website/public/get-started/index.html:1489 +#: website/public/get-started/index.html:1499 website/public/get-started/index.html:1509 +#: website/public/get-started/index.html:1519 website/public/get-started/index.html:1529 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Open guide{ph1}" msgstr "" -#: website/public/get-started/index.html:1390 +#: website/public/get-started/index.html:1392 msgctxt "page:get-started/index.html" msgid "Website" msgstr "" -#: website/public/get-started/index.html:1395 +#: website/public/get-started/index.html:1397 msgctxt "page:get-started/index.html" msgid ".NET / Flutter / packages" msgstr "" -#: website/public/get-started/index.html:1405 +#: website/public/get-started/index.html:1407 msgctxt "page:get-started/index.html" msgid "Android APK" msgstr "" -#: website/public/get-started/index.html:1415 +#: website/public/get-started/index.html:1417 msgctxt "page:get-started/index.html" msgid "Android device" msgstr "" -#: website/public/get-started/index.html:1425 +#: website/public/get-started/index.html:1427 msgctxt "page:get-started/index.html" msgid "Android resources" msgstr "" -#: website/public/get-started/index.html:1435 +#: website/public/get-started/index.html:1437 msgctxt "page:get-started/index.html" msgid "JEB project" msgstr "" -#: website/public/get-started/index.html:1445 +#: website/public/get-started/index.html:1447 msgctxt "page:get-started/index.html" msgid "Firmware" msgstr "" -#: website/public/get-started/index.html:1455 +#: website/public/get-started/index.html:1457 msgctxt "page:get-started/index.html" msgid "WASM" msgstr "" -#: website/public/get-started/index.html:1465 +#: website/public/get-started/index.html:1467 msgctxt "page:get-started/index.html" msgid "SQLite database" msgstr "" -#: website/public/get-started/index.html:1475 +#: website/public/get-started/index.html:1477 msgctxt "page:get-started/index.html" msgid "EVM bytecode" msgstr "" -#: website/public/get-started/index.html:1485 +#: website/public/get-started/index.html:1487 msgctxt "page:get-started/index.html" msgid "ELF / Linux crash" msgstr "" -#: website/public/get-started/index.html:1495 +#: website/public/get-started/index.html:1497 msgctxt "page:get-started/index.html" msgid "HAR / SAZ / mitmproxy" msgstr "" -#: website/public/get-started/index.html:1505 +#: website/public/get-started/index.html:1507 msgctxt "page:get-started/index.html" msgid "PCAP / PCAPNG" msgstr "" -#: website/public/get-started/index.html:1515 +#: website/public/get-started/index.html:1517 msgctxt "page:get-started/index.html" msgid "Logic signals" msgstr "" -#: website/public/get-started/index.html:1525 +#: website/public/get-started/index.html:1527 msgctxt "page:get-started/index.html" msgid "Process behavior" msgstr "" @@ -5447,7 +5447,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/get-started/index.html:1537 +#: website/public/get-started/index.html:1539 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5455,31 +5455,31 @@ msgid "" "{ph6}All investigation guides{ph7}" msgstr "" -#: website/public/get-started/index.html:1557 +#: website/public/get-started/index.html:1559 msgctxt "page:get-started/index.html" msgid "Use REA from a terminal" msgstr "" -#: website/public/get-started/index.html:1559 +#: website/public/get-started/index.html:1561 msgctxt "page:get-started/index.html" msgid "CLI commands, global installation and curl" msgstr "" -#: website/public/get-started/index.html:1560 +#: website/public/get-started/index.html:1562 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:1566 +#: website/public/get-started/index.html:1568 msgctxt "page:get-started/index.html" msgid "Static application analysis" msgstr "" #. {ph0}: .asar #. {ph1}: "D:/apps/example" -#: website/public/get-started/index.html:1578 +#: website/public/get-started/index.html:1580 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5487,13 +5487,13 @@ msgid "" "such as {ph1} works here." msgstr "" -#: website/public/get-started/index.html:1584 +#: website/public/get-started/index.html:1586 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:1585 +#: website/public/get-started/index.html:1587 #, python-brace-format msgctxt "page:get-started/index.html" msgid "Electron apps usually keep it in a {ph0} folder:" @@ -5503,7 +5503,7 @@ msgstr "" #. {ph1}: #. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar -#: website/public/get-started/index.html:1590 +#: website/public/get-started/index.html:1592 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Windows:{ph1} {ph2}" @@ -5514,7 +5514,7 @@ msgstr "" #. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar #. {ph3}: #. {ph4}: -#: website/public/get-started/index.html:1596 +#: website/public/get-started/index.html:1598 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5525,20 +5525,20 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: /opt/<App>/resources/app.asar -#: website/public/get-started/index.html:1604 +#: website/public/get-started/index.html:1606 #, 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:1609 +#: website/public/get-started/index.html:1611 #, 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:1614 +#: website/public/get-started/index.html:1616 msgctxt "page:get-started/index.html" msgid "" "The result identifies the app, shows connections between modules and gives their " @@ -5546,27 +5546,27 @@ msgid "" msgstr "" #. {ph0}: rea -#: website/public/get-started/index.html:1619 +#: website/public/get-started/index.html:1621 #, 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:1625 +#: website/public/get-started/index.html:1627 msgctxt "page:get-started/index.html" msgid "Install the CLI" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/get-started/index.html:1637 +#: website/public/get-started/index.html:1639 #, 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:1656 +#: website/public/get-started/index.html:1658 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5574,13 +5574,13 @@ msgid "" "must be configured first." msgstr "" -#: website/public/get-started/index.html:1660 +#: website/public/get-started/index.html:1662 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:1678 +#: website/public/get-started/index.html:1680 #, 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}." @@ -5588,7 +5588,7 @@ msgstr "" #. {ph0}: rea #. {ph1}: "$HOME/.local/bin/rea" setup -#: website/public/get-started/index.html:1682 +#: website/public/get-started/index.html:1684 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5596,18 +5596,18 @@ msgid "" "Linux, the default setup command is {ph1}." msgstr "" -#: website/public/get-started/index.html:1691 +#: website/public/get-started/index.html:1693 msgctxt "page:get-started/index.html" msgid "Getting help" msgstr "" -#: website/public/get-started/index.html:1693 +#: website/public/get-started/index.html:1695 msgctxt "page:get-started/index.html" msgid "If your agent doesn't see REA" msgstr "" #. {ph0}: doctor -#: website/public/get-started/index.html:1694 +#: website/public/get-started/index.html:1696 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5615,39 +5615,39 @@ msgid "" "Codex:" msgstr "" -#: website/public/get-started/index.html:1698 +#: website/public/get-started/index.html:1700 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:1705 +#: website/public/get-started/index.html:1707 msgctxt "page:get-started/index.html" msgid "If a provider needs attention" msgstr "" -#: website/public/get-started/index.html:1706 +#: website/public/get-started/index.html:1708 msgctxt "page:get-started/index.html" msgid "Check the provider you're using. For Ghidra:" msgstr "" -#: website/public/get-started/index.html:1709 +#: website/public/get-started/index.html:1711 msgctxt "page:get-started/index.html" msgid "Check one provider" msgstr "" -#: website/public/get-started/index.html:1721 +#: website/public/get-started/index.html:1723 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:1726 +#: website/public/get-started/index.html:1728 msgctxt "page:get-started/index.html" msgid "Windows, WSL and paths with spaces" msgstr "" -#: website/public/get-started/index.html:1727 +#: website/public/get-started/index.html:1729 msgctxt "page:get-started/index.html" msgid "" "Use Windows PowerShell for Windows clients and analysis tools. If your agent runs " @@ -5655,17 +5655,17 @@ msgid "" "there. Headless providers run on the same host as REA." msgstr "" -#: website/public/get-started/index.html:1736 +#: website/public/get-started/index.html:1738 msgctxt "page:get-started/index.html" msgid "Windows setup command:" msgstr "" -#: website/public/get-started/index.html:1753 +#: website/public/get-started/index.html:1755 msgctxt "page:get-started/index.html" msgid "Update or remove REA" msgstr "" -#: website/public/get-started/index.html:1754 +#: website/public/get-started/index.html:1756 msgctxt "page:get-started/index.html" msgid "" "To refresh your agent connection, run the latest setup command again, review its plan " @@ -5674,7 +5674,7 @@ msgstr "" #. {ph0}: rea update #. {ph1}: npx rea-agents@latest uninstall -#: website/public/get-started/index.html:1772 +#: website/public/get-started/index.html:1774 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5686,7 +5686,7 @@ msgstr "" #. href="https://github.com/morluto/rea/blob/main/docs/installation.md#diagnose-update- #. and-remove" > #. {ph1}: -#: website/public/get-started/index.html:1778 +#: website/public/get-started/index.html:1780 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}Update and uninstall details{ph1}" @@ -5696,7 +5696,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1786 +#: website/public/get-started/index.html:1788 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" @@ -5706,7 +5706,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1790 +#: website/public/get-started/index.html:1792 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5718,7 +5718,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1797 +#: website/public/get-started/index.html:1799 #, python-brace-format msgctxt "page:get-started/index.html" msgid "" @@ -5729,7 +5729,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/get-started/index.html:1801 +#: website/public/get-started/index.html:1803 #, python-brace-format msgctxt "page:get-started/index.html" msgid "{ph0}REA community{ph1}{ph2}Questions, investigations and work in progress.{ph3}" @@ -5747,88 +5747,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:746 website/public/get-started/index.html:801 -#: website/public/get-started/index.html:816 website/public/get-started/index.html:864 -#: website/public/get-started/index.html:1049 website/public/get-started/index.html:1111 -#: website/public/get-started/index.html:1134 website/public/get-started/index.html:1158 -#: website/public/get-started/index.html:1206 website/public/get-started/index.html:1281 -#: website/public/get-started/index.html:1307 website/public/get-started/index.html:1324 -#: website/public/get-started/index.html:1645 website/public/get-started/index.html:1667 -#: website/public/get-started/index.html:1740 website/public/get-started/index.html:1761 +#: 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:748 website/public/get-started/index.html:803 +#: website/public/get-started/index.html:818 website/public/get-started/index.html:866 +#: website/public/get-started/index.html:1051 website/public/get-started/index.html:1113 +#: website/public/get-started/index.html:1136 website/public/get-started/index.html:1160 +#: website/public/get-started/index.html:1208 website/public/get-started/index.html:1283 +#: website/public/get-started/index.html:1309 website/public/get-started/index.html:1326 +#: website/public/get-started/index.html:1647 website/public/get-started/index.html:1669 +#: website/public/get-started/index.html:1742 website/public/get-started/index.html:1763 msgctxt "page:get-started/index.html" msgid "Copy command" msgstr "" -#: website/public/get-started/index.html:776 +#: website/public/get-started/index.html:778 msgctxt "page:get-started/index.html" msgid "Copy REA installation prompt" msgstr "" -#: website/public/get-started/index.html:897 +#: website/public/get-started/index.html:899 msgctxt "page:get-started/index.html" msgid "Copy Notes investigation prompt" msgstr "" -#: website/public/get-started/index.html:1567 +#: website/public/get-started/index.html:1569 msgctxt "page:get-started/index.html" msgid "Copy JavaScript analysis command" msgstr "" -#: website/public/get-started/index.html:1626 +#: website/public/get-started/index.html:1628 msgctxt "page:get-started/index.html" msgid "Copy CLI installation command" msgstr "" -#: website/public/get-started/index.html:1710 +#: website/public/get-started/index.html:1712 msgctxt "page:get-started/index.html" msgid "Copy provider diagnosis command" msgstr "" -#: website/public/get-started/index.html:1825 +#: website/public/get-started/index.html:1827 msgctxt "page:get-started/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/browser/index.html:109 +#: website/public/guides/browser/index.html:111 msgctxt "page:guides/browser/index.html" msgid "Skip to content" msgstr "" @@ -5837,34 +5837,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}" @@ -5872,7 +5872,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}" @@ -5880,7 +5880,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}" @@ -5888,7 +5888,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}" @@ -5896,13 +5896,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 "" @@ -5912,7 +5912,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 "" @@ -5920,7 +5920,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 "" @@ -5931,7 +5931,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 "" @@ -5945,7 +5945,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 "" @@ -5961,7 +5961,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 "" @@ -5969,52 +5969,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 "" @@ -6027,7 +6027,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" @@ -6039,7 +6039,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 "" @@ -6048,7 +6048,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 "" @@ -6056,30 +6056,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 "" @@ -6087,14 +6087,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 "" @@ -6102,56 +6102,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 "" @@ -6159,19 +6159,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 "" @@ -6180,14 +6180,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 "" @@ -6204,14 +6204,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 "" @@ -6221,7 +6221,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 "" @@ -6232,7 +6232,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 "" @@ -6253,216 +6253,216 @@ 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:515 +#: website/public/guides/browser/index.html:517 msgctxt "page:guides/browser/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/index.html:109 +#: website/public/guides/index.html:111 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 "" @@ -6479,12 +6479,12 @@ msgid "" "and a browser request." msgstr "" -#: website/public/guides/index.html:290 +#: website/public/guides/index.html:292 msgctxt "page:guides/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/javascript/index.html:109 +#: website/public/guides/javascript/index.html:111 msgctxt "page:guides/javascript/index.html" msgid "Skip to content" msgstr "" @@ -6493,33 +6493,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}" @@ -6527,7 +6527,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}" @@ -6535,7 +6535,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}" @@ -6543,7 +6543,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}" @@ -6551,20 +6551,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 "" @@ -6573,7 +6573,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 "" @@ -6587,7 +6587,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 "" @@ -6602,7 +6602,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 "" @@ -6617,7 +6617,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 "" @@ -6628,27 +6628,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:" @@ -6662,14 +6662,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:433 +#: website/public/guides/javascript/index.html:286 +#: website/public/guides/javascript/index.html:435 msgctxt "page:guides/javascript/index.html" msgid "Copy" msgstr "" @@ -6680,7 +6680,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 "" @@ -6689,13 +6689,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 " @@ -6703,26 +6703,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:332 -#: website/public/guides/javascript/index.html:347 +#: website/public/guides/javascript/index.html:318 +#: website/public/guides/javascript/index.html:334 +#: website/public/guides/javascript/index.html:349 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0} · example source" msgstr "" -#: website/public/guides/javascript/index.html:326 +#: website/public/guides/javascript/index.html:328 msgctxt "page:guides/javascript/index.html" msgid "" "The page knows the method name. The implementation lives in the preload, which exposes" @@ -6731,7 +6731,7 @@ msgstr "" #. {ph0}: notes.exportCsv #. {ph1}: notes:export -#: website/public/guides/javascript/index.html:340 +#: website/public/guides/javascript/index.html:342 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6741,7 +6741,7 @@ msgstr "" #. {ph0}: csv.js #. {ph1}: notes.csv -#: website/public/guides/javascript/index.html:357 +#: website/public/guides/javascript/index.html:359 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6749,26 +6749,26 @@ msgid "" "main process writes {ph1} into the user's Downloads folder." msgstr "" -#: website/public/guides/javascript/index.html:364 +#: website/public/guides/javascript/index.html:366 msgctxt "page:guides/javascript/index.html" msgid "REA result · summary.ipc excerpt" msgstr "" -#: website/public/guides/javascript/index.html:374 +#: website/public/guides/javascript/index.html:376 msgctxt "page:guides/javascript/index.html" msgid "" "Recorded by REA 4.1.0 on the downloadable example below. Source locations accompany " "the API, channel and handler findings." msgstr "" -#: website/public/guides/javascript/index.html:380 +#: website/public/guides/javascript/index.html:382 msgctxt "page:guides/javascript/index.html" msgid "Analyze the example yourself" msgstr "" #. {ph0}: notes-example #. {ph1}: Node.js -#: website/public/guides/javascript/index.html:381 +#: website/public/guides/javascript/index.html:383 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6779,25 +6779,25 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/javascript/index.html:387 +#: website/public/guides/javascript/index.html:389 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "{ph0}Download example ZIP{ph1}" msgstr "" -#: website/public/guides/javascript/index.html:396 +#: website/public/guides/javascript/index.html:398 msgctxt "page:guides/javascript/index.html" msgid "Browse the six source files" msgstr "" -#: website/public/guides/javascript/index.html:432 +#: website/public/guides/javascript/index.html:434 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:445 +#: website/public/guides/javascript/index.html:447 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6805,20 +6805,20 @@ msgid "" " matching handler in {ph0}. Source locations are in {ph1}." msgstr "" -#: website/public/guides/javascript/index.html:451 +#: website/public/guides/javascript/index.html:453 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:458 +#: website/public/guides/javascript/index.html:460 msgctxt "page:guides/javascript/index.html" msgid "Inspect the CSV writer" msgstr "" #. {ph0}: notes:export -#: website/public/guides/javascript/index.html:460 +#: website/public/guides/javascript/index.html:462 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6826,7 +6826,7 @@ msgid "" "writing the file fails?" msgstr "" -#: website/public/guides/javascript/index.html:466 +#: website/public/guides/javascript/index.html:468 msgctxt "page:guides/javascript/index.html" msgid "" "Use the source locations to inspect those details. Computed channel names and " @@ -6838,7 +6838,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/javascript/index.html:472 +#: website/public/guides/javascript/index.html:474 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6850,7 +6850,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/javascript/index.html:478 +#: website/public/guides/javascript/index.html:480 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6862,7 +6862,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/javascript/index.html:484 +#: website/public/guides/javascript/index.html:486 #, python-brace-format msgctxt "page:guides/javascript/index.html" msgid "" @@ -6882,32 +6882,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:433 +#: website/public/guides/javascript/index.html:435 msgctxt "page:guides/javascript/index.html" msgid "Copy static application analysis" msgstr "" -#: website/public/guides/javascript/index.html:511 +#: website/public/guides/javascript/index.html:513 msgctxt "page:guides/javascript/index.html" msgid "Back to top" msgstr "" -#: website/public/guides/native/index.html:109 +#: website/public/guides/native/index.html:111 msgctxt "page:guides/native/index.html" msgid "Skip to content" msgstr "" @@ -6916,34 +6916,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}" @@ -6951,7 +6951,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}" @@ -6959,7 +6959,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}" @@ -6967,7 +6967,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}" @@ -6975,18 +6975,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" @@ -6995,7 +6995,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 "" @@ -7004,7 +7004,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 "" @@ -7013,7 +7013,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 "" @@ -7023,7 +7023,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 "" @@ -7033,7 +7033,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 "" @@ -7043,7 +7043,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 "" @@ -7052,7 +7052,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 "" @@ -7060,7 +7060,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 "" @@ -7071,7 +7071,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 "" @@ -7086,7 +7086,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 "" @@ -7102,7 +7102,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 "" @@ -7110,14 +7110,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 "" @@ -7126,7 +7126,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 "" @@ -7134,19 +7134,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 "" @@ -7157,7 +7157,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:322 +#: website/public/guides/native/index.html:324 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7167,7 +7167,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:327 +#: website/public/guides/native/index.html:329 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." @@ -7175,7 +7175,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:332 +#: website/public/guides/native/index.html:334 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "See {ph0}Set up native analysis{ph1} for the steps." @@ -7189,14 +7189,14 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/guides/native/index.html:340 +#: website/public/guides/native/index.html:342 #, 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:344 -#: website/public/guides/native/index.html:475 +#: website/public/guides/native/index.html:346 +#: website/public/guides/native/index.html:477 msgctxt "page:guides/native/index.html" msgid "Copy" msgstr "" @@ -7207,7 +7207,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/guides/native/index.html:353 +#: website/public/guides/native/index.html:355 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7215,7 +7215,7 @@ msgid "" "calculation and show the code.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/guides/native/index.html:361 +#: website/public/guides/native/index.html:363 msgctxt "page:guides/native/index.html" msgid "" "Example prompt. Give your agent the path to your local DX-Ball 1.07 executable. REA " @@ -7223,7 +7223,7 @@ msgid "" "another small Windows program you have." msgstr "" -#: website/public/guides/native/index.html:368 +#: website/public/guides/native/index.html:370 msgctxt "page:guides/native/index.html" msgid "How do I get a file's full path?" msgstr "" @@ -7232,7 +7232,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/native/index.html:370 +#: website/public/guides/native/index.html:372 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7244,7 +7244,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/guides/native/index.html:375 +#: website/public/guides/native/index.html:377 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7254,46 +7254,46 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:379 +#: website/public/guides/native/index.html:381 #, 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:387 +#: website/public/guides/native/index.html:389 msgctxt "page:guides/native/index.html" msgid "Read the REA results" msgstr "" -#: website/public/guides/native/index.html:388 +#: website/public/guides/native/index.html:390 msgctxt "page:guides/native/index.html" msgid "Read the input" msgstr "" -#: website/public/guides/native/index.html:391 +#: website/public/guides/native/index.html:393 msgctxt "page:guides/native/index.html" msgid "REA instruction excerpt · 0x406409" msgstr "" -#: website/public/guides/native/index.html:397 +#: website/public/guides/native/index.html:399 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:402 +#: website/public/guides/native/index.html:404 msgctxt "page:guides/native/index.html" msgid "Follow the caller" msgstr "" -#: website/public/guides/native/index.html:405 +#: website/public/guides/native/index.html:407 msgctxt "page:guides/native/index.html" msgid "REA caller excerpt · 0x411f5b" msgstr "" #. {ph0}: 0x14 -#: website/public/guides/native/index.html:411 +#: website/public/guides/native/index.html:413 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7301,34 +7301,34 @@ msgid "" "coordinate by 30; adding {ph0} (20) gives the brick's screen position." msgstr "" -#: website/public/guides/native/index.html:416 +#: website/public/guides/native/index.html:418 msgctxt "page:guides/native/index.html" msgid "Read the referenced constants" msgstr "" -#: website/public/guides/native/index.html:419 +#: website/public/guides/native/index.html:421 msgctxt "page:guides/native/index.html" msgid "REA byte results · interpreted as little-endian doubles" msgstr "" -#: website/public/guides/native/index.html:427 +#: website/public/guides/native/index.html:429 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:434 +#: website/public/guides/native/index.html:436 msgctxt "page:guides/native/index.html" msgid "Write and check the recovered function" msgstr "" -#: website/public/guides/native/index.html:436 +#: website/public/guides/native/index.html:438 msgctxt "page:guides/native/index.html" msgid "Recovered C · excerpt" msgstr "" -#: website/public/guides/native/index.html:443 +#: website/public/guides/native/index.html:445 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 " @@ -7336,7 +7336,7 @@ msgid "" " stereo field." msgstr "" -#: website/public/guides/native/index.html:448 +#: website/public/guides/native/index.html:450 msgctxt "page:guides/native/index.html" msgid "" "The agent used REA's findings to write the C. Separate checks compared 3,205 inputs " @@ -7346,20 +7346,20 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:453 +#: website/public/guides/native/index.html:455 #, 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:460 +#: website/public/guides/native/index.html:462 msgctxt "page:guides/native/index.html" msgid "Try it with your own binary" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/guides/native/index.html:461 +#: website/public/guides/native/index.html:463 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7368,20 +7368,20 @@ msgid "" "this file parsed?” or “Which function handles this menu action?”" msgstr "" -#: website/public/guides/native/index.html:468 +#: website/public/guides/native/index.html:470 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:474 +#: website/public/guides/native/index.html:476 msgctxt "page:guides/native/index.html" msgid "Function analysis" msgstr "" #. {ph0}: main -#: website/public/guides/native/index.html:487 +#: website/public/guides/native/index.html:489 #, python-brace-format msgctxt "page:guides/native/index.html" msgid "" @@ -7390,7 +7390,7 @@ msgid "" "queries reuse the imported binary while that session is open." msgstr "" -#: website/public/guides/native/index.html:493 +#: website/public/guides/native/index.html:495 msgctxt "page:guides/native/index.html" msgid "" "Read the pseudocode alongside instructions and references. When a result leaves a call" @@ -7409,50 +7409,50 @@ 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:344 +#: website/public/guides/native/index.html:346 msgctxt "page:guides/native/index.html" msgid "Copy example prompt" msgstr "" -#: website/public/guides/native/index.html:475 +#: website/public/guides/native/index.html:477 msgctxt "page:guides/native/index.html" msgid "Copy function analysis" msgstr "" -#: website/public/guides/native/index.html:517 +#: website/public/guides/native/index.html:519 msgctxt "page:guides/native/index.html" msgid "Back to top" msgstr "" -#: website/public/index.html:111 +#: website/public/index.html:113 msgctxt "page:index.html" msgid "Skip to content" msgstr "" -#: website/public/index.html:203 website/public/index.html:213 -#: website/public/index.html:211 +#: website/public/index.html:205 website/public/index.html:215 +#: website/public/index.html:213 msgctxt "page:index.html" msgid "On this page" msgstr "" -#: website/public/index.html:204 website/public/index.html:252 +#: website/public/index.html:206 website/public/index.html:254 msgctxt "page:index.html" msgid "Set up REA" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:215 +#: website/public/index.html:217 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Set up REA{ph1}" @@ -7460,7 +7460,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:216 +#: website/public/index.html:218 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}How it works{ph1}" @@ -7468,7 +7468,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:217 +#: website/public/index.html:219 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Dinosaur game{ph1}" @@ -7476,7 +7476,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:218 +#: website/public/index.html:220 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Calculator{ph1}" @@ -7484,7 +7484,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:219 +#: website/public/index.html:221 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Showcases{ph1}" @@ -7492,7 +7492,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:220 +#: website/public/index.html:222 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Try REA{ph1}" @@ -7500,44 +7500,44 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:221 +#: website/public/index.html:223 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Go deeper{ph1}" msgstr "" -#: website/public/index.html:230 +#: website/public/index.html:232 msgctxt "page:index.html" msgid "Reverse engineering, with your coding agent" msgstr "" #. {ph0}:
-#: website/public/index.html:231 +#: website/public/index.html:233 #, python-brace-format msgctxt "page:index.html" msgid "Find out how{ph0}software works." msgstr "" -#: website/public/index.html:232 +#: website/public/index.html:234 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:237 +#: website/public/index.html:239 msgctxt "page:index.html" msgid "Get started" msgstr "" -#: website/public/index.html:238 +#: website/public/index.html:240 msgctxt "page:index.html" msgid "See an example ↓" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:241 +#: website/public/index.html:243 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Showcases →{ph1} — investigations and interactive demos." @@ -7545,13 +7545,13 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:245 +#: website/public/index.html:247 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Blog →{ph1} — methods and reconstruction notes." msgstr "" -#: website/public/index.html:253 +#: website/public/index.html:255 msgctxt "page:index.html" msgid "Copy this into your coding agent:" msgstr "" @@ -7564,16 +7564,16 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:256 +#: website/public/index.html:258 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" msgstr "" -#: website/public/index.html:261 website/public/index.html:285 -#: website/public/index.html:521 website/public/index.html:602 -#: website/public/index.html:826 website/public/index.html:1138 -#: website/public/index.html:1166 +#: website/public/index.html:263 website/public/index.html:287 +#: website/public/index.html:523 website/public/index.html:604 +#: website/public/index.html:828 website/public/index.html:1140 +#: website/public/index.html:1168 msgctxt "page:index.html" msgid "Copy" msgstr "" @@ -7585,7 +7585,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/index.html:270 +#: website/public/index.html:272 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -7593,17 +7593,17 @@ msgid "" "the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}" msgstr "" -#: website/public/index.html:282 +#: website/public/index.html:284 msgctxt "page:index.html" msgid "Or run this in your terminal:" msgstr "" -#: website/public/index.html:294 +#: website/public/index.html:296 msgctxt "page:index.html" msgid "Approve the setup plan, then restart your agent." msgstr "" -#: website/public/index.html:298 +#: website/public/index.html:300 msgctxt "page:index.html" msgid "Setup for your platform:" msgstr "" @@ -7611,7 +7611,7 @@ msgstr "" #. {ph0}: #. {ph1}: curl #. {ph2}: -#: website/public/index.html:309 +#: website/public/index.html:311 #, python-brace-format msgctxt "page:index.html" msgid "Other install options: {ph0}{ph1} →{ph2}" @@ -7620,7 +7620,7 @@ msgstr "" #. {ph0}: Node.js #. {ph1}: #. {ph2}: -#: website/public/index.html:315 +#: website/public/index.html:317 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -7628,12 +7628,12 @@ msgid "" "guide →{ph2}" msgstr "" -#: website/public/index.html:328 +#: website/public/index.html:330 msgctxt "page:index.html" msgid "How it works" msgstr "" -#: website/public/index.html:330 +#: website/public/index.html:332 msgctxt "page:index.html" msgid "" "Reverse engineering means learning how software works by inspecting the program " @@ -7641,56 +7641,56 @@ msgid "" "rebuild it." msgstr "" -#: website/public/index.html:337 +#: website/public/index.html:339 msgctxt "page:index.html" msgid "Ask about one feature" msgstr "" -#: website/public/index.html:338 +#: website/public/index.html:340 msgctxt "page:index.html" msgid "Give your agent a program or page and a question." msgstr "" -#: website/public/index.html:341 +#: website/public/index.html:343 msgctxt "page:index.html" msgid "Inspect the program" msgstr "" -#: website/public/index.html:342 +#: website/public/index.html:344 msgctxt "page:index.html" msgid "REA returns code, references and runtime observations." msgstr "" -#: website/public/index.html:345 +#: website/public/index.html:347 msgctxt "page:index.html" msgid "Explain it, then try a change" msgstr "" -#: website/public/index.html:346 +#: website/public/index.html:348 msgctxt "page:index.html" msgid "Your agent uses the findings to explain or rebuild the feature." msgstr "" -#: website/public/index.html:352 +#: website/public/index.html:354 msgctxt "page:index.html" msgid "See the full Calculator investigation" msgstr "" #. {ph0}: 200 + 10% -#: website/public/index.html:353 +#: website/public/index.html:355 #, python-brace-format msgctxt "page:index.html" msgid "Why does Calculator give 220 for {ph0}?" msgstr "" -#: website/public/index.html:362 +#: website/public/index.html:364 msgctxt "page:index.html" msgid "Follow the instructions step by step" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:370 +#: website/public/index.html:372 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}01{ph1} Decode branches" @@ -7698,7 +7698,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:378 +#: website/public/index.html:380 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}02{ph1} Trace calls" @@ -7706,7 +7706,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:386 +#: website/public/index.html:388 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}03{ph1} Recover the rule" @@ -7716,48 +7716,48 @@ msgstr "" #. {ph1}: #. {ph2}: -#: website/public/index.html:397 +#: website/public/index.html:399 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" msgstr "" -#: website/public/index.html:439 +#: website/public/index.html:441 msgctxt "page:index.html" msgid "01 · Which branch?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:440 +#: website/public/index.html:442 #, 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:444 +#: website/public/index.html:446 msgctxt "page:index.html" msgid "Look up the command IDs, then label the branch." msgstr "" -#: website/public/index.html:450 +#: website/public/index.html:452 msgctxt "page:index.html" msgid "Divide ÷" msgstr "" -#: website/public/index.html:454 +#: website/public/index.html:456 msgctxt "page:index.html" msgid "Multiply ×" msgstr "" -#: website/public/index.html:459 +#: website/public/index.html:461 msgctxt "page:index.html" msgid "02 · What do the calls do?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:460 +#: website/public/index.html:462 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -7765,43 +7765,43 @@ msgid "" "in?{ph1}”" msgstr "" -#: website/public/index.html:466 +#: website/public/index.html:468 msgctxt "page:index.html" msgid "Inspect the helpers and trace the stored values." msgstr "" -#: website/public/index.html:476 +#: website/public/index.html:478 msgctxt "page:index.html" msgid "Divide" msgstr "" -#: website/public/index.html:481 +#: website/public/index.html:483 msgctxt "page:index.html" msgid "03 · What is the rule?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:482 +#: website/public/index.html:484 #, 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:486 +#: website/public/index.html:488 msgctxt "page:index.html" msgid "Name the operands and check both operator paths." msgstr "" -#: website/public/index.html:502 website/public/index.html:429 +#: website/public/index.html:504 website/public/index.html:431 msgctxt "page:index.html" msgid "Illustrative expert reasoning" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:505 +#: website/public/index.html:507 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -7809,7 +7809,7 @@ msgid "" "calculation.{ph1}" msgstr "" -#: website/public/index.html:513 +#: website/public/index.html:515 msgctxt "page:index.html" msgid "Ask your agent the same question" msgstr "" @@ -7822,7 +7822,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:516 +#: website/public/index.html:518 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" @@ -7835,7 +7835,7 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/index.html:530 +#: website/public/index.html:532 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -7843,42 +7843,42 @@ msgid "" "220?{ph4}{ph5}{ph6}" msgstr "" -#: website/public/index.html:538 +#: website/public/index.html:540 msgctxt "page:index.html" msgid "Example answer · based on the findings" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:541 +#: website/public/index.html:543 #, 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:554 +#: website/public/index.html:556 msgctxt "page:index.html" msgid "REA supplies" msgstr "" -#: website/public/index.html:555 +#: website/public/index.html:557 msgctxt "page:index.html" msgid "The handler’s instructions, decompiled code and calls." msgstr "" -#: website/public/index.html:560 +#: website/public/index.html:562 msgctxt "page:index.html" msgid "Your agent explains" msgstr "" -#: website/public/index.html:561 +#: website/public/index.html:563 msgctxt "page:index.html" msgid "Which branch applies, what it calculates and how to rebuild it." msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:568 +#: website/public/index.html:570 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -7886,30 +7886,30 @@ msgid "" " the findings. {ph0}Continue with the Calculator example ↓{ph1}" msgstr "" -#: website/public/index.html:580 +#: website/public/index.html:582 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:585 +#: website/public/index.html:587 msgctxt "page:index.html" msgid "Example 01 · Chrome’s dinosaur game" msgstr "" -#: website/public/index.html:586 +#: website/public/index.html:588 msgctxt "page:index.html" msgid "Why does the dinosaur get faster?" msgstr "" -#: website/public/index.html:588 +#: website/public/index.html:590 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:594 +#: website/public/index.html:596 msgctxt "page:index.html" msgid "1. Ask about the speed" msgstr "" @@ -7922,7 +7922,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:597 +#: website/public/index.html:599 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Dinosaur game" @@ -7934,7 +7934,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/index.html:611 +#: website/public/index.html:613 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -7942,102 +7942,102 @@ msgid "" "the speed rule, then build a small version with an adjustable speed.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/index.html:620 +#: website/public/index.html:622 msgctxt "page:index.html" msgid "2. Find the speed rule" msgstr "" -#: website/public/index.html:621 +#: website/public/index.html:623 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:628 +#: website/public/index.html:630 msgctxt "page:index.html" msgid "3. Play the result" msgstr "" -#: website/public/index.html:629 +#: website/public/index.html:631 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:665 +#: website/public/index.html:667 msgctxt "page:index.html" msgid "Play" msgstr "" -#: website/public/index.html:668 +#: website/public/index.html:670 msgctxt "page:index.html" msgid "Jump ↑" msgstr "" -#: website/public/index.html:669 +#: website/public/index.html:671 msgctxt "page:index.html" msgid "Restart" msgstr "" -#: website/public/index.html:672 +#: website/public/index.html:674 msgctxt "page:index.html" msgid "Speed" msgstr "" -#: website/public/index.html:682 +#: website/public/index.html:684 msgctxt "page:index.html" msgid "Use the recovered acceleration rule" msgstr "" -#: website/public/index.html:686 +#: website/public/index.html:688 msgctxt "page:index.html" msgid "Original rule: start at 6, then increase toward 13." msgstr "" -#: website/public/index.html:689 +#: website/public/index.html:691 msgctxt "page:index.html" msgid "Move the slider to set your own speed. Space or Jump clears a cactus." msgstr "" -#: website/public/index.html:694 +#: website/public/index.html:696 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:700 +#: website/public/index.html:702 msgctxt "page:index.html" msgid "Open the speed lab →" msgstr "" -#: website/public/index.html:706 +#: website/public/index.html:708 msgctxt "page:index.html" msgid "See the script, checks and how to try the analysis" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:709 +#: website/public/index.html:711 #, 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:717 +#: website/public/index.html:719 #, python-brace-format msgctxt "page:index.html" msgid "REA · loaded {ph0} · selected lines" msgstr "" -#: website/public/index.html:726 +#: website/public/index.html:728 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:731 +#: website/public/index.html:733 msgctxt "page:index.html" msgid "What each part does" msgstr "" @@ -8048,7 +8048,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:733 +#: website/public/index.html:735 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8062,7 +8062,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:740 +#: website/public/index.html:742 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8076,7 +8076,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:748 +#: website/public/index.html:750 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8085,7 +8085,7 @@ msgid "" msgstr "" #. {ph0}: index.js -#: website/public/index.html:758 +#: website/public/index.html:760 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8093,12 +8093,12 @@ msgid "" "returned the loaded {ph0}, including its source and digest." msgstr "" -#: website/public/index.html:765 +#: website/public/index.html:767 msgctxt "page:index.html" msgid "Selected settings from the inspected script" msgstr "" -#: website/public/index.html:771 +#: website/public/index.html:773 msgctxt "page:index.html" msgid "" "We called the original game’s update function in a controlled browser check, with " @@ -8108,7 +8108,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:777 +#: website/public/index.html:779 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8121,7 +8121,7 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/index.html:783 +#: website/public/index.html:785 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8135,30 +8135,30 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/index.html:792 +#: website/public/index.html:794 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" msgstr "" -#: website/public/index.html:809 +#: website/public/index.html:811 msgctxt "page:index.html" msgid "Example 02 · Windows Calculator" msgstr "" -#: website/public/index.html:810 +#: website/public/index.html:812 msgctxt "page:index.html" msgid "Rebuild Calculator’s % button." msgstr "" -#: website/public/index.html:812 +#: website/public/index.html:814 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:818 +#: website/public/index.html:820 msgctxt "page:index.html" msgid "1. Ask about the % button" msgstr "" @@ -8171,7 +8171,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:821 +#: website/public/index.html:823 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Calculator" @@ -8183,7 +8183,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/index.html:835 +#: website/public/index.html:837 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8191,18 +8191,18 @@ msgid "" "after + and ×, then build a small calculator that uses both.{ph3}{ph4}{ph5}" msgstr "" -#: website/public/index.html:844 +#: website/public/index.html:846 msgctxt "page:index.html" msgid "2. Find both rules" msgstr "" -#: website/public/index.html:845 +#: website/public/index.html:847 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:851 +#: website/public/index.html:853 msgctxt "page:index.html" msgid "With +" msgstr "" @@ -8210,13 +8210,13 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 -#: website/public/index.html:852 +#: website/public/index.html:854 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" msgstr "" -#: website/public/index.html:858 +#: website/public/index.html:860 msgctxt "page:index.html" msgid "With ×" msgstr "" @@ -8224,56 +8224,56 @@ msgstr "" #. {ph0}: #. {ph1}: #. {ph2}: 200 × 0.1 = 20 -#: website/public/index.html:859 +#: website/public/index.html:861 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" msgstr "" -#: website/public/index.html:866 +#: website/public/index.html:868 msgctxt "page:index.html" msgid "3. Try the % button" msgstr "" -#: website/public/index.html:867 +#: website/public/index.html:869 msgctxt "page:index.html" msgid "We recreated both rules below. Choose + or ×, press %, then press =." msgstr "" -#: website/public/index.html:915 +#: website/public/index.html:917 msgctxt "page:index.html" msgid "Reset" msgstr "" -#: website/public/index.html:923 +#: website/public/index.html:925 msgctxt "page:index.html" msgid "10% of 200 = 20. Then 200 + 20 = 220." msgstr "" -#: website/public/index.html:926 +#: website/public/index.html:928 msgctxt "page:index.html" msgid "Interactive illustration of the inspected percentage rule." msgstr "" -#: website/public/index.html:933 +#: website/public/index.html:935 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:934 +#: website/public/index.html:936 #, python-brace-format msgctxt "page:index.html" msgid "For this example, {ph0} and {ph1}." msgstr "" -#: website/public/index.html:940 +#: website/public/index.html:942 msgctxt "page:index.html" msgid "Readable summary of the % handler" msgstr "" -#: website/public/index.html:949 +#: website/public/index.html:951 msgctxt "page:index.html" msgid "From the installed app to a working % button" msgstr "" @@ -8286,7 +8286,7 @@ msgstr "" #. {ph5}: #. {ph6}: ms-calculator: #. {ph7}: -#: website/public/index.html:953 +#: website/public/index.html:955 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8301,7 +8301,7 @@ msgstr "" #. {ph4}: #. {ph5}: 100 #. {ph6}: -#: website/public/index.html:962 +#: website/public/index.html:964 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8315,7 +8315,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:970 +#: website/public/index.html:972 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8324,17 +8324,17 @@ msgid "" "above.{ph5}" msgstr "" -#: website/public/index.html:984 +#: website/public/index.html:986 msgctxt "page:index.html" msgid "REA · selected original instructions" msgstr "" -#: website/public/index.html:995 +#: website/public/index.html:997 msgctxt "page:index.html" msgid "Operator IDs · Microsoft’s source" msgstr "" -#: website/public/index.html:1005 +#: website/public/index.html:1007 msgctxt "page:index.html" msgid "" "Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable summary " @@ -8351,7 +8351,7 @@ msgstr "" #. {ph3}: #. {ph4}: #. {ph5}: -#: website/public/index.html:1010 +#: website/public/index.html:1012 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8359,166 +8359,166 @@ msgid "" "setup guide{ph5}" msgstr "" -#: website/public/index.html:1030 +#: website/public/index.html:1032 msgctxt "page:index.html" msgid "REA case studies." msgstr "" -#: website/public/index.html:1031 +#: website/public/index.html:1033 msgctxt "page:index.html" msgid "Explore a feature in a released app or game, with code and checked results." msgstr "" -#: website/public/index.html:1036 +#: website/public/index.html:1038 msgctxt "page:index.html" msgid "Showcases →" msgstr "" -#: website/public/index.html:1040 +#: website/public/index.html:1042 msgctxt "page:index.html" msgid "Android · APK analysis" msgstr "" -#: website/public/index.html:1041 +#: website/public/index.html:1043 msgctxt "page:index.html" msgid "How an authenticator generates a login code" msgstr "" -#: website/public/index.html:1042 +#: website/public/index.html:1044 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:1046 +#: website/public/index.html:1048 msgctxt "page:index.html" msgid "Read the Android case study" msgstr "" -#: website/public/index.html:1051 +#: website/public/index.html:1053 msgctxt "page:index.html" msgid "Electron · Feature tracing" msgstr "" -#: website/public/index.html:1052 +#: website/public/index.html:1054 msgctxt "page:index.html" msgid "How Notion copies text and HTML" msgstr "" -#: website/public/index.html:1053 +#: website/public/index.html:1055 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:1057 +#: website/public/index.html:1059 msgctxt "page:index.html" msgid "Read the Notion case study" msgstr "" -#: website/public/index.html:1062 +#: website/public/index.html:1064 msgctxt "page:index.html" msgid "Native · Reconstruction" msgstr "" -#: website/public/index.html:1063 +#: website/public/index.html:1065 msgctxt "page:index.html" msgid "DX-Ball's sound-pan calculation" msgstr "" -#: website/public/index.html:1064 +#: website/public/index.html:1066 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:1068 +#: website/public/index.html:1070 msgctxt "page:index.html" msgid "Read the DX-Ball case study" msgstr "" -#: website/public/index.html:1079 +#: website/public/index.html:1081 msgctxt "page:index.html" msgid "Your first investigation" msgstr "" -#: website/public/index.html:1080 +#: website/public/index.html:1082 msgctxt "page:index.html" msgid "Try REA on a small app." msgstr "" -#: website/public/index.html:1081 +#: website/public/index.html:1083 msgctxt "page:index.html" msgid "Download our Notes example, trace its CSV export, and check one changed input." msgstr "" -#: website/public/index.html:1086 +#: website/public/index.html:1088 msgctxt "page:index.html" msgid "Try the guided example" msgstr "" -#: website/public/index.html:1095 +#: website/public/index.html:1097 msgctxt "page:index.html" msgid "Choose your target." msgstr "" -#: website/public/index.html:1096 +#: website/public/index.html:1098 msgctxt "page:index.html" msgid "These guides cover setup and a first investigation for each kind of software." msgstr "" -#: website/public/index.html:1103 +#: website/public/index.html:1105 msgctxt "page:index.html" msgid "Native binaries" msgstr "" -#: website/public/index.html:1104 +#: website/public/index.html:1106 msgctxt "page:index.html" msgid "" "Inspect functions, strings, references and call relationships in executables and " "libraries." msgstr "" -#: website/public/index.html:1108 +#: website/public/index.html:1110 msgctxt "page:index.html" msgid "Native analysis guide" msgstr "" -#: website/public/index.html:1111 +#: website/public/index.html:1113 msgctxt "page:index.html" msgid "JavaScript & Electron" msgstr "" -#: website/public/index.html:1112 +#: website/public/index.html:1114 msgctxt "page:index.html" msgid "" "Map modules, routes, IPC and native dependencies from an application folder or ASAR " "archive." msgstr "" -#: website/public/index.html:1116 +#: website/public/index.html:1118 msgctxt "page:index.html" msgid "Application workflows" msgstr "" -#: website/public/index.html:1119 +#: website/public/index.html:1121 msgctxt "page:index.html" msgid "Browser & runtime activity" msgstr "" -#: website/public/index.html:1120 +#: website/public/index.html:1122 msgctxt "page:index.html" msgid "" "Capture selected browser or process activity, then compare the results across runs." msgstr "" -#: website/public/index.html:1124 +#: website/public/index.html:1126 msgctxt "page:index.html" msgid "Browser observation guide" msgstr "" -#: website/public/index.html:1128 +#: website/public/index.html:1130 msgctxt "page:index.html" msgid "Try a larger project" msgstr "" @@ -8531,7 +8531,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:1133 +#: website/public/index.html:1135 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" @@ -8544,14 +8544,14 @@ msgstr "" #. {ph4}: #. {ph5}: -#: website/public/index.html:1147 +#: website/public/index.html:1149 #, 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:1156 +#: website/public/index.html:1158 msgctxt "page:index.html" msgid "Yes, this one." msgstr "" @@ -8564,7 +8564,7 @@ msgstr "" #. {ph5}: #. {ph6}: #. {ph7}: -#: website/public/index.html:1161 +#: website/public/index.html:1163 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" @@ -8576,7 +8576,7 @@ msgstr "" #. {ph3}: #. {ph4}: -#: website/public/index.html:1175 +#: website/public/index.html:1177 #, python-brace-format msgctxt "page:index.html" msgid "" @@ -8586,20 +8586,20 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:1184 +#: website/public/index.html:1186 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}See the DX-Ball case study →{ph1}" msgstr "" -#: website/public/index.html:1195 +#: website/public/index.html:1197 msgctxt "page:index.html" msgid "Any questions?" msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:1197 +#: website/public/index.html:1199 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Read the FAQ{ph1} — setup and common questions." @@ -8607,7 +8607,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:1200 +#: website/public/index.html:1202 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}Join Discord{ph1} — get help and discuss your investigations." @@ -8615,7 +8615,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/index.html:1204 +#: website/public/index.html:1206 #, python-brace-format msgctxt "page:index.html" msgid "{ph0}GitHub issues{ph1} — report a bug or request a feature." @@ -8633,68 +8633,68 @@ msgid "" "clear guides and try interactive examples with REA." msgstr "" -#: website/public/index.html:261 +#: website/public/index.html:263 msgctxt "page:index.html" msgid "Copy REA installation prompt" msgstr "" -#: website/public/index.html:285 +#: website/public/index.html:287 msgctxt "page:index.html" msgid "Copy setup command" msgstr "" -#: website/public/index.html:297 +#: website/public/index.html:299 msgctxt "page:index.html" msgid "Setup options" msgstr "" -#: website/public/index.html:365 +#: website/public/index.html:367 msgctxt "page:index.html" msgid "Follow the manual Calculator analysis" msgstr "" -#: website/public/index.html:521 +#: website/public/index.html:523 msgctxt "page:index.html" msgid "Copy Calculator percentage question" msgstr "" -#: website/public/index.html:602 +#: website/public/index.html:604 msgctxt "page:index.html" msgid "Copy dinosaur analysis prompt" msgstr "" -#: website/public/index.html:655 +#: website/public/index.html:657 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:826 +#: website/public/index.html:828 msgctxt "page:index.html" msgid "Copy Calculator analysis prompt" msgstr "" -#: website/public/index.html:872 +#: website/public/index.html:874 msgctxt "page:index.html" msgid "Choose the calculation" msgstr "" -#: website/public/index.html:1138 +#: website/public/index.html:1140 msgctxt "page:index.html" msgid "Copy website project prompt" msgstr "" -#: website/public/index.html:1166 +#: website/public/index.html:1168 msgctxt "page:index.html" msgid "Copy game reconstruction prompt" msgstr "" -#: website/public/index.html:1230 +#: website/public/index.html:1232 msgctxt "page:index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/aegis/index.html:112 msgctxt "page:showcase/aegis/index.html" msgid "Skip to content" msgstr "" @@ -8703,42 +8703,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 "" @@ -8749,7 +8749,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 "" @@ -8763,7 +8763,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 "" @@ -8777,7 +8777,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 "" @@ -8785,14 +8785,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}" @@ -8800,7 +8800,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}" @@ -8808,7 +8808,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}" @@ -8816,7 +8816,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}" @@ -8824,7 +8824,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}" @@ -8832,20 +8832,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 "" @@ -8861,14 +8861,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:739 +#: website/public/showcase/aegis/index.html:278 +#: website/public/showcase/aegis/index.html:741 msgctxt "page:showcase/aegis/index.html" msgid "Copy" msgstr "" @@ -8880,7 +8880,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 "" @@ -8891,7 +8891,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 "" @@ -8899,14 +8899,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 "" @@ -8914,33 +8914,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 "" @@ -8949,35 +8949,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 "" @@ -8986,7 +8986,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 "" @@ -8996,7 +8996,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 "" @@ -9004,35 +9004,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 "" @@ -9040,19 +9040,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 "" @@ -9061,21 +9061,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 "" @@ -9086,7 +9086,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" @@ -9094,7 +9094,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" @@ -9102,25 +9102,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 "" @@ -9130,7 +9130,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 "" @@ -9140,7 +9140,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 "" @@ -9152,7 +9152,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 "" @@ -9160,7 +9160,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 "" @@ -9169,7 +9169,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 "" @@ -9177,12 +9177,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 " @@ -9195,20 +9195,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 "" @@ -9217,29 +9217,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 "" @@ -9247,37 +9247,37 @@ 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 "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:714 +#: website/public/showcase/aegis/index.html:716 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9287,7 +9287,7 @@ msgstr "" #. {ph0}: JAVA_HOME #. {ph1}: PATH -#: website/public/showcase/aegis/index.html:719 +#: website/public/showcase/aegis/index.html:721 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9295,28 +9295,28 @@ msgid "" "case used JDK 21." msgstr "" -#: website/public/showcase/aegis/index.html:725 +#: website/public/showcase/aegis/index.html:727 msgctxt "page:showcase/aegis/index.html" msgid "Download Aegis APK" msgstr "" -#: website/public/showcase/aegis/index.html:729 +#: website/public/showcase/aegis/index.html:731 msgctxt "page:showcase/aegis/index.html" msgid "Download Android analysis provider" msgstr "" -#: website/public/showcase/aegis/index.html:735 +#: website/public/showcase/aegis/index.html:737 msgctxt "page:showcase/aegis/index.html" msgid "Point REA at the provider file and inspect the APK:" msgstr "" -#: website/public/showcase/aegis/index.html:738 +#: website/public/showcase/aegis/index.html:740 msgctxt "page:showcase/aegis/index.html" msgid "macOS / Linux" msgstr "" #. {ph0}: REA_JADX_MCP_JAR -#: website/public/showcase/aegis/index.html:752 +#: website/public/showcase/aegis/index.html:754 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9326,7 +9326,7 @@ msgstr "" #. {ph0}: #. {ph1}: -#: website/public/showcase/aegis/index.html:757 +#: website/public/showcase/aegis/index.html:759 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9334,7 +9334,7 @@ msgid "" "time interval?{ph1}" msgstr "" -#: website/public/showcase/aegis/index.html:767 +#: website/public/showcase/aegis/index.html:769 msgctxt "page:showcase/aegis/index.html" msgid "Sources" msgstr "" @@ -9349,7 +9349,7 @@ msgstr "" #. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE" #. > #. {ph5}: -#: website/public/showcase/aegis/index.html:769 +#: website/public/showcase/aegis/index.html:771 #, python-brace-format msgctxt "page:showcase/aegis/index.html" msgid "" @@ -9361,13 +9361,13 @@ msgstr "" #. {ph1}: #. {ph2}: #. {ph3}: -#: website/public/showcase/aegis/index.html:785 +#: website/public/showcase/aegis/index.html:787 #, 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:792 +#: website/public/showcase/aegis/index.html:794 msgctxt "page:showcase/aegis/index.html" msgid "" "Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited to Aegis;" @@ -9386,37 +9386,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:739 +#: website/public/showcase/aegis/index.html:741 msgctxt "page:showcase/aegis/index.html" msgid "Copy APK inspection command" msgstr "" -#: website/public/showcase/aegis/index.html:816 +#: website/public/showcase/aegis/index.html:818 msgctxt "page:showcase/aegis/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/ctf/index.html:111 msgctxt "page:showcase/ctf/index.html" msgid "Skip to content" msgstr "" @@ -9425,26 +9425,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 "" @@ -9452,17 +9452,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 "" @@ -9473,7 +9473,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 "" @@ -9487,7 +9487,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 "" @@ -9501,7 +9501,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 "" @@ -9509,19 +9509,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}" @@ -9529,7 +9529,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}" @@ -9537,7 +9537,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}" @@ -9545,7 +9545,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}" @@ -9553,7 +9553,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}" @@ -9561,20 +9561,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 "" @@ -9590,15 +9590,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 "" @@ -9609,7 +9609,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 "" @@ -9617,48 +9617,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 "" @@ -9667,19 +9667,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" @@ -9689,23 +9689,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 "" @@ -9714,7 +9714,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 "" @@ -9723,12 +9723,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." @@ -9736,7 +9736,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" @@ -9744,7 +9744,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" @@ -9752,7 +9752,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" @@ -9760,7 +9760,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" @@ -9768,18 +9768,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 "" @@ -9787,7 +9787,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." @@ -9795,7 +9795,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 "" @@ -9805,7 +9805,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 "" @@ -9815,7 +9815,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 "" @@ -9827,7 +9827,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 "" @@ -9835,19 +9835,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 " @@ -9855,13 +9855,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 "" @@ -9870,19 +9870,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 "" @@ -9891,71 +9891,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 " @@ -9974,7 +9974,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 "" @@ -9982,35 +9982,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 "" @@ -10018,7 +10018,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 "" @@ -10035,27 +10035,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 " @@ -10063,42 +10063,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:785 +#: website/public/showcase/ctf/index.html:787 msgctxt "page:showcase/ctf/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/dx-ball/index.html:111 msgctxt "page:showcase/dx-ball/index.html" msgid "Skip to content" msgstr "" @@ -10107,39 +10107,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 "" @@ -10148,14 +10148,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}" @@ -10163,7 +10163,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}" @@ -10171,7 +10171,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}" @@ -10179,23 +10179,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 "" @@ -10206,7 +10206,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 "" @@ -10214,12 +10214,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, " @@ -10228,12 +10228,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 " @@ -10249,17 +10249,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 "" @@ -10270,7 +10270,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 "" @@ -10278,14 +10278,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 " @@ -10296,7 +10296,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 "" @@ -10305,48 +10305,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 "" @@ -10354,19 +10354,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 "" @@ -10374,36 +10374,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 " @@ -10412,7 +10412,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" @@ -10420,7 +10420,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" @@ -10428,7 +10428,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" @@ -10436,7 +10436,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" @@ -10444,18 +10444,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 "" @@ -10465,7 +10465,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 "" @@ -10480,7 +10480,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 "" @@ -10494,7 +10494,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 "" @@ -10508,7 +10508,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 "" @@ -10522,7 +10522,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 "" @@ -10531,30 +10531,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 "" @@ -10562,54 +10562,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 " @@ -10622,31 +10622,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 " @@ -10654,12 +10654,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 " @@ -10667,7 +10667,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 " @@ -10678,18 +10678,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 " @@ -10697,14 +10697,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 "" @@ -10713,7 +10713,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}" @@ -10723,7 +10723,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 "" @@ -10736,7 +10736,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 "" @@ -10744,7 +10744,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 "" @@ -10761,12 +10761,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 " @@ -10775,170 +10775,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:793 +#: website/public/showcase/dx-ball/index.html:795 msgctxt "page:showcase/dx-ball/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/index.html:109 +#: website/public/showcase/index.html:111 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 " @@ -10946,42 +10946,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 " @@ -10989,42 +10989,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 " @@ -11032,44 +11032,44 @@ 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:302 +#: website/public/showcase/index.html:304 msgctxt "page:showcase/index.html" msgid "Step-by-step guides" msgstr "" -#: website/public/showcase/index.html:303 +#: website/public/showcase/index.html:305 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:307 +#: website/public/showcase/index.html:309 msgctxt "page:showcase/index.html" msgid "Read the guides" msgstr "" @@ -11086,12 +11086,12 @@ msgid "" "DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." msgstr "" -#: website/public/showcase/index.html:325 +#: website/public/showcase/index.html:327 msgctxt "page:showcase/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/notion/index.html:111 msgctxt "page:showcase/notion/index.html" msgid "Skip to content" msgstr "" @@ -11100,37 +11100,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 "" @@ -11142,7 +11142,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 "" @@ -11157,7 +11157,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 "" @@ -11172,7 +11172,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 "" @@ -11187,7 +11187,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 "" @@ -11196,27 +11196,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}" @@ -11224,7 +11224,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}" @@ -11232,19 +11232,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 "" @@ -11260,17 +11260,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 "" @@ -11281,7 +11281,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 "" @@ -11289,19 +11289,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 " @@ -11309,23 +11309,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 "" @@ -11335,7 +11335,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 "" @@ -11344,32 +11344,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 "" @@ -11377,20 +11377,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 "" @@ -11398,13 +11398,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" @@ -11412,7 +11412,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 "" @@ -11420,19 +11420,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 " @@ -11440,13 +11440,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 "" @@ -11454,100 +11454,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 "" @@ -11556,14 +11556,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 "" @@ -11571,7 +11571,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 "" @@ -11584,7 +11584,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 "" @@ -11594,7 +11594,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 " @@ -11604,7 +11604,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 "" @@ -11617,7 +11617,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 "" @@ -11629,7 +11629,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 "" @@ -11637,7 +11637,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 "" @@ -11654,52 +11654,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:639 +#: website/public/showcase/notion/index.html:641 msgctxt "page:showcase/notion/index.html" msgid "Back to top" msgstr "" -#: website/public/showcase/th04/index.html:109 +#: website/public/showcase/th04/index.html:111 msgctxt "page:showcase/th04/index.html" msgid "Skip to content" msgstr "" @@ -11708,42 +11708,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 "" @@ -11754,7 +11754,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 "" @@ -11768,7 +11768,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 "" @@ -11782,7 +11782,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 "" @@ -11796,7 +11796,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 "" @@ -11804,21 +11804,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}" @@ -11826,7 +11826,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}" @@ -11834,7 +11834,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}" @@ -11842,7 +11842,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}" @@ -11850,18 +11850,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 " @@ -11877,16 +11877,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 "" @@ -11897,7 +11897,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 "" @@ -11905,7 +11905,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 " @@ -11913,7 +11913,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 "" @@ -11923,7 +11923,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 "" @@ -11931,12 +11931,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 "" @@ -11945,7 +11945,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 "" @@ -11953,13 +11953,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 "" @@ -11968,41 +11968,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 "" @@ -12010,7 +12010,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 "" @@ -12019,22 +12019,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" @@ -12042,12 +12042,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 " @@ -12057,7 +12057,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" @@ -12065,7 +12065,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" @@ -12073,7 +12073,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" @@ -12081,7 +12081,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" @@ -12089,18 +12089,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 "" @@ -12108,7 +12108,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 "" @@ -12120,7 +12120,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 "" @@ -12132,7 +12132,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 "" @@ -12144,7 +12144,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 "" @@ -12156,7 +12156,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 "" @@ -12165,7 +12165,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++ " @@ -12173,17 +12173,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 "" @@ -12200,7 +12200,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 "" @@ -12208,36 +12208,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 " @@ -12248,65 +12248,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. " @@ -12314,7 +12314,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 "" @@ -12324,7 +12324,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 "" @@ -12335,19 +12335,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. " @@ -12357,7 +12357,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}" @@ -12369,7 +12369,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 "" @@ -12383,7 +12383,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 "" @@ -12397,7 +12397,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 "" @@ -12417,27 +12417,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" @@ -12446,27 +12446,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:808 +#: website/public/showcase/th04/index.html:810 msgctxt "page:showcase/th04/index.html" msgid "Back to top" msgstr "" diff --git a/website/locales/ro/messages.po b/website/locales/ro/messages.po new file mode 100644 index 0000000000..15cce4907f --- /dev/null +++ b/website/locales/ro/messages.po @@ -0,0 +1,12933 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: website/public/blog/index.html:111 +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/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/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 +#: 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/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 "Blog" +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/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 "Guides" +msgstr "" + +#: website/public/blog/index.html:126 website/public/blog/index.html:245 +#: website/public/blog/reverse-engineering-models/index.html:126 +#: website/public/blog/reverse-engineering-models/index.html:884 +#: website/public/blog/touhou-reconstruction/index.html:126 +#: website/public/blog/touhou-reconstruction/index.html:1081 +#: website/public/contributors/index.html:127 +#: website/public/contributors/index.html:1132 +#: website/public/examples/dino-lab/index.html:127 +#: website/public/examples/dino-lab/index.html:476 website/public/faq/index.html:126 +#: website/public/faq/index.html:574 website/public/first-investigation/index.html:126 +#: website/public/first-investigation/index.html:535 +#: website/public/get-started/index.html:126 website/public/get-started/index.html:1818 +#: website/public/guides/browser/index.html:126 +#: website/public/guides/browser/index.html:508 website/public/guides/index.html:126 +#: website/public/guides/index.html:283 website/public/guides/javascript/index.html:126 +#: website/public/guides/javascript/index.html:504 +#: website/public/guides/native/index.html:126 +#: website/public/guides/native/index.html:510 website/public/index.html:128 +#: website/public/index.html:1223 website/public/showcase/aegis/index.html:127 +#: website/public/showcase/aegis/index.html:809 +#: website/public/showcase/ctf/index.html:126 website/public/showcase/ctf/index.html:778 +#: website/public/showcase/dx-ball/index.html:126 +#: website/public/showcase/dx-ball/index.html:786 website/public/showcase/index.html:126 +#: website/public/showcase/index.html:318 website/public/showcase/notion/index.html:126 +#: website/public/showcase/notion/index.html:632 +#: website/public/showcase/th04/index.html:126 +#: website/public/showcase/th04/index.html:801 +msgctxt "shared" +msgid "Contributors" +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:1819 +#: website/public/guides/browser/index.html:509 website/public/guides/index.html:284 +#: website/public/guides/javascript/index.html:505 +#: website/public/guides/native/index.html:511 website/public/index.html:1224 +#: website/public/showcase/aegis/index.html:810 +#: website/public/showcase/ctf/index.html:779 +#: website/public/showcase/dx-ball/index.html:787 website/public/showcase/index.html:319 +#: website/public/showcase/notion/index.html:633 +#: website/public/showcase/th04/index.html:802 +msgctxt "shared" +msgid "Source" +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:1820 +#: website/public/guides/browser/index.html:510 website/public/guides/index.html:285 +#: website/public/guides/javascript/index.html:506 +#: website/public/guides/native/index.html:512 website/public/index.html:1225 +#: website/public/showcase/aegis/index.html:811 +#: website/public/showcase/ctf/index.html:780 +#: website/public/showcase/dx-ball/index.html:788 website/public/showcase/index.html:320 +#: website/public/showcase/notion/index.html:634 +#: website/public/showcase/th04/index.html:803 +msgctxt "shared" +msgid "MIT license" +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:1821 +#: website/public/guides/browser/index.html:511 website/public/guides/index.html:286 +#: website/public/guides/javascript/index.html:507 +#: website/public/guides/native/index.html:513 website/public/index.html:1226 +#: website/public/showcase/aegis/index.html:812 +#: website/public/showcase/ctf/index.html:781 +#: website/public/showcase/dx-ball/index.html:789 website/public/showcase/index.html:321 +#: website/public/showcase/notion/index.html:635 +#: website/public/showcase/th04/index.html:804 +msgctxt "shared" +msgid "Join the community" +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:1822 +#: website/public/guides/browser/index.html:512 website/public/guides/index.html:287 +#: website/public/guides/javascript/index.html:508 +#: website/public/guides/native/index.html:514 website/public/index.html:1227 +#: website/public/showcase/aegis/index.html:813 +#: website/public/showcase/ctf/index.html:782 +#: website/public/showcase/dx-ball/index.html:790 website/public/showcase/index.html:322 +#: website/public/showcase/notion/index.html:636 +#: website/public/showcase/th04/index.html:805 +msgctxt "shared" +msgid "Follow us on X" +msgstr "" + +#. {ph0}: +#: website/public/blog/index.html:254 +#: website/public/blog/reverse-engineering-models/index.html:893 +#: website/public/blog/touhou-reconstruction/index.html:1090 +#: website/public/contributors/index.html:1141 +#: website/public/examples/dino-lab/index.html:485 website/public/faq/index.html:583 +#: website/public/first-investigation/index.html:544 +#: website/public/get-started/index.html:1827 +#: website/public/guides/browser/index.html:517 website/public/guides/index.html:292 +#: website/public/guides/javascript/index.html:513 +#: website/public/guides/native/index.html:519 website/public/index.html:1232 +#: website/public/showcase/aegis/index.html:818 +#: website/public/showcase/ctf/index.html:787 +#: website/public/showcase/dx-ball/index.html:795 website/public/showcase/index.html:327 +#: website/public/showcase/notion/index.html:641 +#: website/public/showcase/th04/index.html:810 +#, 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: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/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 +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/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 +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/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 +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/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/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/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:254 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/blog/reverse-engineering-models/index.html:111 +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:893 +msgctxt "page:blog/reverse-engineering-models/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:111 +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:1090 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/contributors/index.html:112 +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:1141 +msgctxt "page:contributors/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/examples/dino-lab/index.html:112 +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:485 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/faq/index.html:111 +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:583 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/first-investigation/index.html:111 +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:544 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/get-started/index.html:111 +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:748 website/public/get-started/index.html:778 +#: website/public/get-started/index.html:803 website/public/get-started/index.html:818 +#: website/public/get-started/index.html:866 website/public/get-started/index.html:899 +#: website/public/get-started/index.html:1051 website/public/get-started/index.html:1113 +#: website/public/get-started/index.html:1136 website/public/get-started/index.html:1160 +#: website/public/get-started/index.html:1208 website/public/get-started/index.html:1283 +#: website/public/get-started/index.html:1309 website/public/get-started/index.html:1326 +#: website/public/get-started/index.html:1569 website/public/get-started/index.html:1628 +#: website/public/get-started/index.html:1647 website/public/get-started/index.html:1669 +#: website/public/get-started/index.html:1712 website/public/get-started/index.html:1742 +#: website/public/get-started/index.html:1763 +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 "" +"The npm 6.4.0 release supports the clients below. Use the ID with {ph0} when choosing " +"a client explicitly." +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}: qoder +#. {ph1}: droid +#. {ph2}: trae +#. {ph3}: zcode +#. {ph4}: dsh +#: website/public/get-started/index.html:721 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Qoder ({ph0}), Factory Droid ({ph1}), Trae ({ph2}), ZCode ({ph3}) and DeepSeek Harness" +" ({ph4}) are available on repository main; use a source build or a release containing " +"those integrations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:728 +#, 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:740 +msgctxt "page:get-started/index.html" +msgid "Grok Bot · connect on its hosted computer" +msgstr "" + +#. {ph0}: rea +#: website/public/get-started/index.html:741 +#, 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:759 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Grok Bot connector instructions{ph1}" +msgstr "" + +#: website/public/get-started/index.html:769 +msgctxt "page:get-started/index.html" +msgid "3. Connect REA" +msgstr "" + +#: website/public/get-started/index.html:770 +msgctxt "page:get-started/index.html" +msgid "Copy this into your coding agent:" +msgstr "" + +#. {ph0}: +#: website/public/get-started/index.html:773 +#, 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:787 +#, 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:799 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "For one specific client, add its setup ID:" +msgstr "" + +#. {ph0}: y +#: website/public/get-started/index.html:829 +#, 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:835 +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:840 +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:844 +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:849 +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:850 +#, 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:857 +#, 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:877 +#, 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:883 +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:890 +msgctxt "page:get-started/index.html" +msgid "4. Try your first investigation" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:891 +#, 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:898 +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:908 +#, 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:922 +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:924 +#, 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:931 +#, 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:937 +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:940 +#, 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:948 +#, 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:954 +#, 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:961 +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:963 +#, 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:968 +#, 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:972 +#, 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:977 website/public/get-started/index.html:1735 +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:984 +msgctxt "page:get-started/index.html" +msgid "Analyze another kind of software" +msgstr "" + +#: website/public/get-started/index.html:985 +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:990 +msgctxt "page:get-started/index.html" +msgid "Native executables and libraries · Hopper, Ghidra or IDA" +msgstr "" + +#: website/public/get-started/index.html:993 +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:1002 +msgctxt "page:get-started/index.html" +msgid "Provider" +msgstr "" + +#: website/public/get-started/index.html:1011 +msgctxt "page:get-started/index.html" +msgid "Unavailable" +msgstr "" + +#: website/public/get-started/index.html:1013 +msgctxt "page:get-started/index.html" +msgid "Supported distributions" +msgstr "" + +#: website/public/get-started/index.html:1017 +msgctxt "page:get-started/index.html" +msgid "x64 · experimental" +msgstr "" + +#: website/public/get-started/index.html:1023 +msgctxt "page:get-started/index.html" +msgid "Verified profiles" +msgstr "" + +#: website/public/get-started/index.html:1024 +msgctxt "page:get-started/index.html" +msgid "Verified headless profile" +msgstr "" + +#: website/public/get-started/index.html:1025 +msgctxt "page:get-started/index.html" +msgid "See provider guide" +msgstr "" + +#: website/public/get-started/index.html:1031 +msgctxt "page:get-started/index.html" +msgid "Hopper · let setup install or connect it" +msgstr "" + +#: website/public/get-started/index.html:1032 +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:1037 +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:1043 +msgctxt "page:get-started/index.html" +msgid "" +"Linux hosts: Ubuntu 24.04+, Fedora 41+, Nobara 44+, Arch Linux, CachyOS or Omarchy. " +"Hopper is commercial software; its demo has vendor-defined limits." +msgstr "" + +#: website/public/get-started/index.html:1062 +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:1067 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Hopper setup and troubleshooting{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1075 +msgctxt "page:get-started/index.html" +msgid "Ghidra · install the free analysis tool and Java" +msgstr "" + +#: website/public/get-started/index.html:1079 +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:1084 +#, 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:1089 +#, 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:1095 +#, 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:1105 +#, 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:1126 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "" + +#: website/public/get-started/index.html:1127 +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:1150 +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:1156 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "" + +#: website/public/get-started/index.html:1172 +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:1178 +msgctxt "page:get-started/index.html" +msgid "Build Ghidra's native decompiler" +msgstr "" + +#: website/public/get-started/index.html:1179 +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:1184 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}macOS · Intel{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1190 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}macOS · Apple Silicon{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1196 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux arm64 · native build instructions{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1204 +msgctxt "page:get-started/index.html" +msgid "Then check Ghidra and save its paths for your client:" +msgstr "" + +#: website/public/get-started/index.html:1221 +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:1226 +#, 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:1239 +msgctxt "page:get-started/index.html" +msgid "IDA · connect an existing installation" +msgstr "" + +#: website/public/get-started/index.html:1240 +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:1245 +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:1251 +#, 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:1260 +#, 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:1267 +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:1268 +#, 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:1275 +#, 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:1298 +#, 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:1340 +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:1344 +#, 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:1352 +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:1357 +#, 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:1364 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Follow a native analysis example{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1369 +msgctxt "page:get-started/index.html" +msgid "Websites, Android, .NET, firmware and other targets" +msgstr "" + +#: website/public/get-started/index.html:1372 +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:1380 +msgctxt "page:get-started/index.html" +msgid "Target" +msgstr "" + +#: website/public/get-started/index.html:1381 +msgctxt "page:get-started/index.html" +msgid "Tools to prepare" +msgstr "" + +#: website/public/get-started/index.html:1382 +msgctxt "page:get-started/index.html" +msgid "Guide" +msgstr "" + +#: website/public/get-started/index.html:1387 +msgctxt "page:get-started/index.html" +msgid "JavaScript / Electron" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1389 website/public/get-started/index.html:1394 +#: website/public/get-started/index.html:1399 website/public/get-started/index.html:1409 +#: website/public/get-started/index.html:1419 website/public/get-started/index.html:1429 +#: website/public/get-started/index.html:1439 website/public/get-started/index.html:1449 +#: website/public/get-started/index.html:1459 website/public/get-started/index.html:1469 +#: website/public/get-started/index.html:1479 website/public/get-started/index.html:1489 +#: website/public/get-started/index.html:1499 website/public/get-started/index.html:1509 +#: website/public/get-started/index.html:1519 website/public/get-started/index.html:1529 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Open guide{ph1}" +msgstr "" + +#: website/public/get-started/index.html:1392 +msgctxt "page:get-started/index.html" +msgid "Website" +msgstr "" + +#: website/public/get-started/index.html:1397 +msgctxt "page:get-started/index.html" +msgid ".NET / Flutter / packages" +msgstr "" + +#: website/public/get-started/index.html:1407 +msgctxt "page:get-started/index.html" +msgid "Android APK" +msgstr "" + +#: website/public/get-started/index.html:1417 +msgctxt "page:get-started/index.html" +msgid "Android device" +msgstr "" + +#: website/public/get-started/index.html:1427 +msgctxt "page:get-started/index.html" +msgid "Android resources" +msgstr "" + +#: website/public/get-started/index.html:1437 +msgctxt "page:get-started/index.html" +msgid "JEB project" +msgstr "" + +#: website/public/get-started/index.html:1447 +msgctxt "page:get-started/index.html" +msgid "Firmware" +msgstr "" + +#: website/public/get-started/index.html:1457 +msgctxt "page:get-started/index.html" +msgid "WASM" +msgstr "" + +#: website/public/get-started/index.html:1467 +msgctxt "page:get-started/index.html" +msgid "SQLite database" +msgstr "" + +#: website/public/get-started/index.html:1477 +msgctxt "page:get-started/index.html" +msgid "EVM bytecode" +msgstr "" + +#: website/public/get-started/index.html:1487 +msgctxt "page:get-started/index.html" +msgid "ELF / Linux crash" +msgstr "" + +#: website/public/get-started/index.html:1497 +msgctxt "page:get-started/index.html" +msgid "HAR / SAZ / mitmproxy" +msgstr "" + +#: website/public/get-started/index.html:1507 +msgctxt "page:get-started/index.html" +msgid "PCAP / PCAPNG" +msgstr "" + +#: website/public/get-started/index.html:1517 +msgctxt "page:get-started/index.html" +msgid "Logic signals" +msgstr "" + +#: website/public/get-started/index.html:1527 +msgctxt "page:get-started/index.html" +msgid "Process behavior" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/get-started/index.html:1539 +#, 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:1559 +msgctxt "page:get-started/index.html" +msgid "Use REA from a terminal" +msgstr "" + +#: website/public/get-started/index.html:1561 +msgctxt "page:get-started/index.html" +msgid "CLI commands, global installation and curl" +msgstr "" + +#: website/public/get-started/index.html:1562 +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:1568 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:1580 +#, 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:1586 +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:1587 +#, 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:1592 +#, 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:1598 +#, 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:1606 +#, 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:1611 +#, 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:1616 +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:1621 +#, 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:1627 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:1639 +#, 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:1658 +#, 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:1662 +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:1680 +#, 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:1684 +#, 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:1693 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "" + +#: website/public/get-started/index.html:1695 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "" + +#. {ph0}: doctor +#: website/public/get-started/index.html:1696 +#, 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:1700 +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:1707 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "" + +#: website/public/get-started/index.html:1708 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "" + +#: website/public/get-started/index.html:1711 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "" + +#: website/public/get-started/index.html:1723 +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:1728 +msgctxt "page:get-started/index.html" +msgid "Windows, WSL and paths with spaces" +msgstr "" + +#: website/public/get-started/index.html:1729 +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:1738 +msgctxt "page:get-started/index.html" +msgid "Windows setup command:" +msgstr "" + +#: website/public/get-started/index.html:1755 +msgctxt "page:get-started/index.html" +msgid "Update or remove REA" +msgstr "" + +#: website/public/get-started/index.html:1756 +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:1774 +#, 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:1780 +#, 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:1788 +#, 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:1792 +#, 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:1799 +#, 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:1803 +#, 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:748 website/public/get-started/index.html:803 +#: website/public/get-started/index.html:818 website/public/get-started/index.html:866 +#: website/public/get-started/index.html:1051 website/public/get-started/index.html:1113 +#: website/public/get-started/index.html:1136 website/public/get-started/index.html:1160 +#: website/public/get-started/index.html:1208 website/public/get-started/index.html:1283 +#: website/public/get-started/index.html:1309 website/public/get-started/index.html:1326 +#: website/public/get-started/index.html:1647 website/public/get-started/index.html:1669 +#: website/public/get-started/index.html:1742 website/public/get-started/index.html:1763 +msgctxt "page:get-started/index.html" +msgid "Copy command" +msgstr "" + +#: website/public/get-started/index.html:778 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "" + +#: website/public/get-started/index.html:899 +msgctxt "page:get-started/index.html" +msgid "Copy Notes investigation prompt" +msgstr "" + +#: website/public/get-started/index.html:1569 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "" + +#: website/public/get-started/index.html:1628 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "" + +#: website/public/get-started/index.html:1712 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "" + +#: website/public/get-started/index.html:1827 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/browser/index.html:111 +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:517 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/index.html:111 +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: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:292 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/javascript/index.html:111 +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:435 +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:334 +#: website/public/guides/javascript/index.html:349 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "" + +#: website/public/guides/javascript/index.html:328 +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:342 +#, 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:359 +#, 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:366 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations accompany " +"the API, channel and handler findings." +msgstr "" + +#: website/public/guides/javascript/index.html:382 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:383 +#, 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:389 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "" + +#: website/public/guides/javascript/index.html:398 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "" + +#: website/public/guides/javascript/index.html:434 +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:447 +#, 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:453 +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:460 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:462 +#, 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:468 +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:474 +#, 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:480 +#, 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:486 +#, 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:435 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "" + +#: website/public/guides/javascript/index.html:513 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/native/index.html:111 +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." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:324 +#, 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:329 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:334 +#, 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:342 +#, 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:346 +#: website/public/guides/native/index.html:477 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:355 +#, 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:363 +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:370 +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:372 +#, 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:377 +#, 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:381 +#, 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:389 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "" + +#: website/public/guides/native/index.html:390 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "" + +#: website/public/guides/native/index.html:393 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "" + +#: website/public/guides/native/index.html:399 +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:404 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:413 +#, 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:418 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "" + +#: website/public/guides/native/index.html:421 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "" + +#: website/public/guides/native/index.html:429 +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:436 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "" + +#: website/public/guides/native/index.html:438 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "" + +#: website/public/guides/native/index.html:445 +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:450 +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:455 +#, 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:462 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:463 +#, 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:470 +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:476 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "" + +#. {ph0}: main +#: website/public/guides/native/index.html:489 +#, 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:495 +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:346 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/guides/native/index.html:477 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "" + +#: website/public/guides/native/index.html:519 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/index.html:113 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "" + +#: website/public/index.html:205 website/public/index.html:215 +#: website/public/index.html:213 +msgctxt "page:index.html" +msgid "On this page" +msgstr "" + +#: website/public/index.html:206 website/public/index.html:254 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:217 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:218 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How it works{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:219 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:220 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:221 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Showcases{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:222 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "" + +#: website/public/index.html:232 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "" + +#. {ph0}:
+#: website/public/index.html:233 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "" + +#: website/public/index.html:234 +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:239 +msgctxt "page:index.html" +msgid "Get started" +msgstr "" + +#: website/public/index.html:240 +msgctxt "page:index.html" +msgid "See an example ↓" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:243 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Showcases →{ph1} — investigations and interactive demos." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:247 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Blog →{ph1} — methods and reconstruction notes." +msgstr "" + +#: website/public/index.html:255 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "" + +#. {ph0}: +#: website/public/index.html:258 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/index.html:263 website/public/index.html:287 +#: website/public/index.html:523 website/public/index.html:604 +#: website/public/index.html:828 website/public/index.html:1140 +#: website/public/index.html:1168 +msgctxt "page:index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:272 +#, 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:284 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "" + +#: website/public/index.html:296 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "" + +#: website/public/index.html:300 +msgctxt "page:index.html" +msgid "Setup for your platform:" +msgstr "" + +#. {ph0}: +#. {ph1}: curl +#. {ph2}: +#: website/public/index.html:311 +#, python-brace-format +msgctxt "page:index.html" +msgid "Other install options: {ph0}{ph1} →{ph2}" +msgstr "" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:317 +#, 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:330 +msgctxt "page:index.html" +msgid "How it works" +msgstr "" + +#: website/public/index.html:332 +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:339 +msgctxt "page:index.html" +msgid "Ask about one feature" +msgstr "" + +#: website/public/index.html:340 +msgctxt "page:index.html" +msgid "Give your agent a program or page and a question." +msgstr "" + +#: website/public/index.html:343 +msgctxt "page:index.html" +msgid "Inspect the program" +msgstr "" + +#: website/public/index.html:344 +msgctxt "page:index.html" +msgid "REA returns code, references and runtime observations." +msgstr "" + +#: website/public/index.html:347 +msgctxt "page:index.html" +msgid "Explain it, then try a change" +msgstr "" + +#: website/public/index.html:348 +msgctxt "page:index.html" +msgid "Your agent uses the findings to explain or rebuild the feature." +msgstr "" + +#: website/public/index.html:354 +msgctxt "page:index.html" +msgid "See the full Calculator investigation" +msgstr "" + +#. {ph0}: 200 + 10% +#: website/public/index.html:355 +#, python-brace-format +msgctxt "page:index.html" +msgid "Why does Calculator give 220 for {ph0}?" +msgstr "" + +#: website/public/index.html:364 +msgctxt "page:index.html" +msgid "Follow the instructions step by step" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:372 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:380 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:388 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:399 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "" + +#: website/public/index.html:441 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:442 +#, 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:446 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "" + +#: website/public/index.html:452 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "" + +#: website/public/index.html:456 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "" + +#: website/public/index.html:461 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:462 +#, 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:468 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "" + +#: website/public/index.html:478 +msgctxt "page:index.html" +msgid "Divide" +msgstr "" + +#: website/public/index.html:483 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:484 +#, 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:488 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "" + +#: website/public/index.html:504 website/public/index.html:431 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:507 +#, 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:515 +msgctxt "page:index.html" +msgid "Ask your agent the same question" +msgstr "" + +#. {ph0}: +#: website/public/index.html:518 +#, 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:532 +#, 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:540 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:543 +#, 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:556 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "" + +#: website/public/index.html:557 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "" + +#: website/public/index.html:562 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "" + +#: website/public/index.html:563 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:570 +#, 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:582 +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:587 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "" + +#: website/public/index.html:588 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "" + +#: website/public/index.html:590 +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:596 +msgctxt "page:index.html" +msgid "1. Ask about the speed" +msgstr "" + +#. {ph0}: +#: website/public/index.html:599 +#, 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:613 +#, 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:622 +msgctxt "page:index.html" +msgid "2. Find the speed rule" +msgstr "" + +#: website/public/index.html:623 +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:630 +msgctxt "page:index.html" +msgid "3. Play the result" +msgstr "" + +#: website/public/index.html:631 +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:667 +msgctxt "page:index.html" +msgid "Play" +msgstr "" + +#: website/public/index.html:670 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "" + +#: website/public/index.html:671 +msgctxt "page:index.html" +msgid "Restart" +msgstr "" + +#: website/public/index.html:674 +msgctxt "page:index.html" +msgid "Speed" +msgstr "" + +#: website/public/index.html:684 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "" + +#: website/public/index.html:688 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "" + +#: website/public/index.html:691 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" + +#: website/public/index.html:696 +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:702 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "" + +#: website/public/index.html:708 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:711 +#, 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:719 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "" + +#: website/public/index.html:728 +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:733 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:735 +#, 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:742 +#, 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:750 +#, 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:760 +#, 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:767 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "" + +#: website/public/index.html:773 +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:779 +#, 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:785 +#, 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:794 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" + +#: website/public/index.html:811 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "" + +#: website/public/index.html:812 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "" + +#: website/public/index.html:814 +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:820 +msgctxt "page:index.html" +msgid "1. Ask about the % button" +msgstr "" + +#. {ph0}: +#: website/public/index.html:823 +#, 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:837 +#, 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:846 +msgctxt "page:index.html" +msgid "2. Find both rules" +msgstr "" + +#: website/public/index.html:847 +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:853 +msgctxt "page:index.html" +msgid "With +" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:854 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "" + +#: website/public/index.html:860 +msgctxt "page:index.html" +msgid "With ×" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:861 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "" + +#: website/public/index.html:868 +msgctxt "page:index.html" +msgid "3. Try the % button" +msgstr "" + +#: website/public/index.html:869 +msgctxt "page:index.html" +msgid "We recreated both rules below. Choose + or ×, press %, then press =." +msgstr "" + +#: website/public/index.html:917 +msgctxt "page:index.html" +msgid "Reset" +msgstr "" + +#: website/public/index.html:925 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "" + +#: website/public/index.html:928 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "" + +#: website/public/index.html:935 +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:936 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "" + +#: website/public/index.html:942 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "" + +#: website/public/index.html:951 +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:955 +#, 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:964 +#, 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:972 +#, 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:986 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "" + +#: website/public/index.html:997 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "" + +#: website/public/index.html:1007 +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:1012 +#, 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:1032 +msgctxt "page:index.html" +msgid "REA case studies." +msgstr "" + +#: website/public/index.html:1033 +msgctxt "page:index.html" +msgid "Explore a feature in a released app or game, with code and checked results." +msgstr "" + +#: website/public/index.html:1038 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "" + +#: website/public/index.html:1042 +msgctxt "page:index.html" +msgid "Android · APK analysis" +msgstr "" + +#: website/public/index.html:1043 +msgctxt "page:index.html" +msgid "How an authenticator generates a login code" +msgstr "" + +#: website/public/index.html:1044 +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:1048 +msgctxt "page:index.html" +msgid "Read the Android case study" +msgstr "" + +#: website/public/index.html:1053 +msgctxt "page:index.html" +msgid "Electron · Feature tracing" +msgstr "" + +#: website/public/index.html:1054 +msgctxt "page:index.html" +msgid "How Notion copies text and HTML" +msgstr "" + +#: website/public/index.html:1055 +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:1059 +msgctxt "page:index.html" +msgid "Read the Notion case study" +msgstr "" + +#: website/public/index.html:1064 +msgctxt "page:index.html" +msgid "Native · Reconstruction" +msgstr "" + +#: website/public/index.html:1065 +msgctxt "page:index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "" + +#: website/public/index.html:1066 +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:1070 +msgctxt "page:index.html" +msgid "Read the DX-Ball case study" +msgstr "" + +#: website/public/index.html:1081 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "" + +#: website/public/index.html:1082 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "" + +#: website/public/index.html:1083 +msgctxt "page:index.html" +msgid "Download our Notes example, trace its CSV export, and check one changed input." +msgstr "" + +#: website/public/index.html:1088 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "" + +#: website/public/index.html:1097 +msgctxt "page:index.html" +msgid "Choose your target." +msgstr "" + +#: website/public/index.html:1098 +msgctxt "page:index.html" +msgid "These guides cover setup and a first investigation for each kind of software." +msgstr "" + +#: website/public/index.html:1105 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "" + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables and " +"libraries." +msgstr "" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "" + +#: website/public/index.html:1113 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "" + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder or ASAR " +"archive." +msgstr "" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "" + +#: website/public/index.html:1121 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "" + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results across runs." +msgstr "" + +#: website/public/index.html:1126 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "" + +#: website/public/index.html:1130 +msgctxt "page:index.html" +msgid "Try a larger project" +msgstr "" + +#. {ph0}: +#: website/public/index.html:1135 +#, 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:1149 +#, 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:1158 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "" + +#. {ph0}: +#: website/public/index.html:1163 +#, 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:1177 +#, 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:1186 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "" + +#: website/public/index.html:1197 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Read the FAQ{ph1} — setup and common questions." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Join Discord{ph1} — get help and discuss your investigations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1206 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}GitHub issues{ph1} — report a bug or request a feature." +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:263 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "" + +#: website/public/index.html:287 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "" + +#: website/public/index.html:299 +msgctxt "page:index.html" +msgid "Setup options" +msgstr "" + +#: website/public/index.html:367 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "" + +#: website/public/index.html:523 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "" + +#: website/public/index.html:604 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "" + +#: website/public/index.html:657 +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:828 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "" + +#: website/public/index.html:874 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "" + +#: website/public/index.html:1140 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "" + +#: website/public/index.html:1168 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "" + +#: website/public/index.html:1232 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/aegis/index.html:112 +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:741 +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}: +#: website/public/showcase/aegis/index.html:716 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into the same " +"folder. On Windows, use a Linux environment such as WSL." +msgstr "" + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:721 +#, 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:727 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "" + +#: website/public/showcase/aegis/index.html:731 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "" + +#: website/public/showcase/aegis/index.html:737 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "" + +#: website/public/showcase/aegis/index.html:740 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:754 +#, 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:759 +#, 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:769 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:771 +#, 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:787 +#, 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:794 +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:741 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "" + +#: website/public/showcase/aegis/index.html:818 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/ctf/index.html:111 +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:787 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:111 +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:795 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/index.html:111 +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:304 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "" + +#: website/public/showcase/index.html:305 +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:309 +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:327 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/notion/index.html:111 +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:641 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/th04/index.html:111 +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:810 +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 "Traducerea este în curs de actualizare. Citește deocamdată această pagină în engleză." + +#: 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/public/blog/index.html b/website/public/blog/index.html index dd963ddc68..f8f558a5f1 100644 --- a/website/public/blog/index.html +++ b/website/public/blog/index.html @@ -57,6 +57,8 @@ + + @@ -124,7 +126,7 @@ Contributors
-
English
+
English