# Rapp Brainstem

> Drive the local RAPP brainstem (a Flask server on localhost:7071) for any request that involves RAPP, the brainstem, RAR (the RAPP Agent Registry), community agents, or "the twin". Every capability — discover/install/vote on community agents, run user-defined Python agents, drive memory, ask the twin — flows through a single POST /chat call. USE THIS SKILL when the user mentions 'rapp', 'brainstem', 'rar', 'registry agent', 'community agents', 'twin', 'install agent', or asks to do anything that should be handled by an agent they have dropped into their local agents/ directory. Also use when the user wants to install RAPP for the first time.

- Skill: `kody-w/rapp-brainstem` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add kody-w/rapp-brainstem`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kody-w/rapp-brainstem/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: kody-w (https://skillmd.com/u/kody-w)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kody-w/rapp-brainstem

---


# rapp-brainstem

Talk to the user's local RAPP brainstem instead of doing the task yourself when the request fits a brainstem agent.

## Mental Model

RAPP is "engine, not experience". The brainstem is the engine — a Flask server that:

- Loads `soul.md` as the system prompt every request
- Auto-discovers Python agents from `agents/*_agent.py` (recursive, flat dir conventions)
- Calls the GitHub Copilot API with OpenAI-format tool-calling
- Executes agent `.perform()` methods and loops up to 3 rounds

The user installs new capabilities by **dropping a `*_agent.py` file into `agents/`**. No server restart. The most important built-in is **RAR (`RARRemoteAgent`)** — a package-manager-style client for the open RAPP Agent Registry: discover, install, vote, review, submit community agents.

This skill never reimplements agent logic. It checks the brainstem is up, installs it if not, then **delegates** by hitting `/chat`.

## Step 1 — Health check

Before any request, run:

```bash
curl -s -m 3 http://localhost:7071/health
```

- **HTTP 200 with JSON containing `"status":"ok"`** — proceed to Step 3.
- **Connection refused / timeout / non-200** — go to Step 2.

If the user has set the env var `RAPP_BRAINSTEM_URL`, use that instead of `localhost:7071` — Tier 2 RAPP runs the same `/chat` API on Azure.

## Step 2 — Install if missing

Only do this after Step 1 confirmed the brainstem is not running. Tell the user you're going to install RAPP, then run:

```bash
curl -sSfL https://raw.githubusercontent.com/kody-w/rapp-installer/main/install.sh | bash
```

This script:
1. Clones rapp-installer into `~/.brainstem`
2. Creates `~/.brainstem/venv` (Python 3.11)
3. Installs requirements
4. Starts the brainstem on port 7071
5. Triggers GitHub Copilot device-code auth on first `/chat`

After it finishes, re-run Step 1. Report any failure verbatim — do not retry blindly.

## Step 3 — Delegate via /chat

Every user request that fits the brainstem (RAR actions, Twin, memory, any custom agent the user has) goes through one HTTP call:

```bash
curl -s -X POST http://localhost:7071/chat \
  -H 'Content-Type: application/json' \
  -d '{"user_input": "<phrase the user request as plain English>"}'
```

The response is JSON: `{"response": "...", "agent_logs": "...", "session_id": "..."}`.

**Show the user the `response` field.** If `agent_logs` contains useful detail, surface a brief summary of which agents fired.

For multi-turn conversations, pass `conversation_history` (an array of `{role, content}`) and the prior `session_id` so memory agents stay coherent.

### What to phrase as `user_input`

Just say it in English — the brainstem's tool-calling decides which agent runs. Examples:

| User says | `user_input` to send |
|---|---|
| "show me the top community agents" | "Use RAR to show the leaderboard." |
| "find me a meeting-notes agent" | "Use RAR to search for 'meeting notes'." |
| "install the @kody/something agent" | "Use RAR to install @kody/something into my agents directory." |
| "what does my twin think about X" | "Ask the twin: <X>" |
| "remember that I prefer …" | "Save this preference: …" |

Do **not** try to call agents directly with REST routes — `/chat` is the only entry point. New REST routes are not added.

## Step 4 — When to NOT delegate

Skip the brainstem and answer directly when:

- The user is asking a generic question with no RAPP/agent context.
- The user is editing code in the current repo (use normal Claude tools).
- The brainstem is unreachable AND the user declined to install it.

## Failure modes

| Symptom | What to do |
|---|---|
| `/health` 200 but `/chat` returns 401 / auth error | The brainstem needs a Copilot token. Tell the user to run `gh auth login` then retry, or visit `http://localhost:7071/login` for device code. |
| `/chat` returns `{"error": "user_input is required"}` | You sent the wrong key — must be `user_input`, not `messages`. |
| `agent_logs` shows agent crashed | Quote the error to the user. Most agent bugs are import errors — they may need to add a missing dep. |
| Install script fails on Python version | rapp-installer wants 3.11. Tell the user to install Python 3.11 (`brew install python@3.11`). |

## What this skill does not do

- Does not bundle or update RAPP agents itself. The user owns `agents/`.
- Does not modify `soul.md`. The user edits that via VS Code.
- Does not bypass `/chat`. All capabilities flow through that one endpoint.
- Does not federate to T2 (Azure) or T3 (Copilot Studio) directly — those are separate tiers reached through the same `user_input` -> `/chat` shape, just with a different `RAPP_BRAINSTEM_URL`.

<!-- toaster:generated:begin -->

## Run this — do not improvise

This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as `rapp_brainstem_agent.py` and embedded as the fenced Python below (sha256 c23a36b5425b4dad…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to `rapp_brainstem_agent.py` first:

```bash
python3 rapp_brainstem_agent.py '{"key": "value"}'      # arguments as one JSON object
echo '{"key": "value"}' | python3 rapp_brainstem_agent.py   # or on stdin
python3 rapp_brainstem_agent.py --tool                      # emit the JSON tool contract
```

Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns `steps`, execute those steps in order exactly as returned; if it returns `instructions`, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed `rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent`.

````python  # rapp:deterministic
"""RappBrainstem -- Drive the local RAPP brainstem (a Flask server on localhost:7071) for any
request that involves RAPP, the brainstem, RAR (the RAPP Agent Registry),
community agents, or "the twin". Every capability — discover/install/vote on
community agents, run user-defined Python agents, drive memory, ask the twin —
flows through a single POST /chat call. USE THIS SKILL when the user mentions
'rapp', 'brainstem', 'rar', 'registry agent', 'community agents', 'twin',
'install agent', or asks to do anything that should be handled by an agent
they have dropped into their local agents/ directory. Also use when the user
wants to install RAPP for the first time.

Generated by the rapp skill from rapp-brainstem. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""

import json
import re
import sys

try:
    from agents.basic_agent import BasicAgent
except ImportError:  # running OUTSIDE the brainstem -- stay executable anyway.
    class BasicAgent:  # noqa: D101 - minimal stand-in, same contract
        def __init__(self, name=None, metadata=None):
            if name:
                self.name = name
            if metadata:
                self.metadata = metadata

        def perform(self, **kwargs):
            return "Not implemented."

        def system_context(self):
            return None

        def to_tool(self):
            return {"type": "function", "function": {
                "name": self.name,
                "description": self.metadata.get("description", ""),
                "parameters": self.metadata.get("parameters", {})}}

# The procedural layer, verbatim from the source capability. The brainstem
# returns this to the model, so the skill's instructions still drive behaviour
# -- now behind a typed, deterministic tool contract.
INSTRUCTIONS = '# rapp-brainstem\n\nTalk to the user's local RAPP brainstem instead of doing the task yourself when the request fits a brainstem agent.\n\n## Mental Model\n\nRAPP is "engine, not experience". The brainstem is the engine — a Flask server that:\n\n- Loads `soul.md` as the system prompt every request\n- Auto-discovers Python agents from `agents/*_agent.py` (recursive, flat dir conventions)\n- Calls the GitHub Copilot API with OpenAI-format tool-calling\n- Executes agent `.perform()` methods and loops up to 3 rounds\n\nThe user installs new capabilities by **dropping a `*_agent.py` file into `agents/`**. No server restart. The most important built-in is **RAR (`RARRemoteAgent`)** — a package-manager-style client for the open RAPP Agent Registry: discover, install, vote, review, submit community agents.\n\nThis skill never reimplements agent logic. It checks the brainstem is up, installs it if not, then **delegates** by hitting `/chat`.\n\n## Step 1 — Health check\n\nBefore any request, run:\n\n```bash\ncurl -s -m 3 http://localhost:7071/health\n```\n\n- **HTTP 200 with JSON containing `"status":"ok"`** — proceed to Step 3.\n- **Connection refused / timeout / non-200** — go to Step 2.\n\nIf the user has set the env var `RAPP_BRAINSTEM_URL`, use that instead of `localhost:7071` — Tier 2 RAPP runs the same `/chat` API on Azure.\n\n## Step 2 — Install if missing\n\nOnly do this after Step 1 confirmed the brainstem is not running. Tell the user you're going to install RAPP, then run:\n\n```bash\ncurl -sSfL https://raw.githubusercontent.com/kody-w/rapp-installer/main/install.sh | bash\n```\n\nThis script:\n1. Clones rapp-installer into `~/.brainstem`\n2. Creates `~/.brainstem/venv` (Python 3.11)\n3. Installs requirements\n4. Starts the brainstem on port 7071\n5. Triggers GitHub Copilot device-code auth on first `/chat`\n\nAfter it finishes, re-run Step 1. Report any failure verbatim — do not retry blindly.\n\n## Step 3 — Delegate via /chat\n\nEvery user request that fits the brainstem (RAR actions, Twin, memory, any custom agent the user has) goes through one HTTP call:\n\n```bash\ncurl -s -X POST http://localhost:7071/chat \\\n  -H 'Content-Type: application/json' \\\n  -d '{"user_input": "<phrase the user request as plain English>"}'\n```\n\nThe response is JSON: `{"response": "...", "agent_logs": "...", "session_id": "..."}`.\n\n**Show the user the `response` field.** If `agent_logs` contains useful detail, surface a brief summary of which agents fired.\n\nFor multi-turn conversations, pass `conversation_history` (an array of `{role, content}`) and the prior `session_id` so memory agents stay coherent.\n\n### What to phrase as `user_input`\n\nJust say it in English — the brainstem's tool-calling decides which agent runs. Examples:\n\n| User says | `user_input` to send |\n|---|---|\n| "show me the top community agents" | "Use RAR to show the leaderboard." |\n| "find me a meeting-notes agent" | "Use RAR to search for 'meeting notes'." |\n| "install the @kody/something agent" | "Use RAR to install @kody/something into my agents directory." |\n| "what does my twin think about X" | "Ask the twin: <X>" |\n| "remember that I prefer …" | "Save this preference: …" |\n\nDo **not** try to call agents directly with REST routes — `/chat` is the only entry point. New REST routes are not added.\n\n## Step 4 — When to NOT delegate\n\nSkip the brainstem and answer directly when:\n\n- The user is asking a generic question with no RAPP/agent context.\n- The user is editing code in the current repo (use normal Claude tools).\n- The brainstem is unreachable AND the user declined to install it.\n\n## Failure modes\n\n| Symptom | What to do |\n|---|---|\n| `/health` 200 but `/chat` returns 401 / auth error | The brainstem needs a Copilot token. Tell the user to run `gh auth login` then retry, or visit `http://localhost:7071/login` for device code. |\n| `/chat` returns `{"error": "user_input is required"}` | You sent the wrong key — must be `user_input`, not `messages`. |\n| `agent_logs` shows agent crashed | Quote the error to the user. Most agent bugs are import errors — they may need to add a missing dep. |\n| Install script fails on Python version | rapp-installer wants 3.11. Tell the user to install Python 3.11 (`brew install python@3.11`). |\n\n## What this skill does not do\n\n- Does not bundle or update RAPP agents itself. The user owns `agents/`.\n- Does not modify `soul.md`. The user edits that via VS Code.\n- Does not bypass `/chat`. All capabilities flow through that one endpoint.\n- Does not federate to T2 (Azure) or T3 (Copilot Studio) directly — those are separate tiers reached through the same `user_input` -> `/chat` shape, just with a different `RAPP_BRAINSTEM_URL`.'

# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = [
    {
        "cmd": "gh auth login",
        "line": 90
    },
    {
        "cmd": "curl -s -m 3 http://localhost:7071/health",
        "line": 23
    },
    {
        "cmd": "curl -sSfL https://raw.githubusercontent.com/kody-w/rapp-installer/main/install.sh | bash",
        "line": 36
    },
    {
        "cmd": "curl -s -X POST http://localhost:7071/chat \\",
        "line": 53
    }
]


class RappBrainstemAgent(BasicAgent):
    def __init__(self):
        self.name = 'RappBrainstem'
        self.metadata = {
        "name": "RappBrainstem",
        "description": "Drive the local RAPP brainstem (a Flask server on localhost:7071) for any\nrequest that involves RAPP, the brainstem, RAR (the RAPP Agent Registry),\ncommunity agents, or \"the twin\". Every capability \u2014 discover/install/vote on\ncommunity agents, run user-defined Python agents, drive memory, ask the twin \u2014\nflows through a single POST /chat call. USE THIS SKILL when the user mentions\n'rapp', 'brainstem', 'rar', 'registry agent', 'community agents', 'twin',\n'install agent', or asks to do anything that should be handled by an agent\nthey have dropped into their local agents/ directory. Also use when the user\nwants to install RAPP for the first time.",
        "parameters": {
                "properties": {},
                "required": [],
                "type": "object"
        }
        }
        super().__init__(name=self.name, metadata=self.metadata)

    def perform(self, **kwargs):  # toaster:generated-perform
        missing = [k for k in self.metadata["parameters"].get("required", [])
                   if k not in kwargs]
        if missing:
            return json.dumps({"status": "error",
                               "missing_required": missing}, indent=2)
        resolved, unresolved = [], set()
        for step in STEPS:
            cmd = step["cmd"]
            for key, value in kwargs.items():
                for token in ("<" + key.replace("_", "-") + ">",
                              "<" + key + ">",
                              "{{" + key + "}}",
                              "$" + key.upper()):
                    cmd = cmd.replace(token, str(value))
            for leftover in re.findall(r"<[a-zA-Z][a-zA-Z0-9 _.-]{1,40}>", cmd):
                unresolved.add(leftover)
            resolved.append(cmd)
        return json.dumps({"status": "ok",
                           "steps": resolved,
                           "unresolved_placeholders": sorted(unresolved),
                           "note": "Resolved deterministically by the agent; "
                                   "run in order. Nothing was executed here."},
                          indent=2)

if __name__ == "__main__":
    # Standalone entry point: the deterministic layer runs with NO brainstem,
    # no framework, no install. This is what lets a "simple SKILL.md" platform
    # keep real determinism -- the host model shells out to this file instead
    # of improvising the procedure in prose.
    #     echo '{"arg": "value"}' | python3 rapp_brainstem_agent.py
    #     python3 rapp_brainstem_agent.py '{"arg": "value"}'
    #     python3 rapp_brainstem_agent.py --tool          # emit the JSON tool contract
    _a = sys.argv[1:]
    if _a and _a[0] == "--tool":
        print(json.dumps(RappBrainstemAgent().to_tool(), indent=2))
    else:
        _raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
        print(RappBrainstemAgent().perform(**json.loads(_raw)))

# rci-capsule:v1:H4sIAAAAAAAC/617aZOi2rbtXzHqfNgNVUkPWnHPiYcijSCNgqK3buykB+lbgbP3++1voZnV3X0j7odXEZWpsNacc81mzDFJ/fcHu2ujov7wOe/S9OMHz6/j3m7jIv/w+T//a37fuHVcPi98YMFNf9FG/iItXDtdHBhNWzi1HedN62eLX+0Fl9pNsmj8uvfrRZE/10VF036mERr9bREU9cLOxy957Ved37RAmN0u4rwv0t5vHgI/PhR8lfoRXDwsfp2vPdQxoZ+3i4Mfxk1bj799/JK7RZZ1edyOC3u+13xcACVfPsw72nucf/nwstgCc8aFa5e2E6fzyi8dhqDEwosbtwD34FmXnaZwX7Q+sPvvhNZdvujAyT55fhDnvrfQRuC5/Ot97+GczM+Kevy4mN3wbsGbti95kBb3Blyuiy6MFvaiifMw9ReaejQWsDt7AngrfVmYx+3CEMTj4iiJsry4R37+EDarBxryORzNl/yX2i7LXz4ufvnqrPlNbdePX28eeto3X/n5SPO12bxfgA9/eXPA19VznJoEGFssvGIOWRsBY5/haqKiS72F4y8iO/dS4AoHyHzzxJccWDqCO8AZXl2UJbgd50AMuBzXb4nzNAAG/q99twUOe1kwaVPMB/zxtF/yuw1Wzma8W/jIgjmP5jVBXM9JFGf+y4ePH/zBzsrUb565GxWZXwJN77kdg3sfPv/7Q2rnIUjm8hE+sAs4rpy3/PuDm3ngxhwaUBTA1DCe76cg2h8+r5C/Pr6vcLs6XXxqFp+yBb6I2rb8DMM/Zjoc+XbaRl93Y/h/230M5MfeBmyu7ftLGLdR58yHdou8Bf55AQGDk8IbP93hOdKf3jwA0jUD8X7P2ZcmWvy5cOzmmzac+htbrWee/b25j+T78uWrBBL/67/+Ai4DKurOfeQbkPWPxcOOr+n2BRSKYafJ4hneR8R+af4eHB6/bG9RBCChnqkEqmMuk7Ho6sZPg2+RfweHIAaht78T8sibl1ntP/6x2IPXQM++8Px0vvRQGDeg9P0cRM7/uMiLduEPJcA0P3f9GQiM76FlXjyrey5/x4SfQGzO+M+z+E8LubC9ZvHagOx/ybxXUCCP7c34EFbWRVYCfQ+oeTvBvIvp2uLTO9A0P6LGIgCbFq9v5fD7H8/zlePr4ldQGMAtAFI+LoIUBAeUygIkRv9W/b/Nojcg/E8b+LgVOmexKco4BYdmNHFxB/m0UEs/Z8RPoFwyIKMtivTTDDHA//P+7QCUtAB3H3oXry/AVfPSX397BTAD7ATHBRUOAlqUzaIr5zjjC4Beudc8Yv+OSW+p2Cxy//4NZmMgGSDD778/cGCOub14/f6QQQzQ7wEO7y54/f33l4VSvDu/Bj606/YZtwxk6wIUcVG3ABMWThenLaiJOYq///5oEq/g5wEAcOs/usTrb7///i2qpe0mQMunzM7Br/pT045Au5vG89Hf8aQA/vq7PvP5a6v4+H7Yj4u5WYC+4Pexf/+4aDoniwGC/4SyL09HASObJAbwlfvPg81o5GePJHh6f4Yb92UhAhGR7ybNj21wPmVXfvzmaaAqDuYMf/TLfPayn/qhDcIJTg3cHsVtO/v89VHcr+9VcwRot0Df3SI8YOqpcV6w9oEn/Bnv31P40fgeBfD6+jqjDOiN/1v4e+x51s7vvwuGoS0wBHkm5u6oKnM+t+B8Dyu/ABy226758uHzlw9F8uXD67fggdJyfdBHQKI8zMdfniI3RZ77D3QC1gYgE70F/GgGRdeCV3mRfwIKv8kJi68isIc/xOBbX41AOTd++4YI/aK368XrnAp/rA+MqByN7f4P8yC/fnx0qTfe8hXTXn90wOu7SiMGorFnSgFHviGGnfnvcXnUKjgAM3W1/0OQsHcZ4lvnA/HO4qZ5FO+XXM3Tce7N7ZxbdtACPW+xBW4FfTGbHfZzCs2ICMyYXQ6KygdCv54fwDAgDcBHD3D+sd++5dj/lAn//1vZ18x5Vs6DgwLV6MtikxY5wJUfpbyByP+FX76eFuzGwOranyvix1swANEeQOwbFOMvKArgFH95d3TzyH1ATR7l+SUnXoBnAQz9XJJg7wxGizngX3ISOLSOw3AG+Z/g2AMQ4fqfXNCpntQC7Hwyl7ckmE/KPEIYz10vj5vInymn/2lmnc+wvgAweqibizOw4xTkywJgiQPoevaV0BbPEPsz83MAznvp+ENS4e8r2Te0WPSx/SSf87InUX7kww8M/dGJfzz9rzPk2k9u8HFhACL58Rv7BSa6XdMWby37hyr7DeSY/40Gg3AuHtgwN6b/AWj+N9zlS75YfBIWv2yeKffJGEv/8wKkSRq7j4kGvjVF/sv7Sm/xy7+/fJht+iPOy64FuAOYw3+UUW03/jd7370AwKFMwdEXW0DZQXj+9eXDX798l6UzaWlK4Ap/LrMZ3T4vXoGC96tP8S8vL4BjgRcPr/wBIL/56UbjgwIv8j9i77sbfz3R+/ffj1Fx/2bb/OL1XcHcTf3UewFoB1Dt9ZuC13eYbeZdQZeCdARv07lj1YHt+g+GFfsBeJ9lNgh/MVOx2I2+khRQCt7DAg60yaxL2/hT29X5k4/Ujf2WA6XdgEr7/uIfoHpneg+KbZ4P6tp+SH/9d12koHW+ocNfr789aMZ8nrKOgY7Xb254XYC54JlX7/aAIgXpVUR+/Y0N/mNxjh4MZ/EWQRCw12/RfURpBzISYO/46J1fI/leED9k9y/ND2QJuMyNwSz8vV8ecA5Gy7eZ45G5fy7MOTBARwOA7Hv9s2WNDw75J1j16dOnx/95Awj5HNTsmXNtUf43BvHlw2JeBiQ/RuFZ0HsapKD7AAQo7BrE58PiTSAAEG8WaIMf/swBPgFMeGd5fyPNt2twqJkC/fK2YfHY8Mt3Mt+7waz1/8xIDjfFTBEfrO7v5b5v+Xn5A6uzr9H8NgN+03afY+nNKAHWPUboeWuysJ25s1tvupjvZuzPi/+w/vVNwIzdmfNG3xciSCs/AO/mUGPU2/aj/XiYAcr1eXeeET5/t2QOKFsAmgGcAapqRlRguPt1Sn43HbThB6U5bAFEAUybXf2WU+89/m3QKOaWDXYCSSVos4DXKoAvf7/PBpg+A7jteW8l9w7cxLvM82NKKhaKaizeKd+88JjE5U8QPReVnTd3cPJvpoLtb/PMN/rezMP+k6CDk4F5yV08YG9mVo+z5cWDB8DPzH/U7dC+/CzE9+JH9jwaXfyc5QCG149qAc1r8etMnfJ5GElBI7c7z3+UWfPbV1E/Et4ctG/gQQcQdUZhvyEfKMf08QzmuzSLvw6G3FtzzIAZzbMsjyOYzUA3+vMrTIBO+XMpvr7R1tcHTXW6r+157qcA75oFgaCAVz5auF/XoGD+/MnoHNDUeWR97/xtkfj5z0wLaJ/b+usPDxpe3yjW3Lkfj1/6uAE49fr3Pe9ty1yzT3Lx8PnL4u0cP1o996GHuc+W8g2VZh+/UR1v7jLgOJeim3Hq2bHvdQGimfhfn5dlM4I6/g/I9hyzXzOA2CA7mtd3I77vQDNgvc85LoDnCITuz4XezU/bHnz74czvniK8gLF+7rqPHU4XPivjOfw9Vzff4fa4yACq528jAqidGfqeTBm4p3yz6J1GP9nkg0I1MxN7o4Fz05rz/c+fueXzCdTMEv8mkO/Z9x2XBHOoU4O6fr/1fND0f+Zbr7+9PHHla7/6Nhg+4G52pVc8y5N9v+B081O2OSe60psp22OaeMMgQMz8NHj5VofFfQ75+zz98oMkUBFxMH57hPHdtrl2mydczozwdAQ57Pk/bnfGZ4t/mygXDDD7h2l/fsD5ldg9ZM3sDrS9J9z9ICzwQeuaTwO8aGCLXx8D0G/zKQ188et7AR3bzouL377h19eoF3OTB0nR+KX9lBPP1PuBGI/R592K93nr+2786V9fq6SJ7BJwkduc2g+ss4Gy4NEP2r8dAF8eT8lcH5Cu90eLOVDw4fOHA0ic9TsWgFWzYaDrAbPm545gii39evYTePfXxw/vlfd8WtkCugpEFM4NnPMDuA3oZjs/jJm3ug+snF+BhCruvvfpAZtg/RoU00cwGdjeh7/mTYAOzo9OvHntI6/mFw5FgKUC0YjM898Gpk8EdpXjsZRbH6c4tVmx9LGotuSa0TWrvIyYnu2PCXPk7zbtHLbrWo+3zray1FaDdpCOry4BktKbfRwZ/YnVVkPbxs1U6qHGwkE6kkFN+lYqefpmJSqEUetE0G6NSccNlrE0Y7xKN/eo7CdXCgYGzu/xxvDum+01YzfsclR2Sz1zMd5XWgaWtocLupK14447XrZHMSx7irwXk0Uj5xrHTktJ2iaiLNGbUyGoKhKOjX3IoyixEm6MW9miegMPJ2hA/LjRA4hLV0Km3vYbZXuV2zJND0FP7FvxXm004TjFLXsfYZ1mXHdJDOiVujhafdcFOj1uC/ds031J4Ba8GuDlzWBdVMxvh0H1ir5dNkU4rhF6iWaqHiWuurKSIemO2zE2sZNqsesB7yY2wZgwjss+2hMbEb4tT2mI9NJtX5yF49Vw2Gp7qA69rcUiZiNJloUXlUkMKRjP2DYJRIRMt0dtaJrjWloTZ1Sy7gTGrAYlle6r+ymnli1ONK1TaEwQXx1Tg+hD52RCDg+UCN/3PuxyAwTLmr7rR5w/myHs3vRwuoe5LAgsnla9GVtysBMOW5UrCyhiJOEy+eJd4O9KIlnJFpk2R+mC3/ooYwSh7neC4eIcWemhrl9502jSM7tU9jscFoZoz3lVs9bpZb8Z1qHAb09k0uk5n6y7EB09gr9aYrDP4nG7XE/JvvV0Znlk1SBHCYY0V7BoEDdYTXdoPmodm1o57KawgY3UANlHUz8P6v68McNuysUTaWZSoPYefffv8iFYojfiUp3h1Sajl9HptnFwVtrfpAMMH0wBsrOB3UuOy569Udrvw513KY+ExOo6wQXQeb0mJIMu2rrilzHERbCGEFBeRqdom5XJcRj0cRVVlwMSVb2htvatHbahOeScbg0rtMX2RnIOjFESaWS/YnYb+KIPeLPpYZTsUMUVLgks7kx9U8UbmlijdyZJOKgoZJXSYb06H8hNnN1dQyF7kK28dGl9YZwkhz/xVGaqzQXobwZPdO5M5m6ugculzMhvaY/Y3vbZZgelRgwxxeEe9zAkVNsxZHrCJpijGUWc5G2FTtuboW5afJwlaitsPWydrsVIapfkXT/TjHrocaw2iWioB024rY+INdZnftlp1IDBgVWkp5UYUUwnGEk3nmudIW74hlW3xciwm4ikqKDXmauuUlBgNztav8Fxw1i8XVzp4IZitEfLmaYs1Y2YIoxMmMGYZJeTwOOEXNMoAyeHg1rikXa73Twf0jCayl12v45GfhP5J5xIEPS+x6HRP/pLc2D61XEizHGzElojB3l5P6F0topWo+YoJ2rHH6J7ovJpvkpsa9poPb0UeJ0c5ctUZO2VFXg2EdGO1fYSJ/qSmmEmge99e32BcKbcjtxaa9WINEotY25adS8pNwpDJjS2iTYoIIv4EBaKJXXS7kahMLmVyvHuwiYqmpxhLMQ02o/KVHUGtr0n1kQrpZWyJo+db+5+qix0E+/xcOxPtxvOnhxxGQT0IAi5BjDDLoRwv1Z13pdirzyRtUntC1YUDEYTwvx+IvZEmk3m6pA3XH85HKH7lsN53EHaEtv6S6jxqCtecAcjVRC5PzKSfORVVUFhNjllbblLnD7PT+nd7Vd+4p+h2BkPKCxM0QXHbFrcecvict0ombepWFRDdgDgt8SUTtNawEUGTft8hZMcLV67TdpZyEqjVpveFQNxzxOIROxZusxYiNni6yli+qXINkPn3rC93F5khlS6NjSxyEM41y7o1aSlOKzdMewqoRWnenoF2oc1ouIFIm8JHmuqKK1rBu/duLGaMsN1o0srgV5DrK3fpWUZ0kNChS0KbQjU3LdhTizbE7RLDhB3X6uB7A07Ilhi1grqfOseXyx+s98XcI8lG2FwmDT3zuWJdmh7paFqc+uyTLGzWPZcc+WdiChvmLIfLld6b+z1jk203IziIq0xMm5Aczltx9rXN0t+tU43411wGk0477tlGeBlTFUj2XEQ53RFWAuWviEvdIuMEFNr5hXij81kWGvsrusMRq2rGKLsW5Gm0nZ9cVWLxylUDxBTM+NVSiMHlasUGp9WwsG4WlasUfm6yxWo75kgYyW0q2hGP2TbEfbwRj+rvJXZh8A9Q1Qm9qF0AZnQhb1+8BzrVvcApNJ1H3cT3nOC3GpLtugO6TG/X/Eri4qpO8S8x0Tq0uZz++6b1W25b9vcTJdQ0Eyr7qQpxDTR6zQZT6vbbsUdVyqdEhCpL52txo0XwhRtPa6XKxjSZIa4Xk6VPlhrOto04n512RNwj5PLA+sEFroKAlLVFDeC1oqo9vh9vz3pDScQJdZAQk+wWwjDHVI0Uh/yCQ5SWbIjiFEIAubcMZlI9W2z0ppwGJyuwRn/cr8uISced+UhK043pGs6thcVJhwO/PlA0VEvJiIjhzuSgKL0fiZzOunPV2qr0Ge9VIrVSPNnveeWgRbm6UY9xwCdzgKTxSfH0XpiFVtT4cCeDS+DwR4Rdsnj8SCa062DcW2Qwj0Gi74VspHuMnE0mpoGQkbEnrlsNKIk6uMeH7RLpydGHrJOPFVt75yX16oUlhu6DJCEiNfHddLdODO4o9y0v9wL7o7iWHRgoKt2IbKRgQ7GhVK1NSaZ5t1DIa1HtsdTD7PLLjDJiSdEu5TFGq4cEw5JNN9zlWa2N16EEEhhxoI0I3lSPDCeXziNX8fnoV6G+DoPCqEKirgLJmnbMnoXJtYuhduxSGmIPAud7gtEK8ACqwx7cZzOdmGhKggf6yy7Ok0wf9/bEDTcNeq2lQxlaFw19nt2A03DBsGF+uS3t4xZTZgOxzVUB3TeDPjdoSwjMfYEozQdaJlwpcHUiB9PxWqVyCl+IsNTQN/g3injCxbSSzUtTsydISRraJtmFTAGlh1b2dTVkTkXG8Y1Q8g6+D501Bp5xcn2OjtElMjfdtz5Zt7IBrlw8L4tyxKNLeSiAKA+kxY7bg/NqZaHrZJpBrrLox6+Vz6h1fpd9vkjfac3ZF5WPhdI0oFgHbS4OKE2xVvBtEQrNSws2Esl7cIqT8oFI6/yWp5snfIcplKA68juGAobg+8n3RJDuBEvu8Z38MI9Vd0lr6okg7V4WKWlGyncRczuVJxx2UDDOjf4ltXAicDJOR6f2yWN3tfQjo235b7KBCy8BsOywq3iQsIylYdW3Hg2D9XkeRVse50QpdGkasMWu7qaivi4FvsbGdNNdNzqy7VBgDHqSkracFq57LVTlv7SctcOU9S0tibSqSOq1YX1fT7TWUfAcT+Dhqsb0T6A1IBOncgjaM1AWK+64tvaV92zoGT06rYBELJWVimvjr5zNpZNEoYDRWlOuduzSEkpGi7ozplYrs0NFooG7rMwfFEmttX2FxEwjFN4mlY7UXcD3C+jM+Hd7/AEbbr9KIcTeusRXKYjeLqe8ZOds0uqjRm2UOVBduNQM3gGz/Uiis+wr7FGY3jyyY0dLuvibsg3t7vHQpDdbzoc2955uVXolNZVjC1FrTQSKASI1BN9feohxRoo+JLaPi70e8j1LDc6K8WhDiXM9QO/IOAGY0RS5ne707ElVBhhUnEHeU7t0yi3M+nhguxW8DkUG3Vlo0GfhwxEuyJoNrDDMgl2YGSeyRGArCDRgjVsbJirC9/0FTGuXAeRaqWwTlx+rHnytGp5M6LYmpAiBsqOBlRtfLWGY2mfWMvlMTxLbqsocE1N6QY/bX1C1Pd7MzrUyrjv0ppAJc+YhkZlB9yYmgsPwSrWCulOiJEtmrObsz3JBrE51mUfNC29P+/3aQBDVrq+TudCjg1hMtMw1DJ2wHiaXBN+kDr5KTzfvYYZoWS/WavnoWGIzeBv2z7rcrXRJMPfMYWaxE6yUyML4Q/x7ga7htVplRfF2/NyqInGANCzVncR3V8ulLClxaUPN/HJFzTHCCvGukSw5wtK42tOKmch5KwObADHtEDCK3i/clZHwjFHOILH8Hg65hecCs4SIe7ZWNGCw42SV5dVubsup7ZHecPpVqhnaVLOZ2wPXVftzatdOFVTm5CvLmmnS9nmz6UaIk7aH7FSVrArwaH8vlG9wbC96KL6WFsrKu91tKZX29Avd9s01XL2pNMuuUpbzMYYt41Rrtit90ukgWOOd47jjtoOnjlRfneu7EYz+yQj/Xa6Q8uQ0mub5lJFOV8qtNyV2/560fvjvmu4q2nLfZ04u22TS4CqHM9+qRt+vxJIutQteo/4JO05rl3WR5Xfs3iZG3ZMGvVRvE7ZjQVwlG+NfUHt0qQ+nTj0HMKjrwxuwl4xZ+L5Gjm2lYSZYVnuoTtapQmydQ2oT7ogAyydbOmq63ccfmsDjr0UJ+6qs3e0vo+t7FaWjXJk2XmBVHS7izS0J2Jzs9WYUty1WFydUVdwHcMIIxvAkAub5DLbTiqqUciVwHfHfTaapjygyIDe+E3Onh1neSHP7ZS2TuUkhT4QygE92NZQrTfbXbWpjnc+RNfJmUZMvbXDvjwXQ+m45sXhRNHruiXtU3yu4L1Q1kuzl1pZKULVb000PTTTVlmh5y1mtKfYxbzck+DS4yAMtnkc7/JkvzvTUZQ1rY7Bq25/3fnjtq6Li2ETrD6Mp5BMd6U7RC2qkHQ76MI+6CSYVC1qVVyzg1dvK2sXWztkdb66ZSjf3GmKeNkl8o19242VJQ25E1SgNdjRbmn5nnIdeaLCNTNCvAjTJZzIJ/5U6gWu0HV0Yt0DJ57jk9kKq43tqQPqpN1dGbiZV0SN1t5tevI2m3PWTCZ94VF/nSxhMJpRNWNMViqBNouymSZDLRkxlDPtVuSuldF7VOLIZbNsezBWA8axstlORviMUnAxR6mbFxFelreOISLM6XqoVlPpePS+huhLxSkjJdoXyqbNLXuLuR0HuEDOFlULEd6tTTpUagPD9pXVdYcagWK7lEnSCm2z/vYOCbY2oHZWFRPiXGxlwqbLBS1SSgBtXwVeJQjV1Ok6X6oqW+ZSL+prNS2dEFFxyZ74bXVbO1bOF20lZLfWpt08L2vMB3OVImTtiuoO/YAF7fIkZYUZyzaZ2DjhOceWFM6QdV+iVSFhOYEZV8mLO/NO5L3CWWndKPVJiUUVI6ptpOWGflqVimqsTuyVJg1og9ydsjvdsUisAqnTDrye++Rht42ufIlxE5/umwSjEVCsSueKiaINwU5sRXxLcXB81fb47tDqy2ynbjLclpsbqmdpjSOCOEH+YCKUJJ7p3dFfT6djpnplFeSpsd0Y1na8x7lsNK1yWbGNhQ/+iHhkRVoK5nCo7ZqO74YjvSts/l7Wt0nXjk1wB4N2jVlUYKSYdMl2WD0OmO74OA8tt9khwIA4WyZzudt0uUnUOH1Oc+2KK1xKq6kjeOzKlociaiUwA1zBvAqxbMz2KUmp5YYqILpElHh5v68MY9JsZKLlvWZoOXpleP/u06CWPDHGjGLoPAXUQ+vtVvkaQHN7c439kcbWU5OCUeVIl9bGNxIwt9zO3N4TQ+xKbulGX2lkfbR21b4K+MYu09RsHLu95REKgeralgUOML8X1od2aAEbhgrdlRooo0KezC8ZOYJZsrd5RhGboaytq7VTLyS/hUVph10jaltyWgTLEu7Ehtyu5K715KRDdnDjBU2gSHCaOAdE4EtjfVSlpcdhZ6kc75fpOPU1tTIiHwlqBBsuzVVQD5B9wNygVUIfKim8Dm0l8/c6ZCJCMTj4RihiwABPgGe6x0ldL5UrxRHW7XyKVKm46Lx0dXfBtgA6sck+o5BQtXxbKWDuWkNczE1dfVz6lCVtVisscgCZ2NkNfcQurE1OU46c1dFGWekuM+pwlW1WKBSXVhpD0HsH7Ze3Bj8nKWPnBQOqapM0p4HMPcORa5+XL5MjcWAGcq1q6EFz74BtuYOYWInCnJ20di4X0SYXzyVyCpWE3sekWBsUFJKj06U3jM500fDsrg12RxEtMFzN/FvYSLiNgiZ+5aW1mPSVb2eDcKrV8soEsKcSTrpytvZ1rHQ14y631DoDMLsusVK8Zoji01f/WhFFXl4NUj6kGaoIp4sV1xyYeJ3zBt+VCNQ1RVtsUORaoPyE5i5z2eTIZQyMs5mMXOGV93hJVuPGzxp/oK9RMuZys4JA2yV7c7rQMdRWsB2w2BF1dQMCvJGmd6F3ivilfQqQ0olz/s7cpTNM4btO22CuaaUhkxbKziY9TNxthag8XlY3fAnT9kgBLn6ilZG7Kv2N9yaqz06nkQvSTD07iuwFhSOedYtwb4W8t+q017bSChDcnFru7g05jt1Zw6ybOVRh4TRYV/QHl91dzs14bNnyeB0F+ZJoTa0clDqhKfp0cT3icC7tW+5fJzBXb/3NpaTtDYft9ZawLhDuWwzpkTFvdSW1ZTScZSr2PDFTQRf78ratMQcbz3Lm4lyhbXOipj21EUdjCilOqGD1zFOnybf4FMU76WjjJa+eN1QpIGZqqRvITrzBOpZrLy6JXBpuN29FH9dOaUFHNsLDnDa9qb2Z6Q0QQEt291yMrly+ir0BkGpquYWkVGyPcVLCgWDtlZs3nXp0rPkpxjichwFJouMhK6F+qlQoOE3H9ohtEWxT7RAFGUnibF5NBJGWhLBypitJtt2wW5L1qm9zOjh1JcI5SdZJt+q+G3kF6TlzyRRDataw3fv1lV9Zy4mXQtQcb+6NpxUpNDpyK3KNWxIAIBGkP+fXaZfgFyKtCgqx9uqk8nXE7hypjoTtxpT3TWwPt8pW8KNvqa0lKorSDvuIcgvQAk5XxzIImQXAl5/o7HgpESFA5Lx0JDwlsHZEetwnXUPB2cQucwLKo5HfU5yXuSrk6Euy9NXmoNGbPUeM12xERRtRrtFyH+E9IGq38NDk0/pum2zZyDu5Idd7KhkgkkpxBhKgQTav1tGK1sgKuQ77407emqf66iXhiPtt3S23JcRJFC4Je8TiCBo5nPf45aRUV2dHJ4cqrukTJbve6B/HQq46rsyqY3EDB5X0yiq7o4qzvYJtSKkWSDMtD8fbOkZzHQz1mSOEN6kuKgB3kIbeTxgAIYniY9TjmTo92sK+jldCYAKCsMKHFWlFkNHjWJo2tbXrzIt2bFcB1qX71pdF+SYTJUSxPlvvcPLmGFEtpBGMAIbFzc8PypJOXbLz+PuhkFQ3ppZeUsH70B1FLbpeU5+r7y7d+wmdwhpWlYabyxdWkFcoZ9Bq7G7Nat21O1oclwh3Ge9GeS4FO441LB0Iy6XJhPY0hoA72WoMmTrc2lY/NubaAF2E662rgJ+xBjmnUm1H0W219MItfL3xQ8CR2uEqs46XZEeRONdHbw/2HOyAd5cWtBw54pgfoX5XWbiXbmq7sgS2lTvx1FDeFbS1Gml0NJPNZR2c69oatpQ6Ykk7aYbEWql4JejtPdt2sufCBXfJeqjiW0e1W4lMjaHeKTycERp8svqrihu5FLEIKOeWla48deXG3D1NKIbWvRRiZskteQrhalnSjE2/S632pnRLc8d2KuWskeziZlJBQ4ASIDu0EzCKZLCeVPhK26X7ZBiQaXdcrnYb0tkVZAupFgNrx7K/ehqGVsfM6xWxXSe52zgGQt2wm7enQwzBTizSiUqd5xf1LJnGdb1cdragT6x83ugcN7YNGLhG+161jldYenPZSTUyndWpravMNZAU5k9dLTmnXRd2V0uCCaXFkiO594z+jJz7CxU4p5sh9WpxXKfqfVCXqHqyiS1w9njvhYhLNeO8Q7n8jjGBQtpNqWTTtJ3ssbHKxMAEQ3MyAtT8dGaQ7EiVBa+VhHWOkNGGV33M7tEQq9RO5+Tc77m9W3aXq+pgJm72ZL/DOz3tkPttm3ZLbTIZW6Wt1veW+gUV8s4hdk18KbmgJLYoUlQIGm32auZ6VyU9Xxr/VpSH5rRpE2xrdlYHGUplJF63NBpKlPmzpp0M7pZhCZ4zJGqHLI3zyFbqu50v3RjJRvo29ihmmIQ21Jl8ZjYMle3vloqj8coLrldjMCCL0KRjm+RLixw9vze6GyMsuVOo84e1Luyg07VW9AKx82xQR6ObMkJ3lRNGyefk5G6JVAg6p3TyqdzATSsUO9kgbXZC2hSZ8JNcuJlYAXqGF7e1Wcm0Xih2SCT4cZkfehQ5WviNcQazrKVqcy9tI9vxTLKsDpi5zSvj2vjnPSi9uyuVdkvj5ggmWO8QoGZSStTtEstaLUnINcbESxW4d3qiHfhkwspygi98uxxNhmH++c8PHz/MX0B4+9v9j99sgeHHV69eMm/+glBkYyQF1jikvQzA/O6RSEBjNrUiCJykaN9DCRf3ccqlAxRBaBcPkID0VoCbuR5N4SvKx32bDKi3P9EXPVCau0Drf36ofdv7/PhD/efvNLaF3bSfH1/G873F42MEzT+RxeObSv8kPnz8H7Y9P3rZfv70r+ef/v8LLHRjYDj6gjw2lUUTzx+1e//cQpN24X87+3zix1da/nj7nNf7ajBRv3216u2zMk/JQPZf/w9gpqFTSDgAAA==
````

<!-- toaster:generated:end -->

<!-- rci-capsule:v1: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

…(truncated)
